
/*  JS Resource: lib/i2rd-util.js  */
if(typeof i2rd == 'undefined') {
if(typeof Array.prototype.push == 'undefined') { 
Array.prototype.push=function(i){if(i){this[this.length]=i;}};
}
if(typeof Array.prototype.pop == 'undefined') { 
Array.prototype.pop=function() {
if(this.length==0){return;}
var i, n = this.length - 1;
i=this[n];
delete this[n];
this.length = n;
return i;
};
}
Array.prototype.pushAll = function(list) { 
for(var h = 0, hb = list.length; h < hb; h++) {
this.push(list[h]);
}
};

if(typeof __i2rd_domupdate_event == 'undefined') { 
__i2rd_domupdate_event = "domupdate";
__i2rd_domupdate_handlers = [];
__i2rd_domupdate_fire = function(element, evt) {
var i, h, args = [];
if(evt) {args.push(evt);}
for(i=0;(h=__i2rd_domupdate_handlers[i]);i++){
try {h.apply(element,args);}catch(e){}
}
};
}
var log4js={}; 
log4js.logger={};
log4js.logger.info=function(){};
log4js.logger.error=log4js.logger.info;
log4js.logger.warn=log4js.logger.info;
log4js.logger.debug=log4js.logger.info;
i2rd = {
xmlToString:function(xml) {
var str = '';
if(typeof xml != 'string') {
var i,ib;
if(xml.xml) {
for (i=0,ib=xml.childNodes.length;i<ib;i++){str+=xml.childNodes[i].xml;}
} else {
var xs = new XMLSerializer();
for (i=0,ib=xml.childNodes.length;i<ib;i++) {str+=xs.serializeToString(xml.childNodes[i]);}
}
} else {str = xml;}
return str;
},
scriptRX:new RegExp('<script[^>]*>([\\S\\s]*?)<\/script>', 'gim'),
stripScripts:function(html){
return {
html:html.replace(i2rd.scriptRX, ''),
scripts:(function(){
var m=[],i,arr;
while( (arr = i2rd.scriptRX.exec(html)) ){
if(arr[1]){m[m.length]=arr[1].replace(/^\s*<!\[CDATA\[/, '').replace(/\]\]>\s*$/, '');}
}
return m;
})()
}; 
},
createElement: function(tag) {
var ns, de = document.documentElement;
ns = (de ? de.namespaceURI : false);
if (ns) { return document.createElementNS(ns, tag);} 
else { return document.createElement(tag); }
},
getBody : function(w) {
var doc = (w || window).document;
return (doc.body || doc.getElementsByTagName("body")[0]); 
},
getElementsByTagName: function(tn, start) {
start = start || document;
var r = [], els = start.getElementsByTagName(tn);
if(!els || els.length==0){els=start.getElementsByTagName(tn.toUpperCase());}
r.pushAll(els);
return r;
},


addEvent: function(el, type, handler) {
if(type == __i2rd_domupdate_event) {
__i2rd_domupdate_handlers.push(handler);
} else if (el.addEventListener) {
el.addEventListener(type, handler, false);
} else {
if (!handler.$$guid){handler.$$guid=i2rd.addEvent_guid++;}
if (!el.events){el.events={};}
var handlers = el.events[type];
if (!handlers) {
handlers = el.events[type] = {};
if (el["on" + type]) {
handlers[0] = el["on" + type];
}
}
handlers[handler.$$guid] = handler;
el["on" + type] = i2rd.handleEvent;
}
},
removeEvent: function(el, type, handler) {
if(type==__i2rd_domupdate_event) {
var hl=[];
for(i=0;(h=__i2rd_domupdate_handlers[i]);i++){if(h!==handler){hl.push(h);}}
__i2rd_domupdate_handlers=hl;
} else if (el.removeEventListener) {
el.removeEventListener(type, handler, false);
} else {
if (el.events && el.events[type]) {
delete el.events[type][handler.$$guid];
}
}
},

addEvent_guid: 1,

handleEvent: function(event) {
var i, hl, rv = true;
event = event || i2rd.fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
hl = this.events[event.type];
for (i in hl) {
this.$$handleEvent=hl[i];
if (this.$$handleEvent(event)==false){rv = false;}
}
return rv;
},
fixEvent: function(event) {
event.preventDefault = i2rd.fixEvent_preventDefault;
event.stopPropagation = i2rd.fixEvent_stopPropagation;
return event;
},
fixEvent_preventDefault: function() {this.returnValue = false;},
fixEvent_stopPropagation: function() {this.cancelBubble = true;},
getAjaxTransport: function() {
if(window.ActiveXObject){
try{return new ActiveXObject("Msxml2.XMLHTTP");}catch(e){
try{new ActiveXObject("Microsoft.XMLHTTP");}catch(e){}
}
}else{
try{return new XMLHttpRequest();} catch(e) {}
}
return null;
},
bind: function(m, caller) {
var args = [], _m=m,obj=caller;
if(arguments && arguments.length>2) {
for(var i=2;i<arguments.length;i++){args[i - 2]=arguments[i];}
}
return function() {	
for(var i=0;i<arguments.length;i++) {args[args.length] = arguments[i];}
_m.apply(obj, args);
};
},
getInnerText: function(el) {
if (typeof el=="string"){return el;}
var cn,i,str="",children=el.childNodes;
for(i=0;(cn=children[i]);i++) {
switch (cn.nodeType) {
case 1: str += i2rd.getInnerText(cn); break;
case 3:
case 4: str += cn.nodeValue; break;
}
}
return str;
},
mousex: 0,
mousey: 0,
mousetrack: false,
updateLoc: function(evt) {
var x=0,y=0;
if (evt.pageX) {
x = evt.pageX;
y = evt.pageY; 
} else if (evt.clientX) {
var de = document.documentElement;
x = evt.clientX + de.scrollLeft;
y = evt.clientY + de.scrollTop;
} else { 
x = evt.screenX;
y = evt.screenY;
}
i2rd.mousex = x;
i2rd.mousey = y;
},
getMouseCoord: function(evt) {
if(!i2rd.mousetrack) {
i2rd.mousetrack = true;
if(evt){i2rd.updateLoc(evt);}
i2rd.addEvent(document, 'mousemove', i2rd.updateLoc);
}
return {x:i2rd.mousex, y:i2rd.mousey};
},
getCookie: function (name) {
var p,b,dc = document.cookie;
if(!dc) {return null;}
p=name+"=";
b=dc.indexOf("; "+p);
if (b==-1) {
b=dc.indexOf(p);
if(b!=0){return null;}
} else {b+=2;}
var e = document.cookie.indexOf(";", b);
if(e==-1){e=dc.length;}
return unescape(dc.substring(b+p.length, e));
},
setCookie: function (name, value, expires, path, domain, secure) {
document.cookie=name+"="+escape(value)+
((expires)?"; expires="+expires.toGMTString():"")+
((path)?"; path="+path : "")+
((domain)?"; domain="+domain:"")+
((secure)?"; secure" : "");
},
deleteCookie: function(name, path, domain) {
document.cookie=name+"; expires=Thu, 01-Jan-1970 00:00:01 GMT"+
((path)?"; path="+path:"")+
((domain)?"; domain="+domain:"");
},
lastFocus: null,
focusListener: function(evt) {
var el, lf=i2rd.lastFocus;
if(lf){lf.className=lf.className.replace("focused", "");}
evt=evt||window.event;
el=evt.target||evt.srcElement;
i2rd.lastFocus=el;
el.className=el.className+" focused";
},

owfDefault : {
menubar : false,
location : false,
toolbar : false,
scrollbars : true,
statusbar : false
},
openWindow: function(url, name, dim, features, pbMesg, evt) {
name = name || '_blank';
features = features || i2rd.owfDefault;
pbMesg = pbMesg || 'Please disable any popup blockers for this site.';
var fstr = '';
for(var key in features) {
var val = i2rd.getOWFeature(features, key);
if(val!=null) {
fstr +=','+key+'='+(val?'yes':'no');
} 
}
if(dim) {
if(dim.x && dim.x > 0){dim.x+=30;fstr+=',width='+dim.x;}
if(dim.y && dim.y > 0){dim.y+=50;fstr+=',height='+dim.y;}
}
if(fstr.length > 0) {fstr = fstr.substring(1);}
var nw = window.open(url, name, fstr);
if(name != '_top' && name != '_parent' && name != '_self') {
if(nw.opener != window) { 
alert(pbMesg);
}
}
try {
nw.focus();
if(dim && dim.x && dim.y){
if(dim.x > 0 && dim.y > 0){
nw.resizeTo(dim.x, dim.y); 
}
}
}catch(e){}
evt = evt || window.event;
if(evt){
if(evt.preventDefault) {evt.preventDefault();}
else {evt.canceBubble = true;}
}
return false; 
},
getOWFeature : function(m, prop) {
var val=m[prop];
if(typeof val == 'undefined' || val==null){return null;}
else{return !!val;}
}
};
i2rd.addEvent(window, 'load', function(){
var i1,i2,fe1,f,el,fl=document.forms;
if(typeof fl == 'undefined'){return;}
for(f=null,i1=0;(f=fl[i1]);i1++) {
el=f.elements;
for(fe1=null,i2=0;(fe1=el[i2]);i2++){
if(fe1.type == 'hidden') {continue;}
i2rd.addEvent(fe1,'focus',i2rd.focusListener);
if(fe1.type&&fe1.className&&fe1.type.match(/select.*/i)&&fe1.className.match(/.*autosubmitselect.*/i)){
fe1.onchange=function(evt){this.form.submit();};
}
}
}
});
} 

/*  JS Resource: cms/js/bean/MenuBean.js  */

if(typeof MB == 'undefined') {var MB = {};}
MB.lastEventTime = new Date();
MB.getTarget = function(evt) {
evt = evt || window.event;
var el = (evt.srcElement || evt.target);
while(el && el.nodeName.toLowerCase() != "li")
el = el.parentNode;
return el;
}
MB.getTop = function(li) {
var parent = li;
while(parent && parent.className != 'menubean' && parent.nodeName.toLowerCase() != 'div') {
parent = parent.parentNode;
}
if(parent == null)
throw new Error("Unable to find top of menu");
return parent;
}
MB.GetChildUL = function(li) {
if(!li.className.match("mi_parent")) return null;
var h,ul,hb,t;
var children = li.getElementsByTagName("ul");
if(!children || children.length == 0) {
children = li.getElementsByTagName("UL");
}
for(h = 0, hb = children.length; (t = children[h]);h++) {
if(t.parentNode === li) {
if(ul) {
log4js.logger.error("Invalid DOM structure for menu. li.id = "+li.id+", children.length = " + (children == null ? "null" : children.length) );
break;
} else {
ul = t;
}
}
}
return ul;
}
MB.SetInactiveClass = function(el) {
var elements = el.getElementsByTagName("li");
if(!elements || elements.length == 0) {
try {
elements = el.getElementsByTagName("LI");
} catch(e) {}
}
var liElements = [];
liElements.pushAll(elements);
var node = null;
while( (node = liElements.pop()) ) {

node.className = node.className.replace("mi_active", "");
node.className = node.className.replace("mi_inactive", "");
node.className += " mi_inactive";

}
}
MB.SetActive = function(li, activate) {


if(!li.className.match(/over/)) {
li.className += " over";
var ul = MB.GetChildUL(li);
if(ul && ul.className.match("_persistent")) {
var nodelist = MB.GetOpenState(li);
var entry = "," + li.id;
if(nodelist.indexOf(entry) == -1) {
nodelist += entry;
}
MB.SetOpenState(li, nodelist)
}
}
if(activate) {
var top = MB.getTop(li);
MB.SetInactiveClass(top);
if(!li.className.match(/mi_active/)) {
li.className = li.className.replace("mi_inactive", "");	
li.className += " mi_active";
}

}
}
MB.SetInActive = function(li) {
if(!li.className.match(/over/))
return;


li.className=li.className.replace("over", "");
var ul = MB.GetChildUL(li);
if(ul && ul.className.match("_persistent")) {
var nodelist = MB.GetOpenState(li);
nodelist = nodelist.replace("," + li.id, "");
MB.SetOpenState(li, nodelist);
}
}
MB.GetOpenState = function(li) {
var nodelist = i2rd.getCookie(MB.getTop(li).id + "-CMO");
if(!nodelist) nodelist = "";
return nodelist;
}
MB.SetOpenState = function(li, nodelist) {
var time = new Date();
time.setMonth(time.getMonth() + 1);
i2rd.setCookie(MB.getTop(li).id + "-CMO", nodelist, time, "/");
}
MB.MenuBeanInit = function(div) {
var nodelist = i2rd.getCookie(div.id + "-CMO") || "";
var item = null;
var elements = div.getElementsByTagName("li");
if(!elements || elements.length == 0) {
try {
elements = div.getElementsByTagName("LI");
} catch(e) {}
}
var liElements = [];
liElements.pushAll(elements);
while( (item = liElements.pop()) ) {
var pn = item.parentNode;
if(pn && pn.nodeName.toLowerCase() == "ul") {
pn = pn.parentNode;
if(pn && pn.nodeName.toLowerCase() == "li" && pn.className && !pn.className.match("mi_parent")) {	
pn.className += " mi_parent";
}
}
item.onclick = function(evt) { 
var now = new Date(); 
if((now - MB.lastEventTime) < 200) return;
MB.lastEventTime = new Date();
var target = MB.getTarget(evt);
if(target.className.match(/over/) ) { 
MB.SetInActive(target, true);
}
else {
MB.SetActive(target);
}
};

if(!item.parentNode.className.match(/persistent/)) {
item.onmouseover = function(evt) {
try { MB.SetActive(this); } catch(e) { 
}
}; 
item.onmouseout = function(evt) {
try { MB.SetInActive(this);} catch(e) {}	
};
} else {
var tmpId = "," + item.id;
if(nodelist.indexOf(tmpId) == -1) {
MB.SetInActive(item);
}
}
} 
if(document.getElementById) {


var liList = nodelist.split(",");
for(var h = 0; h < liList.length; h++) {
var id = liList[h];
if(id) {
var li = document.getElementById(id);
if(li) {

MB.SetActive(li);
}
}
}
}
}
MB.inited = false;
MB.init = function(evt) {
if(MB.inited) return;
MB.inited = true;
var m, div, s= document, i, ib;
if (document.evalute) {
var result = document.evaluate("//div[contains(@class,'menubean')]", s, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (i = 0, ib = result.snapshotLength; i < ib; i++){
m[m.length] = result.snapshotItem(i);
}
} else {m = s.getElementsByTagName("div");}
for(i=0, ib = m.length; i < ib; i++) {
div = m[i];
if( (div.className||'').match(/menubean/))
MB.MenuBeanInit(div);
}
i2rd.removeEvent(window, 'load', MB.init);
}
try { 
var ua = navigator.userAgent;
if (document.addEventListener && 
(ua.match(/Firefox/) || ua.match(/SeaMonkey/))) {
document.addEventListener("DOMContentLoaded", MB.init, false);
} else if(document.attachEvent && !window.opera) {
document.write("<script id=__mbOnContentLoad defer " + "src='//:'><\/script>");
document.getElementById("__mbOnContentLoad").onreadystatechange = function() {
if (this.readyState == "complete") {
this.onreadystatechange = null;
MB.init();
}
};
} else { 
MB._timer = setInterval(function() {
var drs = document.readyState;
if ((drs && /complete|loaded/.test(drs))
|| MB.inited ) {
clearInterval(MB._timer);
delete MB._timer;
MB.init();
}
}, 10);
}
} catch(e) {

}

i2rd.addEvent(window, 'load', MB.init);

/*  JS Resource: lib/prototype.js  */

__i2rd_fixIELeak = function (domNode, skipRoot) {
if(!Prototype.Browser.IE) return;
var a = domNode.attributes, i, l, n;
if (a && !skipRoot) {
l = a.length;
for (i = 0; i < l; i += 1) {
n = a[i].name;
if (typeof domNode[n] === 'function') {
domNode[n] = null;
}
}
}
a = domNode.childNodes;
if (a) {
l = a.length;
for (i = 0; i < l; i += 1) {
__i2rd_fixIELeak(domNode.childNodes[i], false);
}
}
}
if(typeof __i2rd_domupdate_event == 'undefined') { 
__i2rd_domupdate_event = "domupdate";
__i2rd_domupdate_handlers = [];
__i2rd_domupdate_fire = function(element, evt) {
var i, h, args = [];
if(evt) args.push(evt);
for(i = 0; h = __i2rd_domupdate_handlers[i]; i++)
try {h.apply(element,args);}catch(e) {}
}
}
var Prototype = {
Version: '1.5.1.1',
Browser: {
IE: !!(window.attachEvent && !window.opera),
Opera: !!window.opera,
WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
},
BrowserFeatures: {
XPath: !!document.evaluate,
ElementExtensions: !!window.HTMLElement,
SpecificElementExtensions:
(document.createElement('div').__proto__ !==
document.createElement('form').__proto__)
},
ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,
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.extend(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;
}
},
toJSON: function(object) {
var type = typeof object;
switch(type) {
case 'undefined':
case 'function':
case 'unknown': return;
case 'boolean': return object.toString();
}
if (object === null) return 'null';
if (object.toJSON) return object.toJSON();
if (object.ownerDocument === document) return;
var results = [];
for (var property in object) {
var value = Object.toJSON(object[property]);
if (value !== undefined)
results.push(property.toJSON() + ': ' + value);
}
return '{' + results.join(', ') + '}';
},
keys: function(object) {
var keys = [];
for (var property in object)
keys.push(property);
return keys;
},
values: function(object) {
var values = [];
for (var property in object)
values.push(object[property]);
return values;
},
clone: function(object) {
return Object.extend({}, object);
}
});
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, args = $A(arguments), object = args.shift();
return function(event) {
return __method.apply(object, [event || window.event].concat(args));
}
}
Object.extend(Number.prototype, {
toColorPart: function() {
return this.toPaddedString(2, 16);
},
succ: function() {
return this + 1;
},
times: function(iterator) {
$R(0, this, true).each(iterator);
return this;
},
toPaddedString: function(length, radix) {
var string = this.toString(radix || 10);
return '0'.times(length - string.length) + string;
},
toJSON: function() {
return isFinite(this) ? this.toString() : 'null';
}
});
Date.prototype.toJSON = function() {
return '"' + this.getFullYear() + '-' +
(this.getMonth() + 1).toPaddedString(2) + '-' +
this.getDate().toPaddedString(2) + 'T' +
this.getHours().toPaddedString(2) + ':' +
this.getMinutes().toPaddedString(2) + ':' +
this.getSeconds().toPaddedString(2) + '"';
};
var Try = {
these: function() {
var returnValue;
for (var i = 0, length = arguments.length; i < 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() {
this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
},
stop: function() {
if (!this.timer) return;
clearInterval(this.timer);
this.timer = null;
},
onTimerEvent: function() {
if (!this.currentlyExecuting) {
try {
this.currentlyExecuting = true;
this.callback(this);
} finally {
this.currentlyExecuting = false;
}
}
}
}
Object.extend(String, {
interpret: function(value) {
return value == null ? '' : String(value);
},
specialChar: {
'\b': '\\b',
'\t': '\\t',
'\n': '\\n',
'\f': '\\f',
'\r': '\\r',
'\\': '\\\\'
}
});
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 += String.interpret(replacement(match));
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 self = arguments.callee;
self.text.data = this;
return self.div.innerHTML;
},
unescapeHTML: function() {
var div = document.createElement('div');
div.innerHTML = this.stripTags();
return div.childNodes[0] ? (div.childNodes.length > 1 ?
$A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) :
div.childNodes[0].nodeValue) : '';
},
toQueryParams: function(separator) {
var match = this.strip().match(/([^?#]*)(#.*)?$/);
if (!match) return {};
return match[1].split(separator || '&').inject({}, function(hash, pair) {
if ((pair = pair.split('='))[0]) {
var key = decodeURIComponent(pair.shift());
var value = pair.length > 1 ? pair.join('=') : pair[0];
if (value != undefined) value = decodeURIComponent(value);
if (key in hash) {
if (hash[key].constructor != Array) hash[key] = [hash[key]];
hash[key].push(value);
}
else hash[key] = value;
}
return hash;
});
},
toArray: function() {
return this.split('');
},
succ: function() {
return this.slice(0, this.length - 1) +
String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
},
times: function(count) {
var result = '';
for (var i = 0; i < count; i++) result += this;
return result;
},
camelize: function() {
var parts = this.split('-'), len = parts.length;
if (len == 1) return parts[0];
var camelized = this.charAt(0) == '-'
? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
: parts[0];
for (var i = 1; i < len; i++)
camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);
return camelized;
},
capitalize: function() {
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
},
underscore: function() {
return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase();
},
dasherize: function() {
return this.gsub(/_/,'-');
},
inspect: function(useDoubleQuotes) {
var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) {
var character = String.specialChar[match[0]];
return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16);
});
if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
return "'" + escapedString.replace(/'/g, '\\\'') + "'";
},
toJSON: function() {
return this.inspect(true);
},
unfilterJSON: function(filter) {
return this.sub(filter || Prototype.JSONFilter, '#{1}');
},
isJSON: function() {
var str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
},
evalJSON: function(sanitize) {
var json = this.unfilterJSON();
try {
if (!sanitize || json.isJSON()) return eval('(' + json + ')');
} catch (e) { }
throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
},
include: function(pattern) {
return this.indexOf(pattern) > -1;
},
startsWith: function(pattern) {
return this.indexOf(pattern) === 0;
},
endsWith: function(pattern) {
var d = this.length - pattern.length;
return d >= 0 && this.lastIndexOf(pattern) === d;
},
empty: function() {
return this == '';
},
blank: function() {
return /^\s*$/.test(this);
}
});
if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, {
escapeHTML: function() {
return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
},
unescapeHTML: function() {
return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/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;
Object.extend(String.prototype.escapeHTML, {
div: document.createElement('div'),
text: document.createTextNode('')
});
with (String.prototype.escapeHTML) div.appendChild(text);
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 + String.interpret(object[match[3]]);
});
}
}
var $break = {}, $continue = new Error('"throw $continue" is deprecated, use "return" instead');
var Enumerable = {
each: function(iterator) {
var index = 0;
try {
this._each(function(value) {
iterator(value, index++);
});
} catch (e) {
if (e != $break) throw e;
}
return this;
},
eachSlice: function(number, iterator) {
var index = -number, slices = [], array = this.toArray();
while ((index += number) < array.length)
slices.push(array.slice(index, index+number));
return slices.map(iterator);
},
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 = false;
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 || Prototype.K)(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;
},
inGroupsOf: function(number, fillWith) {
fillWith = fillWith === undefined ? null : fillWith;
return this.eachSlice(number, function(slice) {
while(slice.length < number) slice.push(fillWith);
return slice;
});
},
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.map(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.map(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.map();
},
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));
});
},
size: function() {
return this.toArray().length;
},
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, length = iterable.length; i < length; i++)
results.push(iterable[i]);
return results;
}
}
if (Prototype.Browser.WebKit) {
$A = Array.from = function(iterable) {
if (!iterable) return [];
if (!(typeof iterable == 'function' && iterable == '[object NodeList]') &&
iterable.toArray) {
return iterable.toArray();
} else {
var results = [];
for (var i = 0, length = iterable.length; i < 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, length = this.length; i < 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 != 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, length = this.length; i < length; i++)
if (this[i] == object) return i;
return -1;
},
reverse: function(inline) {
return (inline !== false ? this : this.toArray())._reverse();
},
reduce: function() {
return this.length > 1 ? this : this[0];
},
uniq: function(sorted) {
return this.inject([], function(array, value, index) {
if (0 == index || (sorted ? array.last() != value : !array.include(value)))
array.push(value);
return array;
});
},
clone: function() {
return [].concat(this);
},
size: function() {
return this.length;
},
inspect: function() {
return '[' + this.map(Object.inspect).join(', ') + ']';
},
toJSON: function() {
var results = [];
this.each(function(object) {
var value = Object.toJSON(object);
if (value !== undefined) results.push(value);
});
return '[' + results.join(', ') + ']';
}
});
Array.prototype.toArray = Array.prototype.clone;
function $w(string) {
string = string.strip();
return string ? string.split(/\s+/) : [];
}
if (Prototype.Browser.Opera){
Array.prototype.concat = function() {
var array = [];
for (var i = 0, length = this.length; i < length; i++) array.push(this[i]);
for (var i = 0, length = arguments.length; i < length; i++) {
if (arguments[i].constructor == Array) {
for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++)
array.push(arguments[i][j]);
} else {
array.push(arguments[i]);
}
}
return array;
}
}
var Hash = function(object) {
if (object instanceof Hash) this.merge(object);
else Object.extend(this, object || {});
};
Object.extend(Hash, {
toQueryString: function(obj) {
var parts = [];
parts.add = arguments.callee.addPair;
this.prototype._each.call(obj, function(pair) {
if (!pair.key) return;
var value = pair.value;
if (value && typeof value == 'object') {
if (value.constructor == Array) value.each(function(value) {
parts.add(pair.key, value);
});
return;
}
parts.add(pair.key, value);
});
return parts.join('&');
},
toJSON: function(object) {
var results = [];
this.prototype._each.call(object, function(pair) {
var value = Object.toJSON(pair.value);
if (value !== undefined) results.push(pair.key.toJSON() + ': ' + value);
});
return '{' + results.join(', ') + '}';
}
});
Hash.toQueryString.addPair = function(key, value, prefix) {
key = encodeURIComponent(key);
if (value === undefined) this.push(key);
else this.push(key + '=' + (value == null ? '' : encodeURIComponent(value)));
}
Object.extend(Hash.prototype, Enumerable);
Object.extend(Hash.prototype, {
_each: function(iterator) {
for (var key in this) {
var value = this[key];
if (value && value == Hash.prototype[key]) 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(this, function(mergedHash, pair) {
mergedHash[pair.key] = pair.value;
return mergedHash;
});
},
remove: function() {
var result;
for(var i = 0, length = arguments.length; i < length; i++) {
var value = this[arguments[i]];
if (value !== undefined){
if (result === undefined) result = value;
else {
if (result.constructor != Array) result = [result];
result.push(value)
}
}
delete this[arguments[i]];
}
return result;
},
toQueryString: function() {
return Hash.toQueryString(this);
},
inspect: function() {
return '#<Hash:{' + this.map(function(pair) {
return pair.map(Object.inspect).join(': ');
}).join(', ') + '}>';
},
toJSON: function() {
return Hash.toJSON(this);
}
});
function $H(object) {
if (object instanceof Hash) return object;
return new Hash(object);
};

if (function() {
var i = 0, Test = function(value) { this.key = value };
Test.prototype.key = 'foo';
for (var property in new Test('bar')) i++;
return i > 1;
}()) Hash.prototype._each = function(iterator) {
var cache = [];
for (var key in this) {
var value = this[key];
if ((value && value == Hash.prototype[key]) || cache.include(key)) continue;
cache.push(key);
var pair = [key, value];
pair.key = key;
pair.value = value;
iterator(pair);
}
};
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;
while (this.include(value)) {
iterator(value);
value = value.succ();
}
},
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);
}
var Ajax = {
getTransport: function() {
return Try.these(
function() {return new XMLHttpRequest()},
function() {return new ActiveXObject('Msxml2.XMLHTTP')},
function() {return new ActiveXObject('Microsoft.XMLHTTP')}
) || false;
},
activeRequestCount: 0
}
Ajax.Responders = {
responders: [],
_each: function(iterator) {
this.responders._each(iterator);
},
register: function(responder) {
if (!this.include(responder))
this.responders.push(responder);
},
unregister: function(responder) {
this.responders = this.responders.without(responder);
},
dispatch: function(callback, request, transport, json) {
this.each(function(responder) {
if (typeof responder[callback] == 'function') {
try {
responder[callback].apply(responder, [request, transport, json]);
} catch (e) {}
}
});
}
};
Object.extend(Ajax.Responders, Enumerable);
Ajax.Responders.register({
onCreate: function() {
Ajax.activeRequestCount++;
},
onComplete: function() {
Ajax.activeRequestCount--;
}
});
Ajax.Base = function() {};
Ajax.Base.prototype = {
setOptions: function(options) {
this.options = {
method: 'post',
asynchronous: true,
contentType: 'application/x-www-form-urlencoded',
encoding: 'UTF-8',
parameters: ''
}
Object.extend(this.options, options || {});
this.options.method = this.options.method.toLowerCase();
if (typeof this.options.parameters == 'string')
this.options.parameters = this.options.parameters.toQueryParams();
}
}
Ajax.Request = Class.create();
Ajax.Request.Events =
['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
_complete: false,
initialize: function(url, options) {
this.transport = Ajax.getTransport();
this.setOptions(options);
this.request(url);
},
request: function(url) {
this.url = url;
this.method = this.options.method;
var params = Object.clone(this.options.parameters);
if (!['get', 'post'].include(this.method)) {

params['_method'] = this.method;
this.method = 'post';
}
this.parameters = params;
if (params = Hash.toQueryString(params)) {

if (this.method == 'get')
this.url += (this.url.include('?') ? '&' : '?') + params;
else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
params += '&_=';
}
try {
if (this.options.onCreate) this.options.onCreate(this.transport);
Ajax.Responders.dispatch('onCreate', this, this.transport);
this.transport.open(this.method.toUpperCase(), this.url,
this.options.asynchronous);
if (this.options.asynchronous)
setTimeout(function() { this.respondToReadyState(1) }.bind(this), 10);
this.transport.onreadystatechange = this.onStateChange.bind(this);
this.setRequestHeaders();
this.body = this.method == 'post' ? (this.options.postBody || params) : null;
this.transport.send(this.body);
if (!this.options.asynchronous && this.transport.overrideMimeType)
this.onStateChange();
}
catch (e) {
this.dispatchException(e);
}
},
onStateChange: function() {
var readyState = this.transport.readyState;
if (readyState > 1 && !((readyState == 4) && this._complete))
this.respondToReadyState(this.transport.readyState);
},
setRequestHeaders: function() {
var headers = {
'X-Requested-With': 'XMLHttpRequest',
'X-Prototype-Version': Prototype.Version,
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
};
if (this.method == 'post') {
headers['Content-type'] = this.options.contentType +
(this.options.encoding ? '; charset=' + this.options.encoding : '');
if (this.transport.overrideMimeType &&
(navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
headers['Connection'] = 'close';
}

if (typeof this.options.requestHeaders == 'object') {
var extras = this.options.requestHeaders;
if (typeof extras.push == 'function')
for (var i = 0, length = extras.length; i < length; i += 2)
headers[extras[i]] = extras[i+1];
else
$H(extras).each(function(pair) { headers[pair.key] = pair.value });
}
for (var name in headers)
this.transport.setRequestHeader(name, headers[name]);
},
success: function() {
return !this.transport.status
|| (this.transport.status >= 200 && this.transport.status < 300);
},
respondToReadyState: function(readyState) {
var state = Ajax.Request.Events[readyState];
var transport = this.transport, json = this.evalJSON();
if (state == 'Complete') {
try {
this._complete = true;
(this.options['on' + this.transport.status]
|| this.options['on' + (this.success() ? 'Success' : 'Failure')]
|| Prototype.emptyFunction)(transport, json);
} catch (e) {
this.dispatchException(e);
}
var contentType = this.getHeader('Content-type');
if (contentType && contentType.strip().
match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
this.evalResponse();
}
try {
(this.options['on' + state] || Prototype.emptyFunction)(transport, json);
Ajax.Responders.dispatch('on' + state, this, transport, json);
} catch (e) {
this.dispatchException(e);
}
if (state == 'Complete') {

this.transport.onreadystatechange = Prototype.emptyFunction;
}
},
getHeader: function(name) {
try {
return this.transport.getResponseHeader(name);
} catch (e) { return null }
},
evalJSON: function() {
try {
var json = this.getHeader('X-JSON');
return json ? json.evalJSON() : null;
} catch (e) { return null }
},
evalResponse: function() {
try {
return eval((this.transport.responseText || '').unfilterJSON());
} catch (e) {
this.dispatchException(e);
}
},
dispatchException: function(exception) {
(this.options.onException || Prototype.emptyFunction)(this, exception);
Ajax.Responders.dispatch('onException', this, exception);
}
});
Ajax.Updater = Class.create();
Object.extend(Object.extend(Ajax.Updater.prototype, Ajax.Request.prototype), {
initialize: function(container, url, options) {
this.container = {
success: (container.success || container),
failure: (container.failure || (container.success ? null : container))
}
this.transport = Ajax.getTransport();
this.setOptions(options);
var onComplete = this.options.onComplete || Prototype.emptyFunction;
this.options.onComplete = (function(transport, param) {
this.updateContent();
onComplete(transport, param);
}).bind(this);
this.request(url);
},
updateContent: function() {
var receiver = this.container[this.success() ? 'success' : 'failure'];
var response = this.transport.responseText;
if (!this.options.evalScripts) response = response.stripScripts();
if (receiver = $(receiver)) {
if (this.options.insertion)
new this.options.insertion(receiver, response);
else
receiver.update(response);
}
if (this.success()) {
if (this.onComplete)
setTimeout(this.onComplete.bind(this), 10);
}
}
});
Ajax.PeriodicalUpdater = Class.create();
Ajax.PeriodicalUpdater.prototype = Object.extend(new Ajax.Base(), {
initialize: function(container, url, options) {
this.setOptions(options);
this.onComplete = this.options.onComplete;
this.frequency = (this.options.frequency || 2);
this.decay = (this.options.decay || 1);
this.updater = {};
this.container = container;
this.url = url;
this.start();
},
start: function() {
this.options.onComplete = this.updateComplete.bind(this);
this.onTimerEvent();
},
stop: function() {
this.updater.options.onComplete = undefined;
clearTimeout(this.timer);
(this.onComplete || Prototype.emptyFunction).apply(this, arguments);
},
updateComplete: function(request) {
if (this.options.decay) {
this.decay = (request.responseText == this.lastText ?
this.decay * this.options.decay : 1);
this.lastText = request.responseText;
}
this.timer = setTimeout(this.onTimerEvent.bind(this),
this.decay * this.frequency * 1000);
},
onTimerEvent: function() {
this.updater = new Ajax.Updater(this.container, this.url, this.options);
}
});
function $(element) {
if (arguments.length > 1) {
for (var i = 0, elements = [], length = arguments.length; i < length; i++)
elements.push($(arguments[i]));
return elements;
}
if (typeof element == 'string')
element = document.getElementById(element);
return Element.extend(element);
}
if (Prototype.BrowserFeatures.XPath) {
document._getElementsByXPath = function(expression, parentElement) {
var results = [];
var query = document.evaluate(expression, $(parentElement) || document,
null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
for (var i = 0, length = query.snapshotLength; i < length; i++)
results.push(query.snapshotItem(i));
return results;
};
document.getElementsByClassName = function(className, parentElement) {
var q = ".//*[contains(concat(' ', @class, ' '), ' " + className + " ')]";
return document._getElementsByXPath(q, parentElement);
}
} else document.getElementsByClassName = function(className, parentElement) {
var children = ($(parentElement) || document.body).getElementsByTagName('*');
var elements = [], child, pattern = new RegExp("(^|\\s)" + className + "(\\s|$)");
for (var i = 0, length = children.length; i < length; i++) {
child = children[i];
var elementClassName = child.className;
if (elementClassName.length == 0) continue;
if (elementClassName == className || elementClassName.match(pattern))
elements.push(Element.extend(child));
}
return elements;
};
if (!window.Element) var Element = {};
Element.extend = function(element) {
var F = Prototype.BrowserFeatures;
if (!element || !element.tagName || element.nodeType == 3 ||
element._extended || F.SpecificElementExtensions || element == window)
return element;
var methods = {}, tagName = element.tagName, cache = Element.extend.cache,
T = Element.Methods.ByTag;

if (!F.ElementExtensions) {
Object.extend(methods, Element.Methods),
Object.extend(methods, Element.Methods.Simulated);
}

if (T[tagName]) Object.extend(methods, T[tagName]);
for (var property in methods) {
var value = methods[property];
if (typeof value == 'function' && !(property in element))
element[property] = cache.findOrStore(value);
}
element._extended = Prototype.emptyFunction;
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(element) {
element = $(element);
Element[Element.visible(element) ? 'hide' : 'show'](element);
return element;
},
hide: function(element) {
$(element).style.display = 'none';
return element;
},
show: function(element) {
$(element).style.display = '';
return element;
},
remove: function(element) {
element = $(element);
element.parentNode.removeChild(element);
return element;
},
update: function(element, html) {
html = typeof html == 'undefined' ? '' : html.toString();
var el = $(element);
try {__i2rd_fixIELeak(el, true);} catch(e) {}
el.innerHTML = html.stripScripts();
setTimeout(function() {try{html.evalScripts();}catch(e){} __i2rd_domupdate_fire(el);}, 10); 
return element;
},
replace: function(element, html) {
element = $(element);
try {__i2rd_fixIELeak(element, false);} catch(e) {}
html = typeof html == 'undefined' ? '' : html.toString();
if (element.outerHTML) {
element.outerHTML = html.stripScripts();
} else {
var range = element.ownerDocument.createRange();
range.selectNodeContents(element);
element.parentNode.replaceChild(
range.createContextualFragment(html.stripScripts()), element);
}
var el = element;
setTimeout(function() {try{html.evalScripts();}catch(e){} __i2rd_domupdate_fire(el);}, 10); 
return element;
},
inspect: function(element) {
element = $(element);
var result = '<' + element.tagName.toLowerCase();
$H({'id': 'id', 'className': 'class'}).each(function(pair) {
var property = pair.first(), attribute = pair.last();
var value = (element[property] || '').toString();
if (value) result += ' ' + attribute + '=' + value.inspect(true);
});
return result + '>';
},
recursivelyCollect: function(element, property) {
element = $(element);
var elements = [];
while (element = element[property])
if (element.nodeType == 1)
elements.push(Element.extend(element));
return elements;
},
ancestors: function(element) {
return $(element).recursivelyCollect('parentNode');
},
descendants: function(element) {
return $A($(element).getElementsByTagName('*')).each(Element.extend);
},
firstDescendant: function(element) {
element = $(element).firstChild;
while (element && element.nodeType != 1) element = element.nextSibling;
return $(element);
},
immediateDescendants: function(element) {
if (!(element = $(element).firstChild)) return [];
while (element && element.nodeType != 1) element = element.nextSibling;
if (element) return [element].concat($(element).nextSiblings());
return [];
},
previousSiblings: function(element) {
return $(element).recursivelyCollect('previousSibling');
},
nextSiblings: function(element) {
return $(element).recursivelyCollect('nextSibling');
},
siblings: function(element) {
element = $(element);
return element.previousSiblings().reverse().concat(element.nextSiblings());
},
match: function(element, selector) {
if (typeof selector == 'string')
selector = new Selector(selector);
return selector.match($(element));
},
up: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return $(element.parentNode);
var ancestors = element.ancestors();
return expression ? Selector.findElement(ancestors, expression, index) :
ancestors[index || 0];
},
down: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return element.firstDescendant();
var descendants = element.descendants();
return expression ? Selector.findElement(descendants, expression, index) :
descendants[index || 0];
},
previous: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
var previousSiblings = element.previousSiblings();
return expression ? Selector.findElement(previousSiblings, expression, index) :
previousSiblings[index || 0];
},
next: function(element, expression, index) {
element = $(element);
if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
var nextSiblings = element.nextSiblings();
return expression ? Selector.findElement(nextSiblings, expression, index) :
nextSiblings[index || 0];
},
getElementsBySelector: function() {
var args = $A(arguments), element = $(args.shift());
return Selector.findChildElements(element, args);
},
getElementsByClassName: function(element, className) {
return document.getElementsByClassName(className, element);
},
readAttribute: function(element, name) {
element = $(element);
if (Prototype.Browser.IE) {
if (!element.attributes) return null;
var t = Element._attributeTranslations;
if (t.values[name]) return t.values[name](element, name);
if (t.names[name]) name = t.names[name];
var attribute = element.attributes[name];
return attribute ? attribute.nodeValue : null;
}
return element.getAttribute(name);
},
getHeight: function(element) {
return $(element).getDimensions().height;
},
getWidth: function(element) {
return $(element).getDimensions().width;
},
classNames: function(element) {
return new Element.ClassNames(element);
},
hasClassName: function(element, className) {
if (!(element = $(element))) return;
var elementClassName = element.className;
if (elementClassName.length == 0) return false;
if (elementClassName == className ||
elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
return true;
return false;
},
addClassName: function(element, className) {
if (!(element = $(element))) return;
Element.classNames(element).add(className);
return element;
},
removeClassName: function(element, className) {
if (!(element = $(element))) return;
Element.classNames(element).remove(className);
return element;
},
toggleClassName: function(element, className) {
if (!(element = $(element))) return;
Element.classNames(element)[element.hasClassName(className) ? 'remove' : 'add'](className);
return element;
},
observe: function() {
Event.observe.apply(Event, arguments);
return $A(arguments).first();
},
stopObserving: function() {
Event.stopObserving.apply(Event, arguments);
return $A(arguments).first();
},

cleanWhitespace: function(element) {
element = $(element);
var node = element.firstChild;
while (node) {
var nextNode = node.nextSibling;
if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
element.removeChild(node);
node = nextNode;
}
return element;
},
empty: function(element) {
return $(element).innerHTML.blank();
},
descendantOf: function(element, ancestor) {
element = $(element), ancestor = $(ancestor);
while (element = element.parentNode)
if (element == ancestor) return true;
return false;
},
scrollTo: function(element) {
element = $(element);
var pos = Position.cumulativeOffset(element);
window.scrollTo(pos[0], pos[1]);
return element;
},
getStyle: function(element, style) {
element = $(element);
style = style == 'float' ? 'cssFloat' : style.camelize();
var value = element.style[style];
if (!value) {
var css = document.defaultView.getComputedStyle(element, null);
value = css ? css[style] : null;
}
if (style == 'opacity') return value ? parseFloat(value) : 1.0;
return value == 'auto' ? null : value;
},
getOpacity: function(element) {
return $(element).getStyle('opacity');
},
setStyle: function(element, styles, camelized) {
element = $(element);
var elementStyle = element.style;
for (var property in styles)
if (property == 'opacity') element.setOpacity(styles[property])
else
elementStyle[(property == 'float' || property == 'cssFloat') ?
(elementStyle.styleFloat === undefined ? 'cssFloat' : 'styleFloat') :
(camelized ? property : property.camelize())] = styles[property];
return element;
},
setOpacity: function(element, value) {
element = $(element);
element.style.opacity = (value == 1 || value === '') ? '' :
(value < 0.00001) ? 0 : value;
return element;
},
getDimensions: function(element) {
element = $(element);
var display = $(element).getStyle('display');
if (display != 'none' && display != null) 
return {width: element.offsetWidth, height: element.offsetHeight};


var els = element.style;
var originalVisibility = els.visibility;
var originalPosition = els.position;
var originalDisplay = els.display;
els.visibility = 'hidden';
els.position = 'absolute';
els.display = 'block';
var originalWidth = element.clientWidth;
var originalHeight = element.clientHeight;
els.display = originalDisplay;
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;
}
}
return element;
},
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 = '';
}
return element;
},
makeClipping: function(element) {
element = $(element);
if (element._overflow) return element;
element._overflow = element.style.overflow || 'auto';
if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
element.style.overflow = 'hidden';
return element;
},
undoClipping: function(element) {
element = $(element);
if (!element._overflow) return element;
element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
element._overflow = null;
return element;
}
};
Object.extend(Element.Methods, {
childOf: Element.Methods.descendantOf,
childElements: Element.Methods.immediateDescendants
});
if (Prototype.Browser.Opera) {
Element.Methods._getStyle = Element.Methods.getStyle;
Element.Methods.getStyle = function(element, style) {
switch(style) {
case 'left':
case 'top':
case 'right':
case 'bottom':
if (Element._getStyle(element, 'position') == 'static') return null;
default: return Element._getStyle(element, style);
}
};
}
else if (Prototype.Browser.IE) {
Element.Methods.getStyle = function(element, style) {
element = $(element);
style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
var value = element.style[style];
if (!value && element.currentStyle) value = element.currentStyle[style];
if (style == 'opacity') {
if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
if (value[1]) return parseFloat(value[1]) / 100;
return 1.0;
}
if (value == 'auto') {
if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
return element['offset'+style.capitalize()] + 'px';
return null;
}
return value;
};
Element.Methods.setOpacity = function(element, value) {
element = $(element);
var filter = element.getStyle('filter'), style = element.style;
if (value == 1 || value === '') {
style.filter = filter.replace(/alpha\([^\)]*\)/gi,'');
return element;
} else if (value < 0.00001) value = 0;
style.filter = filter.replace(/alpha\([^\)]*\)/gi, '') +
'alpha(opacity=' + (value * 100) + ')';
return element;
};

