diff options
Diffstat (limited to 'framework/Web/Javascripts/js/prado.js')
-rw-r--r-- | framework/Web/Javascripts/js/prado.js | 2584 |
1 files changed, 335 insertions, 2249 deletions
diff --git a/framework/Web/Javascripts/js/prado.js b/framework/Web/Javascripts/js/prado.js index 394d5eeb..d80f984d 100644 --- a/framework/Web/Javascripts/js/prado.js +++ b/framework/Web/Javascripts/js/prado.js @@ -1,2260 +1,346 @@ - -var Prototype = { -Version: '1.50', -ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)', -emptyFunction: function() {}, -K: function(x) {return x} -} -var Class = { -create: function() { -return function() { -this.initialize.apply(this, arguments); -} -} -} -var Abstract = new Object(); -Object.extend = function(destination, source) { -for (var property in source) { -destination[property] = source[property]; -} -return destination; -} -Object.inspect = function(object) { -try { -if (object == undefined) return 'undefined'; -if (object == null) return 'null'; -return object.inspect ? object.inspect() : object.toString(); -} catch (e) { -if (e instanceof RangeError) return '...'; -throw e; -} -} -Function.prototype.bind = function() { -var __method = this, args = $A(arguments), object = args.shift(); -return function() { -return __method.apply(object, args.concat($A(arguments))); -} -} -Function.prototype.bindAsEventListener = function(object) { -var __method = this; -return function(event) { -return __method.call(object, event || window.event); -} -} -Object.extend(Number.prototype, { -toColorPart: function() { -var digits = this.toString(16); -if (this < 16) return '0' + digits; -return digits; -}, -succ: function() { -return this + 1; -}, -times: function(iterator) { -$R(0, this, true).each(iterator); -return this; -} -}); -var Try = { -these: function() { -var returnValue; -for (var i = 0; i < arguments.length; i++) { -var lambda = arguments[i]; -try { -returnValue = lambda(); -break; -} catch (e) {} -} -return returnValue; -} -} -var PeriodicalExecuter = Class.create(); -PeriodicalExecuter.prototype = { -initialize: function(callback, frequency) { -this.callback = callback; -this.frequency = frequency; -this.currentlyExecuting = false; -this.registerCallback(); -}, -registerCallback: function() { -setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); -}, -onTimerEvent: function() { -if (!this.currentlyExecuting) { -try { -this.currentlyExecuting = true; -this.callback(); -} finally { -this.currentlyExecuting = false; -} -} -} -} -Function.prototype.bindEvent = function() -{ -var __method = this, args = $A(arguments), object = args.shift(); -return function(event) -{ -return __method.apply(object, [event || window.event].concat(args)); -} -} -Class.extend = function(base, definition) -{ -var component = Class.create(); -Object.extend(component.prototype, base.prototype); -if(definition) -Object.extend(component.prototype, definition); -return component; -} -Object.extend(String.prototype, { -gsub: function(pattern, replacement) { -var result = '', source = this, match; -replacement = arguments.callee.prepareReplacement(replacement); -while (source.length > 0) { -if (match = source.match(pattern)) { -result += source.slice(0, match.index); -result += (replacement(match) || '').toString(); -source= source.slice(match.index + match[0].length); -} else { -result += source, source = ''; -} -} -return result; -}, -sub: function(pattern, replacement, count) { -replacement = this.gsub.prepareReplacement(replacement); -count = count === undefined ? 1 : count; -return this.gsub(pattern, function(match) { -if (--count < 0) return match[0]; -return replacement(match); -}); -}, -scan: function(pattern, iterator) { -this.gsub(pattern, iterator); -return this; -}, -truncate: function(length, truncation) { -length = length || 30; -truncation = truncation === undefined ? '...' : truncation; -return this.length > length ? -this.slice(0, length - truncation.length) + truncation : this; -}, -strip: function() { -return this.replace(/^\s+/, '').replace(/\s+$/, ''); -}, -stripTags: function() { -return this.replace(/<\/?[^>]+>/gi, ''); -}, -stripScripts: function() { -return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); -}, -extractScripts: function() { -var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); -var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); -return (this.match(matchAll) || []).map(function(scriptTag) { -return (scriptTag.match(matchOne) || ['', ''])[1]; -}); -}, -evalScripts: function() { -return this.extractScripts().map(function(script) { return eval(script) }); -}, -escapeHTML: function() { -var div = document.createElement('div'); -var text = document.createTextNode(this); -div.appendChild(text); -return div.innerHTML; -}, -unescapeHTML: function() { -var div = document.createElement('div'); -div.innerHTML = this.stripTags(); -return div.childNodes[0] ? div.childNodes[0].nodeValue : ''; -}, -toQueryParams: function() { -var pairs = this.match(/^\??(.*)$/)[1].split('&'); -return pairs.inject({}, function(params, pairString) { -var pair = pairString.split('='); -params[pair[0]] = pair[1]; -return params; -}); -}, -toArray: function() { -return this.split(''); -}, -camelize: function() { -var oStringList = this.split('-'); -if (oStringList.length == 1) return oStringList[0]; -var camelizedString = this.indexOf('-') == 0 -? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1) -: oStringList[0]; -for (var i = 1, len = oStringList.length; i < len; i++) { -var s = oStringList[i]; -camelizedString += s.charAt(0).toUpperCase() + s.substring(1); -} -return camelizedString; -}, -inspect: function() { -return "'" + this.replace(/\\/g, '\\\\').replace(/'/g, '\\\'') + "'"; -} -}); -String.prototype.gsub.prepareReplacement = function(replacement) { -if (typeof replacement == 'function') return replacement; -var template = new Template(replacement); -return function(match) { return template.evaluate(match) }; -} -String.prototype.parseQuery = String.prototype.toQueryParams; -var Template = Class.create(); -Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; -Template.prototype = { -initialize: function(template, pattern) { -this.template = template.toString(); -this.pattern= pattern || Template.Pattern; -}, -evaluate: function(object) { -return this.template.gsub(this.pattern, function(match) { -var before = match[1]; -if (before == '\\') return match[2]; -return before + (object[match[3]] || '').toString(); -}); -} -} -Object.extend(String.prototype, { -pad : function(side, len, chr) { -if (!chr) chr = ' '; -var s = this; -var left = side.toLowerCase()=='left'; -while (s.length<len) s = left? chr + s : s + chr; -return s; -}, -padLeft : function(len, chr) { -return this.pad('left',len,chr); -}, -padRight : function(len, chr) { -return this.pad('right',len,chr); -}, -zerofill : function(len) { -return this.padLeft(len,'0'); -}, -trim : function() { -return this.replace(/^\s+|\s+$/g,''); -}, -trimLeft : function() { -return this.replace(/^\s+/,''); -}, -trimRight : function() { -return this.replace(/\s+$/,''); -}, -toFunction : function() -{ -var commands = this.split(/\./); -var command = window; -commands.each(function(action) -{ -if(command[new String(action)]) -command=command[new String(action)]; -}); -if(typeof(command) == "function") -return command; -else -{ -if(typeof Logger != "undefined") -Logger.error("Missing function", this); -throw new Error("Missing function '"+this+"'"); -} -}, -toInteger : function() -{ -var exp = /^\s*[-\+]?\d+\s*$/; -if (this.match(exp) == null) -return null; -var num = parseInt(this, 10); -return (isNaN(num) ? null : num); -}, -toDouble : function(decimalchar) -{ -if(this.length <= 0) return null; -decimalchar = decimalchar || "."; -var exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\" + decimalchar + "(\\d+))?\\s*$"); -var m = this.match(exp); -if (m == null) -return null; -m[1] = m[1] || ""; -m[2] = m[2] || "0"; -m[4] = m[4] || "0"; -var cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4]; -var num = parseFloat(cleanInput); -return (isNaN(num) ? null : num); -}, -toCurrency : function(groupchar, digits, decimalchar) -{ -groupchar = groupchar || ","; -decimalchar = decimalchar || "."; -digits = typeof(digits) == "undefined" ? 2 : digits; -var exp = new RegExp("^\\s*([-\\+])?(((\\d+)\\" + groupchar + ")*)(\\d+)" -+ ((digits > 0) ? "(\\" + decimalchar + "(\\d{1," + digits + "}))?" : "") -+ "\\s*$"); -var m = this.match(exp); -if (m == null) -return null; -var intermed = m[2] + m[5] ; -var cleanInput = m[1] + intermed.replace( -new RegExp("(\\" + groupchar + ")", "g"), "") -+ ((digits > 0) ? "." + m[7] : ""); -var num = parseFloat(cleanInput); -return (isNaN(num) ? null : num); -}, -toDate : function(format) -{ -return Date.SimpleParse(this, format); -} -}); -var $break= new Object(); -var $continue = new Object(); -var Enumerable = { -each: function(iterator) { -var index = 0; -try { -this._each(function(value) { -try { -iterator(value, index++); -} catch (e) { -if (e != $continue) throw e; -} -}); -} catch (e) { -if (e != $break) throw e; -} -}, -all: function(iterator) { -var result = true; -this.each(function(value, index) { -result = result && !!(iterator || Prototype.K)(value, index); -if (!result) throw $break; -}); -return result; -}, -any: function(iterator) { -var result = true; -this.each(function(value, index) { -if (result = !!(iterator || Prototype.K)(value, index)) -throw $break; -}); -return result; -}, -collect: function(iterator) { -var results = []; -this.each(function(value, index) { -results.push(iterator(value, index)); -}); -return results; -}, -detect: function (iterator) { -var result; -this.each(function(value, index) { -if (iterator(value, index)) { -result = value; -throw $break; -} -}); -return result; -}, -findAll: function(iterator) { -var results = []; -this.each(function(value, index) { -if (iterator(value, index)) -results.push(value); -}); -return results; -}, -grep: function(pattern, iterator) { -var results = []; -this.each(function(value, index) { -var stringValue = value.toString(); -if (stringValue.match(pattern)) -results.push((iterator || Prototype.K)(value, index)); -}) -return results; -}, -include: function(object) { -var found = false; -this.each(function(value) { -if (value == object) { -found = true; -throw $break; -} -}); -return found; -}, -inject: function(memo, iterator) { -this.each(function(value, index) { -memo = iterator(memo, value, index); -}); -return memo; -}, -invoke: function(method) { -var args = $A(arguments).slice(1); -return this.collect(function(value) { -return value[method].apply(value, args); -}); -}, -max: function(iterator) { -var result; -this.each(function(value, index) { -value = (iterator || Prototype.K)(value, index); -if (result == undefined || value >= result) -result = value; -}); -return result; -}, -min: function(iterator) { -var result; -this.each(function(value, index) { -value = (iterator || Prototype.K)(value, index); -if (result == undefined || value < result) -result = value; -}); -return result; -}, -partition: function(iterator) { -var trues = [], falses = []; -this.each(function(value, index) { -((iterator || Prototype.K)(value, index) ? -trues : falses).push(value); -}); -return [trues, falses]; -}, -pluck: function(property) { -var results = []; -this.each(function(value, index) { -results.push(value[property]); -}); -return results; -}, -reject: function(iterator) { -var results = []; -this.each(function(value, index) { -if (!iterator(value, index)) -results.push(value); -}); -return results; -}, -sortBy: function(iterator) { -return this.collect(function(value, index) { -return {value: value, criteria: iterator(value, index)}; -}).sort(function(left, right) { -var a = left.criteria, b = right.criteria; -return a < b ? -1 : a > b ? 1 : 0; -}).pluck('value'); -}, -toArray: function() { -return this.collect(Prototype.K); -}, -zip: function() { -var iterator = Prototype.K, args = $A(arguments); -if (typeof args.last() == 'function') -iterator = args.pop(); -var collections = [this].concat(args).map($A); -return this.map(function(value, index) { -return iterator(collections.pluck(index)); -}); -}, -inspect: function() { -return '#<Enumerable:' + this.toArray().inspect() + '>'; -} -} -Object.extend(Enumerable, { -map: Enumerable.collect, -find:Enumerable.detect, -select:Enumerable.findAll, -member:Enumerable.include, -entries: Enumerable.toArray -}); -var $A = Array.from = function(iterable) { -if (!iterable) return []; -if (iterable.toArray) { -return iterable.toArray(); -} else { -var results = []; -for (var i = 0; i < iterable.length; i++) -results.push(iterable[i]); -return results; -} -} -Object.extend(Array.prototype, Enumerable); -if (!Array.prototype._reverse) -Array.prototype._reverse = Array.prototype.reverse; -Object.extend(Array.prototype, { -_each: function(iterator) { -for (var i = 0; i < this.length; i++) -iterator(this[i]); -}, -clear: function() { -this.length = 0; -return this; -}, -first: function() { -return this[0]; -}, -last: function() { -return this[this.length - 1]; -}, -compact: function() { -return this.select(function(value) { -return value != undefined || value != null; -}); -}, -flatten: function() { -return this.inject([], function(array, value) { -return array.concat(value && value.constructor == Array ? -value.flatten() : [value]); -}); -}, -without: function() { -var values = $A(arguments); -return this.select(function(value) { -return !values.include(value); -}); -}, -indexOf: function(object) { -for (var i = 0; i < this.length; i++) -if (this[i] == object) return i; -return -1; -}, -reverse: function(inline) { -return (inline !== false ? this : this.toArray())._reverse(); -}, -inspect: function() { -return '[' + this.map(Object.inspect).join(', ') + ']'; -} -}); -var Hash = { -_each: function(iterator) { -for (var key in this) { -var value = this[key]; -if (typeof value == 'function') continue; -var pair = [key, value]; -pair.key = key; -pair.value = value; -iterator(pair); -} -}, -keys: function() { -return this.pluck('key'); -}, -values: function() { -return this.pluck('value'); -}, -merge: function(hash) { -return $H(hash).inject($H(this), function(mergedHash, pair) { -mergedHash[pair.key] = pair.value; -return mergedHash; -}); -}, -toQueryString: function() { -return this.map(function(pair) { -return pair.map(encodeURIComponent).join('='); -}).join('&'); -}, -inspect: function() { -return '#<Hash:{' + this.map(function(pair) { -return pair.map(Object.inspect).join(': '); -}).join(', ') + '}>'; -} -} -function $H(object) { -var hash = Object.extend({}, object || {}); -Object.extend(hash, Enumerable); -Object.extend(hash, Hash); -return hash; -} -ObjectRange = Class.create(); -Object.extend(ObjectRange.prototype, Enumerable); -Object.extend(ObjectRange.prototype, { -initialize: function(start, end, exclusive) { -this.start = start; -this.end = end; -this.exclusive = exclusive; -}, -_each: function(iterator) { -var value = this.start; -do { -iterator(value); -value = value.succ(); -} while (this.include(value)); -}, -include: function(value) { -if (value < this.start) -return false; -if (this.exclusive) -return value < this.end; -return value <= this.end; -} -}); -var $R = function(start, end, exclusive) { -return new ObjectRange(start, end, exclusive); -} -function $() { -var results = [], element; -for (var i = 0; i < arguments.length; i++) { -element = arguments[i]; -if (typeof element == 'string') -element = document.getElementById(element); -results.push(Element.extend(element)); -} -return results.length < 2 ? results[0] : results; -} -document.getElementsByClassName = function(className, parentElement) { -var children = ($(parentElement) || document.body).getElementsByTagName('*'); -return $A(children).inject([], function(elements, child) { -if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)"))) -elements.push(Element.extend(child)); -return elements; -}); -} -if (!window.Element) -var Element = new Object(); -Element.extend = function(element) { -if (!element) return; -if (_nativeExtensions) return element; -if (!element._extended && element.tagName && element != window) { -var methods = Element.Methods, cache = Element.extend.cache; -for (property in methods) { -var value = methods[property]; -if (typeof value == 'function') -element[property] = cache.findOrStore(value); -} -} -element._extended = true; -return element; -} -Element.extend.cache = { -findOrStore: function(value) { -return this[value] = this[value] || function() { -return value.apply(null, [this].concat($A(arguments))); -} -} -} -Element.Methods = { -visible: function(element) { -return $(element).style.display != 'none'; -}, -toggle: function() { -for (var i = 0; i < arguments.length; i++) { -var element = $(arguments[i]); -Element[Element.visible(element) ? 'hide' : 'show'](element); -} -}, -hide: function() { -for (var i = 0; i < arguments.length; i++) { -var element = $(arguments[i]); -element.style.display = 'none'; -} -}, -show: function() { -for (var i = 0; i < arguments.length; i++) { -var element = $(arguments[i]); -element.style.display = ''; -} -}, -remove: function(element) { -element = $(element); -element.parentNode.removeChild(element); -}, -update: function(element, html) { -$(element).innerHTML = html.stripScripts(); -setTimeout(function() {html.evalScripts()}, 10); -}, -replace: function(element, html) { -element = $(element); -if (element.outerHTML) { -element.outerHTML = html.stripScripts(); -} else { -var range = element.ownerDocument.createRange(); -range.selectNodeContents(element); -element.parentNode.replaceChild( -range.createContextualFragment(html.stripScripts()), element); -} -setTimeout(function() {html.evalScripts()}, 10); -}, -getHeight: function(element) { -element = $(element); -return element.offsetHeight; -}, -classNames: function(element) { -return new Element.ClassNames(element); -}, -hasClassName: function(element, className) { -if (!(element = $(element))) return; -return Element.classNames(element).include(className); -}, -addClassName: function(element, className) { -if (!(element = $(element))) return; -return Element.classNames(element).add(className); -}, -removeClassName: function(element, className) { -if (!(element = $(element))) return; -return Element.classNames(element).remove(className); -}, -cleanWhitespace: function(element) { -element = $(element); -for (var i = 0; i < element.childNodes.length; i++) { -var node = element.childNodes[i]; -if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) -Element.remove(node); -} -}, -empty: function(element) { -return $(element).innerHTML.match(/^\s*$/); -}, -childOf: function(element, ancestor) { -element = $(element), ancestor = $(ancestor); -while (element = element.parentNode) -if (element == ancestor) return true; -return false; -}, -scrollTo: function(element) { -element = $(element); -var x = element.x ? element.x : element.offsetLeft, -y = element.y ? element.y : element.offsetTop; -window.scrollTo(x, y); -}, -getStyle: function(element, style) { -element = $(element); -var value = element.style[style.camelize()]; -if (!value) { -if (document.defaultView && document.defaultView.getComputedStyle) { -var css = document.defaultView.getComputedStyle(element, null); -value = css ? css.getPropertyValue(style) : null; -} else if (element.currentStyle) { -value = element.currentStyle[style.camelize()]; -} -} -if (window.opera && ['left', 'top', 'right', 'bottom'].include(style)) -if (Element.getStyle(element, 'position') == 'static') value = 'auto'; -return value == 'auto' ? null : value; -}, -setStyle: function(element, style) { -element = $(element); -for (var name in style) -element.style[name.camelize()] = style[name]; -}, -getDimensions: function(element) { -element = $(element); -if (Element.getStyle(element, 'display') != 'none') -return {width: element.offsetWidth, height: element.offsetHeight}; -var els = element.style; -var originalVisibility = els.visibility; -var originalPosition = els.position; -els.visibility = 'hidden'; -els.position = 'absolute'; -els.display = ''; -var originalWidth = element.clientWidth; -var originalHeight = element.clientHeight; -els.display = 'none'; -els.position = originalPosition; -els.visibility = originalVisibility; -return {width: originalWidth, height: originalHeight}; -}, -makePositioned: function(element) { -element = $(element); -var pos = Element.getStyle(element, 'position'); -if (pos == 'static' || !pos) { -element._madePositioned = true; -element.style.position = 'relative'; -if (window.opera) { -element.style.top = 0; -element.style.left = 0; -} -} -}, -undoPositioned: function(element) { -element = $(element); -if (element._madePositioned) { -element._madePositioned = undefined; -element.style.position = -element.style.top = -element.style.left = -element.style.bottom = -element.style.right = ''; -} -}, -makeClipping: function(element) { -element = $(element); -if (element._overflow) return; -element._overflow = element.style.overflow; -if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden') -element.style.overflow = 'hidden'; -}, -undoClipping: function(element) { -element = $(element); -if (element._overflow) return; -element.style.overflow = element._overflow; -element._overflow = undefined; -} -} -Object.extend(Element, Element.Methods); -var _nativeExtensions = false; -if(!HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) { -var HTMLElement = {} -HTMLElement.prototype = document.createElement('div').__proto__; -} -Element.addMethods = function(methods) { -Object.extend(Element.Methods, methods || {}); -if(typeof HTMLElement != 'undefined') { -var methods = Element.Methods, cache = Element.extend.cache; -for (property in methods) { -var value = methods[property]; -if (typeof value == 'function') -HTMLElement.prototype[property] = cache.findOrStore(value); -} -_nativeExtensions = true; -} -} -Element.addMethods(); -var Toggle = new Object(); -Toggle.display = Element.toggle; -Abstract.Insertion = function(adjacency) { -this.adjacency = adjacency; -} -Abstract.Insertion.prototype = { -initialize: function(element, content) { -this.element = $(element); -this.content = content.stripScripts(); -if (this.adjacency && this.element.insertAdjacentHTML) { -try { -this.element.insertAdjacentHTML(this.adjacency, this.content); -} catch (e) { -var tagName = this.element.tagName.toLowerCase(); -if (tagName == 'tbody' || tagName == 'tr') { -this.insertContent(this.contentFromAnonymousTable()); -} else { -throw e; -} -} -} else { -this.range = this.element.ownerDocument.createRange(); -if (this.initializeRange) this.initializeRange(); -this.insertContent([this.range.createContextualFragment(this.content)]); -} -setTimeout(function() {content.evalScripts()}, 10); -}, -contentFromAnonymousTable: function() { -var div = document.createElement('div'); -div.innerHTML = '<table><tbody>' + this.content + '</tbody></table>'; -return $A(div.childNodes[0].childNodes[0].childNodes); -} -} -var Insertion = new Object(); -Insertion.Before = Class.create(); -Insertion.Before.prototype = Object.extend(new Abstract.Insertion('beforeBegin'), { -initializeRange: function() { -this.range.setStartBefore(this.element); -}, -insertContent: function(fragments) { -fragments.each((function(fragment) { -this.element.parentNode.insertBefore(fragment, this.element); -}).bind(this)); -} -}); -Insertion.Top = Class.create(); -Insertion.Top.prototype = Object.extend(new Abstract.Insertion('afterBegin'), { -initializeRange: function() { -this.range.selectNodeContents(this.element); -this.range.collapse(true); -}, -insertContent: function(fragments) { -fragments.reverse(false).each((function(fragment) { -this.element.insertBefore(fragment, this.element.firstChild); -}).bind(this)); -} -}); -Insertion.Bottom = Class.create(); -Insertion.Bottom.prototype = Object.extend(new Abstract.Insertion('beforeEnd'), { -initializeRange: function() { -this.range.selectNodeContents(this.element); -this.range.collapse(this.element); -}, -insertContent: function(fragments) { -fragments.each((function(fragment) { -this.element.appendChild(fragment); -}).bind(this)); -} -}); -Insertion.After = Class.create(); -Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), { -initializeRange: function() { -this.range.setStartAfter(this.element); -}, -insertContent: function(fragments) { -fragments.each((function(fragment) { -this.element.parentNode.insertBefore(fragment, -this.element.nextSibling); -}).bind(this)); -} -}); -Element.ClassNames = Class.create(); -Element.ClassNames.prototype = { -initialize: function(element) { -this.element = $(element); -}, -_each: function(iterator) { -this.element.className.split(/\s+/).select(function(name) { -return name.length > 0; -})._each(iterator); -}, -set: function(className) { -this.element.className = className; -}, -add: function(classNameToAdd) { -if (this.include(classNameToAdd)) return; -this.set(this.toArray().concat(classNameToAdd).join(' ')); -}, -remove: function(classNameToRemove) { -if (!this.include(classNameToRemove)) return; -this.set(this.select(function(className) { -return className != classNameToRemove; -}).join(' ')); -}, -toString: function() { -return this.toArray().join(' '); -} -} -Object.extend(Element.ClassNames.prototype, Enumerable); -var Field = { -clear: function() { -for (var i = 0; i < arguments.length; i++) -$(arguments[i]).value = ''; -}, -focus: function(element) { -$(element).focus(); -}, -present: function() { -for (var i = 0; i < arguments.length; i++) -if ($(arguments[i]).value == '') return false; -return true; -}, -select: function(element) { -$(element).select(); -}, -activate: function(element) { -element = $(element); -element.focus(); -if (element.select) -element.select(); -} -} -var Form = { -serialize: function(form) { -var elements = Form.getElements($(form)); -var queryComponents = new Array(); -for (var i = 0; i < elements.length; i++) { -var queryComponent = Form.Element.serialize(elements[i]); -if (queryComponent) -queryComponents.push(queryComponent); -} -return queryComponents.join('&'); -}, -getElements: function(form) { -form = $(form); -var elements = new Array(); -for (var tagName in Form.Element.Serializers) { -var tagElements = form.getElementsByTagName(tagName); -for (var j = 0; j < tagElements.length; j++) -elements.push(tagElements[j]); -} -return elements; -}, -getInputs: function(form, typeName, name) { -form = $(form); -var inputs = form.getElementsByTagName('input'); -if (!typeName && !name) -return inputs; -var matchingInputs = new Array(); -for (var i = 0; i < inputs.length; i++) { -var input = inputs[i]; -if ((typeName && input.type != typeName) || -(name && input.name != name)) -continue; -matchingInputs.push(input); -} -return matchingInputs; -}, -disable: function(form) { -var elements = Form.getElements(form); -for (var i = 0; i < elements.length; i++) { -var element = elements[i]; -element.blur(); -element.disabled = 'true'; -} -}, -enable: function(form) { -var elements = Form.getElements(form); -for (var i = 0; i < elements.length; i++) { -var element = elements[i]; -element.disabled = ''; -} -}, -findFirstElement: function(form) { -return Form.getElements(form).find(function(element) { -return element.type != 'hidden' && !element.disabled && -['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); -}); -}, -focusFirstElement: function(form) { -Field.activate(Form.findFirstElement(form)); -}, -reset: function(form) { -$(form).reset(); -} -} -Form.Element = { -serialize: function(element) { -element = $(element); -var method = element.tagName.toLowerCase(); -var parameter = Form.Element.Serializers[method](element); -if (parameter) { -var key = encodeURIComponent(parameter[0]); -if (key.length == 0) return; -if (parameter[1].constructor != Array) -parameter[1] = [parameter[1]]; -return parameter[1].map(function(value) { -return key + '=' + encodeURIComponent(value); -}).join('&'); -} -}, -getValue: function(element) { -element = $(element); -var method = element.tagName.toLowerCase(); -var parameter = Form.Element.Serializers[method](element); -if (parameter) -return parameter[1]; -} -} -Form.Element.Serializers = { -input: function(element) { -switch (element.type.toLowerCase()) { -case 'submit': -case 'hidden': -case 'password': -case 'text': -return Form.Element.Serializers.textarea(element); -case 'checkbox': -case 'radio': -return Form.Element.Serializers.inputSelector(element); -} -return false; -}, -inputSelector: function(element) { -if (element.checked) -return [element.name, element.value]; -}, -textarea: function(element) { -return [element.name, element.value]; -}, -select: function(element) { -return Form.Element.Serializers[element.type == 'select-one' ? -'selectOne' : 'selectMany'](element); -}, -selectOne: function(element) { -var value = '', opt, index = element.selectedIndex; -if (index >= 0) { -opt = element.options[index]; -value = opt.value || opt.text; -} -return [element.name, value]; -}, -selectMany: function(element) { -var value = []; -for (var i = 0; i < element.length; i++) { -var opt = element.options[i]; -if (opt.selected) -value.push(opt.value || opt.text); -} -return [element.name, value]; -} -} -var $F = Form.Element.getValue; -Abstract.TimedObserver = function() {} -Abstract.TimedObserver.prototype = { -initialize: function(element, frequency, callback) { -this.frequency = frequency; -this.element = $(element); -this.callback= callback; -this.lastValue = this.getValue(); -this.registerCallback(); -}, -registerCallback: function() { -setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); -}, -onTimerEvent: function() { -var value = this.getValue(); -if (this.lastValue != value) { -this.callback(this.element, value); -this.lastValue = value; -} -} -} -Form.Element.Observer = Class.create(); -Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { -getValue: function() { -return Form.Element.getValue(this.element); -} -}); -Form.Observer = Class.create(); -Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), { -getValue: function() { -return Form.serialize(this.element); -} -}); -Abstract.EventObserver = function() {} -Abstract.EventObserver.prototype = { -initialize: function(element, callback) { -this.element= $(element); -this.callback = callback; -this.lastValue = this.getValue(); -if (this.element.tagName.toLowerCase() == 'form') -this.registerFormCallbacks(); -else -this.registerCallback(this.element); -}, -onElementEvent: function() { -var value = this.getValue(); -if (this.lastValue != value) { -this.callback(this.element, value); -this.lastValue = value; -} -}, -registerFormCallbacks: function() { -var elements = Form.getElements(this.element); -for (var i = 0; i < elements.length; i++) -this.registerCallback(elements[i]); -}, -registerCallback: function(element) { -if (element.type) { -switch (element.type.toLowerCase()) { -case 'checkbox': -case 'radio': -Event.observe(element, 'click', this.onElementEvent.bind(this)); -break; -case 'password': -case 'text': -case 'textarea': -case 'select-one': -case 'select-multiple': -Event.observe(element, 'change', this.onElementEvent.bind(this)); -break; -} -} -} -} -Form.Element.EventObserver = Class.create(); -Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { -getValue: function() { -return Form.Element.getValue(this.element); -} -}); -Form.EventObserver = Class.create(); -Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), { -getValue: function() { -return Form.serialize(this.element); -} -}); -if (!window.Event) { -var Event = new Object(); -} -Object.extend(Event, { -KEY_BACKSPACE: 8, -KEY_TAB: 9, -KEY_RETURN: 13, -KEY_ESC:27, -KEY_LEFT: 37, -KEY_UP: 38, -KEY_RIGHT:39, -KEY_DOWN: 40, -KEY_DELETE: 46, -element: function(event) { -return event.target || event.srcElement; -}, -isLeftClick: function(event) { -return (((event.which) && (event.which == 1)) || -((event.button) && (event.button == 1))); -}, -pointerX: function(event) { -return event.pageX || (event.clientX + -(document.documentElement.scrollLeft || document.body.scrollLeft)); -}, -pointerY: function(event) { -return event.pageY || (event.clientY + -(document.documentElement.scrollTop || document.body.scrollTop)); -}, -stop: function(event) { -if (event.preventDefault) { -event.preventDefault(); -event.stopPropagation(); -} else { -event.returnValue = false; -event.cancelBubble = true; -} -}, -findElement: function(event, tagName) { -var element = Event.element(event); -while (element.parentNode && (!element.tagName || -(element.tagName.toUpperCase() != tagName.toUpperCase()))) -element = element.parentNode; -return element; -}, -observers: false, -_observeAndCache: function(element, name, observer, useCapture) { -if (!this.observers) this.observers = []; -if (element.addEventListener) { -this.observers.push([element, name, observer, useCapture]); -element.addEventListener(name, observer, useCapture); -} else if (element.attachEvent) { -this.observers.push([element, name, observer, useCapture]); -element.attachEvent('on' + name, observer); -} -}, -unloadCache: function() { -if (!Event.observers) return; -for (var i = 0; i < Event.observers.length; i++) { -Event.stopObserving.apply(this, Event.observers[i]); -Event.observers[i][0] = null; -} -Event.observers = false; -}, -observe: function(element, name, observer, useCapture) { -var element = $(element); -useCapture = useCapture || false; -if (name == 'keypress' && -(navigator.appVersion.match(/Konqueror|Safari|KHTML/) -|| element.attachEvent)) -name = 'keydown'; -this._observeAndCache(element, name, observer, useCapture); -}, -stopObserving: function(element, name, observer, useCapture) { -var element = $(element); -useCapture = useCapture || false; -if (name == 'keypress' && -(navigator.appVersion.match(/Konqueror|Safari|KHTML/) -|| element.detachEvent)) -name = 'keydown'; -if (element.removeEventListener) { -element.removeEventListener(name, observer, useCapture); -} else if (element.detachEvent) { -element.detachEvent('on' + name, observer); -} -} -}); -if (navigator.appVersion.match(/\bMSIE\b/)) -Event.observe(window, 'unload', Event.unloadCache, false); -Object.extend(Event, -{ -OnLoad : function (fn) -{ -var w = document.addEventListener && -!window.addEventListener ? document : window; -Event.observe(w,'load',fn); -}, -keyCode : function(e) -{ - return e.keyCode != null ? e.keyCode : e.charCode -}, -isHTMLEvent : function(type) -{ -var events = ['abort', 'blur', 'change', 'error', 'focus', -'load', 'reset', 'resize', 'scroll', 'select', -'submit', 'unload']; -return events.include(type); -}, -isMouseEvent : function(type) -{ -var events = ['click', 'mousedown', 'mousemove', 'mouseout', -'mouseover', 'mouseup']; -return events.include(type); -}, -fireEvent : function(element,type) -{ -element = $(element); -if(document.createEvent) -{ -if(Event.isHTMLEvent(type)) -{ -var event = document.createEvent('HTMLEvents'); -event.initEvent(type, true, true); -} + +var Prototype={Version:'1.50',ScriptFragment:'(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',emptyFunction:function(){},K:function(x){return x}} +var Class={create:function(){return function(){this.initialize.apply(this,arguments);}}} +var Abstract=new Object();Object.extend=function(destination,source){for(var property in source){destination[property]=source[property];} +return destination;} +Object.inspect=function(object){try{if(object==undefined)return'undefined';if(object==null)return'null';return object.inspect?object.inspect():object.toString();}catch(e){if(e instanceof RangeError)return'...';throw e;}} +Function.prototype.bind=function(){var __method=this,args=$A(arguments),object=args.shift();return function(){return __method.apply(object,args.concat($A(arguments)));}} +Function.prototype.bindAsEventListener=function(object){var __method=this;return function(event){return __method.call(object,event||window.event);}} +Object.extend(Number.prototype,{toColorPart:function(){var digits=this.toString(16);if(this<16)return'0'+digits;return digits;},succ:function(){return this+1;},times:function(iterator){$R(0,this,true).each(iterator);return this;}});var Try={these:function(){var returnValue;for(var i=0;i<arguments.length;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}} +return returnValue;}} +var PeriodicalExecuter=Class.create();PeriodicalExecuter.prototype={initialize:function(callback,frequency){this.callback=callback;this.frequency=frequency;this.currentlyExecuting=false;this.registerCallback();},registerCallback:function(){setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.callback();}finally{this.currentlyExecuting=false;}}}} +Function.prototype.bindEvent=function() +{var __method=this,args=$A(arguments),object=args.shift();return function(event) +{return __method.apply(object,[event||window.event].concat(args));}} +Class.extend=function(base,definition) +{var component=Class.create();Object.extend(component.prototype,base.prototype);if(definition) +Object.extend(component.prototype,definition);return component;} +Object.extend(String.prototype,{gsub:function(pattern,replacement){var result='',source=this,match;replacement=arguments.callee.prepareReplacement(replacement);while(source.length>0){if(match=source.match(pattern)){result+=source.slice(0,match.index);result+=(replacement(match)||'').toString();source=source.slice(match.index+match[0].length);}else{result+=source,source='';}} +return result;},sub:function(pattern,replacement,count){replacement=this.gsub.prepareReplacement(replacement);count=count===undefined?1:count;return this.gsub(pattern,function(match){if(--count<0)return match[0];return replacement(match);});},scan:function(pattern,iterator){this.gsub(pattern,iterator);return this;},truncate:function(length,truncation){length=length||30;truncation=truncation===undefined?'...':truncation;return this.length>length?this.slice(0,length-truncation.length)+truncation:this;},strip:function(){return this.replace(/^\s+/,'').replace(/\s+$/,'');},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'');},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');},extractScripts:function(){var matchAll=new RegExp(Prototype.ScriptFragment,'img');var matchOne=new RegExp(Prototype.ScriptFragment,'im');return(this.match(matchAll)||[]).map(function(scriptTag){return(scriptTag.match(matchOne)||['',''])[1];});},evalScripts:function(){return this.extractScripts().map(function(script){return eval(script)});},escapeHTML:function(){var div=document.createElement('div');var text=document.createTextNode(this);div.appendChild(text);return div.innerHTML;},unescapeHTML:function(){var div=document.createElement('div');div.innerHTML=this.stripTags();return div.childNodes[0]?div.childNodes[0].nodeValue:'';},toQueryParams:function(){var pairs=this.match(/^\??(.*)$/)[1].split('&');return pairs.inject({},function(params,pairString){var pair=pairString.split('=');params[pair[0]]=pair[1];return params;});},toArray:function(){return this.split('');},camelize:function(){var oStringList=this.split('-');if(oStringList.length==1)return oStringList[0];var camelizedString=this.indexOf('-')==0?oStringList[0].charAt(0).toUpperCase()+oStringList[0].substring(1):oStringList[0];for(var i=1,len=oStringList.length;i<len;i++){var s=oStringList[i];camelizedString+=s.charAt(0).toUpperCase()+s.substring(1);} +return camelizedString;},inspect:function(){return"'"+this.replace(/\\/g,'\\\\').replace(/'/g,'\\\'')+"'";}});String.prototype.gsub.prepareReplacement=function(replacement){if(typeof replacement=='function')return replacement;var template=new Template(replacement);return function(match){return template.evaluate(match)};} +String.prototype.parseQuery=String.prototype.toQueryParams;var Template=Class.create();Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;Template.prototype={initialize:function(template,pattern){this.template=template.toString();this.pattern=pattern||Template.Pattern;},evaluate:function(object){return this.template.gsub(this.pattern,function(match){var before=match[1];if(before=='\\')return match[2];return before+(object[match[3]]||'').toString();});}} +Object.extend(String.prototype,{pad:function(side,len,chr){if(!chr)chr=' ';var s=this;var left=side.toLowerCase()=='left';while(s.length<len)s=left?chr+s:s+chr;return s;},padLeft:function(len,chr){return this.pad('left',len,chr);},padRight:function(len,chr){return this.pad('right',len,chr);},zerofill:function(len){return this.padLeft(len,'0');},trim:function(){return this.replace(/^\s+|\s+$/g,'');},trimLeft:function(){return this.replace(/^\s+/,'');},trimRight:function(){return this.replace(/\s+$/,'');},toFunction:function() +{var commands=this.split(/\./);var command=window;commands.each(function(action) +{if(command[new String(action)]) +command=command[new String(action)];});if(typeof(command)=="function") +return command;else +{if(typeof Logger!="undefined") +Logger.error("Missing function",this);throw new Error("Missing function '"+this+"'");}},toInteger:function() +{var exp=/^\s*[-\+]?\d+\s*$/;if(this.match(exp)==null) +return null;var num=parseInt(this,10);return(isNaN(num)?null:num);},toDouble:function(decimalchar) +{if(this.length<=0)return null;decimalchar=decimalchar||".";var exp=new RegExp("^\\s*([-\\+])?(\\d+)?(\\"+decimalchar+"(\\d+))?\\s*$");var m=this.match(exp);if(m==null) +return null;m[1]=m[1]||"";m[2]=m[2]||"0";m[4]=m[4]||"0";var cleanInput=m[1]+(m[2].length>0?m[2]:"0")+"."+m[4];var num=parseFloat(cleanInput);return(isNaN(num)?null:num);},toCurrency:function(groupchar,digits,decimalchar) +{groupchar=groupchar||",";decimalchar=decimalchar||".";digits=typeof(digits)=="undefined"?2:digits;var exp=new RegExp("^\\s*([-\\+])?(((\\d+)\\"+groupchar+")*)(\\d+)" ++((digits>0)?"(\\"+decimalchar+"(\\d{1,"+digits+"}))?":"") ++"\\s*$");var m=this.match(exp);if(m==null) +return null;var intermed=m[2]+m[5];var cleanInput=m[1]+intermed.replace(new RegExp("(\\"+groupchar+")","g"),"") ++((digits>0)?"."+m[7]:"");var num=parseFloat(cleanInput);return(isNaN(num)?null:num);},toDate:function(format) +{return Date.SimpleParse(this,format);}});var $break=new Object();var $continue=new Object();var Enumerable={each:function(iterator){var index=0;try{this._each(function(value){try{iterator(value,index++);}catch(e){if(e!=$continue)throw e;}});}catch(e){if(e!=$break)throw e;}},all:function(iterator){var result=true;this.each(function(value,index){result=result&&!!(iterator||Prototype.K)(value,index);if(!result)throw $break;});return result;},any:function(iterator){var result=true;this.each(function(value,index){if(result=!!(iterator||Prototype.K)(value,index)) +throw $break;});return result;},collect:function(iterator){var results=[];this.each(function(value,index){results.push(iterator(value,index));});return results;},detect:function(iterator){var result;this.each(function(value,index){if(iterator(value,index)){result=value;throw $break;}});return result;},findAll:function(iterator){var results=[];this.each(function(value,index){if(iterator(value,index)) +results.push(value);});return results;},grep:function(pattern,iterator){var results=[];this.each(function(value,index){var stringValue=value.toString();if(stringValue.match(pattern)) +results.push((iterator||Prototype.K)(value,index));}) +return results;},include:function(object){var found=false;this.each(function(value){if(value==object){found=true;throw $break;}});return found;},inject:function(memo,iterator){this.each(function(value,index){memo=iterator(memo,value,index);});return memo;},invoke:function(method){var args=$A(arguments).slice(1);return this.collect(function(value){return value[method].apply(value,args);});},max:function(iterator){var result;this.each(function(value,index){value=(iterator||Prototype.K)(value,index);if(result==undefined||value>=result) +result=value;});return result;},min:function(iterator){var result;this.each(function(value,index){value=(iterator||Prototype.K)(value,index);if(result==undefined||value<result) +result=value;});return result;},partition:function(iterator){var trues=[],falses=[];this.each(function(value,index){((iterator||Prototype.K)(value,index)?trues:falses).push(value);});return[trues,falses];},pluck:function(property){var results=[];this.each(function(value,index){results.push(value[property]);});return results;},reject:function(iterator){var results=[];this.each(function(value,index){if(!iterator(value,index)) +results.push(value);});return results;},sortBy:function(iterator){return this.collect(function(value,index){return{value:value,criteria:iterator(value,index)};}).sort(function(left,right){var a=left.criteria,b=right.criteria;return a<b?-1:a>b?1:0;}).pluck('value');},toArray:function(){return this.collect(Prototype.K);},zip:function(){var iterator=Prototype.K,args=$A(arguments);if(typeof args.last()=='function') +iterator=args.pop();var collections=[this].concat(args).map($A);return this.map(function(value,index){return iterator(collections.pluck(index));});},inspect:function(){return'#<Enumerable:'+this.toArray().inspect()+'>';}} +Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray});var $A=Array.from=function(iterable){if(!iterable)return[];if(iterable.toArray){return iterable.toArray();}else{var results=[];for(var i=0;i<iterable.length;i++) +results.push(iterable[i]);return results;}} +Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse) +Array.prototype._reverse=Array.prototype.reverse;Object.extend(Array.prototype,{_each:function(iterator){for(var i=0;i<this.length;i++) +iterator(this[i]);},clear:function(){this.length=0;return this;},first:function(){return this[0];},last:function(){return this[this.length-1];},compact:function(){return this.select(function(value){return value!=undefined||value!=null;});},flatten:function(){return this.inject([],function(array,value){return array.concat(value&&value.constructor==Array?value.flatten():[value]);});},without:function(){var values=$A(arguments);return this.select(function(value){return!values.include(value);});},indexOf:function(object){for(var i=0;i<this.length;i++) +if(this[i]==object)return i;return-1;},reverse:function(inline){return(inline!==false?this:this.toArray())._reverse();},inspect:function(){return'['+this.map(Object.inspect).join(', ')+']';}});var Hash={_each:function(iterator){for(var key in this){var value=this[key];if(typeof value=='function')continue;var pair=[key,value];pair.key=key;pair.value=value;iterator(pair);}},keys:function(){return this.pluck('key');},values:function(){return this.pluck('value');},merge:function(hash){return $H(hash).inject($H(this),function(mergedHash,pair){mergedHash[pair.key]=pair.value;return mergedHash;});},toQueryString:function(){return this.map(function(pair){return pair.map(encodeURIComponent).join('=');}).join('&');},inspect:function(){return'#<Hash:{'+this.map(function(pair){return pair.map(Object.inspect).join(': ');}).join(', ')+'}>';}} +function $H(object){var hash=Object.extend({},object||{});Object.extend(hash,Enumerable);Object.extend(hash,Hash);return hash;} +ObjectRange=Class.create();Object.extend(ObjectRange.prototype,Enumerable);Object.extend(ObjectRange.prototype,{initialize:function(start,end,exclusive){this.start=start;this.end=end;this.exclusive=exclusive;},_each:function(iterator){var value=this.start;do{iterator(value);value=value.succ();}while(this.include(value));},include:function(value){if(value<this.start) +return false;if(this.exclusive) +return value<this.end;return value<=this.end;}});var $R=function(start,end,exclusive){return new ObjectRange(start,end,exclusive);} +function $(){var results=[],element;for(var i=0;i<arguments.length;i++){element=arguments[i];if(typeof element=='string') +element=document.getElementById(element);results.push(Element.extend(element));} +return results.length<2?results[0]:results;} +document.getElementsByClassName=function(className,parentElement){var children=($(parentElement)||document.body).getElementsByTagName('*');return $A(children).inject([],function(elements,child){if(child.className.match(new RegExp("(^|\\s)"+className+"(\\s|$)"))) +elements.push(Element.extend(child));return elements;});} +if(!window.Element) +var Element=new Object();Element.extend=function(element){if(!element)return;if(_nativeExtensions)return element;if(!element._extended&&element.tagName&&element!=window){var methods=Element.Methods,cache=Element.extend.cache;for(property in methods){var value=methods[property];if(typeof value=='function') +element[property]=cache.findOrStore(value);}} +element._extended=true;return element;} +Element.extend.cache={findOrStore:function(value){return this[value]=this[value]||function(){return value.apply(null,[this].concat($A(arguments)));}}} +Element.Methods={visible:function(element){return $(element).style.display!='none';},toggle:function(){for(var i=0;i<arguments.length;i++){var element=$(arguments[i]);Element[Element.visible(element)?'hide':'show'](element);}},hide:function(){for(var i=0;i<arguments.length;i++){var element=$(arguments[i]);element.style.display='none';}},show:function(){for(var i=0;i<arguments.length;i++){var element=$(arguments[i]);element.style.display='';}},remove:function(element){element=$(element);element.parentNode.removeChild(element);},update:function(element,html){$(element).innerHTML=html.stripScripts();setTimeout(function(){html.evalScripts()},10);},replace:function(element,html){element=$(element);if(element.outerHTML){element.outerHTML=html.stripScripts();}else{var range=element.ownerDocument.createRange();range.selectNodeContents(element);element.parentNode.replaceChild(range.createContextualFragment(html.stripScripts()),element);} +setTimeout(function(){html.evalScripts()},10);},getHeight:function(element){element=$(element);return element.offsetHeight;},classNames:function(element){return new Element.ClassNames(element);},hasClassName:function(element,className){if(!(element=$(element)))return;return Element.classNames(element).include(className);},addClassName:function(element,className){if(!(element=$(element)))return;return Element.classNames(element).add(className);},removeClassName:function(element,className){if(!(element=$(element)))return;return Element.classNames(element).remove(className);},cleanWhitespace:function(element){element=$(element);for(var i=0;i<element.childNodes.length;i++){var node=element.childNodes[i];if(node.nodeType==3&&!/\S/.test(node.nodeValue)) +Element.remove(node);}},empty:function(element){return $(element).innerHTML.match(/^\s*$/);},childOf:function(element,ancestor){element=$(element),ancestor=$(ancestor);while(element=element.parentNode) +if(element==ancestor)return true;return false;},scrollTo:function(element){element=$(element);var x=element.x?element.x:element.offsetLeft,y=element.y?element.y:element.offsetTop;window.scrollTo(x,y);},getStyle:function(element,style){element=$(element);var value=element.style[style.camelize()];if(!value){if(document.defaultView&&document.defaultView.getComputedStyle){var css=document.defaultView.getComputedStyle(element,null);value=css?css.getPropertyValue(style):null;}else if(element.currentStyle){value=element.currentStyle[style.camelize()];}} +if(window.opera&&['left','top','right','bottom'].include(style)) +if(Element.getStyle(element,'position')=='static')value='auto';return value=='auto'?null:value;},setStyle:function(element,style){element=$(element);for(var name in style) +element.style[name.camelize()]=style[name];},getDimensions:function(element){element=$(element);if(Element.getStyle(element,'display')!='none') +return{width:element.offsetWidth,height:element.offsetHeight};var els=element.style;var originalVisibility=els.visibility;var originalPosition=els.position;els.visibility='hidden';els.position='absolute';els.display='';var originalWidth=element.clientWidth;var originalHeight=element.clientHeight;els.display='none';els.position=originalPosition;els.visibility=originalVisibility;return{width:originalWidth,height:originalHeight};},makePositioned:function(element){element=$(element);var pos=Element.getStyle(element,'position');if(pos=='static'||!pos){element._madePositioned=true;element.style.position='relative';if(window.opera){element.style.top=0;element.style.left=0;}}},undoPositioned:function(element){element=$(element);if(element._madePositioned){element._madePositioned=undefined;element.style.position=element.style.top=element.style.left=element.style.bottom=element.style.right='';}},makeClipping:function(element){element=$(element);if(element._overflow)return;element._overflow=element.style.overflow;if((Element.getStyle(element,'overflow')||'visible')!='hidden') +element.style.overflow='hidden';},undoClipping:function(element){element=$(element);if(element._overflow)return;element.style.overflow=element._overflow;element._overflow=undefined;}} +Object.extend(Element,Element.Methods);var _nativeExtensions=false;if(!HTMLElement&&/Konqueror|Safari|KHTML/.test(navigator.userAgent)){var HTMLElement={} +HTMLElement.prototype=document.createElement('div').__proto__;} +Element.addMethods=function(methods){Object.extend(Element.Methods,methods||{});if(typeof HTMLElement!='undefined'){var methods=Element.Methods,cache=Element.extend.cache;for(property in methods){var value=methods[property];if(typeof value=='function') +HTMLElement.prototype[property]=cache.findOrStore(value);} +_nativeExtensions=true;}} +Element.addMethods();var Toggle=new Object();Toggle.display=Element.toggle;Abstract.Insertion=function(adjacency){this.adjacency=adjacency;} +Abstract.Insertion.prototype={initialize:function(element,content){this.element=$(element);this.content=content.stripScripts();if(this.adjacency&&this.element.insertAdjacentHTML){try{this.element.insertAdjacentHTML(this.adjacency,this.content);}catch(e){var tagName=this.element.tagName.toLowerCase();if(tagName=='tbody'||tagName=='tr'){this.insertContent(this.contentFromAnonymousTable());}else{throw e;}}}else{this.range=this.element.ownerDocument.createRange();if(this.initializeRange)this.initializeRange();this.insertContent([this.range.createContextualFragment(this.content)]);} +setTimeout(function(){content.evalScripts()},10);},contentFromAnonymousTable:function(){var div=document.createElement('div');div.innerHTML='<table><tbody>'+this.content+'</tbody></table>';return $A(div.childNodes[0].childNodes[0].childNodes);}} +var Insertion=new Object();Insertion.Before=Class.create();Insertion.Before.prototype=Object.extend(new Abstract.Insertion('beforeBegin'),{initializeRange:function(){this.range.setStartBefore(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.parentNode.insertBefore(fragment,this.element);}).bind(this));}});Insertion.Top=Class.create();Insertion.Top.prototype=Object.extend(new Abstract.Insertion('afterBegin'),{initializeRange:function(){this.range.selectNodeContents(this.element);this.range.collapse(true);},insertContent:function(fragments){fragments.reverse(false).each((function(fragment){this.element.insertBefore(fragment,this.element.firstChild);}).bind(this));}});Insertion.Bottom=Class.create();Insertion.Bottom.prototype=Object.extend(new Abstract.Insertion('beforeEnd'),{initializeRange:function(){this.range.selectNodeContents(this.element);this.range.collapse(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.appendChild(fragment);}).bind(this));}});Insertion.After=Class.create();Insertion.After.prototype=Object.extend(new Abstract.Insertion('afterEnd'),{initializeRange:function(){this.range.setStartAfter(this.element);},insertContent:function(fragments){fragments.each((function(fragment){this.element.parentNode.insertBefore(fragment,this.element.nextSibling);}).bind(this));}});Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(element){this.element=$(element);},_each:function(iterator){this.element.className.split(/\s+/).select(function(name){return name.length>0;})._each(iterator);},set:function(className){this.element.className=className;},add:function(classNameToAdd){if(this.include(classNameToAdd))return;this.set(this.toArray().concat(classNameToAdd).join(' '));},remove:function(classNameToRemove){if(!this.include(classNameToRemove))return;this.set(this.select(function(className){return className!=classNameToRemove;}).join(' '));},toString:function(){return this.toArray().join(' ');}} +Object.extend(Element.ClassNames.prototype,Enumerable);var Field={clear:function(){for(var i=0;i<arguments.length;i++) +$(arguments[i]).value='';},focus:function(element){$(element).focus();},present:function(){for(var i=0;i<arguments.length;i++) +if($(arguments[i]).value=='')return false;return true;},select:function(element){$(element).select();},activate:function(element){element=$(element);element.focus();if(element.select) +element.select();}} +var Form={serialize:function(form){var elements=Form.getElements($(form));var queryComponents=new Array();for(var i=0;i<elements.length;i++){var queryComponent=Form.Element.serialize(elements[i]);if(queryComponent) +queryComponents.push(queryComponent);} +return queryComponents.join('&');},getElements:function(form){form=$(form);var elements=new Array();for(var tagName in Form.Element.Serializers){var tagElements=form.getElementsByTagName(tagName);for(var j=0;j<tagElements.length;j++) +elements.push(tagElements[j]);} +return elements;},getInputs:function(form,typeName,name){form=$(form);var inputs=form.getElementsByTagName('input');if(!typeName&&!name) +return inputs;var matchingInputs=new Array();for(var i=0;i<inputs.length;i++){var input=inputs[i];if((typeName&&input.type!=typeName)||(name&&input.name!=name)) +continue;matchingInputs.push(input);} +return matchingInputs;},disable:function(form){var elements=Form.getElements(form);for(var i=0;i<elements.length;i++){var element=elements[i];element.blur();element.disabled='true';}},enable:function(form){var elements=Form.getElements(form);for(var i=0;i<elements.length;i++){var element=elements[i];element.disabled='';}},findFirstElement:function(form){return Form.getElements(form).find(function(element){return element.type!='hidden'&&!element.disabled&&['input','select','textarea'].include(element.tagName.toLowerCase());});},focusFirstElement:function(form){Field.activate(Form.findFirstElement(form));},reset:function(form){$(form).reset();}} +Form.Element={serialize:function(element){element=$(element);var method=element.tagName.toLowerCase();var parameter=Form.Element.Serializers[method](element);if(parameter){var key=encodeURIComponent(parameter[0]);if(key.length==0)return;if(parameter[1].constructor!=Array) +parameter[1]=[parameter[1]];return parameter[1].map(function(value){return key+'='+encodeURIComponent(value);}).join('&');}},getValue:function(element){element=$(element);var method=element.tagName.toLowerCase();var parameter=Form.Element.Serializers[method](element);if(parameter) +return parameter[1];}} +Form.Element.Serializers={input:function(element){switch(element.type.toLowerCase()){case'submit':case'hidden':case'password':case'text':return Form.Element.Serializers.textarea(element);case'checkbox':case'radio':return Form.Element.Serializers.inputSelector(element);} +return false;},inputSelector:function(element){if(element.checked) +return[element.name,element.value];},textarea:function(element){return[element.name,element.value];},select:function(element){return Form.Element.Serializers[element.type=='select-one'?'selectOne':'selectMany'](element);},selectOne:function(element){var value='',opt,index=element.selectedIndex;if(index>=0){opt=element.options[index];value=opt.value||opt.text;} +return[element.name,value];},selectMany:function(element){var value=[];for(var i=0;i<element.length;i++){var opt=element.options[i];if(opt.selected) +value.push(opt.value||opt.text);} +return[element.name,value];}} +var $F=Form.Element.getValue;Abstract.TimedObserver=function(){} +Abstract.TimedObserver.prototype={initialize:function(element,frequency,callback){this.frequency=frequency;this.element=$(element);this.callback=callback;this.lastValue=this.getValue();this.registerCallback();},registerCallback:function(){setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},onTimerEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}}} +Form.Element.Observer=Class.create();Form.Element.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){return Form.Element.getValue(this.element);}});Form.Observer=Class.create();Form.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{getValue:function(){return Form.serialize(this.element);}});Abstract.EventObserver=function(){} +Abstract.EventObserver.prototype={initialize:function(element,callback){this.element=$(element);this.callback=callback;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=='form') +this.registerFormCallbacks();else +this.registerCallback(this.element);},onElementEvent:function(){var value=this.getValue();if(this.lastValue!=value){this.callback(this.element,value);this.lastValue=value;}},registerFormCallbacks:function(){var elements=Form.getElements(this.element);for(var i=0;i<elements.length;i++) +this.registerCallback(elements[i]);},registerCallback:function(element){if(element.type){switch(element.type.toLowerCase()){case'checkbox':case'radio':Event.observe(element,'click',this.onElementEvent.bind(this));break;case'password':case'text':case'textarea':case'select-one':case'select-multiple':Event.observe(element,'change',this.onElementEvent.bind(this));break;}}}} +Form.Element.EventObserver=Class.create();Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){return Form.Element.getValue(this.element);}});Form.EventObserver=Class.create();Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){return Form.serialize(this.element);}});if(!window.Event){var Event=new Object();} +Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,element:function(event){return event.target||event.srcElement;},isLeftClick:function(event){return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));},pointerX:function(event){return event.pageX||(event.clientX+ +(document.documentElement.scrollLeft||document.body.scrollLeft));},pointerY:function(event){return event.pageY||(event.clientY+ +(document.documentElement.scrollTop||document.body.scrollTop));},stop:function(event){if(event.preventDefault){event.preventDefault();event.stopPropagation();}else{event.returnValue=false;event.cancelBubble=true;}},findElement:function(event,tagName){var element=Event.element(event);while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase()))) +element=element.parentNode;return element;},observers:false,_observeAndCache:function(element,name,observer,useCapture){if(!this.observers)this.observers=[];if(element.addEventListener){this.observers.push([element,name,observer,useCapture]);element.addEventListener(name,observer,useCapture);}else if(element.attachEvent){this.observers.push([element,name,observer,useCapture]);element.attachEvent('on'+name,observer);}},unloadCache:function(){if(!Event.observers)return;for(var i=0;i<Event.observers.length;i++){Event.stopObserving.apply(this,Event.observers[i]);Event.observers[i][0]=null;} +Event.observers=false;},observe:function(element,name,observer,useCapture){var element=$(element);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent)) +name='keydown';this._observeAndCache(element,name,observer,useCapture);},stopObserving:function(element,name,observer,useCapture){var element=$(element);useCapture=useCapture||false;if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent)) +name='keydown';if(element.removeEventListener){element.removeEventListener(name,observer,useCapture);}else if(element.detachEvent){element.detachEvent('on'+name,observer);}}});if(navigator.appVersion.match(/\bMSIE\b/)) +Event.observe(window,'unload',Event.unloadCache,false);Object.extend(Event,{OnLoad:function(fn) +{var w=document.addEventListener&&!window.addEventListener?document:window;Event.observe(w,'load',fn);},keyCode:function(e) +{return e.keyCode!=null?e.keyCode:e.charCode},isHTMLEvent:function(type) +{var events=['abort','blur','change','error','focus','load','reset','resize','scroll','select','submit','unload'];return events.include(type);},isMouseEvent:function(type) +{var events=['click','mousedown','mousemove','mouseout','mouseover','mouseup'];return events.include(type);},fireEvent:function(element,type) +{element=$(element);if(document.createEvent) +{if(Event.isHTMLEvent(type)) +{var event=document.createEvent('HTMLEvents');event.initEvent(type,true,true);} else if(Event.isMouseEvent(type)) -{ -var event = document.createEvent('MouseEvents'); -event.initMouseEvent(type,true,true, -document.defaultView, 1, 0, 0, 0, 0, false, -false, false, false, 0, null); -} +{var event=document.createEvent('MouseEvents');event.initMouseEvent(type,true,true,document.defaultView,1,0,0,0,0,false,false,false,false,0,null);} else -{ -if(Logger) -Logger.error("undefined event", type); -return; -} -element.dispatchEvent(event); -} +{if(Logger) +Logger.error("undefined event",type);return;} +element.dispatchEvent(event);} else if(element.fireEvent) -{ -element.fireEvent('on'+type); -if(element[type]) -element[type](); -} +{element.fireEvent('on'+type);if(element[type]) +element[type]();} else if(element[type]) -element[type](); -} -}); -var Position = { - includeScrollOffsets: false, -prepare: function() { -this.deltaX =window.pageXOffset -|| document.documentElement.scrollLeft -|| document.body.scrollLeft -|| 0; -this.deltaY =window.pageYOffset -|| document.documentElement.scrollTop -|| document.body.scrollTop -|| 0; -}, -realOffset: function(element) { -var valueT = 0, valueL = 0; -do { -valueT += element.scrollTop|| 0; -valueL += element.scrollLeft || 0; -element = element.parentNode; -} while (element); -return [valueL, valueT]; -}, -cumulativeOffset: function(element) { -var valueT = 0, valueL = 0; -do { -valueT += element.offsetTop|| 0; -valueL += element.offsetLeft || 0; -element = element.offsetParent; -} while (element); -return [valueL, valueT]; -}, -positionedOffset: function(element) { -var valueT = 0, valueL = 0; -do { -valueT += element.offsetTop|| 0; -valueL += element.offsetLeft || 0; -element = element.offsetParent; -if (element) { -p = Element.getStyle(element, 'position'); -if (p == 'relative' || p == 'absolute') break; -} -} while (element); -return [valueL, valueT]; -}, -offsetParent: function(element) { -if (element.offsetParent) return element.offsetParent; -if (element == document.body) return element; -while ((element = element.parentNode) && element != document.body) -if (Element.getStyle(element, 'position') != 'static') -return element; -return document.body; -}, -within: function(element, x, y) { -if (this.includeScrollOffsets) -return this.withinIncludingScrolloffsets(element, x, y); -this.xcomp = x; -this.ycomp = y; -this.offset = this.cumulativeOffset(element); -return (y >= this.offset[1] && -y <this.offset[1] + element.offsetHeight && -x >= this.offset[0] && -x <this.offset[0] + element.offsetWidth); -}, -withinIncludingScrolloffsets: function(element, x, y) { -var offsetcache = this.realOffset(element); -this.xcomp = x + offsetcache[0] - this.deltaX; -this.ycomp = y + offsetcache[1] - this.deltaY; -this.offset = this.cumulativeOffset(element); -return (this.ycomp >= this.offset[1] && -this.ycomp <this.offset[1] + element.offsetHeight && -this.xcomp >= this.offset[0] && -this.xcomp <this.offset[0] + element.offsetWidth); -}, -overlap: function(mode, element) { -if (!mode) return 0; -if (mode == 'vertical') -return ((this.offset[1] + element.offsetHeight) - this.ycomp) / -element.offsetHeight; -if (mode == 'horizontal') -return ((this.offset[0] + element.offsetWidth) - this.xcomp) / -element.offsetWidth; -}, -clone: function(source, target) { -source = $(source); -target = $(target); -target.style.position = 'absolute'; -var offsets = this.cumulativeOffset(source); -target.style.top= offsets[1] + 'px'; -target.style.left = offsets[0] + 'px'; -target.style.width= source.offsetWidth + 'px'; -target.style.height = source.offsetHeight + 'px'; -}, -page: function(forElement) { -var valueT = 0, valueL = 0; -var element = forElement; -do { -valueT += element.offsetTop|| 0; -valueL += element.offsetLeft || 0; -if (element.offsetParent==document.body) -if (Element.getStyle(element,'position')=='absolute') break; -} while (element = element.offsetParent); -element = forElement; -do { -valueT -= element.scrollTop|| 0; -valueL -= element.scrollLeft || 0; -} while (element = element.parentNode); -return [valueL, valueT]; -}, -clone: function(source, target) { -var options = Object.extend({ -setLeft:true, -setTop: true, -setWidth: true, -setHeight:true, -offsetTop:0, -offsetLeft: 0 -}, arguments[2] || {}) -source = $(source); -var p = Position.page(source); -target = $(target); -var delta = [0, 0]; -var parent = null; -if (Element.getStyle(target,'position') == 'absolute') { -parent = Position.offsetParent(target); -delta = Position.page(parent); -} -if (parent == document.body) { -delta[0] -= document.body.offsetLeft; -delta[1] -= document.body.offsetTop; -} -if(options.setLeft) target.style.left= (p[0] - delta[0] + options.offsetLeft) + 'px'; -if(options.setTop)target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; -if(options.setWidth)target.style.width = source.offsetWidth + 'px'; -if(options.setHeight) target.style.height = source.offsetHeight + 'px'; -}, -absolutize: function(element) { -element = $(element); -if (element.style.position == 'absolute') return; -Position.prepare(); -var offsets = Position.positionedOffset(element); -var top = offsets[1]; -var left= offsets[0]; -var width = element.clientWidth; -var height= element.clientHeight; -element._originalLeft = left - parseFloat(element.style.left|| 0); -element._originalTop= top- parseFloat(element.style.top || 0); -element._originalWidth= element.style.width; -element._originalHeight = element.style.height; -element.style.position = 'absolute'; -element.style.top= top + 'px';; -element.style.left = left + 'px';; -element.style.width= width + 'px';; -element.style.height = height + 'px';; -}, -relativize: function(element) { -element = $(element); -if (element.style.position == 'relative') return; -Position.prepare(); -element.style.position = 'relative'; -var top= parseFloat(element.style.top|| 0) - (element._originalTop || 0); -var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); -element.style.top= top + 'px'; -element.style.left = left + 'px'; -element.style.height = element._originalHeight; -element.style.width= element._originalWidth; -} -} -if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) { -Position.cumulativeOffset = function(element) { -var valueT = 0, valueL = 0; -do { -valueT += element.offsetTop|| 0; -valueL += element.offsetLeft || 0; -if (element.offsetParent == document.body) -if (Element.getStyle(element, 'position') == 'absolute') break; -element = element.offsetParent; -} while (element); -return [valueL, valueT]; -} -} -var Selector = Class.create(); -Selector.prototype = { -initialize: function(expression) { -this.params = {classNames: []}; -this.expression = expression.toString().strip(); -this.parseExpression(); -this.compileMatcher(); -}, -parseExpression: function() { -function abort(message) { throw 'Parse error in selector: ' + message; } -if (this.expression == '')abort('empty expression'); -var params = this.params, expr = this.expression, match, modifier, clause, rest; -while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) { -params.attributes = params.attributes || []; -params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''}); -expr = match[1]; -} -if (expr == '*') return this.params.wildcard = true; -while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) { -modifier = match[1], clause = match[2], rest = match[3]; -switch (modifier) { -case '#': params.id = clause; break; -case '.': params.classNames.push(clause); break; -case '': -case undefined: params.tagName = clause.toUpperCase(); break; -default:abort(expr.inspect()); -} -expr = rest; -} -if (expr.length > 0) abort(expr.inspect()); -}, -buildMatchExpression: function() { -var params = this.params, conditions = [], clause; -if (params.wildcard) -conditions.push('true'); -if (clause = params.id) -conditions.push('element.id == ' + clause.inspect()); -if (clause = params.tagName) -conditions.push('element.tagName.toUpperCase() == ' + clause.inspect()); -if ((clause = params.classNames).length > 0) -for (var i = 0; i < clause.length; i++) -conditions.push('Element.hasClassName(element, ' + clause[i].inspect() + ')'); -if (clause = params.attributes) { -clause.each(function(attribute) { -var value = 'element.getAttribute(' + attribute.name.inspect() + ')'; -var splitValueBy = function(delimiter) { -return value + ' && ' + value + '.split(' + delimiter.inspect() + ')'; -} -switch (attribute.operator) { -case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break; -case '~=':conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break; -case '|=':conditions.push( -splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect() -); break; -case '!=':conditions.push(value + ' != ' + attribute.value.inspect()); break; -case '': -case undefined: conditions.push(value + ' != null'); break; -default:throw 'Unknown operator ' + attribute.operator + ' in selector'; -} -}); -} -return conditions.join(' && '); -}, -compileMatcher: function() { -this.match = new Function('element', 'if (!element.tagName) return false; \ -return ' + this.buildMatchExpression()); -}, -findElements: function(scope) { -var element; -if (element = $(this.params.id)) -if (this.match(element)) -if (!scope || Element.childOf(element, scope)) -return [element]; -scope = (scope || document).getElementsByTagName(this.params.tagName || '*'); -var results = []; -for (var i = 0; i < scope.length; i++) -if (this.match(element = scope[i])) -results.push(Element.extend(element)); -return results; -}, -toString: function() { -return this.expression; -} -} -function $$() { -return $A(arguments).map(function(expression) { -return expression.strip().split(/\s+/).inject([null], function(results, expr) { -var selector = new Selector(expr); -return results.map(selector.findElements.bind(selector)).flatten(); -}); -}).flatten(); -} -var Builder = { -NODEMAP: { -AREA: 'map', -CAPTION: 'table', -COL: 'table', -COLGROUP: 'table', -LEGEND: 'fieldset', -OPTGROUP: 'select', -OPTION: 'select', -PARAM: 'object', -TBODY: 'table', -TD: 'table', -TFOOT: 'table', -TH: 'table', -THEAD: 'table', -TR: 'table' -}, -node: function(elementName) { -elementName = elementName.toUpperCase(); -var parentTag = this.NODEMAP[elementName] || 'div'; -var parentElement = document.createElement(parentTag); -try {parentElement.innerHTML = "<" + elementName + "></" + elementName + ">"; -} catch(e) {} -var element = parentElement.firstChild || null; -if(element && (element.tagName != elementName)) -element = element.getElementsByTagName(elementName)[0]; -if(!element) element = document.createElement(elementName); -if(!element) return; -if(arguments[1]) -if(this._isStringOrNumber(arguments[1]) || -(arguments[1] instanceof Array)) { -this._children(element, arguments[1]); -} else { -var attrs = this._attributes(arguments[1]); -if(attrs.length) { -try {parentElement.innerHTML = "<" +elementName + " " + -attrs + "></" + elementName + ">"; -} catch(e) {} -element = parentElement.firstChild || null; - if(!element) { -element = document.createElement(elementName); -for(attr in arguments[1]) -element[attr == 'class' ? 'className' : attr] = arguments[1][attr]; -} -if(element.tagName != elementName) -element = parentElement.getElementsByTagName(elementName)[0]; -} -} +element[type]();}});var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;},realOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.scrollTop||0;valueL+=element.scrollLeft||0;element=element.parentNode;}while(element);return[valueL,valueT];},cumulativeOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;}while(element);return[valueL,valueT];},positionedOffset:function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;element=element.offsetParent;if(element){p=Element.getStyle(element,'position');if(p=='relative'||p=='absolute')break;}}while(element);return[valueL,valueT];},offsetParent:function(element){if(element.offsetParent)return element.offsetParent;if(element==document.body)return element;while((element=element.parentNode)&&element!=document.body) +if(Element.getStyle(element,'position')!='static') +return element;return document.body;},within:function(element,x,y){if(this.includeScrollOffsets) +return this.withinIncludingScrolloffsets(element,x,y);this.xcomp=x;this.ycomp=y;this.offset=this.cumulativeOffset(element);return(y>=this.offset[1]&&y<this.offset[1]+element.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+element.offsetWidth);},withinIncludingScrolloffsets:function(element,x,y){var offsetcache=this.realOffset(element);this.xcomp=x+offsetcache[0]-this.deltaX;this.ycomp=y+offsetcache[1]-this.deltaY;this.offset=this.cumulativeOffset(element);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+element.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+element.offsetWidth);},overlap:function(mode,element){if(!mode)return 0;if(mode=='vertical') +return((this.offset[1]+element.offsetHeight)-this.ycomp)/element.offsetHeight;if(mode=='horizontal') +return((this.offset[0]+element.offsetWidth)-this.xcomp)/element.offsetWidth;},clone:function(source,target){source=$(source);target=$(target);target.style.position='absolute';var offsets=this.cumulativeOffset(source);target.style.top=offsets[1]+'px';target.style.left=offsets[0]+'px';target.style.width=source.offsetWidth+'px';target.style.height=source.offsetHeight+'px';},page:function(forElement){var valueT=0,valueL=0;var element=forElement;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body) +if(Element.getStyle(element,'position')=='absolute')break;}while(element=element.offsetParent);element=forElement;do{valueT-=element.scrollTop||0;valueL-=element.scrollLeft||0;}while(element=element.parentNode);return[valueL,valueT];},clone:function(source,target){var options=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{}) +source=$(source);var p=Position.page(source);target=$(target);var delta=[0,0];var parent=null;if(Element.getStyle(target,'position')=='absolute'){parent=Position.offsetParent(target);delta=Position.page(parent);} +if(parent==document.body){delta[0]-=document.body.offsetLeft;delta[1]-=document.body.offsetTop;} +if(options.setLeft)target.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';if(options.setTop)target.style.top=(p[1]-delta[1]+options.offsetTop)+'px';if(options.setWidth)target.style.width=source.offsetWidth+'px';if(options.setHeight)target.style.height=source.offsetHeight+'px';},absolutize:function(element){element=$(element);if(element.style.position=='absolute')return;Position.prepare();var offsets=Position.positionedOffset(element);var top=offsets[1];var left=offsets[0];var width=element.clientWidth;var height=element.clientHeight;element._originalLeft=left-parseFloat(element.style.left||0);element._originalTop=top-parseFloat(element.style.top||0);element._originalWidth=element.style.width;element._originalHeight=element.style.height;element.style.position='absolute';element.style.top=top+'px';;element.style.left=left+'px';;element.style.width=width+'px';;element.style.height=height+'px';;},relativize:function(element){element=$(element);if(element.style.position=='relative')return;Position.prepare();element.style.position='relative';var top=parseFloat(element.style.top||0)-(element._originalTop||0);var left=parseFloat(element.style.left||0)-(element._originalLeft||0);element.style.top=top+'px';element.style.left=left+'px';element.style.height=element._originalHeight;element.style.width=element._originalWidth;}} +if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){Position.cumulativeOffset=function(element){var valueT=0,valueL=0;do{valueT+=element.offsetTop||0;valueL+=element.offsetLeft||0;if(element.offsetParent==document.body) +if(Element.getStyle(element,'position')=='absolute')break;element=element.offsetParent;}while(element);return[valueL,valueT];}} +var Selector=Class.create();Selector.prototype={initialize:function(expression){this.params={classNames:[]};this.expression=expression.toString().strip();this.parseExpression();this.compileMatcher();},parseExpression:function(){function abort(message){throw'Parse error in selector: '+message;} +if(this.expression=='')abort('empty expression');var params=this.params,expr=this.expression,match,modifier,clause,rest;while(match=expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)){params.attributes=params.attributes||[];params.attributes.push({name:match[2],operator:match[3],value:match[4]||match[5]||''});expr=match[1];} +if(expr=='*')return this.params.wildcard=true;while(match=expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)){modifier=match[1],clause=match[2],rest=match[3];switch(modifier){case'#':params.id=clause;break;case'.':params.classNames.push(clause);break;case'':case undefined:params.tagName=clause.toUpperCase();break;default:abort(expr.inspect());} +expr=rest;} +if(expr.length>0)abort(expr.inspect());},buildMatchExpression:function(){var params=this.params,conditions=[],clause;if(params.wildcard) +conditions.push('true');if(clause=params.id) +conditions.push('element.id == '+clause.inspect());if(clause=params.tagName) +conditions.push('element.tagName.toUpperCase() == '+clause.inspect());if((clause=params.classNames).length>0) +for(var i=0;i<clause.length;i++) +conditions.push('Element.hasClassName(element, '+clause[i].inspect()+')');if(clause=params.attributes){clause.each(function(attribute){var value='element.getAttribute('+attribute.name.inspect()+')';var splitValueBy=function(delimiter){return value+' && '+value+'.split('+delimiter.inspect()+')';} +switch(attribute.operator){case'=':conditions.push(value+' == '+attribute.value.inspect());break;case'~=':conditions.push(splitValueBy(' ')+'.include('+attribute.value.inspect()+')');break;case'|=':conditions.push(splitValueBy('-')+'.first().toUpperCase() == '+attribute.value.toUpperCase().inspect());break;case'!=':conditions.push(value+' != '+attribute.value.inspect());break;case'':case undefined:conditions.push(value+' != null');break;default:throw'Unknown operator '+attribute.operator+' in selector';}});} +return conditions.join(' && ');},compileMatcher:function(){this.match=new Function('element','if (!element.tagName) return false; \ + return '+this.buildMatchExpression());},findElements:function(scope){var element;if(element=$(this.params.id)) +if(this.match(element)) +if(!scope||Element.childOf(element,scope)) +return[element];scope=(scope||document).getElementsByTagName(this.params.tagName||'*');var results=[];for(var i=0;i<scope.length;i++) +if(this.match(element=scope[i])) +results.push(Element.extend(element));return results;},toString:function(){return this.expression;}} +function $$(){return $A(arguments).map(function(expression){return expression.strip().split(/\s+/).inject([null],function(results,expr){var selector=new Selector(expr);return results.map(selector.findElements.bind(selector)).flatten();});}).flatten();} +var Builder={NODEMAP:{AREA:'map',CAPTION:'table',COL:'table',COLGROUP:'table',LEGEND:'fieldset',OPTGROUP:'select',OPTION:'select',PARAM:'object',TBODY:'table',TD:'table',TFOOT:'table',TH:'table',THEAD:'table',TR:'table'},node:function(elementName){elementName=elementName.toUpperCase();var parentTag=this.NODEMAP[elementName]||'div';var parentElement=document.createElement(parentTag);try{parentElement.innerHTML="<"+elementName+"></"+elementName+">";}catch(e){} +var element=parentElement.firstChild||null;if(element&&(element.tagName!=elementName)) +element=element.getElementsByTagName(elementName)[0];if(!element)element=document.createElement(elementName);if(!element)return;if(arguments[1]) +if(this._isStringOrNumber(arguments[1])||(arguments[1]instanceof Array)){this._children(element,arguments[1]);}else{var attrs=this._attributes(arguments[1]);if(attrs.length){try{parentElement.innerHTML="<"+elementName+" "+ +attrs+"></"+elementName+">";}catch(e){} +element=parentElement.firstChild||null;if(!element){element=document.createElement(elementName);for(attr in arguments[1]) +element[attr=='class'?'className':attr]=arguments[1][attr];} +if(element.tagName!=elementName) +element=parentElement.getElementsByTagName(elementName)[0];}} if(arguments[2]) -this._children(element, arguments[2]); -return element; -}, -_text: function(text) { - return document.createTextNode(text); -}, -_attributes: function(attributes) { -var attrs = []; -for(attribute in attributes) -attrs.push((attribute=='className' ? 'class' : attribute) + -'="' + attributes[attribute].toString().escapeHTML() + '"'); -return attrs.join(" "); -}, -_children: function(element, children) { -if(typeof children=='object') {children.flatten().each( function(e) { -if(typeof e=='object') +this._children(element,arguments[2]);return element;},_text:function(text){return document.createTextNode(text);},_attributes:function(attributes){var attrs=[];for(attribute in attributes) +attrs.push((attribute=='className'?'class':attribute)+'="'+attributes[attribute].toString().escapeHTML()+'"');return attrs.join(" ");},_children:function(element,children){if(typeof children=='object'){children.flatten().each(function(e){if(typeof e=='object') element.appendChild(e) else if(Builder._isStringOrNumber(e)) -element.appendChild(Builder._text(e)); -}); -} else -if(Builder._isStringOrNumber(children)) - element.appendChild(Builder._text(children)); -}, -_isStringOrNumber: function(param) { -return(typeof param=='string' || typeof param=='number'); -} -} -Object.extend(Builder, -{ -exportTags:function() -{ -var tags=["BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG", "CAPTION"]; -tags.each(function(tag) -{ -window[tag]=function() -{ -var args=$A(arguments); -if(args.length==0) -return Builder.node(tag,null); -if(args.length==1) -return Builder.node(tag,args[0]); -if(args.length>1) -return Builder.node(tag,args.shift(),args); -}; -}); -} -}); -Builder.exportTags(); -Object.extend(Date.prototype, -{ -SimpleFormat: function(format, data) -{ -data = data || {}; -var bits = new Array(); -bits['d'] = this.getDate(); -bits['dd'] = String(this.getDate()).zerofill(2); -bits['M'] = this.getMonth()+1; -bits['MM'] = String(this.getMonth()+1).zerofill(2); -if(data.AbbreviatedMonthNames) -bits['MMM'] = data.AbbreviatedMonthNames[this.getMonth()]; -if(data.MonthNames) -bits['MMMM'] = data.MonthNames[this.getMonth()]; -var yearStr = "" + this.getFullYear(); -yearStr = (yearStr.length == 2) ? '19' + yearStr: yearStr; -bits['yyyy'] = yearStr; -bits['yy'] = bits['yyyy'].toString().substr(2,2); -var frm = new String(format); -for (var sect in bits) -{ -var reg = new RegExp("\\b"+sect+"\\b" ,"g"); -frm = frm.replace(reg, bits[sect]); -} -return frm; -}, -toISODate : function() -{ -var y = this.getFullYear(); -var m = String(this.getMonth() + 1).zerofill(2); -var d = String(this.getDate()).zerofill(2); -return String(y) + String(m) + String(d); -} -}); -Object.extend(Date, -{ -SimpleParse: function(value, format) -{ -val=String(value); -format=String(format); -if(val.length <= 0) return null; -if(format.length <= 0) return new Date(value); -var isInteger = function (val) -{ -var digits="1234567890"; -for (var i=0; i < val.length; i++) -{ -if (digits.indexOf(val.charAt(i))==-1) { return false; } -} -return true; -}; -var getInt = function(str,i,minlength,maxlength) -{ -for (var x=maxlength; x>=minlength; x--) -{ -var token=str.substring(i,i+x); -if (token.length < minlength) { return null; } -if (isInteger(token)) { return token; } -} -return null; -}; -var i_val=0; -var i_format=0; -var c=""; -var token=""; -var token2=""; -var x,y; -var now=new Date(); -var year=now.getFullYear(); -var month=now.getMonth()+1; -var date=1; -while (i_format < format.length) -{ -c=format.charAt(i_format); -token=""; -while ((format.charAt(i_format)==c) && (i_format < format.length)) -{ -token += format.charAt(i_format++); -} -if (token=="yyyy" || token=="yy" || token=="y") -{ -if (token=="yyyy") { x=4;y=4; } -if (token=="yy") { x=2;y=2; } -if (token=="y"){ x=2;y=4; } -year=getInt(val,i_val,x,y); -if (year==null) { return null; } -i_val += year.length; -if (year.length==2) -{ -if (year > 70) { year=1900+(year-0); } -else { year=2000+(year-0); } -} -} -else if (token=="MM"||token=="M") -{ -month=getInt(val,i_val,token.length,2); -if(month==null||(month<1)||(month>12)){return null;} -i_val+=month.length; -} -else if (token=="dd"||token=="d") -{ -date=getInt(val,i_val,token.length,2); -if(date==null||(date<1)||(date>31)){return null;} -i_val+=date.length; -} -else -{ -if (val.substring(i_val,i_val+token.length)!=token) {return null;} -else {i_val+=token.length;} -} -} -if (i_val != val.length) { return null; } -if (month==2) -{ -if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) { -if (date > 29){ return null; } -} -else { if (date > 28) { return null; } } -} -if ((month==4)||(month==6)||(month==9)||(month==11)) -{ -if (date > 30) { return null; } -} -var newdate=new Date(year,month-1,date, 0, 0, 0); -return newdate; -} -}); -var Prado = -{ -Version: '3.0.0', -Browser : function() -{ -var info = { Version : "1.0" }; -var is_major = parseInt( navigator.appVersion ); -info.nver = is_major; -info.ver = navigator.appVersion; -info.agent = navigator.userAgent; -info.dom = document.getElementById ? 1 : 0; -info.opera = window.opera ? 1 : 0; -info.ie5 = ( info.ver.indexOf( "MSIE 5" ) > -1 && info.dom && !info.opera ) ? 1 : 0; -info.ie6 = ( info.ver.indexOf( "MSIE 6" ) > -1 && info.dom && !info.opera ) ? 1 : 0; -info.ie4 = ( document.all && !info.dom && !info.opera ) ? 1 : 0; -info.ie = info.ie4 || info.ie5 || info.ie6; -info.mac = info.agent.indexOf( "Mac" ) > -1; -info.ns6 = ( info.dom && parseInt( info.ver ) >= 5 ) ? 1 : 0; -info.ie3 = ( info.ver.indexOf( "MSIE" ) && ( is_major < 4 ) ); -info.hotjava = ( info.agent.toLowerCase().indexOf( 'hotjava' ) != -1 ) ? 1 : 0; -info.ns4 = ( document.layers && !info.dom && !info.hotjava ) ? 1 : 0; -info.bw = ( info.ie6 || info.ie5 || info.ie4 || info.ns4 || info.ns6 || info.opera ); -info.ver3 = ( info.hotjava || info.ie3 ); -info.opera7 = ( ( info.agent.toLowerCase().indexOf( 'opera 7' ) > -1 ) || ( info.agent.toLowerCase().indexOf( 'opera/7' ) > -1 ) ); -info.operaOld = info.opera && !info.opera7; -return info; -}, -ImportCss : function(doc, css_file) -{ -if (Prado.Browser().ie) -var styleSheet = doc.createStyleSheet(css_file); -else -{ -var elm = doc.createElement("link"); -elm.rel = "stylesheet"; -elm.href = css_file; -if (headArr = doc.getElementsByTagName("head")) -headArr[0].appendChild(elm); -} -} -}; -Prado.PostBack = function(event,options) -{ -var form = $(options['FormID']); -var canSubmit = true; -if(options['CausesValidation'] && typeof(Prado.Validation) != "undefined") -{ -if(!Prado.Validation.validate(options['FormID'], options['ValidationGroup'], $(options['ID']))) -return Event.stop(event); -} -if(options['PostBackUrl'] && options['PostBackUrl'].length > 0) -form.action = options['PostBackUrl']; -if(options['TrackFocus']) -{ -var lastFocus = $('PRADO_LASTFOCUS'); -if(lastFocus) -{ -var active = document.activeElement; -if(active) -lastFocus.value = active.id; +element.appendChild(Builder._text(e));});}else +if(Builder._isStringOrNumber(children)) +element.appendChild(Builder._text(children));},_isStringOrNumber:function(param){return(typeof param=='string'||typeof param=='number');}} +Object.extend(Builder,{exportTags:function() +{var tags=["BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG","CAPTION"];tags.each(function(tag) +{window[tag]=function() +{var args=$A(arguments);if(args.length==0) +return Builder.node(tag,null);if(args.length==1) +return Builder.node(tag,args[0]);if(args.length>1) +return Builder.node(tag,args.shift(),args);};});}});Builder.exportTags();Object.extend(Date.prototype,{SimpleFormat:function(format,data) +{data=data||{};var bits=new Array();bits['d']=this.getDate();bits['dd']=String(this.getDate()).zerofill(2);bits['M']=this.getMonth()+1;bits['MM']=String(this.getMonth()+1).zerofill(2);if(data.AbbreviatedMonthNames) +bits['MMM']=data.AbbreviatedMonthNames[this.getMonth()];if(data.MonthNames) +bits['MMMM']=data.MonthNames[this.getMonth()];var yearStr=""+this.getFullYear();yearStr=(yearStr.length==2)?'19'+yearStr:yearStr;bits['yyyy']=yearStr;bits['yy']=bits['yyyy'].toString().substr(2,2);var frm=new String(format);for(var sect in bits) +{var reg=new RegExp("\\b"+sect+"\\b","g");frm=frm.replace(reg,bits[sect]);} +return frm;},toISODate:function() +{var y=this.getFullYear();var m=String(this.getMonth()+1).zerofill(2);var d=String(this.getDate()).zerofill(2);return String(y)+String(m)+String(d);}});Object.extend(Date,{SimpleParse:function(value,format) +{val=String(value);format=String(format);if(val.length<=0)return null;if(format.length<=0)return new Date(value);var isInteger=function(val) +{var digits="1234567890";for(var i=0;i<val.length;i++) +{if(digits.indexOf(val.charAt(i))==-1){return false;}} +return true;};var getInt=function(str,i,minlength,maxlength) +{for(var x=maxlength;x>=minlength;x--) +{var token=str.substring(i,i+x);if(token.length<minlength){return null;} +if(isInteger(token)){return token;}} +return null;};var i_val=0;var i_format=0;var c="";var token="";var token2="";var x,y;var now=new Date();var year=now.getFullYear();var month=now.getMonth()+1;var date=1;while(i_format<format.length) +{c=format.charAt(i_format);token="";while((format.charAt(i_format)==c)&&(i_format<format.length)) +{token+=format.charAt(i_format++);} +if(token=="yyyy"||token=="yy"||token=="y") +{if(token=="yyyy"){x=4;y=4;} +if(token=="yy"){x=2;y=2;} +if(token=="y"){x=2;y=4;} +year=getInt(val,i_val,x,y);if(year==null){return null;} +i_val+=year.length;if(year.length==2) +{if(year>70){year=1900+(year-0);} +else{year=2000+(year-0);}}} +else if(token=="MM"||token=="M") +{month=getInt(val,i_val,token.length,2);if(month==null||(month<1)||(month>12)){return null;} +i_val+=month.length;} +else if(token=="dd"||token=="d") +{date=getInt(val,i_val,token.length,2);if(date==null||(date<1)||(date>31)){return null;} +i_val+=date.length;} else -lastFocus.value = options['EventTarget']; -} -} -$('PRADO_POSTBACK_TARGET').value = options['EventTarget']; -$('PRADO_POSTBACK_PARAMETER').value = options['EventParameter']; -if(options['StopEvent']) -Event.stop(event); -Event.fireEvent(form,"submit"); -} -Prado.Element = -{ -setValue : function(element, value) -{ -var el = $(element); -if(el && typeof(el.value) != "undefined") -el.value = value; -}, -select : function(element, method, value) -{ -var el = $(element); -var isList = element.indexOf('[]') > -1; -if(!el && !isList) return; -method = isList ? 'check'+method : el.tagName.toLowerCase()+method; -var selection = Prado.Element.Selection; -if(isFunction(selection[method])) -selection[method](isList ? element : el,value); -}, -click : function(element) -{ -var el = $(element); -if(!el) return; -if(document.createEvent) -{ -var evt = document.createEvent('HTMLEvents'); -evt.initEvent('click', true, true); -el.dispatchEvent(evt); -} +{if(val.substring(i_val,i_val+token.length)!=token){return null;} +else{i_val+=token.length;}}} +if(i_val!=val.length){return null;} +if(month==2) +{if(((year%4==0)&&(year%100!=0))||(year%400==0)){if(date>29){return null;}} +else{if(date>28){return null;}}} +if((month==4)||(month==6)||(month==9)||(month==11)) +{if(date>30){return null;}} +var newdate=new Date(year,month-1,date,0,0,0);return newdate;}});var Prado={Version:'3.0.0',Browser:function() +{var info={Version:"1.0"};var is_major=parseInt(navigator.appVersion);info.nver=is_major;info.ver=navigator.appVersion;info.agent=navigator.userAgent;info.dom=document.getElementById?1:0;info.opera=window.opera?1:0;info.ie5=(info.ver.indexOf("MSIE 5")>-1&&info.dom&&!info.opera)?1:0;info.ie6=(info.ver.indexOf("MSIE 6")>-1&&info.dom&&!info.opera)?1:0;info.ie4=(document.all&&!info.dom&&!info.opera)?1:0;info.ie=info.ie4||info.ie5||info.ie6;info.mac=info.agent.indexOf("Mac")>-1;info.ns6=(info.dom&&parseInt(info.ver)>=5)?1:0;info.ie3=(info.ver.indexOf("MSIE")&&(is_major<4));info.hotjava=(info.agent.toLowerCase().indexOf('hotjava')!=-1)?1:0;info.ns4=(document.layers&&!info.dom&&!info.hotjava)?1:0;info.bw=(info.ie6||info.ie5||info.ie4||info.ns4||info.ns6||info.opera);info.ver3=(info.hotjava||info.ie3);info.opera7=((info.agent.toLowerCase().indexOf('opera 7')>-1)||(info.agent.toLowerCase().indexOf('opera/7')>-1));info.operaOld=info.opera&&!info.opera7;return info;},ImportCss:function(doc,css_file) +{if(Prado.Browser().ie) +var styleSheet=doc.createStyleSheet(css_file);else +{var elm=doc.createElement("link");elm.rel="stylesheet";elm.href=css_file;if(headArr=doc.getElementsByTagName("head")) +headArr[0].appendChild(elm);}}};Prado.PostBack=function(event,options) +{var form=$(options['FormID']);var canSubmit=true;if(options['CausesValidation']&&typeof(Prado.Validation)!="undefined") +{if(!Prado.Validation.validate(options['FormID'],options['ValidationGroup'],$(options['ID']))) +return Event.stop(event);} +if(options['PostBackUrl']&&options['PostBackUrl'].length>0) +form.action=options['PostBackUrl'];if(options['TrackFocus']) +{var lastFocus=$('PRADO_LASTFOCUS');if(lastFocus) +{var active=document.activeElement;if(active) +lastFocus.value=active.id;else +lastFocus.value=options['EventTarget'];}} +$('PRADO_POSTBACK_TARGET').value=options['EventTarget'];$('PRADO_POSTBACK_PARAMETER').value=options['EventParameter'];if(options['StopEvent']) +Event.stop(event);Event.fireEvent(form,"submit");} +Prado.Element={setValue:function(element,value) +{var el=$(element);if(el&&typeof(el.value)!="undefined") +el.value=value;},select:function(element,method,value) +{var el=$(element);var isList=element.indexOf('[]')>-1;if(!el&&!isList)return;method=isList?'check'+method:el.tagName.toLowerCase()+method;var selection=Prado.Element.Selection;if(isFunction(selection[method])) +selection[method](isList?element:el,value);},click:function(element) +{var el=$(element);if(!el)return;if(document.createEvent) +{var evt=document.createEvent('HTMLEvents');evt.initEvent('click',true,true);el.dispatchEvent(evt);} else if(el.fireEvent) -{ -el.fireEvent('onclick'); -if(isFunction(el.onclick)) -el.onclick(); -} -}, -setAttribute : function(element, attribute, value) -{ -var el = $(element); -if(attribute == "disabled" && value==false) -el.removeAttribute(attribute); -else -el.setAttribute(attribute, value); -}, -setOptions : function(element, options) -{ -var el = $(element); -if(el && el.tagName.toLowerCase() == "select") -{ -while(el.length > 0) -el.remove(0); -for(var i = 0; i<options.length; i++) -el.options[el.options.length] = new Option(options[i][0],options[i][1]); -} -}, -focus : function(element) -{ -var obj = $(element); -if(isObject(obj) && isdef(obj.focus)) -setTimeout(function(){ obj.focus(); }, 100); -return false; -} -} -Prado.Element.Selection = -{ -inputValue : function(el, value) -{ -switch(el.type.toLowerCase()) -{ -case 'checkbox': -case 'radio': -return el.checked = value; -} -}, -selectValue : function(el, value) -{ -$A(el.options).each(function(option) -{ -option.selected = option.value == value; -}); -}, -selectIndex : function(el, index) -{ -if(el.type == 'select-one') -el.selectedIndex = index; -else -{ -for(var i = 0; i<el.length; i++) -{ -if(i == index) -el.options[i].selected = true; -} -} -}, -selectClear : function(el) -{ -el.selectedIndex = -1; -}, -selectAll : function(el) -{ -$A(el.options).each(function(option) -{ -option.selected = true; -Logger.warn(option.value); -}); -}, -selectInvert : function(el) -{ -$A(el.options).each(function(option) -{ -option.selected = !option.selected; -}); -}, -checkValue : function(name, value) -{ -$A(document.getElementsByName(name)).each(function(el) -{ -el.checked = el.value == value -}); -}, -checkIndex : function(name, index) -{ -var elements = $A(document.getElementsByName(name)); -for(var i = 0; i<elements.length; i++) -{ -if(i == index) -elements[i].checked = true; -} -}, -checkClear : function(name) -{ -$A(document.getElementsByName(name)).each(function(el) -{ -el.checked = false; -}); -}, -checkAll : function(name) -{ -$A(document.getElementsByName(name)).each(function(el) -{ -el.checked = true; -}); -}, -checkInvert : function(name) -{ -$A(document.getElementsByName(name)).each(function(el) -{ -el.checked = !el.checked; -}); -} -}; -Prado.WebUI = Class.create(); -Prado.WebUI.PostBackControl = Class.create(); -Prado.WebUI.PostBackControl.prototype = -{ -_elementOnClick : null, -initialize : function(options) -{ -this.element = $(options.ID); -if(this.onInit) -this.onInit(options); -}, -onInit : function(options) -{ -if(typeof(this.element.onclick)=="function") -{ -this._elementOnClick = this.element.onclick; -this.element.onclick = null; -} -Event.observe(this.element, "click", this.onClick.bindEvent(this,options)); -}, -onClick : function(event, options) -{ -var src = Event.element(event); -var doPostBack = true; -var onclicked = null; -if(this._elementOnClick) -{ -var onclicked = this._elementOnClick(event); -if(typeof(onclicked) == "boolean") -doPostBack = onclicked; -} +{el.fireEvent('onclick');if(isFunction(el.onclick)) +el.onclick();}},setAttribute:function(element,attribute,value) +{var el=$(element);if(attribute=="disabled"&&value==false) +el.removeAttribute(attribute);else +el.setAttribute(attribute,value);},setOptions:function(element,options) +{var el=$(element);if(el&&el.tagName.toLowerCase()=="select") +{while(el.length>0) +el.remove(0);for(var i=0;i<options.length;i++) +el.options[el.options.length]=new Option(options[i][0],options[i][1]);}},focus:function(element) +{var obj=$(element);if(isObject(obj)&&isdef(obj.focus)) +setTimeout(function(){obj.focus();},100);return false;}} +Prado.Element.Selection={inputValue:function(el,value) +{switch(el.type.toLowerCase()) +{case'checkbox':case'radio':return el.checked=value;}},selectValue:function(el,value) +{$A(el.options).each(function(option) +{option.selected=option.value==value;});},selectIndex:function(el,index) +{if(el.type=='select-one') +el.selectedIndex=index;else +{for(var i=0;i<el.length;i++) +{if(i==index) +el.options[i].selected=true;}}},selectClear:function(el) +{el.selectedIndex=-1;},selectAll:function(el) +{$A(el.options).each(function(option) +{option.selected=true;Logger.warn(option.value);});},selectInvert:function(el) +{$A(el.options).each(function(option) +{option.selected=!option.selected;});},checkValue:function(name,value) +{$A(document.getElementsByName(name)).each(function(el) +{el.checked=el.value==value});},checkIndex:function(name,index) +{var elements=$A(document.getElementsByName(name));for(var i=0;i<elements.length;i++) +{if(i==index) +elements[i].checked=true;}},checkClear:function(name) +{$A(document.getElementsByName(name)).each(function(el) +{el.checked=false;});},checkAll:function(name) +{$A(document.getElementsByName(name)).each(function(el) +{el.checked=true;});},checkInvert:function(name) +{$A(document.getElementsByName(name)).each(function(el) +{el.checked=!el.checked;});}};Prado.WebUI=Class.create();Prado.WebUI.PostBackControl=Class.create();Prado.WebUI.PostBackControl.prototype={_elementOnClick:null,initialize:function(options) +{this.element=$(options.ID);if(this.onInit) +this.onInit(options);},onInit:function(options) +{if(typeof(this.element.onclick)=="function") +{this._elementOnClick=this.element.onclick;this.element.onclick=null;} +Event.observe(this.element,"click",this.onClick.bindEvent(this,options));},onClick:function(event,options) +{var src=Event.element(event);var doPostBack=true;var onclicked=null;if(this._elementOnClick) +{var onclicked=this._elementOnClick(event);if(typeof(onclicked)=="boolean") +doPostBack=onclicked;} if(doPostBack) -this.onPostBack(event,options); -if(typeof(onclicked) == "boolean" && !onclicked) -Event.stop(event); -}, -onPostBack : function(event, options) -{ -Prado.PostBack(event,options); -} -}; -Prado.WebUI.TButton = Class.extend(Prado.WebUI.PostBackControl); -Prado.WebUI.TLinkButton = Class.extend(Prado.WebUI.PostBackControl); -Prado.WebUI.TCheckBox = Class.extend(Prado.WebUI.PostBackControl); -Prado.WebUI.TBulletedList = Class.extend(Prado.WebUI.PostBackControl); -Prado.WebUI.TImageMap = Class.extend(Prado.WebUI.PostBackControl); -Prado.WebUI.TImageButton = Class.extend(Prado.WebUI.PostBackControl); -Object.extend(Prado.WebUI.TImageButton.prototype, -{ -hasXYInput : false, -onPostBack : function(event, options) -{ -if(!this.hasXYInput) -{ -this.addXYInput(event,options); -this.hasXYInput = true; -} -Prado.PostBack(event, options); -}, -addXYInput : function(event,options) -{ -var imagePos = Position.cumulativeOffset(this.element); -var clickedPos = [event.clientX, event.clientY]; -var x = clickedPos[0]-imagePos[0]+1; -var y = clickedPos[1]-imagePos[1]+1; -var id = options['EventTarget']; -var x_input = INPUT({type:'hidden',name:id+'_x',value:x}); -var y_input = INPUT({type:'hidden',name:id+'_y',value:y}); -this.element.parentNode.appendChild(x_input); -this.element.parentNode.appendChild(y_input); -} -}); -Prado.WebUI.TRadioButton = Class.extend(Prado.WebUI.PostBackControl); -Prado.WebUI.TRadioButton.prototype.onRadioButtonInitialize = Prado.WebUI.TRadioButton.prototype.initialize; -Object.extend(Prado.WebUI.TRadioButton.prototype, -{ -initialize : function(options) -{ -this.element = $(options['ID']); -if(!this.element.checked) -this.onRadioButtonInitialize(options); -} -}); -Prado.WebUI.TTextBox = Class.extend(Prado.WebUI.PostBackControl, -{ -onInit : function(options) -{ -if(options['TextMode'] != 'MultiLine') -Event.observe(this.element, "keydown", this.handleReturnKey.bind(this)); -Event.observe(this.element, "change", Prado.PostBack.bindEvent(this,options)); -}, -handleReturnKey : function(e) -{ - if(Event.keyCode(e) == Event.KEY_RETURN) -{ -var target = Event.element(e); -if(target) -{ -Event.fireEvent(target, "change"); -Event.stop(e); -} -} -} -}); -Prado.WebUI.TListControl = Class.extend(Prado.WebUI.PostBackControl, -{ -onInit : function(options) -{ -Event.observe(this.element, "change", Prado.PostBack.bindEvent(this,options)); -} -}); -Prado.WebUI.TListBox = Class.extend(Prado.WebUI.TListControl); -Prado.WebUI.TDropDownList = Class.extend(Prado.WebUI.TListControl); -Prado.WebUI.DefaultButton = Class.create(); -Prado.WebUI.DefaultButton.prototype = -{ -initialize : function(options) -{ -this.options = options; -this._event = this.triggerEvent.bindEvent(this); -Event.observe(options['Panel'], 'keydown', this._event); -}, -triggerEvent : function(ev, target) -{ -var enterPressed = Event.keyCode(ev) == Event.KEY_RETURN; -var isTextArea = Event.element(ev).tagName.toLowerCase() == "textarea"; -if(enterPressed && !isTextArea) -{ -var defaultButton = $(this.options['Target']); -if(defaultButton) -{ -this.triggered = true; -Event.fireEvent(defaultButton, this.options['Event']); -Event.stop(ev); -} -} -} -}; -Prado.WebUI.TTextHighlighter=Class.create(); -Prado.WebUI.TTextHighlighter.prototype= -{ -initialize:function(id) -{ -if(!window.clipboardData) return; -var options = -{ -href : 'javascript:;/'+'/copy code to clipboard', -onclick : 'Prado.WebUI.TTextHighlighter.copy(this)', -onmouseover : 'Prado.WebUI.TTextHighlighter.hover(this)', -onmouseout : 'Prado.WebUI.TTextHighlighter.out(this)' -} -var div = DIV({className:'copycode'}, A(options, 'Copy Code')); -document.write(DIV(null,div).innerHTML); -} -}; -Object.extend(Prado.WebUI.TTextHighlighter, -{ -copy : function(obj) -{ -var parent = obj.parentNode.parentNode.parentNode; -var text = ''; -for(var i = 0; i < parent.childNodes.length; i++) -{ -var node = parent.childNodes[i]; -if(node.innerText) -text += node.innerText == 'Copy Code' ? '' : node.innerText; -else -text += node.nodeValue; -} -if(text.length > 0) -window.clipboardData.setData("Text", text); -}, -hover : function(obj) -{ -obj.parentNode.className = "copycode copycode_hover"; -}, -out : function(obj) -{ -obj.parentNode.className = "copycode"; -} -}); -Prado.WebUI.TRatingList = Class.create(); -Prado.WebUI.TRatingList.prototype = -{ -selectedIndex : -1, -initialize : function(options) -{ -this.options = options; -this.element = $(options['ID']); -Element.addClassName(this.element,options.cssClass); -this.radios = document.getElementsByName(options.field); -for(var i = 0; i<this.radios.length; i++) -{ -Event.observe(this.radios[i].parentNode, "mouseover", this.hover.bindEvent(this,i)); -Event.observe(this.radios[i].parentNode, "mouseout", this.recover.bindEvent(this,i)); -Event.observe(this.radios[i].parentNode, "click", this.click.bindEvent(this, i)); -} -this.caption = CAPTION(); -this.element.appendChild(this.caption); -this.selectedIndex = options.selectedIndex; -this.setRating(this.selectedIndex); -}, -hover : function(ev,index) -{ -for(var i = 0; i<this.radios.length; i++) -this.radios[i].parentNode.className = (i<=index) ? "rating_hover" : ""; -this.setCaption(index); -}, -recover : function(ev,index) -{ -for(var i = 0; i<=index; i++) -Element.removeClassName(this.radios[i].parentNode, "rating_hover"); -this.setRating(this.selectedIndex); -}, -click : function(ev, index) -{ -for(var i = 0; i<this.radios.length; i++) -this.radios[i].checked = (i == index); -this.selectedIndex = index; -this.setRating(index); -if(isFunction(this.options.onChange)) -this.options.onChange(this,index); -}, -setRating: function(index) -{ -for(var i = 0; i<=index; i++) -this.radios[i].parentNode.className = "rating_selected"; -this.setCaption(index); -}, -setCaption : function(index) -{ -this.caption.innerHTML = index > -1 ? -this.radios[index].value : this.options.caption; -} -} +this.onPostBack(event,options);if(typeof(onclicked)=="boolean"&&!onclicked) +Event.stop(event);},onPostBack:function(event,options) +{Prado.PostBack(event,options);}};Prado.WebUI.TButton=Class.extend(Prado.WebUI.PostBackControl);Prado.WebUI.TLinkButton=Class.extend(Prado.WebUI.PostBackControl);Prado.WebUI.TCheckBox=Class.extend(Prado.WebUI.PostBackControl);Prado.WebUI.TBulletedList=Class.extend(Prado.WebUI.PostBackControl);Prado.WebUI.TImageMap=Class.extend(Prado.WebUI.PostBackControl);Prado.WebUI.TImageButton=Class.extend(Prado.WebUI.PostBackControl);Object.extend(Prado.WebUI.TImageButton.prototype,{hasXYInput:false,onPostBack:function(event,options) +{if(!this.hasXYInput) +{this.addXYInput(event,options);this.hasXYInput=true;} +Prado.PostBack(event,options);},addXYInput:function(event,options) +{var imagePos=Position.cumulativeOffset(this.element);var clickedPos=[event.clientX,event.clientY];var x=clickedPos[0]-imagePos[0]+1;var y=clickedPos[1]-imagePos[1]+1;var id=options['EventTarget'];var x_input=INPUT({type:'hidden',name:id+'_x',value:x});var y_input=INPUT({type:'hidden',name:id+'_y',value:y});this.element.parentNode.appendChild(x_input);this.element.parentNode.appendChild(y_input);}});Prado.WebUI.TRadioButton=Class.extend(Prado.WebUI.PostBackControl);Prado.WebUI.TRadioButton.prototype.onRadioButtonInitialize=Prado.WebUI.TRadioButton.prototype.initialize;Object.extend(Prado.WebUI.TRadioButton.prototype,{initialize:function(options) +{this.element=$(options['ID']);if(!this.element.checked) +this.onRadioButtonInitialize(options);}});Prado.WebUI.TTextBox=Class.extend(Prado.WebUI.PostBackControl,{onInit:function(options) +{if(options['TextMode']!='MultiLine') +Event.observe(this.element,"keydown",this.handleReturnKey.bind(this));Event.observe(this.element,"change",Prado.PostBack.bindEvent(this,options));},handleReturnKey:function(e) +{if(Event.keyCode(e)==Event.KEY_RETURN) +{var target=Event.element(e);if(target) +{Event.fireEvent(target,"change");Event.stop(e);}}}});Prado.WebUI.TListControl=Class.extend(Prado.WebUI.PostBackControl,{onInit:function(options) +{Event.observe(this.element,"change",Prado.PostBack.bindEvent(this,options));}});Prado.WebUI.TListBox=Class.extend(Prado.WebUI.TListControl);Prado.WebUI.TDropDownList=Class.extend(Prado.WebUI.TListControl);Prado.WebUI.DefaultButton=Class.create();Prado.WebUI.DefaultButton.prototype={initialize:function(options) +{this.options=options;this._event=this.triggerEvent.bindEvent(this);Event.observe(options['Panel'],'keydown',this._event);},triggerEvent:function(ev,target) +{var enterPressed=Event.keyCode(ev)==Event.KEY_RETURN;var isTextArea=Event.element(ev).tagName.toLowerCase()=="textarea";if(enterPressed&&!isTextArea) +{var defaultButton=$(this.options['Target']);if(defaultButton) +{this.triggered=true;Event.fireEvent(defaultButton,this.options['Event']);Event.stop(ev);}}}};Prado.WebUI.TTextHighlighter=Class.create();Prado.WebUI.TTextHighlighter.prototype={initialize:function(id) +{if(!window.clipboardData)return;var options={href:'javascript:;/'+'/copy code to clipboard',onclick:'Prado.WebUI.TTextHighlighter.copy(this)',onmouseover:'Prado.WebUI.TTextHighlighter.hover(this)',onmouseout:'Prado.WebUI.TTextHighlighter.out(this)'} +var div=DIV({className:'copycode'},A(options,'Copy Code'));document.write(DIV(null,div).innerHTML);}};Object.extend(Prado.WebUI.TTextHighlighter,{copy:function(obj) +{var parent=obj.parentNode.parentNode.parentNode;var text='';for(var i=0;i<parent.childNodes.length;i++) +{var node=parent.childNodes[i];if(node.innerText) +text+=node.innerText=='Copy Code'?'':node.innerText;else +text+=node.nodeValue;} +if(text.length>0) +window.clipboardData.setData("Text",text);},hover:function(obj) +{obj.parentNode.className="copycode copycode_hover";},out:function(obj) +{obj.parentNode.className="copycode";}});Prado.WebUI.TRatingList=Class.create();Prado.WebUI.TRatingList.prototype={selectedIndex:-1,initialize:function(options) +{this.options=options;this.element=$(options['ID']);Element.addClassName(this.element,options.cssClass);this.radios=document.getElementsByName(options.field);for(var i=0;i<this.radios.length;i++) +{Event.observe(this.radios[i].parentNode,"mouseover",this.hover.bindEvent(this,i));Event.observe(this.radios[i].parentNode,"mouseout",this.recover.bindEvent(this,i));Event.observe(this.radios[i].parentNode,"click",this.click.bindEvent(this,i));} +this.caption=CAPTION();this.element.appendChild(this.caption);this.selectedIndex=options.selectedIndex;this.setRating(this.selectedIndex);},hover:function(ev,index) +{for(var i=0;i<this.radios.length;i++) +this.radios[i].parentNode.className=(i<=index)?"rating_hover":"";this.setCaption(index);},recover:function(ev,index) +{for(var i=0;i<=index;i++) +Element.removeClassName(this.radios[i].parentNode,"rating_hover");this.setRating(this.selectedIndex);},click:function(ev,index) +{for(var i=0;i<this.radios.length;i++) +this.radios[i].checked=(i==index);this.selectedIndex=index;this.setRating(index);if(isFunction(this.options.onChange)) +this.options.onChange(this,index);},setRating:function(index) +{for(var i=0;i<=index;i++) +this.radios[i].parentNode.className="rating_selected";this.setCaption(index);},setCaption:function(index) +{this.caption.innerHTML=index>-1?this.radios[index].value:this.options.caption;}}
\ No newline at end of file |