configurationengine/source/scripts/popup.js
author m2lahtel
Tue, 10 Aug 2010 14:29:28 +0300
changeset 3 e7e0ae78773e
permissions -rw-r--r--
ConE 1.2.11 release
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     1
/**
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     2
 * Copyright (c)2005-2009 Matt Kruse (javascripttoolbox.com)
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     3
 * 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     4
 * Dual licensed under the MIT and GPL licenses. 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     5
 * This basically means you can use this code however you want for
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     6
 * free, but don't claim to have written it yourself!
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     7
 * Donations always accepted: http://www.JavascriptToolbox.com/donate/
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     8
 * 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
     9
 * Please do not link to the .js files on javascripttoolbox.com from
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    10
 * your site. Copy the files locally to your server instead.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    11
 * 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    12
 */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    13
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    14
/*   UTIL FUNCTIONS                                                    */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    15
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    16
var Util = {'$VERSION':1.06};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    17
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    18
// Util functions - these are GLOBAL so they
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    19
// look like built-in functions.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    20
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    21
// Determine if an object is an array
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    22
function isArray(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    23
	return (o!=null && typeof(o)=="object" && typeof(o.length)=="number" && (o.length==0 || defined(o[0])));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    24
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    25
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    26
// Determine if an object is an Object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    27
function isObject(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    28
	return (o!=null && typeof(o)=="object" && defined(o.constructor) && o.constructor==Object && !defined(o.nodeName));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    29
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    30
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    31
// Determine if a reference is defined
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    32
function defined(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    33
	return (typeof(o)!="undefined");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    34
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    35
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    36
// Iterate over an array, object, or list of items and run code against each item
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    37
// Similar functionality to Perl's map() function
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    38
function map(func) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    39
	var i,j,o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    40
	var results = [];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    41
	if (typeof(func)=="string") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    42
		func = new Function('$_',func);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    43
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    44
	for (i=1; i<arguments.length; i++) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    45
		o = arguments[i];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    46
		if (isArray(o)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    47
			for (j=0; j<o.length; j++) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    48
				results[results.length] = func(o[j]);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    49
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    50
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    51
		else if (isObject(o)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    52
			for (j in o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    53
				results[results.length] = func(o[j]);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    54
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    55
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    56
		else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    57
			results[results.length] = func(o);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    58
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    59
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    60
	return results;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    61
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    62
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    63
// Set default values in an object if they are undefined
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    64
function setDefaultValues(o,values) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    65
	if (!defined(o) || o==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    66
		o = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    67
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    68
	if (!defined(values) || values==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    69
		return o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    70
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    71
	for (var val in values) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    72
		if (!defined(o[val])) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    73
			o[val] = values[val];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    74
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    75
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    76
	return o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    77
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    78
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    79
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    80
/*   DEFAULT OBJECT PROTOTYPE ENHANCEMENTS                             */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    81
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    82
// These functions add useful functionality to built-in objects
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    83
Array.prototype.contains = function(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    84
	var i,l;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    85
	if (!(l = this.length)) { return false; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    86
	for (i=0; i<l; i++) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    87
		if (o==this[i]) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    88
			return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    89
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    90
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    91
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    92
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    93
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    94
/*   DOM FUNCTIONS                                                     */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    95
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    96
var DOM = (function() { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    97
	var dom = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    98
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
    99
	// Get a parent tag with a given nodename
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   100
	dom.getParentByTagName = function(o,tagNames) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   101
		if(o==null) { return null; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   102
		if (isArray(tagNames)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   103
			tagNames = map("return $_.toUpperCase()",tagNames);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   104
			while (o=o.parentNode) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   105
				if (o.nodeName && tagNames.contains(o.nodeName)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   106
					return o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   107
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   108
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   109
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   110
		else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   111
			tagNames = tagNames.toUpperCase();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   112
			while (o=o.parentNode) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   113
				if (o.nodeName && tagNames==o.nodeName) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   114
					return o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   115
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   116
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   117
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   118
		return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   119
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   120
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   121
	// Remove a node from its parent
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   122
	dom.removeNode = function(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   123
		if (o!=null && o.parentNode && o.parentNode.removeChild) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   124
			// First remove all attributes which are func references, to avoid memory leaks
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   125
			for (var i in o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   126
				if (typeof(o[i])=="function") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   127
					o[i] = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   128
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   129
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   130
			o.parentNode.removeChild(o);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   131
			return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   132
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   133
		return false;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   134
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   135
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   136
	// Get the outer width in pixels of an object, including borders, padding, and margin
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   137
	dom.getOuterWidth = function(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   138
		if (defined(o.offsetWidth)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   139
			return o.offsetWidth;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   140
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   141
		return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   142
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   143
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   144
	// Get the outer height in pixels of an object, including borders, padding, and margin
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   145
	dom.getOuterHeight = function(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   146
		if (defined(o.offsetHeight)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   147
			return o.offsetHeight;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   148
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   149
		return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   150
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   151
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   152
	// Resolve an item, an array of items, or an object of items
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   153
	dom.resolve = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   154
		var results = new Array();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   155
		var i,j,o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   156
		for (var i=0; i<arguments.length; i++) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   157
			var o = arguments[i];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   158
			if (o==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   159
				if (arguments.length==1) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   160
					return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   161
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   162
				results[results.length] = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   163
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   164
			else if (typeof(o)=='string') {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   165
				if (document.getElementById) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   166
					o = document.getElementById(o);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   167
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   168
				else if (document.all) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   169
					o = document.all[o];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   170
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   171
				if (arguments.length==1) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   172
					return o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   173
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   174
				results[results.length] = o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   175
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   176
			else if (isArray(o)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   177
				for (j=0; j<o.length; j++) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   178
					results[results.length] = o[j];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   179
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   180
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   181
			else if (isObject(o)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   182
				for (j in o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   183
					results[results.length] = o[j];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   184
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   185
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   186
			else if (arguments.length==1) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   187
				return o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   188
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   189
			else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   190
				results[results.length] = o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   191
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   192
	  }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   193
	  return results;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   194
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   195
	dom.$ = dom.resolve;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   196
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   197
	return dom;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   198
})();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   199
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   200
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   201
/*   CSS FUNCTIONS                                                     */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   202
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   203
var CSS = (function(){
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   204
	var css = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   205
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   206
	// Convert an RGB string in the form "rgb (255, 255, 255)" to "#ffffff"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   207
	css.rgb2hex = function(rgbString) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   208
		if (typeof(rgbString)!="string" || !defined(rgbString.match)) { return null; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   209
		var result = rgbString.match(/^\s*rgb\s*\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*/);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   210
		if (result==null) { return rgbString; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   211
		var rgb = +result[1] << 16 | +result[2] << 8 | +result[3];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   212
		var hex = "";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   213
		var digits = "0123456789abcdef";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   214
		while(rgb!=0) { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   215
			hex = digits.charAt(rgb&0xf)+hex; 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   216
			rgb>>>=4; 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   217
		} 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   218
		while(hex.length<6) { hex='0'+hex; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   219
		return "#" + hex;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   220
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   221
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   222
	// Convert hyphen style names like border-width to camel case like borderWidth
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   223
	css.hyphen2camel = function(property) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   224
		if (!defined(property) || property==null) { return null; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   225
		if (property.indexOf("-")<0) { return property; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   226
		var str = "";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   227
		var c = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   228
		var l = property.length;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   229
		for (var i=0; i<l; i++) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   230
			c = property.charAt(i);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   231
			str += (c!="-")?c:property.charAt(++i).toUpperCase();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   232
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   233
		return str;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   234
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   235
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   236
	// Determine if an object or class string contains a given class.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   237
	css.hasClass = function(obj,className) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   238
		if (!defined(obj) || obj==null || !RegExp) { return false; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   239
		var re = new RegExp("(^|\\s)" + className + "(\\s|$)");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   240
		if (typeof(obj)=="string") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   241
			return re.test(obj);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   242
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   243
		else if (typeof(obj)=="object" && obj.className) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   244
			return re.test(obj.className);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   245
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   246
		return false;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   247
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   248
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   249
	// Add a class to an object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   250
	css.addClass = function(obj,className) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   251
		if (typeof(obj)!="object" || obj==null || !defined(obj.className)) { return false; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   252
		if (obj.className==null || obj.className=='') { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   253
			obj.className = className; 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   254
			return true; 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   255
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   256
		if (css.hasClass(obj,className)) { return true; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   257
		obj.className = obj.className + " " + className;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   258
		return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   259
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   260
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   261
	// Remove a class from an object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   262
	css.removeClass = function(obj,className) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   263
		if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   264
		if (!css.hasClass(obj,className)) { return false; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   265
		var re = new RegExp("(^|\\s+)" + className + "(\\s+|$)");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   266
		obj.className = obj.className.replace(re,' ');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   267
		return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   268
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   269
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   270
	// Fully replace a class with a new one
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   271
	css.replaceClass = function(obj,className,newClassName) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   272
		if (typeof(obj)!="object" || obj==null || !defined(obj.className) || obj.className==null) { return false; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   273
		css.removeClass(obj,className);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   274
		css.addClass(obj,newClassName);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   275
		return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   276
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   277
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   278
	// Get the currently-applied style of an object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   279
	css.getStyle = function(o, property) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   280
		if (o==null) { return null; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   281
		var val = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   282
		var camelProperty = css.hyphen2camel(property);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   283
		// Handle "float" property as a special case
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   284
		if (property=="float") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   285
			val = css.getStyle(o,"cssFloat");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   286
			if (val==null) { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   287
				val = css.getStyle(o,"styleFloat"); 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   288
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   289
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   290
		else if (o.currentStyle && defined(o.currentStyle[camelProperty])) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   291
			val = o.currentStyle[camelProperty];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   292
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   293
		else if (window.getComputedStyle) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   294
			val = window.getComputedStyle(o,null).getPropertyValue(property);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   295
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   296
		else if (o.style && defined(o.style[camelProperty])) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   297
			val = o.style[camelProperty];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   298
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   299
		// For color values, make the value consistent across browsers
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   300
		// Convert rgb() colors back to hex for consistency
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   301
		if (/^\s*rgb\s*\(/.test(val)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   302
			val = css.rgb2hex(val);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   303
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   304
		// Lowercase all #hex values
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   305
		if (/^#/.test(val)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   306
			val = val.toLowerCase();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   307
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   308
		return val;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   309
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   310
	css.get = css.getStyle;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   311
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   312
	// Set a style on an object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   313
	css.setStyle = function(o, property, value) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   314
		if (o==null || !defined(o.style) || !defined(property) || property==null || !defined(value)) { return false; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   315
		if (property=="float") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   316
			o.style["cssFloat"] = value;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   317
			o.style["styleFloat"] = value;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   318
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   319
		else if (property=="opacity") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   320
			o.style['-moz-opacity'] = value;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   321
			o.style['-khtml-opacity'] = value;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   322
			o.style.opacity = value;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   323
			if (defined(o.style.filter)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   324
				o.style.filter = "alpha(opacity=" + value*100 + ")";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   325
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   326
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   327
		else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   328
			o.style[css.hyphen2camel(property)] = value;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   329
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   330
		return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   331
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   332
	css.set = css.setStyle;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   333
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   334
	// Get a unique ID which doesn't already exist on the page
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   335
	css.uniqueIdNumber=1000;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   336
	css.createId = function(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   337
		if (defined(o) && o!=null && defined(o.id) && o.id!=null && o.id!="") { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   338
			return o.id;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   339
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   340
		var id = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   341
		while (id==null || document.getElementById(id)!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   342
			id = "ID_"+(css.uniqueIdNumber++);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   343
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   344
		if (defined(o) && o!=null && (!defined(o.id)||o.id=="")) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   345
			o.id = id;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   346
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   347
		return id;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   348
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   349
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   350
	return css;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   351
})();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   352
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   353
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   354
/*   EVENT FUNCTIONS                                                   */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   355
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   356
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   357
var Event = (function(){
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   358
	var ev = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   359
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   360
	// Resolve an event using IE's window.event if necessary
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   361
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   362
	ev.resolve = function(e) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   363
		if (!defined(e) && defined(window.event)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   364
			e = window.event;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   365
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   366
		return e;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   367
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   368
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   369
	// Add an event handler to a function
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   370
	// Note: Don't use 'this' within functions added using this method, since
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   371
	// the attachEvent and addEventListener models differ.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   372
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   373
	ev.add = function( obj, type, fn, capture ) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   374
		if (obj.addEventListener) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   375
			obj.addEventListener( type, fn, capture );
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   376
			return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   377
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   378
		else if (obj.attachEvent) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   379
			obj.attachEvent( "on"+type, fn );
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   380
			return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   381
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   382
		return false;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   383
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   384
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   385
	// Get the mouse position of an event
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   386
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   387
	// PageX/Y, where they exist, are more reliable than ClientX/Y because 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   388
	// of some browser bugs in Opera/Safari
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   389
	ev.getMouseX = function(e) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   390
		e = ev.resolve(e);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   391
		if (defined(e.pageX)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   392
			return e.pageX;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   393
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   394
		if (defined(e.clientX)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   395
			return e.clientX+Screen.getScrollLeft();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   396
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   397
		return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   398
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   399
	ev.getMouseY = function(e) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   400
		e = ev.resolve(e);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   401
		if (defined(e.pageY)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   402
			return e.pageY;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   403
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   404
		if (defined(e.clientY)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   405
			return e.clientY+Screen.getScrollTop();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   406
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   407
		return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   408
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   409
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   410
	// Stop the event from bubbling up to parent elements.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   411
	// Two method names map to the same function
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   412
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   413
	ev.cancelBubble = function(e) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   414
		e = ev.resolve(e);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   415
		if (typeof(e.stopPropagation)=="function") { e.stopPropagation(); } 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   416
		if (defined(e.cancelBubble)) { e.cancelBubble = true; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   417
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   418
	ev.stopPropagation = ev.cancelBubble;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   419
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   420
	// Prevent the default handling of the event to occur
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   421
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   422
	ev.preventDefault = function(e) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   423
		e = ev.resolve(e);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   424
		if (typeof(e.preventDefault)=="function") { e.preventDefault(); } 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   425
		if (defined(e.returnValue)) { e.returnValue = false; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   426
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   427
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   428
	return ev;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   429
})();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   430
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   431
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   432
/*   SCREEN FUNCTIONS                                                  */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   433
/* ******************************************************************* */
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   434
var Screen = (function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   435
	var screen = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   436
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   437
	// Get a reference to the body
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   438
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   439
	screen.getBody = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   440
		if (document.body) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   441
			return document.body;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   442
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   443
		if (document.getElementsByTagName) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   444
			var bodies = document.getElementsByTagName("BODY");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   445
			if (bodies!=null && bodies.length>0) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   446
				return bodies[0];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   447
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   448
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   449
		return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   450
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   451
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   452
	// Get the amount that the main document has scrolled from top
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   453
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   454
	screen.getScrollTop = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   455
		if (document.documentElement && defined(document.documentElement.scrollTop) && document.documentElement.scrollTop>0) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   456
			return document.documentElement.scrollTop;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   457
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   458
		if (document.body && defined(document.body.scrollTop)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   459
			return document.body.scrollTop;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   460
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   461
		return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   462
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   463
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   464
	// Get the amount that the main document has scrolled from left
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   465
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   466
	screen.getScrollLeft = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   467
		if (document.documentElement && defined(document.documentElement.scrollLeft) && document.documentElement.scrollLeft>0) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   468
			return document.documentElement.scrollLeft;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   469
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   470
		if (document.body && defined(document.body.scrollLeft)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   471
			return document.body.scrollLeft;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   472
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   473
		return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   474
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   475
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   476
	// Util function to default a bad number to 0
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   477
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   478
	screen.zero = function(n) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   479
		return (!defined(n) || isNaN(n))?0:n;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   480
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   481
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   482
	// Get the width of the entire document
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   483
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   484
	screen.getDocumentWidth = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   485
		var width = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   486
		var body = screen.getBody();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   487
		if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   488
		    var rightMargin = parseInt(CSS.get(body,'marginRight'),10) || 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   489
		    var leftMargin = parseInt(CSS.get(body,'marginLeft'), 10) || 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   490
			width = Math.max(body.offsetWidth + leftMargin + rightMargin, document.documentElement.clientWidth);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   491
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   492
		else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   493
			width =  Math.max(body.clientWidth, body.scrollWidth);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   494
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   495
		if (isNaN(width) || width==0) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   496
			width = screen.zero(self.innerWidth);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   497
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   498
		return width;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   499
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   500
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   501
	// Get the height of the entire document
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   502
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   503
	screen.getDocumentHeight = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   504
		var body = screen.getBody();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   505
		var innerHeight = (defined(self.innerHeight)&&!isNaN(self.innerHeight))?self.innerHeight:0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   506
		if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   507
		    var topMargin = parseInt(CSS.get(body,'marginTop'),10) || 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   508
		    var bottomMargin = parseInt(CSS.get(body,'marginBottom'), 10) || 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   509
			return Math.max(body.offsetHeight + topMargin + bottomMargin, document.documentElement.clientHeight, document.documentElement.scrollHeight, screen.zero(self.innerHeight));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   510
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   511
		return Math.max(body.scrollHeight, body.clientHeight, screen.zero(self.innerHeight));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   512
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   513
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   514
	// Get the width of the viewport (viewable area) in the browser window
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   515
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   516
	screen.getViewportWidth = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   517
		if (document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   518
			return document.documentElement.clientWidth;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   519
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   520
		else if (document.compatMode && document.body) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   521
			return document.body.clientWidth;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   522
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   523
		return screen.zero(self.innerWidth);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   524
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   525
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   526
	// Get the height of the viewport (viewable area) in the browser window
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   527
	// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   528
	screen.getViewportHeight = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   529
		if (!window.opera && document.documentElement && (!document.compatMode || document.compatMode=="CSS1Compat")) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   530
			return document.documentElement.clientHeight;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   531
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   532
		else if (document.compatMode && !window.opera && document.body) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   533
			return document.body.clientHeight;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   534
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   535
		return screen.zero(self.innerHeight);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   536
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   537
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   538
	return screen;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   539
})();var Sort = (function(){
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   540
	var sort = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   541
	sort.AlphaNumeric = function(a,b) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   542
		if (a==b) { return 0; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   543
		if (a<b) { return -1; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   544
		return 1;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   545
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   546
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   547
	sort.Default = sort.AlphaNumeric;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   548
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   549
	sort.NumericConversion = function(val) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   550
		if (typeof(val)!="number") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   551
			if (typeof(val)=="string") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   552
				val = parseFloat(val.replace(/,/g,''));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   553
				if (isNaN(val) || val==null) { val=0; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   554
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   555
			else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   556
				val = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   557
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   558
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   559
		return val;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   560
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   561
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   562
	sort.Numeric = function(a,b) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   563
		return sort.NumericConversion(a)-sort.NumericConversion(b);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   564
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   565
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   566
	sort.IgnoreCaseConversion = function(val) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   567
		if (val==null) { val=""; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   568
		return (""+val).toLowerCase();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   569
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   570
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   571
	sort.IgnoreCase = function(a,b) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   572
		return sort.AlphaNumeric(sort.IgnoreCaseConversion(a),sort.IgnoreCaseConversion(b));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   573
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   574
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   575
	sort.CurrencyConversion = function(val) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   576
		if (typeof(val)=="string") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   577
			val = val.replace(/^[^\d\.]/,'');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   578
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   579
		return sort.NumericConversion(val);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   580
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   581
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   582
	sort.Currency = function(a,b) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   583
		return sort.Numeric(sort.CurrencyConversion(a),sort.CurrencyConversion(b));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   584
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   585
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   586
	sort.DateConversion = function(val) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   587
		// inner util function to parse date formats
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   588
		function getdate(str) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   589
			// inner util function to convert 2-digit years to 4
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   590
			function fixYear(yr) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   591
				yr = +yr;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   592
				if (yr<50) { yr += 2000; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   593
				else if (yr<100) { yr += 1900; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   594
				return yr;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   595
			};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   596
			var ret;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   597
			// YYYY-MM-DD
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   598
			if (ret=str.match(/(\d{2,4})-(\d{1,2})-(\d{1,2})/)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   599
				return (fixYear(ret[1])*10000) + (ret[2]*100) + (+ret[3]);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   600
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   601
			// MM/DD/YY[YY] or MM-DD-YY[YY]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   602
			if (ret=str.match(/(\d{1,2})[\/-](\d{1,2})[\/-](\d{2,4})/)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   603
				return (fixYear(ret[3])*10000) + (ret[1]*100) + (+ret[2]);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   604
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   605
			return 99999999; // So non-parsed dates will be last, not first
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   606
		};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   607
		return getdate(val);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   608
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   609
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   610
	sort.Date = function(a,b) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   611
		return sort.Numeric(sort.DateConversion(a),sort.DateConversion(b));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   612
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   613
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   614
	return sort;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   615
})();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   616
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   617
var Position = (function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   618
	// Resolve a string identifier to an object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   619
	// ========================================
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   620
	function resolveObject(s) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   621
		if (document.getElementById && document.getElementById(s)!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   622
			return document.getElementById(s);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   623
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   624
		else if (document.all && document.all[s]!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   625
			return document.all[s];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   626
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   627
		else if (document.anchors && document.anchors.length && document.anchors.length>0 && document.anchors[0].x) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   628
			for (var i=0; i<document.anchors.length; i++) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   629
				if (document.anchors[i].name==s) { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   630
					return document.anchors[i]
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   631
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   632
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   633
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   634
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   635
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   636
	var pos = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   637
	pos.$VERSION = 1.0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   638
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   639
	// Set the position of an object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   640
	// =============================
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   641
	pos.set = function(o,left,top) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   642
		if (typeof(o)=="string") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   643
			o = resolveObject(o);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   644
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   645
		if (o==null || !o.style) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   646
			return false;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   647
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   648
		
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   649
		// If the second parameter is an object, it is assumed to be the result of getPosition()
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   650
		if (typeof(left)=="object") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   651
			var pos = left;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   652
			left = pos.left;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   653
			top = pos.top;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   654
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   655
		
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   656
		o.style.left = left + "px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   657
		o.style.top = top + "px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   658
		return true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   659
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   660
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   661
	// Retrieve the position and size of an object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   662
	// ===========================================
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   663
	pos.get = function(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   664
		var fixBrowserQuirks = true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   665
			// If a string is passed in instead of an object ref, resolve it
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   666
		if (typeof(o)=="string") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   667
			o = resolveObject(o);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   668
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   669
		
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   670
		if (o==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   671
			return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   672
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   673
		
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   674
		var left = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   675
		var top = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   676
		var width = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   677
		var height = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   678
		var parentNode = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   679
		var offsetParent = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   680
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   681
		
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   682
		offsetParent = o.offsetParent;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   683
		var originalObject = o;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   684
		var el = o; // "el" will be nodes as we walk up, "o" will be saved for offsetParent references
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   685
		while (el.parentNode!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   686
			el = el.parentNode;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   687
			if (el.offsetParent==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   688
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   689
			else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   690
				var considerScroll = true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   691
				/*
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   692
				In Opera, if parentNode of the first object is scrollable, then offsetLeft/offsetTop already 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   693
				take its scroll position into account. If elements further up the chain are scrollable, their 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   694
				scroll offsets still need to be added in. And for some reason, TR nodes have a scrolltop value
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   695
				which must be ignored.
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   696
				*/
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   697
				if (fixBrowserQuirks && window.opera) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   698
					if (el==originalObject.parentNode || el.nodeName=="TR") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   699
						considerScroll = false;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   700
					}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   701
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   702
				if (considerScroll) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   703
					if (el.scrollTop && el.scrollTop>0) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   704
						top -= el.scrollTop;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   705
					}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   706
					if (el.scrollLeft && el.scrollLeft>0) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   707
						left -= el.scrollLeft;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   708
					}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   709
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   710
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   711
			// If this node is also the offsetParent, add on the offsets and reset to the new offsetParent
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   712
			if (el == offsetParent) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   713
				left += o.offsetLeft;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   714
				if (el.clientLeft && el.nodeName!="TABLE") { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   715
					left += el.clientLeft;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   716
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   717
				top += o.offsetTop;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   718
				if (el.clientTop && el.nodeName!="TABLE") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   719
					top += el.clientTop;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   720
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   721
				o = el;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   722
				if (o.offsetParent==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   723
					if (o.offsetLeft) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   724
						left += o.offsetLeft;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   725
					}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   726
					if (o.offsetTop) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   727
						top += o.offsetTop;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   728
					}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   729
				}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   730
				offsetParent = o.offsetParent;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   731
			}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   732
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   733
		
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   734
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   735
		if (originalObject.offsetWidth) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   736
			width = originalObject.offsetWidth;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   737
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   738
		if (originalObject.offsetHeight) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   739
			height = originalObject.offsetHeight;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   740
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   741
		
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   742
		return {'left':left, 'top':top, 'width':width, 'height':height
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   743
				};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   744
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   745
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   746
	// Retrieve the position of an object's center point
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   747
	// =================================================
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   748
	pos.getCenter = function(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   749
		var c = this.get(o);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   750
		if (c==null) { return null; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   751
		c.left = c.left + (c.width/2);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   752
		c.top = c.top + (c.height/2);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   753
		return c;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   754
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   755
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   756
	return pos;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   757
})();// CLASS CONSTRUCTOR
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   758
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   759
var Popup = function(div, options) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   760
	this.div = defined(div)?div:null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   761
	this.index = Popup.maxIndex++;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   762
	this.ref = "Popup.objects["+this.index+"]";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   763
	Popup.objects[this.index] = this;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   764
	// Store a reference to the DIV by id, also
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   765
	if (typeof(this.div)=="string") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   766
		Popup.objectsById[this.div] = this;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   767
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   768
	if (defined(this.div) && this.div!=null && defined(this.div.id)) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   769
		Popup.objectsById[this.div.id] = this.div.id;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   770
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   771
	// Apply passed-in options
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   772
	if (defined(options) && options!=null && typeof(options)=="object") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   773
		for (var i in options) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   774
			this[i] = options[i];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   775
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   776
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   777
	return this;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   778
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   779
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   780
// CLASS PROPERTIES
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   781
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   782
// Index of popup objects, to maintain a global reference if necessary
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   783
Popup.maxIndex = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   784
Popup.objects = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   785
Popup.objectsById = {};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   786
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   787
// The z-index value that popups will start at
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   788
Popup.minZIndex = 101;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   789
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   790
// Class names to assign to other objects
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   791
Popup.screenClass = "PopupScreen";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   792
Popup.iframeClass = "PopupIframe";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   793
Popup.screenIframeClass = "PopupScreenIframe";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   794
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   795
// CLASS METHODS
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   796
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   797
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   798
// Hide all currently-visible non-modal dialogs
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   799
Popup.hideAll = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   800
	for (var i in Popup.objects) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   801
		var p = Popup.objects[i];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   802
		if (!p.modal && p.autoHide) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   803
			p.hide();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   804
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   805
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   806
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   807
// Catch global events as a trigger to hide auto-hide popups
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   808
Event.add(document, "mouseup", Popup.hideAll, false);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   809
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   810
// A simple class method to show a popup without creating an instance
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   811
Popup.show = function(divObject, referenceObject, position, options, modal) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   812
	var popup;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   813
	if (defined(divObject)) { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   814
		popup = new Popup(divObject);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   815
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   816
	else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   817
		popup = new Popup();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   818
		popup.destroyDivOnHide = true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   819
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   820
	if (defined(referenceObject)) { popup.reference = DOM.resolve(referenceObject); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   821
	if (defined(position)) { popup.position = position; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   822
	if (defined(options) && options!=null && typeof(options)=="object") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   823
		for (var i in options) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   824
			popup[i] = options[i];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   825
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   826
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   827
	if (typeof(modal)=="boolean") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   828
		popup.modal = modal;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   829
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   830
	popup.destroyObjectsOnHide = true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   831
	popup.show();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   832
	return popup;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   833
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   834
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   835
// A simple class method to show a modal popup
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   836
Popup.showModal = function(divObject, referenceObject, position, options) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   837
	Popup.show(divObject, referenceObject, position, options, true);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   838
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   839
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   840
// A method to retrieve a popup object based on a div ID
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   841
Popup.get = function(divId) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   842
	if (defined(Popup.objectsById[divId])) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   843
		return Popup.objectsById[divId];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   844
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   845
	return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   846
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   847
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   848
// A method to hide a popup based on a div id
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   849
Popup.hide = function(divId) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   850
	var popup = Popup.get(divId);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   851
	if (popup!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   852
		popup.hide();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   853
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   854
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   855
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   856
// PROTOTYPE PROPERTIES
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   857
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   858
Popup.prototype.content = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   859
Popup.prototype.className = "PopupDiv";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   860
Popup.prototype.style = null; // Styles to be applied to the DIV
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   861
Popup.prototype.width = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   862
Popup.prototype.height = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   863
Popup.prototype.top = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   864
Popup.prototype.left = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   865
Popup.prototype.offsetLeft = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   866
Popup.prototype.offsetTop = 0;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   867
Popup.prototype.constrainToScreen = true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   868
Popup.prototype.autoHide = true;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   869
Popup.prototype.useIframeShim = false; /*@cc_on @*/ /*@if (@_win32) {Popup.prototype.useIframeShim = true;} @end @*/ 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   870
Popup.prototype.iframe = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   871
Popup.prototype.position = null; // vertical: "above top center bottom below", horizontal: "adjacent-left,left,center,right,adjacent-right"
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   872
Popup.prototype.reference = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   873
Popup.prototype.modal = false;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   874
Popup.prototype.destroyDivOnHide = false;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   875
Popup.prototype.destroyObjectsOnHide = false;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   876
Popup.prototype.screen = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   877
Popup.prototype.screenIframeShim = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   878
Popup.prototype.screenOpacity=.4;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   879
Popup.prototype.screenColor="#cccccc";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   880
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   881
// INSTANCE METHODS
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   882
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   883
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   884
// Show the popup
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   885
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   886
Popup.prototype.show = function(options, modal) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   887
	this.modal = this.modal || (typeof(modal)=="boolean" && modal);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   888
	if (defined(options) && options!=null && typeof(options)=="object") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   889
		for (var i in options) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   890
			this[i] = options[i];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   891
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   892
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   893
	this.div = DOM.resolve(this.div);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   894
	CSS.setStyle(this.div,'position','absolute');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   895
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   896
	// If there is no div pre-defined to use, create one
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   897
	if (this.div==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   898
		this.div = this.createDiv();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   899
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   900
	if (this.content!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   901
		this.div.innerHTML = this.content;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   902
		this.content = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   903
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   904
	if (this.className!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   905
		this.div.className = this.className;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   906
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   907
	if (this.style!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   908
		this.applyStyle();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   909
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   910
	if (this.width!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   911
		this.div.style.width = this.width+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   912
		this.div.style.overflowX="auto";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   913
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   914
	if (this.height!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   915
		this.div.style.height = this.height+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   916
		this.div.style.overflowY="auto";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   917
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   918
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   919
	// Do the actual display - this is a separate method so display transitions can be implemented
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   920
	this.transition();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   921
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   922
	// Make sure clicks on the DIV don't bubble up to the document
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   923
	this.div.onclick = function(e) { 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   924
		Event.cancelBubble(Event.resolve(e));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   925
	};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   926
	this.div.onmouseup = this.div.onclick;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   927
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   928
	// Focus to the DIV if possible	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   929
	if (this.modal && this.div.focus) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   930
		this.div.focus();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   931
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   932
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   933
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   934
// Show the popup but make it modal
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   935
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   936
Popup.prototype.transition = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   937
	if (this.modal) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   938
		this.addScreen();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   939
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   940
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   941
	// Make the DIV displayed but hidden so its size can be measured
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   942
	CSS.setStyle(this.div,'visibility','hidden');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   943
	CSS.setStyle(this.div,'display','block');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   944
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   945
	// Position the popup
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   946
	this.setPosition();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   947
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   948
	// Add the shim if necessary	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   949
	if (this.useIframeShim) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   950
		this.addIframeShim();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   951
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   952
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   953
	// Make sure the DIV is higher than the shim
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   954
	this.div.style.zIndex = Popup.minZIndex++;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   955
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   956
	CSS.setStyle(this.div,'display','block');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   957
	CSS.setStyle(this.div,'visibility','visible');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   958
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   959
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   960
// Show the popup but make it modal
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   961
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   962
Popup.prototype.showModal = function(options) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   963
	this.show(options,true);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   964
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   965
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   966
// Apply user styles to the DIV
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   967
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   968
Popup.prototype.applyStyle = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   969
	if (this.div!=null && this.style!=null && typeof(this.style)=="object") {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   970
		for (var i in this.style) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   971
			this.div.style[i] = this.style[i];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   972
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   973
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   974
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   975
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   976
// Hide the popup
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   977
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   978
Popup.prototype.hide = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   979
	// If this was a temp object creating on-the-fly, then remove objects from the DOM so
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   980
	// The document doesn't get littered with extra objects
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   981
	if (this.destroyDivOnHide) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   982
		DOM.removeNode(this.div);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   983
		this.div = null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   984
		delete Popup.objects[this.id];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   985
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   986
	else if (this.div!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   987
		CSS.setStyle(this.div,'display','none');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   988
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   989
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   990
	if (this.destroyObjectsOnHide) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   991
		DOM.removeNode(this.iframe);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   992
		DOM.removeNode(this.screen);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   993
		DOM.removeNode(this.screenIframeShim);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   994
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   995
	else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   996
		if (this.iframe!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   997
			this.iframe.style.display = "none";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   998
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
   999
		if (this.screen!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1000
			this.screen.style.display = "none";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1001
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1002
		if (this.screenIframeShim!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1003
			this.screenIframeShim.style.display = "none";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1004
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1005
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1006
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1007
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1008
// Util funcs for position
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1009
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1010
Popup.prototype.setTop = function(top) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1011
	this.div.style.top = top+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1012
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1013
Popup.prototype.setLeft = function(left) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1014
	this.div.style.left = left+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1015
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1016
Popup.prototype.getTop = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1017
	return parseInt(CSS.getStyle(this.div,"top"),10);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1018
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1019
Popup.prototype.getLeft = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1020
	return parseInt(CSS.getStyle(this.div,"left"),10);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1021
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1022
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1023
// All the logic to position the popup based on various criteria
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1024
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1025
Popup.prototype.setPosition = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1026
	if (this.position!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1027
		var m = this.position.match(/^(\S+)\s+(\S+)/); 
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1028
		if (m!=null && m.length==3) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1029
			var v = m[1];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1030
			var h = m[2];
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1031
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1032
			var ref = this.reference;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1033
			if (ref==null) { ref = Screen.getBody(); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1034
			var p = Position.get(ref);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1035
			var refTop = p.top;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1036
			var refLeft = p.left;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1037
			var refWidth = DOM.getOuterWidth(ref);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1038
			var refHeight = DOM.getOuterHeight(ref);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1039
			
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1040
			var width = DOM.getOuterWidth(this.div);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1041
			var height = DOM.getOuterHeight(this.div);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1042
			
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1043
			var scrollLeft = Screen.getScrollLeft();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1044
			var scrollTop = Screen.getScrollTop();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1045
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1046
			// Set vertical position relative to reference object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1047
			if (v=="above") { this.setTop(refTop-height+this.offsetTop); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1048
			else if (v=="top") { this.setTop(refTop+this.offsetTop); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1049
			else if (v=="center") { this.setTop(refTop+(refHeight/2)-(height/2)+this.offsetTop); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1050
			else if (v=="bottom") { this.setTop(refTop+refHeight-height+this.offsetTop); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1051
			else if (v=="below") { this.setTop(refTop+refHeight+this.offsetTop); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1052
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1053
			// Set horizontal position relative to reference object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1054
			if (h=="adjacent-left") { this.setLeft(refLeft-width+this.offsetLeft); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1055
			else if (h=="left") { this.setLeft(refLeft+this.offsetLeft); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1056
			else if (h=="center") { this.setLeft(refLeft+(refWidth/2)-(width/2)+this.offsetLeft); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1057
			else if (h=="right") { this.setLeft(refLeft+refWidth-width+this.offsetLeft); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1058
			else if (h=="adjacent-right") { this.setLeft(refLeft+refWidth+this.offsetLeft); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1059
		}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1060
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1061
	else if (this.top==null && this.left==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1062
		this.center();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1063
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1064
	else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1065
		if (this.top==null) { this.top=0; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1066
		if (this.left==null) { this.left=0; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1067
		this.div.style.top = this.top+this.offsetTop+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1068
		this.div.style.left = this.left+this.offsetLeft+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1069
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1070
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1071
	// Re-position to make sure it stays on the screen
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1072
	if (this.constrainToScreen) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1073
		this.fitToScreen();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1074
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1075
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1076
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1077
// Append an object to the body
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1078
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1079
Popup.prototype.appendToBody = function(o) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1080
	var body = Screen.getBody();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1081
	if (body && body.appendChild) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1082
		body.appendChild(o);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1083
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1084
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1085
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1086
// Create a new DIV object to be used for a popup
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1087
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1088
Popup.prototype.createDiv = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1089
	if (document.createElement) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1090
		var d = document.createElement("DIV");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1091
		d.style.position="absolute";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1092
		d.style.display="block";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1093
		d.style.visibility="hidden";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1094
		this.appendToBody(d);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1095
		return d;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1096
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1097
	alert("ERROR: Couldn't create DIV element in Popup.prototype.createDiv()");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1098
	return null;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1099
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1100
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1101
// Create a new IFRAME object to be used behind the popup
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1102
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1103
Popup.prototype.createIframe = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1104
	if (document.createElement) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1105
		var i= document.createElement("IFRAME");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1106
		i.style.position="absolute";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1107
		i.style.display="block";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1108
		i.style.visibility="hidden";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1109
		i.style.background="none";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1110
		this.appendToBody(i);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1111
		return i;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1112
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1113
	else {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1114
		alert("ERROR: Couldn't create IFRAME object in Popup.prototype.createIframe()");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1115
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1116
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1117
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1118
// Add an IFRAME shim for the DIV
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1119
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1120
Popup.prototype.addIframeShim = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1121
	if (this.iframe==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1122
		this.iframe = this.createIframe();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1123
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1124
	this.iframe.className = Popup.iframeClass;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1125
	CSS.setStyle(this.iframe,'top',this.getTop()+"px");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1126
	CSS.setStyle(this.iframe,'left',this.getLeft()+"px");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1127
	CSS.setStyle(this.iframe,'width',DOM.getOuterWidth(this.div) + "px");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1128
	CSS.setStyle(this.iframe,'height',DOM.getOuterHeight(this.div) + "px");
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1129
	CSS.setStyle(this.iframe,'zIndex',Popup.minZIndex++);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1130
	CSS.setStyle(this.iframe,'opacity',0);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1131
	CSS.setStyle(this.iframe,'visibility','visible');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1132
	CSS.setStyle(this.iframe,'display','block');
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1133
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1134
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1135
// Create a "screen" to make a popup modal
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1136
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1137
Popup.prototype.addScreen = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1138
	if (this.screen==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1139
		this.screen = this.createDiv();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1140
		this.screen.style.top="0px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1141
		this.screen.style.left="0px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1142
		this.screen.style.backgroundColor = this.screenColor;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1143
		this.screen.className=Popup.screenClass;;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1144
		CSS.setStyle(this.screen,"opacity",this.screenOpacity);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1145
		this.screen.onclick = function(e) { Event.cancelBubble(Event.resolve(e)); }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1146
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1147
	if (this.screenIframeShim==null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1148
		this.screenIframeShim = this.createIframe();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1149
		this.screenIframeShim.style.top="0px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1150
		this.screenIframeShim.style.left="0px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1151
		this.screenIframeShim.className=Popup.screenIframeClass;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1152
		CSS.setStyle(this.screenIframeShim,"opacity",0);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1153
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1154
	this.screen.style.width = Screen.getDocumentWidth()+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1155
	this.screen.style.height = Screen.getDocumentHeight()+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1156
	this.screenIframeShim.style.width = Screen.getDocumentWidth()+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1157
	this.screenIframeShim.style.height = Screen.getDocumentHeight()+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1158
	this.screenIframeShim.style.zIndex = Popup.minZIndex++;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1159
	this.screenIframeShim.style.visibility="visible";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1160
	this.screenIframeShim.style.display="block";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1161
	this.screen.style.zIndex = Popup.minZIndex++;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1162
	this.screen.style.visibility="visible";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1163
	this.screen.style.display="block";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1164
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1165
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1166
// Re-position the DIV so it stays on the screen
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1167
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1168
Popup.prototype.fitToScreen = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1169
	var width = DOM.getOuterWidth(this.div);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1170
	var height = DOM.getOuterHeight(this.div);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1171
	var top = this.getTop();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1172
	var left = this.getLeft();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1173
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1174
	var clientWidth = Screen.getViewportWidth();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1175
	var clientHeight = Screen.getViewportHeight();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1176
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1177
	var scrollLeft = Screen.getScrollLeft();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1178
	var scrollTop = Screen.getScrollTop();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1179
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1180
	if (top-scrollTop+height>clientHeight) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1181
		top = top - ((top+height) - (scrollTop+clientHeight));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1182
		this.div.style.top = top + "px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1183
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1184
	if (left-scrollLeft+width>clientWidth) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1185
		left = left - ((left+width) - (scrollLeft+clientWidth));
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1186
		this.div.style.left = left + "px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1187
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1188
	if (top<scrollTop) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1189
		this.div.style.top=scrollTop+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1190
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1191
	if (left<scrollLeft) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1192
		this.div.style.left=scrollLeft+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1193
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1194
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1195
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1196
// Center the DIV object
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1197
// --------------------------------------------------------------------
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1198
Popup.prototype.center = function() {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1199
	var left = DOM.getOuterWidth(this.div);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1200
	var top = DOM.getOuterHeight(this.div);
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1201
	if (isNaN(left)) { left=0; }
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1202
	if (isNaN(top)) { top=0; }	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1203
	var clientW = Screen.getViewportWidth();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1204
	var clientH = Screen.getViewportHeight();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1205
	if (clientW!=null && clientH!=null) {
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1206
		top = (clientH-top)/2;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1207
		left = (clientW-left)/2;
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1208
	}
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1209
	top += Screen.getScrollTop();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1210
	left += Screen.getScrollLeft();
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1211
	
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1212
	this.div.style.top = top+this.offsetTop+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1213
	this.div.style.left = left+this.offsetLeft+"px";
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1214
};
e7e0ae78773e ConE 1.2.11 release
m2lahtel
parents:
diff changeset
  1215