Element.Methods.update = function(element, html) {
element = $(element);
try {
__i2rd_fixIELeak(element, true);
} catch(e) { 
alert("Unable to cleanup JScript references for table update." + e); 
}
html = typeof html == 'undefined' ? '' : html.toString();
var tagName = element.tagName.toUpperCase();
if (['THEAD','TBODY','TR','TD'].include(tagName)) {
var div = document.createElement('div');
switch (tagName) {
case 'THEAD':
case 'TBODY':
div.innerHTML = '<table><tbody>' + html.stripScripts() + '</tbody></table>';
depth = 2;
break;
case 'TR':
div.innerHTML = '<table><tbody><tr>' + html.stripScripts() + '</tr></tbody></table>';
depth = 3;
break;
case 'TD':
div.innerHTML = '<table><tbody><tr><td>' + html.stripScripts() + '</td></tr></tbody></table>';
depth = 4;
}
$A(element.childNodes).each(function(node) { element.removeChild(node) });
depth.times(function() { div = div.firstChild });
$A(div.childNodes).each(function(node) { element.appendChild(node) });
} else {
element.innerHTML = html.stripScripts();
}
var el = element;
setTimeout(function() {try{html.evalScripts();}catch(e){} __i2rd_domupdate_fire(el);}, 10);
return element;
}
}
else if (Prototype.Browser.Gecko) {
Element.Methods.setOpacity = function(element, value) {
element = $(element);
element.style.opacity = (value == 1) ? 0.999999 :
(value === '') ? '' : (value < 0.00001) ? 0 : value;
return element;
};
}
Element._attributeTranslations = {
names: {
colspan: "colSpan",
rowspan: "rowSpan",
valign: "vAlign",
datetime: "dateTime",
accesskey: "accessKey",
tabindex: "tabIndex",
enctype: "encType",
maxlength: "maxLength",
readonly: "readOnly",
longdesc: "longDesc"
},
values: {
_getAttr: function(element, attribute) {
return element.getAttribute(attribute, 2);
},
_flag: function(element, attribute) {
return $(element).hasAttribute(attribute) ? attribute : null;
},
style: function(element) {
return element.style.cssText.toLowerCase();
},
title: function(element) {
var node = element.getAttributeNode('title');
return node.specified ? node.nodeValue : null;
}
}
};
(function() {
Object.extend(this, {
href: this._getAttr,
src: this._getAttr,
type: this._getAttr,
disabled: this._flag,
checked: this._flag,
readonly: this._flag,
multiple: this._flag
});
}).call(Element._attributeTranslations.values);
Element.Methods.Simulated = {
hasAttribute: function(element, attribute) {
var t = Element._attributeTranslations, node;
attribute = t.names[attribute] || attribute;
node = $(element).getAttributeNode(attribute);
return node && node.specified;
}
};
Element.Methods.ByTag = {};
Object.extend(Element, Element.Methods);
if (!Prototype.BrowserFeatures.ElementExtensions &&
document.createElement('div').__proto__) {
window.HTMLElement = {};
window.HTMLElement.prototype = document.createElement('div').__proto__;
Prototype.BrowserFeatures.ElementExtensions = true;
}
Element.hasAttribute = function(element, attribute) {
if (element.hasAttribute) return element.hasAttribute(attribute);
return Element.Methods.Simulated.hasAttribute(element, attribute);
};
Element.addMethods = function(methods) {
var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;
if (!methods) {
Object.extend(Form, Form.Methods);
Object.extend(Form.Element, Form.Element.Methods);
Object.extend(Element.Methods.ByTag, {
"FORM": Object.clone(Form.Methods),
"INPUT": Object.clone(Form.Element.Methods),
"SELECT": Object.clone(Form.Element.Methods),
"TEXTAREA": Object.clone(Form.Element.Methods)
});
}
if (arguments.length == 2) {
var tagName = methods;
methods = arguments[1];
}
if (!tagName) Object.extend(Element.Methods, methods || {});
else {
if (tagName.constructor == Array) tagName.each(extend);
else extend(tagName);
}
function extend(tagName) {
tagName = tagName.toUpperCase();
if (!Element.Methods.ByTag[tagName])
Element.Methods.ByTag[tagName] = {};
Object.extend(Element.Methods.ByTag[tagName], methods);
}
function copy(methods, destination, onlyIfAbsent) {
onlyIfAbsent = onlyIfAbsent || false;
var cache = Element.extend.cache;
for (var property in methods) {
var value = methods[property];
if (!onlyIfAbsent || !(property in destination))
destination[property] = cache.findOrStore(value);
}
}
function findDOMClass(tagName) {
var klass;
var trans = {
"OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
"FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
"DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
"H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
"INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
"TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
"TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
"TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
"FrameSet", "IFRAME": "IFrame"
};
if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
if (window[klass]) return window[klass];
klass = 'HTML' + tagName + 'Element';
if (window[klass]) return window[klass];
klass = 'HTML' + tagName.capitalize() + 'Element';
if (window[klass]) return window[klass];
window[klass] = {};
window[klass].prototype = document.createElement(tagName).__proto__;
return window[klass];
}
if (F.ElementExtensions) {
copy(Element.Methods, HTMLElement.prototype);
copy(Element.Methods.Simulated, HTMLElement.prototype, true);
}
if (F.SpecificElementExtensions) {
for (var tag in Element.Methods.ByTag) {
var klass = findDOMClass(tag);
if (typeof klass == "undefined") continue;
copy(T[tag], klass.prototype);
}
}
Object.extend(Element, Element.Methods);
delete Element.ByTag;
};
var 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.toUpperCase();
if (['TBODY', 'TR'].include(tagName)) {
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($A(this).concat(classNameToAdd).join(' '));
},
remove: function(classNameToRemove) {
if (!this.include(classNameToRemove)) return;
this.set($A(this).without(classNameToRemove).join(' '));
},
toString: function() {
return $A(this).join(' ');
}
};
Object.extend(Element.ClassNames.prototype, Enumerable);
var Selector = Class.create();
Selector.prototype = {
initialize: function(expression) {
this.expression = expression.strip();
this.compileMatcher();
},
compileMatcher: function() {

if (Prototype.BrowserFeatures.XPath && !(/\[[\w-]*?:/).test(this.expression))
return this.compileXPathMatcher();
var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
c = Selector.criteria, le, p, m;
if (Selector._cache[e]) {
this.matcher = Selector._cache[e]; return;
}
this.matcher = ["this.matcher = function(root) {",
"var r = root, h = Selector.handlers, c = false, n;"];
while (e && le != e && (/\S/).test(e)) {
le = e;
for (var i in ps) {
p = ps[i];
if (m = e.match(p)) {
this.matcher.push(typeof c[i] == 'function' ? c[i](m) :
new Template(c[i]).evaluate(m));
e = e.replace(m[0], '');
break;
}
}
}
this.matcher.push("return h.unique(n);\n}");
eval(this.matcher.join('\n'));
Selector._cache[this.expression] = this.matcher;
},
compileXPathMatcher: function() {
var e = this.expression, ps = Selector.patterns,
x = Selector.xpath, le, m;
if (Selector._cache[e]) {
this.xpath = Selector._cache[e]; return;
}
this.matcher = ['.//*'];
while (e && le != e && (/\S/).test(e)) {
le = e;
for (var i in ps) {
if (m = e.match(ps[i])) {
this.matcher.push(typeof x[i] == 'function' ? x[i](m) :
new Template(x[i]).evaluate(m));
e = e.replace(m[0], '');
break;
}
}
}
this.xpath = this.matcher.join('');
Selector._cache[this.expression] = this.xpath;
},
findElements: function(root) {
root = root || document;
if (this.xpath) return document._getElementsByXPath(this.xpath, root);
return this.matcher(root);
},
match: function(element) {
return this.findElements(document).include(element);
},
toString: function() {
return this.expression;
},
inspect: function() {
return "#<Selector:" + this.expression.inspect() + ">";
}
};
Object.extend(Selector, {
_cache: {},
xpath: {
descendant: "//*",
child: "/*",
adjacent: "/following-sibling::*[1]",
laterSibling: '/following-sibling::*',
tagName: function(m) {
if (m[1] == '*') return '';
return "[local-name()='" + m[1].toLowerCase() +
"' or local-name()='" + m[1].toUpperCase() + "']";
},
className: "[contains(concat(' ', @class, ' '), ' #{1} ')]",
id: "[@id='#{1}']",
attrPresence: "[@#{1}]",
attr: function(m) {
m[3] = m[5] || m[6];
return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
},
pseudo: function(m) {
var h = Selector.xpath.pseudos[m[1]];
if (!h) return '';
if (typeof h === 'function') return h(m);
return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
},
operators: {
'=': "[@#{1}='#{3}']",
'!=': "[@#{1}!='#{3}']",
'^=': "[starts-with(@#{1}, '#{3}')]",
'$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
'*=': "[contains(@#{1}, '#{3}')]",
'~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
'|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
},
pseudos: {
'first-child': '[not(preceding-sibling::*)]',
'last-child': '[not(following-sibling::*)]',
'only-child': '[not(preceding-sibling::* or following-sibling::*)]',
'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",
'checked': "[@checked]",
'disabled': "[@disabled]",
'enabled': "[not(@disabled)]",
'not': function(m) {
var e = m[6], p = Selector.patterns,
x = Selector.xpath, le, m, v;
var exclusion = [];
while (e && le != e && (/\S/).test(e)) {
le = e;
for (var i in p) {
if (m = e.match(p[i])) {
v = typeof x[i] == 'function' ? x[i](m) : new Template(x[i]).evaluate(m);
exclusion.push("(" + v.substring(1, v.length - 1) + ")");
e = e.replace(m[0], '');
break;
}
}
}
return "[not(" + exclusion.join(" and ") + ")]";
},
'nth-child': function(m) {
return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
},
'nth-last-child': function(m) {
return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
},
'nth-of-type': function(m) {
return Selector.xpath.pseudos.nth("position() ", m);
},
'nth-last-of-type': function(m) {
return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
},
'first-of-type': function(m) {
m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
},
'last-of-type': function(m) {
m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
},
'only-of-type': function(m) {
var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
},
nth: function(fragment, m) {
var mm, formula = m[6], predicate;
if (formula == 'even') formula = '2n+0';
if (formula == 'odd') formula = '2n+1';
if (mm = formula.match(/^(\d+)$/)) 
return '[' + fragment + "= " + mm[1] + ']';
if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { 
if (mm[1] == "-") mm[1] = -1;
var a = mm[1] ? Number(mm[1]) : 1;
var b = mm[2] ? Number(mm[2]) : 0;
predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
"((#{fragment} - #{b}) div #{a} >= 0)]";
return new Template(predicate).evaluate({
fragment: fragment, a: a, b: b });
}
}
}
},
criteria: {
tagName: 'n = h.tagName(n, r, "#{1}", c);   c = false;',
className: 'n = h.className(n, r, "#{1}", c); c = false;',
id: 'n = h.id(n, r, "#{1}", c);        c = false;',
attrPresence: 'n = h.attrPresence(n, r, "#{1}"); c = false;',
attr: function(m) {
m[3] = (m[5] || m[6]);
return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}"); c = false;').evaluate(m);
},
pseudo: function(m) {
if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
},
descendant: 'c = "descendant";',
child: 'c = "child";',
adjacent: 'c = "adjacent";',
laterSibling: 'c = "laterSibling";'
},
patterns: {


laterSibling: /^\s*~\s*/,
child: /^\s*>\s*/,
adjacent: /^\s*\+\s*/,
descendant: /^\s/,

tagName: /^\s*(\*|[\w\-]+)(\b|$)?/,
id: /^#([\w\-\*]+)(\b|$)/,
className: /^\.([\w\-\*]+)(\b|$)/,
pseudo: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|\s|(?=:))/,
attrPresence: /^\[([\w]+)\]/,
attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\]]*?)\4|([^'"][^\]]*?)))?\]/
},
handlers: {


concat: function(a, b) {
for (var i = 0, node; node = b[i]; i++)
a.push(node);
return a;
},

mark: function(nodes) {
for (var i = 0, node; node = nodes[i]; i++)
node._counted = true;
return nodes;
},
unmark: function(nodes) {
for (var i = 0, node; node = nodes[i]; i++)
node._counted = undefined;
return nodes;
},



index: function(parentNode, reverse, ofType) {
parentNode._counted = true;
if (reverse) {
for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
node = nodes[i];
if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
}
} else {
for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
if (node.nodeType == 1 && (!ofType || node._counted)) node.nodeIndex = j++;
}
},

unique: function(nodes) {
if (nodes.length == 0) return nodes;
var results = [], n;
for (var i = 0, l = nodes.length; i < l; i++)
if (!(n = nodes[i])._counted) {
n._counted = true;
results.push(Element.extend(n));
}
return Selector.handlers.unmark(results);
},

descendant: function(nodes) {
var h = Selector.handlers;
for (var i = 0, results = [], node; node = nodes[i]; i++)
h.concat(results, node.getElementsByTagName('*'));
return results;
},
child: function(nodes) {
var h = Selector.handlers;
for (var i = 0, results = [], node; node = nodes[i]; i++) {
for (var j = 0, children = [], child; child = node.childNodes[j]; j++)
if (child.nodeType == 1 && child.tagName != '!') results.push(child);
}
return results;
},
adjacent: function(nodes) {
for (var i = 0, results = [], node; node = nodes[i]; i++) {
var next = this.nextElementSibling(node);
if (next) results.push(next);
}
return results;
},
laterSibling: function(nodes) {
var h = Selector.handlers;
for (var i = 0, results = [], node; node = nodes[i]; i++)
h.concat(results, Element.nextSiblings(node));
return results;
},
nextElementSibling: function(node) {
while (node = node.nextSibling)
if (node.nodeType == 1) return node;
return null;
},
previousElementSibling: function(node) {
while (node = node.previousSibling)
if (node.nodeType == 1) return node;
return null;
},

tagName: function(nodes, root, tagName, combinator) {
tagName = tagName.toUpperCase();
var results = [], h = Selector.handlers;
if (nodes) {
if (combinator) {

if (combinator == "descendant") {
for (var i = 0, node; node = nodes[i]; i++)
h.concat(results, node.getElementsByTagName(tagName));
return results;
} else nodes = this[combinator](nodes);
if (tagName == "*") return nodes;
}
for (var i = 0, node; node = nodes[i]; i++)
if (node.tagName.toUpperCase() == tagName) results.push(node);
return results;
} else return root.getElementsByTagName(tagName);
},
id: function(nodes, root, id, combinator) {
var targetNode = $(id), h = Selector.handlers;
if (!nodes && root == document) return targetNode ? [targetNode] : [];
if (nodes) {
if (combinator) {
if (combinator == 'child') {
for (var i = 0, node; node = nodes[i]; i++)
if (targetNode.parentNode == node) return [targetNode];
} else if (combinator == 'descendant') {
for (var i = 0, node; node = nodes[i]; i++)
if (Element.descendantOf(targetNode, node)) return [targetNode];
} else if (combinator == 'adjacent') {
for (var i = 0, node; node = nodes[i]; i++)
if (Selector.handlers.previousElementSibling(targetNode) == node)
return [targetNode];
} else nodes = h[combinator](nodes);
}
for (var i = 0, node; node = nodes[i]; i++)
if (node == targetNode) return [targetNode];
return [];
}
return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
},
className: function(nodes, root, className, combinator) {
if (nodes && combinator) nodes = this[combinator](nodes);
return Selector.handlers.byClassName(nodes, root, className);
},
byClassName: function(nodes, root, className) {
if (!nodes) nodes = Selector.handlers.descendant([root]);
var needle = ' ' + className + ' ';
for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
nodeClassName = node.className;
if (nodeClassName.length == 0) continue;
if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
results.push(node);
}
return results;
},
attrPresence: function(nodes, root, attr) {
var results = [];
for (var i = 0, node; node = nodes[i]; i++)
if (Element.hasAttribute(node, attr)) results.push(node);
return results;
},
attr: function(nodes, root, attr, value, operator) {
if (!nodes) nodes = root.getElementsByTagName("*");
var handler = Selector.operators[operator], results = [];
for (var i = 0, node; node = nodes[i]; i++) {
var nodeValue = Element.readAttribute(node, attr);
if (nodeValue === null) continue;
if (handler(nodeValue, value)) results.push(node);
}
return results;
},
pseudo: function(nodes, name, value, root, combinator) {
if (nodes && combinator) nodes = this[combinator](nodes);
if (!nodes) nodes = root.getElementsByTagName("*");
return Selector.pseudos[name](nodes, value, root);
}
},
pseudos: {
'first-child': function(nodes, value, root) {
for (var i = 0, results = [], node; node = nodes[i]; i++) {
if (Selector.handlers.previousElementSibling(node)) continue;
results.push(node);
}
return results;
},
'last-child': function(nodes, value, root) {
for (var i = 0, results = [], node; node = nodes[i]; i++) {
if (Selector.handlers.nextElementSibling(node)) continue;
results.push(node);
}
return results;
},
'only-child': function(nodes, value, root) {
var h = Selector.handlers;
for (var i = 0, results = [], node; node = nodes[i]; i++)
if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
results.push(node);
return results;
},
'nth-child': function(nodes, formula, root) {
return Selector.pseudos.nth(nodes, formula, root);
},
'nth-last-child': function(nodes, formula, root) {
return Selector.pseudos.nth(nodes, formula, root, true);
},
'nth-of-type': function(nodes, formula, root) {
return Selector.pseudos.nth(nodes, formula, root, false, true);
},
'nth-last-of-type': function(nodes, formula, root) {
return Selector.pseudos.nth(nodes, formula, root, true, true);
},
'first-of-type': function(nodes, formula, root) {
return Selector.pseudos.nth(nodes, "1", root, false, true);
},
'last-of-type': function(nodes, formula, root) {
return Selector.pseudos.nth(nodes, "1", root, true, true);
},
'only-of-type': function(nodes, formula, root) {
var p = Selector.pseudos;
return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
},

getIndices: function(a, b, total) {
if (a == 0) return b > 0 ? [b] : [];
return $R(1, total).inject([], function(memo, i) {
if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
return memo;
});
},

nth: function(nodes, formula, root, reverse, ofType) {
if (nodes.length == 0) return [];
if (formula == 'even') formula = '2n+0';
if (formula == 'odd') formula = '2n+1';
var h = Selector.handlers, results = [], indexed = [], m;
h.mark(nodes);
for (var i = 0, node; node = nodes[i]; i++) {
if (!node.parentNode._counted) {
h.index(node.parentNode, reverse, ofType);
indexed.push(node.parentNode);
}
}
if (formula.match(/^\d+$/)) { 
formula = Number(formula);
for (var i = 0, node; node = nodes[i]; i++)
if (node.nodeIndex == formula) results.push(node);
} else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { 
if (m[1] == "-") m[1] = -1;
var a = m[1] ? Number(m[1]) : 1;
var b = m[2] ? Number(m[2]) : 0;
var indices = Selector.pseudos.getIndices(a, b, nodes.length);
for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
for (var j = 0; j < l; j++)
if (node.nodeIndex == indices[j]) results.push(node);
}
}
h.unmark(nodes);
h.unmark(indexed);
return results;
},
'empty': function(nodes, value, root) {
for (var i = 0, results = [], node; node = nodes[i]; i++) {

if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue;
results.push(node);
}
return results;
},
'not': function(nodes, selector, root) {
var h = Selector.handlers, selectorType, m;
var exclusions = new Selector(selector).findElements(root);
h.mark(exclusions);
for (var i = 0, results = [], node; node = nodes[i]; i++)
if (!node._counted) results.push(node);
h.unmark(exclusions);
return results;
},
'enabled': function(nodes, value, root) {
for (var i = 0, results = [], node; node = nodes[i]; i++)
if (!node.disabled) results.push(node);
return results;
},
'disabled': function(nodes, value, root) {
for (var i = 0, results = [], node; node = nodes[i]; i++)
if (node.disabled) results.push(node);
return results;
},
'checked': function(nodes, value, root) {
for (var i = 0, results = [], node; node = nodes[i]; i++)
if (node.checked) results.push(node);
return results;
}
},
operators: {
'=': function(nv, v) { return nv == v; },
'!=': function(nv, v) { return nv != v; },
'^=': function(nv, v) { return nv.startsWith(v); },
'$=': function(nv, v) { return nv.endsWith(v); },
'*=': function(nv, v) { return nv.include(v); },
'~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
'|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); }
},
matchElements: function(elements, expression) {
var matches = new Selector(expression).findElements(), h = Selector.handlers;
h.mark(matches);
for (var i = 0, results = [], element; element = elements[i]; i++)
if (element._counted) results.push(element);
h.unmark(matches);
return results;
},
findElement: function(elements, expression, index) {
if (typeof expression == 'number') {
index = expression; expression = false;
}
return Selector.matchElements(elements, expression || '*')[index || 0];
},
findChildElements: function(element, expressions) {
var exprs = expressions.join(','), expressions = [];
exprs.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
expressions.push(m[1].strip());
});
var results = [], h = Selector.handlers;
for (var i = 0, l = expressions.length, selector; i < l; i++) {
selector = new Selector(expressions[i].strip());
h.concat(results, selector.findElements(element));
}
return (l > 1) ? h.unique(results) : results;
}
});
function $$() {
return Selector.findChildElements(document, $A(arguments));
}
var Form = {
reset: function(form) {
$(form).reset();
return form;
},
serializeElements: function(elements, getHash) {
var data = elements.inject({}, function(result, element) {
if (!element.disabled && element.name) {
var key = element.name, value = $(element).getValue();
if (value != null) {
if (key in result) {
if (result[key].constructor != Array) result[key] = [result[key]];
result[key].push(value);
}
else result[key] = value;
}
}
return result;
});
return getHash ? data : Hash.toQueryString(data);
}
};
Form.Methods = {
serialize: function(form, getHash) {
return Form.serializeElements(Form.getElements(form), getHash);
},
getElements: function(form) {
return $A($(form).getElementsByTagName('*')).inject([],
function(elements, child) {
if (Form.Element.Serializers[child.tagName.toLowerCase()])
elements.push(Element.extend(child));
return elements;
}
);
},
getInputs: function(form, typeName, name) {
form = $(form);
var inputs = form.getElementsByTagName('input');
if (!typeName && !name) return $A(inputs).map(Element.extend);
for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
var input = inputs[i];
if ((typeName && input.type != typeName) || (name && input.name != name))
continue;
matchingInputs.push(Element.extend(input));
}
return matchingInputs;
},
disable: function(form) {
form = $(form);
Form.getElements(form).invoke('disable');
return form;
},
enable: function(form) {
form = $(form);
Form.getElements(form).invoke('enable');
return form;
},
findFirstElement: function(form) {
return $(form).getElements().find(function(element) {
return element.type != 'hidden' && !element.disabled &&
['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
});
},
focusFirstElement: function(form) {
form = $(form);
form.findFirstElement().activate();
return form;
},
request: function(form, options) {
form = $(form), options = Object.clone(options || {});
var params = options.parameters;
options.parameters = form.serialize(true);
if (params) {
if (typeof params == 'string') params = params.toQueryParams();
Object.extend(options.parameters, params);
}
if (form.hasAttribute('method') && !options.method)
options.method = form.method;
return new Ajax.Request(form.readAttribute('action'), options);
}
}
Form.Element = {
focus: function(element) {
$(element).focus();
return element;
},
select: function(element) {
$(element).select();
return element;
}
}
Form.Element.Methods = {
serialize: function(element) {
element = $(element);
if (!element.disabled && element.name) {
var value = element.getValue();
if (value != undefined) {
var pair = {};
pair[element.name] = value;
return Hash.toQueryString(pair);
}
}
return '';
},
getValue: function(element) {
element = $(element);
var method = element.tagName.toLowerCase();
return Form.Element.Serializers[method](element);
},
clear: function(element) {
$(element).value = '';
return element;
},
present: function(element) {
return $(element).value != '';
},
activate: function(element) {
element = $(element);
try {
element.focus();
if (element.select && (element.tagName.toLowerCase() != 'input' ||
!['button', 'reset', 'submit'].include(element.type)))
element.select();
} catch (e) {}
return element;
},
disable: function(element) {
element = $(element);
element.blur();
element.disabled = true;
return element;
},
enable: function(element) {
element = $(element);
element.disabled = false;
return element;
}
}
var Field = Form.Element;
var $F = Form.Element.Methods.getValue;
Form.Element.Serializers = {
input: function(element) {
switch (element.type.toLowerCase()) {
case 'checkbox':
case 'radio':
return Form.Element.Serializers.inputSelector(element);
default:
return Form.Element.Serializers.textarea(element);
}
},
inputSelector: function(element) {
return element.checked ? element.value : null;
},
textarea: function(element) {
return element.value;
},
select: function(element) {
return this[element.type == 'select-one' ?
'selectOne' : 'selectMany'](element);
},
selectOne: function(element) {
var index = element.selectedIndex;
return index >= 0 ? this.optionValue(element.options[index]) : null;
},
selectMany: function(element) {
var values, length = element.length;
if (!length) return null;
for (var i = 0, values = []; i < length; i++) {
var opt = element.options[i];
if (opt.selected) values.push(this.optionValue(opt));
}
return values;
},
optionValue: function(opt) {

return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
}
}
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();
var changed = ('string' == typeof this.lastValue && 'string' == typeof value
? this.lastValue != value : String(this.lastValue) != String(value));
if (changed) {
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() {
Form.getElements(this.element).each(this.registerCallback.bind(this));
},
registerCallback: function(element) {
if (element.type) {
switch (element.type.toLowerCase()) {
case 'checkbox':
case 'radio':
Event.observe(element, 'click', this.onElementEvent.bind(this));
break;
default:
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,
KEY_HOME: 36,
KEY_END: 35,
KEY_PAGEUP: 33,
KEY_PAGEDOWN: 34,
element: function(event) {
var el = $(event.target || event.srcElement); 
if(el.nodeName && el.nodeName == "#text") 
el = el.parentNode;
return el;
},
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) { 
try{
this.observers.push([element, name, observer, useCapture]);
element.addEventListener(name, observer, useCapture);
}catch(e) { 
if(typeof log4js != 'undefined') {
log4js.logger.error("Caller :" + arguments.callee.caller.caller, e);
}
}
} 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, length = Event.observers.length; i < length; i++) {
Event.stopObserving.apply(this, Event.observers[i]);
Event.observers[i][0] = null;
}
Event.observers = false;
},
observe: function(element, name, observer, useCapture) {
element = $(element);
useCapture = useCapture || false;
if (name == __i2rd_domupdate_event) {
__i2rd_domupdate_handlers.push(observer);
} else {
if (name == 'keypress' &&
(Prototype.Browser.WebKit || element.attachEvent))
name = 'keydown';
Event._observeAndCache(element, name, observer, useCapture);
}
},
stopObserving: function(element, name, observer, useCapture) {
element = $(element);
useCapture = useCapture || false;
if (name == 'keypress' &&
(Prototype.Browser.WebKit || element.attachEvent))
name = 'keydown';
if(name == __i2rd_domupdate_event) {
__i2rd_domupdate_handlers=__i2rd_domupdate_handlers.without(observer);
} else if (element.removeEventListener) {
element.removeEventListener(name, observer, useCapture);
} else if (element.detachEvent) {
try {
element.detachEvent('on' + name, observer);
} catch (e) {}
}
}
});
if (Prototype.Browser.IE)
Event.observe(window, 'unload', Event.unloadCache, false);
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) {
if(element.tagName=='BODY') break;
var 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;
},
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 {
if (!window.opera || element.tagName=='BODY') {
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 (Prototype.Browser.WebKit) {
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];
}
}
Element.addMethods();

/*  JS Resource: lib/logger.js  */

if (typeof log4jsdefined == 'undefined') {
i2rd.hasConsole = function() {
return (typeof console != 'undefined' && typeof console.info != 'undefined');
};
log4jsdefined=true;
var log4js = {};
log4js.funcname = function (f) {


var s, v = /function (\w*)/.exec(f.toString());
if(v && v.length > 1){s=v[1];}
if (!s || (s.length==0)){return "anonymous";}
return s;
};
log4js.stacktrace = function () {
try {
var ac,s = ""; 
for(ac=arguments.callee;!!ac;ac=ac.caller) {
if(ac==log4js.stacktrace||ac==log4js.logger.log){continue;}
s += log4js.funcname(ac) + "\n";


if(ac.caller==ac){break;}
}
return s;
} catch(ee) {
alert("Unable to get stack trace. " + ee.message + "\n" + ee.stack);
}
};
log4js.LogEvent = function(logLevel, message, exceptionName, exceptionMessage, stackTrace) {
this.logLevel = logLevel;
this.message = message;
this.exceptionName = exceptionName;
this.exceptionMessage = exceptionMessage;
this.stackTrace = stackTrace;
};
log4js.LogEvent.prototype = {
encodeParam : function(queueId) {
var b="&loglevel."+queueId+"="+this.logLevel+"&message."+queueId+"="+encodeURIComponent(this.message);
if(this.exceptionName){b+="&exceptionname."+queueId+"="+encodeURIComponent(this.exceptionName);}
if(this.exceptionMessage){b+="&exceptionmessage."+queueId+"="+encodeURIComponent(this.exceptionMessage);}
if(this.stackTrace){b+="&exceptionstacktrace."+queueId+"="+encodeURIComponent(this.stackTrace);}
return b;
}
};
log4js.LogLevel = {};
log4js.LogLevel.FATAL = "FATAL";
log4js.LogLevel.ERROR = "ERROR";
log4js.LogLevel.WARN = "WARN";
log4js.LogLevel.INFO = "INFO";
log4js.LogLevel.DEBUG = "DEBUG";
log4js.__Logger = function() {
this.ajaxSync = false;
this.logTarget = window.location || document.location || document.URL;
this.internalError = false;
this.currentLevel = -1;
this.timeout = null;
this.lastlog = new Date();
var level = i2rd.getCookie("loglevel");
if(level){this.currentLevel = this.getLogLevelInt(level);}
var me = this;
i2rd.addEvent(window, 'unload', function() {me.cleanup(); delete me;});
};
log4js.__Logger.queue = [];
log4js.__Logger.prototype = {
queue: [],
cleanup: function(evt) {
if(this.timeout){window.clearTimeout(this.timeout);}
this.ajaxSync = true;
this.flushQueue(true);
},
getLogLevelInt: function(level) {
switch(level) {
case log4js.LogLevel.FATAL:
return 50000;
case log4js.LogLevel.ERROR:
return 40000;
case log4js.LogLevel.WARN:
return 30000;
case log4js.LogLevel.INFO:
return 20000;
case log4js.LogLevel.DEBUG:
return 10000;
default:
return 20000;
}
},
canLog: function(level) {
return this.currentLevel <= this.getLogLevelInt(level);
},
setLogLevel: function(level) {
this.currentLevel = this.getLogLevelInt(level);
var now = new Date();
var future = new Date(now.getTime() + (180000));
i2rd.setCookie("loglevel", level, future);
},
setInternalError: function() {
this.internalError = true;
},
isOn: function() {
return !this.internalError;
},
log: function(logLevel, msg, ex) {

var shouldLog = this.canLog(logLevel);
try	{
if(!msg){return;}
var level=log4js.LogLevel.INFO;
if(logLevel){level = logLevel;}
if(!this.isOn() || !shouldLog){return;}
this.lastlog = new Date();
var en,em,st;
if(ex) {
if(ex.name){en = ex.name;}
if(ex.message){em = ex.message;}
if(ex.stack){st = ex.stack;}
else{st = log4js.stacktrace();}
}
var le = new log4js.LogEvent(logLevel, msg, en, em, st);
log4js.__Logger.queue.push(le);
if(log4js.__Logger.queue.length > 50){this.flushQueue(true);}
else if(!this.timeout) {
var me = this;
this.timeout = window.setTimeout(function(){me.flushQueue(); delete me;}, 
1500);
}
}
catch(e) {
alert("Logger misconfigured: " + e.message);
}
},
fatal: function(msg, ex){this.log(log4js.LogLevel.FATAL, msg, ex);},
error: function(msg, ex){this.log(log4js.LogLevel.ERROR, msg, ex);},
warn: function(msg, ex){this.log(log4js.LogLevel.WARN, msg, ex);},
info: function(msg, ex){this.log(log4js.LogLevel.INFO, msg, ex);},
debug: function(msg, ex){this.log(log4js.LogLevel.DEBUG, msg, ex);},
clog: function(msg, ll){
if(!i2rd.hasConsole()) {return;}
switch(ll){
case log4js.LogLevel.FATAL:
case log4js.LogLevel.ERROR:
console.error(msg); break;
case log4js.LogLevel.WARN:
console.warn(msg); break;
case log4js.LogLevel.INFO:
console.info(msg); break;
case log4js.LogLevel.DEBUG:
default:
console.debug(msg); break;
}
},
flushQueue : function(force) {
this.timeout = null;
var size = log4js.__Logger.queue.length;
if(size==0){return;}
var now = new Date();
if(!force && (now.getTime() - this.lastlog.getTime()) < 250) {
var me = this;
this.timeout = window.setTimeout(function(){me.flushQueue(); delete me;}, 500);
return;
}
var h,b = "?log4js.queue_size=" + size;
if(i2rd.hasConsole()){console.group("I2RD Javascript Log Messages");}
for(h=0;h<size;h++){
var qe = log4js.__Logger.queue[h];
try{
this.clog(qe.message, qe.logLevel);
if(qe.exceptionMessage){this.clog(qe.exceptionMessage, qe.logLevel);}
if(qe.stackTrace){this.clog(qe.stackTrace, qe.logLevel);}
}catch(e){}
b += qe.encodeParam(h);
}
if(i2rd.hasConsole()){console.groupEnd();}
var ajax = i2rd.getAjaxTransport();
if(ajax) {
if(!this.ajaxSync) { 
ajax.onreadystatechange = log4js.__getReqCallback(ajax, this);
}
ajax.open("POST", window.location.href, !this.ajaxSync);
ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
ajax.setRequestHeader("Filter-Logging", "on");
ajax.setRequestHeader("Filter-Logging_Queue_Size", size);
ajax.send(b);
}
log4js.__Logger.queue.length=0;
}
};
log4js.logger = new log4js.__Logger();
log4js.__getReqCallback = function(ajax, log) {
var req = ajax, logger = log;
return function() {
if (req.readyState==4) {
if (req.status==200||req.status==0) {
if(req.responseText) {
logger.setLogLevel(req.responseText);
}
} else {
logger.setInternalError();
}
try { 
if(req && req.onreadystatechange){delete req.onreadystatechange;}
} catch(e) {} 
}
};
};
}

/*  JS Resource: FCKeditor/fckeditor.js  */



var FCKeditor = function( instanceName, width, height, toolbarSet, value )
{

this.InstanceName	= instanceName ;
this.Width	= width	|| '100%' ;
this.Height	= height	|| '200' ;
this.ToolbarSet	= toolbarSet	|| 'Default' ;
this.Value	= value	|| '' ;
this.BasePath	= FCKeditor.BasePath ;
this.CheckBrowser	= true ;
this.DisplayErrors	= true ;

this.Config	= new Object() ;


this.OnError	= null ;	
}


FCKeditor.BasePath = '/fckeditor/' ;


FCKeditor.MinHeight = 200 ;


FCKeditor.MinWidth = 750 ;

FCKeditor.prototype.Version	= '2.5.1' ;
FCKeditor.prototype.VersionBuild	= '17566' ;

FCKeditor.prototype.Create = function()
{
document.write( this.CreateHtml() ) ;
}

FCKeditor.prototype.CreateHtml = function()
{

if ( !this.InstanceName || this.InstanceName.length == 0 )
{
this._ThrowError( 701, 'You must specify an instance name.' ) ;
return '' ;
}

var sHtml = '<div>' ;

if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
{
sHtml += '<input type="hidden" id="' + this.InstanceName + '" name="' + this.InstanceName + '" value="' + this._HTMLEncode( this.Value ) + '" style="display:none" />' ;
sHtml += this._GetConfigHtml() ;
sHtml += this._GetIFrameHtml() ;
}
else
{
var sWidth = this.Width.toString().indexOf('%') > 0 ? this.Width : this.Width + 'px' ;
var sHeight = this.Height.toString().indexOf('%') > 0 ? this.Height : this.Height + 'px' ;
sHtml += '<textarea name="' + this.InstanceName + '" rows="4" cols="40" style="width:' + sWidth + ';height:' + sHeight + '">' + this._HTMLEncode( this.Value ) + '<\/textarea>' ;
}

sHtml += '</div>' ;

return sHtml ;
}

FCKeditor.prototype.ReplaceTextarea = function()
{
if ( !this.CheckBrowser || this._IsCompatibleBrowser() )
{

var oTextarea = document.getElementById( this.InstanceName ) ;
var colElementsByName = document.getElementsByName( this.InstanceName ) ;
var i = 0;
while ( oTextarea || i == 0 )
{
if ( oTextarea && oTextarea.tagName.toLowerCase() == 'textarea' )
break ;
oTextarea = colElementsByName[i++] ;
}

if ( !oTextarea )
{
alert( 'Error: The TEXTAREA with id or name set to "' + this.InstanceName + '" was not found' ) ;
return ;
}

oTextarea.style.display = 'none' ;
this._InsertHtmlBefore( this._GetConfigHtml(), oTextarea ) ;
this._InsertHtmlBefore( this._GetIFrameHtml(), oTextarea ) ;
}
}

FCKeditor.prototype._InsertHtmlBefore = function( html, element )
{
if ( element.insertAdjacentHTML )	
element.insertAdjacentHTML( 'beforeBegin', html ) ;
else	
{
var oRange = document.createRange() ;
oRange.setStartBefore( element ) ;
var oFragment = oRange.createContextualFragment( html );
element.parentNode.insertBefore( oFragment, element ) ;
}
}

FCKeditor.prototype._GetConfigHtml = function()
{
var sConfig = '' ;
for ( var o in this.Config )
{
if ( sConfig.length > 0 ) sConfig += '&amp;' ;
sConfig += encodeURIComponent( o ) + '=' + encodeURIComponent( this.Config[o] ) ;
}

return '<input type="hidden" id="' + this.InstanceName + '___Config" value="' + sConfig + '" style="display:none" />' ;
}

FCKeditor.prototype._GetIFrameHtml = function()
{
var sFile = 'fckeditor.html' ;

try
{
if ( (/fcksource=true/i).test( window.top.location.search ) )
sFile = 'fckeditor.original.html' ;
}
catch (e) { }

var sLink = this.BasePath + 'editor/' + sFile + '?InstanceName=' + encodeURIComponent( this.InstanceName ) ;
if (this.ToolbarSet) sLink += '&amp;Toolbar=' + this.ToolbarSet ;

return '<iframe id="' + this.InstanceName + '___Frame" src="' + sLink + '" width="' + this.Width + '" height="' + this.Height + '" frameborder="0" scrolling="no"></iframe>' ;
}

FCKeditor.prototype._IsCompatibleBrowser = function()
{
return FCKeditor_IsCompatibleBrowser() ;
}

FCKeditor.prototype._ThrowError = function( errorNumber, errorDescription )
{
this.ErrorNumber	= errorNumber ;
this.ErrorDescription	= errorDescription ;

if ( this.DisplayErrors )
{
document.write( '<div style="COLOR: #ff0000">' ) ;
document.write( '[ FCKeditor Error ' + this.ErrorNumber + ': ' + this.ErrorDescription + ' ]' ) ;
document.write( '</div>' ) ;
}

if ( typeof( this.OnError ) == 'function' )
this.OnError( this, errorNumber, errorDescription ) ;
}

FCKeditor.prototype._HTMLEncode = function( text )
{
if ( typeof( text ) != "string" )
text = text.toString() ;

text = text.replace(
/&/g, "&amp;").replace(
/"/g, "&quot;").replace(
/</g, "&lt;").replace(
/>/g, "&gt;") ;

return text ;
}

;(function()
{
var textareaToEditor = function( textarea )
{
var editor = new FCKeditor( textarea.name ) ;

editor.Width = Math.max( textarea.offsetWidth, FCKeditor.MinWidth ) ;
editor.Height = Math.max( textarea.offsetHeight, FCKeditor.MinHeight ) ;

return editor ;
}


FCKeditor.ReplaceAllTextareas = function()
{
var textareas = document.getElementsByTagName( 'textarea' ) ;

for ( var i = 0 ; i < textareas.length ; i++ )
{
var editor = null ;
var textarea = textareas[i] ;
var name = textarea.name ;


if ( !name || name.length == 0 )
continue ;

if ( typeof arguments[0] == 'string' )
{



var classRegex = new RegExp( '(?:^| )' + arguments[0] + '(?:$| )' ) ;

if ( !classRegex.test( textarea.className ) )
continue ;
}
else if ( typeof arguments[0] == 'function' )
{


editor = textareaToEditor( textarea ) ;
if ( arguments[0]( textarea, editor ) === false )
continue ;
}

if ( !editor )
editor = textareaToEditor( textarea ) ;

editor.ReplaceTextarea() ;
}
}
})() ;

function FCKeditor_IsCompatibleBrowser()
{
var sAgent = navigator.userAgent.toLowerCase() ;


if ( /*@cc_on!@*/false && sAgent.indexOf("mac") == -1 )
{
var sBrowserVersion = navigator.appVersion.match(/MSIE (.\..)/)[1] ;
return ( sBrowserVersion >= 5.5 ) ;
}


if ( navigator.product == "Gecko" && navigator.productSub >= 20030210 && !( typeof(opera) == 'object' && opera.postError ) )
return true ;


if ( window.opera && window.opera.version && parseFloat( window.opera.version() ) >= 9.5 )
return true ;


if ( sAgent.indexOf( ' applewebkit/' ) != -1 )
return ( sAgent.match( / applewebkit\/(\d+)/ )[1] >= 522 ) ;	

return false ;
}

















var FCKeditorHelper = new Object();


FCKeditorHelper.fckSetupRetryCount = 0;
FCKeditorHelper.serializerReplaced = false;
FCKeditorHelper.replaceSerializer = function() { 
if(FCKeditorHelper.serializerReplaced || !Form || !Form.Element || !Form.Element.Serializers) return;
try {
if(FCKeditorAPI) {
var beforeFCKSerializer = Form.Element.Serializers['textarea']; 
Form.Element.Serializers['textarea'] = function(element) {
if(element.nodeName.toLowerCase() == "textarea") {
try {
var FCK = FCKeditorAPI.GetInstance(element.name);
if (FCK != null) {

var match = /(\d+).(\d+).(\d+).*/.exec(Prototype.Version);
if (match 
&& (match[1] > 1 
|| (match[1] == 1 && match[2] > 5) 
|| (match[1] == 1 && match[2] == 5 && match[3] > 0)))
{
return FCK.GetXHTML();
}
else
{
return [element.name, FCK.GetXHTML()];
}
}
} catch(e) { log4js.logger.error("Unable to call FCKeditorAPI.getInstance(..)", e); }
}

return beforeFCKSerializer(element);
}
FCKeditorHelper.serializerReplaced = true;
}
} catch(e) { 
if(FCKeditorHelper.fckSetupRetryCount > 16) {
log4js.logger.error("FCKeditorAPI is undefined", e);
FCKeditorHelper.fckSetupRetryCount = 0;
if(!confirm("Timeout loading rich text editor. Press OK to keep waiting. Press Cancel to reload the page.")) {
var w = window;
if(window.top) w = window.top;
w.location.reload();
}
}	
}
if(!FCKeditorHelper.serializerReplaced && FCKeditorHelper.fckSetupRetryCount <= 16) {
FCKeditorHelper.fckSetupRetryCount++;
if(FCKeditorHelper.fckSetupRetryCount > 4)
log4js.logger.warn("Can't find fck api. Will look again. #" + FCKeditorHelper.fckSetupRetryCount);
window.setTimeout(FCKeditorHelper.replaceSerializer, 500);
} else {
FCKeditorHelper.fckSetupRetryCount = 0;
}
}
if(!log4js.logger || !log4js.logger.debug) alert("Logger missing.");


FCKeditorHelper.fckactivate = function(area) {

var oFCKeditor = new FCKeditor(area.id);
oFCKeditor.BasePath="/resources/all/docroot/FCKeditor/";
oFCKeditor.EnableSafari = true;
oFCKeditor.EnableOpera = true;
oFCKeditor.EnableKonqueror = false;


var configMatch = area.className.match(/fckeditor_config_(\w+)/);
if (configMatch)
{
oFCKeditor.Config["CustomConfigurationsPath"] = oFCKeditor.BasePath+"../FCKconfig/"+configMatch[1]+".js";
oFCKeditor.ToolbarSet = configMatch[1];
}
oFCKeditor.ReplaceTextarea();
area.style.visibility='visible';
window.setTimeout(FCKeditorHelper.replaceSerializer, 250);
}

FCKeditorHelper.checkPermission=function(tset){
if(!tset){return;}
var h,i,j,k,bar,nb,tbi,el,list = window.top.document.getElementsByTagName("dfn");
for(h = 0; h < list.length; h++){
el = list[h];
if(!(el.className && el.className.match(/richtexteditorpermissionhelper/))){continue;}
el = el.firstChild ? el.firstChild.nodeValue.split(",") : [];
for(i=0; i < el.length; i++){
tbi=el[i];
for(j=0; j < tset.length; j++){
bar = tset[j];
if(bar == "/" || typeof bar.push == 'undefined'){continue;}
nb=[];
for(k=0; k < bar.length; k++){
if(tbi != bar[k]){
nb.push(bar[k]);
}
}
tset[j] = nb;
}
}
}
bar=null;
for(h = 0; h < tset.length; h++){
el = bar;
bar = tset[h];
if(bar == "/" || (bar && bar.length == 0)){
if(el == "/" || el.length == 0){delete tset[h];bar=tset[h-1];}
}else if(el == "/" && (bar && bar.length < 4) && h > 2) {
nb = tset[h-3];
nb = nb.concat(bar);
tset[h-3]=nb;
bar=nb;
delete tset[h];
}
}
};


FCKeditorHelper.findFCKTextAreas = function() {
try {
var elements = new Array();
for(var i = 0; i < document.forms.length; i++) {
var f = document.forms[i];
for(var h = 0; h < f.elements.length; h++) {
var el = f.elements[h];
if(el.className && el.className.match(/fckeditor/) 
&& el.nodeName.toLowerCase() == "textarea") {
elements.push(el);
}
}
}
for(var h = 0; h < elements.length; h++) {
var fe = elements[h];
if(typeof fe.fckactivated == 'undefined') {
fe.fckactivated = true;
FCKeditorHelper.fckactivate(elements[h]);
} 
}
} catch (e) {
log4js.logger.error("Setup FCK text areas", e); 
}
}

/*  JS Resource: lib/miwt/miwt-lib.js  */

if(typeof miwt == 'undefined') {
var miwt = new Object();
}
if(typeof miwtutil == 'undefined') {
var miwtutil = {};
if(!Node) {
var Node = new Object();
Node.ELEMENT_NODE = 1;
Node.ATTRIBUTE_NODE = 2;
Node.TEXT_NODE = 3;
Node.CDATA_SECTION_NODE = 4;
Node.ENTITY_REFERENCE_NODE = 5;
Node.ENTITY_NODE = 6;
Node.PROCESSING_INSTRUCTION_NODE = 7;
Node.COMMENT_NODE = 8;
Node.DOCUMENT_NODE = 9;
Node.DOCUMENT_TYPE_NODE = 10;
Node.DOCUMENT_FRAGMENT_NODE = 11;
Node.NOTATION_NODE = 12;
}
miwt.getComputedStyle = function (element, style) {
if (document.defaultView && document.defaultView.getComputedStyle) {
return document.defaultView.getComputedStyle(element, "").getPropertyValue(style);
}
else if (element.currentStyle) {
return element.currentStyle[style];
}
else {
return "";
}
}
miwt.observe = function(element, name, observer, useCapture) {
element = $(element);
useCapture = useCapture || false;
if (name == 'keypress' &&
(navigator.appVersion.match(/Konqueror|Safari|KHTML/)
|| element.attachEvent))
name = 'keydown';
if (element.addEventListener) {
element.addEventListener(name, observer, useCapture);
} else if (element.attachEvent) {
element.attachEvent('on' + name, observer);
}
}
miwt.stopObserving = function(element, name, observer, useCapture) {
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) {
try {
element.detachEvent('on' + name, observer);
} catch (e) {}
}
}
}
if(typeof miwt.Form == 'undefined') {
miwt.prv_FormOnSubmitHandler = function(evt) {
var form = Event.element(evt);
if (!form || !form.MIWTOnSubmit)
return true;
return form.MIWTOnSubmit.apply(form);
}
miwt.Form = Class.create();
miwt.Form.prototype = 
{

initialize: function () {
this.submitters = new Array(); 
this.submitter_functions = new Array(); 
this.onsubmit = miwt.prv_FormOnSubmitHandler;
},
MIWTOnSubmit: function ()
{
if (typeof(window.miwtReady) != 'undefined' && window.miwtReady == 2) 
return false;

var submitter;
for(var i = 0; submitter = this.submitters[i]; i++) {
var element = $(submitter);
if (element) {
var f = this.submitter_functions[element.id];
if (f && !f(this))
{

return false;
}
}
}

window.miwtReady=2;
return true;
},
MIWTSubmit: function (ajax_request_complete_callback)
{


if (typeof(FCKeditorAPI) != 'undefined')
{
var el, list;
list = $A(this.getElementsByTagName('textarea'));
while (el = list.pop()) {
var FCK = FCKeditorAPI.GetInstance(el.id);
if (!FCK) continue;
if (FCK.Status != FCK_STATUS_COMPLETE) {
if (typeof(el.incompleteCount) == 'undefined')
el.incompleteCount = 0;
if (el.incompleteCount < 5) {
el.incompleteCount++;
window.setTimeout(this.MIWTSubmit.bind(this), 1000, "JavaScript");
return;
}
}
el.incompleteCount = 0;
}
}

if (this.lastSubmit)
{
var now = new Date().getTime();
var then = this.lastSubmit.getTime();
if ((now - then) < 250)
{

this.elements['miwt_button_activated'].value='';
this.elements['miwt_drag_source'].value='';
this.elements['miwt_drop_target'].value='';
return false; 
}
}
if (!this.MIWTOnSubmit())
return false;
if (typeof(miwtajax)=='undefined' || $(this.elements['miwt_button_activated'].value+"_noajax"))
{
miwtajax.showFormPostWait();
this.submit();
return true;
}
if (ajax_request_complete_callback == null)
ajax_request_complete_callback = miwtajax.ajax_request_complete_callback;
else if (typeof(ajax_request_complete_callback.push) == 'undefined') {
var a = new Array();
a.push(ajax_request_complete_callback);
ajax_request_complete_callback = miwtajax.ajax_request_complete_callback.concat(a);
}
var ajax = new miwtajax.InputProcessor(this, ajax_request_complete_callback, miwtajax.ajax_failed_update_callback);
this.lastSubmit = new Date();
if (!ajax.isRequestSubmitted())
{

miwtajax.showFormPostWait();
this.submit();
}
else
{



}
return true;
},
RegisterOnSubmitHandler: function(element, handler)
{
if (element == null)
return;

this.submitter_functions[element.id] = handler;
if (this.submitters.indexOf(element.id) == -1)
this.submitters.push(element.id);
},
CleanOnSubmitHandlers: function()
{
var list = new Array();
var elementid;
for(var i = 0; elementid = this.submitters[i]; i++) {
var element = $(elementid);
if (element)
list.push(elementid);
else
this.submitter_functions[elementid] = null;
};
this.submitters=list;
}
}
} 
if(typeof miwtsetup == 'undefined') {
var miwtsetup = {};
miwt.setupHandlers = new Array();
miwt.setupHandlers["any"] = new Array();
miwt.setupHandlers["a"] = new Array();
miwt.setupHandlers["button"] = new Array();
miwt.setupHandlers["div"] = new Array();
miwt.setupHandlers["img"] = new Array();
miwt.setupHandlers["input"] = new Array();
miwt.setupHandlers["select"] = new Array();
miwt.setupHandlers["span"] = new Array();
miwt.setupHandlers["table"] = new Array();
miwt.setupHandlers["textarea"] = new Array();
miwt.AddSetupHandler = function (tags, f)
{
if (tags == null)
tags = [ "any" ];
var i, tag;
for(i = 0; tag = tags[i]; i++) {
if (!miwt.setupHandlers[tag])
miwt.setupHandlers[tag] = new Array();
miwt.setupHandlers[tag].push(f);
}
}

miwt.setup = function (node)
{
var nodes = node.getElementsByTagName('*');
var f, node, a, j;
var any = miwt.setupHandlers["any"];
for(var i = 0; node = nodes.item(i); i++) {
if (!node.className)
continue;
var tag = node.tagName.toLowerCase();

if (tag == 'select' 
&& node.type && node.type == 'select-one'
&& !/\bmiwt_focus\b/.exec(node.className))
{
if (miwt.lastFocusId == null)
node.blur();
}
for(j = 0; f = any[j]; j++)
f(tag, node);
a = miwt.setupHandlers[tag];
if (a) {
for(j = 0; f = a[j]; j++)
f(tag, node);
}
}
}

miwt.scheduleUpdateKeydownHandler = function (event) { 
miwt.scheduleUpdate(Event.element(event).form.id); 
}
miwt.observerFormSubmit = function (element) { 
element.form.MIWTSubmit(); 
}
miwt.AddSetupHandler([ 'input', 'select', 'textarea' ], function (tag, node)
{
if (node.form && /\bmiwt_watch\b/.exec(node.className))
{

if ((tag=='input' && node.type == 'text') || tag=='textarea')
miwt.observe(node, 'keydown', miwt.scheduleUpdateKeydownHandler);
else
node.observer = new Form.Element.EventObserver(node, miwt.observerFormSubmit);
}
});

miwt.AddSetupHandler([ 'input', 'select', 'textarea' ], function (tag, node)
{
if (node.focus && /\bmiwt_focus\b/.exec(node.className))
window.setTimeout(function() { node.focus(); }, 200);
});
miwt.setupForm = function(form)
{

Object.extend(form, miwt.Form.prototype);
try
{
form.initialize();
miwt.setup(form);

form.RegisterOnSubmitHandler(form, miwt.SaveDeviceSize);

form.RegisterOnSubmitHandler(form, validation.validateForm);
}
catch (exception) { log4js.logger.error("Configuring MIWT form "+(form.id || form.name), exception); }
}
miwt.onLoad = function (event)
{

var i, form;
for(i = 0; form = document.forms[i]; i++) {
if (/\bmiwt_form\b/.exec(form.className))
miwt.setupForm(form);
else if (/\bmiwt_external_action\b/.exec(form.className)) {
var form2 = form;
setTimeout(function() { form2.submit(); }, 10, 'JavaScript');
}
}
}
miwt.observe(window, 'load', miwt.onLoad);
} 
if(typeof miwtbutton == 'undefined') {
miwtbutton = {};
miwt.ButtonClicked = function(event)
{
Event.stop(event);
var form = Event.findElement(event, 'form');
var element = Event.element(event);
while (element && element.parentNode && !(element.name || element.id))
element = element.parentNode;
var buttonid = element.name || element.id;
var confirmText = $(buttonid+'_confirm');
if (confirmText && !confirm(confirmText.firstChild.data))
return;
form.elements['miwt_button_activated'].value=element.name || element.id;

form.MIWTSubmit();
}
miwt.resetEventHandler = function (event)
{
Event.findElement(event, 'form').reset();
}
miwt.AddSetupHandler(null, function (tag, node)
{
if (/\bmiwt_reset\b/.exec(node.className))
miwt.observe(node, "click", miwt.resetEventHandler);
if (/\bmiwt_submit\b/.exec(node.className))
{
if ((tag=='input' && (node.type == 'text' || node.type == 'password')) || tag=='textarea')
miwt.observe(node, "keydown", miwt.FieldAction);
else
miwt.observe(node, "click", miwt.ButtonClicked);
}
});
miwt.imagebutton = new Object();
miwt.imagebutton.groups = new Array();
miwt.imagebutton.imageButtonEnabled = function (button)
{
var disabledValue = button.attributes.getNamedItem("disabled");
return disabledValue==null || disabledValue.value != "true";
}
miwt.imagebutton.imageButtonMouseOver = function (evt)
{
var target=Event.element(evt);
if (target==null)
return;
Event.stop(evt);
if (miwt.imagebutton.imageButtonEnabled(target))
{
miwt.imagebutton.imageButtonSetState(target, null, null, "rollover");
}
}
miwt.imagebutton.imageButtonMouseOut = function (evt)
{
var target=Event.element(evt);
if (target==null)
return;
Event.stop(evt);	
if (miwt.imagebutton.imageButtonEnabled(target))
{
miwt.imagebutton.imageButtonSetState(target, null, null, "normal");
}
}
miwt.imagebutton.imageButtonMouseDown = function (evt)
{
var target=Event.element(evt);
if (target==null)
return;
Event.stop(evt);	
if (miwt.imagebutton.imageButtonEnabled(target))
{
if (target.focus)
target.focus();
miwt.imagebutton.imageButtonSetState(target, null, null, "pressed");
}
}
miwt.imagebutton.imageButtonMouseUp = function (evt)
{
var target=Event.element(evt);
if (target==null)
return;
Event.stop(evt);
if (miwt.imagebutton.imageButtonEnabled(target))
{
miwt.imagebutton.imageButtonSetState(target, null, null, "normal");
}
}
miwt.imagebutton.imageButtonMouseClick = function (evt)
{
var target=Event.element(evt);
if (target==null)
return;
Event.stop(evt);
if (miwt.imagebutton.imageButtonEnabled(target))
{
var selected=target.miwt_isSelected;
if (target.miwt_selectedvalue!=null)
{

selected= (target.miwt_isSelected == false);
}
if (target.miwt_buttonGroup==null || selected)
{
miwt.imagebutton.imageButtonSetState(target, null, selected, "normal");
}
if (target.miwt_watch)
Event.findElement(evt, 'form').MIWTSubmit();
}
}
miwt.imagebutton.imageButtonSetState = function (img, isActive, isSelected, state)
{
if (isActive==null)
isActive=img.miwt_isActive;
if (isSelected==null)
isSelected=img.miwt_isSelected;
if (img.miwt_isActive==isActive 
&& img.miwt_isSelected==isSelected
&& img.miwt_state==state)
{
return false;
}
var newimgsrc;	
if (isActive)
{
if (state=="normal")
{
if (isSelected && img.miwt_activeselected!=null)
{
newimgsrc=img.miwt_activeselected;
}
else
{
newimgsrc=img.miwt_active;
}
}
else if (state=="rollover")
{
newimgsrc=img.miwt_activerollover;
}
else if (state=="pressed")
{
newimgsrc=img.miwt_activepressed;
}
else
{
alert("Invalid button state "+state);
}
}
else
{
if (state=="normal")
{
if (isSelected && img.miwt_inactiveselected!=null)
{
newimgsrc=img.miwt_inactiveselected;
}
else
{
newimgsrc=img.miwt_inactive;
}
}
else if (state=="rollover")
{
newimgsrc=img.miwt_inactiverollover;
}
else if (state=="pressed")
{
newimgsrc=img.miwt_inactivepressed;
}
else
{
alert("Invalid button state "+state);
}
}
img.miwt_isActive=isActive;
img.miwt_state=state;
if (img.miwt_isActive && img.miwt_isSelected!=isSelected)
{
var wasSelected=img.miwt_isSelected;
img.miwt_isSelected=isSelected;
if (isSelected)
{
var group = null;
if (img.miwt_buttonGroup
&& (group = miwt.imagebutton.groups[img.miwt_buttonGroup]))
{

group.each(function (buttonid) {
if (buttonid != img.id) {
var button = $(buttonid);
if (button)
miwt.imagebutton.imageButtonSetState(button, null, false, "normal");
}
});
}
img.miwt_valuenode.value=img.miwt_selectedvalue;
}
else
{
img.miwt_valuenode.value="";
}
}
if (newimgsrc && typeof(newimgsrc) != 'undefined' && newimgsrc != 'undefined' && newimgsrc!='null')
{
img.src=newimgsrc.src;
return true;
}
else
{
return false;
}	
}
miwt.AddSetupHandler([ 'img' ], function (tag, node) 
{
if (tag!='img' || !node.className.match(/miwt_image\S*_button/))
return;
var id = node.id;
var buttonGroupId = null;
var match = /miwt_button_group_(\S+)/.exec(node.className);
if (match)
buttonGroupId = match[1];
var valueid = null;
var selectedvalue = null;
if (id.match(/_img$/))
{
valueid = id.replace(/(_r\d+)*_img$/, "");
var valuenode = $(id+"_value");
if (valuenode)
selectedvalue = valuenode.firstChild.data;
}
var img=$(id);
if (img==null)
{
log4js.logger.warn("There is an error with the generated page, cannot find image button with id '"+id+"'");
return;
}
img.miwt_active=$(id+"_unselected");
img.miwt_activeselected=$(id+"_selected");
img.miwt_activepressed=$(id+"_pressed");
img.miwt_activerollover=$(id+"_rollover");
img.miwt_inactive=$(id+"_unselected_inactive");
img.miwt_inactiveselected=$(id+"_selected_inactive");
img.miwt_inactivepressed=$(id+"_pressed_inactive");
img.miwt_inactiverollover=$(id+"_rollover_inactive");
img.miwt_valueid=valueid;
img.miwt_valuenode=$(valueid);
img.miwt_selectedvalue=selectedvalue;
if (img.miwt_code==null)
img.miwt_code='null';
img.miwt_isSelected=(img.miwt_valuenode!=null) && (img.miwt_valuenode.value==selectedvalue);
img.miwt_watch = node.className.match(/miwt_watch/);
var isActive = (img.miwt_active && img.src == img.miwt_active.src) || (img.miwt_activeselected && img.src == img.miwt_activeselected.src);
if (buttonGroupId!=null)
{
img.miwt_buttonGroup = buttonGroupId;
var group = miwt.imagebutton.groups[buttonGroupId];
if (!group)
{
group = new Array();
miwt.imagebutton.groups[buttonGroupId] = group;
}
else
{

var bid = null;
var newa = null;
for(var i = 0; bid = group[i]; i++) {
var bobj = $(bid);
if (!bobj) {
if (!newa) {
newa = new Array();
for(var j = 0; j < i; j++)
newa.push(group[j]);
}
}
else if (newa) {
newa.push(bobj);
}
}
if (newa) {
group = newa;
miwt.imagebutton.groups[buttonGroupId] = group;
}
}
group.push(node.id);
}
miwt.observe(img, "mouseover", miwt.imagebutton.imageButtonMouseOver, false);
miwt.observe(img, "mouseout", miwt.imagebutton.imageButtonMouseOut, false);
miwt.observe(img, "mousedown", miwt.imagebutton.imageButtonMouseDown, false);
miwt.observe(img, "mouseup", miwt.imagebutton.imageButtonMouseUp, false);
miwt.observe(img, "click", miwt.imagebutton.imageButtonMouseClick, false);
miwt.imagebutton.imageButtonSetState(img, isActive, img.miwt_isSelected, "normal");
});
miwt.imagebutton.imageButtonActivate = function (id)
{
var img=$(id);
if (img==null)
{

return;
}
miwt.imagebutton.imageButtonSetState(img, true, null, img.miwt_state);
}
miwt.imagebutton.imageButtonDeactivate = function (id)
{
var img=$(id);
if (img==null)
{

return;
}
miwt.imagebutton.imageButtonSetState(img, false, null, img.miwt_state);
}
} 
if(typeof miwtfield == 'undefined') {
miwtfield = {};
miwt.FieldAction = function(event)
{
var element = Event.element(event);
var keycode = event.keyCode || event.which;
if (keycode==10 || keycode==13)
miwt.ButtonClicked(event);
}
miwt.EditTextClicked = function (textId, inputId)
{
var textElement=$(textId);
var inputElement=$(inputId);
textElement.style.display="none";
inputElement.style.display="inline";
}
miwt.FieldKeyDownHandler = function (evt)
{
miwt.rescheduleTimer();
return true;
}
miwt.FieldKeyUpHandler = function (evt)
{
var field=Event.element(evt);
if (field.maxlength 
&& field.maxlength > 0 
&& field.value.length >= field.maxlength) {
field.value = field.value.substring(0, field.maxlength);
}
return true;
}
miwt.FieldFocusHandler = function (evt)
{
var field=Event.element(evt);
miwt.lastFocusId = field.id;
if (field.hinttexton) {
field.value = '';
field.hinttexton = false;
field.style.color = null;
}
return true;
}
miwt.FieldBlurHandler = function (evt)
{
var field = (evt.tagName == 'input') ? evt : Event.element(evt);
miwt.lastFocusId = null;
if (field.hinttext && field.value == '') {
field.value = field.hinttext;
field.hinttexton = true;
field.style.color = 'gray';
}
return true;
}
miwt.ClickToEditHandler = function (event) {
var text = Event.element(event).id;
miwt.EditTextClicked(text.id, text.id.replace("TextID", "InputID"));
}
miwt.prv_FieldSubmitHandler = function (form) {
var node = $(this+'');
if (node.hinttexton) {
node.value = '';
node.hinttexton = false;
node.style.color = null;
}
window.setTimeout("miwt.FieldBlurHandler($('"+node.id+"'))", 10, "JavaScript");
return true;
}
miwt.prv_FCKSubmitHandler = function (form) {
var node = $(this+'');
try {
var FCK = FCKeditorAPI.GetInstance(node.name);
if (FCK != null)
node.value = FCK.GetXHTML();
return true;
} catch(e) { 



}	
return true;
}
miwt.AddSetupHandler([ 'a', 'input', 'textarea' ], function (tag, node) {
if (tag=='a' && /\bclick_to_edit_field_text\b/.exec(node.className))
miwt.observe(node, 'click', miwt.ClickToEditHandler);
if ((tag=='input' && node.type=='text') || tag=='textarea')
{
miwt.observe(node, "keydown", miwt.FieldKeyDownHandler, true);
miwt.observe(node, "focus", miwt.FieldFocusHandler, true);
miwt.observe(node, "blur", miwt.FieldBlurHandler, true);
var hint = $(node.id+"_hint");
if (hint) {
var hinttext = hint.firstChild.data;
node.hinttext = hinttext;
if (node.value == '') {
node.value = hinttext;
node.hinttexton = true;
node.style.color = 'gray';
}
node.form.RegisterOnSubmitHandler(node, miwt.prv_FieldSubmitHandler.bind(node.id));
}
var maxlength = $(node.id+"_maxlength");
if (maxlength) {
var i = parseInt(maxlength.firstChild.data);
if (!isNaN(i)) {
node.maxlength = i;
miwt.observe(node, "keyup", miwt.FieldKeyUpHandler, true);
}
}
if (FCKeditorHelper != null 
&& /\bfckeditor\b/.exec(node.className)
&& !node.setup_fck)
{
node.setup_fck = true;
FCKeditorHelper.fckactivate(node);
node.form.RegisterOnSubmitHandler(node, miwt.prv_FCKSubmitHandler.bind(node.id));
}
}
});
} 
if(typeof miwtsearchablecombo == 'undefined') {
var miwtsearchablecombo = {};
miwt.SearchableComboButtonClick = function (event) { 
Event.stop(event); 
Event.element(event).combo.doSearch(); 
}
miwt.SetupSearchableCombo = function (tag, element)
{
if (tag != 'select' || !/\bmiwt_searchable\b/.exec(element.className))
return;
try
{
var field = $(element.id+"_field");
field.combo = element;
Object.extend(element, miwt.SearchBox.prototype);
element.initialize(field);
miwt.observe(element, 'keydown', miwt.SearchableComboKeydownHandler);
var button = $(element.id+"_search");
if (button && !/\bmiwt_submit\b/.exec(button.className))
{

button.combo = element;
miwt.observe(button, 'click', miwt.SearchableComboButtonClick);
if (field.value && element.mode == element.MODE_FILTER)
element.doSearch();
}
}
catch (exception) { log4js.logger.error("Setup searchable combo "+element.id, exception); }
}
miwt.AddSetupHandler([ 'select' ], miwt.SetupSearchableCombo);
miwt.SearchableComboKeydownHandler = function (event) {
if (event.keyCode == 13) { 
Event.stop(event); 
Event.element(event).combo.doSearch();
}
}
miwt.SearchBox = function()
{
}
miwt.SearchBox.prototype = 
{
MODE_ITERATE: 0,
MODE_FILTER: 1,
initialize: function (field)
{
this.field = field;
this.selectOptions = new Array();
var opt;
for(var i = 0; opt = this.options[i]; i++)
this.selectOptions[i] = opt;
this.mode = this.MODE_ITERATE;
var me = this;
Element.classNames(this).each(function (className) {
if (/.*_flags_(\w+)/.exec(className))
{
me.flags = RegExp.$1.toLowerCase();
}
else if (/.*_mode_filter/.test(className))
{
me.mode = me.MODE_FILTER;
}
});

},
addAvailableOption: function (val, txt)
{
var opt = new Option();
opt.value = val;
opt.text = txt;
this.selectOptions.push(opt);
},
getAvailableOptions: function ()
{
return this.selectOptions;
},
setVisibleOptions: function (visibleOptions)
{
this.options.length = 0;
var opt;
for(var i = 0; opt = visibleOptions[i]; i++)
this.options[i] = opt;
},
setSelectedIndex: function (index)
{

if(index >= 0 && index < this.options.length)
this.options[index].selected = true;
},
doSearch: function()
{
if (this.mode == this.MODE_ITERATE)
this.searchSelectIterative(false);
else
this.searchSelectFilter(false);
},
searchSelectFilter: function (onlyIfNoMatch)
{
var searchString = this.field.value;
var searchTextLength = searchString.length;
var allOptions = this.getAvailableOptions();
var selectedIndex=0;
var matches = new Array();
var matcher = new RegExp(searchString, this.flags);
for (j=0; j < allOptions.length; j++)
{
var optionText = allOptions[j].text;
if(searchTextLength==0 || matcher.test(optionText))
{
matches[matches.length] = allOptions[j];
if (allOptions[j].selected)
{
selectedIndex=matches.length-1;
}
}
}
this.setVisibleOptions(matches);
this.setSelectedIndex(selectedIndex);
},
searchSelectIterative: function (onlyIfNoMatch)
{
var searchString = this.field.value;
var searchTextLength = searchString.length;
if(searchTextLength == 0)
return;
var start = this.selectedIndex + 1;
if(start >= this.options.length)
start = 0;
var end = this.selectedIndex - 1;
if(end <= 0)
end = this.options.length;
var matcher = new RegExp(searchString, this.flags);
if (onlyIfNoMatch && matcher.test(this.options[this.selectedIndex].text))
{
return;
}
var forEnd = (start < end ? end : this.options.length);
for (j=start; j < forEnd; j++)
{
var optionText = this.options[j].text;
if(matcher.test(optionText))
{
this.selectedIndex = j;
return;
}
}
if(start > end)
{
for (j=0; j <= end; j++)
{
var optionText = this.options[j].text;
if(matcher.test(optionText))
{
this.selectedIndex = j;
return;
}
}
}
}
}
} 
miwt.FontChooser = Class.create();
miwt.FontChooser.prototype =
{
initialize: function (nameselect)
{
this.name = nameselect;
this.size = $(this.name.id.replace("_name", "_size"));
this.bold = $(this.name.id.replace("_name", "_bold"));
this.italic = $(this.name.id.replace("_name", "_italic"));
this.strike = $(this.name.id.replace("_name", "_strike"));
this.underline = $(this.name.id.replace("_name", "_underline"));
this.sample = $(this.name.id.replace("_name", "_fontsample"));
var listener = this.updatesample.bindAsListener(this);
this.name.observer = new Form.Element.EventObserver(this.name, listener);
this.size.observer = new Form.Element.EventObserver(this.size, listener);
this.bold.observer = new Form.Element.EventObserver(this.bold, listener);
this.italic.observer = new Form.Element.EventObserver(this.italic, listener);
this.strike.observer = new Form.Element.EventObserver(this.strike, listener);
this.underline.observer = new Form.Element.EventObserver(this.underline, listener);
},
drawtext: function (text, family, size, isBold, isItalic, isStrike, isUnderline) 
{
var str="<div style=\"font-size: ";
str += size + "pt; ";
str += "font-family: " + family + "; \">";
if(isBold=="true") str += "<b>";
if(isItalic=="true") str += "<i>";
if(isStrike=="true") str += "<strike>";
if(isUnderline=="true") str += "<u>";
str += text;
if(isUnderline=="true") str += "</u>";
if(isStrike=="true") str += "</strike>";
if(isItalic=="true") str += "</i>";
if(isBold=="true") str += "</b>";
str += "</div>";
return str;
},
updatesample: function () 
{
if (!this.sample) return;
this.sample.innerHTML=this.drawtext('The quick brown fox jumped over the lazy dog',
this.name.options[this.name.selectedIndex].text,
this.size.options[this.size.selectedIndex].value,
this.bold.checked, 
this.italic.checked, 
this.strike.checked, 
this.underline.checked
);
}
}
miwt.AddSetupHandler([ 'select' ], function (tag, node) {
if (tag=='select' && /\bmiwt_fontchooser\b/.exec(node.className))
node.font_chooser = new miwt.FontChooser(node);
});
if(typeof miwt.menu == 'undefined') {
miwt.menu = new Object();
miwt.menu.ActiveMenuListPush = function (menu)
{
var last=miwt.menu.ActiveMenuListPeek();
if (last==null)
window.nextactivemenu=menu;
else
last.nextactivemenu=menu;
menu.nextactivemenu=null;
}
miwt.menu.ActiveMenuListPop = function ()
{
var menu=window.nextactivemenu;
if (menu==null)
{
return null;
}
var prev=null;
while (menu.nextactivemenu!=null)
{
prev=menu;
menu=menu.nextactivemenu;
}
if (prev==null)
window.nextactivemenu=null;
else
prev.nextactivemenu=null;
return menu;
}
miwt.menu.ActiveMenuListPeek = function ()
{
var menu=window.nextactivemenu;
if (menu==null)
return null;
while (menu.nextactivemenu!=null)
{
menu=menu.nextactivemenu;
}
return menu;
}
miwt.menu.SetMenuItemActive = function (element)
{
var classNames = Element.classNames(element);
if (classNames.include("menu_item"))
{
Element.addClassName(element, "menu_item_active");
}
else if (classNames.include("menu_bar_item"))
{
Element.addClassName(element, "menu_bar_item_active");
}
else if (classNames.include("menu_bar_image_item"))
{
Element.addClassName(element, "menu_bar_image_item_active");
}
else if (classNames.include("menu_item_submenu"))
{
Element.addClassName(element, "menu_item_submenu_active");
}
}
miwt.menu.SetMenuItemInactive = function (element)
{
var classNames = Element.classNames(element);
if (classNames.include("menu_item_active"))
{
Element.removeClassName(element, "menu_item_active");
}
else if (classNames.include("menu_bar_item_active"))
{
Element.removeClassName(element, "menu_bar_item_active");
}
else if (classNames.include("menu_bar_image_item_active"))
{
Element.removeClassName(element, "menu_bar_image_item_active");
}
else if (classNames.include("menu_item_submenu_active"))
{
Element.removeClassName(element, "menu_item_submenu_active");
}
}
miwt.menu.GetMenuNode = function (node)
{
while (node!=null && (node.nodeType==3 || node.tagName == null || node.tagName.toLowerCase()!="a"))
{
node=node.parentNode;
}
return node;
}
miwt.menu.SubMenuHit = function (evt)
{
var target=miwt.menu.GetMenuNode(Event.element(evt));
var popupmenu=$(target.submenuid);


if(popupmenu.style.visibility == 'visible') 
{
miwt.menu.ClosePopupMenu(null); 
return; 
}
else
{


miwt.menu.ClosePopupMenu(null); 
}
target.blur();
miwt.menu.SetMenuItemActive(target);
var popupmenu=$(target.submenuid);
var x, y;
var pos = Position.cumulativeOffset(target);
if (Element.hasClassName(target, "floating_menu_item"))
{
y=pos[1]+target.offsetHeight;
x=Event.pointerX(evt);
}
else if (target.parentmenuid==null)
{
y=pos[1]+target.offsetHeight;
x=pos[0];
}
else
{
y=pos[1];
x=pos[0]+target.offsetWidth;
}
popupmenu.style.top=y+"px";
popupmenu.style.left=x+"px";
popupmenu.style.visibility='visible';
miwt.menu.ActiveMenuListPush(popupmenu);
miwt.observe(window, 'click', miwt.menu.ClosePopupMenu, true);
}
miwt.menu.SubMenuMouseOver = function (evt)
{
var target=miwt.menu.GetMenuNode(Event.element(evt));
if (
window.nextactivemenu!=null && 
window.nextactivemenu.menufamily!=null && 
window.nextactivemenu.menufamily==target.menufamily
)
{
miwt.menu.ClosePopupMenu(evt);
miwt.menu.SubMenuHit(evt);
}
}
miwt.menu.MenuItemHit = function (evt)
{
var target=miwt.menu.GetMenuNode(Event.element(evt));
target.blur();
miwt.menu.ClosePopupMenu(null); 
var form = Event.findElement(evt, 'form');
form.elements['miwt_button_activated'].value=target.name || target.id;

form.MIWTSubmit();
}
miwt.menu.SetupMenu = function (menufamily, menuitemid, submenuid)
{
var menuitem=$(menuitemid);
miwt.observe(menuitem, "click", miwt.menu.SubMenuHit, false);
miwt.observe(menuitem, "mouseover", miwt.menu.SubMenuMouseOver, false);
menuitem.submenuid=submenuid;
menuitem.menufamily=menufamily;
var submenu=$(submenuid);
submenu.menuitemid=menuitemid;
submenu.menufamily=menufamily;
}
miwt.menu.SetupSubMenu = function (menufamily, menuitemid, submenuid, parentmenuid)
{
var menuitem=$(menuitemid);
miwt.observe(menuitem, "click", miwt.menu.SubMenuHit, false);
miwt.observe(menuitem, "mouseover", miwt.menu.SubMenuMouseOver, false);
menuitem.submenuid=submenuid;
menuitem.parentmenuid=parentmenuid;
menuitem.menufamily=menufamily;
var submenu=$(submenuid);
submenu.menuitemid=menuitemid;
submenu.menufamily=menufamily;
}
miwt.menu.SetupMenuItem = function (menufamily, menuitemid, parentmenuid)
{
var menuitem=$(menuitemid);
miwt.observe(menuitem, "click", miwt.menu.MenuItemHit, false);
miwt.observe(menuitem, "mouseover", miwt.menu.ClosePopupMenu, false);
menuitem.parentmenuid=parentmenuid;
menuitem.menufamily=menufamily;
}
miwt.menu.ClosePopupMenu = function (evt)
{
var target=null;
if (evt!=null)
{
target=miwt.menu.GetMenuNode(Event.element(evt));
}
var classNames = Element.classNames(target);
if (evt!=null && target!=null && target.className &&
(
classNames.include("menu_item") || 
classNames.include("menu_item_active") || 
classNames.include("menu_bar_item") || 
classNames.include("menu_bar_item_active") || 
classNames.include("menu_bar_image_item") || 
classNames.include("menu_bar_image_item_active") || 
classNames.include("menu_item_submenu") || 
classNames.include("menu_item_submenu_active")
)
)
{
var menu=miwt.menu.ActiveMenuListPop();
while (menu!=null && menu.id!=target.parentmenuid)
{
menu.style.visibility="hidden";
if (menu.menuitemid!=null)
{
var menuitem=$(menu.menuitemid);
if (menuitem!=null)
{
miwt.menu.SetMenuItemInactive(menuitem);
}
}
menu=miwt.menu.ActiveMenuListPop();
}

if (menu!=null && menu.id==target.parentmenuid)
{
miwt.menu.ActiveMenuListPush(menu);
}
}
else
{
var menu=miwt.menu.ActiveMenuListPop();
while (menu!=null)
{
menu.style.visibility="hidden";
if (menu.menuitemid!=null)
{
var menuitem=$(menu.menuitemid);
if (menuitem!=null)
{
miwt.menu.SetMenuItemInactive(menuitem);
}
}
menu=miwt.menu.ActiveMenuListPop();
}
miwt.stopObserving(window, 'click', miwt.menu.ClosePopupMenu, true);
if(evt != null)
{


Event.stop(evt);
}
}
}
miwt.AddSetupHandler([ 'a' ], function (tag, node)
{
if (tag != 'a')
return;
var match;
if (match = /floating_menu_item_(Popup\S+)/ .exec(node.className))
{
miwt.menu.SetupMenu(node.id, node.id, match[1]);
}
else if (match = /menu_bar_item_(Popup\S+)/ .exec(node.className))
{
miwt.menu.SetupMenu(node.parentNode.id, node.id, match[1]);
}
else if (match = /menu_item_submenu_(Popup\S+)/ .exec(node.className))
{
var menufamily;
var cn = node.parentNode.parentNode.childNodes;
var node2;
for(var i = 0; node2 = cn[i]; i++) {
if (!node2.className)
continue;
if (node2.tagName && (/\bmenu_bar\b/.exec(node2.className) || /\bfloating_menu_item\b/.exec(node2.className)))
menufamily = node2.id;
};
miwt.menu.SetupSubMenu(menufamily, node.id, match[1], node.parentNode.id);
}
else if (/\bmenu_item\b/.exec(node.className))
{
var menufamily;
var cn = node.parentNode.parentNode.childNodes;
var node2;
for(var i = 0; node2 = cn[i]; i++) {
if (!node2.className)
continue;
if (node2.tagName && (/\bmenu_bar\b/.exec(node2.className) || /\bfloating_menu_item\b/.exec(node2.className)))
menufamily = node2.id;
};
miwt.menu.SetupMenuItem(menufamily, node.id, node.parentNode.id);
}
});
}
if(typeof miwtselectall == 'undefined') {
var miwtselectall = {};
miwt.setupSelectAllCheckbox = function (checkbox)
{
var selectall = $(checkbox.name+"_all");
if (!selectall)
return;
if (!selectall.checkboxes)
{
selectall.checkboxes = new Array();
miwt.observe(selectall, "click", miwt.selectAllChanged, false);
}	
checkbox.selectall = selectall;
selectall.checkboxes.push(checkbox);
miwt.observe(checkbox, "click", miwt.selectAllChildChanged, false);
}
miwt.selectAllChanged = function (event)
{
var selectall = Event.element(event);
var box;
for(var i = 0; box = selectall.checkboxes[i]; i++) {
box.checked = selectall.checked;
};
}
miwt.selectAllChildChanged = function (event)
{
var box = Event.element(event);
if (!box.checked)
box.selectall.checked=false;
}
miwt.AddSetupHandler([ 'input' ], function (tag, node)
{

if (tag=='input' && node.type == 'checkbox' && /\bmiwt_row_select\b/.exec(node.className))
miwt.setupSelectAllCheckbox(node);
});
} 
miwt.ListBuilder = Class.create();
miwt.ListBuilder.prototype =
{
initialize: function (element_base_name)
{
this.sourceList=$(element_base_name+"_source");
this.selectionList=$(element_base_name+"_selection");
this.addButton=$(element_base_name+"_add");
this.removeButton=$(element_base_name+"_remove");
this.upButton=$(element_base_name+"_up");
this.downButton=$(element_base_name+"_down");
if (this.addButton)
miwt.observe(this.addButton, 'click', this.addButtonClicked.bindAsEventListener(this));
if (this.removeButton)
miwt.observe(this.removeButton, 'click', this.removeButtonClicked.bindAsEventListener(this));
if (this.upButton)
miwt.observe(this.upButton, 'click', this.upButtonClicked.bindAsEventListener(this));
if (this.downButton)
miwt.observe(this.downButton, 'click', this.downButtonClicked.bindAsEventListener(this));
var me = this;
var form = Event.findElement({ target: this.sourceList}, 'form');
form.RegisterOnSubmitHandler(this.selectionList, function (form) { me.selectAll(me.selectionList); return true;});
},
addButtonClicked: function(event)
{
this.copy(this.sourceList, this.selectionList);
Event.stop(event);
},
removeButtonClicked: function(event)
{
this.erase(this.selectionList);
Event.stop(event);
},
upButtonClicked: function(event)
{
this.moveUp(this.selectionList);
Event.stop(event);
},
downButtonClicked: function(event)
{
this.moveDown(this.selectionList);
Event.stop(event);
},
hideshow: function (control,elem)
{
if(control.options[0].selected)
elem.disabled=false;
else
elem.disabled=true;
},
deleteOption: function (object,index)
{
object.options[index] = null;
},
addOption: function (object,text,value)
{
var defaultSelected = true;
var selected = true;

var optionName = new Option(text, value);
object.options[object.length] = optionName;
},
copy: function (fromObject,toObject)
{
for (var i=0, l=fromObject.options.length;i<l;i++)
{
if (fromObject.options[i].selected)
{
fromObject.options[i].selected=false;
this.addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
}
}
if (navigator.appName == 'Netscape')
window.resizeTo(outerWidth,outerHeight);
},
move: function (fromObject,toObject)
{
for (var i=0, l=fromObject.options.length;i<l;i++)
{
if (fromObject.options[i].selected)
{
this.addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
}
}
for (var i=fromObject.options.length-1;i>-1;i--)
{
if (fromObject.options[i].selected)
this.deleteOption(fromObject,i);
}
if (navigator.appName == 'Netscape')
window.resizeTo(outerWidth,outerHeight);
},
erase: function (box)
{
var i;
for (i = 0; i < box.options.length; i++)
{
if(box.options[i].selected ) {
this.deleteOption(box,i);
i--;
}
}
},
moveUp: function (select)
{
if (select.selectedIndex > 0)
{
var s = select.selectedIndex;
var option = new Object();
option.text=select.options[s].text;
option.value=select.options[s].value;
option.defaultSelected=select.options[s].defaultSelected;
option.selected=select.options[s].selected;
select.options[s].text = select.options[s - 1].text;
select.options[s].value = select.options[s - 1].value;
select.options[s].defaultSelected = select.options[s -1].defaultSelected;
select.options[s].selected = select.options[s - 1].selected;
select.options[s-1].text = option.text;
select.options[s-1].value = option.value;

select.options[s-1].selected = option.selected;
}
},
moveDown: function (select)
{
if (select.selectedIndex < select.options.length - 1)
{
var s = select.selectedIndex;
var option = new Object();
option.text=select.options[s].text;
option.value=select.options[s].value;
option.defaultSelected=select.options[s].defaultSelected;
option.selected=select.options[s].selected;
select.options[s].text = select.options[s + 1].text;
select.options[s].value = select.options[s + 1].value;
select.options[s].defaultSelected = select.options[s + 1].defaultSelected;
select.options[s].selected = select.options[s + 1].selected;
select.options[s + 1].text = option.text;
select.options[s + 1].value = option.value;

select.options[s + 1].selected = option.selected;
}
},
selectAll: function (box)
{
for(var i=0; i<box.options.length; i++)
{
box.options[i].selected = true;
}
},
sortOptions: function (box) {
var temp_opts = new Array();
var temp = new Object();
for(var i=0; i<box.options.length; i++) {
temp_opts[i] = box.options[i];
}
for(var x=0; x<temp_opts.length-1; x++) {
for(var y=(x+1); y<temp_opts.length; y++) {
if(temp_opts[x].text > temp_opts[y].text) {
temp = temp_opts[x].text;
temp_opts[x].text = temp_opts[y].text;
temp_opts[y].text = temp;
temp = temp_opts[x].value;
temp_opts[x].value = temp_opts[y].value;
temp_opts[y].value = temp;
}
}
}
for(var i=0; i<box.options.length; i++) {
box.options[i].value = temp_opts[i].value;
box.options[i].text = temp_opts[i].text;
}
},
sortAndRemoveDuplicates: function (box) {
this.sortOptions(box);
var prevOption = null;
var currOption = null;
for(var i=1;i < box.options.length;i++) {
prevOption = box.options[i-1];
currOption = box.options[i];
if(prevOption.text == currOption.text) {
box.options[i] = null;
i--;
}
}
}
}
miwt.AddSetupHandler([ 'table' ], function (tag, node)
{
if (tag=='table' && /\bmiwt_listbuilder\b/.exec(node.className))
node.list_builder = new miwt.ListBuilder(node.id);
});
if(typeof miwt.getWindowWidth == 'undefined') {
miwt.getWindowWidth = function ()
{

if (document.documentElement 
&& document.documentElement.clientWidth
&& document.documentElement.clientWidth > 0)
{
return document.documentElement.clientWidth;
}
else if (document.body 
&& document.body.clientWidth
&& document.body.clientWidth > 0)
{
return document.body.clientWidth;
}
else if (window.innerWidth)
{
return window.innerWidth;
}
else
{
return null;
}
}
miwt.getWindowHeight = function ()
{

if (window.innerHeight
&& window.innerHeight > 0)
{
return window.innerHeight;
}
else if (document.documentElement 
&& document.documentElement.clientHeight
&& document.documentElement.clientHeight > 0)
{
return document.documentElement.clientHeight;
}
else if (document.body 
&& document.body.clientHeight
&& document.body.clientHeight > 0)
{
return document.body.clientHeight;
}
else
{
return null;
}
}
miwt.SaveDeviceSize = function(form)
{
form.elements["devicewidth"].value= miwt.getWindowWidth();
form.elements["deviceheight"].value=miwt.getWindowHeight();
return true;
}
} 
if(typeof miwtajax == 'undefined') {
var miwtajax=new Object();
miwtajax.READY_STATE_UNINITIALIZED = 0;
miwtajax.READY_STATE_LOADING = 1;
miwtajax.READY_STATE_LOADED = 2;
miwtajax.READY_STATE_INTERACTIVE = 3;
miwtajax.READY_STATE_COMPLETE = 4;
miwtajax.serial = 1;
miwtajax.ajax_failed_update_callback = new Array();
miwtajax.ajax_request_complete_callback = new Array();
miwtajax.Progress=function()
{

this.dialog = document.createElement("div");
this.dialog.innerHTML = '<div class="miwt_ajax_progress" style="z-index: 10001; border: solid black; position: absolute; top: 100px; left: 100px; padding: 10px; width: 200px; vertical-align: middle; text-align: center; background-color: rgb(200,200,200)">'
+window.loadingStr
+'<br /><br />'
+'<span id="miwt_ajax_progress_0" style="border-top: thin solid black; border-bottom: thin solid black; border-left: thin solid black;  background-color: white">&#x00a0;&#x00a0;&#x00a0;&#x00a0;&#x00a0;</span>'
+'<span id="miwt_ajax_progress_1" style="border-top: thin solid black; border-bottom: thin solid black; background-color: white">&#x00a0;&#x00a0;&#x00a0;&#x00a0;&#x00a0;</span>'
+'<span id="miwt_ajax_progress_2" style="border-top: thin solid black; border-bottom: thin solid black; background-color: white">&#x00a0;&#x00a0;&#x00a0;&#x00a0;&#x00a0;</span>'
+'<span id="miwt_ajax_progress_3" style="border-top: thin solid black; border-bottom: thin solid black; background-color: white">&#x00a0;&#x00a0;&#x00a0;&#x00a0;&#x00a0;</span>'
+'<span id="miwt_ajax_progress_4" style="border-top: thin solid black; border-bottom: thin solid black; border-right: thin solid black; background-color: white">&#x00a0;&#x00a0;&#x00a0;&#x00a0;&#x00a0;</span>'
+'</div>';
this.dialog.firstChild.style.visibility = 'hidden';
document.getElementsByTagName("body").item(0).appendChild(this.dialog);
this.useCount = 0;
}
miwtajax.Progress.prototype=
{
start:function()
{
this.useCount++;
if (this.useCount > 1)
return; 
var progress = this;
this.timeout_callback = function() {
progress.callback.call(progress);
}
for(var i = miwtajax.READY_STATE_UNINITIALIZED; i <= miwtajax.READY_STATE_COMPLETE; i++)
{
var progressNode = $("miwt_ajax_progress_"+i);
if (progressNode != null)
progressNode.style.backgroundColor = 'white';
}
if (this.indeterminate)
this.mark = miwtajax.READY_STATE_UNINITIALIZED;
this.timeout=setTimeout(this.timeout_callback, 500, "JavaScript");
},
callback:function()
{
if (document.all)
this.dialog.firstChild.style.position = 'absolute';
this.dialog.firstChild.style.visibility = 'visible';
var w=miwt.getWindowWidth();
var h=miwt.getWindowHeight();
var scrollTop = 0;
var scrollLeft = 0;
if (document.documentElement)
scrollTop = document.documentElement.scrollTop;
else if (document.body)
scrollTop = document.body.scrollTop;
if (document.documentElement)
scrollLeft = document.documentElement.scrollLeft;
else if (document.body)
scrollLeft = document.body.scrollLeft;
this.dialog.firstChild.style.top=(scrollTop+((parseInt(h)/2)-17))+"px";
this.dialog.firstChild.style.left=(scrollLeft+((parseInt(w)/2)-100))+"px";
if (this.indeterminate) {
this.mark++;
if (this.mark > miwtajax.READY_STATE_COMPLETE)
this.mark = miwtajax.READY_STATE_UNINITIALIZED;
for(var i = miwtajax.READY_STATE_UNINITIALIZED; i <= miwtajax.READY_STATE_COMPLETE; i++)
{
var progressNode = $("miwt_ajax_progress_"+i);
if (progressNode != null) {
if (this.mark == i)
progressNode.style.backgroundColor = 'lightsteelblue';
else
progressNode.style.backgroundColor = 'white';
}
}
}
this.timeout=setTimeout(this.timeout_callback, 300, "JavaScript");
},
stop:function()
{
if (this.useCount <= 0)
return; 
this.useCount--;
if (this.useCount > 0)
return; 
if (this.timeout!=null)
{
window.clearTimeout(this.timeout);
this.timeout = null;
this.timeout_callback = null;
}
this.dialog.firstChild.style.visibility = 'hidden';
}
}
miwtajax.showFormPostWait = function() {
if (miwt.ajaxprogress == null)
miwt.ajaxprogress = new miwtajax.Progress();
miwt.ajaxprogress.indeterminate = true;
miwt.ajaxprogress.start();
}
miwtajax.InputProcessor=function(form, ajax_request_complete_callback, ajax_failed_update_callback)
{
this.req = null;

if (form.encoding && form.encoding.match(/multipart/))
{
var element;
for(var i = 0; element = form.elements[i]; i++) {
if (element.type=='file' && element.value != null && element.value.length > 0)
return;
}
}
this.form = form;
this.ajax_request_complete_callback = ajax_request_complete_callback;
this.ajax_failed_update_callback = ajax_failed_update_callback;
this.failsafe = false;
if (miwt.ajaxprogress == null)
miwt.ajaxprogress = new miwtajax.Progress();
this.initXMLHttpRequest();
if (this.req == null) 
{

return;
}
miwtajax.serial++;
var params = Form.serialize(this.form) + "&ajax="+miwtajax.serial+"&formname="+this.form.id;

this.form.elements['miwt_button_activated'].value='';
this.form.elements['miwt_drag_source'].value='';
this.form.elements['miwt_drop_target'].value='';

var dotimeout = deploymentcontext.doAjaxTimeout;
if (dotimeout && !miwtajax.debug)
{
var ajax = this;
this.timeout_callback = function() {
ajax.doFailsafe.call(ajax);
}
this.timeout=setTimeout(this.timeout_callback, 15000, "JavaScript");
}
miwt.ajaxprogress.start();


this.req.send(params);
}
miwtajax.InputProcessor.prototype={ 
initXMLHttpRequest:function()
{
if (window.ajaxUri == null) 
return;
if (window.XMLHttpRequest)
{
this.req = new XMLHttpRequest();
}
else if (window.ActiveXObject)
{
this.req = new ActiveXObject("Microsoft.XMLHTTP");
}
if (this.req)
{
var processor = this;
this.req.onreadystatechange = function() {
processor.handleReadyStateForComponentUpdate.call(processor);
}
this.req.open("POST", window.ajaxUri, true);
this.req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
this.req.setRequestHeader("X-MIWT-Ajax", "true");
}
},
decomposeParts:function(node)
{
var content="";
var partNodesFound=false;
var partnode;
for(var j =0; partnode = node.childNodes[j]; j++)
{
if (partnode.nodeName=='part')
{
content += partnode.firstChild.nodeValue;
partNodesFound=true;
}
}
if (!partNodesFound)
{
content = node.firstChild.nodeValue;
}
return content;
},
handleReadyStateForComponentUpdate:function()
{
for(var i = miwtajax.READY_STATE_UNINITIALIZED; i <= this.req.readyState; i++)
{
var progressNode = $("miwt_ajax_progress_"+i);
if (progressNode != null && progressNode.style.backgroundColor != 'lightsteelblue')
progressNode.style.backgroundColor = 'lightsteelblue';
}
if (this.failsafe) 
return;
if (this.req.readyState==miwtajax.READY_STATE_COMPLETE)
{
delete this.req.onreadystatechange;
this.req.onreadystatechange = Prototype.emptyFunction; 
if (this.timeout) {
window.clearTimeout(this.timeout);
this.timeout = null;
}
var failsafe = false;
processXML:
if (this.req.status==301 || this.req.status==302)
{


miwt.ajaxprogress.stop();
this.req=null;
window.location.href=this.req.getResponseHeader("Location");
return;
}
else if (this.req.status!=200)
{

failsafe = true;
}
else if (/html/.test(this.req.getResponseHeader("Content-Type")))
{


failsafe = true;
}
else
{

var actionNodes = this.req.responseXML.getElementsByTagName("action");
var action = "reload";
if (actionNodes.length > 0)
{
action = actionNodes.item(0).firstChild.nodeValue;
}
else
{
log4js.logger.error("No action specified");
}
if (this.req.responseXML.firstChild == null
|| this.req.responseXML.firstChild.nodeName=='html' || this.req.responseXML.firstChild.nodeName=='HTML')
{

if (miwtajax.debug)
{
if (this.req.responseXML.firstChild != null)
{

var stack = new Array();
stack.push(this.req.responseXML.firstChild);
while (stack.length > 0)
{
var node = stack.pop();
if (node.nodeType == 3)
{
log4js.logger.error("Parse error: "+node.nodeValue);
}
else
{
for(var i =0; i < node.childNodes.length; i++)
{
stack.push(node.childNodes.item(i));
}
}
}
}
break processXML;
}
log4js.logger.error("Parse error");
failsafe = true;
}
else if (action=='reload')
{

failsafe = true;
}
else if (action=='nochange')
{
break processXML;
}
else if (action=='update')
{

var contentNodes = this.req.responseXML.getElementsByTagName("component");
var lastFocusId = miwt.lastFocusId;
var updatedNodes = new Array();
try
{
for(var i=0; i<contentNodes.length; i++)
{
var updatenode = contentNodes.item(i);
var refid = updatenode.attributes.getNamedItem("ref").nodeValue;
var docnode = $(refid);
if (docnode!=null)
{
var newContent=this.decomposeParts(updatenode);
var tmpnode=document.createElement("div");
if (document.all && docnode.tagName!=null && docnode.tagName.toUpperCase() == 'TD' && !newContent.match(/^</))
tmpnode.innerHTML = "<span>"+newContent+"</span>";
else
tmpnode.innerHTML = newContent;
var newnode = tmpnode.firstChild;
if (tmpnode.childNodes.length==1 
&& newnode.nodeName == docnode.nodeName 
&& newnode.getAttribute("id") == docnode.getAttribute("id"))
{


try{__i2rd_fixIELeak(docnode, false);} catch(e) { 
log4js.logger.error("(1)Unable to cleanup JScript references for " + refid, e); 
}
docnode.parentNode.replaceChild(newnode, docnode);
updatedNodes.push(newnode);
try{__i2rd_domupdate_fire(docnode);}catch(e){}
}
else
{


try {
__i2rd_fixIELeak(docnode, true);
} catch(e) { 
log4js.logger.error("(1)Unable to cleanup JScript references for " + refid, e); 
}

while (docnode.firstChild!=null)
docnode.removeChild(docnode.firstChild);

while (tmpnode.firstChild!=null)
{
var node = tmpnode.firstChild;
tmpnode.removeChild(node);
docnode.appendChild(node);
}
updatedNodes.push(docnode);
try{__i2rd_domupdate_fire(docnode);}catch(e){}
}
}
else
{



}
}
}
catch (exception)
{
log4js.logger.error("Exception updating DOM", exception);
failsafe = true;
}
try
{
miwt.ajaxprogress.stop();

var oldloc = window.location.href; 
var locref = false; 
var initNodes = this.req.responseXML.getElementsByTagName("jsinit");
for(var i=0; i<initNodes.length; i++)
{
var node = initNodes.item(i);
var script = this.decomposeParts(node);
locref = locref || script.match(/window\.location\.href/);

if (window.execScript)
window.execScript(script, 'JavaScript');
else
window.eval(script);
}
if (locref || oldloc != window.location.href) 
{
return;
}

if (failsafe)
break processXML;

if (window.windowlist)
repairWindowsAfterUpdate();

if (lastFocusId!=null) {
var node = $(lastFocusId);
if (node!=null && node.focus) {

node.focus();
}
}
updatedNodes.each(miwt.setup);

if (updatedNodes.length > 0)
{
var scrollTop, clientHeight, scrollBottom;
if (document.documentElement)
{
scrollTop = document.documentElement.scrollTop;
clientHeight = document.documentElement.clientHeight;
scrollBottom = scrollTop+clientHeight;
}
else
{
scrollTop = document.body.scrollTop;
clientHeight = document.body.clientHeight;
scrollBottom = scrollTop+clientHeight;
}
var scrollNode;
var miny = -1;
var node;
for(var i = 0; node = updatedNodes[i]; i++)
{
if (!node.id.match(/c_.*/))
continue;
var y = Position.cumulativeOffset(node)[1];

if (miny == -1 || y < miny)
{
miny = y;
scrollNode = node;
}
}
if (miny != -1 && (miny < scrollTop || miny > scrollBottom))
{
if (miny > scrollBottom)
{

var targetHeight = scrollNode.offsetHeight;
if (targetHeight < clientHeight)
{
miny = miny - (clientHeight - targetHeight);
}
}

window.scrollTo(0, miny);
}
}
updatedNodes = null;
}
catch (exception)
{
log4js.logger.error("Exception processing updates", exception);
failsafe = true;
break processXML;
}

var metaInfoNodes = this.req.responseXML.getElementsByTagName("metainfo");
if (metaInfoNodes.length>0)
{
this.form.elements["metainfo"].value = this.decomposeParts(metaInfoNodes.item(0));

}
this.form.CleanOnSubmitHandlers();
}
else if (action=="error")
{
log4js.logger.error("Error occurred during rendering");

var errormessage = "";
var errormessageNodes = this.req.responseXML.getElementsByTagName("errormessage");
for(var i =0; i<errormessageNodes.length; i++)
{
if (i>0) errormessage = errormessage + "\n";
errormessage = errormessage + errormessageNodes.item(i).firstChild.nodeValue;
}
var errordetail = "";
var errordetailNodes = this.req.responseXML.getElementsByTagName("errordetail");
for(var i =0; i<errordetailNodes.length; i++)
{
if (i>0) errordetail = errordetail + "\n";
errordetail = errordetail + errordetailNodes.item(i).firstChild.nodeValue;
}
var node = document.createElement("div");
node.innerHTML = '<div style="border: solid red 10px; background-color: white; position: fixed; z-index: 9000; top: 10px; left: 10px; padding: 10px; max-width: 800px; max-height: 600px; overflow: scroll;"><div>'+errormessage+'</div><textarea cols="60" rows="10" wrap="off">'+errordetail+'</textarea></div>';
document.getElementsByTagName("body").item(0).appendChild(node);
}
else
{

log4js.logger.error("Unknown action: "+action);
failsafe = true;
}
}

this.req = null;

miwt.ajaxprogress.stop();

window.miwtReady = 1;

if (failsafe)
{
this.doFailsafe();

}
else
{

if (this.form.elements["miwt_button_activated"])
this.form.elements["miwt_button_activated"].value='';
if (this.form.elements["miwt_drag_source"])
this.form.elements["miwt_drag_source"].value='';
if (this.form.elements["miwt_drop_target"])
this.form.elements["miwt_drop_target"].value='';
}
if (this.ajax_request_complete_callback != null)
{
window.setTimeout(this.doRequestCompleteCallback.bind(this), 10);
}

}
},
doRequestCompleteCallback: function() {
var callback_event = new Object();
callback_event.source = this.form;
var f;
for(var i=0; f = this.ajax_request_complete_callback[i]; i++)
f.call(this.form, callback_event);
},
doFailsafe:function()
{
if (this.ajax_failed_update_callback != null)
{
var callback_event = new Object();
callback_event.source = this.form;
var f;
for(var i = 0; f = this.ajax_failed_update_callback[i]; i++) {
if (!f.call(this.form, callback_event))
return;
}
}

this.failsafe = true;
if (window.reloadPageUri)
window.location.href=window.reloadPageUri;
else
this.form.submit();
},
isRequestSubmitted:function()
{
return this.req!=null;
}
}
miwtajax.addMIWTAJAXUpdateFailureCallback = function (f)
{
miwtajax.ajax_failed_update_callback.push(f);
}

miwtajax.setMIWTAJAXUpdateFailureCallback = miwtajax.addMIWTAJAXUpdateFailureCallback;
miwtajax.addMIWTAJAXRequestCompleteCallback = function (f)
{
miwtajax.ajax_request_complete_callback.push(f);
}

miwtajax.setMIWTAJAXRequestCompleteCallback = miwtajax.addMIWTAJAXRequestCompleteCallback;
} 
if(typeof miwtcardcontainer == 'undefined') {
miwtcardcontainer = {};
miwt.CardContainerSelect = function (containerId, cardId)
{
var container=$(containerId);
var i;
for(i=0; i<container.childNodes.length; i++)
{
var node=container.childNodes.item(i);
if (node.nodeType==1 && node.nodeName.toLowerCase()=="div")
{
if (node.id == cardId)
node.style.display="block";
else
node.style.display="none";
}
}
}
miwt.CardContainerSelectEvent = function (event)
{
var element = Event.element(event);
miwt.CardContainerSelect('CardContainer'+element.cardid+'Wrapper', 'CardContainer'+element.cardid+'Card_'+element.cardname);
}
miwt.CardContainerSelectSetup = function (element, containerId, cardId)
{
element.cardid = containerId;
element.cardname = cardId;
if (element.type) 
{
switch (element.type.toLowerCase()) 
{
case 'checkbox':
case 'radio':
miwt.observe(element, 'click', miwt.CardContainerSelectEvent);
break;
case 'password':
case 'text':
case 'textarea':
case 'select-one':
case 'select-multiple':
miwt.observe(element, 'change', miwt.CardContainerSelectEvent);
break;
}
}
else
{
Event.observe(element, 'click', miwt.CardContainerSelectEvent);
}
}
miwt.AddSetupHandler(null, function (tag, node)
{
var match = /miwt_card_(\d+)_(\S+)/.exec(node.className);
if (match)
miwt.CardContainerSelectSetup(node, match[1], match[2]);
});
}
if(typeof miwt.windowTopZIndex == 'undefined') {



miwt.windowMoveTarget=null;

miwt.windowTopZIndex=1;

miwt.windowlist=new Array();
miwt.fixWindowList = function ()
{
var newlist = new Array();
for(var i = 0; i<miwt.windowlist.length; i++)
{
var w = $(miwt.windowlist[i]);
if (w != null)
newlist.push(w.id);
}
miwt.windowlist = newlist;
}
miwt.moveWindowRelative = function (object,xdelta,ydelta)
{
var newX1 = parseInt(object.style.left)+xdelta;
var newY1 = parseInt(object.style.top)+ydelta;
object.style.left=newX1+"px";
object.style.top=newY1+"px";
}
miwt.saveWindowPosition = function (winName,topFormName,leftFormName,widthFormName,heightFormName,zorderFormName)
{
var win = $(winName);
if (win==null)
return;
var zorder=$(zorderFormName);
if (zorder!=null)
zorder.value=win.style.zIndex;
var top=$(topFormName);
if (top!=null)
top.value=win.style.top;
var left = $(leftFormName);
if (left!=null)
left.value=win.style.left;
var width = $(widthFormName);
if (width!=null)
width.value=win.style.width;
var height = $(heightFormName);
if (height!=null)
height.value=win.style.height;
}
miwt.getWindowForElement = function (element)
{
while (element!=null)
{
var classNames = Element.classNames(element);
if (classNames.include("window")
|| classNames.include("inlinewindow"))
{
return element;
}
if (element.parentNode)
element=element.parentNode;
else
element=element.parentElement;
}
alert("Your browser's DOM implementation is broken. Lots of things will not work.");
return null;
}
miwt.repairWindowsAfterUpdate = function ()
{
var activewindow = null;

for(i=0; i<miwt.windowlist.length; i++)
{
var w = $(miwt.windowlist[i]);
if (w != null)
{
w.miwt_hide_permiating=false;
if (miwt.isWindowActive(w))
activewindow = w;
}
}

if (activewindow != null)
miwt.checkForPermiatingElements(activewindow);
}
miwt.activateWindow = function (object)
{
if ($(object.id+"_title_div")!=null)
{
miwt.windowTopZIndex++;
object.style.zIndex=miwt.windowTopZIndex;
$(object.id+"_title_td").className="activewindowtitle";
$(object.id+"_title_div").className="activewindowtitle";
document.title=$(object.id+"_title_div").firstChild.nodeValue;
if ($(object.id+"_menu_btn")!=null)
miwt.button.imageButtonActivate(object.id+"_menu_btn");
if ($(object.id+"_minimize_btn")!=null)
miwt.button.imageButtonActivate(object.id+"_minimize_btn");
if ($(object.id+"_maximize_btn")!=null)
miwt.button.imageButtonActivate(object.id+"_maximize_btn");
if ($(object.id+"_close_btn")!=null)
miwt.button.imageButtonActivate(object.id+"_close_btn");
if (object.focusable)
miwt.stopObserving(miwt.getWindowContent(object), "mousedown", miwt.activateWindowPassive, false);
for(i=0; i<miwt.windowlist.length; i++)
{
if (miwt.windowlist[i]!=object.id)
{
var w = $(miwt.windowlist[i]);
if (w !=null && w != object)
miwt.deactivateWindow(w);
}
}
}
}
miwt.deactivateWindow = function (object)
{
if ($(object.id+"_title_div")!=null)
{
$(object.id+"_title_td").className="inactivewindowtitle";
$(object.id+"_title_div").className="inactivewindowtitle";
if ($(object.id+"_menu_btn")!=null)
miwt.button.imageButtonDeactivate(object.id+"_menu_btn");
if ($(object.id+"_minimize_btn")!=null)
miwt.button.imageButtonDeactivate(object.id+"_minimize_btn");
if ($(object.id+"_maximize_btn")!=null)
miwt.button.imageButtonDeactivate(object.id+"_maximize_btn");
if ($(object.id+"_close_btn")!=null)
miwt.button.imageButtonDeactivate(object.id+"_close_btn");
if (object.focusable)
miwt.observe(miwt.getWindowContent(object), "mousedown", miwt.activateWindowPassive, false);
}
}
miwt.isWindowActive = function (object)
{

if (object.className.match(/inlinewindow/) && miwt.windowlist.length == 1)
{

for(i=0; i<miwt.windowlist.length; i++)
{
if (miwt.windowlist[i]!=object.id)
{
var otherwindow=$(miwt.windowlist[i]);
if (!otherwindow.className.match(/inlinewindow/))
{
var titletd=$(otherwindow.id+"_title_td");
if (titletd != null && titletd.className == "activewindowtitle")
return false;
}
}
}
return true;
}
var titletd=$(object.id+"_title_td");
if (titletd==null)
{
return false;
}
var className=titletd.className;
return className == "activewindowtitle";
}
miwt.getWindowContent = function (object)
{
return $(object.id+"_content_div");
}
miwt.isWindowOverlapped = function (activewindow, otherwindow)
{
if (otherwindow.className.match(/inlinewindow/))
return true;
var activeTop=parseInt(activewindow.style.top);
var activeLeft=parseInt(activewindow.style.left);
var activeBottom=activeTop+parseInt(activewindow.offsetHeight);
var activeRight=activeLeft+parseInt(activewindow.offsetWidth);
var otherTop=parseInt(otherwindow.style.top);
var otherLeft=parseInt(otherwindow.style.left);
var otherBottom=otherTop+parseInt(otherwindow.offsetHeight);
var otherRight=otherLeft+parseInt(otherwindow.offsetWidth);
if (activeTop>otherBottom) return false;
if (activeBottom<otherTop) return false;
if (activeLeft>otherRight) return false;
if (activeRight<otherLeft) return false;
return true;
}
miwt.checkForPermiatingElements = function (activewindow)
{
for(i=0; i<miwt.windowlist.length; i++)
{
if (miwt.windowlist[i]!=activewindow.id)
{
var otherwindow=$(miwt.windowlist[i]);
if (otherwindow!=null)
{
if (miwt.isWindowOverlapped(activewindow, otherwindow))
miwt.hidePermiatingElements(otherwindow);
else
miwt.showPermiatingElements(otherwindow);
}
}
}
miwt.showPermiatingElements(activewindow);
}
miwt.beginWindowMove = function (evt)
{
miwt.windowMoveTarget=miwt.getWindowForElement(Event.element(evt));
if (miwt.windowMoveTarget==null)
return;
Event.stop(evt);
miwt.lastWindowX=Event.pointerX(evt);
miwt.lastWindowY=Event.pointerY(evt);
miwt.observe(document.body, "mousemove", miwt.doWindowMove, true);
miwt.observe(document.body, "mouseup", miwt.endWindowMove, true);
$(miwt.windowMoveTarget.id+"_title_div").style.cursor='move';
document.body.style.cursor='move';
miwt.activateWindow(miwt.windowMoveTarget);
$(miwt.windowMoveTarget.id+"_content_div").style.visibility="hidden";
}
miwt.doWindowMove = function (evt)
{
Event.stop(evt);	
var difX=Event.pointerX(evt)-miwt.lastWindowX;
var difY=Event.pointerY(evt)-miwt.lastWindowY;
miwt.moveWindowRelative(miwt.windowMoveTarget, difX, difY);
miwt.lastWindowX=Event.pointerX(evt);
miwt.lastWindowY=Event.pointerY(evt);
}
miwt.endWindowMove = function (evt)
{
$(miwt.windowMoveTarget.id+"_title_div").style.cursor='auto';
document.body.style.cursor='auto';
miwt.stopObserving(document.body, "mousemove", miwt.doWindowMove, true);
miwt.stopObserving(document.body, "mouseup", miwt.endWindowMove, true);
$(miwt.windowMoveTarget.id+"_content_div").style.visibility="visible";
Event.stop(evt);
miwt.checkForPermiatingElements(miwt.windowMoveTarget);
miwt.windowMoveTarget=null;
}
miwt.beginWindowResize = function (evt)
{
var target = Event.element(evt);
miwt.windowResizeTarget=miwt.getWindowForElement(target);
if (miwt.windowResizeTarget==null)
return;
Event.stop(evt);
miwt.lastWindowX=Event.pointerX(evt);
miwt.lastWindowY=Event.pointerY(evt);
miwt.windowResizeDir=target.resizeDir;
miwt.observe(document.body, "mousemove", miwt.doWindowResize, true);
miwt.observe(document.body, "mouseup", miwt.endWindowResize, true);
miwt.activateWindow(miwt.windowResizeTarget);
}
miwt.doWindowResize = function (evt)
{
$(miwt.windowResizeTarget.id+"_content_div").style.visibility="hidden";
var difX=Event.pointerX(evt)-miwt.lastWindowX;
var difY=Event.pointerY(evt)-miwt.lastWindowY;
miwt.lastWindowX=Event.pointerX(evt);
miwt.lastWindowY=Event.pointerY(evt);
var object=miwt.windowResizeTarget;
var top=parseInt(object.style.top);
var left=parseInt(object.style.left);
var width=parseInt(object.style.width);
var height=parseInt(object.style.height);
var table=$(miwt.windowResizeTarget.id+"_table");
var tableWidth=parseInt(table.style.width);
var tableHeight=parseInt(table.style.height);
var content=$(miwt.windowResizeTarget.id+"_content_div");
var contentWidth=parseInt(content.style.width);
var contentHeight=parseInt(content.style.height);
if (miwt.windowResizeDir=="ne")
{
width=width+difX;
height=height-difY;
tableWidth=tableWidth+difX;
tableHeight=tableHeight-difY;
contentWidth=contentWidth+difX;
contentHeight=contentHeight-difY;
top=top+difY;
}
else if (miwt.windowResizeDir=="nw")
{
width=width-difX;
height=height-difY;
tableWidth=tableWidth-difX;
tableHeight=tableHeight-difY;
contentWidth=contentWidth-difX;
contentHeight=contentHeight-difY;
left=left+difX;
top=top+difY;
}
else if (miwt.windowResizeDir=="se")
{
width=width+difX;
height=height+difY;
tableWidth=tableWidth+difX;
tableHeight=tableHeight+difY;
contentWidth=contentWidth+difX;
contentHeight=contentHeight+difY;
}
else if (miwt.windowResizeDir=="sw")
{
width=width-difX;
height=height+difY;
tableWidth=tableWidth-difX;
tableHeight=tableHeight+difY;
contentWidth=contentWidth-difX;
contentHeight=contentHeight+difY;
left=left+difX;
}
else
{
alert("Internal error in window resize, I don't know which direction you are resizing.");
miwt.endWindowResize(evt);
}
object.style.top=top+"px";
object.style.left=left+"px";
object.style.width=width+"px";
object.style.height=height+"px";
table.style.width=tableWidth+"px";
table.style.height=tableHeight+"px";
content.style.width=contentWidth+"px";
content.style.height=contentHeight+"px";
}
miwt.endWindowResize = function (evt)
{
miwt.stopObserving(document.body, "mousemove", miwt.doWindowResize, true);
miwt.stopObserving(document.body, "mouseup", miwt.endWindowResize, true);
$(miwt.windowResizeTarget.id+"_content_div").style.visibility="visible";
Event.stop(evt);
miwt.checkForPermiatingElements(miwt.windowMoveTarget);
miwt.windowResizeTarget=null;
}
miwt.disableWindowActivation = function (evt)
{
Event.stop(evt);
}
miwt.disableChildren = function (root)
{
if (root==null || !root.hasChildNodes() || miwt.IsIterationStopNode(root))
return;
var i;
for(i=0; i<root.childNodes.length; i++)
{
var node=root.childNodes.item(i);
if (node.nodeType==Node.ELEMENT_NODE)
{
if (node.hasAttributes)
{
if (node.hasAttributes())
{
node.setAttribute("disabled", "true");
}
}
else
{
node.disabled = true;
}
miwt.disableChildren(node);
}
}
}
miwt.activateWindowPassive = function (evt)
{
var win = miwt.getWindowForElement(Event.element(evt));
if (win==null)
return;
if (!miwt.isWindowActive(win))
{
miwt.activateWindow(win);
miwt.checkForPermiatingElements(win);
}
}
miwt.setAbsoluteWidth = function (object)
{
var width=parseInt(object.offsetWidth);
var height=parseInt(object.offsetHeight);
object.style.width=width+"px";
object.style.height=height+"px";
}
miwt.setInitialPosition = function (windowObject)
{
if (windowObject.className.match(/inlinewindow/))
return;
if (!windowObject.style.top || windowObject.style.top=="")
{
var scrollTop = 0;
if (document.documentElement)
scrollTop = document.documentElement.scrollTop;
if (document.body.scrollTop && scrollTop == 0)
scrollTop = document.body.scrollTop;
var initialTop = scrollTop + 10;
if (windowObject.className.match(/dialog/)) {
var height = miwt.getComputedStyle(windowObject, "height");
if (height.match(/px/)) {
height = parseInt(height);
if (height < miwt.getWindowHeight())
initialTop = scrollTop + (miwt.getWindowHeight() - height)/2;
}
else if (height.match(/%/)) {
height = parseInt(height);
if (height > 0)
initialTop = scrollTop + (miwt.getWindowHeight() * (1 - height/100))/2;
}
}

for(i=0; i<miwt.windowlist.length; i++)
{
if (miwt.windowlist[i]!=windowObject.id)
{
var otherwindow=$(miwt.windowlist[i]);
if (otherwindow.style.top 
&& otherwindow.style.top != ''
&& Math.abs(parseInt(otherwindow.style.top) - initialTop)<30)
{
initialTop += 30;
}
}
}
windowObject.style.top = initialTop + "px";
}
if (!windowObject.style.left || windowObject.style.left=="")
{
var scrollLeft = 0;
if (document.documentElement)
scrollLeft = document.documentElement.scrollLeft;
if (document.body.scrollLeft && scrollLeft == 0)
scrollLeft = document.body.scrollLeft;
var initialLeft = scrollLeft + 10;
if (windowObject.className.match(/dialog/)) {
var width = miwt.getComputedStyle(windowObject, "width");
if (width.match(/px/)) {
width = parseInt(width);
if (width < miwt.getWindowWidth())
initialLeft = scrollLeft + (miwt.getWindowWidth() - width)/2;
}
else if (width.match(/%/)) {
width = parseInt(width);
if (width > 0)
initialLeft = scrollLeft + (miwt.getWindowWidth() * (1 - width/100))/2;
}
}

for(i=0; i<miwt.windowlist.length; i++)
{
if (miwt.windowlist[i]!=windowObject.id)
{
var otherwindow=$(miwt.windowlist[i]);
if (otherwindow.style.left 
&& otherwindow.style.left != ''
&& Math.abs(parseInt(otherwindow.style.left) - initialLeft)<30)
{
initialLeft += 30;
}
}
}
windowObject.style.left = initialLeft + "px";
}
}
miwt.ensurePassiveWindowActivation = function (windowObject)
{
var windowContent=$(windowObject.id+"_content_div");
miwt.stopObserving(windowContent, "mousedown", miwt.activateWindowPassive, false);
miwt.observe(windowContent, "mousedown", miwt.activateWindowPassive, false);
}
miwt.setupWindow = function (name, resizable, zindex, focusable, moveable)
{
miwt.fixWindowList();
var alreadyInList = false;
for(var i = 0; i<miwt.windowlist.length; i++)
{
if (miwt.windowlist[i] == name)
{
alreadyInList = true;
break;
}
}
if (!alreadyInList)
miwt.windowlist.push(name);
var windowObject=$(name);
var windowTable=$(name+"_table");
var windowContent=$(name+"_content_div");
var title=$(name+"_title_td");
var active=miwt.isWindowActive(windowObject);

if (zindex > miwt.windowTopZIndex)
{
miwt.windowTopZIndex=zindex;
}
windowObject.focusable=focusable;
if (focusable)
{
if (!active)
{	
miwt.ensurePassiveWindowActivation(windowObject);
}
else if (!windowObject.className.match(/inlinewindow/))
{

for(i=0; i<miwt.windowlist.length; i++)
{
var otherwindow=$(miwt.windowlist[i]);
if (otherwindow.className.match(/inlinewindow/))
{
miwt.ensurePassiveWindowActivation(otherwindow);
}
}
}
if (moveable)
{
miwt.observe(title, "mousedown", miwt.beginWindowMove, true);
}
if (resizable)
{	
setAbsoluteWidth(windowContent);
setAbsoluteWidth(windowTable);
setAbsoluteWidth(windowObject);
var resize;
resize=$(name+"_windowresize_nw_div");
miwt.observe(resize, "mousedown", miwt.beginWindowResize, false);
resize.resizeDir="nw";
resize=$(name+"_windowresize_ne_div");
miwt.observe(resize, "mousedown", miwt.beginWindowResize, false);
resize.resizeDir="ne";
resize=$(name+"_windowresize_sw_div");
miwt.observe(resize, "mousedown", miwt.beginWindowResize, false);
resize.resizeDir="sw";
resize=$(name+"_windowresize_se_div");
miwt.observe(resize, "mousedown", miwt.beginWindowResize, false);
resize.resizeDir="se";
}
}
else
{
miwt.observe(windowObject, "mousedown", miwt.disableWindowActivation, true);
miwt.disableChildren(windowObject);
}

miwt.setInitialPosition(windowObject);

for(i=0; i<miwt.windowlist.length; i++)
{
if (miwt.windowlist[i]!=windowObject.id)
{
var otherwindow=$(miwt.windowlist[i]);
if (otherwindow!=null
&& miwt.isWindowOverlapped(windowObject, otherwindow))
{
if (active)
{

miwt.hidePermiatingElements(otherwindow);
}
else
{

miwt.hidePermiatingElements(windowObject);
}	
}
}
}
if (active)
{

miwt.showPermiatingElements(windowObject);
}
if (!Element.hasClassName(windowObject, "inlinewindow"))
{
var form = Event.findElement({ target: windowObject}, 'form');
form.RegisterOnSubmitHandler(windowObject, miwt.prv_saveWindowPosition.bind(name));
}
}
miwt.prv_saveWindowPosition = function () {
miwt.saveWindowPosition(this+'', 
this+'_windowTop',
this+'_windowLeft',
this+'_windowWidth',
this+'_windowHeight',
this+'_windowZOrder');
return true;
}
miwt.AddSetupHandler([ 'div' ], function (tag, node)
{
var isWindow = !!/\bwindow\b/.exec(node.className);
var isInlineWindow = !!/\binlinewindow\b/.exec(node.className);
if (isWindow || isInlineWindow)
{
miwt.setupWindow(node.id,
$(node.is+"_windowresize_nw_div")!=null, 
Element.getStyle(node, 'z-index') || 0, 
!!/\bfocusable\b/.exec(node.className), 
!isInlineWindow 
);
}
});
}
if(typeof miwtpermiating == 'undefined') {
var miwtpermiating = {};
miwt.elementPermiatingSafe = [ 'input', 'select', 'textarea' ];
miwt.elementPermiatingNone = [];
miwt.elementPermiatingIE6 = [ 'select' ];

miwt.elementPermiating=miwt.elementPermiatingSafe;
if (navigator.userAgent.match(/Gecko/))
miwt.elementPermiating=miwt.elementPermiatingNone;
else if (navigator.userAgent.match(/MSIE 7/))
miwt.elementPermiating=miwt.elementPermiatingNone;
else if (navigator.userAgent.match(/MSIE/))
miwt.elementPermiating=miwt.elementPermiatingIE6;

miwt.isElementPermiating = function (node) {
if (!node.tagName)
return false;
var tag = node.tagName.toLowerCase();
var t;
for(var i = 0; t = miwt.elementPermiating[i]; i++) {
if (tag == t)
return true;
}
return false;
}
miwt.hidePermiatingElements = function (object)
{
if (object.miwt_hide_permiating==true)
return;
object.miwt_hide_permiating=true;
var element, node;
for(var i = 0; element = miwt.elementPermiating[i]; i++) {
var nodes = object.getElementsByTagName(element);
for(var j = 0; node = nodes[j]; j++) {
node.style.visibility="hidden";
}
}
}
miwt.showPermiatingElements = function (object)
{
if (object.miwt_hide_permiating==false)
return;
object.miwt_hide_permiating=false;
var element, node;
for(var i = 0; element = miwt.elementPermiating[i]; i++) {
var nodes = object.getElementsByTagName(element);
nodeLoop:
for(var j = 0; node = nodes[j]; j++) {

var parent = node.parentNode;
while (parent) {
if (miwt.isVisibilitySet(parent)) {
try {
node.style.visibility=null;
break nodeLoop;
} catch (e) { }
}
parent = parent.parentNode;
}
node.style.visibility="visible";
}
}
}
miwt.isVisibilitySet = function (node)
{
return (node.style 
&& node.style.visibility
&& node.style.visibility != null
&& node.style.visibility != "");
}
miwt.IsIterationStopNode = function (object)
{
return object.nodeName=="SELECT" || object.nodeName=="select";
}
} 
if(typeof miwtcollapsible == 'undefined') {
var miwtcollapsible = {};
miwt.collapsableContainerToggle = function (collapseFormKey,containerDivId,triggerId,anchor,inline)
{
var formElement=$(collapseFormKey);
if (formElement==null)
return;
if (formElement.value=="true")
{
miwt.prv_collapsableContainerShow(containerDivId,triggerId,anchor,inline);
formElement.value="false";
}
else if (formElement.value=="false")
{
miwt.prv_collapsableContainerHide(containerDivId,inline);
formElement.value="true";
}
}
miwt.prv_collapsableContainerShow = function (containerDivId,triggerId,anchor,inline)
{
var divObject=$(containerDivId);
if (divObject==null)
return;
var triggerObject=$(triggerId);
if (triggerObject!=null)
{
var pos = Position.realOffset(triggerObject);
if (anchor.indexOf("south")>=0)
{
if (anchor=="south")
{
divObject.style.left=pos[0]+"px";
divObject.style.top=(pos[1]+triggerObject.offsetHeight)+"px";
}
else
{
divObject.style.top=pos[1]+"px";
}	
}
if (anchor.indexOf("east")>=0)
{
divObject.style.left=(pos[0]+triggerObject.offsetWidth)+"px";
if (anchor=="east")
divObject.style.top=pos[1]+"px";
}
if (anchor.indexOf("north")>=0)
{
if (anchor=="north")
{
divObject.style.left=pos[0]+"px";
divObject.style.top=(pos[1]-divObject.offsetHeight)+"px";
}
else
{
divObject.style.top=((pos[1]+triggerObject.offsetHeight)-divObject.offsetHeight)+"px";
}
}
if (anchor.indexOf("west")>=0)
{
divObject.style.left=(pos[0]-divObject.offsetWidth)+"px";
if (anchor=="west")
divObject.style.top=pos[1]+"px";
}
}
if (inline)
divObject.style.display="inline";
else
divObject.style.visibility="visible";
}
miwt.prv_collapsableContainerHide = function (containerDivId,inline)
{
var divObject=$(containerDivId);
if (divObject==null)
return;
if (inline)
divObject.style.display="none";
else
divObject.style.visibility="hidden";
}
miwt.collapseContainerToggle = function (event)
{
Event.stop(event);
var element = Event.element(event) || event;
miwt.collapsableContainerToggle(element.state.name,element.div.id,element.id,element.anchor,element.disposition.toLowerCase()=='inline');
}
miwt.AddSetupHandler([ 'button', 'img' ], function (tag, node)
{

var match = /miwt_collapsable_(\w+)_(\w+)/.exec(node.className);
if (match)
{
node.anchor = match[1];
node.disposition = match[2];
node.div = $(node.id.replace("_collapsable_trigger", "_collapsable"));
node.state = $(node.id.replace("_collapsable_trigger", ""));
miwt.observe(node, "click", miwt.collapseContainerToggle);
if (node.disposition.toLowerCase()!='inline' && node.state.value=='false') {
miwt.prv_collapsableContainerShow(node.div.id, node.id, node.anchor, false);
}
}
});
} 
if(typeof miwttimer == 'undefined') {
var miwttimer = {};
miwt.fireTimer = function (formname)
{
var form = $(formname);
if (miwt.rescheduleTimerNeeded)
{
miwt.rescheduleTimerNeeded=false;
if (!form.rescheduleTimeout)
{
form.rescheduleTimeout = 3000;
}
setTimeout('miwt.fireTimer("'+formname+'")', form.rescheduleTimeout, 'JavaScript');
}
else
{

form.miwt_scheduleUpdateRequested = false;
form.rescheduleTimeout = 3000;
form.MIWTSubmit();
}
}
miwt.rescheduleTimer = function ()
{
miwt.rescheduleTimerNeeded=true;
}
miwt.scheduleUpdate = function (formname, time)
{
var form = $(formname);
if (form.miwt_scheduleUpdateRequested)
{

miwt.rescheduleTimer();
}
else
{
if (!time)
time=1000;
form.miwt_scheduleUpdateRequested=true;
form.rescheduleTimeout = time;
setTimeout('miwt.fireTimer("'+formname+'")', time, 'JavaScript');
}
}
miwt.AddSetupHandler([ 'span' ], function (tag, node) {
if (tag == 'span' && /\bmiwt_timer\b/.exec(node.className))
{
var form = node;
while (form.parentNode && (!form.tagName || (form.tagName.toLowerCase() != "form")))
form = form.parentNode;

miwt.scheduleUpdate(form.id || form.name, parseInt(node.firstChild.data));
}
});
}
if(typeof validation == 'undefined') {
var validation = new Object();
validation.integerpattern = new RegExp( "[ ]*([-]?[ ]*[0-9]+)[ ]*$" );
validation.realpattern = new RegExp( "([ ]*[-]?[ ]*[0-9]*[\.][0-9]+[ ]*$)|([ ]*[-]?[ ]*[0-9]+[\.][0-9]*[ ]*$)" );
validation.emailpattern = new RegExp( "^.+@.+\..{2,3}$" );
validation.date_mmddyyyy_slash = /([0-9][0-9])\x2F([0-9][0-9])\x2F([0-9][0-9][0-9][0-9])/;
validation.date_mmddyyyy_dash = new RegExp("([0-9][0-9])-([0-9][0-9])-([0-9][0-9][0-9][0-9])");
validation.date_mmddyy_slash = /([0-9][0-9])\x2F([0-9][0-9])\x2F([0-9][0-9])/;
validation.date_mmddyy_dash = new RegExp("([0-9][0-9])-([0-9][0-9])-([0-9][0-9])");
validation.config_regex_formatpattern = new RegExp("([-]?[\\w]*)[ ]*,[ ]*([-]?[\\w]*)");
validation.config_typepattern = new RegExp("([\\w]+)([\\(](.*)[\\)])?");
validation.config_formatpattern = new RegExp("([-]?[^\\s,]*)[ ]*,[ ]*([-]?[^\\s,]*)");
validation.isWhiteSpace = function (s)
{
if(s == ' ' || s == '\t' || s == '\n' || s == '\r' || s == '\b' || s == '\f')
return true;
else
return false;
}
validation.ltrim = function ( s )
{
if(s == '')
return s;
var n = s.length;
for(var i = 0; i < n; i++)
{
if(validation.isWhiteSpace(s.charAt(i)) == false)
return s.substr(i);
}
return '';
}
validation.rtrim = function ( s )
{
if(s == '')
return s;
var n = s.length;
for(var i = n; i > 0; i--)
{
if(validation.isWhiteSpace(s.charAt(i-1)) == false)
return s.substr(0, i);
}
return '';
}
validation.trim = function ( s )
{
return validation.ltrim(validation.rtrim(s));
}
validation.isInteger = function ( s )
{
var re = validation.integerpattern;
var parse = re.exec( s );
if(parse == null)
return false;
else if(parse[0] == s)
return true;
else
return false;
}
validation.checkNumber = function ( n, lbound, ubound )
{
var nn = new Number(n);
if(lbound != "" && ubound != "")
{
lbound = new Number(lbound);
ubound = new Number(ubound);
if(nn < lbound || nn > ubound)
return false;
}
else if(lbound == "" && ubound != "")
{
ubound = new Number(ubound);
if(nn > ubound)
return false;
}
if(lbound != "" && ubound == "")
{
lbound = new Number(lbound);
if(nn < lbound)
return false;
}
return true;
}
validation.checkString = function( s, lbound, ubound )
{
var nn = s.length;
if(lbound != "" && ubound != "")
{
lbound = new Number(lbound);
ubound = new Number(ubound);
if(nn < lbound || nn > ubound)
return false;
}
else if(lbound == "" && ubound != "")
{
ubound = new Number(ubound);
if(nn > ubound)
return false;
}
if(lbound != "" && ubound == "")
{
lbound = new Number(lbound);
if(nn < lbound)
return false;
}
return true;
}
validation.isDate = function( s, dateFormat )
{
var re;
if(dateFormat == "mm/dd/yyyy")
{
re = validation.date_mmddyyyy_slash;
}
else if(dateFormat == "mm-dd-yyyy")
{
re = validation.date_mmddyyyy_dash;
}
else if(dateFormat == "mm/dd/yy")
{
re = validation.date_mmddyy_slash;
}
else if(dateFormat == "mm-dd-yy")
{
re = validation.date_mmddyy_dash;
}
var s = validation.trim(s);
var parse = re.exec( s );
if(parse == null || parse[0] != s)
{
return false;
}
else
return true;
}
validation.isReal = function ( s )
{
var re = validation.realpattern;
var parse = re.exec( s );
if(parse == null)
return false;
else if(parse[0] == s)
return true;
else
return false;
}
validation.isNumeric = function( s )
{
return validation.isInteger(s) || validation.isReal(s);
}
validation.isEmail = function( s )
{
var re = validation.emailpattern;
var parse = re.exec(s);
if(parse == null)
return false;
else
return true;
}
validation.isIgnored = function(htmlform) {
return htmlform.elements['miwt_button_activated'].value
&& $(htmlform.elements['miwt_button_activated'].value+'_ignore_validation');
}
validation.validateForm = function(htmlform) 
{
if (validation.isIgnored(htmlform))
return true;
for(var i = 0; i < validation.fields.length; i++)
{
if (validation.fields[i]==null
|| htmlform.elements[validation.fields[i].element.name] == null)
{

var new_fv_fields = new Array();
for(var j = 0; j < validation.fields.length; j++)
{
if (validation.fields[j] != null
&& htmlform.elements[validation.fields[j].element.name] != null)
{
new_fv_fields.push(validation.fields[j]);
}
}
validation.fields = new_fv_fields;
return validation.validateForm(htmlform);
}
if(validation.fields[i].required == "1") 
{
var e = validation.fields[i].element;
if(e.type == "text" || e.type == "textarea")
{
if(validation.trim(e.value).length == 0)
{
validation.inValidation=true;
alert(validation.fields[i].message);
e.focus();
e.select();
validation.inValidation=false;
return false;
}
}
else if(e.type == "select-one" || e.type == "select-multiple")
{
if(e.selectedIndex == -1 || e.options[e.selectedIndex].value == "")
{
validation.inValidation=true;
alert(validation.fields[i].message);
e.focus();
validation.inValidation=false;
return false;
}
}
else if(e.type == "radio" || e.type == "checkbox")
{
var radios = htmlform.elements[e.name];
var n = 0;
for(var k = 0; k < radios.length; k++)
{
if(radios[k].checked)
{
n++;
break;
}
}
if(n == 0)
{
validation.inValidation=true;
alert(validation.fields[i].message);
validation.inValidation=false;
return false;
}
}
}
else
{
if (!validation.isFieldValid(validation.fields[i]))
{
var e = validation.fields[i].element;
if (!e.validation_called)
{
e.focus();
e.blur();
}
return false;
}
}
if(validation.fields[i].type=="doubleentry")
{
var value = validation.fields[i].element.value;
var compareField=$(validation.fields[i].format);
if (compareField!=null) 
{
var value2=compareField.value;
if (value!=value2)
{
validation.inValidation=true;
alert(validation.fields[i].message);
validation.inValidation=false;
return false;
}
}	
}
}
return true;
}
validation.badValidation = function()
{
if (validation.failedValidationInfo!=null)
{
alert(validation.failedValidationInfo.message);
validation.failedValidationInfo.element.focus();
validation.failedValidationInfo.element.select();
validation.failedValidationInfo=null;
}
}
validation.isFieldValid = function (fieldinfo)
{
var valid = true;
var value = fieldinfo.element.value;
if (validation.trim(value).length > 0)
{
if(fieldinfo.type == "int")
{
valid=(validation.isInteger(value)
&& validation.checkNumber(value, fieldinfo.lbound, fieldinfo.ubound));
}
else if(fieldinfo.type == "num")
{
valid=(validation.isNumeric(value)
&& validation.checkNumber(value, fieldinfo.lbound, fieldinfo.ubound));
}
else if(fieldinfo.type == "float")
{
valid=(validation.isReal(value)
&& validation.checkNumber(value, fieldinfo.lbound, fieldinfo.ubound));
}
else if(fieldinfo.type == "text")
{
valid=validation.checkString(value, fieldinfo.lbound, fieldinfo.ubound);
}
else if(fieldinfo.type == "email")
{
valid=validation.isEmail(value);
}
else if(fieldinfo.type == "date")
{
var dateFormat = (fieldinfo.format == "")? "mm/dd/yyyy" : fieldinfo.format;
valid=validation.isDate(value, dateFormat);
}
else if(fieldinfo.type == "regexp")
{
var re = new RegExp(fieldinfo.format);
var s = validation.trim(value);
var parse = re.exec(s);
valid=(parse != null && parse[0] == s);
}
}
return valid;
}
validation.onBlurHandler = function(evt) 
{
if (validation.inValidation)
return true;
var target = Event.element(evt);
if (validation.isIgnored(target.form))
return true;
validation.inValidation=true;
var fieldinfo = validation.getFieldInfo(target);
var valid = true;
if(fieldinfo != null)
{
valid=validation.isFieldValid(fieldinfo);
}
target.validation_called = true;
if (valid)
{
validation.inValidation=false;
return true;
}
else
{
validation.failedValidationInfo=fieldinfo;
setTimeout(validation.badValidation, 100, "JavaScript");
validation.inValidation=false;
Event.stop(evt);
return false;
}
}
validation.getFieldInfo = function (field)
{
for(var i = 0; i < validation.fields.length; i++)
{
if(validation.fields[i].element.name == field.name)
return validation.fields[i];
}
return null;
}
validation.setHandler = function (fieldinfo) 
{
validation.setEventHandler(fieldinfo.element, fieldinfo);
}
validation.setEventHandler = function(field, fieldinfo) 
{
if(field.type == "text" || field.type == "textarea")
{
miwt.observe(field, "blur", validation.onBlurHandler, false);
}
}
validation.fieldInfo = function (element, message, type, required) 
{
this.element = element;
this.message = message;
this.required = required;
this.type = type.toLowerCase();
this.format = "";
this.lbound = "";
this.ubound = "";
var parse = validation.config_typepattern.exec( type );
if(parse != null)
{
this.type = parse[1];
if(parse.length == 4)
this.format = parse[3];
parse = validation.config_formatpattern.exec(this.format);
if(parse != null)
{
this.lbound = parse[1];
this.ubound = parse[2];
}
}
}
validation.FormValidation_Register = function(element, message, type, required)
{
var f = new validation.fieldInfo(element, message, type, required);
validation.setHandler(f);

for(var i =0; i<validation.fields.length; i++)
{
if (validation.fields[i].element.name == element.name)
{
validation.fields[i] = f;
return;
}
}

validation.fields.push(f);
}
validation.fields = new Array();
validation.inValidation=false;
miwt.AddSetupHandler([ 'span' ], function (tag, node)
{
if (tag != 'span' || !/\bmiwt_validation\b/.exec(node.className))
return;
var match = /(\S+)_val/.exec(node.id);
if (!match)
return;
var type = node.firstChild.data;
var msgnode = $(node.id+"_message");
var reqnode = $(node.id+"_required");
if (msgnode && msgnode.firstChild && reqnode && reqnode.firstChild) {
var msg = msgnode.firstChild.data;
var req = reqnode.firstChild.data;

var el = $(match[1]);
if (el)
validation.FormValidation_Register(el, msg, type, req);
else
log4js.logger.error("Could not find element "+match[1]+" for validation");
}
});
}
if(typeof miwttable == 'undefined') {
var miwttable = {};
miwt.tableRowOnMouseOver = function (evt)
{
var tr = Event.element(evt);
while (tr != null && (!tr.tagName || tr.tagName.toLowerCase() != 'tr'))
tr = tr.parentNode;
if (tr == null || !tr.highlightColor)
return;
var theCells = tr.getElementsByTagName('td');
var rowCellsCnt = theCells.length;
for (var c = 0; c < rowCellsCnt; c++) {
var cell = theCells[c];
cell.saveBackgroundColor = cell.style.backgroundColor || tr.style.backgroundColor;
cell.style.backgroundColor = tr.highlightColor;
}
}
miwt.tableRowOnMouseOut = function (evt)
{
var tr = Event.element(evt);
while (tr != null && (!tr.tagName || tr.tagName.toLowerCase() != 'tr'))
tr = tr.parentNode;
if (tr == null || !tr.highlightColor)
return;
var theCells = tr.getElementsByTagName('td');
var rowCellsCnt = theCells.length;
for (var c = 0; c < rowCellsCnt; c++) {
var cell = theCells[c];
cell.style.backgroundColor = cell.saveBackgroundColor;
}
}
miwt.tableRowModification = function (element)
{
if (element.modificationSet)
return;
element.modificationSet = true;
var tr = element.parentNode;
while (tr != null && (!tr.tagName || tr.tagName.toLowerCase() != 'tr'))
tr = tr.parentNode;
if (tr == null)
return;
var theCells = tr.getElementsByTagName('td');
var rowCellsCnt = theCells.length;
for (var c = 0; c < rowCellsCnt; c++) {
var cell = theCells[c];
cell.style.backgroundColor = element.modificationColor;
cell.saveBackgroundColor = element.modificationColor;
}
}
miwt.AddSetupHandler([ 'table' ], function (tag, node) {
if (tag != 'table' || !/\bmiwt_highlight\b/.exec(node.className))
return;
var highlight = $(node.id+"_highlight");
var modification =$(node.id+"_modification");
if (!highlight || !modification)
return;
var highlightColor = highlight.firstChild.data;
var modificationColor = modification.firstChild.data;
var trs = $A(node.getElementsByTagName('tr'));
var node2;
for(var i = 0; node2 = trs[i]; i++) {

if (node2.parentNode.parentNode != node)
continue;
if (node2.parentNode.tagName.toLowerCase() == "thead")
continue;
node2.highlightColor = highlightColor;
node2.modificationColor = modificationColor;
miwt.observe(node2, 'mouseover', miwt.tableRowOnMouseOver, false);
miwt.observe(node2, 'mouseout', miwt.tableRowOnMouseOut, false);
if (!modificationColor)
continue;

var inputs = $A(node2.getElementsByTagName('input'));
inputs.concat(node2.getElementsByTagName('select'));
var rownode;
for(var j = 0; rownode = inputs[j]; j++) {	
if (rownode.className && rownode.className.match(/miwt_row_select/))
continue;
rownode.modificationColor = modificationColor;
rownode.observer = new Form.Element.EventObserver(rownode, miwt.tableRowModification);
}
}
});
}
if (typeof miwtdnd == 'undefined') {
var miwtdnd = {};
miwtdnd.active = false;
miwtdnd.dragSource = null;
miwtdnd.dropTarget = null;
miwtdnd.feedbackElement = null;
miwtdnd.window_mousemove = function (evt) {
Event.stop(evt);
if (miwtdnd.feedbackElement) {
miwtdnd.feedbackElement.style.left = (Event.pointerX(evt)+5)+"px";
miwtdnd.feedbackElement.style.top = (Event.pointerY(evt)+5)+"px";
}
}
miwtdnd.window_mouseup = function (evt) {

miwt.stopObserving(document, "mousemove", miwtdnd.window_mousemove, true);
miwt.stopObserving(document, "mouseup", miwtdnd.window_mouseup, true);
document.body.style.cursor = 'auto';
window.setTimeout(miwtdnd.stopOperation, 10);
}
miwtdnd.stopOperation = function() {
miwtdnd.active = false;
miwtdnd.dragSource = null;
miwtdnd.dropTarget = null;
if (miwtdnd.feedbackElement) {
Element.remove(miwtdnd.feedbackElement);
miwtdnd.feedbackElement = null;
}
}
miwtdnd.dragSource_mousedown = function (evt, drag) {

miwtdnd.dragSource = drag || Event.element(evt);
Event.stop(evt);
miwtdnd.active = true;
miwt.observe(document, "mousemove", miwtdnd.window_mousemove, true);
miwt.observe(document, "mouseup", miwtdnd.window_mouseup, true);
document.body.style.cursor='move';
miwtdnd.feedbackElement = miwtdnd.dragSource.cloneNode(true);
miwtdnd.feedbackElement.style.position = 'absolute';
{
var node, nodes= miwtdnd.feedbackElement.getElementsByTagName('*');
for(var i = 0; node = nodes.item(i); ++i) {
node.removeAttribute("id");
}
}
Element.addClassName(miwtdnd.feedbackElement, "miwt_dnd_feedback");
miwtdnd.feedbackElement.style.left = (Event.pointerX(evt)+5)+"px";
miwtdnd.feedbackElement.style.top = (Event.pointerY(evt)+5)+"px";
document.body.appendChild(miwtdnd.feedbackElement);
}
miwtdnd.setupDragSource = function (node) {

node.style.cursor = 'move';
var drag = node;
miwt.observe(node, "mousedown", function(evt) { miwtdnd.dragSource_mousedown(evt, drag) }, true);
}
miwtdnd.dropTarget_mouseup = function (evt, drop) {
if (!miwtdnd.active)
return;
Event.stop(evt);
miwtdnd.dropTarget = drop || Event.element(evt);
miwtdnd.active = false;

var form = Event.findElement(evt, 'form');
if (form) {
form.elements['miwt_drag_source'].value=miwtdnd.dragSource.id;
form.elements['miwt_drop_target'].value=miwtdnd.dropTarget.id;
miwtdnd.stopOperation();
form.MIWTSubmit();
} else {
miwtdnd.stopOperation();
}
}
miwtdnd.setupDropTarget = function (node) {

var drop = node;
miwt.observe(node, "mouseup", function(evt) { miwtdnd.dropTarget_mouseup(evt, drop) }, true);
}
miwt.AddSetupHandler([ 'span' ], function (tag, node)
{
if (/\bmiwt_drag_source\b/.exec(node.className))
miwtdnd.setupDragSource($(node.firstChild.data));
if (/\bmiwt_drop_target\b/.exec(node.className))
miwtdnd.setupDropTarget($(node.firstChild.data));
});
} 
if(typeof miwtcalendar == 'undefined') {
miwtcalendar = {};
miwt.calendarClearHandler = function (evt) {
var node = Event.element(evt).node;
node.value=''; 
if (/\bmiwt_submit\b/.exec(node.className))
miwt.calendarUpdateSubmit(node);
else
miwt.calendarUpdateNoSubmit(node);
}
miwt.calendarUpdateSubmit = function (node) {
if (this && this.target) {
node = $(this.target);
}
if (!node) return;
var form = node.form;
form.elements['miwt_button_activated'].value=node.name || node.id;
node.hinttexton = false;
node.style.color = null;
form.MIWTSubmit();
}
miwt.calendarUpdateNoSubmit = function (node) {
if (this && this.target) {
node = $(this.target);
}
if (!node) return;
node.hinttexton = false;
node.style.color = null;
}
miwt.AddSetupHandler([ 'input' ], function (tag, node) {
if (!/\bmiwt_calendar\b/.exec(node.className))
return;
var submit = /\bmiwt_submit\b/.exec(node.className);
var form = node.form;
var yearstart = $(node.id+'_yearstart');
var yearend = $(node.id+'_yearend');
var yearrange = null;
if (yearstart && yearend)
yearrange = [ parseInt(yearstart.firstChild.data), parseInt(yearend.firstChild.data) ];
else
yearrange = [1900, 2999];
var updateFunction = (submit) ? ( miwt.calendarUpdateSubmit.bind({target: node.id}) ):( miwt.calendarUpdateNoSubmit.bind({target: node.id}) );
var clearbutton = $(node.id+"_clear");
if (clearbutton) {
clearbutton.node = node;
miwt.observe(clearbutton, "click", miwt.calendarClearHandler);
}
try
{
var openbutton = $(node.id+"_open");
if (openbutton) {
Calendar.setup({
inputField: node.id,
button: openbutton,
ifFormat: $(node.id+'_format').firstChild.data,
range: yearrange,
showOthers: true,
showsTime: ($(node.id+'_time') != null),
onUpdate: updateFunction,
cache: false
});
}
}
catch (e) { log4js.logger.error("Cannot init calendar, check your classpath", e); }
});
} 

/*  JS Resource: lib/jscalendar/calendar_stripped.js  */

Calendar=function(firstDayOfWeek,dateStr,onSelected,onClose){this.activeDiv=null;this.currentDateEl=null;this.getDateStatus=null;this.getDateToolTip=null;this.getDateText=null;this.timeout=null;this.onSelected=onSelected||null;this.onClose=onClose||null;this.dragging=false;this.hidden=false;this.minYear=1970;this.maxYear=2050;this.dateFormat=Calendar._TT["DEF_DATE_FORMAT"];this.ttDateFormat=Calendar._TT["TT_DATE_FORMAT"];this.isPopup=true;this.weekNumbers=true;this.firstDayOfWeek=typeof firstDayOfWeek=="number"?firstDayOfWeek:Calendar._FD;this.showsOtherMonths=false;this.dateStr=dateStr;this.ar_days=null;this.showsTime=false;this.time24=true;this.yearStep=2;this.hiliteToday=true;this.multiple=null;this.table=null;this.element=null;this.tbody=null;this.firstdayname=null;this.monthsCombo=null;this.yearsCombo=null;this.hilitedMonth=null;this.activeMonth=null;this.hilitedYear=null;this.activeYear=null;this.dateClicked=false;if(typeof Calendar._SDN=="undefined"){if(typeof Calendar._SDN_len=="undefined")Calendar._SDN_len=3;var ar=new Array();for(var i=8;i>0;){ar[--i]=Calendar._DN[i].substr(0,Calendar._SDN_len);}Calendar._SDN=ar;if(typeof Calendar._SMN_len=="undefined")Calendar._SMN_len=3;ar=new Array();for(var i=12;i>0;){ar[--i]=Calendar._MN[i].substr(0,Calendar._SMN_len);}Calendar._SMN=ar;}};Calendar._C=null;Calendar.is_ie=(/msie/i.test(navigator.userAgent)&&!/opera/i.test(navigator.userAgent));Calendar.is_ie5=(Calendar.is_ie&&/msie 5\.0/i.test(navigator.userAgent));Calendar.is_opera=/opera/i.test(navigator.userAgent);Calendar.is_khtml=/Konqueror|Safari|KHTML/i.test(navigator.userAgent);Calendar.getAbsolutePos=function(el){if(document.defaultView && document.defaultView.getComputedStyle){var r={x:parseInt(document.defaultView.getComputedStyle(el,"").getPropertyValue("left")),y:parseInt(document.defaultView.getComputedStyle(el,"").getPropertyValue("top"))};if (!isNaN(r.x) && !isNaN(r.y)) return r;}else if(el.currentStyle){var r={x:parseInt(el.currentStyle["left"]),y:parseInt(el.currentStyle["top"])};if (!isNaN(r.x) && !isNaN(r.y)) return r;}var SL=0,ST=0;var is_div=/^div$/i.test(el.tagName);if(is_div&&el.scrollLeft)SL=el.scrollLeft;if(is_div&&el.scrollTop)ST=el.scrollTop;var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};if(el.offsetParent){var tmp=this.getAbsolutePos(el.offsetParent);r.x+=tmp.x;r.y+=tmp.y;}return r;};Calendar.isRelated=function(el,evt){var related=evt.relatedTarget;if(!related){var type=evt.type;if(type=="mouseover"){related=evt.fromElement;}else if(type=="mouseout"){related=evt.toElement;}}while(related){if(related==el){return true;}related=related.parentNode;}return false;};Calendar.removeClass=function(el,className){if(!(el&&el.className)){return;}var cls=el.className.split(" ");var ar=new Array();for(var i=cls.length;i>0;){if(cls[--i]!=className){ar[ar.length]=cls[i];}}el.className=ar.join(" ");};Calendar.addClass=function(el,className){Calendar.removeClass(el,className);el.className+=" "+className;};Calendar.getElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.currentTarget;while(f.nodeType!=1||/^div$/i.test(f.tagName))f=f.parentNode;return f;};Calendar.getTargetElement=function(ev){var f=Calendar.is_ie?window.event.srcElement:ev.target;while(f.nodeType!=1)f=f.parentNode;return f;};Calendar.stopEvent=function(ev){ev||(ev=window.event);if(Calendar.is_ie){ev.cancelBubble=true;ev.returnValue=false;}else{ev.preventDefault();ev.stopPropagation();}return false;};Calendar.addEvent=function(el,evname,func){if(el.attachEvent){el.attachEvent("on"+evname,func);}else if(el.addEventListener){el.addEventListener(evname,func,true);}else{el["on"+evname]=func;}};Calendar.removeEvent=function(el,evname,func){if(el.detachEvent){el.detachEvent("on"+evname,func);}else if(el.removeEventListener){el.removeEventListener(evname,func,true);}else{el["on"+evname]=null;}};Calendar.createElement=function(type,parent){var el=null;if(document.createElementNS){el=document.createElementNS("http://www.w3.org/1999/xhtml",type);}else{el=document.createElement(type);}if(typeof parent!="undefined"){parent.appendChild(el);}return el;};Calendar._add_evs=function(el){with(Calendar){addEvent(el,"mouseover",dayMouseOver);addEvent(el,"mousedown",dayMouseDown);addEvent(el,"mouseout",dayMouseOut);if(is_ie){addEvent(el,"dblclick",dayMouseDblClick);el.setAttribute("unselectable",true);}}};Calendar.findMonth=function(el){if(typeof el.month!="undefined"){return el;}else if(typeof el.parentNode.month!="undefined"){return el.parentNode;}return null;};Calendar.findYear=function(el){if(typeof el.year!="undefined"){return el;}else if(typeof el.parentNode.year!="undefined"){return el.parentNode;}return null;};Calendar.showMonthsCombo=function(){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var mc=cal.monthsCombo;if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}if(cal.activeMonth){Calendar.removeClass(cal.activeMonth,"active");}var mon=cal.monthsCombo.getElementsByTagName("div")[cal.date.getMonth()];Calendar.addClass(mon,"active");cal.activeMonth=mon;var s=mc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var mcw=mc.offsetWidth;if(typeof mcw=="undefined")mcw=50;s.left=(cd.offsetLeft+cd.offsetWidth-mcw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";};Calendar.showYearsCombo=function(fwd){var cal=Calendar._C;if(!cal){return false;}var cal=cal;var cd=cal.activeDiv;var yc=cal.yearsCombo;if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}if(cal.activeYear){Calendar.removeClass(cal.activeYear,"active");}cal.activeYear=null;var Y=cal.date.getFullYear()+(fwd?1:-1);var yr=yc.firstChild;var show=false;for(var i=12;i>0;--i){if(Y>=cal.minYear&&Y<=cal.maxYear){yr.innerHTML=Y;yr.year=Y;yr.style.display="block";show=true;}else{yr.style.display="none";}yr=yr.nextSibling;Y+=fwd?cal.yearStep:-cal.yearStep;}if(show){var s=yc.style;s.display="block";if(cd.navtype<0)s.left=cd.offsetLeft+"px";else{var ycw=yc.offsetWidth;if(typeof ycw=="undefined")ycw=50;s.left=(cd.offsetLeft+cd.offsetWidth-ycw)+"px";}s.top=(cd.offsetTop+cd.offsetHeight)+"px";}};Calendar.tableMouseUp=function(ev){var cal=Calendar._C;if(!cal){return false;}if(cal.timeout){clearTimeout(cal.timeout);}var el=cal.activeDiv;if(!el){return false;}var target=Calendar.getTargetElement(ev);ev||(ev=window.event);Calendar.removeClass(el,"active");if(target==el||target.parentNode==el){Calendar.cellClick(el,ev);}var mon=Calendar.findMonth(target);var date=null;if(mon){date=new Date(cal.date);if(mon.month!=date.getMonth()){date.setMonth(mon.month);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}else{var year=Calendar.findYear(target);if(year){date=new Date(cal.date);if(year.year!=date.getFullYear()){date.setFullYear(year.year);cal.setDate(date);cal.dateClicked=false;cal.callHandler();}}}with(Calendar){removeEvent(document,"mouseup",tableMouseUp);removeEvent(document,"mouseover",tableMouseOver);removeEvent(document,"mousemove",tableMouseOver);cal._hideCombos();_C=null;return stopEvent(ev);}};Calendar.tableMouseOver=function(ev){var cal=Calendar._C;if(!cal){return;}var el=cal.activeDiv;var target=Calendar.getTargetElement(ev);if(target==el||target.parentNode==el){Calendar.addClass(el,"hilite active");Calendar.addClass(el.parentNode,"rowhilite");}else{if(typeof el.navtype=="undefined"||(el.navtype!=50&&(el.navtype==0||Math.abs(el.navtype)>2)))Calendar.removeClass(el,"active");Calendar.removeClass(el,"hilite");Calendar.removeClass(el.parentNode,"rowhilite");}ev||(ev=window.event);if(el.navtype==50&&target!=el){var pos=Calendar.getAbsolutePos(el);var w=el.offsetWidth;var x=ev.clientX;var dx;var decrease=true;if(x>pos.x+w){dx=x-pos.x-w;decrease=false;}else dx=pos.x-x;if(dx<0)dx=0;var range=el._range;var current=el._current;var count=Math.floor(dx/10)%range.length;for(var i=range.length;--i>=0;)if(range[i]==current)break;while(count-->0)if(decrease){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();}var mon=Calendar.findMonth(target);if(mon){if(mon.month!=cal.date.getMonth()){if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}Calendar.addClass(mon,"hilite");cal.hilitedMonth=mon;}else if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}}else{if(cal.hilitedMonth){Calendar.removeClass(cal.hilitedMonth,"hilite");}var year=Calendar.findYear(target);if(year){if(year.year!=cal.date.getFullYear()){if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}Calendar.addClass(year,"hilite");cal.hilitedYear=year;}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}else if(cal.hilitedYear){Calendar.removeClass(cal.hilitedYear,"hilite");}}return Calendar.stopEvent(ev);};Calendar.tableMouseDown=function(ev){if(Calendar.getTargetElement(ev)==Calendar.getElement(ev)){return Calendar.stopEvent(ev);}};Calendar.calDragIt=function(ev){var cal=Calendar._C;if(!(cal&&cal.dragging)){return false;}var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posX=ev.pageX;posY=ev.pageY;}cal.hideShowCovered();var st=cal.element.style;st.left=(posX-cal.xOffs)+"px";st.top=(posY-cal.yOffs)+"px";return Calendar.stopEvent(ev);};Calendar.calDragEnd=function(ev){var cal=Calendar._C;if(!cal){return false;}cal.dragging=false;with(Calendar){removeEvent(document,"mousemove",calDragIt);removeEvent(document,"mouseup",calDragEnd);tableMouseUp(ev);}cal.hideShowCovered();};Calendar.dayMouseDown=function(ev){var el=Calendar.getElement(ev);if(el.disabled){return false;}var cal=el.calendar;cal.activeDiv=el;Calendar._C=cal;if(el.navtype!=300)with(Calendar){if(el.navtype==50){el._current=el.innerHTML;addEvent(document,"mousemove",tableMouseOver);}else addEvent(document,Calendar.is_ie5?"mousemove":"mouseover",tableMouseOver);addClass(el,"hilite active");addEvent(document,"mouseup",tableMouseUp);}else if(cal.isPopup){cal._dragStart(ev);}if(el.navtype==-1||el.navtype==1){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout("Calendar.showMonthsCombo()",250);}else if(el.navtype==-2||el.navtype==2){if(cal.timeout)clearTimeout(cal.timeout);cal.timeout=setTimeout((el.navtype>0)?"Calendar.showYearsCombo(true)":"Calendar.showYearsCombo(false)",250);}else{cal.timeout=null;}return Calendar.stopEvent(ev);};Calendar.dayMouseDblClick=function(ev){Calendar.cellClick(Calendar.getElement(ev),ev||window.event);if(Calendar.is_ie){document.selection.empty();}};Calendar.dayMouseOver=function(ev){var el=Calendar.getElement(ev);if(Calendar.isRelated(el,ev)||Calendar._C||el.disabled){return false;}if(el.ttip){if(el.ttip.substr(0,1)=="_"){el.ttip=el.caldate.print(el.calendar.ttDateFormat)+el.ttip.substr(1);}el.calendar.tooltips.innerHTML=el.ttip;}if(el.navtype!=300){Calendar.addClass(el,"hilite");if(el.caldate){Calendar.addClass(el.parentNode,"rowhilite");}}return Calendar.stopEvent(ev);};Calendar.dayMouseOut=function(ev){with(Calendar){var el=getElement(ev);if(isRelated(el,ev)||_C||el.disabled)return false;removeClass(el,"hilite");if(el.caldate)removeClass(el.parentNode,"rowhilite");if(el.calendar)el.calendar.tooltips.innerHTML=_TT["SEL_DATE"];return stopEvent(ev);}};Calendar.cellClick=function(el,ev){var cal=el.calendar;var closing=false;var newdate=false;var date=null;if(typeof el.navtype=="undefined"){if(cal.currentDateEl){Calendar.removeClass(cal.currentDateEl,"selected");Calendar.addClass(el,"selected");closing=(cal.currentDateEl==el);if(!closing){cal.currentDateEl=el;}}cal.date.setDateOnly(el.caldate);date=cal.date;var other_month=!(cal.dateClicked=!el.otherMonth);if(!other_month&&!cal.currentDateEl)cal._toggleMultipleDate(new Date(date));else newdate=!el.disabled;if(other_month)cal._init(cal.firstDayOfWeek,date);}else{if(el.navtype==200){Calendar.removeClass(el,"hilite");cal.callCloseHandler();return;}date=new Date(cal.date);if(el.navtype==0)date.setDateOnly(new Date());cal.dateClicked=false;var year=date.getFullYear();var mon=date.getMonth();function setMonth(m){var day=date.getDate();var max=date.getMonthDays(m);if(day>max){date.setDate(max);}date.setMonth(m);};switch(el.navtype){case 400:Calendar.removeClass(el,"hilite");var text=Calendar._TT["ABOUT"];if(typeof text!="undefined"){text+=cal.showsTime?Calendar._TT["ABOUT_TIME"]:"";}else{text="Help and about box text is not translated into this language.\n"+"If you know this language and you feel generous please update\n"+"the corresponding file in \"lang\" subdir to match calendar-en.js\n"+"and send it back to <mihai_bazon@yahoo.com> to get it into the distribution  ;-)\n\n"+"Thank you!\n"+"http://dynarch.com/mishoo/calendar.epl\n";}alert(text);return;case-2:if(year>cal.minYear){date.setFullYear(year-1);}break;case-1:if(mon>0){setMonth(mon-1);}else if(year-->cal.minYear){date.setFullYear(year);setMonth(11);}break;case 1:if(mon<11){setMonth(mon+1);}else if(year<cal.maxYear){date.setFullYear(year+1);setMonth(0);}break;case 2:if(year<cal.maxYear){date.setFullYear(year+1);}break;case 100:cal.setFirstDayOfWeek(el.fdow);return;case 50:var range=el._range;var current=el.innerHTML;for(var i=range.length;--i>=0;)if(range[i]==current)break;if(ev&&ev.shiftKey){if(--i<0)i=range.length-1;}else if(++i>=range.length)i=0;var newval=range[i];el.innerHTML=newval;cal.onUpdateTime();return;case 0:if((typeof cal.getDateStatus=="function")&&cal.getDateStatus(date,date.getFullYear(),date.getMonth(),date.getDate())){return false;}break;}if(!date.equalsTo(cal.date)){cal.setDate(date);newdate=true;}else if(el.navtype==0)newdate=closing=true;}if(newdate){ev&&cal.callHandler();}if(closing){Calendar.removeClass(el,"hilite");ev&&cal.callCloseHandler();}};Calendar.prototype.create=function(_par){var parent=null;if(!_par){parent=document.getElementsByTagName("body")[0];this.isPopup=true;}else{parent=_par;this.isPopup=false;}this.date=this.dateStr?new Date(this.dateStr):new Date();var table=Calendar.createElement("table");this.table=table;table.cellSpacing=0;table.cellPadding=0;table.calendar=this;Calendar.addEvent(table,"mousedown",Calendar.tableMouseDown);var div=Calendar.createElement("div");this.element=div;div.className="calendar";if(this.isPopup){div.style.position="absolute";div.style.display="none";}div.appendChild(table);var thead=Calendar.createElement("thead",table);var cell=null;var row=null;var cal=this;var hh=function(text,cs,navtype){cell=Calendar.createElement("td",row);cell.colSpan=cs;cell.className="button";if(navtype!=0&&Math.abs(navtype)<=2)cell.className+=" nav";Calendar._add_evs(cell);cell.calendar=cal;cell.navtype=navtype;cell.innerHTML="<div unselectable='on'>"+text+"</div>";return cell;};row=Calendar.createElement("tr",thead);var title_length=6;(this.isPopup)&&--title_length;(this.weekNumbers)&&++title_length;hh("?",1,400).ttip=Calendar._TT["INFO"];this.title=hh("",title_length,300);this.title.className="title";if(this.isPopup){this.title.ttip=Calendar._TT["DRAG_TO_MOVE"];this.title.style.cursor="move";hh("&#x00d7;",1,200).ttip=Calendar._TT["CLOSE"];}row=Calendar.createElement("tr",thead);row.className="headrow";this._nav_py=hh("&#x00ab;",1,-2);this._nav_py.ttip=Calendar._TT["PREV_YEAR"];this._nav_pm=hh("&#x2039;",1,-1);this._nav_pm.ttip=Calendar._TT["PREV_MONTH"];this._nav_now=hh(Calendar._TT["TODAY"],this.weekNumbers?4:3,0);this._nav_now.ttip=Calendar._TT["GO_TODAY"];this._nav_nm=hh("&#x203a;",1,1);this._nav_nm.ttip=Calendar._TT["NEXT_MONTH"];this._nav_ny=hh("&#x00bb;",1,2);this._nav_ny.ttip=Calendar._TT["NEXT_YEAR"];row=Calendar.createElement("tr",thead);row.className="daynames";if(this.weekNumbers){cell=Calendar.createElement("td",row);cell.className="name wn";cell.innerHTML=Calendar._TT["WK"];}for(var i=7;i>0;--i){cell=Calendar.createElement("td",row);if(!i){cell.navtype=100;cell.calendar=this;Calendar._add_evs(cell);}}this.firstdayname=(this.weekNumbers)?row.firstChild.nextSibling:row.firstChild;this._displayWeekdays();var tbody=Calendar.createElement("tbody",table);this.tbody=tbody;for(i=6;i>0;--i){row=Calendar.createElement("tr",tbody);if(this.weekNumbers){cell=Calendar.createElement("td",row);}for(var j=7;j>0;--j){cell=Calendar.createElement("td",row);cell.calendar=this;Calendar._add_evs(cell);}}if(this.showsTime){row=Calendar.createElement("tr",tbody);row.className="time";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;cell.innerHTML=Calendar._TT["TIME"]||"&#160;";cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=this.weekNumbers?4:3;(function(){function makeTimePart(className,init,range_start,range_end){var part=Calendar.createElement("span",cell);part.className=className;part.innerHTML=init;part.calendar=cal;part.ttip=Calendar._TT["TIME_PART"];part.navtype=50;part._range=[];if(typeof range_start!="number")part._range=range_start;else{for(var i=range_start;i<=range_end;++i){var txt;if(i<10&&range_end>=10)txt='0'+i;else txt=''+i;part._range[part._range.length]=txt;}}Calendar._add_evs(part);return part;};var hrs=cal.date.getHours();var mins=cal.date.getMinutes();var t12=!cal.time24;var pm=(hrs>12);if(t12&&pm)hrs-=12;var H=makeTimePart("hour",hrs,t12?1:0,t12?12:23);var span=Calendar.createElement("span",cell);span.innerHTML=":";span.className="colon";var M=makeTimePart("minute",mins,0,59);var AP=null;cell=Calendar.createElement("td",row);cell.className="time";cell.colSpan=2;if(t12)AP=makeTimePart("ampm",pm?"pm":"am",["am","pm"]);else cell.innerHTML="&#160;";cal.onSetTime=function(){var pm,hrs=this.date.getHours(),mins=this.date.getMinutes();if(t12){pm=(hrs>=12);if(pm)hrs-=12;if(hrs==0)hrs=12;AP.innerHTML=pm?"pm":"am";}H.innerHTML=(hrs<10)?("0"+hrs):hrs;M.innerHTML=(mins<10)?("0"+mins):mins;};cal.onUpdateTime=function(){var date=this.date;var h=parseInt(H.innerHTML,10);if(t12){if(/pm/i.test(AP.innerHTML)&&h<12)h+=12;else if(/am/i.test(AP.innerHTML)&&h==12)h=0;}var d=date.getDate();var m=date.getMonth();var y=date.getFullYear();date.setHours(h);date.setMinutes(parseInt(M.innerHTML,10));date.setFullYear(y);date.setMonth(m);date.setDate(d);this.dateClicked=false;this.callHandler();};})();}else{this.onSetTime=this.onUpdateTime=function(){};}var tfoot=Calendar.createElement("tfoot",table);row=Calendar.createElement("tr",tfoot);row.className="footrow";cell=hh(Calendar._TT["SEL_DATE"],this.weekNumbers?8:7,300);cell.className="ttip";if(this.isPopup){cell.ttip=Calendar._TT["DRAG_TO_MOVE"];cell.style.cursor="move";}this.tooltips=cell;div=Calendar.createElement("div",this.element);this.monthsCombo=div;div.className="combo";for(i=0;i<Calendar._MN.length;++i){var mn=Calendar.createElement("div");mn.className=Calendar.is_ie?"label-IEfix":"label";mn.month=i;mn.innerHTML=Calendar._SMN[i];div.appendChild(mn);}div=Calendar.createElement("div",this.element);this.yearsCombo=div;div.className="combo";for(i=12;i>0;--i){var yr=Calendar.createElement("div");yr.className=Calendar.is_ie?"label-IEfix":"label";div.appendChild(yr);}this._init(this.firstDayOfWeek,this.date);parent.appendChild(this.element);};Calendar._keyEvent=function(ev){var cal=window._dynarch_popupCalendar;if(!cal||cal.multiple)return false;(Calendar.is_ie)&&(ev=window.event);var act=(Calendar.is_ie||ev.type=="keypress"),K=ev.keyCode;if(ev.ctrlKey){switch(K){case 37:act&&Calendar.cellClick(cal._nav_pm);break;case 38:act&&Calendar.cellClick(cal._nav_py);break;case 39:act&&Calendar.cellClick(cal._nav_nm);break;case 40:act&&Calendar.cellClick(cal._nav_ny);break;default:return false;}}else switch(K){case 32:Calendar.cellClick(cal._nav_now);break;case 27:act&&cal.callCloseHandler();break;case 37:case 38:case 39:case 40:if(act){var prev,x,y,ne,el,step;prev=K==37||K==38;step=(K==37||K==39)?1:7;function setVars(){el=cal.currentDateEl;var p=el.pos;x=p&15;y=p>>4;ne=cal.ar_days[y][x];};setVars();function prevMonth(){var date=new Date(cal.date);date.setDate(date.getDate()-step);cal.setDate(date);};function nextMonth(){var date=new Date(cal.date);date.setDate(date.getDate()+step);cal.setDate(date);};while(1){switch(K){case 37:if(--x>=0)ne=cal.ar_days[y][x];else{x=6;K=38;continue;}break;case 38:if(--y>=0)ne=cal.ar_days[y][x];else{prevMonth();setVars();}break;case 39:if(++x<7)ne=cal.ar_days[y][x];else{x=0;K=40;continue;}break;case 40:if(++y<cal.ar_days.length)ne=cal.ar_days[y][x];else{nextMonth();setVars();}break;}break;}if(ne){if(!ne.disabled)Calendar.cellClick(ne);else if(prev)prevMonth();else nextMonth();}}break;case 13:if(act)Calendar.cellClick(cal.currentDateEl,ev);break;default:return false;}return Calendar.stopEvent(ev);};Calendar.prototype._init=function(firstDayOfWeek,date){var today=new Date(),TY=today.getFullYear(),TM=today.getMonth(),TD=today.getDate();this.table.style.visibility="hidden";var year=date.getFullYear();if(year<this.minYear){year=this.minYear;date.setFullYear(year);}else if(year>this.maxYear){year=this.maxYear;date.setFullYear(year);}this.firstDayOfWeek=firstDayOfWeek;this.date=new Date(date);var month=date.getMonth();var mday=date.getDate();var no_days=date.getMonthDays();date.setDate(1);var day1=(date.getDay()-this.firstDayOfWeek)%7;if(day1<0)day1+=7;date.setDate(-day1);date.setDate(date.getDate()+1);var row=this.tbody.firstChild;var MN=Calendar._SMN[month];var ar_days=this.ar_days=new Array();var weekend=Calendar._TT["WEEKEND"];var dates=this.multiple?(this.datesCells={}):null;for(var i=0;i<6;++i,row=row.nextSibling){var cell=row.firstChild;if(this.weekNumbers){cell.className="day wn";cell.innerHTML=date.getWeekNumber();cell=cell.nextSibling;}row.className="daysrow";var hasdays=false,iday,dpos=ar_days[i]=[];for(var j=0;j<7;++j,cell=cell.nextSibling,date.setDate(iday+1)){iday=date.getDate();var wday=date.getDay();cell.className="day";cell.pos=i<<4|j;dpos[j]=cell;var current_month=(date.getMonth()==month);if(!current_month){if(this.showsOtherMonths){cell.className+=" othermonth";cell.otherMonth=true;}else{cell.className="emptycell";cell.innerHTML="&#160;";cell.disabled=true;continue;}}else{cell.otherMonth=false;hasdays=true;}cell.disabled=false;cell.innerHTML=this.getDateText?this.getDateText(date,iday):iday;if(dates)dates[date.print("%Y%m%d")]=cell;if(this.getDateStatus){var status=this.getDateStatus(date,year,month,iday);if(this.getDateToolTip){var toolTip=this.getDateToolTip(date,year,month,iday);if(toolTip)cell.title=toolTip;}if(status===true){cell.className+=" disabled";cell.disabled=true;}else{if(/disabled/i.test(status))cell.disabled=true;cell.className+=" "+status;}}if(!cell.disabled){cell.caldate=new Date(date);cell.ttip="_";if(!this.multiple&&current_month&&iday==mday&&this.hiliteToday){cell.className+=" selected";this.currentDateEl=cell;}if(date.getFullYear()==TY&&date.getMonth()==TM&&iday==TD){cell.className+=" today";cell.ttip+=Calendar._TT["PART_TODAY"];}if(weekend.indexOf(wday.toString())!=-1)cell.className+=cell.otherMonth?" oweekend":" weekend";}}if(!(hasdays||this.showsOtherMonths))row.className="emptyrow";}this.title.innerHTML=Calendar._MN[month]+", "+year;this.onSetTime();this.table.style.visibility="visible";this._initMultipleDates();};Calendar.prototype._initMultipleDates=function(){if(this.multiple){for(var i in this.multiple){var cell=this.datesCells[i];var d=this.multiple[i];if(!d)continue;if(cell)cell.className+=" selected";}}};Calendar.prototype._toggleMultipleDate=function(date){if(this.multiple){var ds=date.print("%Y%m%d");var cell=this.datesCells[ds];if(cell){var d=this.multiple[ds];if(!d){Calendar.addClass(cell,"selected");this.multiple[ds]=date;}else{Calendar.removeClass(cell,"selected");delete this.multiple[ds];}}}};Calendar.prototype.setDateToolTipHandler=function(unaryFunction){this.getDateToolTip=unaryFunction;};Calendar.prototype.setDate=function(date){if(!date.equalsTo(this.date)){this._init(this.firstDayOfWeek,date);}};Calendar.prototype.refresh=function(){this._init(this.firstDayOfWeek,this.date);};Calendar.prototype.setFirstDayOfWeek=function(firstDayOfWeek){this._init(firstDayOfWeek,this.date);this._displayWeekdays();};Calendar.prototype.setDateStatusHandler=Calendar.prototype.setDisabledHandler=function(unaryFunction){this.getDateStatus=unaryFunction;};Calendar.prototype.setRange=function(a,z){this.minYear=a;this.maxYear=z;};Calendar.prototype.callHandler=function(){if(this.onSelected){this.onSelected(this,this.date.print(this.dateFormat));}};Calendar.prototype.callCloseHandler=function(){if(this.onClose){this.onClose(this);}this.hideShowCovered();};Calendar.prototype.destroy=function(){var el=this.element.parentNode;el.removeChild(this.element);Calendar._C=null;window._dynarch_popupCalendar=null;};Calendar.prototype.reparent=function(new_parent){var el=this.element;el.parentNode.removeChild(el);new_parent.appendChild(el);};Calendar._checkCalendar=function(ev){var calendar=window._dynarch_popupCalendar;if(!calendar){return false;}var el=Calendar.is_ie?Calendar.getElement(ev):Calendar.getTargetElement(ev);for(;el!=null&&el!=calendar.element;el=el.parentNode);if(el==null){window._dynarch_popupCalendar.callCloseHandler();return Calendar.stopEvent(ev);}};Calendar.prototype.show=function(){var rows=this.table.getElementsByTagName("tr");for(var i=rows.length;i>0;){var row=rows[--i];Calendar.removeClass(row,"rowhilite");var cells=row.getElementsByTagName("td");for(var j=cells.length;j>0;){var cell=cells[--j];Calendar.removeClass(cell,"hilite");Calendar.removeClass(cell,"active");}}this.element.style.display="block";this.hidden=false;if(this.isPopup){window._dynarch_popupCalendar=this;Calendar.addEvent(document,"keydown",Calendar._keyEvent);Calendar.addEvent(document,"keypress",Calendar._keyEvent);Calendar.addEvent(document,"mousedown",Calendar._checkCalendar);}this.hideShowCovered();};Calendar.prototype.hide=function(){if(this.isPopup){Calendar.removeEvent(document,"keydown",Calendar._keyEvent);Calendar.removeEvent(document,"keypress",Calendar._keyEvent);Calendar.removeEvent(document,"mousedown",Calendar._checkCalendar);}this.element.style.display="none";this.hidden=true;this.hideShowCovered();};Calendar.prototype.showAt=function(x,y){var s=this.element.style;s.left=x+"px";s.top=y+"px";this.show(); };Calendar.prototype.showAtElement=function(el,opts){var self=this;var p=Calendar.getAbsolutePos(el);if(!opts||typeof opts!="string"){this.showAt(p.x,p.y+el.offsetHeight);return true;}function fixPosition(box){if(box.x<0)box.x=0;if(box.y<0)box.y=0;var br;if(window.innerWidth && window.innerWidth>0){br={x:window.innerWidth,y:window.innerHeight};}else if(document.documentElement && document.documentElement.clientWidth>0){br={x:document.documentElement.clientWidth,y:document.documentElement.clientHeight};}else if (document.body.clientWidth && document.body.clientWidth>0){br={x:document.body.clientWidth,y:document.body.clientHeight};}else{var cp=document.createElement("div");var s=cp.style;s.position = "absolute";s.right=s.bottom=s.width=s.height="0px";document.body.appendChild(cp);br=Calendar.getAbsolutePos(cp);document.body.removeChild(cp);}if(Calendar.is_ie){var docEl=document.documentElement?document.documentElement:document.body;br.y+=docEl.scrollTop;br.x+=docEl.scrollLeft;}else{br.y+=window.scrollY;br.x+=window.scrollX;}var tmp=box.x+box.width-br.x;if(tmp>0)box.x-=tmp;tmp=box.y+box.height-br.y;if(tmp>0)box.y-=tmp;};this.element.style.display="block";Calendar.continuation_for_the_fucking_khtml_browser=function(){var w=self.element.offsetWidth;var h=self.element.offsetHeight;self.element.style.display="none";var valign=opts.substr(0,1);var halign="l";if(opts.length>1){halign=opts.substr(1,1);}switch(valign){case "T":p.y-=h;break;case "B":p.y+=el.offsetHeight;break;case "C":p.y+=(el.offsetHeight-h)/2;break;case "t":p.y+=el.offsetHeight-h;break;case "b":break;}switch(halign){case "L":p.x-=w;break;case "R":p.x+=el.offsetWidth;break;case "C":p.x+=(el.offsetWidth-w)/2;break;case "l":p.x+=el.offsetWidth-w;break;case "r":break;}p.width=w;p.height=h+40;self.monthsCombo.style.display="none";fixPosition(p);self.showAt(p.x,p.y);};if(Calendar.is_khtml)setTimeout("Calendar.continuation_for_the_fucking_khtml_browser()",10);else Calendar.continuation_for_the_fucking_khtml_browser();if(this.isPopup){var tmp=el;var zindex=0;try{while(tmp!=null){if(tmp.style && tmp.style.zIndex){var zval=parseInt(tmp.style.zIndex);if(zval>zindex) zindex=zval;}tmp=tmp.parentNode;}if(zindex>0){self.element.style.zIndex = zindex;}}catch(e){if(typeof log4js != 'undefined'){log4js.logger.error("Unable to get zIndex.", e);}}}};Calendar.prototype.setDateFormat=function(str){this.dateFormat=str;};Calendar.prototype.setTtDateFormat=function(str){this.ttDateFormat=str;};Calendar.prototype.parseDate=function(str,fmt){if(!fmt)fmt=this.dateFormat;this.setDate(Date.parseDate(str,fmt));};Calendar.prototype.hideShowCovered=function(){if(!Calendar.is_ie&&!Calendar.is_opera)return;function getVisib(obj){var value=obj.style.visibility;if(!value){if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){if(!Calendar.is_khtml)value=document.defaultView. getComputedStyle(obj,"").getPropertyValue("visibility");else value='';}else if(obj.currentStyle){value=obj.currentStyle.visibility;}else value='';}return value;};var tags=new Array("applet","iframe","select");var el=this.element;var p=Calendar.getAbsolutePos(el);var EX1=p.x;var EX2=el.offsetWidth+EX1;var EY1=p.y;var EY2=el.offsetHeight+EY1;for(var k=tags.length;k>0;){var ar=document.getElementsByTagName(tags[--k]);var cc=null;for(var i=ar.length;i>0;){cc=ar[--i];p=Calendar.getAbsolutePos(cc);var CX1=p.x;var CX2=cc.offsetWidth+CX1;var CY1=p.y;var CY2=cc.offsetHeight+CY1;if(this.hidden||(CX1>EX2)||(CX2<EX1)||(CY1>EY2)||(CY2<EY1)){if(!cc.__msh_save_visibility){cc.__msh_save_visibility=getVisib(cc);}cc.style.visibility=cc.__msh_save_visibility;}else{if(!cc.__msh_save_visibility){cc.__msh_save_visibility=getVisib(cc);}cc.style.visibility="hidden";}}}};Calendar.prototype._displayWeekdays=function(){var fdow=this.firstDayOfWeek;var cell=this.firstdayname;var weekend=Calendar._TT["WEEKEND"];for(var i=0;i<7;++i){cell.className="day name";var realday=(i+fdow)%7;if(i){cell.ttip=Calendar._TT["DAY_FIRST"].replace("%s",Calendar._DN[realday]);cell.navtype=100;cell.calendar=this;cell.fdow=realday;Calendar._add_evs(cell);}if(weekend.indexOf(realday.toString())!=-1){Calendar.addClass(cell,"weekend");}cell.innerHTML=Calendar._SDN[(i+fdow)%7];cell=cell.nextSibling;}};Calendar.prototype._hideCombos=function(){this.monthsCombo.style.display="none";this.yearsCombo.style.display="none";};Calendar.prototype._dragStart=function(ev){if(this.dragging){return;}this.dragging=true;var posX;var posY;if(Calendar.is_ie){posY=window.event.clientY+document.body.scrollTop;posX=window.event.clientX+document.body.scrollLeft;}else{posY=ev.clientY+window.scrollY;posX=ev.clientX+window.scrollX;}var st=this.element.style;this.xOffs=posX-parseInt(st.left);this.yOffs=posY-parseInt(st.top);with(Calendar){addEvent(document,"mousemove",calDragIt);addEvent(document,"mouseup",calDragEnd);}};Date._MD=new Array(31,28,31,30,31,30,31,31,30,31,30,31);Date.SECOND=1000;Date.MINUTE=60*Date.SECOND;Date.HOUR=60*Date.MINUTE;Date.DAY=24*Date.HOUR;Date.WEEK=7*Date.DAY;Date.parseDate=function(str,fmt){var today=new Date();var y=0;var m=-1;var d=0;var a=str.split(/\W+/);var b=fmt.match(/%./g);var i=0,j=0;var hr=0;var min=0;for(i=0;i<a.length;++i){if(!a[i])continue;switch(b[i]){case "%d":case "%e":d=parseInt(a[i],10);break;case "%m":m=parseInt(a[i],10)-1;break;case "%Y":case "%y":y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);break;case "%b":case "%B":for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){m=j;break;}}break;case "%H":case "%I":case "%k":case "%l":hr=parseInt(a[i],10);break;case "%P":case "%p":if(/pm/i.test(a[i])&&hr<12)hr+=12;else if(/am/i.test(a[i])&&hr>=12)hr-=12;break;case "%M":min=parseInt(a[i],10);break;}}if(isNaN(y))y=today.getFullYear();if(isNaN(m))m=today.getMonth();if(isNaN(d))d=today.getDate();if(isNaN(hr))hr=today.getHours();if(isNaN(min))min=today.getMinutes();if(y!=0&&m!=-1&&d!=0)return new Date(y,m,d,hr,min,0);y=0;m=-1;d=0;for(i=0;i<a.length;++i){if(a[i].search(/[a-zA-Z]+/)!=-1){var t=-1;for(j=0;j<12;++j){if(Calendar._MN[j].substr(0,a[i].length).toLowerCase()==a[i].toLowerCase()){t=j;break;}}if(t!=-1){if(m!=-1){d=m+1;}m=t;}}else if(parseInt(a[i],10)<=12&&m==-1){m=a[i]-1;}else if(parseInt(a[i],10)>31&&y==0){y=parseInt(a[i],10);(y<100)&&(y+=(y>29)?1900:2000);}else if(d==0){d=a[i];}}if(y==0)y=today.getFullYear();if(m!=-1&&d!=0)return new Date(y,m,d,hr,min,0);return today;};Date.prototype.getMonthDays=function(month){var year=this.getFullYear();if(typeof month=="undefined"){month=this.getMonth();}if(((0==(year%4))&&((0!=(year%100))||(0==(year%400))))&&month==1){return 29;}else{return Date._MD[month];}};Date.prototype.getDayOfYear=function(){var now=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var then=new Date(this.getFullYear(),0,0,0,0,0);var time=now-then;return Math.floor(time/Date.DAY);};Date.prototype.getWeekNumber=function(){var d=new Date(this.getFullYear(),this.getMonth(),this.getDate(),0,0,0);var DoW=d.getDay();d.setDate(d.getDate()-(DoW+6)%7+3);var ms=d.valueOf();d.setMonth(0);d.setDate(4);return Math.round((ms-d.valueOf())/(7*864e5))+1;};Date.prototype.equalsTo=function(date){return((this.getFullYear()==date.getFullYear())&&(this.getMonth()==date.getMonth())&&(this.getDate()==date.getDate())&&(this.getHours()==date.getHours())&&(this.getMinutes()==date.getMinutes()));};Date.prototype.setDateOnly=function(date){var tmp=new Date(date);this.setDate(1);this.setFullYear(tmp.getFullYear());this.setMonth(tmp.getMonth());this.setDate(tmp.getDate());};Date.prototype.print=function(str){var m=this.getMonth();var d=this.getDate();var y=this.getFullYear();var wn=this.getWeekNumber();var w=this.getDay();var s={};var hr=this.getHours();var pm=(hr>=12);var ir=(pm)?(hr-12):hr;var dy=this.getDayOfYear();if(ir==0)ir=12;var min=this.getMinutes();var sec=this.getSeconds();s["%a"]=Calendar._SDN[w];s["%A"]=Calendar._DN[w];s["%b"]=Calendar._SMN[m];s["%B"]=Calendar._MN[m];s["%C"]=1+Math.floor(y/100);s["%d"]=(d<10)?("0"+d):d;s["%e"]=d;s["%H"]=(hr<10)?("0"+hr):hr;s["%I"]=(ir<10)?("0"+ir):ir;s["%j"]=(dy<100)?((dy<10)?("00"+dy):("0"+dy)):dy;s["%k"]=hr;s["%l"]=ir;s["%m"]=(m<9)?("0"+(1+m)):(1+m);s["%M"]=(min<10)?("0"+min):min;s["%n"]="\n";s["%p"]=pm?"PM":"AM";s["%P"]=pm?"pm":"am";s["%s"]=Math.floor(this.getTime()/1000);s["%S"]=(sec<10)?("0"+sec):sec;s["%t"]="\t";s["%U"]=s["%W"]=s["%V"]=(wn<10)?("0"+wn):wn;s["%u"]=w+1;s["%w"]=w;s["%y"]=(''+y).substr(2,2);s["%Y"]=y;s["%%"]="%";var re=/%./g;if(!Calendar.is_ie5&&!Calendar.is_khtml)return str.replace(re,function(par){return s[par]||par;});var a=str.match(re);for(var i=0;i<a.length;i++){var tmp=s[a[i]];if(tmp){re=new RegExp(a[i],'g');str=str.replace(re,tmp);}}return str;};Date.prototype.__msh_oldSetFullYear=Date.prototype.setFullYear;Date.prototype.setFullYear=function(y){var d=new Date(this);d.__msh_oldSetFullYear(y);if(d.getMonth()!=this.getMonth())this.setDate(28);this.__msh_oldSetFullYear(y);};window._dynarch_popupCalendar=null;
/*  JS Resource: lib/jscalendar/calendar-setup_stripped.js  */

Calendar.setup=function(params){function param_default(pname,def){if(typeof params[pname]=="undefined"){params[pname]=def;}};param_default("inputField",null);param_default("displayArea",null);param_default("button",null);param_default("eventName","click");param_default("ifFormat","%Y/%m/%d");param_default("daFormat","%Y/%m/%d");param_default("singleClick",true);param_default("disableFunc",null);param_default("dateStatusFunc",params["disableFunc"]);param_default("dateText",null);param_default("firstDay",null);param_default("align","Br");param_default("range",[1900,2999]);param_default("weekNumbers",true);param_default("flat",null);param_default("flatCallback",null);param_default("onSelect",null);param_default("onClose",null);param_default("onUpdate",null);param_default("date",null);param_default("showsTime",false);param_default("timeFormat","24");param_default("electric",true);param_default("step",2);param_default("position",null);param_default("cache",false);param_default("showOthers",false);param_default("multiple",null);var tmp=["inputField","displayArea","button"];for(var i in tmp){if(typeof params[tmp[i]]=="string"){params[tmp[i]]=document.getElementById(params[tmp[i]]);}}if(!(params.flat||params.multiple||params.inputField||params.displayArea||params.button)){alert("Calendar.setup:\n  Nothing to setup (no fields found).  Please check your code");return false;}function onSelect(cal){var p=cal.params;var update=(cal.dateClicked||p.electric);if(update&&p.inputField){p.inputField.value=cal.date.print(p.ifFormat);if(typeof p.inputField.onchange=="function")p.inputField.onchange();}if(update&&p.displayArea)p.displayArea.innerHTML=cal.date.print(p.daFormat);if(update&&typeof p.onUpdate=="function")p.onUpdate(cal);if(update&&p.flat){if(typeof p.flatCallback=="function")p.flatCallback(cal);}if(update&&p.singleClick&&cal.dateClicked)cal.callCloseHandler();};if(params.flat!=null){if(typeof params.flat=="string")params.flat=document.getElementById(params.flat);if(!params.flat){alert("Calendar.setup:\n  Flat specified but can't find parent.");return false;}var cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect);cal.showsOtherMonths=params.showOthers;cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.params=params;cal.weekNumbers=params.weekNumbers;cal.setRange(params.range[0],params.range[1]);cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;if(params.ifFormat){cal.setDateFormat(params.ifFormat);}if(params.inputField&&typeof params.inputField.value=="string"){cal.parseDate(params.inputField.value);}cal.create(params.flat);cal.show();return false;}var triggerEl=params.button||params.displayArea||params.inputField;triggerEl["on"+params.eventName]=function(){var dateEl=params.inputField||params.displayArea;var dateFmt=params.inputField?params.ifFormat:params.daFormat;var mustCreate=false;var cal=window.calendar;if(dateEl)params.date=Date.parseDate(dateEl.value||dateEl.innerHTML,dateFmt);if(!(cal&&params.cache)){window.calendar=cal=new Calendar(params.firstDay,params.date,params.onSelect||onSelect,params.onClose||function(cal){cal.hide();});cal.showsTime=params.showsTime;cal.time24=(params.timeFormat=="24");cal.weekNumbers=params.weekNumbers;mustCreate=true;}else{if(params.date)cal.setDate(params.date);cal.hide();}if(params.multiple){cal.multiple={};for(var i=params.multiple.length;--i>=0;){var d=params.multiple[i];var ds=d.print("%Y%m%d");cal.multiple[ds]=d;}}cal.showsOtherMonths=params.showOthers;cal.yearStep=params.step;cal.setRange(params.range[0],params.range[1]);cal.params=params;cal.setDateStatusHandler(params.dateStatusFunc);cal.getDateText=params.dateText;cal.setDateFormat(dateFmt);if(mustCreate)cal.create();cal.refresh();if(!params.position)cal.showAtElement(params.button||params.displayArea||params.inputField,params.align);else cal.showAt(params.position[0],params.position[1]);return false;};return cal;};
/*  JS Resource: lib/jscalendar/lang/calendar-en.js  */









Calendar._DN = new Array
("Sunday",
"Monday",
"Tuesday",
"Wednesday",
"Thursday",
"Friday",
"Saturday",
"Sunday");












Calendar._SDN = new Array
("Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
"Sun");


Calendar._FD = 0;

Calendar._MN = new Array
("January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December");

Calendar._SMN = new Array
("Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec");

Calendar._TT = {};
Calendar._TT["INFO"] = "About the calendar";
Calendar._TT["ABOUT"] =
"DHTML Date/Time Selector\n" +
"(c) dynarch.com 2002-2005 / Author: Mihai Bazon\n" + 
"For latest version visit: http://www.dynarch.com/projects/calendar/\n" +
"Distributed under GNU LGPL.  See http://gnu.org/licenses/lgpl.html for details." +
"\n\n" +
"Date selection:\n" +
"- Use the \xab, \xbb buttons to select year\n" +
"- Use the " + String.fromCharCode(0x2039) + ", " + String.fromCharCode(0x203a) + " buttons to select month\n" +
"- Hold mouse button on any of the above buttons for faster selection.";
Calendar._TT["ABOUT_TIME"] = "\n\n" +
"Time selection:\n" +
"- Click on any of the time parts to increase it\n" +
"- or Shift-click to decrease it\n" +
"- or click and drag for faster selection.";
Calendar._TT["PREV_YEAR"] = "Prev. year (hold for menu)";
Calendar._TT["PREV_MONTH"] = "Prev. month (hold for menu)";
Calendar._TT["GO_TODAY"] = "Go Today";
Calendar._TT["NEXT_MONTH"] = "Next month (hold for menu)";
Calendar._TT["NEXT_YEAR"] = "Next year (hold for menu)";
Calendar._TT["SEL_DATE"] = "Select date";
Calendar._TT["DRAG_TO_MOVE"] = "Drag to move";
Calendar._TT["PART_TODAY"] = " (today)";


Calendar._TT["DAY_FIRST"] = "Display %s first";



Calendar._TT["WEEKEND"] = "0,6";
Calendar._TT["CLOSE"] = "Close";
Calendar._TT["TODAY"] = "Today";
Calendar._TT["TIME_PART"] = "(Shift-)Click or drag to change value";

Calendar._TT["DEF_DATE_FORMAT"] = "%Y-%m-%d";
Calendar._TT["TT_DATE_FORMAT"] = "%a, %b %e";
Calendar._TT["WK"] = "wk";
Calendar._TT["TIME"] = "Time:";

/*  JS Resource: lib/miwt/dc_release.js  */
if(typeof deploymentcontext == 'undefined') {
deploymentcontext = {};
deploymentcontext.doAjaxTimeout = true;
}

if(typeof cms_js_includes != 'undefined') {
 cms.addJSInclude('/resources/all/docroot/lib/i2rd-util.js');
 cms.addJSInclude('/resources/all/docroot/cms/js/bean/MenuBean.js');
 cms.addJSInclude('/resources/all/docroot/lib/prototype.js');
 cms.addJSInclude('/resources/all/docroot/lib/logger.js');
 cms.addJSInclude('/resources/all/docroot/FCKeditor/fckeditor.js');
 cms.addJSInclude('/resources/all/docroot/lib/miwt/miwt-lib.js');
 cms.addJSInclude('/resources/all/docroot/lib/jscalendar/calendar_stripped.js');
 cms.addJSInclude('/resources/all/docroot/lib/jscalendar/calendar-setup_stripped.js');
 cms.addJSInclude('/resources/all/docroot/lib/jscalendar/lang/calendar-en.js');
 cms.addJSInclude('/resources/all/docroot/lib/miwt/dc_release.js');
}
