summaryrefslogtreecommitdiff
path: root/framework/Web/Javascripts/js
diff options
context:
space:
mode:
authorxue <>2006-04-21 12:36:06 +0000
committerxue <>2006-04-21 12:36:06 +0000
commite392ecbf6e422825083bc7204eacb7090619a47c (patch)
tree8f2dcc8302f223ac2c71efd762417eddf84d62aa /framework/Web/Javascripts/js
parentc54a230a5926086ff1b69a0dd7e6352dbc0b40ff (diff)
Merge from 3.0 branch till 953.
Diffstat (limited to 'framework/Web/Javascripts/js')
-rw-r--r--framework/Web/Javascripts/js/ajax.js3867
-rw-r--r--framework/Web/Javascripts/js/colorpicker.js984
-rw-r--r--framework/Web/Javascripts/js/datepicker.js845
-rw-r--r--framework/Web/Javascripts/js/effects.js1490
-rw-r--r--framework/Web/Javascripts/js/logger.js925
-rw-r--r--framework/Web/Javascripts/js/prado.js3939
-rw-r--r--framework/Web/Javascripts/js/rico.js2553
-rw-r--r--framework/Web/Javascripts/js/validator.js994
8 files changed, 7885 insertions, 7712 deletions
diff --git a/framework/Web/Javascripts/js/ajax.js b/framework/Web/Javascripts/js/ajax.js
index 8e655fae..62c08d4f 100644
--- a/framework/Web/Javascripts/js/ajax.js
+++ b/framework/Web/Javascripts/js/ajax.js
@@ -1,516 +1,614 @@
-var Ajax={getTransport:function(){
-return Try.these(function(){
-return new ActiveXObject("Msxml2.XMLHTTP");
-},function(){
-return new ActiveXObject("Microsoft.XMLHTTP");
-},function(){
-return new XMLHttpRequest();
-})||false;
-},activeRequestCount:0};
-Ajax.Responders={responders:[],_each:function(_1){
-this.responders._each(_1);
-},register:function(_2){
-if(!this.include(_2)){
-this.responders.push(_2);
-}
-},unregister:function(_3){
-this.responders=this.responders.without(_3);
-},dispatch:function(_4,_5,_6,_7){
-this.each(function(_8){
-if(_8[_4]&&typeof _8[_4]=="function"){
-try{
-_8[_4].apply(_8,[_5,_6,_7]);
-}
-catch(e){
-}
+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(responderToAdd) {
+if (!this.include(responderToAdd))
+this.responders.push(responderToAdd);
+},
+unregister: function(responderToRemove) {
+this.responders = this.responders.without(responderToRemove);
+},
+dispatch: function(callback, request, transport, json) {
+this.each(function(responder) {
+if (responder[callback] && typeof responder[callback] == 'function') {
+try {
+responder[callback].apply(responder, [request, transport, json]);
+} catch (e) {}
}
});
-}};
-Object.extend(Ajax.Responders,Enumerable);
-Ajax.Responders.register({onCreate:function(){
+}
+};
+Object.extend(Ajax.Responders, Enumerable);
+Ajax.Responders.register({
+onCreate: function() {
Ajax.activeRequestCount++;
-},onComplete:function(){
+},
+onComplete: function() {
Ajax.activeRequestCount--;
-}});
-Ajax.Base=function(){
-};
-Ajax.Base.prototype={setOptions:function(_9){
-this.options={method:"post",asynchronous:true,parameters:""};
-Object.extend(this.options,_9||{});
-},responseIsSuccess:function(){
-return this.transport.status==undefined||this.transport.status==0||(this.transport.status>=200&&this.transport.status<300);
-},responseIsFailure:function(){
+}
+});
+Ajax.Base = function() {};
+Ajax.Base.prototype = {
+setOptions: function(options) {
+this.options = {
+method: 'post',
+asynchronous: true,
+contentType:'application/x-www-form-urlencoded',
+parameters: ''
+}
+Object.extend(this.options, options || {});
+},
+responseIsSuccess: function() {
+return this.transport.status == undefined
+|| this.transport.status == 0
+|| (this.transport.status >= 200 && this.transport.status < 300);
+},
+responseIsFailure: function() {
return !this.responseIsSuccess();
-}};
-Ajax.Request=Class.create();
-Ajax.Request.Events=["Uninitialized","Loading","Loaded","Interactive","Complete"];
-Ajax.Request.prototype=Object.extend(new Ajax.Base(),{initialize:function(url,_11){
-this.transport=Ajax.getTransport();
-this.setOptions(_11);
+}
+}
+Ajax.Request = Class.create();
+Ajax.Request.Events =
+['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];
+Ajax.Request.prototype = Object.extend(new Ajax.Base(), {
+initialize: function(url, options) {
+this.transport = Ajax.getTransport();
+this.setOptions(options);
this.request(url);
-},request:function(url){
-var _12=this.options.parameters||"";
-if(_12.length>0){
-_12+="&_=";
-}
-try{
-this.url=url;
-if(this.options.method=="get"&&_12.length>0){
-this.url+=(this.url.match(/\?/)?"&":"?")+_12;
-}
-Ajax.Responders.dispatch("onCreate",this,this.transport);
-this.transport.open(this.options.method,this.url,this.options.asynchronous);
-if(this.options.asynchronous){
-this.transport.onreadystatechange=this.onStateChange.bind(this);
-setTimeout((function(){
-this.respondToReadyState(1);
-}).bind(this),10);
+},
+request: function(url) {
+var parameters = this.options.parameters || '';
+if (parameters.length > 0) parameters += '&_=';
+try {
+this.url = url;
+if (this.options.method == 'get' && parameters.length > 0)
+this.url += (this.url.match(/\?/) ? '&' : '?') + parameters;
+Ajax.Responders.dispatch('onCreate', this, this.transport);
+this.transport.open(this.options.method, this.url,
+this.options.asynchronous);
+if (this.options.asynchronous) {
+this.transport.onreadystatechange = this.onStateChange.bind(this);
+setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10);
}
this.setRequestHeaders();
-var _13=this.options.postBody?this.options.postBody:_12;
-this.transport.send(this.options.method=="post"?_13:null);
-}
-catch(e){
+var body = this.options.postBody ? this.options.postBody : parameters;
+this.transport.send(this.options.method == 'post' ? body : null);
+} catch (e) {
this.dispatchException(e);
}
-},setRequestHeaders:function(){
-var _14=["X-Requested-With","XMLHttpRequest","X-Prototype-Version",Prototype.Version];
-if(this.options.method=="post"){
-_14.push("Content-type","application/x-www-form-urlencoded");
-if(this.transport.overrideMimeType){
-_14.push("Connection","close");
-}
-}
-if(this.options.requestHeaders){
-_14.push.apply(_14,this.options.requestHeaders);
-}
-for(var i=0;i<_14.length;i+=2){
-this.transport.setRequestHeader(_14[i],_14[i+1]);
-}
-},onStateChange:function(){
-var _16=this.transport.readyState;
-if(_16!=1){
+},
+setRequestHeaders: function() {
+var requestHeaders =
+['X-Requested-With', 'XMLHttpRequest',
+ 'X-Prototype-Version', Prototype.Version,
+ 'Accept', 'text/javascript, text/html, application/xml, text/xml, *
+if (this.transport.overrideMimeType)
+requestHeaders.push('Connection', 'close');
+}
+if (this.options.requestHeaders)
+requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
+for (var i = 0; i < requestHeaders.length; i += 2)
+this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
+},
+onStateChange: function() {
+var readyState = this.transport.readyState;
+if (readyState != 1)
this.respondToReadyState(this.transport.readyState);
-}
-},header:function(_17){
-try{
-return this.transport.getResponseHeader(_17);
-}
-catch(e){
-}
-},evalJSON:function(){
-try{
-return eval(this.header("X-JSON"));
-}
-catch(e){
-}
-},evalResponse:function(){
-try{
+},
+header: function(name) {
+try {
+return this.transport.getResponseHeader(name);
+} catch (e) {}
+},
+evalJSON: function() {
+try {
+return eval('(' + this.header('X-JSON') + ')');
+} catch (e) {}
+},
+evalResponse: function() {
+try {
return eval(this.transport.responseText);
-}
-catch(e){
+} catch (e) {
this.dispatchException(e);
}
-},respondToReadyState:function(_18){
-var _19=Ajax.Request.Events[_18];
-var _20=this.transport,json=this.evalJSON();
-if(_19=="Complete"){
-try{
-(this.options["on"+this.transport.status]||this.options["on"+(this.responseIsSuccess()?"Success":"Failure")]||Prototype.emptyFunction)(_20,json);
-}
-catch(e){
+},
+respondToReadyState: function(readyState) {
+var event = Ajax.Request.Events[readyState];
+var transport = this.transport, json = this.evalJSON();
+if (event == 'Complete') {
+try {
+(this.options['on' + this.transport.status]
+ || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(transport, json);
+} catch (e) {
this.dispatchException(e);
}
-if((this.header("Content-type")||"").match(/^text\/javascript/i)){
+if ((this.header('Content-type') || '').match(/^text\/javascript/i))
this.evalResponse();
}
-}
-try{
-(this.options["on"+_19]||Prototype.emptyFunction)(_20,json);
-Ajax.Responders.dispatch("on"+_19,this,_20,json);
-}
-catch(e){
+try {
+(this.options['on' + event] || Prototype.emptyFunction)(transport, json);
+Ajax.Responders.dispatch('on' + event, this, transport, json);
+} catch (e) {
this.dispatchException(e);
}
-if(_19=="Complete"){
-this.transport.onreadystatechange=Prototype.emptyFunction;
-}
-},dispatchException:function(_21){
-(this.options.onException||Prototype.emptyFunction)(this,_21);
-Ajax.Responders.dispatch("onException",this,_21);
-}});
-Ajax.Updater=Class.create();
-Object.extend(Object.extend(Ajax.Updater.prototype,Ajax.Request.prototype),{initialize:function(_22,url,_23){
-this.containers={success:_22.success?$(_22.success):$(_22),failure:_22.failure?$(_22.failure):(_22.success?null:$(_22))};
-this.transport=Ajax.getTransport();
-this.setOptions(_23);
-var _24=this.options.onComplete||Prototype.emptyFunction;
-this.options.onComplete=(function(_25,_26){
+if (event == 'Complete')
+this.transport.onreadystatechange = Prototype.emptyFunction;
+},
+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.containers = {
+success: container.success ? $(container.success) : $(container),
+failure: 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, object) {
this.updateContent();
-_24(_25,_26);
+onComplete(transport, object);
}).bind(this);
this.request(url);
-},updateContent:function(){
-var _27=this.responseIsSuccess()?this.containers.success:this.containers.failure;
-var _28=this.transport.responseText;
-if(!this.options.evalScripts){
-_28=_28.stripScripts();
-}
-if(_27){
-if(this.options.insertion){
-new this.options.insertion(_27,_28);
-}else{
-Element.update(_27,_28);
-}
-}
-if(this.responseIsSuccess()){
-if(this.onComplete){
-setTimeout(this.onComplete.bind(this),10);
-}
-}
-}});
-Ajax.PeriodicalUpdater=Class.create();
-Ajax.PeriodicalUpdater.prototype=Object.extend(new Ajax.Base(),{initialize:function(_29,url,_30){
-this.setOptions(_30);
-this.onComplete=this.options.onComplete;
-this.frequency=(this.options.frequency||2);
-this.decay=(this.options.decay||1);
-this.updater={};
-this.container=_29;
-this.url=url;
+},
+updateContent: function() {
+var receiver = this.responseIsSuccess() ?
+this.containers.success : this.containers.failure;
+var response = this.transport.responseText;
+if (!this.options.evalScripts)
+response = response.stripScripts();
+if (receiver) {
+if (this.options.insertion) {
+new this.options.insertion(receiver, response);
+} else {
+Element.update(receiver, response);
+}
+}
+if (this.responseIsSuccess()) {
+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);
+},
+start: function() {
+this.options.onComplete = this.updateComplete.bind(this);
this.onTimerEvent();
-},stop:function(){
-this.updater.onComplete=undefined;
+},
+stop: function() {
+this.updater.onComplete = undefined;
clearTimeout(this.timer);
-(this.onComplete||Prototype.emptyFunction).apply(this,arguments);
-},updateComplete:function(_31){
-if(this.options.decay){
-this.decay=(_31.responseText==this.lastText?this.decay*this.options.decay:1);
-this.lastText=_31.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);
-}});
-Prado.AJAX={Service:"Prototype"};
-Prado.AJAX.EvalScript=function(_32){
-var _33=new RegExp(Ajax.Updater.ScriptFragment,"img");
-var _34=_32.match(_33);
-if(_34){
-_33=new RegExp(Ajax.Updater.ScriptFragment,"im");
-setTimeout((function(){
-for(var i=0;i<_34.length;i++){
-eval(_34[i].match(_33)[1]);
-}
-}).bind(this),50);
+(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);
}
-};
-Prado.AJAX.Request=Class.create();
-Prado.AJAX.Request.prototype=Object.extend(Ajax.Request.prototype,{evalJSON:function(){
-try{
-var _35=this.transport.getResponseHeader("X-JSON"),object;
-object=eval(_35);
+});
+Prado.AJAX = { Service : 'Prototype' };
+Prado.AJAX.EvalScript = function(output)
+{
+var match = new RegExp(Ajax.Updater.ScriptFragment, 'img');
+var scripts= output.match(match);
+if (scripts)
+{
+match = new RegExp(Ajax.Updater.ScriptFragment, 'im');
+setTimeout((function()
+{
+for (var i = 0; i < scripts.length; i++)
+eval(scripts[i].match(match)[1]);
+}).bind(this), 50);
+}
+}
+Prado.AJAX.Request = Class.create();
+Prado.AJAX.Request.prototype = Object.extend(Ajax.Request.prototype,
+{
+evalJSON: function()
+{
+try
+{
+var json = this.transport.getResponseHeader('X-JSON'), object;
+object = eval(json);
return object;
+}
+catch (e)
+{
+if(isString(json))
+{
+return Prado.AJAX.JSON.parse(json);
+}
+}
+},
+respondToReadyState: function(readyState) {
+var event = Ajax.Request.Events[readyState];
+var transport = this.transport, json = this.evalJSON();
+if(event == 'Complete' && transport.status)
+Ajax.Responders.dispatch('on' + transport.status, this, transport, json);
+(this.options['on' + event] || Prototype.emptyFunction)(transport, json);
+Ajax.Responders.dispatch('on' + event, this, transport, json);
+if (event == 'Complete')
+(this.options['on' + this.transport.status]
+ || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')]
+ || Prototype.emptyFunction)(transport, json);
+if (event == 'Complete')
+this.transport.onreadystatechange = Prototype.emptyFunction;
}
-catch(e){
-if(isString(_35)){
-return Prado.AJAX.JSON.parse(_35);
+});
+Prado.AJAX.Error = function(e, code)
+{
+e.name = 'Prado.AJAX.Error';
+e.code = code;
+return e;
}
+Prado.AJAX.RequestBuilder = Class.create();
+Prado.AJAX.RequestBuilder.prototype =
+{
+initialize : function()
+{
+this.body = '';
+this.data = [];
+},
+encode : function(data)
+{
+return Prado.AJAX.JSON.stringify(data);
+},
+build : function(data)
+{
+var sep = '';
+for ( var argName in data)
+{
+if(isFunction(data[argName])) continue;
+try
+{
+this.body += sep + argName + '=';
+this.body += encodeURIComponent(this.encode(data[argName]));
+} catch (e) {
+throw Prado.AJAX.Error(e, 1006);
+}
+sep = '&';
+}
+},
+getAll : function()
+{
+this.build(this.data);
+return this.body;
}
-},respondToReadyState:function(_36){
-var _37=Ajax.Request.Events[_36];
-var _38=this.transport,json=this.evalJSON();
-if(_37=="Complete"&&_38.status){
-Ajax.Responders.dispatch("on"+_38.status,this,_38,json);
}
-(this.options["on"+_37]||Prototype.emptyFunction)(_38,json);
-Ajax.Responders.dispatch("on"+_37,this,_38,json);
-if(_37=="Complete"){
-(this.options["on"+this.transport.status]||this.options["on"+(this.responseIsSuccess()?"Success":"Failure")]||Prototype.emptyFunction)(_38,json);
+Prado.AJAX.RemoteObject = function(){};
+Prado.AJAX.RemoteObject.Request = Class.create();
+Prado.AJAX.RemoteObject.Request.prototype = Object.extend(Prado.AJAX.Request.prototype,
+{
+initialize : function(options)
+{
+this.transport = Ajax.getTransport();
+this.setOptions(options);
+this.post = new Prado.AJAX.RequestBuilder();
+},
+invokeRemoteObject : function(url, args)
+{
+this.initParameters(args);
+this.options.postBody = this.post.getAll();
+this.request(url);
+},
+initParameters : function(args)
+{
+this.post.data['__parameters'] = [];
+for(var i = 0; i<args.length; i++)
+this.post.data['__parameters'][i] = args[i];
}
-if(_37=="Complete"){
-this.transport.onreadystatechange=Prototype.emptyFunction;
+});
+Prado.AJAX.RemoteObject.prototype =
+{
+baseInitialize : function(handlers, options)
+{
+this.__handlers = handlers || {};
+this.__service = new Prado.AJAX.RemoteObject.Request(options);
+},
+__call : function(url, method, args)
+{
+this.__service.options.onSuccess = this.__onSuccess.bind(this);
+this.__callback = method;
+return this.__service.invokeRemoteObject(url+"/"+method, args);
+},
+__onSuccess : function(transport, json)
+{
+if(this.__handlers[this.__callback])
+this.__handlers[this.__callback](json, transport.responseText);
}
-}});
-Prado.AJAX.Error=function(e,_40){
-e.name="Prado.AJAX.Error";
-e.code=_40;
-return e;
-};
-Prado.AJAX.RequestBuilder=Class.create();
-Prado.AJAX.RequestBuilder.prototype={initialize:function(){
-this.body="";
-this.data=[];
-},encode:function(_41){
-return Prado.AJAX.JSON.stringify(_41);
-},build:function(_42){
-var sep="";
-for(var _44 in _42){
-if(isFunction(_42[_44])){
-continue;
-}
-try{
-this.body+=sep+_44+"=";
-this.body+=encodeURIComponent(this.encode(_42[_44]));
-}
-catch(e){
-throw Prado.AJAX.Error(e,1006);
-}
-sep="&";
-}
-},getAll:function(){
-this.build(this.data);
-return this.body;
-}};
-Prado.AJAX.RemoteObject=function(){
};
-Prado.AJAX.RemoteObject.Request=Class.create();
-Prado.AJAX.RemoteObject.Request.prototype=Object.extend(Prado.AJAX.Request.prototype,{initialize:function(_45){
-this.transport=Ajax.getTransport();
-this.setOptions(_45);
-this.post=new Prado.AJAX.RequestBuilder();
-},invokeRemoteObject:function(url,_46){
-this.initParameters(_46);
-this.options.postBody=this.post.getAll();
-this.request(url);
-},initParameters:function(_47){
-this.post.data["__parameters"]=[];
-for(var i=0;i<_47.length;i++){
-this.post.data["__parameters"][i]=_47[i];
-}
-}});
-Prado.AJAX.RemoteObject.prototype={baseInitialize:function(_48,_49){
-this.__handlers=_48||{};
-this.__service=new Prado.AJAX.RemoteObject.Request(_49);
-},__call:function(url,_50,_51){
-this.__service.options.onSuccess=this.__onSuccess.bind(this);
-this.__callback=_50;
-return this.__service.invokeRemoteObject(url+"/"+_50,_51);
-},__onSuccess:function(_52,_53){
-if(this.__handlers[this.__callback]){
-this.__handlers[this.__callback](_53,_52.responseText);
-}
-}};
-Prado.AJAX.Exception={"on505":function(_54,_55,e){
-var msg="HTTP "+_55.status+" with response";
-Logger.error(msg,_55.responseText);
+Prado.AJAX.Exception =
+{
+"on505" : function(request, transport, e)
+{
+var msg = 'HTTP '+transport.status+" with response";
+Logger.error(msg, transport.responseText);
Logger.exception(e);
-},onComplete:function(_57,_58,e){
-if(_58.status!=505){
-var msg="HTTP "+_58.status+" with response : \n";
-msg+=_58.responseText+"\n";
-msg+="Data : \n"+inspect(e);
+},
+onComplete : function(request, transport, e)
+{
+if(transport.status != 505)
+{
+var msg = 'HTTP '+transport.status+" with response : \n";
+msg += transport.responseText + "\n";
+msg += "Data : \n"+inspect(e);
Logger.warn(msg);
}
-},format:function(e){
-var msg=e.type+" with message \""+e.message+"\"";
-msg+=" in "+e.file+"("+e.line+")\n";
-msg+="Stack trace:\n";
-var _59=e.trace;
-for(var i=0;i<_59.length;i++){
-msg+=" #"+i+" "+_59[i].file;
-msg+="("+_59[i].line+"): ";
-msg+=_59[i]["class"]+"->"+_59[i]["function"]+"()"+"\n";
+},
+format : function(e)
+{
+var msg = e.type + " with message \""+e.message+"\"";
+msg += " in "+e.file+"("+e.line+")\n";
+msg += "Stack trace:\n";
+var trace = e.trace;
+for(var i = 0; i<trace.length; i++)
+{
+msg += "#"+i+" "+trace[i].file;
+msg += "("+trace[i].line+"): ";
+msg += trace[i]["class"]+"->"+trace[i]["function"]+"()"+"\n";
}
return msg;
-},logException:function(e){
-var msg=Prado.AJAX.Exception.format(e);
-Logger.error("Server Error "+e.code,msg);
-}};
-Event.OnLoad(function(){
-if(typeof Logger!="undefined"){
-Logger.exception=Prado.AJAX.Exception.logException;
+},
+logException : function(e)
+{
+var msg = Prado.AJAX.Exception.format(e);
+Logger.error("Server Error "+e.code, msg);
+}
+}
+Event.OnLoad(function()
+{
+if(typeof Logger != "undefined")
+{
+Logger.exception = Prado.AJAX.Exception.logException;
Ajax.Responders.register(Prado.AJAX.Exception);
}
});
-Prado.AJAX.Callback=Class.create();
-Prado.AJAX.Callback.prototype=Object.extend(new Prado.AJAX.RemoteObject(),{initialize:function(ID,_61){
-if(!isString(ID)&&typeof (ID.id)!="undefined"){
-ID=ID.id;
-}
-if(!isString(ID)){
-throw new Error("A Control ID must be specified");
-}
-this.baseInitialize(this,_61);
-this.options=_61||[];
-this.__service.post.data["__ID"]=ID;
+Prado.AJAX.Callback = Class.create();
+Prado.AJAX.Callback.prototype = Object.extend(new Prado.AJAX.RemoteObject(),
+{
+initialize : function(ID, options)
+{
+if(!isString(ID) && typeof(ID.id) != "undefined")
+ID = ID.id;
+if(!isString(ID))
+throw new Error('A Control ID must be specified');
+this.baseInitialize(this, options);
+this.options = options || [];
+this.__service.post.data['__ID'] = ID;
this.requestCallback();
-},collectPostData:function(){
-var IDs=Prado.AJAX.Callback.IDs;
-this.__service.post.data["__data"]={};
-for(var i=0;i<IDs.length;i++){
-var id=IDs[i];
-if(id.indexOf("[]")>-1){
-this.__service.post.data["__data"][id]=this.collectArrayPostData(id);
-}else{
-if(isObject($(id))){
-this.__service.post.data["__data"][id]=$F(id);
-}
-}
-}
-},collectArrayPostData:function(_64){
-var _65=document.getElementsByName(_64);
-var _66=[];
-$A(_65).each(function(el){
-if($F(el)){
-_66.push($F(el));
-}
+},
+collectPostData : function()
+{
+var IDs = Prado.AJAX.Callback.IDs;
+this.__service.post.data['__data'] = {};
+for(var i = 0; i<IDs.length; i++)
+{
+var id = IDs[i];
+if(id.indexOf("[]") > -1)
+this.__service.post.data['__data'][id] =
+this.collectArrayPostData(id);
+else if(isObject($(id)))
+this.__service.post.data['__data'][id] = $F(id);
+}
+},
+collectArrayPostData : function(name)
+{
+var elements = document.getElementsByName(name);
+var data = [];
+$A(elements).each(function(el)
+{
+if($F(el)) data.push($F(el));
});
-return _66;
-},requestCallback:function(){
+return data;
+},
+requestCallback : function()
+{
this.collectPostData();
-if(Prado.AJAX.Validate(this.options)){
-return this.__call(Prado.AJAX.Callback.Server,"handleCallback",this.options.params);
-}
-},handleCallback:function(_68,_69){
-if(typeof (_68)!="undefined"&&!isNull(_68)){
-this.options.onSuccess(_68["data"],_69);
-if(_68["actions"]){
-_68.actions.each(Prado.AJAX.Callback.Action.__run);
-}
+if(Prado.AJAX.Validate(this.options))
+return this.__call(Prado.AJAX.Callback.Server, 'handleCallback', this.options.params);
+},
+handleCallback : function(result, output)
+{
+if(typeof(result) != "undefined" && !isNull(result))
+{
+this.options.onSuccess(result['data'], output);
+if(result['actions'])
+result.actions.each(Prado.AJAX.Callback.Action.__run);
}
-}});
-Prado.AJAX.Callback.Action={__run:function(_70){
-for(var _71 in _70){
-if(_70[_71][0]&&($(_70[_71][0])||_70[_71][0].indexOf("[]")>-1)){
-_71.toFunction().apply(this,_70[_71]);
}
+});
+Prado.AJAX.Callback.Action =
+{
+__run : function(command)
+{
+for(var name in command)
+{
+if(command[name][0] && ($(command[name][0]) || command[name][0].indexOf("[]") > -1))
+{
+name.toFunction().apply(this,command[name]);
}
-}};
-Prado.AJAX.Validate=function(_72){
-if(_72.CausesValidation){
-if(_72.ValidatorGroup){
-return Prado.Validation.ValidateValidatorGroup(_72.ValidatorGroup);
-}else{
-if(_72.ValidationGroup){
-return Prado.Validation.ValidateValidationGroup(_72.ValidationGroup);
-}else{
-return Prado.Validation.ValidateNonGroup(_72.ValidationForm);
}
}
-}else{
+};
+Prado.AJAX.Validate = function(options)
+{
+if(options.CausesValidation)
+{
+if(options.ValidatorGroup)
+return Prado.Validation.ValidateValidatorGroup(options.ValidatorGroup);
+else if(options.ValidationGroup)
+return Prado.Validation.ValidateValidationGroup(options.ValidationGroup);
+else
+return Prado.Validation.ValidateNonGroup(options.ValidationForm);
+}
+else
return true;
-}
};
-Prado.AJAX.Callback.Server="";
-Prado.AJAX.Callback.IDs=[];
-Prado.Callback=function(ID,_73,_74,_75){
-var _76={"params":[_73]||[],"onSuccess":_74||Prototype.emptyFunction,"CausesValidation":true};
-Object.extend(_76,_75||{});
-new Prado.AJAX.Callback(ID,_76);
-return false;
+Prado.AJAX.Callback.Server = '';
+Prado.AJAX.Callback.IDs = [];
+Prado.Callback = function(ID, params, onSuccess, options)
+{
+var callback =
+{
+'params' : [params] || [],
+'onSuccess' : onSuccess || Prototype.emptyFunction,
+'CausesValidation' : true
};
-Array.prototype.______array="______array";
-Prado.AJAX.JSON={org:"http://www.JSON.org",copyright:"(c)2005 JSON.org",license:"http://www.crockford.com/JSON/license.html",stringify:function(arg){
-var c,i,l,s="",v;
-switch(typeof arg){
-case "object":
-if(arg){
-if(arg.______array=="______array"){
-for(i=0;i<arg.length;++i){
-v=this.stringify(arg[i]);
-if(s){
-s+=",";
-}
-s+=v;
-}
-return "["+s+"]";
-}else{
-if(typeof arg.toString!="undefined"){
-for(i in arg){
-v=arg[i];
-if(typeof v!="undefined"&&typeof v!="function"){
-v=this.stringify(v);
-if(s){
-s+=",";
-}
-s+=this.stringify(i)+":"+v;
-}
-}
-return "{"+s+"}";
-}
-}
-}
-return "null";
-case "number":
-return isFinite(arg)?String(arg):"null";
-case "string":
-l=arg.length;
-s="\"";
-for(i=0;i<l;i+=1){
-c=arg.charAt(i);
-if(c>=" "){
-if(c=="\\"||c=="\""){
-s+="\\";
-}
-s+=c;
-}else{
-switch(c){
-case "\b":
-s+="\\b";
+Object.extend(callback, options || {});
+new Prado.AJAX.Callback(ID, callback);
+return false;
+}
+Array.prototype.______array = '______array';
+Prado.AJAX.JSON = {
+org: 'http:
+copyright: '(c)2005 JSON.org',
+license: 'http:
+stringify: function (arg) {
+var c, i, l, s = '', v;
+switch (typeof arg) {
+case 'object':
+if (arg) {
+if (arg.______array == '______array') {
+for (i = 0; i < arg.length; ++i) {
+v = this.stringify(arg[i]);
+if (s) {
+s += ',';
+}
+s += v;
+}
+return '[' + s + ']';
+} else if (typeof arg.toString != 'undefined') {
+for (i in arg) {
+v = arg[i];
+if (typeof v != 'undefined' && typeof v != 'function') {
+v = this.stringify(v);
+if (s) {
+s += ',';
+}
+s += this.stringify(i) + ':' + v;
+}
+}
+return '{' + s + '}';
+}
+}
+return 'null';
+case 'number':
+return isFinite(arg) ? String(arg) : 'null';
+case 'string':
+l = arg.length;
+s = '"';
+for (i = 0; i < l; i += 1) {
+c = arg.charAt(i);
+if (c >= ' ') {
+if (c == '\\' || c == '"') {
+s += '\\';
+}
+s += c;
+} else {
+switch (c) {
+case '\b':
+s += '\\b';
break;
-case "\f":
-s+="\\f";
+case '\f':
+s += '\\f';
break;
-case "\n":
-s+="\\n";
+case '\n':
+s += '\\n';
break;
-case "\r":
-s+="\\r";
+case '\r':
+s += '\\r';
break;
-case "\t":
-s+="\\t";
+case '\t':
+s += '\\t';
break;
default:
-c=c.charCodeAt();
-s+="\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16);
+c = c.charCodeAt();
+s += '\\u00' + Math.floor(c / 16).toString(16) +
+(c % 16).toString(16);
}
}
}
-return s+"\"";
-case "boolean":
+return s + '"';
+case 'boolean':
return String(arg);
default:
-return "null";
-}
-},parse:function(_79){
-var at=0;
-var ch=" ";
-function error(m){
-throw {name:"JSONError",message:m,at:at-1,text:_79};
+return 'null';
+}
+},
+parse: function (text) {
+var at = 0;
+var ch = ' ';
+function error(m) {
+throw {
+name: 'JSONError',
+message: m,
+at: at - 1,
+text: text
+};
}
-function next(){
-ch=_79.charAt(at);
-at+=1;
+function next() {
+ch = text.charAt(at);
+at += 1;
return ch;
}
-function white(){
-while(ch){
-if(ch<=" "){
+function white() {
+while (ch) {
+if (ch <= ' ') {
next();
-}else{
-if(ch=="/"){
-switch(next()){
-case "/":
-while(next()&&ch!="\n"&&ch!="\r"){
-}
+} else if (ch == '/') {
+switch (next()) {
+case '/':
+while (next() && ch != '\n' && ch != '\r') {}
break;
-case "*":
+case '*':
next();
-for(;;){
-if(ch){
-if(ch=="*"){
-if(next()=="/"){
+for (;;) {
+if (ch) {
+if (ch == '*') {
+if (next() == '/') {
next();
break;
}
-}else{
+} else {
next();
}
-}else{
+} else {
error("Unterminated comment");
}
}
@@ -518,168 +616,161 @@ break;
default:
error("Syntax error");
}
-}else{
+} else {
break;
}
}
}
-}
-function string(){
-var i,s="",t,u;
-if(ch=="\""){
-outer:
-while(next()){
-if(ch=="\""){
+function string() {
+var i, s = '', t, u;
+if (ch == '"') {
+outer:while (next()) {
+if (ch == '"') {
next();
return s;
-}else{
-if(ch=="\\"){
-switch(next()){
-case "b":
-s+="\b";
+} else if (ch == '\\') {
+switch (next()) {
+case 'b':
+s += '\b';
break;
-case "f":
-s+="\f";
+case 'f':
+s += '\f';
break;
-case "n":
-s+="\n";
+case 'n':
+s += '\n';
break;
-case "r":
-s+="\r";
+case 'r':
+s += '\r';
break;
-case "t":
-s+="\t";
+case 't':
+s += '\t';
break;
-case "u":
-u=0;
-for(i=0;i<4;i+=1){
-t=parseInt(next(),16);
-if(!isFinite(t)){
+case 'u':
+u = 0;
+for (i = 0; i < 4; i += 1) {
+t = parseInt(next(), 16);
+if (!isFinite(t)) {
break outer;
}
-u=u*16+t;
+u = u * 16 + t;
}
-s+=String.fromCharCode(u);
+s += String.fromCharCode(u);
break;
default:
-s+=ch;
-}
-}else{
-s+=ch;
+s += ch;
}
+} else {
+s += ch;
}
}
}
error("Bad string");
}
-function array(){
-var a=[];
-if(ch=="["){
+function array() {
+var a = [];
+if (ch == '[') {
next();
white();
-if(ch=="]"){
+if (ch == ']') {
next();
return a;
}
-while(ch){
+while (ch) {
a.push(value());
white();
-if(ch=="]"){
+if (ch == ']') {
next();
return a;
-}else{
-if(ch!=","){
+} else if (ch != ',') {
break;
}
-}
next();
white();
}
}
error("Bad array");
}
-function object(){
-var k,o={};
-if(ch=="{"){
+function object() {
+var k, o = {};
+if (ch == '{') {
next();
white();
-if(ch=="}"){
+if (ch == '}') {
next();
return o;
}
-while(ch){
-k=string();
+while (ch) {
+k = string();
white();
-if(ch!=":"){
+if (ch != ':') {
break;
}
next();
-o[k]=value();
+o[k] = value();
white();
-if(ch=="}"){
+if (ch == '}') {
next();
return o;
-}else{
-if(ch!=","){
+} else if (ch != ',') {
break;
}
-}
next();
white();
}
}
error("Bad object");
}
-function number(){
-var n="",v;
-if(ch=="-"){
-n="-";
+function number() {
+var n = '', v;
+if (ch == '-') {
+n = '-';
next();
}
-while(ch>="0"&&ch<="9"){
-n+=ch;
+while (ch >= '0' && ch <= '9') {
+n += ch;
next();
}
-if(ch=="."){
-n+=".";
-while(next()&&ch>="0"&&ch<="9"){
-n+=ch;
+if (ch == '.') {
+n += '.';
+while (next() && ch >= '0' && ch <= '9') {
+n += ch;
}
}
-if(ch=="e"||ch=="E"){
-n+="e";
+if (ch == 'e' || ch == 'E') {
+n += 'e';
next();
-if(ch=="-"||ch=="+"){
-n+=ch;
+if (ch == '-' || ch == '+') {
+n += ch;
next();
}
-while(ch>="0"&&ch<="9"){
-n+=ch;
+while (ch >= '0' && ch <= '9') {
+n += ch;
next();
}
}
-v=+n;
-if(!isFinite(v)){
-}else{
+v = +n;
+if (!isFinite(v)) {
+} else {
return v;
}
}
-function word(){
-switch(ch){
-case "t":
-if(next()=="r"&&next()=="u"&&next()=="e"){
+function word() {
+switch (ch) {
+case 't':
+if (next() == 'r' && next() == 'u' && next() == 'e') {
next();
return true;
}
break;
-case "f":
-if(next()=="a"&&next()=="l"&&next()=="s"&&next()=="e"){
+case 'f':
+if (next() == 'a' && next() == 'l' && next() == 's' &&
+next() == 'e') {
next();
return false;
}
break;
-case "n":
-if(next()=="u"&&next()=="l"&&next()=="l"){
+case 'n':
+if (next() == 'u' && next() == 'l' && next() == 'l') {
next();
return null;
}
@@ -687,1325 +778,1745 @@ break;
}
error("Syntax error");
}
-function value(){
+function value() {
white();
-switch(ch){
-case "{":
+switch (ch) {
+case '{':
return object();
-case "[":
+case '[':
return array();
-case "\"":
+case '"':
return string();
-case "-":
+case '-':
return number();
default:
-return ch>="0"&&ch<="9"?number():word();
+return ch >= '0' && ch <= '9' ? number() : word();
}
}
return value();
-}};
-var Autocompleter={};
-Autocompleter.Base=function(){
-};
-Autocompleter.Base.prototype={baseInitialize:function(_86,_87,_88){
-this.element=$(_86);
-this.update=$(_87);
-this.hasFocus=false;
-this.changed=false;
-this.active=false;
-this.index=0;
-this.entryCount=0;
-if(this.setOptions){
-this.setOptions(_88);
-}else{
-this.options=_88||{};
-}
-this.options.paramName=this.options.paramName||this.element.name;
-this.options.tokens=this.options.tokens||[];
-this.options.frequency=this.options.frequency||0.4;
-this.options.minChars=this.options.minChars||1;
-this.options.onShow=this.options.onShow||function(_86,_87){
-if(!_87.style.position||_87.style.position=="absolute"){
-_87.style.position="absolute";
-Position.clone(_86,_87,{setHeight:false,offsetTop:_86.offsetHeight});
-}
-Effect.Appear(_87,{duration:0.15});
+}
};
-this.options.onHide=this.options.onHide||function(_89,_90){
-new Effect.Fade(_90,{duration:0.15});
+var Autocompleter = {}
+Autocompleter.Base = function() {};
+Autocompleter.Base.prototype = {
+baseInitialize: function(element, update, options) {
+this.element = $(element);
+this.update= $(update);
+this.hasFocus= false;
+this.changed = false;
+this.active= false;
+this.index = 0;
+this.entryCount= 0;
+if (this.setOptions)
+this.setOptions(options);
+else
+this.options = options || {};
+this.options.paramName= this.options.paramName || this.element.name;
+this.options.tokens = this.options.tokens || [];
+this.options.frequency= this.options.frequency || 0.4;
+this.options.minChars = this.options.minChars || 1;
+this.options.onShow = this.options.onShow ||
+function(element, update){
+if(!update.style.position || update.style.position=='absolute') {
+update.style.position = 'absolute';
+Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight});
+}
+Effect.Appear(update,{duration:0.15});
};
-if(typeof (this.options.tokens)=="string"){
-this.options.tokens=new Array(this.options.tokens);
-}
-this.observer=null;
-this.element.setAttribute("autocomplete","off");
+this.options.onHide = this.options.onHide ||
+function(element, update){ new Effect.Fade(update,{duration:0.15}) };
+if (typeof(this.options.tokens) == 'string')
+this.options.tokens = new Array(this.options.tokens);
+this.observer = null;
+this.element.setAttribute('autocomplete','off');
Element.hide(this.update);
-Event.observe(this.element,"blur",this.onBlur.bindAsEventListener(this));
-Event.observe(this.element,"keypress",this.onKeyPress.bindAsEventListener(this));
-},show:function(){
-if(Element.getStyle(this.update,"display")=="none"){
-this.options.onShow(this.element,this.update);
-}
-if(!this.iefix&&(navigator.appVersion.indexOf("MSIE")>0)&&(navigator.userAgent.indexOf("Opera")<0)&&(Element.getStyle(this.update,"position")=="absolute")){
-new Insertion.After(this.update,"<iframe id=\""+this.update.id+"_iefix\" "+"style=\"display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);\" "+"src=\"javascript:false;\" frameborder=\"0\" scrolling=\"no\"></iframe>");
-this.iefix=$(this.update.id+"_iefix");
-}
-if(this.iefix){
-setTimeout(this.fixIEOverlapping.bind(this),50);
-}
-},fixIEOverlapping:function(){
-Position.clone(this.update,this.iefix);
-this.iefix.style.zIndex=1;
-this.update.style.zIndex=2;
+Event.observe(this.element, "blur", this.onBlur.bindAsEventListener(this));
+Event.observe(this.element, "keypress", this.onKeyPress.bindAsEventListener(this));
+},
+show: function() {
+if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
+if(!this.iefix &&
+(navigator.appVersion.indexOf('MSIE')>0) &&
+(navigator.userAgent.indexOf('Opera')<0) &&
+(Element.getStyle(this.update, 'position')=='absolute')) {
+new Insertion.After(this.update,
+ '<iframe id="' + this.update.id + '_iefix" '+
+ 'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
+ 'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
+this.iefix = $(this.update.id+'_iefix');
+}
+if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
+},
+fixIEOverlapping: function() {
+Position.clone(this.update, this.iefix);
+this.iefix.style.zIndex = 1;
+this.update.style.zIndex = 2;
Element.show(this.iefix);
-},hide:function(){
+},
+hide: function() {
this.stopIndicator();
-if(Element.getStyle(this.update,"display")!="none"){
-this.options.onHide(this.element,this.update);
-}
-if(this.iefix){
-Element.hide(this.iefix);
-}
-},startIndicator:function(){
-if(this.options.indicator){
-Element.show(this.options.indicator);
-}
-},stopIndicator:function(){
-if(this.options.indicator){
-Element.hide(this.options.indicator);
-}
-},onKeyPress:function(_91){
-if(this.active){
-switch(_91.keyCode){
-case Event.KEY_TAB:
-case Event.KEY_RETURN:
-this.selectEntry();
-Event.stop(_91);
-case Event.KEY_ESC:
-this.hide();
-this.active=false;
-Event.stop(_91);
-return;
-case Event.KEY_LEFT:
-case Event.KEY_RIGHT:
-return;
-case Event.KEY_UP:
-this.markPrevious();
-this.render();
-if(navigator.appVersion.indexOf("AppleWebKit")>0){
-Event.stop(_91);
-}
-return;
-case Event.KEY_DOWN:
-this.markNext();
-this.render();
-if(navigator.appVersion.indexOf("AppleWebKit")>0){
-Event.stop(_91);
-}
-return;
-}
-}else{
-if(_91.keyCode==Event.KEY_TAB||_91.keyCode==Event.KEY_RETURN){
-return;
-}
-}
-this.changed=true;
-this.hasFocus=true;
-if(this.observer){
-clearTimeout(this.observer);
-}
-this.observer=setTimeout(this.onObserverEvent.bind(this),this.options.frequency*1000);
-},onHover:function(_92){
-var _93=Event.findElement(_92,"LI");
-if(this.index!=_93.autocompleteIndex){
-this.index=_93.autocompleteIndex;
+if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
+if(this.iefix) Element.hide(this.iefix);
+},
+startIndicator: function() {
+if(this.options.indicator) Element.show(this.options.indicator);
+},
+stopIndicator: function() {
+if(this.options.indicator) Element.hide(this.options.indicator);
+},
+onKeyPress: function(event) {
+if(this.active)
+switch(event.keyCode) {
+ case Event.KEY_TAB:
+ case Event.KEY_RETURN:
+ this.selectEntry();
+ Event.stop(event);
+ case Event.KEY_ESC:
+ this.hide();
+ this.active = false;
+ Event.stop(event);
+ return;
+ case Event.KEY_LEFT:
+ case Event.KEY_RIGHT:
+ return;
+ case Event.KEY_UP:
+ this.markPrevious();
+ this.render();
+ if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
+ return;
+ case Event.KEY_DOWN:
+ this.markNext();
+ this.render();
+ if(navigator.appVersion.indexOf('AppleWebKit')>0) Event.stop(event);
+ return;
+}
+ else
+ if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN ||
+ (navigator.appVersion.indexOf('AppleWebKit') > 0 && event.keyCode == 0)) return;
+this.changed = true;
+this.hasFocus = true;
+if(this.observer) clearTimeout(this.observer);
+this.observer =
+setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
+},
+activate: function() {
+this.changed = false;
+this.hasFocus = true;
+this.getUpdatedChoices();
+},
+onHover: function(event) {
+var element = Event.findElement(event, 'LI');
+if(this.index != element.autocompleteIndex)
+{
+this.index = element.autocompleteIndex;
this.render();
}
-Event.stop(_92);
-},onClick:function(_94){
-var _95=Event.findElement(_94,"LI");
-this.index=_95.autocompleteIndex;
+Event.stop(event);
+},
+onClick: function(event) {
+var element = Event.findElement(event, 'LI');
+this.index = element.autocompleteIndex;
this.selectEntry();
this.hide();
-},onBlur:function(_96){
-setTimeout(this.hide.bind(this),250);
-this.hasFocus=false;
-this.active=false;
-},render:function(){
-if(this.entryCount>0){
-for(var i=0;i<this.entryCount;i++){
-this.index==i?Element.addClassName(this.getEntry(i),"selected"):Element.removeClassName(this.getEntry(i),"selected");
-}
-if(this.hasFocus){
+},
+onBlur: function(event) {
+ setTimeout(this.hide.bind(this), 250);
+this.hasFocus = false;
+this.active = false;
+},
+render: function() {
+if(this.entryCount > 0) {
+for (var i = 0; i < this.entryCount; i++)
+this.index==i ?
+Element.addClassName(this.getEntry(i),"selected") :
+Element.removeClassName(this.getEntry(i),"selected");
+if(this.hasFocus) {
this.show();
-this.active=true;
+this.active = true;
}
-}else{
-this.active=false;
+} else {
+this.active = false;
this.hide();
}
-},markPrevious:function(){
-if(this.index>0){
-this.index--;
-}else{
-this.index=this.entryCount-1;
-}
-},markNext:function(){
-if(this.index<this.entryCount-1){
-this.index++;
-}else{
-this.index=0;
-}
-},getEntry:function(_97){
-return this.update.firstChild.childNodes[_97];
-},getCurrentEntry:function(){
+},
+markPrevious: function() {
+if(this.index > 0) this.index--
+else this.index = this.entryCount-1;
+},
+markNext: function() {
+if(this.index < this.entryCount-1) this.index++
+else this.index = 0;
+},
+getEntry: function(index) {
+return this.update.firstChild.childNodes[index];
+},
+getCurrentEntry: function() {
return this.getEntry(this.index);
-},selectEntry:function(){
-this.active=false;
+},
+selectEntry: function() {
+this.active = false;
this.updateElement(this.getCurrentEntry());
-},updateElement:function(_98){
-if(this.options.updateElement){
-this.options.updateElement(_98);
+},
+updateElement: function(selectedElement) {
+if (this.options.updateElement) {
+this.options.updateElement(selectedElement);
return;
}
-var _99="";
-if(this.options.select){
-var _100=document.getElementsByClassName(this.options.select,_98)||[];
-if(_100.length>0){
-_99=Element.collectTextNodes(_100[0],this.options.select);
-}
-}else{
-_99=Element.collectTextNodesIgnoreClass(_98,"informal");
-}
-var _101=this.findLastToken();
-if(_101!=-1){
-var _102=this.element.value.substr(0,_101+1);
-var _103=this.element.value.substr(_101+1).match(/^\s+/);
-if(_103){
-_102+=_103[0];
-}
-this.element.value=_102+_99;
-}else{
-this.element.value=_99;
+var value = '';
+if (this.options.select) {
+var nodes = document.getElementsByClassName(this.options.select, selectedElement) || [];
+if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
+} else
+value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+var lastTokenPos = this.findLastToken();
+if (lastTokenPos != -1) {
+var newValue = this.element.value.substr(0, lastTokenPos + 1);
+var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
+if (whitespace)
+newValue += whitespace[0];
+this.element.value = newValue + value;
+} else {
+this.element.value = value;
}
this.element.focus();
-if(this.options.afterUpdateElement){
-this.options.afterUpdateElement(this.element,_98);
-}
-},updateChoices:function(_104){
-if(!this.changed&&this.hasFocus){
-this.update.innerHTML=_104;
+if (this.options.afterUpdateElement)
+this.options.afterUpdateElement(this.element, selectedElement);
+},
+updateChoices: function(choices) {
+if(!this.changed && this.hasFocus) {
+this.update.innerHTML = choices;
Element.cleanWhitespace(this.update);
Element.cleanWhitespace(this.update.firstChild);
-if(this.update.firstChild&&this.update.firstChild.childNodes){
-this.entryCount=this.update.firstChild.childNodes.length;
-for(var i=0;i<this.entryCount;i++){
-var _105=this.getEntry(i);
-_105.autocompleteIndex=i;
-this.addObservers(_105);
+if(this.update.firstChild && this.update.firstChild.childNodes) {
+this.entryCount =
+this.update.firstChild.childNodes.length;
+for (var i = 0; i < this.entryCount; i++) {
+var entry = this.getEntry(i);
+entry.autocompleteIndex = i;
+this.addObservers(entry);
}
-}else{
-this.entryCount=0;
+} else {
+this.entryCount = 0;
}
this.stopIndicator();
-this.index=0;
+this.index = 0;
this.render();
}
-},addObservers:function(_106){
-Event.observe(_106,"mouseover",this.onHover.bindAsEventListener(this));
-Event.observe(_106,"click",this.onClick.bindAsEventListener(this));
-},onObserverEvent:function(){
-this.changed=false;
-if(this.getToken().length>=this.options.minChars){
+},
+addObservers: function(element) {
+Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
+Event.observe(element, "click", this.onClick.bindAsEventListener(this));
+},
+onObserverEvent: function() {
+this.changed = false;
+if(this.getToken().length>=this.options.minChars) {
this.startIndicator();
this.getUpdatedChoices();
-}else{
-this.active=false;
+} else {
+this.active = false;
this.hide();
}
-},getToken:function(){
-var _107=this.findLastToken();
-if(_107!=-1){
-var ret=this.element.value.substr(_107+1).replace(/^\s+/,"").replace(/\s+$/,"");
-}else{
-var ret=this.element.value;
-}
-return /\n/.test(ret)?"":ret;
-},findLastToken:function(){
-var _109=-1;
-for(var i=0;i<this.options.tokens.length;i++){
-var _110=this.element.value.lastIndexOf(this.options.tokens[i]);
-if(_110>_109){
-_109=_110;
-}
-}
-return _109;
-}};
-Ajax.Autocompleter=Class.create();
-Object.extend(Object.extend(Ajax.Autocompleter.prototype,Autocompleter.Base.prototype),{initialize:function(_111,_112,url,_113){
-this.baseInitialize(_111,_112,_113);
-this.options.asynchronous=true;
-this.options.onComplete=this.onComplete.bind(this);
-this.options.defaultParams=this.options.parameters||null;
-this.url=url;
-},getUpdatedChoices:function(){
-entry=encodeURIComponent(this.options.paramName)+"="+encodeURIComponent(this.getToken());
-this.options.parameters=this.options.callback?this.options.callback(this.element,entry):entry;
-if(this.options.defaultParams){
-this.options.parameters+="&"+this.options.defaultParams;
-}
-new Ajax.Request(this.url,this.options);
-},onComplete:function(_114){
-this.updateChoices(_114.responseText);
-}});
-Autocompleter.Local=Class.create();
-Autocompleter.Local.prototype=Object.extend(new Autocompleter.Base(),{initialize:function(_115,_116,_117,_118){
-this.baseInitialize(_115,_116,_118);
-this.options.array=_117;
-},getUpdatedChoices:function(){
+},
+getToken: function() {
+var tokenPos = this.findLastToken();
+if (tokenPos != -1)
+var ret = this.element.value.substr(tokenPos + 1).replace(/^\s+/,'').replace(/\s+$/,'');
+else
+var ret = this.element.value;
+return /\n/.test(ret) ? '' : ret;
+},
+findLastToken: function() {
+var lastTokenPos = -1;
+for (var i=0; i<this.options.tokens.length; i++) {
+var thisTokenPos = this.element.value.lastIndexOf(this.options.tokens[i]);
+if (thisTokenPos > lastTokenPos)
+lastTokenPos = thisTokenPos;
+}
+return lastTokenPos;
+}
+}
+Ajax.Autocompleter = Class.create();
+Object.extend(Object.extend(Ajax.Autocompleter.prototype, Autocompleter.Base.prototype), {
+initialize: function(element, update, url, options) {
+this.baseInitialize(element, update, options);
+this.options.asynchronous= true;
+this.options.onComplete= this.onComplete.bind(this);
+this.options.defaultParams = this.options.parameters || null;
+this.url = url;
+},
+getUpdatedChoices: function() {
+entry = encodeURIComponent(this.options.paramName) + '=' +
+encodeURIComponent(this.getToken());
+this.options.parameters = this.options.callback ?
+this.options.callback(this.element, entry) : entry;
+if(this.options.defaultParams)
+this.options.parameters += '&' + this.options.defaultParams;
+new Ajax.Request(this.url, this.options);
+},
+onComplete: function(request) {
+this.updateChoices(request.responseText);
+}
+});
+Autocompleter.Local = Class.create();
+Autocompleter.Local.prototype = Object.extend(new Autocompleter.Base(), {
+initialize: function(element, update, array, options) {
+this.baseInitialize(element, update, options);
+this.options.array = array;
+},
+getUpdatedChoices: function() {
this.updateChoices(this.options.selector(this));
-},setOptions:function(_119){
-this.options=Object.extend({choices:10,partialSearch:true,partialChars:2,ignoreCase:true,fullSearch:false,selector:function(_120){
-var ret=[];
-var _121=[];
-var _122=_120.getToken();
-var _123=0;
-for(var i=0;i<_120.options.array.length&&ret.length<_120.options.choices;i++){
-var elem=_120.options.array[i];
-var _125=_120.options.ignoreCase?elem.toLowerCase().indexOf(_122.toLowerCase()):elem.indexOf(_122);
-while(_125!=-1){
-if(_125==0&&elem.length!=_122.length){
-ret.push("<li><strong>"+elem.substr(0,_122.length)+"</strong>"+elem.substr(_122.length)+"</li>");
+},
+setOptions: function(options) {
+this.options = Object.extend({
+choices: 10,
+partialSearch: true,
+partialChars: 2,
+ignoreCase: true,
+fullSearch: false,
+selector: function(instance) {
+var ret = [];var partial = [];var entry = instance.getToken();
+var count = 0;
+for (var i = 0; i < instance.options.array.length &&
+ret.length < instance.options.choices ; i++) {
+var elem = instance.options.array[i];
+var foundPos = instance.options.ignoreCase ?
+elem.toLowerCase().indexOf(entry.toLowerCase()) :
+elem.indexOf(entry);
+while (foundPos != -1) {
+if (foundPos == 0 && elem.length != entry.length) {
+ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" +
+elem.substr(entry.length) + "</li>");
break;
-}else{
-if(_122.length>=_120.options.partialChars&&_120.options.partialSearch&&_125!=-1){
-if(_120.options.fullSearch||/\s/.test(elem.substr(_125-1,1))){
-_121.push("<li>"+elem.substr(0,_125)+"<strong>"+elem.substr(_125,_122.length)+"</strong>"+elem.substr(_125+_122.length)+"</li>");
+} else if (entry.length >= instance.options.partialChars &&
+instance.options.partialSearch && foundPos != -1) {
+if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
+partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
+elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
+foundPos + entry.length) + "</li>");
break;
}
}
+foundPos = instance.options.ignoreCase ?
+elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) :
+elem.indexOf(entry, foundPos + 1);
}
-_125=_120.options.ignoreCase?elem.toLowerCase().indexOf(_122.toLowerCase(),_125+1):elem.indexOf(_122,_125+1);
}
+if (partial.length)
+ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
+return "<ul>" + ret.join('') + "</ul>";
}
-if(_121.length){
-ret=ret.concat(_121.slice(0,_120.options.choices-ret.length));
+}, options || {});
}
-return "<ul>"+ret.join("")+"</ul>";
-}},_119||{});
-}});
-Field.scrollFreeActivate=function(_126){
-setTimeout(function(){
-Field.activate(_126);
-},1);
-};
-Ajax.InPlaceEditor=Class.create();
-Ajax.InPlaceEditor.defaultHighlightColor="#FFFF99";
-Ajax.InPlaceEditor.prototype={initialize:function(_127,url,_128){
-this.url=url;
-this.element=$(_127);
-this.options=Object.extend({okButton:true,okText:"ok",cancelLink:true,cancelText:"cancel",savingText:"Saving...",clickToEditText:"Click to edit",okText:"ok",rows:1,onComplete:function(_129,_127){
-new Effect.Highlight(_127,{startcolor:this.options.highlightcolor});
-},onFailure:function(_130){
-alert("Error communicating with the server: "+_130.responseText.stripTags());
-},callback:function(form){
+});
+Field.scrollFreeActivate = function(field) {
+setTimeout(function() {
+Field.activate(field);
+}, 1);
+}
+Ajax.InPlaceEditor = Class.create();
+Ajax.InPlaceEditor.defaultHighlightColor = "#FFFF99";
+Ajax.InPlaceEditor.prototype = {
+initialize: function(element, url, options) {
+this.url = url;
+this.element = $(element);
+this.options = Object.extend({
+okButton: true,
+okText: "ok",
+cancelLink: true,
+cancelText: "cancel",
+savingText: "Saving...",
+clickToEditText: "Click to edit",
+okText: "ok",
+rows: 1,
+onComplete: function(transport, element) {
+new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
+},
+onFailure: function(transport) {
+alert("Error communicating with the server: " + transport.responseText.stripTags());
+},
+callback: function(form) {
return Form.serialize(form);
-},handleLineBreaks:true,loadingText:"Loading...",savingClassName:"inplaceeditor-saving",loadingClassName:"inplaceeditor-loading",formClassName:"inplaceeditor-form",highlightcolor:Ajax.InPlaceEditor.defaultHighlightColor,highlightendcolor:"#FFFFFF",externalControl:null,submitOnBlur:false,ajaxOptions:{}},_128||{});
-if(!this.options.formId&&this.element.id){
-this.options.formId=this.element.id+"-inplaceeditor";
-if($(this.options.formId)){
-this.options.formId=null;
-}
-}
-if(this.options.externalControl){
-this.options.externalControl=$(this.options.externalControl);
-}
-this.originalBackground=Element.getStyle(this.element,"background-color");
-if(!this.originalBackground){
-this.originalBackground="transparent";
-}
-this.element.title=this.options.clickToEditText;
-this.onclickListener=this.enterEditMode.bindAsEventListener(this);
-this.mouseoverListener=this.enterHover.bindAsEventListener(this);
-this.mouseoutListener=this.leaveHover.bindAsEventListener(this);
-Event.observe(this.element,"click",this.onclickListener);
-Event.observe(this.element,"mouseover",this.mouseoverListener);
-Event.observe(this.element,"mouseout",this.mouseoutListener);
-if(this.options.externalControl){
-Event.observe(this.options.externalControl,"click",this.onclickListener);
-Event.observe(this.options.externalControl,"mouseover",this.mouseoverListener);
-Event.observe(this.options.externalControl,"mouseout",this.mouseoutListener);
-}
-},enterEditMode:function(evt){
-if(this.saving){
-return;
-}
-if(this.editing){
-return;
-}
-this.editing=true;
+},
+handleLineBreaks: true,
+loadingText: 'Loading...',
+savingClassName: 'inplaceeditor-saving',
+loadingClassName: 'inplaceeditor-loading',
+formClassName: 'inplaceeditor-form',
+highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
+highlightendcolor: "#FFFFFF",
+externalControl: null,
+submitOnBlur: false,
+ajaxOptions: {},
+evalScripts: false
+}, options || {});
+if(!this.options.formId && this.element.id) {
+this.options.formId = this.element.id + "-inplaceeditor";
+if ($(this.options.formId)) {
+ this.options.formId = null;
+}
+}
+if (this.options.externalControl) {
+this.options.externalControl = $(this.options.externalControl);
+}
+this.originalBackground = Element.getStyle(this.element, 'background-color');
+if (!this.originalBackground) {
+this.originalBackground = "transparent";
+}
+this.element.title = this.options.clickToEditText;
+this.onclickListener = this.enterEditMode.bindAsEventListener(this);
+this.mouseoverListener = this.enterHover.bindAsEventListener(this);
+this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
+Event.observe(this.element, 'click', this.onclickListener);
+Event.observe(this.element, 'mouseover', this.mouseoverListener);
+Event.observe(this.element, 'mouseout', this.mouseoutListener);
+if (this.options.externalControl) {
+Event.observe(this.options.externalControl, 'click', this.onclickListener);
+Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
+Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);
+}
+},
+enterEditMode: function(evt) {
+if (this.saving) return;
+if (this.editing) return;
+this.editing = true;
this.onEnterEditMode();
-if(this.options.externalControl){
+if (this.options.externalControl) {
Element.hide(this.options.externalControl);
}
Element.hide(this.element);
this.createForm();
-this.element.parentNode.insertBefore(this.form,this.element);
+this.element.parentNode.insertBefore(this.form, this.element);
Field.scrollFreeActivate(this.editField);
-if(evt){
+ if (evt) {
Event.stop(evt);
}
return false;
-},createForm:function(){
-this.form=document.createElement("form");
-this.form.id=this.options.formId;
-Element.addClassName(this.form,this.options.formClassName);
-this.form.onsubmit=this.onSubmit.bind(this);
+},
+createForm: function() {
+this.form = document.createElement("form");
+this.form.id = this.options.formId;
+Element.addClassName(this.form, this.options.formClassName)
+this.form.onsubmit = this.onSubmit.bind(this);
this.createEditField();
-if(this.options.textarea){
-var br=document.createElement("br");
+if (this.options.textarea) {
+var br = document.createElement("br");
this.form.appendChild(br);
}
-if(this.options.okButton){
-okButton=document.createElement("input");
-okButton.type="submit";
-okButton.value=this.options.okText;
+if (this.options.okButton) {
+okButton = document.createElement("input");
+okButton.type = "submit";
+okButton.value = this.options.okText;
+okButton.className = 'editor_ok_button';
this.form.appendChild(okButton);
}
-if(this.options.cancelLink){
-cancelLink=document.createElement("a");
-cancelLink.href="#";
+if (this.options.cancelLink) {
+cancelLink = document.createElement("a");
+cancelLink.href = "#";
cancelLink.appendChild(document.createTextNode(this.options.cancelText));
-cancelLink.onclick=this.onclickCancel.bind(this);
+cancelLink.onclick = this.onclickCancel.bind(this);
+cancelLink.className = 'editor_cancel';
this.form.appendChild(cancelLink);
}
-},hasHTMLLineBreaks:function(_134){
-if(!this.options.handleLineBreaks){
-return false;
-}
-return _134.match(/<br/i)||_134.match(/<p>/i);
-},convertHTMLLineBreaks:function(_135){
-return _135.replace(/<br>/gi,"\n").replace(/<br\/>/gi,"\n").replace(/<\/p>/gi,"\n").replace(/<p>/gi,"");
-},createEditField:function(){
+},
+hasHTMLLineBreaks: function(string) {
+if (!this.options.handleLineBreaks) return false;
+return string.match(/<br/i) || string.match(/<p>/i);
+},
+convertHTMLLineBreaks: function(string) {
+return string.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
+},
+createEditField: function() {
var text;
-if(this.options.loadTextURL){
-text=this.options.loadingText;
-}else{
-text=this.getText();
-}
-var obj=this;
-if(this.options.rows==1&&!this.hasHTMLLineBreaks(text)){
-this.options.textarea=false;
-var _138=document.createElement("input");
-_138.obj=this;
-_138.type="text";
-_138.name="value";
-_138.value=text;
-_138.style.backgroundColor=this.options.highlightcolor;
-var size=this.options.size||this.options.cols||0;
-if(size!=0){
-_138.size=size;
-}
-if(this.options.submitOnBlur){
-_138.onblur=this.onSubmit.bind(this);
-}
-this.editField=_138;
-}else{
-this.options.textarea=true;
-var _140=document.createElement("textarea");
-_140.obj=this;
-_140.name="value";
-_140.value=this.convertHTMLLineBreaks(text);
-_140.rows=this.options.rows;
-_140.cols=this.options.cols||40;
-if(this.options.submitOnBlur){
-_140.onblur=this.onSubmit.bind(this);
-}
-this.editField=_140;
-}
-if(this.options.loadTextURL){
+if(this.options.loadTextURL) {
+text = this.options.loadingText;
+} else {
+text = this.getText();
+}
+var obj = this;
+if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
+this.options.textarea = false;
+var textField = document.createElement("input");
+textField.obj = this;
+textField.type = "text";
+textField.name = "value";
+textField.value = text;
+textField.style.backgroundColor = this.options.highlightcolor;
+textField.className = 'editor_field';
+var size = this.options.size || this.options.cols || 0;
+if (size != 0) textField.size = size;
+if (this.options.submitOnBlur)
+textField.onblur = this.onSubmit.bind(this);
+this.editField = textField;
+} else {
+this.options.textarea = true;
+var textArea = document.createElement("textarea");
+textArea.obj = this;
+textArea.name = "value";
+textArea.value = this.convertHTMLLineBreaks(text);
+textArea.rows = this.options.rows;
+textArea.cols = this.options.cols || 40;
+textArea.className = 'editor_field';
+if (this.options.submitOnBlur)
+textArea.onblur = this.onSubmit.bind(this);
+this.editField = textArea;
+}
+if(this.options.loadTextURL) {
this.loadExternalText();
}
this.form.appendChild(this.editField);
-},getText:function(){
+},
+getText: function() {
return this.element.innerHTML;
-},loadExternalText:function(){
-Element.addClassName(this.form,this.options.loadingClassName);
-this.editField.disabled=true;
-new Ajax.Request(this.options.loadTextURL,Object.extend({asynchronous:true,onComplete:this.onLoadedExternalText.bind(this)},this.options.ajaxOptions));
-},onLoadedExternalText:function(_141){
-Element.removeClassName(this.form,this.options.loadingClassName);
-this.editField.disabled=false;
-this.editField.value=_141.responseText.stripTags();
-},onclickCancel:function(){
+},
+loadExternalText: function() {
+Element.addClassName(this.form, this.options.loadingClassName);
+this.editField.disabled = true;
+new Ajax.Request(
+this.options.loadTextURL,
+Object.extend({
+asynchronous: true,
+onComplete: this.onLoadedExternalText.bind(this)
+}, this.options.ajaxOptions)
+);
+},
+onLoadedExternalText: function(transport) {
+Element.removeClassName(this.form, this.options.loadingClassName);
+this.editField.disabled = false;
+this.editField.value = transport.responseText.stripTags();
+},
+onclickCancel: function() {
this.onComplete();
this.leaveEditMode();
return false;
-},onFailure:function(_142){
-this.options.onFailure(_142);
-if(this.oldInnerHTML){
-this.element.innerHTML=this.oldInnerHTML;
-this.oldInnerHTML=null;
+},
+onFailure: function(transport) {
+this.options.onFailure(transport);
+if (this.oldInnerHTML) {
+this.element.innerHTML = this.oldInnerHTML;
+this.oldInnerHTML = null;
}
return false;
-},onSubmit:function(){
-var form=this.form;
-var _143=this.editField.value;
+},
+onSubmit: function() {
+ var form = this.form;
+var value = this.editField.value;
this.onLoading();
-new Ajax.Updater({success:this.element,failure:null},this.url,Object.extend({parameters:this.options.callback(form,_143),onComplete:this.onComplete.bind(this),onFailure:this.onFailure.bind(this)},this.options.ajaxOptions));
-if(arguments.length>1){
+if (this.options.evalScripts) {
+new Ajax.Request(
+this.url, Object.extend({
+parameters: this.options.callback(form, value),
+onComplete: this.onComplete.bind(this),
+onFailure: this.onFailure.bind(this),
+asynchronous:true,
+evalScripts:true
+}, this.options.ajaxOptions));
+} else{
+new Ajax.Updater(
+{ success: this.element,
+ failure: null },
+this.url, Object.extend({
+parameters: this.options.callback(form, value),
+onComplete: this.onComplete.bind(this),
+onFailure: this.onFailure.bind(this)
+}, this.options.ajaxOptions));
+}
+ if (arguments.length > 1) {
Event.stop(arguments[0]);
}
return false;
-},onLoading:function(){
-this.saving=true;
+},
+onLoading: function() {
+this.saving = true;
this.removeForm();
this.leaveHover();
this.showSaving();
-},showSaving:function(){
-this.oldInnerHTML=this.element.innerHTML;
-this.element.innerHTML=this.options.savingText;
-Element.addClassName(this.element,this.options.savingClassName);
-this.element.style.backgroundColor=this.originalBackground;
+},
+showSaving: function() {
+this.oldInnerHTML = this.element.innerHTML;
+this.element.innerHTML = this.options.savingText;
+Element.addClassName(this.element, this.options.savingClassName);
+this.element.style.backgroundColor = this.originalBackground;
Element.show(this.element);
-},removeForm:function(){
-if(this.form){
-if(this.form.parentNode){
-Element.remove(this.form);
-}
-this.form=null;
-}
-},enterHover:function(){
-if(this.saving){
-return;
-}
-this.element.style.backgroundColor=this.options.highlightcolor;
-if(this.effect){
+},
+removeForm: function() {
+if(this.form) {
+if (this.form.parentNode) Element.remove(this.form);
+this.form = null;
+}
+},
+enterHover: function() {
+if (this.saving) return;
+this.element.style.backgroundColor = this.options.highlightcolor;
+if (this.effect) {
this.effect.cancel();
}
-Element.addClassName(this.element,this.options.hoverClassName);
-},leaveHover:function(){
-if(this.options.backgroundColor){
-this.element.style.backgroundColor=this.oldBackground;
-}
-Element.removeClassName(this.element,this.options.hoverClassName);
-if(this.saving){
-return;
-}
-this.effect=new Effect.Highlight(this.element,{startcolor:this.options.highlightcolor,endcolor:this.options.highlightendcolor,restorecolor:this.originalBackground});
-},leaveEditMode:function(){
-Element.removeClassName(this.element,this.options.savingClassName);
+Element.addClassName(this.element, this.options.hoverClassName)
+},
+leaveHover: function() {
+if (this.options.backgroundColor) {
+this.element.style.backgroundColor = this.oldBackground;
+}
+Element.removeClassName(this.element, this.options.hoverClassName)
+if (this.saving) return;
+this.effect = new Effect.Highlight(this.element, {
+startcolor: this.options.highlightcolor,
+endcolor: this.options.highlightendcolor,
+restorecolor: this.originalBackground
+});
+},
+leaveEditMode: function() {
+Element.removeClassName(this.element, this.options.savingClassName);
this.removeForm();
this.leaveHover();
-this.element.style.backgroundColor=this.originalBackground;
+this.element.style.backgroundColor = this.originalBackground;
Element.show(this.element);
-if(this.options.externalControl){
+if (this.options.externalControl) {
Element.show(this.options.externalControl);
}
-this.editing=false;
-this.saving=false;
-this.oldInnerHTML=null;
+this.editing = false;
+this.saving = false;
+this.oldInnerHTML = null;
this.onLeaveEditMode();
-},onComplete:function(_144){
+},
+onComplete: function(transport) {
this.leaveEditMode();
-this.options.onComplete.bind(this)(_144,this.element);
-},onEnterEditMode:function(){
-},onLeaveEditMode:function(){
-},dispose:function(){
-if(this.oldInnerHTML){
-this.element.innerHTML=this.oldInnerHTML;
+this.options.onComplete.bind(this)(transport, this.element);
+},
+onEnterEditMode: function() {},
+onLeaveEditMode: function() {},
+dispose: function() {
+if (this.oldInnerHTML) {
+this.element.innerHTML = this.oldInnerHTML;
}
this.leaveEditMode();
-Event.stopObserving(this.element,"click",this.onclickListener);
-Event.stopObserving(this.element,"mouseover",this.mouseoverListener);
-Event.stopObserving(this.element,"mouseout",this.mouseoutListener);
-if(this.options.externalControl){
-Event.stopObserving(this.options.externalControl,"click",this.onclickListener);
-Event.stopObserving(this.options.externalControl,"mouseover",this.mouseoverListener);
-Event.stopObserving(this.options.externalControl,"mouseout",this.mouseoutListener);
-}
-}};
-Form.Element.DelayedObserver=Class.create();
-Form.Element.DelayedObserver.prototype={initialize:function(_145,_146,_147){
-this.delay=_146||0.5;
-this.element=$(_145);
-this.callback=_147;
-this.timer=null;
-this.lastValue=$F(this.element);
-Event.observe(this.element,"keyup",this.delayedListener.bindAsEventListener(this));
-},delayedListener:function(_148){
-if(this.lastValue==$F(this.element)){
-return;
+Event.stopObserving(this.element, 'click', this.onclickListener);
+Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
+Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
+if (this.options.externalControl) {
+Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
+Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
+Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
}
-if(this.timer){
-clearTimeout(this.timer);
}
-this.timer=setTimeout(this.onTimerEvent.bind(this),this.delay*1000);
-this.lastValue=$F(this.element);
-},onTimerEvent:function(){
-this.timer=null;
-this.callback(this.element,$F(this.element));
-}};
-var Droppables={drops:[],remove:function(_149){
-this.drops=this.drops.reject(function(d){
-return d.element==$(_149);
-});
-},add:function(_151){
-_151=$(_151);
-var _152=Object.extend({greedy:true,hoverclass:null},arguments[1]||{});
-if(_152.containment){
-_152._containers=[];
-var _153=_152.containment;
-if((typeof _153=="object")&&(_153.constructor==Array)){
-_153.each(function(c){
-_152._containers.push($(c));
-});
-}else{
-_152._containers.push($(_153));
+};
+Ajax.InPlaceCollectionEditor = Class.create();
+Object.extend(Ajax.InPlaceCollectionEditor.prototype, Ajax.InPlaceEditor.prototype);
+Object.extend(Ajax.InPlaceCollectionEditor.prototype, {
+createEditField: function() {
+if (!this.cached_selectTag) {
+var selectTag = document.createElement("select");
+var collection = this.options.collection || [];
+var optionTag;
+collection.each(function(e,i) {
+optionTag = document.createElement("option");
+optionTag.value = (e instanceof Array) ? e[0] : e;
+if(this.options.value==optionTag.value) optionTag.selected = true;
+optionTag.appendChild(document.createTextNode((e instanceof Array) ? e[1] : e));
+selectTag.appendChild(optionTag);
+}.bind(this));
+this.cached_selectTag = selectTag;
}
+this.editField = this.cached_selectTag;
+if(this.options.loadTextURL) this.loadExternalText();
+this.form.appendChild(this.editField);
+this.options.callback = function(form, value) {
+return "value=" + encodeURIComponent(value);
}
-if(_152.accept){
-_152.accept=[_152.accept].flatten();
}
-Element.makePositioned(_151);
-_152.element=_151;
-this.drops.push(_152);
-},isContained:function(_154,drop){
-var _156=_154.parentNode;
-return drop._containers.detect(function(c){
-return _156==c;
});
-},isAffected:function(_157,_158,drop){
-return ((drop.element!=_158)&&((!drop._containers)||this.isContained(_158,drop))&&((!drop.accept)||(Element.classNames(_158).detect(function(v){
-return drop.accept.include(v);
-})))&&Position.within(drop.element,_157[0],_157[1]));
-},deactivate:function(drop){
-if(drop.hoverclass){
-Element.removeClassName(drop.element,drop.hoverclass);
-}
-this.last_active=null;
-},activate:function(drop){
-if(drop.hoverclass){
-Element.addClassName(drop.element,drop.hoverclass);
-}
-this.last_active=drop;
-},show:function(_160,_161){
-if(!this.drops.length){
-return;
-}
-if(this.last_active){
-this.deactivate(this.last_active);
-}
-this.drops.each(function(drop){
-if(Droppables.isAffected(_160,_161,drop)){
-if(drop.onHover){
-drop.onHover(_161,drop.element,Position.overlap(drop.overlap,drop.element));
-}
-if(drop.greedy){
-Droppables.activate(drop);
-throw $break;
-}
+Form.Element.DelayedObserver = Class.create();
+Form.Element.DelayedObserver.prototype = {
+initialize: function(element, delay, callback) {
+this.delay = delay || 0.5;
+this.element = $(element);
+this.callback= callback;
+this.timer = null;
+this.lastValue = $F(this.element);
+Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
+},
+delayedListener: function(event) {
+if(this.lastValue == $F(this.element)) return;
+if(this.timer) clearTimeout(this.timer);
+this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
+this.lastValue = $F(this.element);
+},
+onTimerEvent: function() {
+this.timer = null;
+this.callback(this.element, $F(this.element));
}
+};
+var Droppables = {
+drops: [],
+remove: function(element) {
+this.drops = this.drops.reject(function(d) { return d.element==$(element) });
+},
+add: function(element) {
+element = $(element);
+var options = Object.extend({
+greedy: true,
+hoverclass: null,
+tree: false
+}, arguments[1] || {});
+if(options.containment) {
+options._containers = [];
+var containment = options.containment;
+if((typeof containment == 'object') &&
+(containment.constructor == Array)) {
+containment.each( function(c) { options._containers.push($(c)) });
+} else {
+options._containers.push($(containment));
+}
+}
+if(options.accept) options.accept = [options.accept].flatten();
+Element.makePositioned(element);options.element = element;
+this.drops.push(options);
+},
+findDeepestChild: function(drops) {
+deepest = drops[0];
+for (i = 1; i < drops.length; ++i)
+if (Element.isParent(drops[i].element, deepest.element))
+deepest = drops[i];
+return deepest;
+},
+isContained: function(element, drop) {
+var containmentNode;
+if(drop.tree) {
+containmentNode = element.treeNode;
+} else {
+containmentNode = element.parentNode;
+}
+return drop._containers.detect(function(c) { return containmentNode == c });
+},
+isAffected: function(point, element, drop) {
+return (
+(drop.element!=element) &&
+((!drop._containers) ||
+this.isContained(element, drop)) &&
+((!drop.accept) ||
+(Element.classNames(element).detect(
+function(v) { return drop.accept.include(v) } ) )) &&
+Position.within(drop.element, point[0], point[1]) );
+},
+deactivate: function(drop) {
+if(drop.hoverclass)
+Element.removeClassName(drop.element, drop.hoverclass);
+this.last_active = null;
+},
+activate: function(drop) {
+if(drop.hoverclass)
+Element.addClassName(drop.element, drop.hoverclass);
+this.last_active = drop;
+},
+show: function(point, element) {
+if(!this.drops.length) return;
+var affected = [];
+if(this.last_active) this.deactivate(this.last_active);
+this.drops.each( function(drop) {
+if(Droppables.isAffected(point, element, drop))
+affected.push(drop);
});
-},fire:function(_162,_163){
-if(!this.last_active){
-return;
+if(affected.length>0) {
+drop = Droppables.findDeepestChild(affected);
+Position.within(drop.element, point[0], point[1]);
+if(drop.onHover)
+drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));
+Droppables.activate(drop);
}
+},
+fire: function(event, element) {
+if(!this.last_active) return;
Position.prepare();
-if(this.isAffected([Event.pointerX(_162),Event.pointerY(_162)],_163,this.last_active)){
-if(this.last_active.onDrop){
-this.last_active.onDrop(_163,this.last_active.element,_162);
-}
-}
-},reset:function(){
-if(this.last_active){
+if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
+if (this.last_active.onDrop)
+this.last_active.onDrop(element, this.last_active.element, event);
+},
+reset: function() {
+if(this.last_active)
this.deactivate(this.last_active);
}
-}};
-var Draggables={drags:[],observers:[],register:function(_164){
-if(this.drags.length==0){
-this.eventMouseUp=this.endDrag.bindAsEventListener(this);
-this.eventMouseMove=this.updateDrag.bindAsEventListener(this);
-this.eventKeypress=this.keyPress.bindAsEventListener(this);
-Event.observe(document,"mouseup",this.eventMouseUp);
-Event.observe(document,"mousemove",this.eventMouseMove);
-Event.observe(document,"keypress",this.eventKeypress);
-}
-this.drags.push(_164);
-},unregister:function(_165){
-this.drags=this.drags.reject(function(d){
-return d==_165;
-});
-if(this.drags.length==0){
-Event.stopObserving(document,"mouseup",this.eventMouseUp);
-Event.stopObserving(document,"mousemove",this.eventMouseMove);
-Event.stopObserving(document,"keypress",this.eventKeypress);
-}
-},activate:function(_166){
-window.focus();
-this.activeDraggable=_166;
-},deactivate:function(_167){
-this.activeDraggable=null;
-},updateDrag:function(_168){
-if(!this.activeDraggable){
-return;
}
-var _169=[Event.pointerX(_168),Event.pointerY(_168)];
-if(this._lastPointer&&(this._lastPointer.inspect()==_169.inspect())){
-return;
-}
-this._lastPointer=_169;
-this.activeDraggable.updateDrag(_168,_169);
-},endDrag:function(_170){
-if(!this.activeDraggable){
-return;
-}
-this._lastPointer=null;
-this.activeDraggable.endDrag(_170);
-this.activeDraggable=null;
-},keyPress:function(_171){
-if(this.activeDraggable){
-this.activeDraggable.keyPress(_171);
-}
-},addObserver:function(_172){
-this.observers.push(_172);
+var Draggables = {
+drags: [],
+observers: [],
+register: function(draggable) {
+if(this.drags.length == 0) {
+this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
+this.eventKeypress= this.keyPress.bindAsEventListener(this);
+Event.observe(document, "mouseup", this.eventMouseUp);
+Event.observe(document, "mousemove", this.eventMouseMove);
+Event.observe(document, "keypress", this.eventKeypress);
+}
+this.drags.push(draggable);
+},
+unregister: function(draggable) {
+this.drags = this.drags.reject(function(d) { return d==draggable });
+if(this.drags.length == 0) {
+Event.stopObserving(document, "mouseup", this.eventMouseUp);
+Event.stopObserving(document, "mousemove", this.eventMouseMove);
+Event.stopObserving(document, "keypress", this.eventKeypress);
+}
+},
+activate: function(draggable) {
+window.focus();this.activeDraggable = draggable;
+},
+deactivate: function() {
+this.activeDraggable = null;
+},
+updateDrag: function(event) {
+if(!this.activeDraggable) return;
+var pointer = [Event.pointerX(event), Event.pointerY(event)];
+if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
+this._lastPointer = pointer;
+this.activeDraggable.updateDrag(event, pointer);
+},
+endDrag: function(event) {
+if(!this.activeDraggable) return;
+this._lastPointer = null;
+this.activeDraggable.endDrag(event);
+this.activeDraggable = null;
+},
+keyPress: function(event) {
+if(this.activeDraggable)
+this.activeDraggable.keyPress(event);
+},
+addObserver: function(observer) {
+this.observers.push(observer);
this._cacheObserverCallbacks();
-},removeObserver:function(_173){
-this.observers=this.observers.reject(function(o){
-return o.element==_173;
-});
+},
+removeObserver: function(element) { this.observers = this.observers.reject( function(o) { return o.element==element });
this._cacheObserverCallbacks();
-},notify:function(_175,_176,_177){
-if(this[_175+"Count"]>0){
-this.observers.each(function(o){
-if(o[_175]){
-o[_175](_175,_176,_177);
-}
+},
+notify: function(eventName, draggable, event) { if(this[eventName+'Count'] > 0)
+this.observers.each( function(o) {
+if(o[eventName]) o[eventName](eventName, draggable, event);
});
-}
-},_cacheObserverCallbacks:function(){
-["onStart","onEnd","onDrag"].each(function(_178){
-Draggables[_178+"Count"]=Draggables.observers.select(function(o){
-return o[_178];
-}).length;
+},
+_cacheObserverCallbacks: function() {
+['onStart','onEnd','onDrag'].each( function(eventName) {
+Draggables[eventName+'Count'] = Draggables.observers.select(
+function(o) { return o[eventName]; }
+).length;
});
-}};
-var Draggable=Class.create();
-Draggable.prototype={initialize:function(_179){
-var _180=Object.extend({handle:false,starteffect:function(_179){
-new Effect.Opacity(_179,{duration:0.2,from:1,to:0.7});
-},reverteffect:function(_181,_182,_183){
-var dur=Math.sqrt(Math.abs(_182^2)+Math.abs(_183^2))*0.02;
-_181._revert=new Effect.Move(_181,{x:-_183,y:-_182,duration:dur});
-},endeffect:function(_185){
-new Effect.Opacity(_185,{duration:0.2,from:0.7,to:1});
-},zindex:1000,revert:false,snap:false},arguments[1]||{});
-this.element=$(element);
-if(_180.handle&&(typeof _180.handle=="string")){
-this.handle=Element.childrenWithClassName(this.element,_180.handle)[0];
-}
-if(!this.handle){
-this.handle=$(_180.handle);
-}
-if(!this.handle){
-this.handle=this.element;
}
+}
+var Draggable = Class.create();
+Draggable.prototype = {
+initialize: function(element) {
+var options = Object.extend({
+handle: false,
+starteffect: function(element) {
+element._opacity = Element.getOpacity(element);
+new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
+},
+reverteffect: function(element, top_offset, left_offset) {
+var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
+element._revert = new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur});
+},
+endeffect: function(element) {
+var toOpacity = typeof element._opacity == 'number' ? element._opacity : 1.0
+new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity});
+},
+zindex: 1000,
+revert: false,
+scroll: false,
+scrollSensitivity: 20,
+scrollSpeed: 15,
+snap: false}, arguments[1] || {});
+this.element = $(element);
+if(options.handle && (typeof options.handle == 'string')) {
+var h = Element.childrenWithClassName(this.element, options.handle, true);
+if(h.length>0) this.handle = h[0];
+}
+if(!this.handle) this.handle = $(options.handle);
+if(!this.handle) this.handle = this.element;
+if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML)
+options.scroll = $(options.scroll);
Element.makePositioned(this.element);
-this.delta=this.currentDelta();
-this.options=_180;
-this.dragging=false;
-this.eventMouseDown=this.initDrag.bindAsEventListener(this);
-Event.observe(this.handle,"mousedown",this.eventMouseDown);
+this.delta= this.currentDelta();
+this.options= options;
+this.dragging = false;
+this.eventMouseDown = this.initDrag.bindAsEventListener(this);
+Event.observe(this.handle, "mousedown", this.eventMouseDown);
Draggables.register(this);
-},destroy:function(){
-Event.stopObserving(this.handle,"mousedown",this.eventMouseDown);
+},
+destroy: function() {
+Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
Draggables.unregister(this);
-},currentDelta:function(){
-return ([parseInt(Element.getStyle(this.element,"left")||"0"),parseInt(Element.getStyle(this.element,"top")||"0")]);
-},initDrag:function(_186){
-if(Event.isLeftClick(_186)){
-var src=Event.element(_186);
-if(src.tagName&&(src.tagName=="INPUT"||src.tagName=="SELECT"||src.tagName=="BUTTON"||src.tagName=="TEXTAREA")){
-return;
-}
-if(this.element._revert){
+},
+currentDelta: function() {
+return([
+parseInt(Element.getStyle(this.element,'left') || '0'),
+parseInt(Element.getStyle(this.element,'top') || '0')]);
+},
+initDrag: function(event) {
+if(Event.isLeftClick(event)) {
+ var src = Event.element(event);
+if(src.tagName && (
+src.tagName=='INPUT' ||
+src.tagName=='SELECT' ||
+src.tagName=='OPTION' ||
+src.tagName=='BUTTON' ||
+src.tagName=='TEXTAREA')) return;
+if(this.element._revert) {
this.element._revert.cancel();
-this.element._revert=null;
+this.element._revert = null;
}
-var _188=[Event.pointerX(_186),Event.pointerY(_186)];
-var pos=Position.cumulativeOffset(this.element);
-this.offset=[0,1].map(function(i){
-return (_188[i]-pos[i]);
-});
+var pointer = [Event.pointerX(event), Event.pointerY(event)];
+var pos = Position.cumulativeOffset(this.element);
+this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });
Draggables.activate(this);
-Event.stop(_186);
+Event.stop(event);
}
-},startDrag:function(_190){
-this.dragging=true;
-if(this.options.zindex){
-this.originalZ=parseInt(Element.getStyle(this.element,"z-index")||0);
-this.element.style.zIndex=this.options.zindex;
+},
+startDrag: function(event) {
+this.dragging = true;
+if(this.options.zindex) {
+this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
+this.element.style.zIndex = this.options.zindex;
}
-if(this.options.ghosting){
-this._clone=this.element.cloneNode(true);
+if(this.options.ghosting) {
+this._clone = this.element.cloneNode(true);
Position.absolutize(this.element);
-this.element.parentNode.insertBefore(this._clone,this.element);
-}
-Draggables.notify("onStart",this,_190);
-if(this.options.starteffect){
-this.options.starteffect(this.element);
-}
-},updateDrag:function(_191,_192){
-if(!this.dragging){
-this.startDrag(_191);
-}
+this.element.parentNode.insertBefore(this._clone, this.element);
+}
+if(this.options.scroll) {
+if (this.options.scroll == window) {
+var where = this._getWindowScroll(this.options.scroll);
+this.originalScrollLeft = where.left;
+this.originalScrollTop = where.top;
+} else {
+this.originalScrollLeft = this.options.scroll.scrollLeft;
+this.originalScrollTop = this.options.scroll.scrollTop;
+}
+}
+Draggables.notify('onStart', this, event);
+if(this.options.starteffect) this.options.starteffect(this.element);
+},
+updateDrag: function(event, pointer) {
+if(!this.dragging) this.startDrag(event);
Position.prepare();
-Droppables.show(_192,this.element);
-Draggables.notify("onDrag",this,_191);
-this.draw(_192);
-if(this.options.change){
-this.options.change(this);
-}
-if(navigator.appVersion.indexOf("AppleWebKit")>0){
-window.scrollBy(0,0);
-}
-Event.stop(_191);
-},finishDrag:function(_193,_194){
-this.dragging=false;
-if(this.options.ghosting){
+Droppables.show(pointer, this.element);
+Draggables.notify('onDrag', this, event);
+this.draw(pointer);
+if(this.options.change) this.options.change(this);
+if(this.options.scroll) {
+this.stopScrolling();
+var p;
+if (this.options.scroll == window) {
+with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
+} else {
+p = Position.page(this.options.scroll);
+p[0] += this.options.scroll.scrollLeft;
+p[1] += this.options.scroll.scrollTop;
+p.push(p[0]+this.options.scroll.offsetWidth);
+p.push(p[1]+this.options.scroll.offsetHeight);
+}
+var speed = [0,0];
+if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
+if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
+if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
+if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
+this.startScrolling(speed);
+}
+if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
+Event.stop(event);
+},
+finishDrag: function(event, success) {
+this.dragging = false;
+if(this.options.ghosting) {
Position.relativize(this.element);
Element.remove(this._clone);
-this._clone=null;
-}
-if(_194){
-Droppables.fire(_193,this.element);
-}
-Draggables.notify("onEnd",this,_193);
-var _195=this.options.revert;
-if(_195&&typeof _195=="function"){
-_195=_195(this.element);
-}
-var d=this.currentDelta();
-if(_195&&this.options.reverteffect){
-this.options.reverteffect(this.element,d[1]-this.delta[1],d[0]-this.delta[0]);
-}else{
-this.delta=d;
-}
-if(this.options.zindex){
-this.element.style.zIndex=this.originalZ;
-}
-if(this.options.endeffect){
+this._clone = null;
+}
+if(success) Droppables.fire(event, this.element);
+Draggables.notify('onEnd', this, event);
+var revert = this.options.revert;
+if(revert && typeof revert == 'function') revert = revert(this.element);
+var d = this.currentDelta();
+if(revert && this.options.reverteffect) {
+this.options.reverteffect(this.element,
+d[1]-this.delta[1], d[0]-this.delta[0]);
+} else {
+this.delta = d;
+}
+if(this.options.zindex)
+this.element.style.zIndex = this.originalZ;
+if(this.options.endeffect)
this.options.endeffect(this.element);
-}
Draggables.deactivate(this);
Droppables.reset();
-},keyPress:function(_196){
-if(!_196.keyCode==Event.KEY_ESC){
-return;
-}
-this.finishDrag(_196,false);
-Event.stop(_196);
-},endDrag:function(_197){
-if(!this.dragging){
-return;
-}
-this.finishDrag(_197,true);
-Event.stop(_197);
-},draw:function(_198){
-var pos=Position.cumulativeOffset(this.element);
-var d=this.currentDelta();
-pos[0]-=d[0];
-pos[1]-=d[1];
-var p=[0,1].map(function(i){
-return (_198[i]-pos[i]-this.offset[i]);
-}.bind(this));
-if(this.options.snap){
-if(typeof this.options.snap=="function"){
-p=this.options.snap(p[0],p[1]);
-}else{
-if(this.options.snap instanceof Array){
-p=p.map(function(v,i){
-return Math.round(v/this.options.snap[i])*this.options.snap[i];
-}.bind(this));
-}else{
-p=p.map(function(v){
-return Math.round(v/this.options.snap)*this.options.snap;
+},
+keyPress: function(event) {
+if(event.keyCode!=Event.KEY_ESC) return;
+this.finishDrag(event, false);
+Event.stop(event);
+},
+endDrag: function(event) {
+if(!this.dragging) return;
+this.stopScrolling();
+this.finishDrag(event, true);
+Event.stop(event);
+},
+draw: function(point) {
+var pos = Position.cumulativeOffset(this.element);
+var d = this.currentDelta();
+pos[0] -= d[0]; pos[1] -= d[1];
+if(this.options.scroll && (this.options.scroll != window)) {
+pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
+pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
+}
+var p = [0,1].map(function(i){
+return (point[i]-pos[i]-this.offset[i])
}.bind(this));
+if(this.options.snap) {
+if(typeof this.options.snap == 'function') {
+p = this.options.snap(p[0],p[1],this);
+} else {
+if(this.options.snap instanceof Array) {
+p = p.map( function(v, i) {
+return Math.round(v/this.options.snap[i])*this.options.snap[i] }.bind(this))
+} else {
+p = p.map( function(v) {
+return Math.round(v/this.options.snap)*this.options.snap }.bind(this))
+}
+}}
+var style = this.element.style;
+if((!this.options.constraint) || (this.options.constraint=='horizontal'))
+style.left = p[0] + "px";
+if((!this.options.constraint) || (this.options.constraint=='vertical'))
+style.top= p[1] + "px";
+if(style.visibility=="hidden") style.visibility = "";},
+stopScrolling: function() {
+if(this.scrollInterval) {
+clearInterval(this.scrollInterval);
+this.scrollInterval = null;
+Draggables._lastScrollPointer = null;
+}
+},
+startScrolling: function(speed) {
+this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
+this.lastScrolled = new Date();
+this.scrollInterval = setInterval(this.scroll.bind(this), 10);
+},
+scroll: function() {
+var current = new Date();
+var delta = current - this.lastScrolled;
+this.lastScrolled = current;
+if(this.options.scroll == window) {
+with (this._getWindowScroll(this.options.scroll)) {
+if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
+var d = delta / 1000;
+this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
+}
+}
+} else {
+this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
+this.options.scroll.scrollTop+= this.scrollSpeed[1] * delta / 1000;
}
-}
-}
-var _200=this.element.style;
-if((!this.options.constraint)||(this.options.constraint=="horizontal")){
-_200.left=p[0]+"px";
-}
-if((!this.options.constraint)||(this.options.constraint=="vertical")){
-_200.top=p[1]+"px";
-}
-if(_200.visibility=="hidden"){
-_200.visibility="";
-}
-}};
-var SortableObserver=Class.create();
-SortableObserver.prototype={initialize:function(_201,_202){
-this.element=$(_201);
-this.observer=_202;
-this.lastValue=Sortable.serialize(this.element);
-},onStart:function(){
-this.lastValue=Sortable.serialize(this.element);
-},onEnd:function(){
+Position.prepare();
+Droppables.show(Draggables._lastPointer, this.element);
+Draggables.notify('onDrag', this);
+Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
+Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
+Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
+if (Draggables._lastScrollPointer[0] < 0)
+Draggables._lastScrollPointer[0] = 0;
+if (Draggables._lastScrollPointer[1] < 0)
+Draggables._lastScrollPointer[1] = 0;
+this.draw(Draggables._lastScrollPointer);
+if(this.options.change) this.options.change(this);
+},
+_getWindowScroll: function(w) {
+var T, L, W, H;
+with (w.document) {
+if (w.document.documentElement && documentElement.scrollTop) {
+T = documentElement.scrollTop;
+L = documentElement.scrollLeft;
+} else if (w.document.body) {
+T = body.scrollTop;
+L = body.scrollLeft;
+}
+if (w.innerWidth) {
+W = w.innerWidth;
+H = w.innerHeight;
+} else if (w.document.documentElement && documentElement.clientWidth) {
+W = documentElement.clientWidth;
+H = documentElement.clientHeight;
+} else {
+W = body.offsetWidth;
+H = body.offsetHeight
+}
+}
+return { top: T, left: L, width: W, height: H };
+}
+}
+var SortableObserver = Class.create();
+SortableObserver.prototype = {
+initialize: function(element, observer) {
+this.element = $(element);
+this.observer= observer;
+this.lastValue = Sortable.serialize(this.element);
+},
+onStart: function() {
+this.lastValue = Sortable.serialize(this.element);
+},
+onEnd: function() {
Sortable.unmark();
-if(this.lastValue!=Sortable.serialize(this.element)){
-this.observer(this.element);
-}
-}};
-var Sortable={sortables:new Array(),options:function(_203){
-_203=$(_203);
-return this.sortables.detect(function(s){
-return s.element==_203;
-});
-},destroy:function(_205){
-_205=$(_205);
-this.sortables.findAll(function(s){
-return s.element==_205;
-}).each(function(s){
+if(this.lastValue != Sortable.serialize(this.element))
+this.observer(this.element)
+}
+}
+var Sortable = {
+sortables: {},
+_findRootElement: function(element) {
+while (element.tagName != "BODY") {
+if(element.id && Sortable.sortables[element.id]) return element;
+element = element.parentNode;
+}
+},
+options: function(element) {
+element = Sortable._findRootElement($(element));
+if(!element) return;
+return Sortable.sortables[element.id];
+},
+destroy: function(element){
+var s = Sortable.options(element);
+if(s) {
Draggables.removeObserver(s.element);
-s.droppables.each(function(d){
-Droppables.remove(d);
-});
-s.draggables.invoke("destroy");
-});
-this.sortables=this.sortables.reject(function(s){
-return s.element==_205;
-});
-},create:function(_206){
-_206=$(_206);
-var _207=Object.extend({element:_206,tag:"li",dropOnEmpty:false,tree:false,overlap:"vertical",constraint:"vertical",containment:_206,handle:false,only:false,hoverclass:null,ghosting:false,format:null,onChange:Prototype.emptyFunction,onUpdate:Prototype.emptyFunction},arguments[1]||{});
-this.destroy(_206);
-var _208={revert:true,ghosting:_207.ghosting,constraint:_207.constraint,handle:_207.handle};
-if(_207.starteffect){
-_208.starteffect=_207.starteffect;
-}
-if(_207.reverteffect){
-_208.reverteffect=_207.reverteffect;
-}else{
-if(_207.ghosting){
-_208.reverteffect=function(_206){
-_206.style.top=0;
-_206.style.left=0;
+s.droppables.each(function(d){ Droppables.remove(d) });
+s.draggables.invoke('destroy');
+delete Sortable.sortables[s.element.id];
+}
+},
+create: function(element) {
+element = $(element);
+var options = Object.extend({
+element: element,
+tag: 'li',dropOnEmpty: false,
+tree:false,
+treeTag: 'ul',
+overlap: 'vertical',constraint:'vertical',containment: element, handle:false, only:false,
+hoverclass:null,
+ghosting:false,
+scroll:false,
+scrollSensitivity: 20,
+scrollSpeed: 15,
+format:/^[^_]*_(.*)$/,
+onChange:Prototype.emptyFunction,
+onUpdate:Prototype.emptyFunction
+}, arguments[1] || {});
+this.destroy(element);
+var options_for_draggable = {
+revert:true,
+scroll:options.scroll,
+scrollSpeed: options.scrollSpeed,
+scrollSensitivity: options.scrollSensitivity,
+ghosting:options.ghosting,
+constraint:options.constraint,
+handle:options.handle };
+if(options.starteffect)
+options_for_draggable.starteffect = options.starteffect;
+if(options.reverteffect)
+options_for_draggable.reverteffect = options.reverteffect;
+else
+if(options.ghosting) options_for_draggable.reverteffect = function(element) {
+element.style.top= 0;
+element.style.left = 0;
};
-}
-}
-if(_207.endeffect){
-_208.endeffect=_207.endeffect;
-}
-if(_207.zindex){
-_208.zindex=_207.zindex;
-}
-var _209={overlap:_207.overlap,containment:_207.containment,hoverclass:_207.hoverclass,onHover:Sortable.onHover,greedy:!_207.dropOnEmpty};
-Element.cleanWhitespace(element);
-_207.draggables=[];
-_207.droppables=[];
-if(_207.dropOnEmpty){
-Droppables.add(element,{containment:_207.containment,onHover:Sortable.onEmptyHover,greedy:false});
-_207.droppables.push(element);
-}
-(this.findElements(element,_207)||[]).each(function(e){
-var _210=_207.handle?Element.childrenWithClassName(e,_207.handle)[0]:e;
-_207.draggables.push(new Draggable(e,Object.extend(_208,{handle:_210})));
-Droppables.add(e,_209);
-_207.droppables.push(e);
+if(options.endeffect)
+options_for_draggable.endeffect = options.endeffect;
+if(options.zindex)
+options_for_draggable.zindex = options.zindex;
+var options_for_droppable = {
+overlap: options.overlap,
+containment: options.containment,
+tree:options.tree,
+hoverclass:options.hoverclass,
+onHover: Sortable.onHover
+ }
+var options_for_tree = {
+onHover:Sortable.onEmptyHover,
+overlap:options.overlap,
+containment:options.containment,
+hoverclass: options.hoverclass
+}
+Element.cleanWhitespace(element);
+options.draggables = [];
+options.droppables = [];
+if(options.dropOnEmpty || options.tree) {
+Droppables.add(element, options_for_tree);
+options.droppables.push(element);
+}
+(this.findElements(element, options) || []).each( function(e) {
+ var handle = options.handle ?
+Element.childrenWithClassName(e, options.handle)[0] : e;
+options.draggables.push(
+new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
+Droppables.add(e, options_for_droppable);
+if(options.tree) e.treeNode = element;
+options.droppables.push(e);
+});
+if(options.tree) {
+(Sortable.findTreeElements(element, options) || []).each( function(e) {
+Droppables.add(e, options_for_tree);
+e.treeNode = element;
+options.droppables.push(e);
});
-this.sortables.push(_207);
-Draggables.addObserver(new SortableObserver(element,_207.onUpdate));
-},findElements:function(_211,_212){
-if(!_211.hasChildNodes()){
-return null;
-}
-var _213=[];
-$A(_211.childNodes).each(function(e){
-if(e.tagName&&e.tagName.toUpperCase()==_212.tag.toUpperCase()&&(!_212.only||(Element.hasClassName(e,_212.only)))){
-_213.push(e);
}
-if(_212.tree){
-var _214=this.findElements(e,_212);
-if(_214){
-_213.push(_214);
+this.sortables[element.id] = options;
+Draggables.addObserver(new SortableObserver(element, options.onUpdate));
+},
+findElements: function(element, options) {
+return Element.findChildren(
+element, options.only, options.tree ? true : false, options.tag);
+},
+findTreeElements: function(element, options) {
+return Element.findChildren(
+element, options.only, options.tree ? true : false, options.treeTag);
+},
+onHover: function(element, dropon, overlap) {
+if(Element.isParent(dropon, element)) return;
+if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
+return;
+} else if(overlap>0.5) {
+Sortable.mark(dropon, 'before');
+if(dropon.previousSibling != element) {
+var oldParentNode = element.parentNode;
+element.style.visibility = "hidden";dropon.parentNode.insertBefore(element, dropon);
+if(dropon.parentNode!=oldParentNode)
+Sortable.options(oldParentNode).onChange(element);
+Sortable.options(dropon.parentNode).onChange(element);
+}
+} else {
+Sortable.mark(dropon, 'after');
+var nextElement = dropon.nextSibling || null;
+if(nextElement != element) {
+var oldParentNode = element.parentNode;
+element.style.visibility = "hidden";dropon.parentNode.insertBefore(element, nextElement);
+if(dropon.parentNode!=oldParentNode)
+Sortable.options(oldParentNode).onChange(element);
+Sortable.options(dropon.parentNode).onChange(element);
+}
+}
+},
+onEmptyHover: function(element, dropon, overlap) {
+var oldParentNode = element.parentNode;
+var droponOptions = Sortable.options(dropon);
+if(!Element.isParent(dropon, element)) {
+var index;
+var children = Sortable.findElements(dropon, {tag: droponOptions.tag});
+var child = null;
+if(children) {
+var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);
+for (index = 0; index < children.length; index += 1) {
+if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
+offset -= Element.offsetSize (children[index], droponOptions.overlap);
+} else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
+child = index + 1 < children.length ? children[index + 1] : null;
+break;
+} else {
+child = children[index];
+break;
}
}
-});
-return (_213.length>0?_213.flatten():null);
-},onHover:function(_215,_216,_217){
-if(_217>0.5){
-Sortable.mark(_216,"before");
-if(_216.previousSibling!=_215){
-var _218=_215.parentNode;
-_215.style.visibility="hidden";
-_216.parentNode.insertBefore(_215,_216);
-if(_216.parentNode!=_218){
-Sortable.options(_218).onChange(_215);
-}
-Sortable.options(_216.parentNode).onChange(_215);
-}
-}else{
-Sortable.mark(_216,"after");
-var _219=_216.nextSibling||null;
-if(_219!=_215){
-var _218=_215.parentNode;
-_215.style.visibility="hidden";
-_216.parentNode.insertBefore(_215,_219);
-if(_216.parentNode!=_218){
-Sortable.options(_218).onChange(_215);
-}
-Sortable.options(_216.parentNode).onChange(_215);
-}
-}
-},onEmptyHover:function(_220,_221){
-if(_220.parentNode!=_221){
-var _222=_220.parentNode;
-_221.appendChild(_220);
-Sortable.options(_222).onChange(_220);
-Sortable.options(_221).onChange(_220);
-}
-},unmark:function(){
-if(Sortable._marker){
-Element.hide(Sortable._marker);
}
-},mark:function(_223,_224){
-var _225=Sortable.options(_223.parentNode);
-if(_225&&!_225.ghosting){
-return;
+dropon.insertBefore(element, child);
+Sortable.options(oldParentNode).onChange(element);
+droponOptions.onChange(element);
}
-if(!Sortable._marker){
-Sortable._marker=$("dropmarker")||document.createElement("DIV");
+},
+unmark: function() {
+if(Sortable._marker) Element.hide(Sortable._marker);
+},
+mark: function(dropon, position) {
+ var sortable = Sortable.options(dropon.parentNode);
+if(sortable && !sortable.ghosting) return;
+if(!Sortable._marker) {
+Sortable._marker = $('dropmarker') || document.createElement('DIV');
Element.hide(Sortable._marker);
-Element.addClassName(Sortable._marker,"dropmarker");
-Sortable._marker.style.position="absolute";
+Element.addClassName(Sortable._marker, 'dropmarker');
+Sortable._marker.style.position = 'absolute';
document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
}
-var _226=Position.cumulativeOffset(_223);
-Sortable._marker.style.left=_226[0]+"px";
-Sortable._marker.style.top=_226[1]+"px";
-if(_224=="after"){
-if(_225.overlap=="horizontal"){
-Sortable._marker.style.left=(_226[0]+_223.clientWidth)+"px";
-}else{
-Sortable._marker.style.top=(_226[1]+_223.clientHeight)+"px";
-}
-}
+var offsets = Position.cumulativeOffset(dropon);
+Sortable._marker.style.left = offsets[0] + 'px';
+Sortable._marker.style.top = offsets[1] + 'px';
+if(position=='after')
+if(sortable.overlap == 'horizontal')
+Sortable._marker.style.left = (offsets[0]+dropon.clientWidth) + 'px';
+else
+Sortable._marker.style.top = (offsets[1]+dropon.clientHeight) + 'px';
Element.show(Sortable._marker);
-},serialize:function(_227){
-_227=$(_227);
-var _228=this.options(_227);
-var _229=Object.extend({tag:_228.tag,only:_228.only,name:_227.id,format:_228.format||/^[^_]*_(.*)$/},arguments[1]||{});
-return $(this.findElements(_227,_229)||[]).map(function(item){
-return (encodeURIComponent(_229.name)+"[]="+encodeURIComponent(item.id.match(_229.format)?item.id.match(_229.format)[1]:""));
-}).join("&");
-}};
-if(!Control){
-var Control={};
-}
-Control.Slider=Class.create();
-Control.Slider.prototype={initialize:function(_231,_232,_233){
-var _234=this;
-if(_231 instanceof Array){
-this.handles=_231.collect(function(e){
-return $(e);
+},
+_tree: function(element, options, parent) {
+var children = Sortable.findElements(element, options) || [];
+for (var i = 0; i < children.length; ++i) {
+var match = children[i].id.match(options.format);
+if (!match) continue;
+var child = {
+id: encodeURIComponent(match ? match[1] : null),
+element: element,
+parent: parent,
+children: new Array,
+position: parent.children.length,
+container: Sortable._findChildrenElement(children[i], options.treeTag.toUpperCase())
+}
+if (child.container)
+this._tree(child.container, options, child)
+parent.children.push (child);
+}
+return parent;
+},
+_findChildrenElement: function (element, containerTag) {
+if (element && element.hasChildNodes)
+for (var i = 0; i < element.childNodes.length; ++i)
+if (element.childNodes[i].tagName == containerTag)
+return element.childNodes[i];
+return null;
+},
+tree: function(element) {
+element = $(element);
+var sortableOptions = this.options(element);
+var options = Object.extend({
+tag: sortableOptions.tag,
+treeTag: sortableOptions.treeTag,
+only: sortableOptions.only,
+name: element.id,
+format: sortableOptions.format
+}, arguments[1] || {});
+var root = {
+id: null,
+parent: null,
+children: new Array,
+container: element,
+position: 0
+}
+return Sortable._tree (element, options, root);
+},
+_constructIndex: function(node) {
+var index = '';
+do {
+if (node.id) index = '[' + node.position + ']' + index;
+} while ((node = node.parent) != null);
+return index;
+},
+sequence: function(element) {
+element = $(element);
+var options = Object.extend(this.options(element), arguments[1] || {});
+return $(this.findElements(element, options) || []).map( function(item) {
+return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
});
-}else{
-this.handles=[$(_231)];
-}
-this.track=$(_232);
-this.options=_233||{};
-this.axis=this.options.axis||"horizontal";
-this.increment=this.options.increment||1;
-this.step=parseInt(this.options.step||"1");
-this.range=this.options.range||$R(0,1);
-this.value=0;
-this.values=this.handles.map(function(){
-return 0;
+},
+setSequence: function(element, new_sequence) {
+element = $(element);
+var options = Object.extend(this.options(element), arguments[2] || {});
+var nodeMap = {};
+this.findElements(element, options).each( function(n) {
+if (n.id.match(options.format))
+nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
+n.parentNode.removeChild(n);
});
-this.spans=this.options.spans?this.options.spans.map(function(s){
-return $(s);
-}):false;
-this.options.startSpan=$(this.options.startSpan||null);
-this.options.endSpan=$(this.options.endSpan||null);
-this.restricted=this.options.restricted||false;
-this.maximum=this.options.maximum||this.range.end;
-this.minimum=this.options.minimum||this.range.start;
-this.alignX=parseInt(this.options.alignX||"0");
-this.alignY=parseInt(this.options.alignY||"0");
-this.trackLength=this.maximumOffset()-this.minimumOffset();
-this.handleLength=this.isVertical()?this.handles[0].offsetHeight:this.handles[0].offsetWidth;
-this.active=false;
-this.dragging=false;
-this.disabled=false;
-if(this.options.disabled){
-this.setDisabled();
-}
-this.allowedValues=this.options.values?this.options.values.sortBy(Prototype.K):false;
-if(this.allowedValues){
-this.minimum=this.allowedValues.min();
-this.maximum=this.allowedValues.max();
-}
-this.eventMouseDown=this.startDrag.bindAsEventListener(this);
-this.eventMouseUp=this.endDrag.bindAsEventListener(this);
-this.eventMouseMove=this.update.bindAsEventListener(this);
-this.handles.each(function(h,i){
-i=_234.handles.length-1-i;
-_234.setValue(parseFloat((_234.options.sliderValue instanceof Array?_234.options.sliderValue[i]:_234.options.sliderValue)||_234.range.start),i);
-Element.makePositioned(h);
-Event.observe(h,"mousedown",_234.eventMouseDown);
+new_sequence.each(function(ident) {
+var n = nodeMap[ident];
+if (n) {
+n[1].appendChild(n[0]);
+delete nodeMap[ident];
+}
+});
+},
+serialize: function(element) {
+element = $(element);
+var options = Object.extend(Sortable.options(element), arguments[1] || {});
+var name = encodeURIComponent(
+(arguments[1] && arguments[1].name) ? arguments[1].name : element.id);
+if (options.tree) {
+return Sortable.tree(element, arguments[1]).children.map( function (item) {
+return [name + Sortable._constructIndex(item) + "=" +
+encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
+}).flatten().join('&');
+} else {
+return Sortable.sequence(element, arguments[1]).map( function(item) {
+return name + "[]=" + encodeURIComponent(item);
+}).join('&');
+}
+}
+}
+Element.isParent = function(child, element) {
+if (!child.parentNode || child == element) return false;
+if (child.parentNode == element) return true;
+return Element.isParent(child.parentNode, element);
+}
+Element.findChildren = function(element, only, recursive, tagName) {
+if(!element.hasChildNodes()) return null;
+tagName = tagName.toUpperCase();
+if(only) only = [only].flatten();
+var elements = [];
+$A(element.childNodes).each( function(e) {
+if(e.tagName && e.tagName.toUpperCase()==tagName &&
+(!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
+elements.push(e);
+if(recursive) {
+var grandchildren = Element.findChildren(e, only, recursive, tagName);
+if(grandchildren) elements.push(grandchildren);
+}
+});
+return (elements.length>0 ? elements.flatten() : []);
+}
+Element.offsetSize = function (element, type) {
+if (type == 'vertical' || type == 'height')
+return element.offsetHeight;
+else
+return element.offsetWidth;
+}
+if(!Control) var Control = {};
+Control.Slider = Class.create();
+Control.Slider.prototype = {
+initialize: function(handle, track, options) {
+var slider = this;
+if(handle instanceof Array) {
+this.handles = handle.collect( function(e) { return $(e) });
+} else {
+this.handles = [$(handle)];
+}
+this.track = $(track);
+this.options = options || {};
+this.axis= this.options.axis || 'horizontal';
+this.increment = this.options.increment || 1;
+this.step= parseInt(this.options.step || '1');
+this.range = this.options.range || $R(0,1);
+this.value = 0;this.values= this.handles.map( function() { return 0 });
+this.spans = this.options.spans ? this.options.spans.map(function(s){ return $(s) }) : false;
+this.options.startSpan = $(this.options.startSpan || null);
+this.options.endSpan = $(this.options.endSpan || null);
+this.restricted = this.options.restricted || false;
+this.maximum = this.options.maximum || this.range.end;
+this.minimum = this.options.minimum || this.range.start;
+this.alignX = parseInt(this.options.alignX || '0');
+this.alignY = parseInt(this.options.alignY || '0');
+this.trackLength = this.maximumOffset() - this.minimumOffset();
+this.handleLength = this.isVertical() ? this.handles[0].offsetHeight : this.handles[0].offsetWidth;
+this.active = false;
+this.dragging = false;
+this.disabled = false;
+if(this.options.disabled) this.setDisabled();
+this.allowedValues = this.options.values ? this.options.values.sortBy(Prototype.K) : false;
+if(this.allowedValues) {
+this.minimum = this.allowedValues.min();
+this.maximum = this.allowedValues.max();
+}
+this.eventMouseDown = this.startDrag.bindAsEventListener(this);
+this.eventMouseUp = this.endDrag.bindAsEventListener(this);
+this.eventMouseMove = this.update.bindAsEventListener(this);
+this.handles.each( function(h,i) {
+i = slider.handles.length-1-i;
+slider.setValue(parseFloat(
+(slider.options.sliderValue instanceof Array ?
+slider.options.sliderValue[i] : slider.options.sliderValue) ||
+ slider.range.start), i);
+Element.makePositioned(h);Event.observe(h, "mousedown", slider.eventMouseDown);
});
-Event.observe(this.track,"mousedown",this.eventMouseDown);
-Event.observe(document,"mouseup",this.eventMouseUp);
-Event.observe(document,"mousemove",this.eventMouseMove);
-this.initialized=true;
-},dispose:function(){
-var _236=this;
-Event.stopObserving(this.track,"mousedown",this.eventMouseDown);
-Event.stopObserving(document,"mouseup",this.eventMouseUp);
-Event.stopObserving(document,"mousemove",this.eventMouseMove);
-this.handles.each(function(h){
-Event.stopObserving(h,"mousedown",_236.eventMouseDown);
+Event.observe(this.track, "mousedown", this.eventMouseDown);
+Event.observe(document, "mouseup", this.eventMouseUp);
+Event.observe(document, "mousemove", this.eventMouseMove);
+this.initialized = true;
+},
+dispose: function() {
+var slider = this;
+Event.stopObserving(this.track, "mousedown", this.eventMouseDown);
+Event.stopObserving(document, "mouseup", this.eventMouseUp);
+Event.stopObserving(document, "mousemove", this.eventMouseMove);
+this.handles.each( function(h) {
+Event.stopObserving(h, "mousedown", slider.eventMouseDown);
});
-},setDisabled:function(){
-this.disabled=true;
-},setEnabled:function(){
-this.disabled=false;
-},getNearestValue:function(_237){
+},
+setDisabled: function(){
+this.disabled = true;
+},
+setEnabled: function(){
+this.disabled = false;
+},
+getNearestValue: function(value){
if(this.allowedValues){
-if(_237>=this.allowedValues.max()){
-return (this.allowedValues.max());
-}
-if(_237<=this.allowedValues.min()){
-return (this.allowedValues.min());
-}
-var _238=Math.abs(this.allowedValues[0]-_237);
-var _239=this.allowedValues[0];
-this.allowedValues.each(function(v){
-var _240=Math.abs(v-_237);
-if(_240<=_238){
-_239=v;
-_238=_240;
-}
+if(value >= this.allowedValues.max()) return(this.allowedValues.max());
+if(value <= this.allowedValues.min()) return(this.allowedValues.min());
+var offset = Math.abs(this.allowedValues[0] - value);
+var newValue = this.allowedValues[0];
+this.allowedValues.each( function(v) {
+var currentOffset = Math.abs(v - value);
+if(currentOffset <= offset){
+newValue = v;
+offset = currentOffset;
+}
});
-return _239;
-}
-if(_237>this.range.end){
-return this.range.end;
-}
-if(_237<this.range.start){
-return this.range.start;
-}
-return _237;
-},setValue:function(_241,_242){
-if(!this.active){
-this.activeHandle=this.handles[_242];
-this.activeHandleIdx=_242;
+return newValue;
+}
+if(value > this.range.end) return this.range.end;
+if(value < this.range.start) return this.range.start;
+return value;
+},
+setValue: function(sliderValue, handleIdx){
+if(!this.active) {
+this.activeHandle= this.handles[handleIdx];
+this.activeHandleIdx = handleIdx;
this.updateStyles();
}
-_242=_242||this.activeHandleIdx||0;
-if(this.initialized&&this.restricted){
-if((_242>0)&&(_241<this.values[_242-1])){
-_241=this.values[_242-1];
-}
-if((_242<(this.handles.length-1))&&(_241>this.values[_242+1])){
-_241=this.values[_242+1];
-}
-}
-_241=this.getNearestValue(_241);
-this.values[_242]=_241;
-this.value=this.values[0];
-this.handles[_242].style[this.isVertical()?"top":"left"]=this.translateToPx(_241);
+handleIdx = handleIdx || this.activeHandleIdx || 0;
+if(this.initialized && this.restricted) {
+if((handleIdx>0) && (sliderValue<this.values[handleIdx-1]))
+sliderValue = this.values[handleIdx-1];
+if((handleIdx < (this.handles.length-1)) && (sliderValue>this.values[handleIdx+1]))
+sliderValue = this.values[handleIdx+1];
+}
+sliderValue = this.getNearestValue(sliderValue);
+this.values[handleIdx] = sliderValue;
+this.value = this.values[0];
+this.handles[handleIdx].style[this.isVertical() ? 'top' : 'left'] =
+this.translateToPx(sliderValue);
this.drawSpans();
-if(!this.dragging||!this.event){
+if(!this.dragging || !this.event) this.updateFinished();
+},
+setValueBy: function(delta, handleIdx) {
+this.setValue(this.values[handleIdx || this.activeHandleIdx || 0] + delta,
+handleIdx || this.activeHandleIdx || 0);
+},
+translateToPx: function(value) {
+return Math.round(
+((this.trackLength-this.handleLength)/(this.range.end-this.range.start)) *
+(value - this.range.start)) + "px";
+},
+translateToValue: function(offset) {
+return ((offset/(this.trackLength-this.handleLength) *
+(this.range.end-this.range.start)) + this.range.start);
+},
+getRange: function(range) {
+var v = this.values.sortBy(Prototype.K);
+range = range || 0;
+return $R(v[range],v[range+1]);
+},
+minimumOffset: function(){
+return(this.isVertical() ? this.alignY : this.alignX);
+},
+maximumOffset: function(){
+return(this.isVertical() ?
+this.track.offsetHeight - this.alignY : this.track.offsetWidth - this.alignX);
+},
+isVertical:function(){
+return (this.axis == 'vertical');
+},
+drawSpans: function() {
+var slider = this;
+if(this.spans)
+$R(0, this.spans.length-1).each(function(r) { slider.setSpan(slider.spans[r], slider.getRange(r)) });
+if(this.options.startSpan)
+this.setSpan(this.options.startSpan,
+$R(0, this.values.length>1 ? this.getRange(0).min() : this.value ));
+if(this.options.endSpan)
+this.setSpan(this.options.endSpan,
+$R(this.values.length>1 ? this.getRange(this.spans.length-1).max() : this.value, this.maximum));
+},
+setSpan: function(span, range) {
+if(this.isVertical()) {
+span.style.top = this.translateToPx(range.start);
+span.style.height = this.translateToPx(range.end - range.start + this.range.start);
+} else {
+span.style.left = this.translateToPx(range.start);
+span.style.width = this.translateToPx(range.end - range.start + this.range.start);
+}
+},
+updateStyles: function() {
+this.handles.each( function(h){ Element.removeClassName(h, 'selected') });
+Element.addClassName(this.activeHandle, 'selected');
+},
+startDrag: function(event) {
+if(Event.isLeftClick(event)) {
+if(!this.disabled){
+this.active = true;
+var handle = Event.element(event);
+var pointer= [Event.pointerX(event), Event.pointerY(event)];
+if(handle==this.track) {
+var offsets= Position.cumulativeOffset(this.track);
+this.event = event;
+this.setValue(this.translateToValue(
+ (this.isVertical() ? pointer[1]-offsets[1] : pointer[0]-offsets[0])-(this.handleLength/2)
+));
+var offsets= Position.cumulativeOffset(this.activeHandle);
+this.offsetX = (pointer[0] - offsets[0]);
+this.offsetY = (pointer[1] - offsets[1]);
+} else {
+ while((this.handles.indexOf(handle) == -1) && handle.parentNode)
+handle = handle.parentNode;
+this.activeHandle= handle;
+this.activeHandleIdx = this.handles.indexOf(this.activeHandle);
+this.updateStyles();
+var offsets= Position.cumulativeOffset(this.activeHandle);
+this.offsetX = (pointer[0] - offsets[0]);
+this.offsetY = (pointer[1] - offsets[1]);
+}
+}
+Event.stop(event);
+}
+},
+update: function(event) {
+ if(this.active) {
+if(!this.dragging) this.dragging = true;
+this.draw(event);
+ if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
+Event.stop(event);
+ }
+},
+draw: function(event) {
+var pointer = [Event.pointerX(event), Event.pointerY(event)];
+var offsets = Position.cumulativeOffset(this.track);
+pointer[0] -= this.offsetX + offsets[0];
+pointer[1] -= this.offsetY + offsets[1];
+this.event = event;
+this.setValue(this.translateToValue( this.isVertical() ? pointer[1] : pointer[0] ));
+if(this.initialized && this.options.onSlide)
+this.options.onSlide(this.values.length>1 ? this.values : this.value, this);
+},
+endDrag: function(event) {
+if(this.active && this.dragging) {
+this.finishDrag(event, true);
+Event.stop(event);
+}
+this.active = false;
+this.dragging = false;
+},
+finishDrag: function(event, success) {
+this.active = false;
+this.dragging = false;
this.updateFinished();
+},
+updateFinished: function() {
+if(this.initialized && this.options.onChange)
+this.options.onChange(this.values.length>1 ? this.values : this.value, this);
+this.event = null;
+}
+}
+Prado.AutoCompleter = Class.create();
+Prado.AutoCompleter.Base = function(){};
+Prado.AutoCompleter.Base.prototype = Object.extend(Autocompleter.Base.prototype,
+{
+updateElement: function(selectedElement)
+{
+if (this.options.updateElement) {
+this.options.updateElement(selectedElement);
+return;
}
-},setValueBy:function(_243,_244){
-this.setValue(this.values[_244||this.activeHandleIdx||0]+_243,_244||this.activeHandleIdx||0);
-},translateToPx:function(_245){
-return Math.round(((this.trackLength-this.handleLength)/(this.range.end-this.range.start))*(_245-this.range.start))+"px";
-},translateToValue:function(_246){
-return ((_246/(this.trackLength-this.handleLength)*(this.range.end-this.range.start))+this.range.start);
-},getRange:function(_247){
-var v=this.values.sortBy(Prototype.K);
-_247=_247||0;
-return $R(v[_247],v[_247+1]);
-},minimumOffset:function(){
-return (this.isVertical()?this.alignY:this.alignX);
-},maximumOffset:function(){
-return (this.isVertical()?this.track.offsetHeight-this.alignY:this.track.offsetWidth-this.alignX);
-},isVertical:function(){
-return (this.axis=="vertical");
-},drawSpans:function(){
-var _248=this;
-if(this.spans){
-$R(0,this.spans.length-1).each(function(r){
-_248.setSpan(_248.spans[r],_248.getRange(r));
-});
-}
-if(this.options.startSpan){
-this.setSpan(this.options.startSpan,$R(0,this.values.length>1?this.getRange(0).min():this.value));
+var value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
+var lastTokenPos = this.findLastToken();
+if (lastTokenPos != -1) {
+var newValue = this.element.value.substr(0, lastTokenPos + 1);
+var whitespace = this.element.value.substr(lastTokenPos + 1).match(/^\s+/);
+if (whitespace)
+newValue += whitespace[0];
+this.element.value = (newValue + value).trim();
+} else {
+this.element.value = value.trim();
}
-if(this.options.endSpan){
-this.setSpan(this.options.endSpan,$R(this.values.length>1?this.getRange(this.spans.length-1).max():this.value,this.maximum));
+this.element.focus();
+if (this.options.afterUpdateElement)
+this.options.afterUpdateElement(this.element, selectedElement);
}
-},setSpan:function(span,_251){
-if(this.isVertical()){
-span.style.top=this.translateToPx(_251.start);
-span.style.height=this.translateToPx(_251.end-_251.start);
-}else{
-span.style.left=this.translateToPx(_251.start);
-span.style.width=this.translateToPx(_251.end-_251.start);
+});
+Prado.AutoCompleter.prototype = Object.extend(new Autocompleter.Base(),
+{
+initialize : function(element, update, options)
+{
+this.baseInitialize(element, update, options);
+},
+onUpdateReturn : function(result)
+{
+if(isString(result) && result.length > 0)
+this.updateChoices(result);
+},
+getUpdatedChoices : function()
+{
+Prado.Callback(this.element.id, this.getToken(), this.onUpdateReturn.bind(this));
}
-},updateStyles:function(){
-this.handles.each(function(h){
-Element.removeClassName(h,"selected");
});
-Element.addClassName(this.activeHandle,"selected");
-},startDrag:function(_252){
-if(Event.isLeftClick(_252)){
-if(!this.disabled){
-this.active=true;
-var _253=Event.element(_252);
-var _254=[Event.pointerX(_252),Event.pointerY(_252)];
-if(_253==this.track){
-var _255=Position.cumulativeOffset(this.track);
-this.event=_252;
-this.setValue(this.translateToValue((this.isVertical()?_254[1]-_255[1]:_254[0]-_255[0])-(this.handleLength/2)));
-var _255=Position.cumulativeOffset(this.activeHandle);
-this.offsetX=(_254[0]-_255[0]);
-this.offsetY=(_254[1]-_255[1]);
-}else{
-while((this.handles.indexOf(_253)==-1)&&_253.parentNode){
-_253=_253.parentNode;
-}
-this.activeHandle=_253;
-this.activeHandleIdx=this.handles.indexOf(this.activeHandle);
-this.updateStyles();
-var _255=Position.cumulativeOffset(this.activeHandle);
-this.offsetX=(_254[0]-_255[0]);
-this.offsetY=(_254[1]-_255[1]);
-}
-}
-Event.stop(_252);
-}
-},update:function(_256){
-if(this.active){
-if(!this.dragging){
-this.dragging=true;
-}
-this.draw(_256);
-if(navigator.appVersion.indexOf("AppleWebKit")>0){
-window.scrollBy(0,0);
-}
-Event.stop(_256);
-}
-},draw:function(_257){
-var _258=[Event.pointerX(_257),Event.pointerY(_257)];
-var _259=Position.cumulativeOffset(this.track);
-_258[0]-=this.offsetX+_259[0];
-_258[1]-=this.offsetY+_259[1];
-this.event=_257;
-this.setValue(this.translateToValue(this.isVertical()?_258[1]:_258[0]));
-if(this.initialized&&this.options.onSlide){
-this.options.onSlide(this.values.length>1?this.values:this.value,this);
-}
-},endDrag:function(_260){
-if(this.active&&this.dragging){
-this.finishDrag(_260,true);
-Event.stop(_260);
-}
-this.active=false;
-this.dragging=false;
-},finishDrag:function(_261,_262){
-this.active=false;
-this.dragging=false;
-this.updateFinished();
-},updateFinished:function(){
-if(this.initialized&&this.options.onChange){
-this.options.onChange(this.values.length>1?this.values:this.value,this);
-}
-this.event=null;
-}};
-Prado.AutoCompleter=Class.create();
-Prado.AutoCompleter.Base=function(){
-};
-Prado.AutoCompleter.Base.prototype=Object.extend(Autocompleter.Base.prototype,{updateElement:function(_263){
-if(this.options.updateElement){
-this.options.updateElement(_263);
-return;
+Prado.ActivePanel =
+{
+callbacks : {},
+register : function(id, options)
+{
+Prado.ActivePanel.callbacks[id] = options;
+},
+update : function(id, param)
+{
+var request = new Prado.ActivePanel.Request(id,
+Prado.ActivePanel.callbacks[id]);
+request.callback(param);
+}
+}
+Prado.ActivePanel.Request = Class.create();
+Prado.ActivePanel.Request.prototype =
+{
+initialize : function(element, options)
+{
+this.element = element;
+this.setOptions(options);
+},
+setOptions : function(options)
+{
+this.options =
+{
+onSuccess : this.onSuccess.bind(this)
+}
+Object.extend(this.options, options || {});
+},
+callback : function(param)
+{
+this.options.params = [param];
+new Prado.AJAX.Callback(this.element, this.options);
+},
+onSuccess : function(result, output)
+{
+if(this.options.update)
+{
+if (!this.options.evalScripts)
+output = output.stripScripts();
+Element.update(this.options.update, output);
+}
+}
+}
+Prado.DropContainer = Class.create();
+Prado.DropContainer.prototype = Object.extend(new Prado.ActivePanel.Request(),
+{
+initialize : function(element, options)
+{
+this.element = element;
+this.setOptions(options);
+Object.extend(this.options,
+{
+onDrop : this.onDrop.bind(this),
+evalScripts : true,
+onSuccess : options.onSuccess || this.onSuccess.bind(this)
+});
+Droppables.add(element, this.options);
+},
+onDrop : function(draggable, droppable)
+{
+this.callback(draggable.id)
}
-var _264=Element.collectTextNodesIgnoreClass(_263,"informal");
-var _265=this.findLastToken();
-if(_265!=-1){
-var _266=this.element.value.substr(0,_265+1);
-var _267=this.element.value.substr(_265+1).match(/^\s+/);
-if(_267){
-_266+=_267[0];
+});
+Prado.ActiveImageButton = Class.create();
+Prado.ActiveImageButton.prototype =
+{
+initialize : function(element, options)
+{
+this.element = $(element);
+this.options = options;
+Event.observe(this.element, "click", this.click.bind(this));
+},
+click : function(e)
+{
+var el = $('{$this->ClientID}');
+var imagePos = Position.cumulativeOffset(this.element);
+var clickedPos = [e.clientX, e.clientY];
+var param = (clickedPos[0]-imagePos[0]+1)+","+(clickedPos[1]-imagePos[1]+1);
+Prado.Callback(this.element, param, null, this.options);
+Event.stop(e);
}
-this.element.value=(_266+_264).trim();
-}else{
-this.element.value=_264.trim();
}
-this.element.focus();
-if(this.options.afterUpdateElement){
-this.options.afterUpdateElement(this.element,_263);
-}
-}});
-Prado.AutoCompleter.prototype=Object.extend(new Autocompleter.Base(),{initialize:function(_268,_269,_270){
-this.baseInitialize(_268,_269,_270);
-},onUpdateReturn:function(_271){
-if(isString(_271)&&_271.length>0){
-this.updateChoices(_271);
-}
-},getUpdatedChoices:function(){
-Prado.Callback(this.element.id,this.getToken(),this.onUpdateReturn.bind(this));
-}});
-Prado.ActivePanel={callbacks:{},register:function(id,_272){
-Prado.ActivePanel.callbacks[id]=_272;
-},update:function(id,_273){
-var _274=new Prado.ActivePanel.Request(id,Prado.ActivePanel.callbacks[id]);
-_274.callback(_273);
-}};
-Prado.ActivePanel.Request=Class.create();
-Prado.ActivePanel.Request.prototype={initialize:function(_275,_276){
-this.element=_275;
-this.setOptions(_276);
-},setOptions:function(_277){
-this.options={onSuccess:this.onSuccess.bind(this)};
-Object.extend(this.options,_277||{});
-},callback:function(_278){
-this.options.params=[_278];
-new Prado.AJAX.Callback(this.element,this.options);
-},onSuccess:function(_279,_280){
-if(this.options.update){
-if(!this.options.evalScripts){
-_280=_280.stripScripts();
-}
-Element.update(this.options.update,_280);
-}
-}};
-Prado.DropContainer=Class.create();
-Prado.DropContainer.prototype=Object.extend(new Prado.ActivePanel.Request(),{initialize:function(_281,_282){
-this.element=_281;
-this.setOptions(_282);
-Object.extend(this.options,{onDrop:this.onDrop.bind(this),evalScripts:true,onSuccess:_282.onSuccess||this.onSuccess.bind(this)});
-Droppables.add(_281,this.options);
-},onDrop:function(_283,_284){
-this.callback(_283.id);
-}});
-Prado.ActiveImageButton=Class.create();
-Prado.ActiveImageButton.prototype={initialize:function(_285,_286){
-this.element=$(_285);
-this.options=_286;
-Event.observe(this.element,"click",this.click.bind(this));
-},click:function(e){
-var el=$("{$this->ClientID}");
-var _287=Position.cumulativeOffset(this.element);
-var _288=[e.clientX,e.clientY];
-var _289=(_288[0]-_287[0]+1)+","+(_288[1]-_287[1]+1);
-Prado.Callback(this.element,_289,null,this.options);
-Event.stop(e);
-}};
-
diff --git a/framework/Web/Javascripts/js/colorpicker.js b/framework/Web/Javascripts/js/colorpicker.js
index 3dde7692..27e180b0 100644
--- a/framework/Web/Javascripts/js/colorpicker.js
+++ b/framework/Web/Javascripts/js/colorpicker.js
@@ -1,467 +1,595 @@
-if(typeof (Rico)=="undefined"){
-Rico={};
-}
-Rico.Color=Class.create();
-Rico.Color.prototype={initialize:function(_1,_2,_3){
-this.rgb={r:_1,g:_2,b:_3};
-},setRed:function(r){
-this.rgb.r=r;
-},setGreen:function(g){
-this.rgb.g=g;
-},setBlue:function(b){
-this.rgb.b=b;
-},setHue:function(h){
-var _8=this.asHSB();
-_8.h=h;
-this.rgb=Rico.Color.HSBtoRGB(_8.h,_8.s,_8.b);
-},setSaturation:function(s){
-var hsb=this.asHSB();
-hsb.s=s;
-this.rgb=Rico.Color.HSBtoRGB(hsb.h,hsb.s,hsb.b);
-},setBrightness:function(b){
-var hsb=this.asHSB();
-hsb.b=b;
-this.rgb=Rico.Color.HSBtoRGB(hsb.h,hsb.s,hsb.b);
-},darken:function(_11){
-var hsb=this.asHSB();
-this.rgb=Rico.Color.HSBtoRGB(hsb.h,hsb.s,Math.max(hsb.b-_11,0));
-},brighten:function(_12){
-var hsb=this.asHSB();
-this.rgb=Rico.Color.HSBtoRGB(hsb.h,hsb.s,Math.min(hsb.b+_12,1));
-},blend:function(_13){
-this.rgb.r=Math.floor((this.rgb.r+_13.rgb.r)/2);
-this.rgb.g=Math.floor((this.rgb.g+_13.rgb.g)/2);
-this.rgb.b=Math.floor((this.rgb.b+_13.rgb.b)/2);
-},isBright:function(){
-var hsb=this.asHSB();
-return this.asHSB().b>0.5;
-},isDark:function(){
-return !this.isBright();
-},asRGB:function(){
-return "rgb("+this.rgb.r+","+this.rgb.g+","+this.rgb.b+")";
-},asHex:function(){
-return "#"+this.rgb.r.toColorPart()+this.rgb.g.toColorPart()+this.rgb.b.toColorPart();
-},asHSB:function(){
-return Rico.Color.RGBtoHSB(this.rgb.r,this.rgb.g,this.rgb.b);
-},toString:function(){
+
+if(typeof(Rico) == "undefined") Rico = {};
+Rico.Color = Class.create();
+Rico.Color.prototype = {
+initialize: function(red, green, blue) {
+this.rgb = { r: red, g : green, b : blue };
+ },
+setRed: function(r) {
+this.rgb.r = r;
+ },
+setGreen: function(g) {
+this.rgb.g = g;
+ },
+setBlue: function(b) {
+this.rgb.b = b;
+ },
+setHue: function(h) {
+var hsb = this.asHSB();
+hsb.h = h;
+this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b);
+ },
+setSaturation: function(s) {
+var hsb = this.asHSB();
+hsb.s = s;
+this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, hsb.b);
+ },
+setBrightness: function(b) {
+var hsb = this.asHSB();
+hsb.b = b;
+this.rgb = Rico.Color.HSBtoRGB( hsb.h, hsb.s, hsb.b );
+ },
+darken: function(percent) {
+var hsb= this.asHSB();
+this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.max(hsb.b - percent,0));
+ },
+brighten: function(percent) {
+var hsb= this.asHSB();
+this.rgb = Rico.Color.HSBtoRGB(hsb.h, hsb.s, Math.min(hsb.b + percent,1));
+ },
+blend: function(other) {
+this.rgb.r = Math.floor((this.rgb.r + other.rgb.r)/2);
+this.rgb.g = Math.floor((this.rgb.g + other.rgb.g)/2);
+this.rgb.b = Math.floor((this.rgb.b + other.rgb.b)/2);
+ },
+isBright: function() {
+var hsb = this.asHSB();
+return this.asHSB().b > 0.5;
+ },
+isDark: function() {
+return ! this.isBright();
+ },
+asRGB: function() {
+return "rgb(" + this.rgb.r + "," + this.rgb.g + "," + this.rgb.b + ")";
+ },
+asHex: function() {
+return "#" + this.rgb.r.toColorPart() + this.rgb.g.toColorPart() + this.rgb.b.toColorPart();
+ },
+asHSB: function() {
+return Rico.Color.RGBtoHSB(this.rgb.r, this.rgb.g, this.rgb.b);
+ },
+toString: function() {
return this.asHex();
-}};
-Rico.Color.createFromHex=function(_14){
-if(_14.indexOf("#")==0){
-_14=_14.substring(1);
-}
-var red="ff",green="ff",blue="ff";
-if(_14.length>4){
-red=_14.substring(0,2);
-green=_14.substring(2,4);
-blue=_14.substring(4,6);
-}else{
-if(_14.length>0&_14.length<4){
-var r=_14.substring(0,1);
-var g=_14.substring(1,2);
-var b=_14.substring(2);
-red=r+r;
-green=g+g;
-blue=b+b;
-}
-}
-return new Rico.Color(parseInt(red,16),parseInt(green,16),parseInt(blue,16));
+ }
};
-Rico.Color.createColorFromBackground=function(_16){
-var _17=Element.getStyle($(_16),"background-color");
-if(_17=="transparent"&&_16.parent){
-return Rico.Color.createColorFromBackground(_16.parent);
-}
-if(_17==null){
+Rico.Color.createFromHex = function(hexCode) {
+if ( hexCode.indexOf('#') == 0 )
+hexCode = hexCode.substring(1);
+var red = "ff", green = "ff", blue="ff";
+ if(hexCode.length > 4)
+{
+ red = hexCode.substring(0,2);
+ green = hexCode.substring(2,4);
+ blue= hexCode.substring(4,6);
+}
+else if(hexCode.length > 0 & hexCode.length < 4)
+{
+var r = hexCode.substring(0,1);
+var g = hexCode.substring(1,2);
+var b = hexCode.substring(2);
+red = r+r;
+green = g+g;
+blue = b+b;
+}
+ return new Rico.Color( parseInt(red,16), parseInt(green,16), parseInt(blue,16) );
+}
+Rico.Color.createColorFromBackground = function(elem) {
+var actualColor = Element.getStyle($(elem), "background-color");
+if ( actualColor == "transparent" && elem.parent )
+return Rico.Color.createColorFromBackground(elem.parent);
+if ( actualColor == null )
return new Rico.Color(255,255,255);
-}
-if(_17.indexOf("rgb(")==0){
-var _18=_17.substring(4,_17.length-1);
-var _19=_18.split(",");
-return new Rico.Color(parseInt(_19[0]),parseInt(_19[1]),parseInt(_19[2]));
-}else{
-if(_17.indexOf("#")==0){
-return Rico.Color.createFromHex(_17);
-}else{
+if ( actualColor.indexOf("rgb(") == 0 ) {
+var colors = actualColor.substring(4, actualColor.length - 1 );
+var colorArray = colors.split(",");
+return new Rico.Color( parseInt( colorArray[0] ),
+parseInt( colorArray[1] ),
+parseInt( colorArray[2] ));
+}
+ else if ( actualColor.indexOf("#") == 0 ) {
+return Rico.Color.createFromHex(actualColor);
+ }
+ else
return new Rico.Color(255,255,255);
}
-}
-};
-Rico.Color.HSBtoRGB=function(hue,_21,_22){
-var red=0;
-var _23=0;
-var _24=0;
-if(_21==0){
-red=parseInt(_22*255+0.5);
-_23=red;
-_24=red;
-}else{
-var h=(hue-Math.floor(hue))*6;
-var f=h-Math.floor(h);
-var p=_22*(1-_21);
-var q=_22*(1-_21*f);
-var t=_22*(1-(_21*(1-f)));
-switch(parseInt(h)){
-case 0:
-red=(_22*255+0.5);
-_23=(t*255+0.5);
-_24=(p*255+0.5);
+Rico.Color.HSBtoRGB = function(hue, saturation, brightness) {
+var red = 0;
+var green = 0;
+var blue= 0;
+if (saturation == 0) {
+red = parseInt(brightness * 255.0 + 0.5);
+ green = red;
+ blue = red;
+}
+else {
+var h = (hue - Math.floor(hue)) * 6.0;
+var f = h - Math.floor(h);
+var p = brightness * (1.0 - saturation);
+var q = brightness * (1.0 - saturation * f);
+var t = brightness * (1.0 - (saturation * (1.0 - f)));
+switch (parseInt(h)) {
+ case 0:
+red = (brightness * 255.0 + 0.5);
+green = (t * 255.0 + 0.5);
+blue= (p * 255.0 + 0.5);
break;
-case 1:
-red=(q*255+0.5);
-_23=(_22*255+0.5);
-_24=(p*255+0.5);
+ case 1:
+red = (q * 255.0 + 0.5);
+green = (brightness * 255.0 + 0.5);
+blue= (p * 255.0 + 0.5);
break;
-case 2:
-red=(p*255+0.5);
-_23=(_22*255+0.5);
-_24=(t*255+0.5);
+ case 2:
+red = (p * 255.0 + 0.5);
+green = (brightness * 255.0 + 0.5);
+blue= (t * 255.0 + 0.5);
break;
-case 3:
-red=(p*255+0.5);
-_23=(q*255+0.5);
-_24=(_22*255+0.5);
+ case 3:
+red = (p * 255.0 + 0.5);
+green = (q * 255.0 + 0.5);
+blue= (brightness * 255.0 + 0.5);
break;
-case 4:
-red=(t*255+0.5);
-_23=(p*255+0.5);
-_24=(_22*255+0.5);
+ case 4:
+red = (t * 255.0 + 0.5);
+green = (p * 255.0 + 0.5);
+blue= (brightness * 255.0 + 0.5);
break;
case 5:
-red=(_22*255+0.5);
-_23=(p*255+0.5);
-_24=(q*255+0.5);
+red = (brightness * 255.0 + 0.5);
+green = (p * 255.0 + 0.5);
+blue= (q * 255.0 + 0.5);
break;
}
}
-return {r:parseInt(red),g:parseInt(_23),b:parseInt(_24)};
-};
-Rico.Color.RGBtoHSB=function(r,g,b){
-var hue;
-var _29;
-var _30;
-var _31=(r>g)?r:g;
-if(b>_31){
-_31=b;
-}
-var _32=(r<g)?r:g;
-if(b<_32){
-_32=b;
-}
-_30=_31/255;
-if(_31!=0){
-saturation=(_31-_32)/_31;
-}else{
-saturation=0;
-}
-if(saturation==0){
-hue=0;
-}else{
-var _33=(_31-r)/(_31-_32);
-var _34=(_31-g)/(_31-_32);
-var _35=(_31-b)/(_31-_32);
-if(r==_31){
-hue=_35-_34;
-}else{
-if(g==_31){
-hue=2+_33-_35;
-}else{
-hue=4+_34-_33;
-}
+return { r : parseInt(red), g : parseInt(green) , b : parseInt(blue) };
}
-hue=hue/6;
-if(hue<0){
-hue=hue+1;
-}
-}
-return {h:hue,s:saturation,b:_30};
-};
-Prado.WebUI.TColorPicker=Class.create();
-Object.extend(Prado.WebUI.TColorPicker,{palettes:{Small:[["fff","fcc","fc9","ff9","ffc","9f9","9ff","cff","ccf","fcf"],["ccc","f66","f96","ff6","ff3","6f9","3ff","6ff","99f","f9f"],["c0c0c0","f00","f90","fc6","ff0","3f3","6cc","3cf","66c","c6c"],["999","c00","f60","fc3","fc0","3c0","0cc","36f","63f","c3c"],["666","900","c60","c93","990","090","399","33f","60c","939"],["333","600","930","963","660","060","366","009","339","636"],["000","300","630","633","330","030","033","006","309","303"]],Tiny:[["ffffff","00ff00","008000","0000ff"],["c0c0c0","ffff00","ff00ff","000080"],["808080","ff0000","800080","000000"]]},UIImages:{"button.gif":"button.gif","background.png":"background.png"}});
-Object.extend(Prado.WebUI.TColorPicker.prototype,{initialize:function(_36){
-var _37={Palette:"Small",ClassName:"TColorPicker",Mode:"Basic",OKButtonText:"OK",CancelButtonText:"Cancel",ShowColorPicker:true};
-this.element=null;
-this.showing=false;
-_36=Object.extend(_37,_36);
-this.options=_36;
-this.input=$(_36["ID"]);
-this.button=$(_36["ID"]+"_button");
-this._buttonOnClick=this.buttonOnClick.bind(this);
-if(_36["ShowColorPicker"]){
-Event.observe(this.button,"click",this._buttonOnClick);
+Rico.Color.RGBtoHSB = function(r, g, b) {
+var hue;
+ var saturaton;
+ var brightness;
+var cmax = (r > g) ? r : g;
+ if (b > cmax)
+cmax = b;
+var cmin = (r < g) ? r : g;
+ if (b < cmin)
+cmin = b;
+brightness = cmax / 255.0;
+ if (cmax != 0)
+saturation = (cmax - cmin)/cmax;
+ else
+saturation = 0;
+if (saturation == 0)
+hue = 0;
+ else {
+var redc = (cmax - r)/(cmax - cmin);
+var greenc = (cmax - g)/(cmax - cmin);
+var bluec= (cmax - b)/(cmax - cmin);
+if (r == cmax)
+ hue = bluec - greenc;
+else if (g == cmax)
+ hue = 2.0 + redc - bluec;
+else
+ hue = 4.0 + greenc - redc;
+hue = hue / 6.0;
+if (hue < 0)
+ hue = hue + 1.0;
+ }
+return { h : hue, s : saturation, b : brightness };
+}
+Prado.WebUI.TColorPicker = Class.create();
+Object.extend(Prado.WebUI.TColorPicker,
+{
+palettes:
+{
+Small : [["fff", "fcc", "fc9", "ff9", "ffc", "9f9", "9ff", "cff", "ccf", "fcf"],
+["ccc", "f66", "f96", "ff6", "ff3", "6f9", "3ff", "6ff", "99f", "f9f"],
+["c0c0c0", "f00", "f90", "fc6", "ff0", "3f3", "6cc", "3cf", "66c", "c6c"],
+["999", "c00", "f60", "fc3", "fc0", "3c0", "0cc", "36f", "63f", "c3c"],
+["666", "900", "c60", "c93", "990", "090", "399", "33f", "60c", "939"],
+["333", "600", "930", "963", "660", "060", "366", "009", "339", "636"],
+["000", "300", "630", "633", "330", "030", "033", "006", "309", "303"]],
+Tiny : [["ffffff" , "00ff00" , "008000" , "0000ff" ],
+["c0c0c0" , "ffff00" , "ff00ff" , "000080" ],
+["808080" , "ff0000" , "800080" , "000000" ]]
+},
+UIImages :
+{
+'button.gif' : 'button.gif',
+'background.png' : 'background.png'
}
-Event.observe(this.input,"change",this.updatePicker.bind(this));
-},updatePicker:function(e){
-var _39=Rico.Color.createFromHex(this.input.value);
-this.button.style.backgroundColor=_39.toString();
-},buttonOnClick:function(_40){
-var _41=this.options["Mode"];
-if(this.element==null){
-var _42=_41=="Basic"?"getBasicPickerContainer":"getFullPickerContainer";
-this.element=this[_42](this.options["ID"],this.options["Palette"]);
+});
+Object.extend(Prado.WebUI.TColorPicker.prototype,
+{
+initialize : function(options)
+{
+var basics =
+{
+Palette : 'Small',
+ClassName : 'TColorPicker',
+Mode : 'Basic',
+OKButtonText : 'OK',
+CancelButtonText : 'Cancel',
+ShowColorPicker : true
+}
+this.element = null;
+this.showing = false;
+options = Object.extend(basics, options);
+this.options = options;
+this.input = $(options['ID']);
+this.button = $(options['ID']+'_button');
+this._buttonOnClick = this.buttonOnClick.bind(this);
+if(options['ShowColorPicker'])
+Event.observe(this.button, "click", this._buttonOnClick);
+Event.observe(this.input, "change", this.updatePicker.bind(this));
+},
+updatePicker : function(e)
+{
+var color = Rico.Color.createFromHex(this.input.value);
+this.button.style.backgroundColor = color.toString();
+},
+buttonOnClick : function(event)
+{
+var mode = this.options['Mode'];
+if(this.element == null)
+{
+var constructor = mode == "Basic" ? "getBasicPickerContainer": "getFullPickerContainer"
+this.element = this[constructor](this.options['ID'], this.options['Palette'])
document.body.appendChild(this.element);
-this.element.style.display="none";
-if(Prado.Browser().ie){
-this.iePopUp=document.createElement("iframe");
-this.iePopUp.src="";
-this.iePopUp.style.position="absolute";
-this.iePopUp.scrolling="no";
-this.iePopUp.frameBorder="0";
+this.element.style.display = "none";
+if(Prado.Browser().ie)
+{
+this.iePopUp = document.createElement('iframe');
+this.iePopUp.src = "";
+this.iePopUp.style.position = "absolute"
+this.iePopUp.scrolling="no"
+this.iePopUp.frameBorder="0"
this.input.parentNode.appendChild(this.iePopUp);
}
-if(_41=="Full"){
+if(mode == "Full")
this.initializeFullPicker();
}
-}
this.show();
-},show:function(_43){
-if(!this.showing){
-var pos=Position.cumulativeOffset(this.input);
-pos[1]+=this.input.offsetHeight;
-this.element.style.top=(pos[1]-1)+"px";
-this.element.style.left=pos[0]+"px";
-this.element.style.display="block";
-this.ieHack(_43);
-this._documentClickEvent=this.hideOnClick.bindEvent(this,_43);
-this._documentKeyDownEvent=this.keyPressed.bindEvent(this,_43);
-Event.observe(document.body,"click",this._documentClickEvent);
-Event.observe(document,"keydown",this._documentKeyDownEvent);
-this.showing=true;
-if(_43=="Full"){
-var _45=Rico.Color.createFromHex(this.input.value);
-this.inputs.oldColor.style.backgroundColor=_45.asHex();
-this.setColor(_45,true);
-}
-}
-},hide:function(_46){
-if(this.showing){
-if(this.iePopUp){
-this.iePopUp.style.display="none";
-}
-this.element.style.display="none";
-this.showing=false;
-Event.stopObserving(document.body,"click",this._documentClickEvent);
-Event.stopObserving(document,"keydown",this._documentKeyDownEvent);
-}
-},keyPressed:function(_47,_48){
-if(Event.keyCode(_47)==Event.KEY_ESC){
-this.hide(_47,_48);
-}
-},hideOnClick:function(ev){
-if(!this.showing){
-return;
-}
-var el=Event.element(ev);
-var _51=false;
-do{
-_51=_51||String(el.className).indexOf("FullColorPicker")>-1;
-_51=_51||el==this.button;
-_51=_51||el==this.input;
-if(_51){
-break;
-}
-el=el.parentNode;
-}while(el);
-if(!_51){
-this.hide(ev);
-}
-},ieHack:function(){
-if(this.iePopUp){
-this.iePopUp.style.display="block";
-this.iePopUp.style.top=(this.element.offsetTop)+"px";
-this.iePopUp.style.left=(this.element.offsetLeft)+"px";
-this.iePopUp.style.width=Math.abs(this.element.offsetWidth)+"px";
-this.iePopUp.style.height=(this.element.offsetHeight+1)+"px";
-}
-},getBasicPickerContainer:function(_52,_53){
-var _54=TABLE({className:"basic_colors palette_"+_53},TBODY());
-var _55=Prado.WebUI.TColorPicker.palettes[_53];
-var _56=this.cellOnClick.bind(this);
-_55.each(function(_57){
-var row=document.createElement("tr");
-_57.each(function(c){
-var td=document.createElement("td");
-var img=IMG({src:Prado.WebUI.TColorPicker.UIImages["button.gif"],width:16,height:16});
-img.style.backgroundColor="#"+c;
-Event.observe(img,"click",_56);
-Event.observe(img,"mouseover",function(e){
-Element.addClassName(Event.element(e),"pickerhover");
+},
+show : function(type)
+{
+if(!this.showing)
+{
+var pos = Position.cumulativeOffset(this.input);
+pos[1] += this.input.offsetHeight;
+this.element.style.top = (pos[1]-1) + "px";
+this.element.style.left = pos[0] + "px";
+this.element.style.display = "block";
+this.ieHack(type);
+this._documentClickEvent = this.hideOnClick.bindEvent(this, type);
+this._documentKeyDownEvent = this.keyPressed.bindEvent(this, type);
+Event.observe(document.body, "click", this._documentClickEvent);
+Event.observe(document,"keydown", this._documentKeyDownEvent);
+this.showing = true;
+if(type == "Full")
+{
+var color = Rico.Color.createFromHex(this.input.value);
+this.inputs.oldColor.style.backgroundColor = color.asHex();
+this.setColor(color,true);
+}
+}
+},
+hide : function(event)
+{
+if(this.showing)
+{
+if(this.iePopUp)
+this.iePopUp.style.display = "none";
+this.element.style.display = "none";
+this.showing = false;
+Event.stopObserving(document.body, "click", this._documentClickEvent);
+Event.stopObserving(document,"keydown", this._documentKeyDownEvent);
+}
+},
+keyPressed : function(event,type)
+{
+if(Event.keyCode(event) == Event.KEY_ESC)
+this.hide(event,type);
+},
+hideOnClick : function(ev)
+{
+if(!this.showing) return;
+var el = Event.element(ev);
+var within = false;
+do
+{within = within || String(el.className).indexOf('FullColorPicker') > -1
+within = within || el == this.button;
+within = within || el == this.input;
+if(within) break;
+el = el.parentNode;
+}
+while(el);
+if(!within) this.hide(ev);
+},
+ieHack : function()
+{
+if(this.iePopUp)
+{
+this.iePopUp.style.display = "block";
+this.iePopUp.style.top = (this.element.offsetTop) + "px";
+this.iePopUp.style.left = (this.element.offsetLeft)+ "px";
+this.iePopUp.style.width = Math.abs(this.element.offsetWidth)+ "px";
+this.iePopUp.style.height = (this.element.offsetHeight + 1)+ "px";
+}
+},
+getBasicPickerContainer : function(pickerID, palette)
+{
+var table = TABLE({className:'basic_colors palette_'+palette},TBODY());
+var colors = Prado.WebUI.TColorPicker.palettes[palette];
+var pickerOnClick = this.cellOnClick.bind(this);
+colors.each(function(color)
+{
+var row = document.createElement("tr");
+color.each(function(c)
+{
+var td = document.createElement("td");
+var img = IMG({src:Prado.WebUI.TColorPicker.UIImages['button.gif'],width:16,height:16});
+img.style.backgroundColor = "#"+c;
+Event.observe(img,"click", pickerOnClick);
+Event.observe(img,"mouseover", function(e)
+{
+Element.addClassName(Event.element(e), "pickerhover");
});
-Event.observe(img,"mouseout",function(e){
-Element.removeClassName(Event.element(e),"pickerhover");
+Event.observe(img,"mouseout", function(e)
+{
+Element.removeClassName(Event.element(e), "pickerhover");
});
td.appendChild(img);
row.appendChild(td);
});
-_54.childNodes[0].appendChild(row);
+table.childNodes[0].appendChild(row);
});
-return DIV({className:this.options["ClassName"]+" BasicColorPicker",id:_52+"_picker"},_54);
-},cellOnClick:function(e){
-var el=Event.element(e);
-if(el.tagName.toLowerCase()!="img"){
+return DIV({className:this.options['ClassName']+" BasicColorPicker",
+id:pickerID+"_picker"}, table);
+},
+cellOnClick : function(e)
+{
+var el = Event.element(e);
+if(el.tagName.toLowerCase() != "img")
return;
-}
-var _62=Rico.Color.createColorFromBackground(el);
-this.updateColor(_62);
-},updateColor:function(_63){
-this.input.value=_63.toString().toUpperCase();
-this.button.style.backgroundColor=_63.toString();
-if(isFunction(this.onChange)){
-this.onChange(_63);
-}
-},getFullPickerContainer:function(_64){
-this.buttons={OK:INPUT({value:this.options.OKButtonText,className:"button",type:"button"}),Cancel:INPUT({value:this.options.CancelButtonText,className:"button",type:"button"})};
-var _65={};
-["H","S","V","R","G","B"].each(function(_66){
-_65[_66]=INPUT({type:"text",size:"3",maxlength:"3"});
+var color = Rico.Color.createColorFromBackground(el);
+this.updateColor(color);
+},
+updateColor : function(color)
+{
+this.input.value = color.toString().toUpperCase();
+this.button.style.backgroundColor = color.toString();
+if(isFunction(this.onChange))
+this.onChange(color);
+},
+getFullPickerContainer : function(pickerID)
+{
+this.buttons =
+{
+OK : INPUT({value:this.options.OKButtonText, className:'button', type:'button'}),
+Cancel : INPUT({value:this.options.CancelButtonText, className:'button', type:'button'})
+};
+var inputs = {};
+['H','S','V','R','G','B'].each(function(type)
+{
+inputs[type] = INPUT({type:'text',size:'3',maxlength:'3'});
});
-_65["HEX"]=INPUT({className:"hex",type:"text",size:"6",maxlength:"6"});
-this.inputs=_65;
-var _67=Prado.WebUI.TColorPicker.UIImages;
-this.inputs["currentColor"]=SPAN({className:"currentColor"});
-this.inputs["oldColor"]=SPAN({className:"oldColor"});
-var _68=TABLE({className:"inputs"},TBODY(null,TR(null,TD({className:"currentcolor",colSpan:2},this.inputs["currentColor"],this.inputs["oldColor"])),TR(null,TD(null,"H:"),TD(null,this.inputs["H"],"\xc2\xb0")),TR(null,TD(null,"S:"),TD(null,this.inputs["S"],"%")),TR(null,TD(null,"V:"),TD(null,this.inputs["V"],"%")),TR(null,TD({className:"gap"},"R:"),TD({className:"gap"},this.inputs["R"])),TR(null,TD(null,"G:"),TD(null,this.inputs["G"])),TR(null,TD(null,"B:"),TD(null,this.inputs["B"])),TR(null,TD({className:"gap"},"#"),TD({className:"gap"},this.inputs["HEX"]))));
-var _69={selector:SPAN({className:"selector"}),background:SPAN({className:"colorpanel"}),slider:SPAN({className:"slider"}),hue:SPAN({className:"strip"})};
-if(Prado.Browser().ie){
-var _70="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader";
-_69["background"]=SPAN({className:"colorpanel",style:_70+"(src='"+_67["background.png"]+"' sizingMethod=scale);"});
-}
-this.inputs=Object.extend(this.inputs,_69);
-var _71=TABLE(null,TBODY(null,TR({className:"selection"},TD({className:"colors"},_69["selector"],_69["background"]),TD({className:"hue"},_69["slider"],_69["hue"]),TD({className:"inputs"},_68)),TR({className:"options"},TD({colSpan:3},this.buttons["OK"],this.buttons["Cancel"]))));
-return DIV({className:this.options["ClassName"]+" FullColorPicker",id:_64+"_picker"},_71);
-},initializeFullPicker:function(){
-var _72=Rico.Color.createFromHex(this.input.value);
-this.inputs.oldColor.style.backgroundColor=_72.asHex();
-this.setColor(_72,true);
-var i=0;
-for(var _74 in this.inputs){
-Event.observe(this.inputs[_74],"change",this.onInputChanged.bindEvent(this,_74));
+inputs['HEX'] = INPUT({className:'hex',type:'text',size:'6',maxlength:'6'});
+this.inputs = inputs;
+var images = Prado.WebUI.TColorPicker.UIImages;
+this.inputs['currentColor'] = SPAN({className:'currentColor'});
+this.inputs['oldColor'] = SPAN({className:'oldColor'});
+var inputsTable =
+TABLE({className:'inputs'}, TBODY(null,
+TR(null,
+TD({className:'currentcolor',colSpan:2},
+this.inputs['currentColor'], this.inputs['oldColor'])),
+TR(null,
+TD(null,'H:'),
+TD(null,this.inputs['H'], '°')),
+TR(null,
+TD(null,'S:'),
+TD(null,this.inputs['S'], '%')),
+TR(null,
+TD(null,'V:'),
+TD(null,this.inputs['V'], '%')),
+TR(null,
+TD({className:'gap'},'R:'),
+TD({className:'gap'},this.inputs['R'])),
+TR(null,
+TD(null,'G:'),
+TD(null, this.inputs['G'])),
+TR(null,
+TD(null,'B:'),
+TD(null, this.inputs['B'])),
+TR(null,
+TD({className:'gap'},'#'),
+TD({className:'gap'},this.inputs['HEX']))
+));
+var UIimages =
+{
+selector : SPAN({className:'selector'}),
+background : SPAN({className:'colorpanel'}),
+slider : SPAN({className:'slider'}),
+hue : SPAN({className:'strip'})
+}
+if(Prado.Browser().ie)
+{
+var filter = "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader";
+UIimages['background'] = SPAN({className:'colorpanel',style:filter+"(src='"+images['background.png']+"' sizingMethod=scale);"})
+}
+this.inputs = Object.extend(this.inputs, UIimages);
+var pickerTable =
+TABLE(null,TBODY(null,
+TR({className:'selection'},
+TD({className:'colors'},UIimages['selector'],UIimages['background']),
+TD({className:'hue'},UIimages['slider'],UIimages['hue']),
+TD({className:'inputs'}, inputsTable)
+),
+TR({className:'options'},
+TD({colSpan:3},
+this.buttons['OK'],
+this.buttons['Cancel'])
+)
+));
+return DIV({className:this.options['ClassName']+" FullColorPicker",
+id:pickerID+"_picker"},pickerTable);
+},
+initializeFullPicker : function()
+{
+var color = Rico.Color.createFromHex(this.input.value);
+this.inputs.oldColor.style.backgroundColor = color.asHex();
+this.setColor(color,true);
+var i = 0;
+for(var type in this.inputs)
+{
+Event.observe(this.inputs[type], "change",
+this.onInputChanged.bindEvent(this,type));
i++;
-if(i>6){
-break;
-}
-}
-this.isMouseDownOnColor=false;
-this.isMouseDownOnHue=false;
-this._onColorMouseDown=this.onColorMouseDown.bind(this);
-this._onHueMouseDown=this.onHueMouseDown.bind(this);
-this._onMouseUp=this.onMouseUp.bind(this);
-this._onMouseMove=this.onMouseMove.bind(this);
-Event.observe(this.inputs.background,"mousedown",this._onColorMouseDown);
-Event.observe(this.inputs.hue,"mousedown",this._onHueMouseDown);
-Event.observe(document.body,"mouseup",this._onMouseUp);
-Event.observe(document.body,"mousemove",this._onMouseMove);
-Event.observe(this.buttons.Cancel,"click",this.hide.bindEvent(this,this.options["Mode"]));
-Event.observe(this.buttons.OK,"click",this.onOKClicked.bind(this));
-},onColorMouseDown:function(ev){
-this.isMouseDownOnColor=true;
+if(i > 6) break;
+}
+this.isMouseDownOnColor = false;
+this.isMouseDownOnHue = false;
+this._onColorMouseDown = this.onColorMouseDown.bind(this);
+this._onHueMouseDown = this.onHueMouseDown.bind(this);
+this._onMouseUp = this.onMouseUp.bind(this);
+this._onMouseMove = this.onMouseMove.bind(this);
+Event.observe(this.inputs.background, "mousedown", this._onColorMouseDown);
+Event.observe(this.inputs.hue, "mousedown", this._onHueMouseDown);
+Event.observe(document.body, "mouseup", this._onMouseUp);
+Event.observe(document.body, "mousemove", this._onMouseMove);
+Event.observe(this.buttons.Cancel, "click", this.hide.bindEvent(this,this.options['Mode']));
+Event.observe(this.buttons.OK, "click", this.onOKClicked.bind(this));
+},
+onColorMouseDown : function(ev)
+{
+this.isMouseDownOnColor = true;
this.onMouseMove(ev);
-},onHueMouseDown:function(ev){
-this.isMouseDownOnHue=true;
+},
+onHueMouseDown : function(ev)
+{
+this.isMouseDownOnHue = true;
this.onMouseMove(ev);
-},onMouseUp:function(ev){
-this.isMouseDownOnColor=false;
-this.isMouseDownOnHue=false;
-},onMouseMove:function(ev){
-if(this.isMouseDownOnColor){
+},
+onMouseUp : function(ev)
+{
+this.isMouseDownOnColor = false;
+this.isMouseDownOnHue = false;
+},
+onMouseMove : function(ev)
+{
+if(this.isMouseDownOnColor)
this.changeSV(ev);
-}
-if(this.isMouseDownOnHue){
+if(this.isMouseDownOnHue)
this.changeH(ev);
-}
-},changeSV:function(ev){
-var px=Event.pointerX(ev);
-var py=Event.pointerY(ev);
-var pos=Position.cumulativeOffset(this.inputs.background);
-var x=this.truncate(px-pos[0],0,255);
-var y=this.truncate(py-pos[1],0,255);
-var h=this.truncate(this.inputs.H.value,0,360)/360;
-var s=x/255;
-var b=(255-y)/255;
-var _79=new Rico.Color();
-_79.rgb=Rico.Color.HSBtoRGB(h,s,b);
-this.inputs.selector.style.left=x+"px";
-this.inputs.selector.style.top=y+"px";
-this.inputs.currentColor.style.backgroundColor=_79.asHex();
-return this.setColor(_79);
-},changeH:function(ev){
-var py=Event.pointerY(ev);
-var pos=Position.cumulativeOffset(this.inputs.background);
-var y=this.truncate(py-pos[1],0,255);
-var h=(255-y)/255;
-var s=parseInt(this.inputs.S.value)/100;
-var b=parseInt(this.inputs.V.value)/100;
-var _80=new Rico.Color();
-_80.rgb=Rico.Color.HSBtoRGB(h,s,b);
-var hue=new Rico.Color(_80.rgb.r,_80.rgb.g,_80.rgb.b);
-hue.setSaturation(1);
-hue.setBrightness(1);
-this.inputs.background.style.backgroundColor=hue.asHex();
-this.inputs.currentColor.style.backgroundColor=_80.asHex();
-this.inputs.slider.style.top=this.truncate(y,0,255)+"px";
-return this.setColor(_80);
-},onOKClicked:function(ev){
-var r=this.truncate(this.inputs.R.value,0,255);
-var g=this.truncate(this.inputs.G.value,0,255);
-var b=this.truncate(this.inputs.B.value,0,255);
-var _81=new Rico.Color(r,g,b);
-this.updateColor(_81);
-this.inputs.oldColor.style.backgroundColor=_81.asHex();
+},
+changeSV : function(ev)
+{
+var px = Event.pointerX(ev);
+var py = Event.pointerY(ev);
+var pos = Position.cumulativeOffset(this.inputs.background);
+var x = this.truncate(px - pos[0],0,255);
+var y = this.truncate(py - pos[1],0,255);
+var h = this.truncate(this.inputs.H.value,0,360)/360;
+var s = x/255;
+var b = (255-y)/255;
+var color = new Rico.Color();
+color.rgb = Rico.Color.HSBtoRGB(h,s,b);
+this.inputs.selector.style.left = x+"px";
+this.inputs.selector.style.top = y+"px";
+this.inputs.currentColor.style.backgroundColor = color.asHex();
+return this.setColor(color);
+},
+changeH : function(ev)
+{
+var py = Event.pointerY(ev);
+var pos = Position.cumulativeOffset(this.inputs.background);
+var y = this.truncate(py - pos[1],0,255);
+var h = (255-y)/255;
+var s = parseInt(this.inputs.S.value)/100;
+var b = parseInt(this.inputs.V.value)/100;
+var color = new Rico.Color();
+color.rgb = Rico.Color.HSBtoRGB(h,s,b);
+var hue = new Rico.Color(color.rgb.r,color.rgb.g,color.rgb.b);
+hue.setSaturation(1); hue.setBrightness(1);
+this.inputs.background.style.backgroundColor = hue.asHex();
+this.inputs.currentColor.style.backgroundColor = color.asHex();
+this.inputs.slider.style.top = this.truncate(y,0,255)+"px";
+return this.setColor(color);
+},
+onOKClicked : function(ev)
+{
+var r = this.truncate(this.inputs.R.value,0,255);
+var g = this.truncate(this.inputs.G.value,0,255);
+var b = this.truncate(this.inputs.B.value,0,255);
+var color = new Rico.Color(r,g,b);
+this.updateColor(color);
+this.inputs.oldColor.style.backgroundColor = color.asHex();
this.hide(ev);
-},onInputChanged:function(ev,_82){
-if(this.isMouseDownOnColor||isMouseDownOnHue){
+},
+onInputChanged : function(ev, type)
+{
+if(this.isMouseDownOnColor || isMouseDownOnHue)
return;
-}
-switch(_82){
-case "H":
-case "S":
-case "V":
-var h=this.truncate(this.inputs.H.value,0,360)/360;
-var s=this.truncate(this.inputs.S.value,0,100)/100;
-var b=this.truncate(this.inputs.V.value,0,100)/100;
-var _83=new Rico.Color();
-_83.rgb=Rico.Color.HSBtoRGB(h,s,b);
-return this.setColor(_83,true);
-case "R":
-case "G":
-case "B":
-var r=this.truncate(this.inputs.R.value,0,255);
-var g=this.truncate(this.inputs.G.value,0,255);
-var b=this.truncate(this.inputs.B.value,0,255);
-var _83=new Rico.Color(r,g,b);
-return this.setColor(_83,true);
+switch(type)
+{
+case "H": case "S": case "V":
+var h = this.truncate(this.inputs.H.value,0,360)/360;
+var s = this.truncate(this.inputs.S.value,0,100)/100;
+var b = this.truncate(this.inputs.V.value,0,100)/100;
+var color = new Rico.Color();
+color.rgb = Rico.Color.HSBtoRGB(h,s,b);
+return this.setColor(color,true);
+case "R": case "G": case "B":
+var r = this.truncate(this.inputs.R.value,0,255);
+var g = this.truncate(this.inputs.G.value,0,255);
+var b = this.truncate(this.inputs.B.value,0,255);
+var color = new Rico.Color(r,g,b);
+return this.setColor(color,true);
case "HEX":
-var _83=Rico.Color.createFromHex(this.inputs.HEX.value);
-return this.setColor(_83,true);
+var color = Rico.Color.createFromHex(this.inputs.HEX.value);
+return this.setColor(color,true);
+}
+},
+setColor : function(color, update)
+{
+var hsb = color.asHSB();
+this.inputs.H.value = parseInt(hsb.h*360);
+this.inputs.S.value = parseInt(hsb.s*100);
+this.inputs.V.value = parseInt(hsb.b*100);
+this.inputs.R.value = color.rgb.r;
+this.inputs.G.value = color.rgb.g;
+this.inputs.B.value = color.rgb.b;
+this.inputs.HEX.value = color.asHex().substring(1).toUpperCase();
+var images = Prado.WebUI.TColorPicker.UIImages;
+var changeCss = color.isBright() ? 'removeClassName' : 'addClassName';
+Element[changeCss](this.inputs.selector, 'target_white');
+if(update)
+this.updateSelectors(color);
+},
+updateSelectors : function(color)
+{
+var hsb = color.asHSB();
+var pos = [hsb.s*255, hsb.b*255, hsb.h*255];
+this.inputs.selector.style.left = this.truncate(pos[0],0,255)+"px";
+this.inputs.selector.style.top = this.truncate(255-pos[1],0,255)+"px";
+this.inputs.slider.style.top = this.truncate(255-pos[2],0,255)+"px";
+var hue = new Rico.Color(color.rgb.r,color.rgb.g,color.rgb.b);
+hue.setSaturation(1); hue.setBrightness(1);
+this.inputs.background.style.backgroundColor = hue.asHex();
+this.inputs.currentColor.style.backgroundColor = color.asHex();
+},
+truncate : function(value, min, max)
+{
+value = parseInt(value);
+return value < min ? min : value > max ? max : value;
}
-},setColor:function(_84,_85){
-var hsb=_84.asHSB();
-this.inputs.H.value=parseInt(hsb.h*360);
-this.inputs.S.value=parseInt(hsb.s*100);
-this.inputs.V.value=parseInt(hsb.b*100);
-this.inputs.R.value=_84.rgb.r;
-this.inputs.G.value=_84.rgb.g;
-this.inputs.B.value=_84.rgb.b;
-this.inputs.HEX.value=_84.asHex().substring(1).toUpperCase();
-var _86=Prado.WebUI.TColorPicker.UIImages;
-var _87=_84.isBright()?"removeClassName":"addClassName";
-Element[_87](this.inputs.selector,"target_white");
-if(_85){
-this.updateSelectors(_84);
-}
-},updateSelectors:function(_88){
-var hsb=_88.asHSB();
-var pos=[hsb.s*255,hsb.b*255,hsb.h*255];
-this.inputs.selector.style.left=this.truncate(pos[0],0,255)+"px";
-this.inputs.selector.style.top=this.truncate(255-pos[1],0,255)+"px";
-this.inputs.slider.style.top=this.truncate(255-pos[2],0,255)+"px";
-var hue=new Rico.Color(_88.rgb.r,_88.rgb.g,_88.rgb.b);
-hue.setSaturation(1);
-hue.setBrightness(1);
-this.inputs.background.style.backgroundColor=hue.asHex();
-this.inputs.currentColor.style.backgroundColor=_88.asHex();
-},truncate:function(_89,min,max){
-_89=parseInt(_89);
-return _89<min?min:_89>max?max:_89;
-}});
-
+});
diff --git a/framework/Web/Javascripts/js/datepicker.js b/framework/Web/Javascripts/js/datepicker.js
index 7cfad904..e82507ea 100644
--- a/framework/Web/Javascripts/js/datepicker.js
+++ b/framework/Web/Javascripts/js/datepicker.js
@@ -1,458 +1,507 @@
-Prado.WebUI.TDatePicker=Class.create();
-Prado.WebUI.TDatePicker.prototype={MonthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],ShortWeekDayNames:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],Format:"yyyy-MM-dd",FirstDayOfWeek:1,ClassName:"TDatePicker",FromYear:2000,UpToYear:2015,initialize:function(_1){
-this.options=_1||[];
-this.control=$(_1.ID);
-this.dateSlot=new Array(42);
-this.weekSlot=new Array(6);
-this.minimalDaysInFirstWeek=4;
-this.selectedDate=this.newDate();
-if(this.options.Trigger){
-this.trigger=$(this.options.Trigger);
-var _2=this.options.TriggerEvent||"click";
-}else{
-this.trigger=this.control;
-var _2=this.options.TriggerEvent||"focus";
-}
-Object.extend(this,_1);
-Event.observe(this.trigger,_2,this.show.bindEvent(this));
+Prado.WebUI.TDatePicker = Class.create();
+Prado.WebUI.TDatePicker.prototype =
+{
+MonthNames : ["January","February","March","April",
+"May","June","July","August",
+"September","October","November","December"
+],
+ShortWeekDayNames : ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ],
+Format : "yyyy-MM-dd",
+FirstDayOfWeek : 1,
+ClassName : "TDatePicker",
+FromYear : 2000, UpToYear: 2015,
+initialize : function(options)
+{
+this.options = options || [];
+this.control = $(options.ID);
+this.dateSlot = new Array(42);
+this.weekSlot = new Array(6);
+this.minimalDaysInFirstWeek= 4;
+this.selectedDate = this.newDate();
+if(this.options.Trigger)
+{
+this.trigger = $(this.options.Trigger) ;
+var triggerEvent = this.options.TriggerEvent || "click";
+}
+else
+{
+this.trigger= this.control;
+var triggerEvent = this.options.TriggerEvent || "focus";
+}
+Object.extend(this,options);
+Event.observe(this.trigger, triggerEvent, this.show.bindEvent(this));
this.create();
-},create:function(){
-var _3;
-var _4;
-var _5;
+},
+create : function()
+{
+var div;
+var table;
+var tbody;
var tr;
var td;
-this._calDiv=document.createElement("div");
-this._calDiv.className=this.ClassName;
-this._calDiv.style.display="none";
-this._calDiv.style.position="absolute";
-_3=document.createElement("div");
-_3.className="calendarHeader";
-this._calDiv.appendChild(_3);
-_4=document.createElement("table");
-_4.style.cellSpacing=0;
-_3.appendChild(_4);
-_5=document.createElement("tbody");
-_4.appendChild(_5);
-tr=document.createElement("tr");
-_5.appendChild(tr);
-td=document.createElement("td");
-var _8=document.createElement("button");
-_8.className="prevMonthButton";
-_8.appendChild(document.createTextNode("<<"));
-td.appendChild(_8);
+this._calDiv = document.createElement("div");
+this._calDiv.className = this.ClassName;
+this._calDiv.style.display = "none";
+this._calDiv.style.position = "absolute"
+div = document.createElement("div");
+div.className = "calendarHeader";
+this._calDiv.appendChild(div);
+table = document.createElement("table");
+table.style.cellSpacing = 0;
+div.appendChild(table);
+tbody = document.createElement("tbody");
+table.appendChild(tbody);
+tr = document.createElement("tr");
+tbody.appendChild(tr);
+td = document.createElement("td");
+var previousMonth = document.createElement("button");
+previousMonth.className = "prevMonthButton";
+previousMonth.appendChild(document.createTextNode("<<"));
+td.appendChild(previousMonth);
tr.appendChild(td);
-td=document.createElement("td");
+td = document.createElement("td");
tr.appendChild(td);
-this._monthSelect=document.createElement("select");
-this._monthSelect.className="months";
-for(var i=0;i<this.MonthNames.length;i++){
-var opt=document.createElement("option");
-opt.innerHTML=this.MonthNames[i];
-opt.value=i;
-if(i==this.selectedDate.getMonth()){
-opt.selected=true;
+this._monthSelect = document.createElement("select");
+this._monthSelect.className = "months";
+for (var i = 0 ; i < this.MonthNames.length ; i++) {
+var opt = document.createElement("option");
+opt.innerHTML = this.MonthNames[i];
+opt.value = i;
+if (i == this.selectedDate.getMonth()) {
+opt.selected = true;
}
this._monthSelect.appendChild(opt);
}
td.appendChild(this._monthSelect);
-td=document.createElement("td");
-td.className="labelContainer";
+td = document.createElement("td");
+td.className = "labelContainer";
tr.appendChild(td);
-this._yearSelect=document.createElement("select");
-for(var i=this.FromYear;i<=this.UpToYear;++i){
-var opt=document.createElement("option");
-opt.innerHTML=i;
-opt.value=i;
-if(i==this.selectedDate.getFullYear()){
-opt.selected=false;
+this._yearSelect = document.createElement("select");
+for(var i=this.FromYear; i <= this.UpToYear; ++i) {
+var opt = document.createElement("option");
+opt.innerHTML = i;
+opt.value = i;
+if (i == this.selectedDate.getFullYear()) {
+opt.selected = false;
}
this._yearSelect.appendChild(opt);
}
td.appendChild(this._yearSelect);
-td=document.createElement("td");
-td.className="nextMonthButton";
-var _11=document.createElement("button");
-_11.appendChild(document.createTextNode(">>"));
-td.appendChild(_11);
+td = document.createElement("td");
+td.className = "nextMonthButton";
+var nextMonth = document.createElement("button");
+nextMonth.appendChild(document.createTextNode(">>"));
+td.appendChild(nextMonth);
tr.appendChild(td);
-_3=document.createElement("div");
-_3.className="calendarBody";
-this._calDiv.appendChild(_3);
-var _12=_3;
-var _13;
-_4=document.createElement("table");
-_4.className="grid";
-_3.appendChild(_4);
-var _14=document.createElement("thead");
-_4.appendChild(_14);
-tr=document.createElement("tr");
-_14.appendChild(tr);
-for(i=0;i<7;++i){
-td=document.createElement("th");
-_13=document.createTextNode(this.ShortWeekDayNames[(i+this.FirstDayOfWeek)%7]);
-td.appendChild(_13);
-td.className="weekDayHead";
+div = document.createElement("div");
+div.className = "calendarBody";
+this._calDiv.appendChild(div);
+var calendarBody = div;
+var text;
+table = document.createElement("table");
+table.className = "grid";
+div.appendChild(table);
+var thead = document.createElement("thead");
+table.appendChild(thead);
+tr = document.createElement("tr");
+thead.appendChild(tr);
+for(i=0; i < 7; ++i) {
+td = document.createElement("th");
+text = document.createTextNode(this.ShortWeekDayNames[(i+this.FirstDayOfWeek)%7]);
+td.appendChild(text);
+td.className = "weekDayHead";
tr.appendChild(td);
}
-_5=document.createElement("tbody");
-_4.appendChild(_5);
-for(week=0;week<6;++week){
-tr=document.createElement("tr");
-_5.appendChild(tr);
-for(day=0;day<7;++day){
-td=document.createElement("td");
-td.className="calendarDate";
-_13=document.createTextNode(String.fromCharCode(160));
-td.appendChild(_13);
+tbody = document.createElement("tbody");
+table.appendChild(tbody);
+for(week=0; week<6; ++week) {
+tr = document.createElement("tr");
+tbody.appendChild(tr);
+for(day=0; day<7; ++day) {
+td = document.createElement("td");
+td.className = "calendarDate";
+text = document.createTextNode(String.fromCharCode(160));
+td.appendChild(text);
tr.appendChild(td);
-var tmp=new Object();
-tmp.tag="DATE";
-tmp.value=-1;
-tmp.data=_13;
-this.dateSlot[(week*7)+day]=tmp;
-Event.observe(td,"mouseover",this.hover.bindEvent(this));
-Event.observe(td,"mouseout",this.hover.bindEvent(this));
-}
-}
-_3=document.createElement("div");
-_3.className="calendarFooter";
-this._calDiv.appendChild(_3);
-var _16=document.createElement("button");
-_16.className="todayButton";
-var _17=this.newDate();
-var _18=_17.SimpleFormat(this.Format);
-_16.appendChild(document.createTextNode(_18));
-_3.appendChild(_16);
-if(Prado.Browser().ie){
-this.iePopUp=document.createElement("iframe");
-this.iePopUp.src="";
-this.iePopUp.style.position="absolute";
-this.iePopUp.scrolling="no";
-this.iePopUp.frameBorder="0";
+var tmp = new Object();
+tmp.tag = "DATE";
+tmp.value = -1;
+tmp.data = text;
+this.dateSlot[(week*7)+day] = tmp;
+Event.observe(td, "mouseover", this.hover.bindEvent(this));
+Event.observe(td, "mouseout", this.hover.bindEvent(this));
+}
+}
+div = document.createElement("div");
+div.className = "calendarFooter";
+this._calDiv.appendChild(div);
+var todayButton = document.createElement("button");
+todayButton.className = "todayButton";
+var today = this.newDate();
+var buttonText = today.SimpleFormat(this.Format);
+todayButton.appendChild(document.createTextNode(buttonText));
+div.appendChild(todayButton);
+if(Prado.Browser().ie)
+{
+this.iePopUp = document.createElement('iframe');
+this.iePopUp.src = "";
+this.iePopUp.style.position = "absolute"
+this.iePopUp.scrolling="no"
+this.iePopUp.frameBorder="0"
document.body.appendChild(this.iePopUp);
}
document.body.appendChild(this._calDiv);
this.update();
this.updateHeader();
this.ieHack(true);
-_8.hideFocus=true;
-_11.hideFocus=true;
-_16.hideFocus=true;
-Event.observe(_8,"click",this.prevMonth.bindEvent(this));
-Event.observe(_11,"click",this.nextMonth.bindEvent(this));
-Event.observe(_16,"click",this.selectToday.bindEvent(this));
-Event.observe(this._monthSelect,"change",this.monthSelect.bindEvent(this));
-Event.observe(this._yearSelect,"change",this.yearSelect.bindEvent(this));
-Event.observe(this._calDiv,"mousewheel",this.mouseWheelChange.bindEvent(this));
-Event.observe(_12,"click",this.selectDate.bindEvent(this));
-},ieHack:function(_19){
-if(this.iePopUp){
-this.iePopUp.style.display="block";
-this.iePopUp.style.top=(this._calDiv.offsetTop-1)+"px";
-this.iePopUp.style.left=(this._calDiv.offsetLeft-1)+"px";
-this.iePopUp.style.width=Math.abs(this._calDiv.offsetWidth-2)+"px";
-this.iePopUp.style.height=(this._calDiv.offsetHeight+1)+"px";
-if(_19){
-this.iePopUp.style.display="none";
-}
-}
-},keyPressed:function(ev){
-if(!this.showing){
-return;
-}
-if(!ev){
-ev=document.parentWindow.event;
-}
-var kc=ev.keyCode!=null?ev.keyCode:ev.charCode;
-if(kc==Event.KEY_RETURN){
+previousMonth.hideFocus = true;
+nextMonth.hideFocus = true;
+todayButton.hideFocus = true;
+Event.observe(previousMonth, "click", this.prevMonth.bindEvent(this));
+Event.observe(nextMonth, "click", this.nextMonth.bindEvent(this));
+Event.observe(todayButton, "click", this.selectToday.bindEvent(this));
+Event.observe(this._monthSelect, "change", this.monthSelect.bindEvent(this));
+Event.observe(this._yearSelect, "change", this.yearSelect.bindEvent(this));
+Event.observe(this._calDiv, "mousewheel", this.mouseWheelChange.bindEvent(this));
+Event.observe(calendarBody, "click", this.selectDate.bindEvent(this));
+},
+ieHack : function(cleanup)
+{
+if(this.iePopUp)
+{
+this.iePopUp.style.display = "block";
+this.iePopUp.style.top = (this._calDiv.offsetTop -1 ) + "px";
+this.iePopUp.style.left = (this._calDiv.offsetLeft -1)+ "px";
+this.iePopUp.style.width = Math.abs(this._calDiv.offsetWidth -2)+ "px";
+this.iePopUp.style.height = (this._calDiv.offsetHeight + 1)+ "px";
+if(cleanup) this.iePopUp.style.display = "none";
+}
+},
+keyPressed : function(ev)
+{
+if(!this.showing) return;
+if (!ev) ev = document.parentWindow.event;
+var kc = ev.keyCode != null ? ev.keyCode : ev.charCode;
+if(kc == Event.KEY_RETURN)
+{
this.setSelectedDate(this.selectedDate);
Event.stop(ev);
this.hide();
}
-if(kc==Event.KEY_ESC){
-Event.stop(ev);
-this.hide();
-}
-var _22=function(_23,_24){
-_23=(_23+12)%12;
-var _25=[31,28,31,30,31,30,31,31,30,31,30,31];
-var res=_25[_23];
-if(_23==1){
-res+=_24%4==0&&!(_24%400==0)?1:0;
-}
+if(kc == Event.KEY_ESC)
+{
+Event.stop(ev); this.hide();
+}
+var getDaysPerMonth = function (nMonth, nYear)
+{
+nMonth = (nMonth + 12) % 12;
+var days= [31,28,31,30,31,30,31,31,30,31,30,31];
+var res = days[nMonth];
+if (nMonth == 1)
+res += nYear % 4 == 0 && !(nYear % 400 == 0) ? 1 : 0;
return res;
-};
-if(kc<37||kc>40){
-return true;
-}
-var _27=this.selectedDate;
-var d=_27.valueOf();
-if(kc==Event.KEY_LEFT){
-if(ev.ctrlKey||ev.shiftKey){
-_27.setDate(Math.min(_27.getDate(),_22(_27.getMonth()-1,_27.getFullYear())));
-d=_27.setMonth(_27.getMonth()-1);
-}else{
-d-=86400000;
-}
-}else{
-if(kc==Event.KEY_RIGHT){
-if(ev.ctrlKey||ev.shiftKey){
-_27.setDate(Math.min(_27.getDate(),_22(_27.getMonth()+1,_27.getFullYear())));
-d=_27.setMonth(_27.getMonth()+1);
-}else{
-d+=86400000;
-}
-}else{
-if(kc==Event.KEY_UP){
-if(ev.ctrlKey||ev.shiftKey){
-_27.setDate(Math.min(_27.getDate(),_22(_27.getMonth(),_27.getFullYear()-1)));
-d=_27.setFullYear(_27.getFullYear()-1);
-}else{
-d-=604800000;
-}
-}else{
-if(kc==Event.KEY_DOWN){
-if(ev.ctrlKey||ev.shiftKey){
-_27.setDate(Math.min(_27.getDate(),_22(_27.getMonth(),_27.getFullYear()+1)));
-d=_27.setFullYear(_27.getFullYear()+1);
-}else{
-d+=7*24*61*60*1000;
-}
-}
-}
}
+if(kc < 37 || kc > 40) return true;
+var current = this.selectedDate;
+var d = current.valueOf();
+if(kc == Event.KEY_LEFT)
+{
+if(ev.ctrlKey || ev.shiftKey)
+{
+current.setDate( Math.min(current.getDate(), getDaysPerMonth(current.getMonth() - 1,current.getFullYear())) );
+d = current.setMonth( current.getMonth() - 1 );
+}
+else
+d -= 86400000;
+}
+else if (kc == Event.KEY_RIGHT)
+{
+if(ev.ctrlKey || ev.shiftKey)
+{
+current.setDate( Math.min(current.getDate(), getDaysPerMonth(current.getMonth() + 1,current.getFullYear())) );
+d = current.setMonth( current.getMonth() + 1 );
+}
+else
+d += 86400000;
+}
+else if (kc == Event.KEY_UP)
+{
+if(ev.ctrlKey || ev.shiftKey)
+{
+current.setDate( Math.min(current.getDate(), getDaysPerMonth(current.getMonth(),current.getFullYear() - 1)) );
+d = current.setFullYear( current.getFullYear() - 1 );
+}
+else
+d -= 604800000;
+}
+else if (kc == Event.KEY_DOWN)
+{
+if(ev.ctrlKey || ev.shiftKey)
+{
+current.setDate( Math.min(current.getDate(), getDaysPerMonth(current.getMonth(),current.getFullYear() + 1)) );
+d = current.setFullYear( current.getFullYear() + 1 );
+}
+else
+d += 7 * 24 * 61 * 60 * 1000;
}
this.setSelectedDate(d);
Event.stop(ev);
-},selectDate:function(ev){
-var el=Event.element(ev);
-while(el.nodeType!=1){
-el=el.parentNode;
-}
-while(el!=null&&el.tagName&&el.tagName.toLowerCase()!="td"){
-el=el.parentNode;
-}
-if(el==null||el.tagName==null||el.tagName.toLowerCase()!="td"){
+},
+selectDate : function(ev)
+{
+var el = Event.element(ev);
+while (el.nodeType != 1)
+el = el.parentNode;
+while (el != null && el.tagName && el.tagName.toLowerCase() != "td")
+el = el.parentNode;
+if (el == null || el.tagName == null || el.tagName.toLowerCase() != "td")
return;
-}
-var d=this.newDate(this.selectedDate);
-var n=Number(el.firstChild.data);
-if(isNaN(n)||n<=0||n==null){
+var d = this.newDate(this.selectedDate);
+var n = Number(el.firstChild.data);
+if (isNaN(n) || n <= 0 || n == null)
return;
-}
d.setDate(n);
this.setSelectedDate(d);
this.hide();
-},selectToday:function(){
-if(this.selectedDate.toISODate()==this.newDate().toISODate()){
+},
+selectToday : function()
+{
+if(this.selectedDate.toISODate() == this.newDate().toISODate())
this.hide();
-}
this.setSelectedDate(this.newDate());
-},clearSelection:function(){
+},
+clearSelection : function()
+{
this.setSelectedDate(this.newDate());
this.hide();
-},monthSelect:function(ev){
+},
+monthSelect : function(ev)
+{
this.setMonth(Form.Element.getValue(Event.element(ev)));
-},yearSelect:function(ev){
+},
+yearSelect : function(ev)
+{
this.setYear(Form.Element.getValue(Event.element(ev)));
-},mouseWheelChange:function(e){
-if(e==null){
-e=document.parentWindow.event;
-}
-var n=-e.wheelDelta/120;
-var d=this.newDate(this.selectedDate);
-var m=d.getMonth()+n;
+},
+mouseWheelChange : function (e)
+{
+if (e == null) e = document.parentWindow.event;
+var n = - e.wheelDelta / 120;
+var d = this.newDate(this.selectedDate);
+var m = d.getMonth() + n;
this.setMonth(m);
return false;
-},onchange:function(){
-if(this.options.InputMode=="TextBox"){
-this.control.value=this.formatDate();
-}else{
-var day=$(this.options.ID+"_day");
-var _34=$(this.options.ID+"_month");
-var _35=$(this.options.ID+"_year");
-var _36=this.selectedDate;
-if(day){
-day.selectedIndex=_36.getDate()-1;
-}
-if(_34){
-_34.selectedIndex=_36.getMonth();
-}
-if(_35){
-var _37=_35.options;
-var _38=_36.getFullYear();
-for(var i=0;i<_37.length;i++){
-_37[i].selected=_37[i].value.toInteger()==_38;
-}
-}
-}
-},formatDate:function(){
-return this.selectedDate?this.selectedDate.SimpleFormat(this.Format):"";
-},newDate:function(_39){
-if(!_39){
-_39=new Date();
-}
-if(isString(_39)||isNumber(_39)){
-_39=new Date(_39);
-}
-return new Date(_39.getFullYear(),_39.getMonth(),_39.getDate(),0,0,0);
-},setSelectedDate:function(_40){
-if(_40==null){
+},
+onchange : function()
+{
+if(this.options.InputMode == "TextBox")
+this.control.value = this.formatDate();
+else
+{
+var day = $(this.options.ID+"_day");
+var month = $(this.options.ID+"_month");
+var year = $(this.options.ID+"_year");
+var date = this.selectedDate;
+if(day)
+day.selectedIndex = date.getDate()-1;
+if(month)
+month.selectedIndex = date.getMonth();
+if(year)
+{
+var years = year.options;
+var currentYear = date.getFullYear();
+for(var i = 0; i < years.length; i++)
+years[i].selected = years[i].value.toInteger() == currentYear;
+}
+}
+},
+formatDate : function()
+{
+return this.selectedDate ? this.selectedDate.SimpleFormat(this.Format) : '';
+},
+newDate : function(date)
+{
+if(!date)
+date = new Date();
+if(isString(date)|| isNumber(date))
+date = new Date(date);
+return new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0,0,0);
+},
+setSelectedDate : function(date)
+{
+if (date == null)
return;
-}
-this.selectedDate=this.newDate(_40);
+this.selectedDate = this.newDate(date);
this.updateHeader();
this.update();
-if(isFunction(this.onchange)){
+if (isFunction(this.onchange))
this.onchange();
-}
-},getElement:function(){
+},
+getElement : function()
+{
return this._calDiv;
-},getSelectedDate:function(){
-return isNull(this.selectedDate)?null:this.newDate(this.selectedDate);
-},setYear:function(_41){
-var d=this.newDate(this.selectedDate);
-d.setFullYear(_41);
+},
+getSelectedDate : function ()
+{
+return isNull(this.selectedDate) ? null : this.newDate(this.selectedDate);
+},
+setYear : function(year)
+{
+var d = this.newDate(this.selectedDate);
+d.setFullYear(year);
this.setSelectedDate(d);
-},setMonth:function(_42){
-var d=this.newDate(this.selectedDate);
-d.setMonth(_42);
+},
+setMonth : function (month)
+{
+var d = this.newDate(this.selectedDate);
+d.setMonth(month);
this.setSelectedDate(d);
-},nextMonth:function(){
+},
+nextMonth : function ()
+{
this.setMonth(this.selectedDate.getMonth()+1);
-},prevMonth:function(){
+},
+prevMonth : function ()
+{
this.setMonth(this.selectedDate.getMonth()-1);
-},show:function(){
-if(!this.showing){
-var pos=Position.cumulativeOffset(this.control);
-if(this.options.InputMode=="TextBox"){
-pos[1]+=this.control.offsetHeight;
-}else{
-if($(this.options.ID+"_day")){
-pos[1]+=$(this.options.ID+"_day").offsetHeight-1;
-}
-}
-this._calDiv.style.display="block";
-this._calDiv.style.top=(pos[1]-1)+"px";
-this._calDiv.style.left=pos[0]+"px";
+},
+show : function()
+{
+if(!this.showing)
+{
+var pos = Position.cumulativeOffset(this.control);
+if(this.options.InputMode == "TextBox")
+pos[1] += this.control.offsetHeight;
+else
+{
+if($(this.options.ID+"_day"))
+pos[1] += $(this.options.ID+"_day").offsetHeight-1;
+}
+this._calDiv.style.display = "block";
+this._calDiv.style.top = (pos[1]-1) + "px";
+this._calDiv.style.left = pos[0] + "px";
this.ieHack(false);
-this.documentClickEvent=this.hideOnClick.bindEvent(this);
-this.documentKeyDownEvent=this.keyPressed.bindEvent(this);
-Event.observe(document.body,"click",this.documentClickEvent);
-var _44=this.getDateFromInput();
-if(!isNull(_44)){
-this.selectedDate=_44;
-this.setSelectedDate(_44);
-}
-Event.observe(document,"keydown",this.documentKeyDownEvent);
-this.showing=true;
-}
-},getDateFromInput:function(){
-if(this.options.InputMode=="TextBox"){
-return Date.SimpleParse($F(this.control),this.Format);
-}else{
+this.documentClickEvent = this.hideOnClick.bindEvent(this);
+this.documentKeyDownEvent = this.keyPressed.bindEvent(this);
+Event.observe(document.body, "click", this.documentClickEvent);
+var date = this.getDateFromInput();
+if(!isNull(date))
+{
+this.selectedDate = date;
+this.setSelectedDate(date);
+}
+Event.observe(document,"keydown", this.documentKeyDownEvent);
+this.showing = true;
+}
+},
+getDateFromInput : function()
+{
+if(this.options.InputMode == "TextBox")
+return Date.SimpleParse($F(this.control), this.Format);
+else
+{
var now=new Date();
-var _46=now.getFullYear();
-var _47=now.getMonth();
-var _48=1;
-if($(this.options.ID+"_day")){
-day=$F(this.options.ID+"_day");
+var year=now.getFullYear();
+var month=now.getMonth();
+var date=1;
+if($(this.options.ID+"_day"))
+day = $F(this.options.ID+"_day");
+if($(this.options.ID+"_month"))
+month = $F(this.options.ID+"_month");
+if($(this.options.ID+"_year"))
+year = $F(this.options.ID+"_year");
+var newdate=new Date(year,month,day, 0, 0, 0);
+return newdate;
+}
+},
+hideOnClick : function(ev)
+{
+if(!this.showing) return;
+var el = Event.element(ev);
+var within = false;
+do
+{
+within = within || el.className == this.ClassName;
+within = within || el == this.trigger;
+within = within || el == this.control;
+if(within) break;
+el = el.parentNode;
+}
+while(el);
+if(!within) this.hide();
+},
+hide : function()
+{
+if(this.showing)
+{
+this._calDiv.style.display = "none";
+if(this.iePopUp)
+this.iePopUp.style.display = "none";
+this.showing = false;
+Event.stopObserving(document.body, "click", this.documentClickEvent);
+Event.stopObserving(document,"keydown", this.documentKeyDownEvent);
+}
+},
+update : function()
+{
+var date = this.selectedDate;
+var today = (this.newDate()).toISODate();
+var selected = date.toISODate();
+var d1 = new Date(date.getFullYear(), date.getMonth(), 1);
+var d2 = new Date(date.getFullYear(), date.getMonth()+1, 1);
+var monthLength = Math.round((d2 - d1) / (24 * 60 * 60 * 1000));
+var firstIndex = (d1.getDay() - this.FirstDayOfWeek) % 7 ;
+if (firstIndex < 0)
+firstIndex += 7;
+var index = 0;
+while (index < firstIndex) {
+this.dateSlot[index].value = -1;
+this.dateSlot[index].data.data = String.fromCharCode(160);
+this.dateSlot[index].data.parentNode.className = "empty";
+index++;
+}
+for (i = 1; i <= monthLength; i++, index++) {
+var slot = this.dateSlot[index];
+var slotNode = slot.data.parentNode;
+slot.value = i;
+slot.data.data = i;
+slotNode.className = "date";
+if (d1.toISODate() == today) {
+slotNode.className += " today";
+}
+if (d1.toISODate() == selected) {
+slotNode.className += " selected";
+}
+d1 = new Date(d1.getFullYear(), d1.getMonth(), d1.getDate()+1);
+}
+var lastDateIndex = index;
+while(index < 42) {
+this.dateSlot[index].value = -1;
+this.dateSlot[index].data.data = String.fromCharCode(160);
+this.dateSlot[index].data.parentNode.className = "empty";
+++index;
+}
+},
+hover : function(ev)
+{
+Element.condClassName(Event.element(ev), "hover", ev.type=="mouseover");
+},
+updateHeader : function () {
+var options = this._monthSelect.options;
+var m = this.selectedDate.getMonth();
+for(var i=0; i < options.length; ++i) {
+options[i].selected = false;
+if (options[i].value == m) {
+options[i].selected = true;
+}
+}
+options = this._yearSelect.options;
+var year = this.selectedDate.getFullYear();
+for(var i=0; i < options.length; ++i) {
+options[i].selected = false;
+if (options[i].value == year) {
+options[i].selected = true;
}
-if($(this.options.ID+"_month")){
-_47=$F(this.options.ID+"_month");
}
-if($(this.options.ID+"_year")){
-_46=$F(this.options.ID+"_year");
}
-var _49=new Date(_46,_47,day,0,0,0);
-return _49;
-}
-},hideOnClick:function(ev){
-if(!this.showing){
-return;
-}
-var el=Event.element(ev);
-var _50=false;
-do{
-_50=_50||el.className==this.ClassName;
-_50=_50||el==this.trigger;
-_50=_50||el==this.control;
-if(_50){
-break;
-}
-el=el.parentNode;
-}while(el);
-if(!_50){
-this.hide();
-}
-},hide:function(){
-if(this.showing){
-this._calDiv.style.display="none";
-if(this.iePopUp){
-this.iePopUp.style.display="none";
-}
-this.showing=false;
-Event.stopObserving(document.body,"click",this.documentClickEvent);
-Event.stopObserving(document,"keydown",this.documentKeyDownEvent);
-}
-},update:function(){
-var _51=this.selectedDate;
-var _52=(this.newDate()).toISODate();
-var _53=_51.toISODate();
-var d1=new Date(_51.getFullYear(),_51.getMonth(),1);
-var d2=new Date(_51.getFullYear(),_51.getMonth()+1,1);
-var _56=Math.round((d2-d1)/(24*60*60*1000));
-var _57=(d1.getDay()-this.FirstDayOfWeek)%7;
-if(_57<0){
-_57+=7;
-}
-var _58=0;
-while(_58<_57){
-this.dateSlot[_58].value=-1;
-this.dateSlot[_58].data.data=String.fromCharCode(160);
-this.dateSlot[_58].data.parentNode.className="empty";
-_58++;
-}
-for(i=1;i<=_56;i++,_58++){
-var _59=this.dateSlot[_58];
-var _60=_59.data.parentNode;
-_59.value=i;
-_59.data.data=i;
-_60.className="date";
-if(d1.toISODate()==_52){
-_60.className+=" today";
-}
-if(d1.toISODate()==_53){
-_60.className+=" selected";
-}
-d1=new Date(d1.getFullYear(),d1.getMonth(),d1.getDate()+1);
-}
-var _61=_58;
-while(_58<42){
-this.dateSlot[_58].value=-1;
-this.dateSlot[_58].data.data=String.fromCharCode(160);
-this.dateSlot[_58].data.parentNode.className="empty";
-++_58;
-}
-},hover:function(ev){
-Element.condClassName(Event.element(ev),"hover",ev.type=="mouseover");
-},updateHeader:function(){
-var _62=this._monthSelect.options;
-var m=this.selectedDate.getMonth();
-for(var i=0;i<_62.length;++i){
-_62[i].selected=false;
-if(_62[i].value==m){
-_62[i].selected=true;
-}
-}
-_62=this._yearSelect.options;
-var _63=this.selectedDate.getFullYear();
-for(var i=0;i<_62.length;++i){
-_62[i].selected=false;
-if(_62[i].value==_63){
-_62[i].selected=true;
-}
-}
-}};
-
+};
diff --git a/framework/Web/Javascripts/js/effects.js b/framework/Web/Javascripts/js/effects.js
index d72e3eba..24aea4f9 100644
--- a/framework/Web/Javascripts/js/effects.js
+++ b/framework/Web/Javascripts/js/effects.js
@@ -1,729 +1,855 @@
-String.prototype.parseColor=function(){
-var _1="#";
-if(this.slice(0,4)=="rgb("){
-var _2=this.slice(4,this.length-1).split(",");
-var i=0;
-do{
-_1+=parseInt(_2[i]).toColorPart();
-}while(++i<3);
-}else{
-if(this.slice(0,1)=="#"){
-if(this.length==4){
-for(var i=1;i<4;i++){
-_1+=(this.charAt(i)+this.charAt(i)).toLowerCase();
-}
-}
-if(this.length==7){
-_1=this.toLowerCase();
+
+String.prototype.parseColor = function() {
+var color = '#';
+if(this.slice(0,4) == 'rgb(') {
+var cols = this.slice(4,this.length-1).split(',');
+var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);
+} else {
+if(this.slice(0,1) == '#') {
+if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();
+if(this.length==7) color = this.toLowerCase();
+}
+}
+return(color.length==7 ? color : (arguments[0] || this));
+}
+Element.collectTextNodes = function(element) {
+return $A($(element).childNodes).collect( function(node) {
+return (node.nodeType==3 ? node.nodeValue :
+(node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
+}).flatten().join('');
+}
+Element.collectTextNodesIgnoreClass = function(element, className) {
+return $A($(element).childNodes).collect( function(node) {
+return (node.nodeType==3 ? node.nodeValue :
+((node.hasChildNodes() && !Element.hasClassName(node,className)) ?
+Element.collectTextNodesIgnoreClass(node, className) : ''));
+}).flatten().join('');
+}
+Element.setContentZoom = function(element, percent) {
+element = $(element);
+Element.setStyle(element, {fontSize: (percent/100) + 'em'});
+if(navigator.appVersion.indexOf('AppleWebKit')>0) window.scrollBy(0,0);
+}
+Element.getOpacity = function(element){
+var opacity;
+if (opacity = Element.getStyle(element, 'opacity'))
+return parseFloat(opacity);
+if (opacity = (Element.getStyle(element, 'filter') || '').match(/alpha\(opacity=(.*)\)/))
+if(opacity[1]) return parseFloat(opacity[1]) / 100;
+return 1.0;
+}
+Element.setOpacity = function(element, value){
+element= $(element);
+if (value == 1){
+Element.setStyle(element, { opacity:
+(/Gecko/.test(navigator.userAgent) && !/Konqueror|Safari|KHTML/.test(navigator.userAgent)) ?
+0.999999 : null });
+if(/MSIE/.test(navigator.userAgent))
+Element.setStyle(element, {filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});
+} else {
+if(value < 0.00001) value = 0;
+Element.setStyle(element, {opacity: value});
+if(/MSIE/.test(navigator.userAgent))
+ Element.setStyle(element,
+ { filter: Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'') +
+ 'alpha(opacity='+value*100+')' });
+}
+}
+Element.getInlineOpacity = function(element){
+return $(element).style.opacity || '';
+}
+Element.childrenWithClassName = function(element, className, findFirst) {
+var classNameRegExp = new RegExp("(^|\\s)" + className + "(\\s|$)");
+var results = $A($(element).getElementsByTagName('*'))[findFirst ? 'detect' : 'select']( function(c) {
+return (c.className && c.className.match(classNameRegExp));
+});
+if(!results) results = [];
+return results;
+}
+Element.forceRerendering = function(element) {
+try {
+element = $(element);
+var n = document.createTextNode(' ');
+element.appendChild(n);
+element.removeChild(n);
+} catch(e) { }
+};
+Array.prototype.call = function() {
+var args = arguments;
+this.each(function(f){ f.apply(this, args) });
+}
+var Effect = {
+tagifyText: function(element) {
+var tagifyStyle = 'position:relative';
+if(/MSIE/.test(navigator.userAgent)) tagifyStyle += ';zoom:1';
+element = $(element);
+$A(element.childNodes).each( function(child) {
+if(child.nodeType==3) {
+child.nodeValue.toArray().each( function(character) {
+element.insertBefore(
+Builder.node('span',{style: tagifyStyle},
+character == ' ' ? String.fromCharCode(160) : character),
+child);
+});
+Element.remove(child);
}
+});
+},
+multiple: function(element, effect) {
+var elements;
+if(((typeof element == 'object') ||
+(typeof element == 'function')) &&
+ (element.length))
+elements = element;
+else
+elements = $(element).childNodes;
+var options = Object.extend({
+speed: 0.1,
+delay: 0.0
+}, arguments[2] || {});
+var masterDelay = options.delay;
+$A(elements).each( function(element, index) {
+new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
+});
+},
+PAIRS: {
+'slide':['SlideDown','SlideUp'],
+'blind':['BlindDown','BlindUp'],
+'appear': ['Appear','Fade']
+},
+toggle: function(element, effect) {
+element = $(element);
+effect = (effect || 'appear').toLowerCase();
+var options = Object.extend({
+queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
+}, arguments[2] || {});
+Effect[element.visible() ?
+Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
+}
+};
+var Effect2 = Effect;
+Effect.Transitions = {}
+Effect.Transitions.linear = function(pos) {
+return pos;
}
+Effect.Transitions.sinoidal = function(pos) {
+return (-Math.cos(pos*Math.PI)/2) + 0.5;
}
-return (_1.length==7?_1:(arguments[0]||this));
-};
-Element.collectTextNodes=function(_4){
-return $A($(_4).childNodes).collect(function(_5){
-return (_5.nodeType==3?_5.nodeValue:(_5.hasChildNodes()?Element.collectTextNodes(_5):""));
-}).flatten().join("");
-};
-Element.collectTextNodesIgnoreClass=function(_6,_7){
-return $A($(_6).childNodes).collect(function(_8){
-return (_8.nodeType==3?_8.nodeValue:((_8.hasChildNodes()&&!Element.hasClassName(_8,_7))?Element.collectTextNodes(_8):""));
-}).flatten().join("");
-};
-Element.setStyle=function(_9,_10){
-_9=$(_9);
-for(k in _10){
-_9.style[k.camelize()]=_10[k];
+Effect.Transitions.reverse= function(pos) {
+return 1-pos;
}
-};
-Element.setContentZoom=function(_11,_12){
-Element.setStyle(_11,{fontSize:(_12/100)+"em"});
-if(navigator.appVersion.indexOf("AppleWebKit")>0){
-window.scrollBy(0,0);
+Effect.Transitions.flicker = function(pos) {
+return ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
}
-};
-Element.getOpacity=function(_13){
-var _14;
-if(_14=Element.getStyle(_13,"opacity")){
-return parseFloat(_14);
+Effect.Transitions.wobble = function(pos) {
+return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
}
-if(_14=(Element.getStyle(_13,"filter")||"").match(/alpha\(opacity=(.*)\)/)){
-if(_14[1]){
-return parseFloat(_14[1])/100;
+Effect.Transitions.pulse = function(pos) {
+return (Math.floor(pos*10) % 2 == 0 ?
+(pos*10-Math.floor(pos*10)) : 1-(pos*10-Math.floor(pos*10)));
}
+Effect.Transitions.none = function(pos) {
+return 0;
}
+Effect.Transitions.full = function(pos) {
return 1;
-};
-Element.setOpacity=function(_15,_16){
-_15=$(_15);
-if(_16==1){
-Element.setStyle(_15,{opacity:(/Gecko/.test(navigator.userAgent)&&!/Konqueror|Safari|KHTML/.test(navigator.userAgent))?0.999999:null});
-if(/MSIE/.test(navigator.userAgent)){
-Element.setStyle(_15,{filter:Element.getStyle(_15,"filter").replace(/alpha\([^\)]*\)/gi,"")});
-}
-}else{
-if(_16<0.00001){
-_16=0;
-}
-Element.setStyle(_15,{opacity:_16});
-if(/MSIE/.test(navigator.userAgent)){
-Element.setStyle(_15,{filter:Element.getStyle(_15,"filter").replace(/alpha\([^\)]*\)/gi,"")+"alpha(opacity="+_16*100+")"});
-}
-}
-};
-Element.getInlineOpacity=function(_17){
-return $(_17).style.opacity||"";
-};
-Element.childrenWithClassName=function(_18,_19){
-return $A($(_18).getElementsByTagName("*")).select(function(c){
-return Element.hasClassName(c,_19);
-});
-};
-Array.prototype.call=function(){
-var _21=arguments;
-this.each(function(f){
-f.apply(this,_21);
-});
-};
-var Effect={tagifyText:function(_23){
-var _24="position:relative";
-if(/MSIE/.test(navigator.userAgent)){
-_24+=";zoom:1";
-}
-_23=$(_23);
-$A(_23.childNodes).each(function(_25){
-if(_25.nodeType==3){
-_25.nodeValue.toArray().each(function(_26){
-_23.insertBefore(Builder.node("span",{style:_24},_26==" "?String.fromCharCode(160):_26),_25);
-});
-Element.remove(_25);
}
-});
-},multiple:function(_27,_28){
-var _29;
-if(((typeof _27=="object")||(typeof _27=="function"))&&(_27.length)){
-_29=_27;
-}else{
-_29=$(_27).childNodes;
-}
-var _30=Object.extend({speed:0.1,delay:0},arguments[2]||{});
-var _31=_30.delay;
-$A(_29).each(function(_27,_32){
-new _28(_27,Object.extend(_30,{delay:_32*_30.speed+_31}));
-});
-},PAIRS:{"slide":["SlideDown","SlideUp"],"blind":["BlindDown","BlindUp"],"appear":["Appear","Fade"]},toggle:function(_33,_34){
-_33=$(_33);
-_34=(_34||"appear").toLowerCase();
-var _35=Object.extend({queue:{position:"end",scope:(_33.id||"global")}},arguments[2]||{});
-Effect[Element.visible(_33)?Effect.PAIRS[_34][1]:Effect.PAIRS[_34][0]](_33,_35);
-}};
-var Effect2=Effect;
-Effect.Transitions={};
-Effect.Transitions.linear=function(pos){
-return pos;
-};
-Effect.Transitions.sinoidal=function(pos){
-return (-Math.cos(pos*Math.PI)/2)+0.5;
-};
-Effect.Transitions.reverse=function(pos){
-return 1-pos;
-};
-Effect.Transitions.flicker=function(pos){
-return ((-Math.cos(pos*Math.PI)/4)+0.75)+Math.random()/4;
-};
-Effect.Transitions.wobble=function(pos){
-return (-Math.cos(pos*Math.PI*(9*pos))/2)+0.5;
-};
-Effect.Transitions.pulse=function(pos){
-return (Math.floor(pos*10)%2==0?(pos*10-Math.floor(pos*10)):1-(pos*10-Math.floor(pos*10)));
-};
-Effect.Transitions.none=function(pos){
-return 0;
-};
-Effect.Transitions.full=function(pos){
-return 1;
-};
-Effect.ScopedQueue=Class.create();
-Object.extend(Object.extend(Effect.ScopedQueue.prototype,Enumerable),{initialize:function(){
-this.effects=[];
-this.interval=null;
-},_each:function(_37){
-this.effects._each(_37);
-},add:function(_38){
-var _39=new Date().getTime();
-var _40=(typeof _38.options.queue=="string")?_38.options.queue:_38.options.queue.position;
-switch(_40){
-case "front":
-this.effects.findAll(function(e){
-return e.state=="idle";
-}).each(function(e){
-e.startOn+=_38.finishOn;
-e.finishOn+=_38.finishOn;
+Effect.ScopedQueue = Class.create();
+Object.extend(Object.extend(Effect.ScopedQueue.prototype, Enumerable), {
+initialize: function() {
+this.effects= [];
+this.interval = null;
+},
+_each: function(iterator) {
+this.effects._each(iterator);
+},
+add: function(effect) {
+var timestamp = new Date().getTime();
+var position = (typeof effect.options.queue == 'string') ?
+effect.options.queue : effect.options.queue.position;
+switch(position) {
+case 'front':
+ this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
+e.startOn+= effect.finishOn;
+e.finishOn += effect.finishOn;
});
break;
-case "end":
-_39=this.effects.pluck("finishOn").max()||_39;
+case 'end':
+ timestamp = this.effects.pluck('finishOn').max() || timestamp;
break;
}
-_38.startOn+=_39;
-_38.finishOn+=_39;
-this.effects.push(_38);
-if(!this.interval){
-this.interval=setInterval(this.loop.bind(this),40);
+effect.startOn+= timestamp;
+effect.finishOn += timestamp;
+if(!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
+this.effects.push(effect);
+if(!this.interval)
+this.interval = setInterval(this.loop.bind(this), 40);
+},
+remove: function(effect) {
+this.effects = this.effects.reject(function(e) { return e==effect });
+if(this.effects.length == 0) {
+clearInterval(this.interval);
+this.interval = null;
+}
+},
+loop: function() {
+var timePos = new Date().getTime();
+this.effects.invoke('loop', timePos);
}
-},remove:function(_42){
-this.effects=this.effects.reject(function(e){
-return e==_42;
});
-if(this.effects.length==0){
-clearInterval(this.interval);
-this.interval=null;
-}
-},loop:function(){
-var _43=new Date().getTime();
-this.effects.invoke("loop",_43);
-}});
-Effect.Queues={instances:$H(),get:function(_44){
-if(typeof _44!="string"){
-return _44;
-}
-if(!this.instances[_44]){
-this.instances[_44]=new Effect.ScopedQueue();
-}
-return this.instances[_44];
-}};
-Effect.Queue=Effect.Queues.get("global");
-Effect.DefaultOptions={transition:Effect.Transitions.sinoidal,duration:1,fps:25,sync:false,from:0,to:1,delay:0,queue:"parallel"};
-Effect.Base=function(){
-};
-Effect.Base.prototype={position:null,start:function(_45){
-this.options=Object.extend(Object.extend({},Effect.DefaultOptions),_45||{});
-this.currentFrame=0;
-this.state="idle";
-this.startOn=this.options.delay*1000;
-this.finishOn=this.startOn+(this.options.duration*1000);
-this.event("beforeStart");
-if(!this.options.sync){
-Effect.Queues.get(typeof this.options.queue=="string"?"global":this.options.queue.scope).add(this);
-}
-},loop:function(_46){
-if(_46>=this.startOn){
-if(_46>=this.finishOn){
-this.render(1);
+Effect.Queues = {
+instances: $H(),
+get: function(queueName) {
+if(typeof queueName != 'string') return queueName;
+if(!this.instances[queueName])
+this.instances[queueName] = new Effect.ScopedQueue();
+return this.instances[queueName];
+}
+}
+Effect.Queue = Effect.Queues.get('global');
+Effect.DefaultOptions = {
+transition: Effect.Transitions.sinoidal,
+duration: 1.0,fps:25.0, sync: false,from: 0.0,
+to: 1.0,
+delay:0.0,
+queue:'parallel'
+}
+Effect.Base = function() {};
+Effect.Base.prototype = {
+position: null,
+start: function(options) {
+this.options= Object.extend(Object.extend({},Effect.DefaultOptions), options || {});
+this.currentFrame = 0;
+this.state= 'idle';
+this.startOn= this.options.delay*1000;
+this.finishOn = this.startOn + (this.options.duration*1000);
+this.event('beforeStart');
+if(!this.options.sync)
+Effect.Queues.get(typeof this.options.queue == 'string' ?
+'global' : this.options.queue.scope).add(this);
+},
+loop: function(timePos) {
+if(timePos >= this.startOn) {
+if(timePos >= this.finishOn) {
+this.render(1.0);
this.cancel();
-this.event("beforeFinish");
-if(this.finish){
-this.finish();
-}
-this.event("afterFinish");
+this.event('beforeFinish');
+if(this.finish) this.finish();
+this.event('afterFinish');
return;
}
-var pos=(_46-this.startOn)/(this.finishOn-this.startOn);
-var _47=Math.round(pos*this.options.fps*this.options.duration);
-if(_47>this.currentFrame){
+var pos = (timePos - this.startOn) / (this.finishOn - this.startOn);
+var frame = Math.round(pos * this.options.fps * this.options.duration);
+if(frame > this.currentFrame) {
this.render(pos);
-this.currentFrame=_47;
-}
-}
-},render:function(pos){
-if(this.state=="idle"){
-this.state="running";
-this.event("beforeSetup");
-if(this.setup){
-this.setup();
-}
-this.event("afterSetup");
-}
-if(this.state=="running"){
-if(this.options.transition){
-pos=this.options.transition(pos);
-}
-pos*=(this.options.to-this.options.from);
-pos+=this.options.from;
-this.position=pos;
-this.event("beforeUpdate");
-if(this.update){
-this.update(pos);
-}
-this.event("afterUpdate");
-}
-},cancel:function(){
-if(!this.options.sync){
-Effect.Queues.get(typeof this.options.queue=="string"?"global":this.options.queue.scope).remove(this);
+this.currentFrame = frame;
+}
+}
+},
+render: function(pos) {
+if(this.state == 'idle') {
+this.state = 'running';
+this.event('beforeSetup');
+if(this.setup) this.setup();
+this.event('afterSetup');
+}
+if(this.state == 'running') {
+if(this.options.transition) pos = this.options.transition(pos);
+pos *= (this.options.to-this.options.from);
+pos += this.options.from;
+this.position = pos;
+this.event('beforeUpdate');
+if(this.update) this.update(pos);
+this.event('afterUpdate');
+}
+},
+cancel: function() {
+if(!this.options.sync)
+Effect.Queues.get(typeof this.options.queue == 'string' ?
+'global' : this.options.queue.scope).remove(this);
+this.state = 'finished';
+},
+event: function(eventName) {
+if(this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
+if(this.options[eventName]) this.options[eventName](this);
+},
+inspect: function() {
+return '#<Effect:' + $H(this).inspect() + ',options:' + $H(this.options).inspect() + '>';
+}
+}
+Effect.Parallel = Class.create();
+Object.extend(Object.extend(Effect.Parallel.prototype, Effect.Base.prototype), {
+initialize: function(effects) {
+this.effects = effects || [];
+this.start(arguments[1]);
+},
+update: function(position) {
+this.effects.invoke('render', position);
+},
+finish: function(position) {
+this.effects.each( function(effect) {
+effect.render(1.0);
+effect.cancel();
+effect.event('beforeFinish');
+if(effect.finish) effect.finish(position);
+effect.event('afterFinish');
+});
}
-this.state="finished";
-},event:function(_48){
-if(this.options[_48+"Internal"]){
-this.options[_48+"Internal"](this);
+});
+Effect.Opacity = Class.create();
+Object.extend(Object.extend(Effect.Opacity.prototype, Effect.Base.prototype), {
+initialize: function(element) {
+this.element = $(element);
+ if(/MSIE/.test(navigator.userAgent) && (!this.element.hasLayout))
+this.element.setStyle({zoom: 1});
+var options = Object.extend({
+from: this.element.getOpacity() || 0.0,
+to: 1.0
+}, arguments[1] || {});
+this.start(options);
+},
+update: function(position) {
+this.element.setOpacity(position);
}
-if(this.options[_48]){
-this.options[_48](this);
+});
+Effect.Move = Class.create();
+Object.extend(Object.extend(Effect.Move.prototype, Effect.Base.prototype), {
+initialize: function(element) {
+this.element = $(element);
+var options = Object.extend({
+x:0,
+y:0,
+mode: 'relative'
+}, arguments[1] || {});
+this.start(options);
+},
+setup: function() {
+this.element.makePositioned();
+this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
+this.originalTop= parseFloat(this.element.getStyle('top')|| '0');
+if(this.options.mode == 'absolute') {
+ this.options.x = this.options.x - this.originalLeft;
+this.options.y = this.options.y - this.originalTop;
+}
+},
+update: function(position) {
+this.element.setStyle({
+left: this.options.x* position + this.originalLeft + 'px',
+top:this.options.y* position + this.originalTop+ 'px'
+});
}
-},inspect:function(){
-return "#<Effect:"+$H(this).inspect()+",options:"+$H(this.options).inspect()+">";
-}};
-Effect.Parallel=Class.create();
-Object.extend(Object.extend(Effect.Parallel.prototype,Effect.Base.prototype),{initialize:function(_49){
-this.effects=_49||[];
-this.start(arguments[1]);
-},update:function(_50){
-this.effects.invoke("render",_50);
-},finish:function(_51){
-this.effects.each(function(_52){
-_52.render(1);
-_52.cancel();
-_52.event("beforeFinish");
-if(_52.finish){
-_52.finish(_51);
-}
-_52.event("afterFinish");
});
-}});
-Effect.Opacity=Class.create();
-Object.extend(Object.extend(Effect.Opacity.prototype,Effect.Base.prototype),{initialize:function(_53){
-this.element=$(_53);
-if(/MSIE/.test(navigator.userAgent)&&(!this.element.hasLayout)){
-Element.setStyle(this.element,{zoom:1});
-}
-var _54=Object.extend({from:Element.getOpacity(this.element)||0,to:1},arguments[1]||{});
-this.start(_54);
-},update:function(_55){
-Element.setOpacity(this.element,_55);
-}});
-Effect.Move=Class.create();
-Object.extend(Object.extend(Effect.Move.prototype,Effect.Base.prototype),{initialize:function(_56){
-this.element=$(_56);
-var _57=Object.extend({x:0,y:0,mode:"relative"},arguments[1]||{});
-this.start(_57);
-},setup:function(){
-Element.makePositioned(this.element);
-this.originalLeft=parseFloat(Element.getStyle(this.element,"left")||"0");
-this.originalTop=parseFloat(Element.getStyle(this.element,"top")||"0");
-if(this.options.mode=="absolute"){
-this.options.x=this.options.x-this.originalLeft;
-this.options.y=this.options.y-this.originalTop;
-}
-},update:function(_58){
-Element.setStyle(this.element,{left:this.options.x*_58+this.originalLeft+"px",top:this.options.y*_58+this.originalTop+"px"});
-}});
-Effect.MoveBy=function(_59,_60,_61){
-return new Effect.Move(_59,Object.extend({x:_61,y:_60},arguments[3]||{}));
-};
-Effect.Scale=Class.create();
-Object.extend(Object.extend(Effect.Scale.prototype,Effect.Base.prototype),{initialize:function(_62,_63){
-this.element=$(_62);
-var _64=Object.extend({scaleX:true,scaleY:true,scaleContent:true,scaleFromCenter:false,scaleMode:"box",scaleFrom:100,scaleTo:_63},arguments[2]||{});
-this.start(_64);
-},setup:function(){
-this.restoreAfterFinish=this.options.restoreAfterFinish||false;
-this.elementPositioning=Element.getStyle(this.element,"position");
-this.originalStyle={};
-["top","left","width","height","fontSize"].each(function(k){
-this.originalStyle[k]=this.element.style[k];
+Effect.MoveBy = function(element, toTop, toLeft) {
+return new Effect.Move(element,
+Object.extend({ x: toLeft, y: toTop }, arguments[3] || {}));
+};
+Effect.Scale = Class.create();
+Object.extend(Object.extend(Effect.Scale.prototype, Effect.Base.prototype), {
+initialize: function(element, percent) {
+this.element = $(element)
+var options = Object.extend({
+scaleX: true,
+scaleY: true,
+scaleContent: true,
+scaleFromCenter: false,
+scaleMode: 'box', scaleFrom: 100.0,
+scaleTo: percent
+}, arguments[2] || {});
+this.start(options);
+},
+setup: function() {
+this.restoreAfterFinish = this.options.restoreAfterFinish || false;
+this.elementPositioning = this.element.getStyle('position');
+this.originalStyle = {};
+['top','left','width','height','fontSize'].each( function(k) {
+this.originalStyle[k] = this.element.style[k];
}.bind(this));
-this.originalTop=this.element.offsetTop;
-this.originalLeft=this.element.offsetLeft;
-var _66=Element.getStyle(this.element,"font-size")||"100%";
-["em","px","%"].each(function(_67){
-if(_66.indexOf(_67)>0){
-this.fontSize=parseFloat(_66);
-this.fontSizeType=_67;
+this.originalTop= this.element.offsetTop;
+this.originalLeft = this.element.offsetLeft;
+var fontSize = this.element.getStyle('font-size') || '100%';
+['em','px','%'].each( function(fontSizeType) {
+if(fontSize.indexOf(fontSizeType)>0) {
+this.fontSize = parseFloat(fontSize);
+this.fontSizeType = fontSizeType;
}
}.bind(this));
-this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;
-this.dims=null;
-if(this.options.scaleMode=="box"){
-this.dims=[this.element.offsetHeight,this.element.offsetWidth];
-}
-if(/^content/.test(this.options.scaleMode)){
-this.dims=[this.element.scrollHeight,this.element.scrollWidth];
-}
-if(!this.dims){
-this.dims=[this.options.scaleMode.originalHeight,this.options.scaleMode.originalWidth];
-}
-},update:function(_68){
-var _69=(this.options.scaleFrom/100)+(this.factor*_68);
-if(this.options.scaleContent&&this.fontSize){
-Element.setStyle(this.element,{fontSize:this.fontSize*_69+this.fontSizeType});
-}
-this.setDimensions(this.dims[0]*_69,this.dims[1]*_69);
-},finish:function(_70){
-if(this.restoreAfterFinish){
-Element.setStyle(this.element,this.originalStyle);
-}
-},setDimensions:function(_71,_72){
-var d={};
-if(this.options.scaleX){
-d.width=_72+"px";
-}
-if(this.options.scaleY){
-d.height=_71+"px";
+this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
+this.dims = null;
+if(this.options.scaleMode=='box')
+this.dims = [this.element.offsetHeight, this.element.offsetWidth];
+if(/^content/.test(this.options.scaleMode))
+this.dims = [this.element.scrollHeight, this.element.scrollWidth];
+if(!this.dims)
+this.dims = [this.options.scaleMode.originalHeight,
+ this.options.scaleMode.originalWidth];
+},
+update: function(position) {
+var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
+if(this.options.scaleContent && this.fontSize)
+this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
+this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
+},
+finish: function(position) {
+if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
+},
+setDimensions: function(height, width) {
+var d = {};
+if(this.options.scaleX) d.width = width + 'px';
+if(this.options.scaleY) d.height = height + 'px';
+if(this.options.scaleFromCenter) {
+var topd= (height - this.dims[0])/2;
+var leftd = (width- this.dims[1])/2;
+if(this.elementPositioning == 'absolute') {
+if(this.options.scaleY) d.top = this.originalTop-topd + 'px';
+if(this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
+} else {
+if(this.options.scaleY) d.top = -topd + 'px';
+if(this.options.scaleX) d.left = -leftd + 'px';
+}
+}
+this.element.setStyle(d);
}
-if(this.options.scaleFromCenter){
-var _74=(_71-this.dims[0])/2;
-var _75=(_72-this.dims[1])/2;
-if(this.elementPositioning=="absolute"){
-if(this.options.scaleY){
-d.top=this.originalTop-_74+"px";
-}
-if(this.options.scaleX){
-d.left=this.originalLeft-_75+"px";
-}
-}else{
-if(this.options.scaleY){
-d.top=-_74+"px";
-}
-if(this.options.scaleX){
-d.left=-_75+"px";
-}
-}
-}
-Element.setStyle(this.element,d);
-}});
-Effect.Highlight=Class.create();
-Object.extend(Object.extend(Effect.Highlight.prototype,Effect.Base.prototype),{initialize:function(_76){
-this.element=$(_76);
-var _77=Object.extend({startcolor:"#ffff99"},arguments[1]||{});
-this.start(_77);
-},setup:function(){
-if(Element.getStyle(this.element,"display")=="none"){
-this.cancel();
-return;
-}
-this.oldStyle={backgroundImage:Element.getStyle(this.element,"background-image")};
-Element.setStyle(this.element,{backgroundImage:"none"});
-if(!this.options.endcolor){
-this.options.endcolor=Element.getStyle(this.element,"background-color").parseColor("#ffffff");
-}
-if(!this.options.restorecolor){
-this.options.restorecolor=Element.getStyle(this.element,"background-color");
+});
+Effect.Highlight = Class.create();
+Object.extend(Object.extend(Effect.Highlight.prototype, Effect.Base.prototype), {
+initialize: function(element) {
+this.element = $(element);
+var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || {});
+this.start(options);
+},
+setup: function() {
+ if(this.element.getStyle('display')=='none') { this.cancel(); return; }
+ this.oldStyle = {
+backgroundImage: this.element.getStyle('background-image') };
+this.element.setStyle({backgroundImage: 'none'});
+if(!this.options.endcolor)
+this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
+if(!this.options.restorecolor)
+this.options.restorecolor = this.element.getStyle('background-color');
+ this._base= $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
+this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
+},
+update: function(position) {
+this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
+return m+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart()); }.bind(this)) });
+},
+finish: function() {
+this.element.setStyle(Object.extend(this.oldStyle, {
+backgroundColor: this.options.restorecolor
+}));
}
-this._base=$R(0,2).map(function(i){
-return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16);
-}.bind(this));
-this._delta=$R(0,2).map(function(i){
-return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i];
-}.bind(this));
-},update:function(_78){
-Element.setStyle(this.element,{backgroundColor:$R(0,2).inject("#",function(m,v,i){
-return m+(Math.round(this._base[i]+(this._delta[i]*_78)).toColorPart());
-}.bind(this))});
-},finish:function(){
-Element.setStyle(this.element,Object.extend(this.oldStyle,{backgroundColor:this.options.restorecolor}));
-}});
-Effect.ScrollTo=Class.create();
-Object.extend(Object.extend(Effect.ScrollTo.prototype,Effect.Base.prototype),{initialize:function(_81){
-this.element=$(_81);
-this.start(arguments[1]||{});
-},setup:function(){
+});
+Effect.ScrollTo = Class.create();
+Object.extend(Object.extend(Effect.ScrollTo.prototype, Effect.Base.prototype), {
+initialize: function(element) {
+this.element = $(element);
+this.start(arguments[1] || {});
+},
+setup: function() {
Position.prepare();
-var _82=Position.cumulativeOffset(this.element);
-if(this.options.offset){
-_82[1]+=this.options.offset;
-}
-var max=window.innerHeight?window.height-window.innerHeight:document.body.scrollHeight-(document.documentElement.clientHeight?document.documentElement.clientHeight:document.body.clientHeight);
-this.scrollStart=Position.deltaY;
-this.delta=(_82[1]>max?max:_82[1])-this.scrollStart;
-},update:function(_84){
+var offsets = Position.cumulativeOffset(this.element);
+if(this.options.offset) offsets[1] += this.options.offset;
+var max = window.innerHeight ?
+window.height - window.innerHeight :
+document.body.scrollHeight -
+(document.documentElement.clientHeight ?
+document.documentElement.clientHeight : document.body.clientHeight);
+this.scrollStart = Position.deltaY;
+this.delta = (offsets[1] > max ? max : offsets[1]) - this.scrollStart;
+},
+update: function(position) {
Position.prepare();
-window.scrollTo(Position.deltaX,this.scrollStart+(_84*this.delta));
-}});
-Effect.Fade=function(_85){
-var _86=Element.getInlineOpacity(_85);
-var _87=Object.extend({from:Element.getOpacity(_85)||1,to:0,afterFinishInternal:function(_88){
-with(Element){
-if(_88.options.to!=0){
-return;
+window.scrollTo(Position.deltaX,
+this.scrollStart + (position*this.delta));
}
-hide(_88.element);
-setStyle(_88.element,{opacity:_86});
+});
+Effect.Fade = function(element) {
+element = $(element);
+var oldOpacity = element.getInlineOpacity();
+var options = Object.extend({
+from: element.getOpacity() || 1.0,
+to: 0.0,
+afterFinishInternal: function(effect) {
+if(effect.options.to!=0) return;
+effect.element.hide();
+effect.element.setStyle({opacity: oldOpacity});
+}}, arguments[1] || {});
+return new Effect.Opacity(element,options);
+}
+Effect.Appear = function(element) {
+element = $(element);
+var options = Object.extend({
+from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
+to: 1.0,
+ afterFinishInternal: function(effect) {
+effect.element.forceRerendering();
+},
+beforeSetup: function(effect) {
+effect.element.setOpacity(effect.options.from);
+effect.element.show();
+}}, arguments[1] || {});
+return new Effect.Opacity(element,options);
+}
+Effect.Puff = function(element) {
+element = $(element);
+var oldStyle = { opacity: element.getInlineOpacity(), position: element.getStyle('position') };
+return new Effect.Parallel(
+ [ new Effect.Scale(element, 200,
+{ sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }),
+ new Effect.Opacity(element, { sync: true, to: 0.0 } ) ],
+ Object.extend({ duration: 1.0,
+beforeSetupInternal: function(effect) {
+effect.effects[0].element.setStyle({position: 'absolute'}); },
+afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide();
+ effect.effects[0].element.setStyle(oldStyle); }
+ }, arguments[1] || {})
+ );
+}
+Effect.BlindUp = function(element) {
+element = $(element);
+element.makeClipping();
+return new Effect.Scale(element, 0,
+Object.extend({ scaleContent: false,
+scaleX: false,
+restoreAfterFinish: true,
+afterFinishInternal: function(effect) {
+effect.element.hide();
+effect.element.undoClipping();
+}
+}, arguments[1] || {})
+);
+}
+Effect.BlindDown = function(element) {
+element = $(element);
+var elementDimensions = element.getDimensions();
+return new Effect.Scale(element, 100,
+Object.extend({ scaleContent: false,
+scaleX: false,
+scaleFrom: 0,
+scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+restoreAfterFinish: true,
+afterSetup: function(effect) {
+effect.element.makeClipping();
+effect.element.setStyle({height: '0px'});
+effect.element.show();
+},
+afterFinishInternal: function(effect) {
+effect.element.undoClipping();
+}
+}, arguments[1] || {})
+);
+}
+Effect.SwitchOff = function(element) {
+element = $(element);
+var oldOpacity = element.getInlineOpacity();
+return new Effect.Appear(element, {
+duration: 0.4,
+from: 0,
+transition: Effect.Transitions.flicker,
+afterFinishInternal: function(effect) {
+new Effect.Scale(effect.element, 1, {
+duration: 0.3, scaleFromCenter: true,
+scaleX: false, scaleContent: false, restoreAfterFinish: true,
+beforeSetup: function(effect) {
+effect.element.makePositioned();
+effect.element.makeClipping();
+},
+afterFinishInternal: function(effect) {
+effect.element.hide();
+effect.element.undoClipping();
+effect.element.undoPositioned();
+effect.element.setStyle({opacity: oldOpacity});
+}
+})
}
-}},arguments[1]||{});
-return new Effect.Opacity(_85,_87);
-};
-Effect.Appear=function(_89){
-var _90=Object.extend({from:(Element.getStyle(_89,"display")=="none"?0:Element.getOpacity(_89)||0),to:1,beforeSetup:function(_91){
-with(Element){
-setOpacity(_91.element,_91.options.from);
-show(_91.element);
-}
-}},arguments[1]||{});
-return new Effect.Opacity(_89,_90);
-};
-Effect.Puff=function(_92){
-_92=$(_92);
-var _93={opacity:Element.getInlineOpacity(_92),position:Element.getStyle(_92,"position")};
-return new Effect.Parallel([new Effect.Scale(_92,200,{sync:true,scaleFromCenter:true,scaleContent:true,restoreAfterFinish:true}),new Effect.Opacity(_92,{sync:true,to:0})],Object.extend({duration:1,beforeSetupInternal:function(_94){
-with(Element){
-setStyle(_94.effects[0].element,{position:"absolute"});
-}
-},afterFinishInternal:function(_95){
-with(Element){
-hide(_95.effects[0].element);
-setStyle(_95.effects[0].element,_93);
-}
-}},arguments[1]||{}));
-};
-Effect.BlindUp=function(_96){
-_96=$(_96);
-Element.makeClipping(_96);
-return new Effect.Scale(_96,0,Object.extend({scaleContent:false,scaleX:false,restoreAfterFinish:true,afterFinishInternal:function(_97){
-with(Element){
-[hide,undoClipping].call(_97.element);
-}
-}},arguments[1]||{}));
-};
-Effect.BlindDown=function(_98){
-_98=$(_98);
-var _99=Element.getStyle(_98,"height");
-var _100=Element.getDimensions(_98);
-return new Effect.Scale(_98,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_100.height,originalWidth:_100.width},restoreAfterFinish:true,afterSetup:function(_101){
-with(Element){
-makeClipping(_101.element);
-setStyle(_101.element,{height:"0px"});
-show(_101.element);
-}
-},afterFinishInternal:function(_102){
-with(Element){
-undoClipping(_102.element);
-setStyle(_102.element,{height:_99});
-}
-}},arguments[1]||{}));
-};
-Effect.SwitchOff=function(_103){
-_103=$(_103);
-var _104=Element.getInlineOpacity(_103);
-return new Effect.Appear(_103,{duration:0.4,from:0,transition:Effect.Transitions.flicker,afterFinishInternal:function(_105){
-new Effect.Scale(_105.element,1,{duration:0.3,scaleFromCenter:true,scaleX:false,scaleContent:false,restoreAfterFinish:true,beforeSetup:function(_105){
-with(Element){
-[makePositioned,makeClipping].call(_105.element);
-}
-},afterFinishInternal:function(_106){
-with(Element){
-[hide,undoClipping,undoPositioned].call(_106.element);
-setStyle(_106.element,{opacity:_104});
-}
-}});
-}});
-};
-Effect.DropOut=function(_107){
-_107=$(_107);
-var _108={top:Element.getStyle(_107,"top"),left:Element.getStyle(_107,"left"),opacity:Element.getInlineOpacity(_107)};
-return new Effect.Parallel([new Effect.Move(_107,{x:0,y:100,sync:true}),new Effect.Opacity(_107,{sync:true,to:0})],Object.extend({duration:0.5,beforeSetup:function(_109){
-with(Element){
-makePositioned(_109.effects[0].element);
-}
-},afterFinishInternal:function(_110){
-with(Element){
-[hide,undoPositioned].call(_110.effects[0].element);
-setStyle(_110.effects[0].element,_108);
-}
-}},arguments[1]||{}));
-};
-Effect.Shake=function(_111){
-_111=$(_111);
-var _112={top:Element.getStyle(_111,"top"),left:Element.getStyle(_111,"left")};
-return new Effect.Move(_111,{x:20,y:0,duration:0.05,afterFinishInternal:function(_113){
-new Effect.Move(_113.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(_113){
-new Effect.Move(_113.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(_113){
-new Effect.Move(_113.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(_113){
-new Effect.Move(_113.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(_113){
-new Effect.Move(_113.element,{x:-20,y:0,duration:0.05,afterFinishInternal:function(_113){
-with(Element){
-undoPositioned(_113.element);
-setStyle(_113.element,_112);
-}
-}});
-}});
-}});
-}});
-}});
-}});
-};
-Effect.SlideDown=function(_114){
-_114=$(_114);
-Element.cleanWhitespace(_114);
-var _115=Element.getStyle(_114.firstChild,"bottom");
-var _116=Element.getDimensions(_114);
-return new Effect.Scale(_114,100,Object.extend({scaleContent:false,scaleX:false,scaleFrom:0,scaleMode:{originalHeight:_116.height,originalWidth:_116.width},restoreAfterFinish:true,afterSetup:function(_117){
-with(Element){
-makePositioned(_117.element);
-makePositioned(_117.element.firstChild);
-if(window.opera){
-setStyle(_117.element,{top:""});
-}
-makeClipping(_117.element);
-setStyle(_117.element,{height:"0px"});
-show(_114);
-}
-},afterUpdateInternal:function(_118){
-with(Element){
-setStyle(_118.element.firstChild,{bottom:(_118.dims[0]-_118.element.clientHeight)+"px"});
-}
-},afterFinishInternal:function(_119){
-with(Element){
-undoClipping(_119.element);
-undoPositioned(_119.element.firstChild);
-undoPositioned(_119.element);
-setStyle(_119.element.firstChild,{bottom:_115});
-}
-}},arguments[1]||{}));
-};
-Effect.SlideUp=function(_120){
-_120=$(_120);
-Element.cleanWhitespace(_120);
-var _121=Element.getStyle(_120.firstChild,"bottom");
-return new Effect.Scale(_120,0,Object.extend({scaleContent:false,scaleX:false,scaleMode:"box",scaleFrom:100,restoreAfterFinish:true,beforeStartInternal:function(_122){
-with(Element){
-makePositioned(_122.element);
-makePositioned(_122.element.firstChild);
-if(window.opera){
-setStyle(_122.element,{top:""});
-}
-makeClipping(_122.element);
-show(_120);
-}
-},afterUpdateInternal:function(_123){
-with(Element){
-setStyle(_123.element.firstChild,{bottom:(_123.dims[0]-_123.element.clientHeight)+"px"});
-}
-},afterFinishInternal:function(_124){
-with(Element){
-[hide,undoClipping].call(_124.element);
-undoPositioned(_124.element.firstChild);
-undoPositioned(_124.element);
-setStyle(_124.element.firstChild,{bottom:_121});
-}
-}},arguments[1]||{}));
-};
-Effect.Squish=function(_125){
-return new Effect.Scale(_125,window.opera?1:0,{restoreAfterFinish:true,beforeSetup:function(_126){
-with(Element){
-makeClipping(_126.element);
+});
}
-},afterFinishInternal:function(_127){
-with(Element){
-hide(_127.element);
-undoClipping(_127.element);
+Effect.DropOut = function(element) {
+element = $(element);
+var oldStyle = {
+top: element.getStyle('top'),
+left: element.getStyle('left'),
+opacity: element.getInlineOpacity() };
+return new Effect.Parallel(
+[ new Effect.Move(element, {x: 0, y: 100, sync: true }),
+new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
+Object.extend(
+{ duration: 0.5,
+beforeSetup: function(effect) {
+effect.effects[0].element.makePositioned();
+},
+afterFinishInternal: function(effect) {
+effect.effects[0].element.hide();
+effect.effects[0].element.undoPositioned();
+effect.effects[0].element.setStyle(oldStyle);
+}
+}, arguments[1] || {}));
+}
+Effect.Shake = function(element) {
+element = $(element);
+var oldStyle = {
+top: element.getStyle('top'),
+left: element.getStyle('left') };
+return new Effect.Move(element,
+{ x:20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
+new Effect.Move(effect.element,
+{ x: -40, y: 0, duration: 0.1,afterFinishInternal: function(effect) {
+new Effect.Move(effect.element,
+{ x:40, y: 0, duration: 0.1,afterFinishInternal: function(effect) {
+new Effect.Move(effect.element,
+{ x: -40, y: 0, duration: 0.1,afterFinishInternal: function(effect) {
+new Effect.Move(effect.element,
+{ x:40, y: 0, duration: 0.1,afterFinishInternal: function(effect) {
+new Effect.Move(effect.element,
+{ x: -20, y: 0, duration: 0.05, afterFinishInternal: function(effect) {
+effect.element.undoPositioned();
+effect.element.setStyle(oldStyle);
+}}) }}) }}) }}) }}) }});
+}
+Effect.SlideDown = function(element) {
+element = $(element);
+element.cleanWhitespace();
+ var oldInnerBottom = $(element.firstChild).getStyle('bottom');
+var elementDimensions = element.getDimensions();
+return new Effect.Scale(element, 100, Object.extend({
+scaleContent: false,
+scaleX: false,
+scaleFrom: window.opera ? 0 : 1,
+scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
+restoreAfterFinish: true,
+afterSetup: function(effect) {
+effect.element.makePositioned();
+effect.element.firstChild.makePositioned();
+if(window.opera) effect.element.setStyle({top: ''});
+effect.element.makeClipping();
+effect.element.setStyle({height: '0px'});
+effect.element.show(); },
+afterUpdateInternal: function(effect) {
+effect.element.firstChild.setStyle({bottom:
+(effect.dims[0] - effect.element.clientHeight) + 'px' });
+},
+afterFinishInternal: function(effect) {
+effect.element.undoClipping();
+ if(/MSIE/.test(navigator.userAgent)){
+effect.element.undoPositioned();
+effect.element.firstChild.undoPositioned();
+}else{
+effect.element.firstChild.undoPositioned();
+effect.element.undoPositioned();
+}
+effect.element.firstChild.setStyle({bottom: oldInnerBottom}); }
+}, arguments[1] || {})
+);
+}
+Effect.SlideUp = function(element) {
+element = $(element);
+element.cleanWhitespace();
+var oldInnerBottom = $(element.firstChild).getStyle('bottom');
+return new Effect.Scale(element, window.opera ? 0 : 1,
+ Object.extend({ scaleContent: false,
+scaleX: false,
+scaleMode: 'box',
+scaleFrom: 100,
+restoreAfterFinish: true,
+beforeStartInternal: function(effect) {
+effect.element.makePositioned();
+effect.element.firstChild.makePositioned();
+if(window.opera) effect.element.setStyle({top: ''});
+effect.element.makeClipping();
+effect.element.show(); },
+afterUpdateInternal: function(effect) {
+effect.element.firstChild.setStyle({bottom:
+(effect.dims[0] - effect.element.clientHeight) + 'px' }); },
+afterFinishInternal: function(effect) {
+effect.element.hide();
+effect.element.undoClipping();
+effect.element.firstChild.undoPositioned();
+effect.element.undoPositioned();
+effect.element.setStyle({bottom: oldInnerBottom}); }
+ }, arguments[1] || {})
+);
+}
+Effect.Squish = function(element) {
+return new Effect.Scale(element, window.opera ? 1 : 0,
+{ restoreAfterFinish: true,
+beforeSetup: function(effect) {
+effect.element.makeClipping(effect.element); },
+afterFinishInternal: function(effect) {
+effect.element.hide(effect.element);
+effect.element.undoClipping(effect.element); }
+});
}
-}});
-};
-Effect.Grow=function(_128){
-_128=$(_128);
-var _129=Object.extend({direction:"center",moveTransistion:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.full},arguments[1]||{});
-var _130={top:_128.style.top,left:_128.style.left,height:_128.style.height,width:_128.style.width,opacity:Element.getInlineOpacity(_128)};
-var dims=Element.getDimensions(_128);
-var _132,initialMoveY;
-var _133,moveY;
-switch(_129.direction){
-case "top-left":
-_132=initialMoveY=_133=moveY=0;
+Effect.Grow = function(element) {
+element = $(element);
+var options = Object.extend({
+direction: 'center',
+moveTransition: Effect.Transitions.sinoidal,
+scaleTransition: Effect.Transitions.sinoidal,
+opacityTransition: Effect.Transitions.full
+}, arguments[1] || {});
+var oldStyle = {
+top: element.style.top,
+left: element.style.left,
+height: element.style.height,
+width: element.style.width,
+opacity: element.getInlineOpacity() };
+var dims = element.getDimensions();
+var initialMoveX, initialMoveY;
+var moveX, moveY;
+switch (options.direction) {
+case 'top-left':
+initialMoveX = initialMoveY = moveX = moveY = 0;
break;
-case "top-right":
-_132=dims.width;
-initialMoveY=moveY=0;
-_133=-dims.width;
+case 'top-right':
+initialMoveX = dims.width;
+initialMoveY = moveY = 0;
+moveX = -dims.width;
break;
-case "bottom-left":
-_132=_133=0;
-initialMoveY=dims.height;
-moveY=-dims.height;
+case 'bottom-left':
+initialMoveX = moveX = 0;
+initialMoveY = dims.height;
+moveY = -dims.height;
break;
-case "bottom-right":
-_132=dims.width;
-initialMoveY=dims.height;
-_133=-dims.width;
-moveY=-dims.height;
+case 'bottom-right':
+initialMoveX = dims.width;
+initialMoveY = dims.height;
+moveX = -dims.width;
+moveY = -dims.height;
break;
-case "center":
-_132=dims.width/2;
-initialMoveY=dims.height/2;
-_133=-dims.width/2;
-moveY=-dims.height/2;
+case 'center':
+initialMoveX = dims.width / 2;
+initialMoveY = dims.height / 2;
+moveX = -dims.width / 2;
+moveY = -dims.height / 2;
break;
}
-return new Effect.Move(_128,{x:_132,y:initialMoveY,duration:0.01,beforeSetup:function(_134){
-with(Element){
-hide(_134.element);
-makeClipping(_134.element);
-makePositioned(_134.element);
-}
-},afterFinishInternal:function(_135){
-new Effect.Parallel([new Effect.Opacity(_135.element,{sync:true,to:1,from:0,transition:_129.opacityTransition}),new Effect.Move(_135.element,{x:_133,y:moveY,sync:true,transition:_129.moveTransition}),new Effect.Scale(_135.element,100,{scaleMode:{originalHeight:dims.height,originalWidth:dims.width},sync:true,scaleFrom:window.opera?1:0,transition:_129.scaleTransition,restoreAfterFinish:true})],Object.extend({beforeSetup:function(_135){
-with(Element){
-setStyle(_135.effects[0].element,{height:"0px"});
-show(_135.effects[0].element);
-}
-},afterFinishInternal:function(_136){
-with(Element){
-[undoClipping,undoPositioned].call(_136.effects[0].element);
-setStyle(_136.effects[0].element,_130);
-}
-}},_129));
-}});
-};
-Effect.Shrink=function(_137){
-_137=$(_137);
-var _138=Object.extend({direction:"center",moveTransistion:Effect.Transitions.sinoidal,scaleTransition:Effect.Transitions.sinoidal,opacityTransition:Effect.Transitions.none},arguments[1]||{});
-var _139={top:_137.style.top,left:_137.style.left,height:_137.style.height,width:_137.style.width,opacity:Element.getInlineOpacity(_137)};
-var dims=Element.getDimensions(_137);
-var _140,moveY;
-switch(_138.direction){
-case "top-left":
-_140=moveY=0;
+return new Effect.Move(element, {
+x: initialMoveX,
+y: initialMoveY,
+duration: 0.01,
+beforeSetup: function(effect) {
+effect.element.hide();
+effect.element.makeClipping();
+effect.element.makePositioned();
+},
+afterFinishInternal: function(effect) {
+new Effect.Parallel(
+[ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
+new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
+new Effect.Scale(effect.element, 100, {
+scaleMode: { originalHeight: dims.height, originalWidth: dims.width },
+sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
+], Object.extend({
+ beforeSetup: function(effect) {
+ effect.effects[0].element.setStyle({height: '0px'});
+ effect.effects[0].element.show();
+ },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.undoClipping();
+ effect.effects[0].element.undoPositioned();
+ effect.effects[0].element.setStyle(oldStyle);
+ }
+ }, options)
+)
+}
+});
+}
+Effect.Shrink = function(element) {
+element = $(element);
+var options = Object.extend({
+direction: 'center',
+moveTransition: Effect.Transitions.sinoidal,
+scaleTransition: Effect.Transitions.sinoidal,
+opacityTransition: Effect.Transitions.none
+}, arguments[1] || {});
+var oldStyle = {
+top: element.style.top,
+left: element.style.left,
+height: element.style.height,
+width: element.style.width,
+opacity: element.getInlineOpacity() };
+var dims = element.getDimensions();
+var moveX, moveY;
+switch (options.direction) {
+case 'top-left':
+moveX = moveY = 0;
break;
-case "top-right":
-_140=dims.width;
-moveY=0;
+case 'top-right':
+moveX = dims.width;
+moveY = 0;
break;
-case "bottom-left":
-_140=0;
-moveY=dims.height;
+case 'bottom-left':
+moveX = 0;
+moveY = dims.height;
break;
-case "bottom-right":
-_140=dims.width;
-moveY=dims.height;
+case 'bottom-right':
+moveX = dims.width;
+moveY = dims.height;
break;
-case "center":
-_140=dims.width/2;
-moveY=dims.height/2;
+case 'center':
+moveX = dims.width / 2;
+moveY = dims.height / 2;
break;
}
-return new Effect.Parallel([new Effect.Opacity(_137,{sync:true,to:0,from:1,transition:_138.opacityTransition}),new Effect.Scale(_137,window.opera?1:0,{sync:true,transition:_138.scaleTransition,restoreAfterFinish:true}),new Effect.Move(_137,{x:_140,y:moveY,sync:true,transition:_138.moveTransition})],Object.extend({beforeStartInternal:function(_141){
-with(Element){
-[makePositioned,makeClipping].call(_141.effects[0].element);
-}
-},afterFinishInternal:function(_142){
-with(Element){
-[hide,undoClipping,undoPositioned].call(_142.effects[0].element);
-setStyle(_142.effects[0].element,_139);
-}
-}},_138));
-};
-Effect.Pulsate=function(_143){
-_143=$(_143);
-var _144=arguments[1]||{};
-var _145=Element.getInlineOpacity(_143);
-var _146=_144.transition||Effect.Transitions.sinoidal;
-var _147=function(pos){
-return _146(1-Effect.Transitions.pulse(pos));
-};
-_147.bind(_146);
-return new Effect.Opacity(_143,Object.extend(Object.extend({duration:3,from:0,afterFinishInternal:function(_148){
-Element.setStyle(_148.element,{opacity:_145});
-}},_144),{transition:_147}));
-};
-Effect.Fold=function(_149){
-_149=$(_149);
-var _150={top:_149.style.top,left:_149.style.left,width:_149.style.width,height:_149.style.height};
-Element.makeClipping(_149);
-return new Effect.Scale(_149,5,Object.extend({scaleContent:false,scaleX:false,afterFinishInternal:function(_151){
-new Effect.Scale(_149,1,{scaleContent:false,scaleY:false,afterFinishInternal:function(_151){
-with(Element){
-[hide,undoClipping].call(_151.element);
-setStyle(_151.element,_150);
-}
-}});
-}},arguments[1]||{}));
-};
-
+return new Effect.Parallel(
+[ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
+new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
+new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
+], Object.extend({
+ beforeStartInternal: function(effect) {
+ effect.effects[0].element.makePositioned();
+ effect.effects[0].element.makeClipping(); },
+ afterFinishInternal: function(effect) {
+ effect.effects[0].element.hide();
+ effect.effects[0].element.undoClipping();
+ effect.effects[0].element.undoPositioned();
+ effect.effects[0].element.setStyle(oldStyle); }
+ }, options)
+);
+}
+Effect.Pulsate = function(element) {
+element = $(element);
+var options= arguments[1] || {};
+var oldOpacity = element.getInlineOpacity();
+var transition = options.transition || Effect.Transitions.sinoidal;
+var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos)) };
+reverser.bind(transition);
+return new Effect.Opacity(element,
+Object.extend(Object.extend({duration: 3.0, from: 0,
+afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
+}, options), {transition: reverser}));
+}
+Effect.Fold = function(element) {
+element = $(element);
+var oldStyle = {
+top: element.style.top,
+left: element.style.left,
+width: element.style.width,
+height: element.style.height };
+Element.makeClipping(element);
+return new Effect.Scale(element, 5, Object.extend({
+scaleContent: false,
+scaleX: false,
+afterFinishInternal: function(effect) {
+new Effect.Scale(element, 1, {
+scaleContent: false,
+scaleY: false,
+afterFinishInternal: function(effect) {
+effect.element.hide();
+effect.element.undoClipping();
+effect.element.setStyle(oldStyle);
+} });
+}}, arguments[1] || {}));
+};
+['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
+ 'collectTextNodes','collectTextNodesIgnoreClass','childrenWithClassName'].each(
+function(f) { Element.Methods[f] = Element[f]; }
+);
+Element.Methods.visualEffect = function(element, effect, options) {
+s = effect.gsub(/_/, '-').camelize();
+effect_class = s.charAt(0).toUpperCase() + s.substring(1);
+new Effect[effect_class](element, options);
+return $(element);
+};
+Element.addMethods();
diff --git a/framework/Web/Javascripts/js/logger.js b/framework/Web/Javascripts/js/logger.js
index afb4fd3b..924f6323 100644
--- a/framework/Web/Javascripts/js/logger.js
+++ b/framework/Web/Javascripts/js/logger.js
@@ -1,514 +1,539 @@
-CustomEvent=Class.create();
-CustomEvent.prototype={initialize:function(){
-this.listeners=[];
-},addListener:function(_1){
-this.listeners.push(_1);
-},removeListener:function(_2){
-var _3=this._findListenerIndexes(_2);
-for(var i=0;i<_3.length;i++){
-this.listeners.splice(_3[i],1);
-}
-},dispatch:function(_5){
-for(var i=0;i<this.listeners.length;i++){
-try{
-this.listeners[i](_5);
-}
-catch(e){
-alert("Could not run the listener "+this.listeners[i]+". "+e);
-}
-}
-},_findListenerIndexes:function(_6){
-var _7=[];
-for(var i=0;i<this.listeners.length;i++){
-if(this.listeners[i]==_6){
-_7.push(i);
-}
-}
-return _7;
-}};
-var Cookie={set:function(_8,_9,_10,_11){
-var _12=escape(_8)+"="+escape(_9);
-if(_10){
-var _13=new Date();
-_13.setDate(_13.getDate()+_10);
-_12+="; expires="+_13.toGMTString();
-}
-if(_11){
-_12+=";path="+_11;
-}
-document.cookie=_12;
-if(_9&&(_10==undefined||_10>0)&&!this.get(_8)){
-Logger.error("Cookie ("+_8+") was not set correctly... The value was "+_9.toString().length+" charachters long (This may be over the cookie limit)");
-}
-},get:function(_14){
-var _15="(^|;)\\s*"+escape(_14)+"=([^;]+)";
-var m=document.cookie.match(_15);
-if(m&&m[2]){
-return unescape(m[2]);
-}else{
-return null;
-}
-},getAll:function(){
-var _17=document.cookie.split(";");
-var _18=[];
-for(var i=0;i<_17.length;i++){
-try{
-var _19=unescape(_17[i].match(/^\s*([^=]+)/m)[1]);
-var _20=unescape(_17[i].match(/=(.*$)/m)[1]);
-}
-catch(e){
-continue;
-}
-_18.push({name:_19,value:_20});
-if(_18[_19]!=undefined){
-Logger.waring("Trying to retrieve cookie named("+_19+"). There appears to be another property with this name though.");
-}
-_18[_19]=_20;
-}
-return _18;
-},clear:function(_21){
-this.set(_21,"",-1);
-},clearAll:function(){
-var _22=this.getAll();
-for(var i=0;i<_22.length;i++){
-this.clear(_22[i].name);
-}
-}};
-Logger={logEntries:[],onupdate:new CustomEvent(),onclear:new CustomEvent(),log:function(_23,tag){
-var _25=new LogEntry(_23,tag||"info");
-this.logEntries.push(_25);
-this.onupdate.dispatch(_25);
-},info:function(_26){
-this.log(_26,"info");
-},debug:function(_27){
-this.log(_27,"debug");
-},warn:function(_28){
-this.log(_28,"warning");
-},error:function(_29,_30){
-this.log(_29+": \n"+_30,"error");
-},clear:function(){
-this.logEntries=[];
-this.onclear.dispatch();
-}};
-LogEntry=Class.create();
-LogEntry.prototype={initialize:function(_31,tag){
-this.message=_31;
-this.tag=tag;
-}};
-LogConsole=Class.create();
-LogConsole.prototype={commandHistory:[],commandIndex:0,initialize:function(){
-this.outputCount=0;
-this.tagPattern=Cookie.get("tagPattern")||".*";
-this.logElement=document.createElement("div");
-document.body.appendChild(this.logElement);
-Element.hide(this.logElement);
-this.logElement.style.position="absolute";
-this.logElement.style.left="0px";
-this.logElement.style.width="100%";
-this.logElement.style.textAlign="left";
-this.logElement.style.fontFamily="lucida console";
-this.logElement.style.fontSize="100%";
-this.logElement.style.backgroundColor="darkgray";
-this.logElement.style.opacity=0.9;
-this.logElement.style.zIndex=2000;
-this.toolbarElement=document.createElement("div");
-this.logElement.appendChild(this.toolbarElement);
-this.toolbarElement.style.padding="0 0 0 2px";
-this.buttonsContainerElement=document.createElement("span");
-this.toolbarElement.appendChild(this.buttonsContainerElement);
-this.buttonsContainerElement.innerHTML+="<button onclick=\"logConsole.toggle()\" style=\"float:right;color:black\">close</button>";
-this.buttonsContainerElement.innerHTML+="<button onclick=\"Logger.clear()\" style=\"float:right;color:black\">clear</button>";
-if(!Prado.Inspector.disabled){
-this.buttonsContainerElement.innerHTML+="<button onclick=\"Prado.Inspector.inspect()\" style=\"float:right;color:black; margin-right:15px;\">Object Tree</button>";
-}
-this.tagFilterContainerElement=document.createElement("span");
-this.toolbarElement.appendChild(this.tagFilterContainerElement);
-this.tagFilterContainerElement.style.cssFloat="left";
-this.tagFilterContainerElement.appendChild(document.createTextNode("Log Filter"));
-this.tagFilterElement=document.createElement("input");
-this.tagFilterContainerElement.appendChild(this.tagFilterElement);
-this.tagFilterElement.style.width="200px";
-this.tagFilterElement.value=this.tagPattern;
-this.tagFilterElement.setAttribute("autocomplete","off");
-Event.observe(this.tagFilterElement,"keyup",this.updateTags.bind(this));
-Event.observe(this.tagFilterElement,"click",function(){
-this.tagFilterElement.select();
-}.bind(this));
-this.outputElement=document.createElement("div");
-this.logElement.appendChild(this.outputElement);
-this.outputElement.style.overflow="auto";
-this.outputElement.style.clear="both";
-this.outputElement.style.height="200px";
-this.outputElement.style.backgroundColor="black";
-this.inputContainerElement=document.createElement("div");
-this.inputContainerElement.style.width="100%";
-this.logElement.appendChild(this.inputContainerElement);
-this.inputElement=document.createElement("input");
-this.inputContainerElement.appendChild(this.inputElement);
-this.inputElement.style.width="100%";
-this.inputElement.style.borderWidth="0px";
-this.inputElement.style.margin="0px";
-this.inputElement.style.padding="0px";
-this.inputElement.value="Type command here";
-this.inputElement.setAttribute("autocomplete","off");
-Event.observe(this.inputElement,"keyup",this.handleInput.bind(this));
-Event.observe(this.inputElement,"click",function(){
-this.inputElement.select();
-}.bind(this));
-window.setInterval(this.repositionWindow.bind(this),500);
-this.repositionWindow();
-Logger.onupdate.addListener(this.logUpdate.bind(this));
-Logger.onclear.addListener(this.clear.bind(this));
-for(var i=0;i<Logger.logEntries.length;i++){
-this.logUpdate(Logger.logEntries[i]);
-}
-Event.observe(window,"error",function(msg,url,_34){
-Logger.error("Error in ("+(url||location)+") on line "+_34+"",msg);
-});
-var _35=document.createElement("span");
-_35.innerHTML="<button style=\"position:absolute;top:-100px\" onclick=\"javascript:logConsole.toggle()\" accesskey=\"d\"></button>";
-document.body.appendChild(_35);
-if(Cookie.get("ConsoleVisible")=="true"){
-this.toggle();
-}
-},toggle:function(){
-if(this.logElement.style.display=="none"){
-this.show();
-}else{
-this.hide();
-}
-},show:function(){
-Element.show(this.logElement);
-this.outputElement.scrollTop=this.outputElement.scrollHeight;
-Cookie.set("ConsoleVisible","true");
-this.inputElement.select();
-},hide:function(){
-Element.hide(this.logElement);
-Cookie.set("ConsoleVisible","false");
-},output:function(_36,_37){
-var _38=(this.outputElement.scrollTop+(2*this.outputElement.clientHeight))>=this.outputElement.scrollHeight;
-this.outputCount++;
-_37=(_37?_37+=";":"");
-_37+="padding:1px;margin:0 0 5px 0";
-if(this.outputCount%2==0){
-_37+=";background-color:#101010";
-}
-_36=_36||"undefined";
-_36=_36.toString().escapeHTML();
-this.outputElement.innerHTML+="<pre style='"+_37+"'>"+_36+"</pre>";
-if(_38){
-this.outputElement.scrollTop=this.outputElement.scrollHeight;
-}
-},updateTags:function(){
-var _39=this.tagFilterElement.value;
-if(this.tagPattern==_39){
-return;
-}
-try{
-new RegExp(_39);
-}
-catch(e){
-return;
-}
-this.tagPattern=_39;
-Cookie.set("tagPattern",this.tagPattern);
-this.outputElement.innerHTML="";
-this.outputCount=0;
-for(var i=0;i<Logger.logEntries.length;i++){
-this.logUpdate(Logger.logEntries[i]);
-}
-},repositionWindow:function(){
-var _40=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop;
-var _41=self.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
-this.logElement.style.top=(_40+_41-Element.getHeight(this.logElement))+"px";
-},logUpdate:function(_42){
-if(_42.tag.search(new RegExp(this.tagPattern,"igm"))==-1){
-return;
-}
-var _43="";
-if(_42.tag.search(/error/)!=-1){
-_43+="color:red";
-}else{
-if(_42.tag.search(/warning/)!=-1){
-_43+="color:orange";
-}else{
-if(_42.tag.search(/debug/)!=-1){
-_43+="color:green";
-}else{
-if(_42.tag.search(/info/)!=-1){
-_43+="color:white";
-}else{
-_43+="color:yellow";
-}
-}
-}
-}
-this.output(_42.message,_43);
-},clear:function(e){
-this.outputElement.innerHTML="";
-},handleInput:function(e){
-if(e.keyCode==Event.KEY_RETURN){
-var _45=this.inputElement.value;
-switch(_45){
+
+CustomEvent = Class.create()
+CustomEvent.prototype = {
+initialize : function() {
+this.listeners = []
+},
+addListener : function(method) {
+this.listeners.push(method)
+},
+removeListener : function(method) {
+var foundIndexes = this._findListenerIndexes(method)
+for(var i = 0; i < foundIndexes.length; i++) {
+this.listeners.splice(foundIndexes[i], 1)
+}
+},
+dispatch : function(handler) {
+for(var i = 0; i < this.listeners.length; i++) {
+try {
+this.listeners[i](handler)
+}
+catch (e) {
+alert("Could not run the listener " + this.listeners[i] + ". " + e)
+}
+}
+},
+_findListenerIndexes : function(method) {
+var indexes = []
+for(var i = 0; i < this.listeners.length; i++) {
+if (this.listeners[i] == method) {
+indexes.push(i)
+}
+}
+return indexes
+}
+}
+var Cookie = {
+set : function(name, value, expirationInDays, path) {
+var cookie = escape(name) + "=" + escape(value)
+if (expirationInDays) {
+var date = new Date()
+date.setDate(date.getDate() + expirationInDays)
+cookie += "; expires=" + date.toGMTString()
+}
+if (path) {
+cookie += ";path=" + path
+}
+document.cookie = cookie
+if (value && (expirationInDays == undefined || expirationInDays > 0) && !this.get(name)) {
+Logger.error("Cookie (" + name + ") was not set correctly... The value was " + value.toString().length + " charachters long (This may be over the cookie limit)");
+}
+},
+get : function(name) {
+var pattern = "(^|;)\\s*" + escape(name) + "=([^;]+)"
+var m = document.cookie.match(pattern)
+if (m && m[2]) {
+return unescape(m[2])
+}
+else return null
+},
+getAll : function() {
+var cookies = document.cookie.split(';')
+var cookieArray = []
+for (var i = 0; i < cookies.length; i++) {
+try {
+var name = unescape(cookies[i].match(/^\s*([^=]+)/m)[1])
+var value = unescape(cookies[i].match(/=(.*$)/m)[1])
+}
+catch (e) {
+continue
+}
+cookieArray.push({name : name, value : value})
+if (cookieArray[name] != undefined) {
+Logger.waring("Trying to retrieve cookie named(" + name + "). There appears to be another property with this name though.");
+}
+cookieArray[name] = value
+}
+return cookieArray
+},
+clear : function(name) {
+this.set(name, "", -1)
+},
+clearAll : function() {
+var cookies = this.getAll()
+for(var i = 0; i < cookies.length; i++) {
+this.clear(cookies[i].name)
+}
+}
+}
+Logger = {
+logEntries : [],
+onupdate : new CustomEvent(),
+onclear : new CustomEvent(),
+log : function(message, tag) {
+var logEntry = new LogEntry(message, tag || "info")
+this.logEntries.push(logEntry)
+this.onupdate.dispatch(logEntry)
+},
+info : function(message) {
+this.log(message, 'info')
+},
+debug : function(message) {
+this.log(message, 'debug')
+},
+warn : function(message) {
+this.log(message, 'warning')
+},
+error : function(message, error) {
+this.log(message + ": \n" + error, 'error')
+},
+clear : function () {
+this.logEntries = []
+this.onclear.dispatch()
+}
+}
+LogEntry = Class.create()
+LogEntry.prototype = {
+initialize : function(message, tag) {
+this.message = message
+this.tag = tag
+}
+}
+LogConsole = Class.create()
+LogConsole.prototype = {
+commandHistory : [],
+commandIndex : 0,
+initialize : function() {
+this.outputCount = 0
+this.tagPattern = Cookie.get('tagPattern') || ".*"
+this.logElement = document.createElement('div')
+document.body.appendChild(this.logElement)
+Element.hide(this.logElement)
+this.logElement.style.position = "absolute"
+this.logElement.style.left = '0px'
+this.logElement.style.width = '100%'
+this.logElement.style.textAlign = "left"
+this.logElement.style.fontFamily = "lucida console"
+this.logElement.style.fontSize = "100%"
+this.logElement.style.backgroundColor = 'darkgray'
+this.logElement.style.opacity = 0.9
+this.logElement.style.zIndex = 2000
+this.toolbarElement = document.createElement('div')
+this.logElement.appendChild(this.toolbarElement)
+this.toolbarElement.style.padding = "0 0 0 2px"
+this.buttonsContainerElement = document.createElement('span')
+this.toolbarElement.appendChild(this.buttonsContainerElement)
+this.buttonsContainerElement.innerHTML += '<button onclick="logConsole.toggle()" style="float:right;color:black">close</button>'
+this.buttonsContainerElement.innerHTML += '<button onclick="Logger.clear()" style="float:right;color:black">clear</button>'
+if(!Prado.Inspector.disabled)
+this.buttonsContainerElement.innerHTML += '<button onclick="Prado.Inspector.inspect()" style="float:right;color:black; margin-right:15px;">Object Tree</button>'
+this.tagFilterContainerElement = document.createElement('span')
+this.toolbarElement.appendChild(this.tagFilterContainerElement)
+this.tagFilterContainerElement.style.cssFloat = 'left'
+this.tagFilterContainerElement.appendChild(document.createTextNode("Log Filter"))
+this.tagFilterElement = document.createElement('input')
+this.tagFilterContainerElement.appendChild(this.tagFilterElement)
+this.tagFilterElement.style.width = '200px'
+this.tagFilterElement.value = this.tagPattern
+this.tagFilterElement.setAttribute('autocomplete', 'off')
+Event.observe(this.tagFilterElement, 'keyup', this.updateTags.bind(this))
+Event.observe(this.tagFilterElement, 'click', function() {this.tagFilterElement.select()}.bind(this))
+this.outputElement = document.createElement('div')
+this.logElement.appendChild(this.outputElement)
+this.outputElement.style.overflow = "auto"
+this.outputElement.style.clear = "both"
+this.outputElement.style.height = "200px"
+this.outputElement.style.backgroundColor = 'black'
+this.inputContainerElement = document.createElement('div')
+this.inputContainerElement.style.width = "100%"
+this.logElement.appendChild(this.inputContainerElement)
+this.inputElement = document.createElement('input')
+this.inputContainerElement.appendChild(this.inputElement)
+this.inputElement.style.width = '100%'
+this.inputElement.style.borderWidth = '0px'
+this.inputElement.style.margin = '0px'
+this.inputElement.style.padding = '0px'
+this.inputElement.value = 'Type command here'
+this.inputElement.setAttribute('autocomplete', 'off')
+Event.observe(this.inputElement, 'keyup', this.handleInput.bind(this))
+Event.observe(this.inputElement, 'click', function() {this.inputElement.select()}.bind(this))
+window.setInterval(this.repositionWindow.bind(this), 500)
+this.repositionWindow()
+Logger.onupdate.addListener(this.logUpdate.bind(this))
+Logger.onclear.addListener(this.clear.bind(this))
+for (var i = 0; i < Logger.logEntries.length; i++) {
+this.logUpdate(Logger.logEntries[i])
+}
+Event.observe(window, 'error', function(msg, url, lineNumber) {Logger.error("Error in (" + (url || location) + ") on line "+lineNumber+"", msg)})
+var accessElement = document.createElement('span')
+accessElement.innerHTML = '<button style="position:absolute;top:-100px" onclick="javascript:logConsole.toggle()" accesskey="d"></button>'
+document.body.appendChild(accessElement)
+if (Cookie.get('ConsoleVisible') == 'true') {
+this.toggle()
+}
+},
+toggle : function() {
+if (this.logElement.style.display == 'none') {
+this.show()
+}
+else {
+this.hide()
+}
+},
+show : function() {
+Element.show(this.logElement)
+this.outputElement.scrollTop = this.outputElement.scrollHeight
+Cookie.set('ConsoleVisible', 'true')
+ this.inputElement.select()
+},
+hide : function() {
+Element.hide(this.logElement)
+Cookie.set('ConsoleVisible', 'false')
+},
+output : function(message, style) {
+var shouldScroll = (this.outputElement.scrollTop + (2 * this.outputElement.clientHeight)) >= this.outputElement.scrollHeight
+this.outputCount++
+style = (style ? style += ';' : '')
+style += 'padding:1px;margin:0 0 5px 0'
+if (this.outputCount % 2 == 0) style += ";background-color:#101010"
+message = message || "undefined"
+message = message.toString().escapeHTML()
+this.outputElement.innerHTML += "<pre style='" + style + "'>" + message + "</pre>"
+if (shouldScroll) {
+this.outputElement.scrollTop = this.outputElement.scrollHeight
+}
+},
+updateTags : function() {
+var pattern = this.tagFilterElement.value
+if (this.tagPattern == pattern) return
+try {
+new RegExp(pattern)
+}
+catch (e) {
+return
+}
+this.tagPattern = pattern
+Cookie.set('tagPattern', this.tagPattern)
+this.outputElement.innerHTML = ""
+this.outputCount = 0;
+for (var i = 0; i < Logger.logEntries.length; i++) {
+this.logUpdate(Logger.logEntries[i])
+}
+},
+repositionWindow : function() {
+var offset = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
+var pageHeight = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight
+this.logElement.style.top = (offset + pageHeight - Element.getHeight(this.logElement)) + "px"
+},
+logUpdate : function(logEntry) {
+if (logEntry.tag.search(new RegExp(this.tagPattern, 'igm')) == -1) return
+var style = ''
+if (logEntry.tag.search(/error/) != -1) style += 'color:red'
+else if (logEntry.tag.search(/warning/) != -1) style += 'color:orange'
+else if (logEntry.tag.search(/debug/) != -1) style += 'color:green'
+ else if (logEntry.tag.search(/info/) != -1) style += 'color:white'
+else style += 'color:yellow'
+this.output(logEntry.message, style)
+},
+clear : function(e) {
+this.outputElement.innerHTML = ""
+},
+handleInput : function(e) {
+if (e.keyCode == Event.KEY_RETURN ) {
+var command = this.inputElement.value
+switch(command) {
case "clear":
-Logger.clear();
-break;
+Logger.clear()
+break
default:
-var _46="";
-try{
-_46=eval(this.inputElement.value);
+var consoleOutput = ""
+try {
+consoleOutput = eval(this.inputElement.value)
}
-catch(e){
-Logger.error("Problem parsing input <"+_45+">",e);
-break;
+catch (e) {
+Logger.error("Problem parsing input <" + command + ">", e)
+break
}
-Logger.log(_46);
-break;
+Logger.log(consoleOutput)
+break
}
-if(this.inputElement.value!=""&&this.inputElement.value!=this.commandHistory[0]){
-this.commandHistory.unshift(this.inputElement.value);
+if (this.inputElement.value != "" && this.inputElement.value != this.commandHistory[0]) {
+this.commandHistory.unshift(this.inputElement.value)
}
-this.commandIndex=0;
-this.inputElement.value="";
-}else{
-if(e.keyCode==Event.KEY_UP&&this.commandHistory.length>0){
-this.inputElement.value=this.commandHistory[this.commandIndex];
-if(this.commandIndex<this.commandHistory.length-1){
-this.commandIndex+=1;
+this.commandIndex = 0
+this.inputElement.value = ""
}
-}else{
-if(e.keyCode==Event.KEY_DOWN&&this.commandHistory.length>0){
-if(this.commandIndex>0){
-this.commandIndex-=1;
+else if (e.keyCode == Event.KEY_UP && this.commandHistory.length > 0) {
+this.inputElement.value = this.commandHistory[this.commandIndex]
+if (this.commandIndex < this.commandHistory.length - 1) {
+this.commandIndex += 1
}
-this.inputElement.value=this.commandHistory[this.commandIndex];
-}else{
-this.commandIndex=0;
+}
+else if (e.keyCode == Event.KEY_DOWN && this.commandHistory.length > 0) {
+if (this.commandIndex > 0) {
+this.commandIndex -= 1
+}
+this.inputElement.value = this.commandHistory[this.commandIndex]
+}
+ else {
+this.commandIndex = 0
}
}
-}
-}};
+}
var logConsole;
-Event.OnLoad(function(){
-logConsole=new LogConsole();
-});
-function inspect(o){
-var _48=typeof (o);
-if(_48=="undefined"){
+Event.OnLoad(function() { logConsole = new LogConsole()});
+function inspect(o)
+{
+var objtype = typeof(o);
+if (objtype == "undefined") {
return "undefined";
-}else{
-if(_48=="number"||_48=="boolean"){
-return o+"";
-}else{
-if(o===null){
+} else if (objtype == "number" || objtype == "boolean") {
+return o + "";
+} else if (o === null) {
return "null";
}
+try {
+var ostring = (o + "");
+} catch (e) {
+return "[" + typeof(o) + "]";
}
-}
-try{
-var _49=(o+"");
-}
-catch(e){
-return "["+typeof (o)+"]";
-}
-if(typeof (o)=="function"){
-o=_49.replace(/^\s+/,"");
-var idx=o.indexOf("{");
-if(idx!=-1){
-o=o.substr(0,idx)+"{...}";
+if (typeof(o) == "function")
+{
+o = ostring.replace(/^\s+/, "");
+var idx = o.indexOf("{");
+if (idx != -1) {
+o = o.substr(0, idx) + "{...}";
}
return o;
-}
-var _51=function(o){
-return ("\""+o.replace(/(["\\])/g,"\\$1")+"\"").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r");
+ }
+var reprString = function (o)
+{
+return ('"' + o.replace(/(["\\])/g, '\\$1') + '"'
+).replace(/[\f]/g, "\\f"
+).replace(/[\b]/g, "\\b"
+).replace(/[\n]/g, "\\n"
+).replace(/[\t]/g, "\\t"
+).replace(/[\r]/g, "\\r");
};
-if(_48=="string"){
-return _51(o);
+if (objtype == "string") {
+return reprString(o);
}
-var me=arguments.callee;
-var _53;
-if(typeof (o.__json__)=="function"){
-_53=o.__json__();
-if(o!==_53){
-return me(_53);
+var me = arguments.callee;
+var newObj;
+if (typeof(o.__json__) == "function") {
+newObj = o.__json__();
+if (o !== newObj) {
+return me(newObj);
}
}
-if(typeof (o.json)=="function"){
-_53=o.json();
-if(o!==_53){
-return me(_53);
+if (typeof(o.json) == "function") {
+newObj = o.json();
+if (o !== newObj) {
+return me(newObj);
}
}
-if(_48!="function"&&typeof (o.length)=="number"){
-var res=[];
-for(var i=0;i<o.length;i++){
-var val=me(o[i]);
-if(typeof (val)!="string"){
-val="undefined";
+if (objtype != "function" && typeof(o.length) == "number") {
+var res = [];
+for (var i = 0; i < o.length; i++) {
+var val = me(o[i]);
+if (typeof(val) != "string") {
+val = "undefined";
}
res.push(val);
}
-return "["+res.join(", ")+"]";
-}
-res=[];
-for(var k in o){
-var _57;
-if(typeof (k)=="number"){
-_57="\""+k+"\"";
-}else{
-if(typeof (k)=="string"){
-_57=_51(k);
-}else{
-continue;
-}
+return "[" + res.join(", ") + "]";
}
-val=me(o[k]);
-if(typeof (val)!="string"){
+res = [];
+for (var k in o) {
+var useKey;
+if (typeof(k) == "number") {
+useKey = '"' + k + '"';
+} else if (typeof(k) == "string") {
+useKey = reprString(k);
+} else {
continue;
}
-res.push(_57+":"+val);
-}
-return "{"+res.join(", ")+"}";
-}
-Array.prototype.contains=function(_58){
-for(var i=0;i<this.length;i++){
-if(_58==this[i]){
-return true;
-}
-}
-return false;
-};
-var puts=function(){
-return Logger.log(arguments[0],arguments[1]);
-};
-if(typeof Prado=="undefined"){
-var Prado={};
-}
-Prado.Inspector={d:document,types:new Array(),objs:new Array(),hidden:new Array(),opera:window.opera,displaying:"",nameList:new Array(),format:function(str){
-if(typeof (str)!="string"){
-return str;
+val = me(o[k]);
+if (typeof(val) != "string") {
+continue;
}
+res.push(useKey + ":" + val);
+}
+return "{" + res.join(", ") + "}";
+}
+Array.prototype.contains = function(object) {
+for(var i = 0; i < this.length; i++) {
+if (object == this[i]) return true
+}
+return false
+}
+var puts = function() {return Logger.log(arguments[0], arguments[1])}
+if(typeof Prado == "undefined")
+var Prado = {};
+Prado.Inspector =
+{
+d : document,
+types : new Array(),
+objs : new Array(),
+hidden : new Array(),
+opera : window.opera,
+displaying : '',
+nameList : new Array(),
+format : function(str) {
+if(typeof(str) != "string") return str;
str=str.replace(/</g,"&lt;");
str=str.replace(/>/g,"&gt;");
return str;
-},parseJS:function(obj){
-var _61;
-if(typeof obj=="string"){
-_61=obj;
-obj=eval(obj);
-}
-win=typeof obj=="undefined"?window:obj;
-this.displaying=_61?_61:win.toString();
-for(js in win){
-try{
-if(win[js]&&js.toString().indexOf("Inspector")==-1&&(win[js]+"").indexOf("[native code]")==-1){
-t=typeof (win[js]);
-if(!this.objs[t.toString()]){
+},
+parseJS : function(obj) {
+var name;
+if(typeof obj == "string") {name = obj; obj = eval(obj); }
+win= typeof obj == 'undefined' ? window : obj;
+this.displaying = name ? name : win.toString();
+for(js in win) {
+try {
+if(win[js] && js.toString().indexOf("Inspector")==-1 && (win[js]+"").indexOf("[native code]")==-1) {
+t=typeof(win[js]);
+if(!this.objs[t.toString()]) {
this.types[this.types.length]=t;
this.objs[t]={};
-this.nameList[t]=new Array();
+this.nameList[t] = new Array();
}
this.nameList[t].push(js);
-this.objs[t][js]=this.format(win[js]+"");
+this.objs[t][js] = this.format(win[js]+"");
}
+} catch(err) { }
}
-catch(err){
-}
-}
-for(i=0;i<this.types.length;i++){
+for(i=0;i<this.types.length;i++)
this.nameList[this.types[i]].sort();
-}
-},show:function(_62){
-this.d.getElementById(_62).style.display=this.hidden[_62]?"none":"block";
-this.hidden[_62]=this.hidden[_62]?0:1;
-},changeSpan:function(_63){
-if(this.d.getElementById(_63).innerHTML.indexOf("+")>-1){
-this.d.getElementById(_63).innerHTML="[-]";
-}else{
-this.d.getElementById(_63).innerHTML="[+]";
-}
-},buildInspectionLevel:function(){
-var _64=this.displaying;
-var _65=_64.split(".");
-var _66=["<a href=\"javascript:var_dump()\">[object Window]</a>"];
-var _67="";
-if(_64.indexOf("[object ")>=0){
-return _66.join(".");
-}
-for(var i=0;i<_65.length;i++){
-_67+=(_67.length?".":"")+_65[i];
-_66[i+1]="<a href=\"javascript:var_dump('"+_67+"')\">"+_65[i]+"</a>";
-}
-return _66.join(".");
-},buildTree:function(){
-mHTML="<div>Inspecting "+this.buildInspectionLevel()+"</div>";
-mHTML+="<ul class=\"topLevel\">";
+},
+show : function(objID) {
+this.d.getElementById(objID).style.display=this.hidden[objID]?"none":"block";
+this.hidden[objID]=this.hidden[objID]?0:1;
+},
+changeSpan : function(spanID) {
+if(this.d.getElementById(spanID).innerHTML.indexOf("+")>-1){
+this.d.getElementById(spanID).innerHTML="[-]";
+} else {
+this.d.getElementById(spanID).innerHTML="[+]";
+}
+},
+buildInspectionLevel : function()
+{
+var display = this.displaying;
+var list = display.split(".");
+var links = ["<a href=\"javascript:var_dump()\">[object Window]</a>"];
+var name = '';
+if(display.indexOf("[object ") >= 0) return links.join(".");
+for(var i = 0; i < list.length; i++)
+{
+name += (name.length ? "." : "") + list[i];
+links[i+1] = "<a href=\"javascript:var_dump('"+name+"')\">"+list[i]+"</a>";
+}
+return links.join(".");
+},
+buildTree : function() {
+mHTML = "<div>Inspecting "+this.buildInspectionLevel()+"</div>";
+mHTML +="<ul class=\"topLevel\">";
this.types.sort();
-var _68=0;
-for(i=0;i<this.types.length;i++){
-mHTML+="<li style=\"cursor:pointer;\" onclick=\"Prado.Inspector.show('ul"+i+"');Prado.Inspector.changeSpan('sp"+i+"')\"><span id=\"sp"+i+"\">[+]</span><b>"+this.types[i]+"</b> ("+this.nameList[this.types[i]].length+")</li><ul style=\"display:none;\" id=\"ul"+i+"\">";
+var so_objIndex=0;
+for(i=0;i<this.types.length;i++)
+{
+mHTML+="<li style=\"cursor:pointer;\" onclick=\"Prado.Inspector.show('ul"+i+"');Prado.Inspector.changeSpan('sp" + i + "')\"><span id=\"sp" + i + "\">[+]</span><b>" + this.types[i] + "</b> (" + this.nameList[this.types[i]].length + ")</li><ul style=\"display:none;\" id=\"ul"+i+"\">";
this.hidden["ul"+i]=0;
-for(e=0;e<this.nameList[this.types[i]].length;e++){
-var _69=this.nameList[this.types[i]][e];
-var _70=this.objs[this.types[i]][_69];
-var _71="";
-if(_70.indexOf("[object ")>=0&&/^[a-zA-Z_]/.test(_69)){
-if(this.displaying.indexOf("[object ")<0){
-_71=" <a href=\"javascript:var_dump('"+this.displaying+"."+_69+"')\"><b>more</b></a>";
-}else{
-if(this.displaying.indexOf("[object Window]")>=0){
-_71=" <a href=\"javascript:var_dump('"+_69+"')\"><b>more</b></a>";
-}
-}
-}
-mHTML+="<li style=\"cursor:pointer;\" onclick=\"Prado.Inspector.show('mul"+_68+"');Prado.Inspector.changeSpan('sk"+_68+"')\"><span id=\"sk"+_68+"\">[+]</span>"+_69+"</li><ul id=\"mul"+_68+"\" style=\"display:none;\"><li style=\"list-style-type:none;\"><pre>"+_70+_71+"</pre></li></ul>";
-this.hidden["mul"+_68]=0;
-_68++;
+for(e=0;e<this.nameList[this.types[i]].length;e++)
+{
+var prop = this.nameList[this.types[i]][e];
+var value = this.objs[this.types[i]][prop]
+var more = "";
+if(value.indexOf("[object ") >= 0 && /^[a-zA-Z_]/.test(prop))
+{
+if(this.displaying.indexOf("[object ") < 0)
+more = " <a href=\"javascript:var_dump('"+this.displaying+"."+prop+"')\"><b>more</b></a>";
+else if(this.displaying.indexOf("[object Window]") >= 0)
+more = " <a href=\"javascript:var_dump('"+prop+"')\"><b>more</b></a>";
+}
+mHTML+="<li style=\"cursor:pointer;\" onclick=\"Prado.Inspector.show('mul" + so_objIndex + "');Prado.Inspector.changeSpan('sk" + so_objIndex + "')\"><span id=\"sk" + so_objIndex + "\">[+]</span>" + prop + "</li><ul id=\"mul" + so_objIndex + "\" style=\"display:none;\"><li style=\"list-style-type:none;\"><pre>" + value + more + "</pre></li></ul>";
+this.hidden["mul"+so_objIndex]=0;
+so_objIndex++;
}
mHTML+="</ul>";
}
mHTML+="</ul>";
-this.d.getElementById("so_mContainer").innerHTML=mHTML;
-},handleKeyEvent:function(e){
+this.d.getElementById("so_mContainer").innerHTML =mHTML;
+},
+handleKeyEvent : function(e) {
keyCode=document.all?window.event.keyCode:e.keyCode;
-if(keyCode==27){
+if(keyCode==27) {
this.cleanUp();
}
-},cleanUp:function(){
-if(this.d.getElementById("so_mContainer")){
+},
+cleanUp : function()
+{
+if(this.d.getElementById("so_mContainer"))
+{
this.d.body.removeChild(this.d.getElementById("so_mContainer"));
this.d.body.removeChild(this.d.getElementById("so_mStyle"));
-if(typeof Event!="undefined"){
-Event.stopObserving(this.d,"keydown",this.dKeyDownEvent);
-}
-this.types=new Array();
-this.objs=new Array();
-this.hidden=new Array();
-}
-},disabled:document.all&&!this.opera,inspect:function(obj){
-if(this.disabled){
-return alert("Sorry, this only works in Mozilla and Firefox currently.");
-}
+if(typeof Event != "undefined")
+Event.stopObserving(this.d, "keydown", this.dKeyDownEvent);
+this.types = new Array();
+this.objs = new Array();
+this.hidden = new Array();
+}
+},
+disabled : document.all && !this.opera,
+inspect : function(obj)
+{
+if(this.disabled)return alert("Sorry, this only works in Mozilla and Firefox currently.");
this.cleanUp();
mObj=this.d.body.appendChild(this.d.createElement("div"));
mObj.id="so_mContainer";
sObj=this.d.body.appendChild(this.d.createElement("style"));
sObj.id="so_mStyle";
sObj.type="text/css";
-sObj.innerHTML=this.style;
-this.dKeyDownEvent=this.handleKeyEvent.bind(this);
-if(typeof Event!="undefined"){
-Event.observe(this.d,"keydown",this.dKeyDownEvent);
-}
+sObj.innerHTML = this.style;
+this.dKeyDownEvent = this.handleKeyEvent.bind(this);
+if(typeof Event != "undefined")
+Event.observe(this.d, "keydown", this.dKeyDownEvent);
this.parseJS(obj);
this.buildTree();
cObj=mObj.appendChild(this.d.createElement("div"));
cObj.className="credits";
-cObj.innerHTML="<b>[esc] to <a href=\"javascript:Prado.Inspector.cleanUp();\">close</a></b><br />Javascript Object Tree V2.0, <a target=\"_blank\" href=\"http://slayeroffice.com/?c=/content/tools/js_tree.html\">more info</a>.";
+cObj.innerHTML = "<b>[esc] to <a href=\"javascript:Prado.Inspector.cleanUp();\">close</a></b><br />Javascript Object Tree V2.0.";
window.scrollTo(0,0);
-},style:"#so_mContainer { position:absolute; top:5px; left:5px; background-color:#E3EBED; text-align:left; font:9pt verdana; width:85%; border:2px solid #000; padding:5px; z-index:1000; color:#000; } "+"#so_mContainer ul { padding-left:20px; } "+"#so_mContainer ul li { display:block; list-style-type:none; list-style-image:url(); line-height:2em; -moz-border-radius:.75em; font:10px verdana; padding:0; margin:2px; color:#000; } "+"#so_mContainer li:hover { background-color:#E3EBED; } "+"#so_mContainer ul li span { position:relative; width:15px; height:15px; margin-right:4px; } "+"#so_mContainer pre { background-color:#F9FAFB; border:1px solid #638DA1; height:auto; padding:5px; font:9px verdana; color:#000; } "+"#so_mContainer .topLevel { margin:0; padding:0; } "+"#so_mContainer .credits { float:left; width:200px; font:6.5pt verdana; color:#000; padding:2px; margin-left:5px; text-align:left; border-top:1px solid #000; margin-top:15px; width:75%; } "+"#so_mContainer .credits a { font:9px verdana; font-weight:bold; color:#004465; text-decoration:none; background-color:transparent; }"};
-function var_dump(obj){
+},
+style : "#so_mContainer { position:absolute; top:5px; left:5px; background-color:#E3EBED; text-align:left; font:9pt verdana; width:85%; border:2px solid #000; padding:5px; z-index:1000;color:#000; } " +
+"#so_mContainer ul { padding-left:20px; } " +
+"#so_mContainer ul li { display:block; list-style-type:none; list-style-image:url(); line-height:2em; -moz-border-radius:.75em; font:10px verdana; padding:0; margin:2px; color:#000; } " +
+"#so_mContainer li:hover { background-color:#E3EBED; } " +
+"#so_mContainer ul li span { position:relative; width:15px; height:15px; margin-right:4px; } " +
+"#so_mContainer pre { background-color:#F9FAFB; border:1px solid #638DA1; height:auto; padding:5px; font:9px verdana; color:#000; } " +
+"#so_mContainer .topLevel { margin:0; padding:0; } " +
+"#so_mContainer .credits { float:left; width:200px; font:6.5pt verdana; color:#000; padding:2px; margin-left:5px; text-align:left; border-top:1px solid #000; margin-top:15px; width:75%; } " +
+"#so_mContainer .credits a { font:9px verdana; font-weight:bold; color:#004465; text-decoration:none; background-color:transparent; }"
+}
+function var_dump(obj)
+{
Prado.Inspector.inspect(obj);
}
-var print_r=inspect;
-
+var print_r = inspect;
diff --git a/framework/Web/Javascripts/js/prado.js b/framework/Web/Javascripts/js/prado.js
index 794114d9..6737d4ce 100644
--- a/framework/Web/Javascripts/js/prado.js
+++ b/framework/Web/Javascripts/js/prado.js
@@ -1,2016 +1,2259 @@
-var Prototype={Version:"1.4.0",ScriptFragment:"(?:<script.*?>)((\n|\r|.)*?)(?:</script>)",emptyFunction:function(){
-},K:function(x){
-return x;
-}};
-var Class={create:function(){
-return function(){
-this.initialize.apply(this,arguments);
-};
-}};
-var Abstract=new Object();
-Object.extend=function(_2,_3){
-for(property in _3){
-_2[property]=_3[property];
+
+var Prototype = {
+Version: '1.50',
+ScriptFragment: '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
+emptyFunction: function() {},
+K: function(x) {return x}
+}
+var Class = {
+create: function() {
+return function() {
+this.initialize.apply(this, arguments);
+}
+}
+}
+var Abstract = new Object();
+Object.extend = function(destination, source) {
+for (var property in source) {
+destination[property] = source[property];
+}
+return destination;
+}
+Object.inspect = function(object) {
+try {
+if (object == undefined) return 'undefined';
+if (object == null) return 'null';
+return object.inspect ? object.inspect() : object.toString();
+} catch (e) {
+if (e instanceof RangeError) return '...';
+throw e;
}
-return _2;
-};
-Object.inspect=function(_4){
-try{
-if(_4==undefined){
-return "undefined";
}
-if(_4==null){
-return "null";
+Function.prototype.bind = function() {
+var __method = this, args = $A(arguments), object = args.shift();
+return function() {
+return __method.apply(object, args.concat($A(arguments)));
}
-return _4.inspect?_4.inspect():_4.toString();
}
-catch(e){
-if(e instanceof RangeError){
-return "...";
+Function.prototype.bindAsEventListener = function(object) {
+var __method = this;
+return function(event) {
+return __method.call(object, event || window.event);
}
-throw e;
}
-};
-Function.prototype.bind=function(){
-var _5=this,args=$A(arguments),object=args.shift();
-return function(){
-return _5.apply(object,args.concat($A(arguments)));
-};
-};
-Function.prototype.bindAsEventListener=function(_6){
-var _7=this;
-return function(_8){
-return _7.call(_6,_8||window.event);
-};
-};
-Object.extend(Number.prototype,{toColorPart:function(){
-var _9=this.toString(16);
-if(this<16){
-return "0"+_9;
-}
-return _9;
-},succ:function(){
-return this+1;
-},times:function(_10){
-$R(0,this,true).each(_10);
+Object.extend(Number.prototype, {
+toColorPart: function() {
+var digits = this.toString(16);
+if (this < 16) return '0' + digits;
+return digits;
+},
+succ: function() {
+return this + 1;
+},
+times: function(iterator) {
+$R(0, this, true).each(iterator);
return this;
-}});
-var Try={these:function(){
-var _11;
-for(var i=0;i<arguments.length;i++){
-var _13=arguments[i];
-try{
-_11=_13();
+}
+});
+var Try = {
+these: function() {
+var returnValue;
+for (var i = 0; i < arguments.length; i++) {
+var lambda = arguments[i];
+try {
+returnValue = lambda();
break;
+} catch (e) {}
}
-catch(e){
+return returnValue;
}
}
-return _11;
-}};
-var PeriodicalExecuter=Class.create();
-PeriodicalExecuter.prototype={initialize:function(_14,_15){
-this.callback=_14;
-this.frequency=_15;
-this.currentlyExecuting=false;
+var PeriodicalExecuter = Class.create();
+PeriodicalExecuter.prototype = {
+initialize: function(callback, frequency) {
+this.callback = callback;
+this.frequency = frequency;
+this.currentlyExecuting = false;
this.registerCallback();
-},registerCallback:function(){
-setInterval(this.onTimerEvent.bind(this),this.frequency*1000);
-},onTimerEvent:function(){
-if(!this.currentlyExecuting){
-try{
-this.currentlyExecuting=true;
-this.callback();
-}
-finally{
-this.currentlyExecuting=false;
-}
-}
-}};
-function $(){
-var _16=new Array();
-for(var i=0;i<arguments.length;i++){
-var _17=arguments[i];
-if(typeof _17=="string"){
-_17=document.getElementById(_17);
-}
-if(arguments.length==1){
-return _17;
-}
-_16.push(_17);
-}
-return _16;
-}
-function isAlien(a){
-return isObject(a)&&typeof a.constructor!="function";
-}
-function isArray(a){
-return isObject(a)&&a.constructor==Array;
-}
-function isBoolean(a){
-return typeof a=="boolean";
-}
-function isFunction(a){
-return typeof a=="function";
-}
-function isNull(a){
-return typeof a=="object"&&!a;
-}
-function isNumber(a){
-return typeof a=="number"&&isFinite(a);
-}
-function isObject(a){
-return (a&&typeof a=="object")||isFunction(a);
-}
-function isRegexp(a){
-return a&&a.constructor==RegExp;
-}
-function isString(a){
-return typeof a=="string";
-}
-function isUndefined(a){
-return typeof a=="undefined";
-}
-function isEmpty(o){
-var i,v;
-if(isObject(o)){
-for(i in o){
-v=o[i];
-if(isUndefined(v)&&isFunction(v)){
-return false;
-}
-}
-}
-return true;
-}
-function undef(v){
-return isUndefined(v);
-}
-function isdef(v){
-return !isUndefined(v);
-}
-function isElement(o,_21){
-return o&&isObject(o)&&((!_21&&(o==window||o==document))||o.nodeType==1);
-}
-function isList(o){
-return o&&isObject(o)&&isArray(o);
-}
-function $(n,d){
-if(isElement(n)){
-return n;
-}
-if(isString(n)==false){
-return null;
-}
-var p,i,x;
-if(!d){
-d=document;
-}
-if((p=n.indexOf("?"))>0&&parent.frames.length){
-d=parent.frames[n.substring(p+1)].document;
-n=n.substring(0,p);
-}
-if(!(x=d[n])&&d.all){
-x=d.all[n];
-}
-for(i=0;!x&&i<d.forms.length;i++){
-x=d.forms[i][n];
-}
-for(i=0;!x&&d.layers&&i<d.layers.length;i++){
-x=DOM.find(n,d.layers[i].document);
-}
-if(!x&&d.getElementById){
-x=d.getElementById(n);
-}
-return x;
-}
-Function.prototype.bindEvent=function(){
-var _25=this,args=$A(arguments),object=args.shift();
-return function(_26){
-return _25.apply(object,[_26||window.event].concat(args));
-};
-};
-Object.extend(String.prototype,{stripTags:function(){
-return this.replace(/<\/?[^>]+>/gi,"");
-},stripScripts:function(){
-return this.replace(new RegExp(Prototype.ScriptFragment,"img"),"");
-},extractScripts:function(){
-var _27=new RegExp(Prototype.ScriptFragment,"img");
-var _28=new RegExp(Prototype.ScriptFragment,"im");
-return (this.match(_27)||[]).map(function(_29){
-return (_29.match(_28)||["",""])[1];
+},
+registerCallback: function() {
+setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+},
+onTimerEvent: function() {
+if (!this.currentlyExecuting) {
+try {
+this.currentlyExecuting = true;
+this.callback();
+} finally {
+this.currentlyExecuting = false;
+}
+}
+}
+}
+Function.prototype.bindEvent = function()
+{
+var __method = this, args = $A(arguments), object = args.shift();
+return function(event)
+{
+return __method.apply(object, [event || window.event].concat(args));
+}
+}
+Class.extend = function(base, definition)
+{
+var component = Class.create();
+Object.extend(component.prototype, base.prototype);
+if(definition)
+Object.extend(component.prototype, definition);
+return component;
+}
+Object.extend(String.prototype, {
+gsub: function(pattern, replacement) {
+var result = '', source = this, match;
+replacement = arguments.callee.prepareReplacement(replacement);
+while (source.length > 0) {
+if (match = source.match(pattern)) {
+result += source.slice(0, match.index);
+result += (replacement(match) || '').toString();
+source= source.slice(match.index + match[0].length);
+} else {
+result += source, source = '';
+}
+}
+return result;
+},
+sub: function(pattern, replacement, count) {
+replacement = this.gsub.prepareReplacement(replacement);
+count = count === undefined ? 1 : count;
+return this.gsub(pattern, function(match) {
+if (--count < 0) return match[0];
+return replacement(match);
});
-},evalScripts:function(){
-return this.extractScripts().map(eval);
-},escapeHTML:function(){
-var div=document.createElement("div");
-var _31=document.createTextNode(this);
-div.appendChild(_31);
+},
+scan: function(pattern, iterator) {
+this.gsub(pattern, iterator);
+return this;
+},
+truncate: function(length, truncation) {
+length = length || 30;
+truncation = truncation === undefined ? '...' : truncation;
+return this.length > length ?
+this.slice(0, length - truncation.length) + truncation : this;
+},
+strip: function() {
+return this.replace(/^\s+/, '').replace(/\s+$/, '');
+},
+stripTags: function() {
+return this.replace(/<\/?[^>]+>/gi, '');
+},
+stripScripts: function() {
+return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
+},
+extractScripts: function() {
+var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
+var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
+return (this.match(matchAll) || []).map(function(scriptTag) {
+return (scriptTag.match(matchOne) || ['', ''])[1];
+});
+},
+evalScripts: function() {
+return this.extractScripts().map(function(script) { return eval(script) });
+},
+escapeHTML: function() {
+var div = document.createElement('div');
+var text = document.createTextNode(this);
+div.appendChild(text);
return div.innerHTML;
-},unescapeHTML:function(){
-var div=document.createElement("div");
-div.innerHTML=this.stripTags();
-return div.childNodes[0]?div.childNodes[0].nodeValue:"";
-},toQueryParams:function(){
-var _32=this.match(/^\??(.*)$/)[1].split("&");
-return _32.inject({},function(_33,_34){
-var _35=_34.split("=");
-_33[_35[0]]=_35[1];
-return _33;
+},
+unescapeHTML: function() {
+var div = document.createElement('div');
+div.innerHTML = this.stripTags();
+return div.childNodes[0] ? div.childNodes[0].nodeValue : '';
+},
+toQueryParams: function() {
+var pairs = this.match(/^\??(.*)$/)[1].split('&');
+return pairs.inject({}, function(params, pairString) {
+var pair = pairString.split('=');
+params[pair[0]] = pair[1];
+return params;
});
-},toArray:function(){
-return this.split("");
-},camelize:function(){
-var _36=this.split("-");
-if(_36.length==1){
-return _36[0];
-}
-var _37=this.indexOf("-")==0?_36[0].charAt(0).toUpperCase()+_36[0].substring(1):_36[0];
-for(var i=1,len=_36.length;i<len;i++){
-var s=_36[i];
-_37+=s.charAt(0).toUpperCase()+s.substring(1);
-}
-return _37;
-},inspect:function(){
-return "'"+this.replace("\\","\\\\").replace("'","\\'")+"'";
-}});
-String.prototype.parseQuery=String.prototype.toQueryParams;
-Object.extend(String.prototype,{pad:function(_39,len,chr){
-if(!chr){
-chr=" ";
-}
-var s=this;
-var _42=_39.toLowerCase()=="left";
-while(s.length<len){
-s=_42?chr+s:s+chr;
-}
-return s;
-},padLeft:function(len,chr){
-return this.pad("left",len,chr);
-},padRight:function(len,chr){
-return this.pad("right",len,chr);
-},zerofill:function(len){
-return this.padLeft(len,"0");
-},trim:function(){
-return this.replace(/^\s+|\s+$/g,"");
-},trimLeft:function(){
-return this.replace(/^\s+/,"");
-},trimRight:function(){
-return this.replace(/\s+$/,"");
-},toFunction:function(){
-var _43=this.split(/\./);
-var _44=window;
-_43.each(function(_45){
-if(_44[new String(_45)]){
-_44=_44[new String(_45)];
+},
+toArray: function() {
+return this.split('');
+},
+camelize: function() {
+var oStringList = this.split('-');
+if (oStringList.length == 1) return oStringList[0];
+var camelizedString = this.indexOf('-') == 0
+? oStringList[0].charAt(0).toUpperCase() + oStringList[0].substring(1)
+: oStringList[0];
+for (var i = 1, len = oStringList.length; i < len; i++) {
+var s = oStringList[i];
+camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
+}
+return camelizedString;
+},
+inspect: function() {
+return "'" + this.replace(/\\/g, '\\\\').replace(/'/g, '\\\'') + "'";
}
});
-if(isFunction(_44)){
-return _44;
-}else{
-if(typeof Logger!="undefined"){
-Logger.error("Missing function",this);
+String.prototype.gsub.prepareReplacement = function(replacement) {
+if (typeof replacement == 'function') return replacement;
+var template = new Template(replacement);
+return function(match) { return template.evaluate(match) };
+}
+String.prototype.parseQuery = String.prototype.toQueryParams;
+var Template = Class.create();
+Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;
+Template.prototype = {
+initialize: function(template, pattern) {
+this.template = template.toString();
+this.pattern= pattern || Template.Pattern;
+},
+evaluate: function(object) {
+return this.template.gsub(this.pattern, function(match) {
+var before = match[1];
+if (before == '\\') return match[2];
+return before + (object[match[3]] || '').toString();
+});
}
-return Prototype.emptyFunction;
}
-},toInteger:function(){
-var exp=/^\s*[-\+]?\d+\s*$/;
-if(this.match(exp)==null){
+Object.extend(String.prototype, {
+pad : function(side, len, chr) {
+if (!chr) chr = ' ';
+var s = this;
+var left = side.toLowerCase()=='left';
+while (s.length<len) s = left? chr + s : s + chr;
+return s;
+},
+padLeft : function(len, chr) {
+return this.pad('left',len,chr);
+},
+padRight : function(len, chr) {
+return this.pad('right',len,chr);
+},
+zerofill : function(len) {
+return this.padLeft(len,'0');
+},
+trim : function() {
+return this.replace(/^\s+|\s+$/g,'');
+},
+trimLeft : function() {
+return this.replace(/^\s+/,'');
+},
+trimRight : function() {
+return this.replace(/\s+$/,'');
+},
+toFunction : function()
+{
+var commands = this.split(/\./);
+var command = window;
+commands.each(function(action)
+{
+if(command[new String(action)])
+command=command[new String(action)];
+});
+if(typeof(command) == "function")
+return command;
+else
+{
+if(typeof Logger != "undefined")
+Logger.error("Missing function", this);
+throw new Error("Missing function '"+this+"'");
+}
+},
+toInteger : function()
+{
+var exp = /^\s*[-\+]?\d+\s*$/;
+if (this.match(exp) == null)
return null;
-}
-var num=parseInt(this,10);
-return (isNaN(num)?null:num);
-},toDouble:function(_48){
-_48=_48||".";
-var exp=new RegExp("^\\s*([-\\+])?(\\d+)?(\\"+_48+"(\\d+))?\\s*$");
-var m=this.match(exp);
-if(m==null){
+var num = parseInt(this, 10);
+return (isNaN(num) ? null : num);
+},
+toDouble : function(decimalchar)
+{
+if(this.length <= 0) return null;
+decimalchar = decimalchar || ".";
+var exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\" + decimalchar + "(\\d+))?\\s*$");
+var m = this.match(exp);
+if (m == null)
return null;
-}
-var _50=m[1]+(m[2].length>0?m[2]:"0")+"."+m[4];
-var num=parseFloat(_50);
-return (isNaN(num)?null:num);
-},toCurrency:function(_51,_52,_53){
-_51=_51||",";
-_53=_53||".";
-_52=typeof (_52)=="undefined"?2:_52;
-var exp=new RegExp("^\\s*([-\\+])?(((\\d+)\\"+_51+")*)(\\d+)"+((_52>0)?"(\\"+_53+"(\\d{1,"+_52+"}))?":"")+"\\s*$");
-var m=this.match(exp);
-if(m==null){
+m[1] = m[1] || "";
+m[2] = m[2] || "0";
+m[4] = m[4] || "0";
+var cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4];
+var num = parseFloat(cleanInput);
+return (isNaN(num) ? null : num);
+},
+toCurrency : function(groupchar, digits, decimalchar)
+{
+groupchar = groupchar || ",";
+decimalchar = decimalchar || ".";
+digits = typeof(digits) == "undefined" ? 2 : digits;
+var exp = new RegExp("^\\s*([-\\+])?(((\\d+)\\" + groupchar + ")*)(\\d+)"
++ ((digits > 0) ? "(\\" + decimalchar + "(\\d{1," + digits + "}))?" : "")
++ "\\s*$");
+var m = this.match(exp);
+if (m == null)
return null;
-}
-var _54=m[2]+m[5];
-var _55=m[1]+_54.replace(new RegExp("(\\"+_51+")","g"),"")+((_52>0)?"."+m[7]:"");
-var num=parseFloat(_55);
-return (isNaN(num)?null:num);
-},toDate:function(_56){
-return Date.SimpleParse(this,_56);
-}});
-var $break=new Object();
-var $continue=new Object();
-var Enumerable={each:function(_57){
-var _58=0;
-try{
-this._each(function(_59){
-try{
-_57(_59,_58++);
-}
-catch(e){
-if(e!=$continue){
-throw e;
-}
+var intermed = m[2] + m[5] ;
+var cleanInput = m[1] + intermed.replace(
+new RegExp("(\\" + groupchar + ")", "g"), "")
++ ((digits > 0) ? "." + m[7] : "");
+var num = parseFloat(cleanInput);
+return (isNaN(num) ? null : num);
+},
+toDate : function(format)
+{
+return Date.SimpleParse(this, format);
}
});
-}
-catch(e){
-if(e!=$break){
-throw e;
-}
-}
-},all:function(_60){
-var _61=true;
-this.each(function(_62,_63){
-_61=_61&&!!(_60||Prototype.K)(_62,_63);
-if(!_61){
-throw $break;
+var $break= new Object();
+var $continue = new Object();
+var Enumerable = {
+each: function(iterator) {
+var index = 0;
+try {
+this._each(function(value) {
+try {
+iterator(value, index++);
+} catch (e) {
+if (e != $continue) throw e;
}
});
-return _61;
-},any:function(_64){
-var _65=true;
-this.each(function(_66,_67){
-if(_65=!!(_64||Prototype.K)(_66,_67)){
+} catch (e) {
+if (e != $break) throw e;
+}
+},
+all: function(iterator) {
+var result = true;
+this.each(function(value, index) {
+result = result && !!(iterator || Prototype.K)(value, index);
+if (!result) throw $break;
+});
+return result;
+},
+any: function(iterator) {
+var result = true;
+this.each(function(value, index) {
+if (result = !!(iterator || Prototype.K)(value, index))
throw $break;
-}
});
-return _65;
-},collect:function(_68){
-var _69=[];
-this.each(function(_70,_71){
-_69.push(_68(_70,_71));
+return result;
+},
+collect: function(iterator) {
+var results = [];
+this.each(function(value, index) {
+results.push(iterator(value, index));
});
-return _69;
-},detect:function(_72){
-var _73;
-this.each(function(_74,_75){
-if(_72(_74,_75)){
-_73=_74;
+return results;
+},
+detect: function (iterator) {
+var result;
+this.each(function(value, index) {
+if (iterator(value, index)) {
+result = value;
throw $break;
}
});
-return _73;
-},findAll:function(_76){
-var _77=[];
-this.each(function(_78,_79){
-if(_76(_78,_79)){
-_77.push(_78);
-}
+return result;
+},
+findAll: function(iterator) {
+var results = [];
+this.each(function(value, index) {
+if (iterator(value, index))
+results.push(value);
});
-return _77;
-},grep:function(_80,_81){
-var _82=[];
-this.each(function(_83,_84){
-var _85=_83.toString();
-if(_85.match(_80)){
-_82.push((_81||Prototype.K)(_83,_84));
-}
-});
-return _82;
-},include:function(_86){
-var _87=false;
-this.each(function(_88){
-if(_88==_86){
-_87=true;
+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 _87;
-},inject:function(_89,_90){
-this.each(function(_91,_92){
-_89=_90(_89,_91,_92);
+return found;
+},
+inject: function(memo, iterator) {
+this.each(function(value, index) {
+memo = iterator(memo, value, index);
});
-return _89;
-},invoke:function(_93){
-var _94=$A(arguments).slice(1);
-return this.collect(function(_95){
-return _95[_93].apply(_95,_94);
+return memo;
+},
+invoke: function(method) {
+var args = $A(arguments).slice(1);
+return this.collect(function(value) {
+return value[method].apply(value, args);
});
-},max:function(_96){
-var _97;
-this.each(function(_98,_99){
-_98=(_96||Prototype.K)(_98,_99);
-if(_98>=(_97||_98)){
-_97=_98;
-}
+},
+max: function(iterator) {
+var result;
+this.each(function(value, index) {
+value = (iterator || Prototype.K)(value, index);
+if (result == undefined || value >= result)
+result = value;
});
-return _97;
-},min:function(_100){
-var _101;
-this.each(function(_102,_103){
-_102=(_100||Prototype.K)(_102,_103);
-if(_102<=(_101||_102)){
-_101=_102;
-}
+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 _101;
-},partition:function(_104){
-var _105=[],falses=[];
-this.each(function(_106,_107){
-((_104||Prototype.K)(_106,_107)?_105:falses).push(_106);
+return result;
+},
+partition: function(iterator) {
+var trues = [], falses = [];
+this.each(function(value, index) {
+((iterator || Prototype.K)(value, index) ?
+trues : falses).push(value);
});
-return [_105,falses];
-},pluck:function(_108){
-var _109=[];
-this.each(function(_110,_111){
-_109.push(_110[_108]);
+return [trues, falses];
+},
+pluck: function(property) {
+var results = [];
+this.each(function(value, index) {
+results.push(value[property]);
});
-return _109;
-},reject:function(_112){
-var _113=[];
-this.each(function(_114,_115){
-if(!_112(_114,_115)){
-_113.push(_114);
-}
+return results;
+},
+reject: function(iterator) {
+var results = [];
+this.each(function(value, index) {
+if (!iterator(value, index))
+results.push(value);
});
-return _113;
-},sortBy:function(_116){
-return this.collect(function(_117,_118){
-return {value:_117,criteria:_116(_117,_118)};
-}).sort(function(left,_120){
-var a=left.criteria,b=_120.criteria;
-return a<b?-1:a>b?1:0;
-}).pluck("value");
-},toArray:function(){
+return results;
+},
+sortBy: function(iterator) {
+return this.collect(function(value, index) {
+return {value: value, criteria: iterator(value, index)};
+}).sort(function(left, right) {
+var a = left.criteria, b = right.criteria;
+return a < b ? -1 : a > b ? 1 : 0;
+}).pluck('value');
+},
+toArray: function() {
return this.collect(Prototype.K);
-},zip:function(){
-var _121=Prototype.K,args=$A(arguments);
-if(typeof args.last()=="function"){
-_121=args.pop();
-}
-var _122=[this].concat(args).map($A);
-return this.map(function(_123,_124){
-_121(_123=_122.pluck(_124));
-return _123;
+},
+zip: function() {
+var iterator = Prototype.K, args = $A(arguments);
+if (typeof args.last() == 'function')
+iterator = args.pop();
+var collections = [this].concat(args).map($A);
+return this.map(function(value, index) {
+return iterator(collections.pluck(index));
});
-},inspect:function(){
-return "#<Enumerable:"+this.toArray().inspect()+">";
-}};
-Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray});
-var $A=Array.from=function(_125){
-if(!_125){
-return [];
-}
-if(_125.toArray){
-return _125.toArray();
-}else{
-var _126=[];
-for(var i=0;i<_125.length;i++){
-_126.push(_125[i]);
-}
-return _126;
+},
+inspect: function() {
+return '#<Enumerable:' + this.toArray().inspect() + '>';
}
-};
-Object.extend(Array.prototype,Enumerable);
-Object.extend(Array.prototype,{_each:function(_127){
-for(var i=0;i<this.length;i++){
-_127(this[i]);
}
-},clear:function(){
-this.length=0;
+Object.extend(Enumerable, {
+map: Enumerable.collect,
+find:Enumerable.detect,
+select:Enumerable.findAll,
+member:Enumerable.include,
+entries: Enumerable.toArray
+});
+var $A = Array.from = function(iterable) {
+if (!iterable) return [];
+if (iterable.toArray) {
+return iterable.toArray();
+} else {
+var results = [];
+for (var i = 0; i < iterable.length; i++)
+results.push(iterable[i]);
+return results;
+}
+}
+Object.extend(Array.prototype, Enumerable);
+if (!Array.prototype._reverse)
+Array.prototype._reverse = Array.prototype.reverse;
+Object.extend(Array.prototype, {
+_each: function(iterator) {
+for (var i = 0; i < this.length; i++)
+iterator(this[i]);
+},
+clear: function() {
+this.length = 0;
return this;
-},first:function(){
+},
+first: function() {
return this[0];
-},last:function(){
-return this[this.length-1];
-},compact:function(){
-return this.select(function(_128){
-return _128!=undefined||_128!=null;
+},
+last: function() {
+return this[this.length - 1];
+},
+compact: function() {
+return this.select(function(value) {
+return value != undefined || value != null;
});
-},flatten:function(){
-return this.inject([],function(_129,_130){
-return _129.concat(_130.constructor==Array?_130.flatten():[_130]);
+},
+flatten: function() {
+return this.inject([], function(array, value) {
+return array.concat(value && value.constructor == Array ?
+value.flatten() : [value]);
});
-},without:function(){
-var _131=$A(arguments);
-return this.select(function(_132){
-return !_131.include(_132);
+},
+without: function() {
+var values = $A(arguments);
+return this.select(function(value) {
+return !values.include(value);
});
-},indexOf:function(_133){
-for(var i=0;i<this.length;i++){
-if(this[i]==_133){
-return i;
-}
-}
+},
+indexOf: function(object) {
+for (var i = 0; i < this.length; i++)
+if (this[i] == object) return i;
return -1;
-},shift:function(){
-var _134=this[0];
-for(var i=0;i<this.length-1;i++){
-this[i]=this[i+1];
-}
-this.length--;
-return _134;
-},inspect:function(){
-return "["+this.map(Object.inspect).join(", ")+"]";
-}});
-var Hash={_each:function(_135){
-for(key in this){
-var _136=this[key];
-if(typeof _136=="function"){
-continue;
+},
+reverse: function(inline) {
+return (inline !== false ? this : this.toArray())._reverse();
+},
+inspect: function() {
+return '[' + this.map(Object.inspect).join(', ') + ']';
}
-var pair=[key,_136];
-pair.key=key;
-pair.value=_136;
-_135(pair);
-}
-},keys:function(){
-return this.pluck("key");
-},values:function(){
-return this.pluck("value");
-},merge:function(hash){
-return $H(hash).inject($H(this),function(_139,pair){
-_139[pair.key]=pair.value;
-return _139;
});
-},toQueryString:function(){
-return this.map(function(pair){
-return pair.map(encodeURIComponent).join("=");
-}).join("&");
-},inspect:function(){
-return "#<Hash:{"+this.map(function(pair){
-return pair.map(Object.inspect).join(": ");
-}).join(", ")+"}>";
-}};
-function $H(_140){
-var hash=Object.extend({},_140||{});
-Object.extend(hash,Enumerable);
-Object.extend(hash,Hash);
+var Hash = {
+_each: function(iterator) {
+for (var key in this) {
+var value = this[key];
+if (typeof value == 'function') continue;
+var pair = [key, value];
+pair.key = key;
+pair.value = value;
+iterator(pair);
+}
+},
+keys: function() {
+return this.pluck('key');
+},
+values: function() {
+return this.pluck('value');
+},
+merge: function(hash) {
+return $H(hash).inject($H(this), function(mergedHash, pair) {
+mergedHash[pair.key] = pair.value;
+return mergedHash;
+});
+},
+toQueryString: function() {
+return this.map(function(pair) {
+return pair.map(encodeURIComponent).join('=');
+}).join('&');
+},
+inspect: function() {
+return '#<Hash:{' + this.map(function(pair) {
+return pair.map(Object.inspect).join(': ');
+}).join(', ') + '}>';
+}
+}
+function $H(object) {
+var hash = Object.extend({}, object || {});
+Object.extend(hash, Enumerable);
+Object.extend(hash, Hash);
return hash;
}
-ObjectRange=Class.create();
-Object.extend(ObjectRange.prototype,Enumerable);
-Object.extend(ObjectRange.prototype,{initialize:function(_141,end,_143){
-this.start=_141;
-this.end=end;
-this.exclusive=_143;
-},_each:function(_144){
-var _145=this.start;
-do{
-_144(_145);
-_145=_145.succ();
-}while(this.include(_145));
-},include:function(_146){
-if(_146<this.start){
+ObjectRange = Class.create();
+Object.extend(ObjectRange.prototype, Enumerable);
+Object.extend(ObjectRange.prototype, {
+initialize: function(start, end, exclusive) {
+this.start = start;
+this.end = end;
+this.exclusive = exclusive;
+},
+_each: function(iterator) {
+var value = this.start;
+do {
+iterator(value);
+value = value.succ();
+} while (this.include(value));
+},
+include: function(value) {
+if (value < this.start)
return false;
+if (this.exclusive)
+return value < this.end;
+return value <= this.end;
}
-if(this.exclusive){
-return _146<this.end;
-}
-return _146<=this.end;
-}});
-var $R=function(_147,end,_148){
-return new ObjectRange(_147,end,_148);
-};
-document.getElementsByClassName=function(_149,_150){
-var _151=($(_150)||document.body).getElementsByTagName("*");
-return $A(_151).inject([],function(_152,_153){
-if(_153.className.match(new RegExp("(^|\\s)"+_149+"(\\s|$)"))){
-_152.push(_153);
-}
-return _152;
});
-};
-if(!window.Element){
-var Element=new Object();
-}
-Object.extend(Element,{visible:function(_154){
-return $(_154).style.display!="none";
-},toggle:function(){
-for(var i=0;i<arguments.length;i++){
-var _155=$(arguments[i]);
-Element[Element.visible(_155)?"hide":"show"](_155);
-}
-},hide:function(){
-for(var i=0;i<arguments.length;i++){
-var _156=$(arguments[i]);
-_156.style.display="none";
-}
-},show:function(){
-for(var i=0;i<arguments.length;i++){
-var _157=$(arguments[i]);
-_157.style.display="";
-}
-},remove:function(_158){
-_158=$(_158);
-_158.parentNode.removeChild(_158);
-},update:function(_159,html){
-$(_159).innerHTML=html.stripScripts();
-setTimeout(function(){
-html.evalScripts();
-},10);
-},getHeight:function(_161){
-_161=$(_161);
-return _161.offsetHeight;
-},classNames:function(_162){
-return new Element.ClassNames(_162);
-},hasClassName:function(_163,_164){
-if(!(_163=$(_163))){
-return;
-}
-return Element.classNames(_163).include(_164);
-},addClassName:function(_165,_166){
-if(!(_165=$(_165))){
-return;
-}
-return Element.classNames(_165).add(_166);
-},removeClassName:function(_167,_168){
-if(!(_167=$(_167))){
-return;
+var $R = function(start, end, exclusive) {
+return new ObjectRange(start, end, exclusive);
+}
+function $() {
+var results = [], element;
+for (var i = 0; i < arguments.length; i++) {
+element = arguments[i];
+if (typeof element == 'string')
+element = document.getElementById(element);
+results.push(Element.extend(element));
+}
+return results.length < 2 ? results[0] : results;
+}
+document.getElementsByClassName = function(className, parentElement) {
+var children = ($(parentElement) || document.body).getElementsByTagName('*');
+return $A(children).inject([], function(elements, child) {
+if (child.className.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
+elements.push(Element.extend(child));
+return elements;
+});
}
-return Element.classNames(_167).remove(_168);
-},cleanWhitespace:function(_169){
-_169=$(_169);
-for(var i=0;i<_169.childNodes.length;i++){
-var node=_169.childNodes[i];
-if(node.nodeType==3&&!/\S/.test(node.nodeValue)){
+if (!window.Element)
+var Element = new Object();
+Element.extend = function(element) {
+if (!element) return;
+if (_nativeExtensions) return element;
+if (!element._extended && element.tagName && element != window) {
+var methods = Element.Methods, cache = Element.extend.cache;
+for (property in methods) {
+var value = methods[property];
+if (typeof value == 'function')
+element[property] = cache.findOrStore(value);
+}
+}
+element._extended = true;
+return element;
+}
+Element.extend.cache = {
+findOrStore: function(value) {
+return this[value] = this[value] || function() {
+return value.apply(null, [this].concat($A(arguments)));
+}
+}
+}
+Element.Methods = {
+visible: function(element) {
+return $(element).style.display != 'none';
+},
+toggle: function() {
+for (var i = 0; i < arguments.length; i++) {
+var element = $(arguments[i]);
+Element[Element.visible(element) ? 'hide' : 'show'](element);
+}
+},
+hide: function() {
+for (var i = 0; i < arguments.length; i++) {
+var element = $(arguments[i]);
+element.style.display = 'none';
+}
+},
+show: function() {
+for (var i = 0; i < arguments.length; i++) {
+var element = $(arguments[i]);
+element.style.display = '';
+}
+},
+remove: function(element) {
+element = $(element);
+element.parentNode.removeChild(element);
+},
+update: function(element, html) {
+$(element).innerHTML = html.stripScripts();
+setTimeout(function() {html.evalScripts()}, 10);
+},
+replace: function(element, html) {
+element = $(element);
+if (element.outerHTML) {
+element.outerHTML = html.stripScripts();
+} else {
+var range = element.ownerDocument.createRange();
+range.selectNodeContents(element);
+element.parentNode.replaceChild(
+range.createContextualFragment(html.stripScripts()), element);
+}
+setTimeout(function() {html.evalScripts()}, 10);
+},
+getHeight: function(element) {
+element = $(element);
+return element.offsetHeight;
+},
+classNames: function(element) {
+return new Element.ClassNames(element);
+},
+hasClassName: function(element, className) {
+if (!(element = $(element))) return;
+return Element.classNames(element).include(className);
+},
+addClassName: function(element, className) {
+if (!(element = $(element))) return;
+return Element.classNames(element).add(className);
+},
+removeClassName: function(element, className) {
+if (!(element = $(element))) return;
+return Element.classNames(element).remove(className);
+},
+cleanWhitespace: function(element) {
+element = $(element);
+for (var i = 0; i < element.childNodes.length; i++) {
+var node = element.childNodes[i];
+if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
Element.remove(node);
}
-}
-},empty:function(_171){
-return $(_171).innerHTML.match(/^\s*$/);
-},scrollTo:function(_172){
-_172=$(_172);
-var x=_172.x?_172.x:_172.offsetLeft,y=_172.y?_172.y:_172.offsetTop;
-window.scrollTo(x,y);
-},getStyle:function(_173,_174){
-_173=$(_173);
-var _175=_173.style[_174.camelize()];
-if(!_175){
-if(document.defaultView&&document.defaultView.getComputedStyle){
-var css=document.defaultView.getComputedStyle(_173,null);
-_175=css?css.getPropertyValue(_174):null;
-}else{
-if(_173.currentStyle){
-_175=_173.currentStyle[_174.camelize()];
-}
-}
-}
-if(window.opera&&["left","top","right","bottom"].include(_174)){
-if(Element.getStyle(_173,"position")=="static"){
-_175="auto";
-}
-}
-return _175=="auto"?null:_175;
-},setStyle:function(_177,_178){
-_177=$(_177);
-for(name in _178){
-_177.style[name.camelize()]=_178[name];
-}
-},getDimensions:function(_179){
-_179=$(_179);
-if(Element.getStyle(_179,"display")!="none"){
-return {width:_179.offsetWidth,height:_179.offsetHeight};
-}
-var els=_179.style;
-var _181=els.visibility;
-var _182=els.position;
-els.visibility="hidden";
-els.position="absolute";
-els.display="";
-var _183=_179.clientWidth;
-var _184=_179.clientHeight;
-els.display="none";
-els.position=_182;
-els.visibility=_181;
-return {width:_183,height:_184};
-},makePositioned:function(_185){
-_185=$(_185);
-var pos=Element.getStyle(_185,"position");
-if(pos=="static"||!pos){
-_185._madePositioned=true;
-_185.style.position="relative";
-if(window.opera){
-_185.style.top=0;
-_185.style.left=0;
-}
-}
-},undoPositioned:function(_187){
-_187=$(_187);
-if(_187._madePositioned){
-_187._madePositioned=undefined;
-_187.style.position=_187.style.top=_187.style.left=_187.style.bottom=_187.style.right="";
-}
-},makeClipping:function(_188){
-_188=$(_188);
-if(_188._overflow){
-return;
-}
-_188._overflow=_188.style.overflow;
-if((Element.getStyle(_188,"overflow")||"visible")!="hidden"){
-_188.style.overflow="hidden";
-}
-},undoClipping:function(_189){
-_189=$(_189);
-if(_189._overflow){
-return;
-}
-_189.style.overflow=_189._overflow;
-_189._overflow=undefined;
-}});
-var Toggle=new Object();
-Toggle.display=Element.toggle;
-Abstract.Insertion=function(_190){
-this.adjacency=_190;
-};
-Abstract.Insertion.prototype={initialize:function(_191,_192){
-this.element=$(_191);
-this.content=_192.stripScripts();
-if(this.adjacency&&this.element.insertAdjacentHTML){
-try{
-this.element.insertAdjacentHTML(this.adjacency,this.content);
-}
-catch(e){
-if(this.element.tagName.toLowerCase()=="tbody"){
+},
+empty: function(element) {
+return $(element).innerHTML.match(/^\s*$/);
+},
+childOf: function(element, ancestor) {
+element = $(element), ancestor = $(ancestor);
+while (element = element.parentNode)
+if (element == ancestor) return true;
+return false;
+},
+scrollTo: function(element) {
+element = $(element);
+var x = element.x ? element.x : element.offsetLeft,
+y = element.y ? element.y : element.offsetTop;
+window.scrollTo(x, y);
+},
+getStyle: function(element, style) {
+element = $(element);
+var value = element.style[style.camelize()];
+if (!value) {
+if (document.defaultView && document.defaultView.getComputedStyle) {
+var css = document.defaultView.getComputedStyle(element, null);
+value = css ? css.getPropertyValue(style) : null;
+} else if (element.currentStyle) {
+value = element.currentStyle[style.camelize()];
+}
+}
+if (window.opera && ['left', 'top', 'right', 'bottom'].include(style))
+if (Element.getStyle(element, 'position') == 'static') value = 'auto';
+return value == 'auto' ? null : value;
+},
+setStyle: function(element, style) {
+element = $(element);
+for (var name in style)
+element.style[name.camelize()] = style[name];
+},
+getDimensions: function(element) {
+element = $(element);
+if (Element.getStyle(element, 'display') != 'none')
+return {width: element.offsetWidth, height: element.offsetHeight};
+var els = element.style;
+var originalVisibility = els.visibility;
+var originalPosition = els.position;
+els.visibility = 'hidden';
+els.position = 'absolute';
+els.display = '';
+var originalWidth = element.clientWidth;
+var originalHeight = element.clientHeight;
+els.display = 'none';
+els.position = originalPosition;
+els.visibility = originalVisibility;
+return {width: originalWidth, height: originalHeight};
+},
+makePositioned: function(element) {
+element = $(element);
+var pos = Element.getStyle(element, 'position');
+if (pos == 'static' || !pos) {
+element._madePositioned = true;
+element.style.position = 'relative';
+if (window.opera) {
+element.style.top = 0;
+element.style.left = 0;
+}
+}
+},
+undoPositioned: function(element) {
+element = $(element);
+if (element._madePositioned) {
+element._madePositioned = undefined;
+element.style.position =
+element.style.top =
+element.style.left =
+element.style.bottom =
+element.style.right = '';
+}
+},
+makeClipping: function(element) {
+element = $(element);
+if (element._overflow) return;
+element._overflow = element.style.overflow;
+if ((Element.getStyle(element, 'overflow') || 'visible') != 'hidden')
+element.style.overflow = 'hidden';
+},
+undoClipping: function(element) {
+element = $(element);
+if (element._overflow) return;
+element.style.overflow = element._overflow;
+element._overflow = undefined;
+}
+}
+Object.extend(Element, Element.Methods);
+var _nativeExtensions = false;
+if(!HTMLElement && /Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
+var HTMLElement = {}
+HTMLElement.prototype = document.createElement('div').__proto__;
+}
+Element.addMethods = function(methods) {
+Object.extend(Element.Methods, methods || {});
+if(typeof HTMLElement != 'undefined') {
+var methods = Element.Methods, cache = Element.extend.cache;
+for (property in methods) {
+var value = methods[property];
+if (typeof value == 'function')
+HTMLElement.prototype[property] = cache.findOrStore(value);
+}
+_nativeExtensions = true;
+}
+}
+Element.addMethods();
+var Toggle = new Object();
+Toggle.display = Element.toggle;
+Abstract.Insertion = function(adjacency) {
+this.adjacency = adjacency;
+}
+Abstract.Insertion.prototype = {
+initialize: function(element, content) {
+this.element = $(element);
+this.content = content.stripScripts();
+if (this.adjacency && this.element.insertAdjacentHTML) {
+try {
+this.element.insertAdjacentHTML(this.adjacency, this.content);
+} catch (e) {
+var tagName = this.element.tagName.toLowerCase();
+if (tagName == 'tbody' || tagName == 'tr') {
this.insertContent(this.contentFromAnonymousTable());
-}else{
+} else {
throw e;
}
}
-}else{
-this.range=this.element.ownerDocument.createRange();
-if(this.initializeRange){
-this.initializeRange();
-}
+} else {
+this.range = this.element.ownerDocument.createRange();
+if (this.initializeRange) this.initializeRange();
this.insertContent([this.range.createContextualFragment(this.content)]);
}
-setTimeout(function(){
-_192.evalScripts();
-},10);
-},contentFromAnonymousTable:function(){
-var div=document.createElement("div");
-div.innerHTML="<table><tbody>"+this.content+"</tbody></table>";
+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(){
+}
+}
+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(_193){
-_193.each((function(_194){
-this.element.parentNode.insertBefore(_194,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(){
+}
+});
+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(_195){
-_195.reverse(false).each((function(_196){
-this.element.insertBefore(_196,this.element.firstChild);
+},
+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(){
+}
+});
+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(_197){
-_197.each((function(_198){
-this.element.appendChild(_198);
+},
+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(){
+}
+});
+Insertion.After = Class.create();
+Insertion.After.prototype = Object.extend(new Abstract.Insertion('afterEnd'), {
+initializeRange: function() {
this.range.setStartAfter(this.element);
-},insertContent:function(_199){
-_199.each((function(_200){
-this.element.parentNode.insertBefore(_200,this.element.nextSibling);
+},
+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(_201){
-this.element=$(_201);
-},_each:function(_202){
-this.element.className.split(/\s+/).select(function(name){
-return name.length>0;
-})._each(_202);
-},set:function(_204){
-this.element.className=_204;
-},add:function(_205){
-if(this.include(_205)){
-return;
-}
-this.set(this.toArray().concat(_205).join(" "));
-},remove:function(_206){
-if(!this.include(_206)){
-return;
-}
-this.set(this.select(function(_207){
-return _207!=_206;
-}).join(" "));
-},toString:function(){
-return this.toArray().join(" ");
-}};
-Object.extend(Element.ClassNames.prototype,Enumerable);
-Object.extend(Element,{condClassName:function(_208,_209,cond){
-(cond?Element.addClassName:Element.removeClassName)(_208,_209);
-}});
-var Field={clear:function(){
-for(var i=0;i<arguments.length;i++){
-$(arguments[i]).value="";
-}
-},focus:function(_211){
-$(_211).focus();
-},present:function(){
-for(var i=0;i<arguments.length;i++){
-if($(arguments[i]).value==""){
-return false;
-}
}
+});
+Element.ClassNames = Class.create();
+Element.ClassNames.prototype = {
+initialize: function(element) {
+this.element = $(element);
+},
+_each: function(iterator) {
+this.element.className.split(/\s+/).select(function(name) {
+return name.length > 0;
+})._each(iterator);
+},
+set: function(className) {
+this.element.className = className;
+},
+add: function(classNameToAdd) {
+if (this.include(classNameToAdd)) return;
+this.set(this.toArray().concat(classNameToAdd).join(' '));
+},
+remove: function(classNameToRemove) {
+if (!this.include(classNameToRemove)) return;
+this.set(this.select(function(className) {
+return className != classNameToRemove;
+}).join(' '));
+},
+toString: function() {
+return this.toArray().join(' ');
+}
+}
+Object.extend(Element.ClassNames.prototype, Enumerable);
+var Field = {
+clear: function() {
+for (var i = 0; i < arguments.length; i++)
+$(arguments[i]).value = '';
+},
+focus: function(element) {
+$(element).focus();
+},
+present: function() {
+for (var i = 0; i < arguments.length; i++)
+if ($(arguments[i]).value == '') return false;
return true;
-},select:function(_212){
-$(_212).select();
-},activate:function(_213){
-_213=$(_213);
-_213.focus();
-if(_213.select){
-_213.select();
-}
-}};
-var Form={serialize:function(form){
-var _215=Form.getElements($(form));
-var _216=new Array();
-for(var i=0;i<_215.length;i++){
-var _217=Form.Element.serialize(_215[i]);
-if(_217){
-_216.push(_217);
-}
-}
-return _216.join("&");
-},getElements:function(form){
-form=$(form);
-var _218=new Array();
-for(tagName in Form.Element.Serializers){
-var _219=form.getElementsByTagName(tagName);
-for(var j=0;j<_219.length;j++){
-_218.push(_219[j]);
-}
-}
-return _218;
-},getInputs:function(form,_221,name){
-form=$(form);
-var _222=form.getElementsByTagName("input");
-if(!_221&&!name){
-return _222;
-}
-var _223=new Array();
-for(var i=0;i<_222.length;i++){
-var _224=_222[i];
-if((_221&&_224.type!=_221)||(name&&_224.name!=name)){
+},
+select: function(element) {
+$(element).select();
+},
+activate: function(element) {
+element = $(element);
+element.focus();
+if (element.select)
+element.select();
+}
+}
+var Form = {
+serialize: function(form) {
+var elements = Form.getElements($(form));
+var queryComponents = new Array();
+for (var i = 0; i < elements.length; i++) {
+var queryComponent = Form.Element.serialize(elements[i]);
+if (queryComponent)
+queryComponents.push(queryComponent);
+}
+return queryComponents.join('&');
+},
+getElements: function(form) {
+form = $(form);
+var elements = new Array();
+for (var tagName in Form.Element.Serializers) {
+var tagElements = form.getElementsByTagName(tagName);
+for (var j = 0; j < tagElements.length; j++)
+elements.push(tagElements[j]);
+}
+return elements;
+},
+getInputs: function(form, typeName, name) {
+form = $(form);
+var inputs = form.getElementsByTagName('input');
+if (!typeName && !name)
+return inputs;
+var matchingInputs = new Array();
+for (var i = 0; i < inputs.length; i++) {
+var input = inputs[i];
+if ((typeName && input.type != typeName) ||
+(name && input.name != name))
continue;
-}
-_223.push(_224);
-}
-return _223;
-},disable:function(form){
-var _225=Form.getElements(form);
-for(var i=0;i<_225.length;i++){
-var _226=_225[i];
-_226.blur();
-_226.disabled="true";
-}
-},enable:function(form){
-var _227=Form.getElements(form);
-for(var i=0;i<_227.length;i++){
-var _228=_227[i];
-_228.disabled="";
-}
-},findFirstElement:function(form){
-return Form.getElements(form).find(function(_229){
-return _229.type!="hidden"&&!_229.disabled&&["input","select","textarea"].include(_229.tagName.toLowerCase());
+matchingInputs.push(input);
+}
+return matchingInputs;
+},
+disable: function(form) {
+var elements = Form.getElements(form);
+for (var i = 0; i < elements.length; i++) {
+var element = elements[i];
+element.blur();
+element.disabled = 'true';
+}
+},
+enable: function(form) {
+var elements = Form.getElements(form);
+for (var i = 0; i < elements.length; i++) {
+var element = elements[i];
+element.disabled = '';
+}
+},
+findFirstElement: function(form) {
+return Form.getElements(form).find(function(element) {
+return element.type != 'hidden' && !element.disabled &&
+['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
});
-},focusFirstElement:function(form){
+},
+focusFirstElement: function(form) {
Field.activate(Form.findFirstElement(form));
-},reset:function(form){
+},
+reset: function(form) {
$(form).reset();
-}};
-Form.Element={serialize:function(_230){
-_230=$(_230);
-var _231=_230.tagName.toLowerCase();
-var _232=Form.Element.Serializers[_231](_230);
-if(_232){
-var key=encodeURIComponent(_232[0]);
-if(key.length==0){
-return;
}
-if(_232[1].constructor!=Array){
-_232[1]=[_232[1]];
-}
-return _232[1].map(function(_234){
-return key+"="+encodeURIComponent(_234);
-}).join("&");
-}
-},getValue:function(_235){
-_235=$(_235);
-var _236=_235.tagName.toLowerCase();
-var _237=Form.Element.Serializers[_236](_235);
-if(_237){
-return _237[1];
-}
-}};
-Form.Element.Serializers={input:function(_238){
-switch(_238.type.toLowerCase()){
-case "submit":
-case "hidden":
-case "password":
-case "text":
-return Form.Element.Serializers.textarea(_238);
-case "checkbox":
-case "radio":
-return Form.Element.Serializers.inputSelector(_238);
+}
+Form.Element = {
+serialize: function(element) {
+element = $(element);
+var method = element.tagName.toLowerCase();
+var parameter = Form.Element.Serializers[method](element);
+if (parameter) {
+var key = encodeURIComponent(parameter[0]);
+if (key.length == 0) return;
+if (parameter[1].constructor != Array)
+parameter[1] = [parameter[1]];
+return parameter[1].map(function(value) {
+return key + '=' + encodeURIComponent(value);
+}).join('&');
+}
+},
+getValue: function(element) {
+element = $(element);
+var method = element.tagName.toLowerCase();
+var parameter = Form.Element.Serializers[method](element);
+if (parameter)
+return parameter[1];
+}
+}
+Form.Element.Serializers = {
+input: function(element) {
+switch (element.type.toLowerCase()) {
+case 'submit':
+case 'hidden':
+case 'password':
+case 'text':
+return Form.Element.Serializers.textarea(element);
+case 'checkbox':
+case 'radio':
+return Form.Element.Serializers.inputSelector(element);
}
return false;
-},inputSelector:function(_239){
-if(_239.checked){
-return [_239.name,_239.value];
-}
-},textarea:function(_240){
-return [_240.name,_240.value];
-},select:function(_241){
-return Form.Element.Serializers[_241.type=="select-one"?"selectOne":"selectMany"](_241);
-},selectOne:function(_242){
-var _243="",opt,index=_242.selectedIndex;
-if(index>=0){
-opt=_242.options[index];
-_243=opt.value;
-if(!_243&&!("value" in opt)){
-_243=opt.text;
-}
-}
-return [_242.name,_243];
-},selectMany:function(_244){
-var _245=new Array();
-for(var i=0;i<_244.length;i++){
-var opt=_244.options[i];
-if(opt.selected){
-var _247=opt.value;
-if(!_247&&!("value" in opt)){
-_247=opt.text;
-}
-_245.push(_247);
-}
-}
-return [_244.name,_245];
-}};
-var $F=Form.Element.getValue;
-Abstract.TimedObserver=function(){
-};
-Abstract.TimedObserver.prototype={initialize:function(_248,_249,_250){
-this.frequency=_249;
-this.element=$(_248);
-this.callback=_250;
-this.lastValue=this.getValue();
+},
+inputSelector: function(element) {
+if (element.checked)
+return [element.name, element.value];
+},
+textarea: function(element) {
+return [element.name, element.value];
+},
+select: function(element) {
+return Form.Element.Serializers[element.type == 'select-one' ?
+'selectOne' : 'selectMany'](element);
+},
+selectOne: function(element) {
+var value = '', opt, index = element.selectedIndex;
+if (index >= 0) {
+opt = element.options[index];
+value = opt.value || opt.text;
+}
+return [element.name, value];
+},
+selectMany: function(element) {
+var value = [];
+for (var i = 0; i < element.length; i++) {
+var opt = element.options[i];
+if (opt.selected)
+value.push(opt.value || opt.text);
+}
+return [element.name, value];
+}
+}
+var $F = Form.Element.getValue;
+Abstract.TimedObserver = function() {}
+Abstract.TimedObserver.prototype = {
+initialize: function(element, frequency, callback) {
+this.frequency = frequency;
+this.element = $(element);
+this.callback= callback;
+this.lastValue = this.getValue();
this.registerCallback();
-},registerCallback:function(){
-setInterval(this.onTimerEvent.bind(this),this.frequency*1000);
-},onTimerEvent:function(){
-var _251=this.getValue();
-if(this.lastValue!=_251){
-this.callback(this.element,_251);
-this.lastValue=_251;
-}
-}};
-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(_252,_253){
-this.element=$(_252);
-this.callback=_253;
-this.lastValue=this.getValue();
-if(this.element.tagName.toLowerCase()=="form"){
-this.registerFormCallbacks();
-}else{
-this.registerCallback(this.element);
+},
+registerCallback: function() {
+setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
+},
+onTimerEvent: function() {
+var value = this.getValue();
+if (this.lastValue != value) {
+this.callback(this.element, value);
+this.lastValue = value;
}
-},onElementEvent:function(){
-var _254=this.getValue();
-if(this.lastValue!=_254){
-this.callback(this.element,_254);
-this.lastValue=_254;
-}
-},registerFormCallbacks:function(){
-var _255=Form.getElements(this.element);
-for(var i=0;i<_255.length;i++){
-this.registerCallback(_255[i]);
-}
-},registerCallback:function(_256){
-if(_256.type){
-switch(_256.type.toLowerCase()){
-case "checkbox":
-case "radio":
-Event.observe(_256,"click",this.onElementEvent.bind(this));
-break;
-case "password":
-case "text":
-case "textarea":
-case "select-one":
-case "select-multiple":
-Event.observe(_256,"change",this.onElementEvent.bind(this));
-break;
}
}
-}};
-Form.Element.EventObserver=Class.create();
-Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){
+Form.Element.Observer = Class.create();
+Form.Element.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+getValue: function() {
return Form.Element.getValue(this.element);
-}});
-Form.EventObserver=Class.create();
-Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{getValue:function(){
-return Form.serialize(this.element);
-}});
-if(!window.Event){
-var Event=new Object();
-}
-Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,element:function(_257){
-return _257.target||_257.srcElement;
-},isLeftClick:function(_258){
-return (((_258.which)&&(_258.which==1))||((_258.button)&&(_258.button==1)));
-},pointerX:function(_259){
-return _259.pageX||(_259.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));
-},pointerY:function(_260){
-return _260.pageY||(_260.clientY+(document.documentElement.scrollTop||document.body.scrollTop));
-},stop:function(_261){
-if(_261.preventDefault){
-_261.preventDefault();
-_261.stopPropagation();
-}else{
-_261.returnValue=false;
-_261.cancelBubble=true;
-}
-},findElement:function(_262,_263){
-var _264=Event.element(_262);
-while(_264.parentNode&&(!_264.tagName||(_264.tagName.toUpperCase()!=_263.toUpperCase()))){
-_264=_264.parentNode;
-}
-return _264;
-},observers:false,_observeAndCache:function(_265,name,_266,_267){
-if(!this.observers){
-this.observers=[];
-}
-if(_265.addEventListener){
-this.observers.push([_265,name,_266,_267]);
-_265.addEventListener(name,_266,_267);
-}else{
-if(_265.attachEvent){
-this.observers.push([_265,name,_266,_267]);
-_265.attachEvent("on"+name,_266);
-}
-}
-},unloadCache:function(){
-if(!Event.observers){
-return;
-}
-for(var i=0;i<Event.observers.length;i++){
-Event.stopObserving.apply(this,Event.observers[i]);
-Event.observers[i][0]=null;
-}
-Event.observers=false;
-},observe:function(_268,name,_269,_270){
-var _268=$(_268);
-_270=_270||false;
-if(name=="keypress"&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||_268.attachEvent)){
-name="keydown";
-}
-this._observeAndCache(_268,name,_269,_270);
-},stopObserving:function(_271,name,_272,_273){
-var _271=$(_271);
-_273=_273||false;
-if(name=="keypress"&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||_271.detachEvent)){
-name="keydown";
-}
-if(_271.removeEventListener){
-_271.removeEventListener(name,_272,_273);
-}else{
-if(_271.detachEvent){
-_271.detachEvent("on"+name,_272);
-}
-}
-}});
-Event.observe(window,"unload",Event.unloadCache,false);
-Object.extend(Event,{OnLoad:function(fn){
-var w=document.addEventListener&&!window.addEventListener?document:window;
-Event.__observe(w,"load",fn);
-},observe:function(_276,name,_277,_278){
-if(!isList(_276)){
-return this.__observe(_276,name,_277,_278);
-}
-for(var i=0;i<_276.length;i++){
-this.__observe(_276[i],name,_277,_278);
-}
-},__observe:function(_279,name,_280,_281){
-var _279=$(_279);
-_281=_281||false;
-if(name=="keypress"&&((navigator.appVersion.indexOf("AppleWebKit")>0)||_279.attachEvent)){
-name="keydown";
-}
-this._observeAndCache(_279,name,_280,_281);
-},keyCode:function(e){
-return e.keyCode!=null?e.keyCode:e.charCode;
-},isHTMLEvent:function(type){
-var _284=["abort","blur","change","error","focus","load","reset","resize","scroll","select","submit","unload"];
-return _284.include(type);
-},isMouseEvent:function(type){
-var _285=["click","mousedown","mousemove","mouseout","mouseover","mouseup"];
-return _285.include(type);
-},fireEvent:function(_286,type){
-_286=$(_286);
-if(document.createEvent){
-if(Event.isHTMLEvent(type)){
-var _287=document.createEvent("HTMLEvents");
-_287.initEvent(type,true,true);
-}else{
-if(Event.isMouseEvent(type)){
-var _287=document.createEvent("MouseEvents");
-_287.initMouseEvent(type,true,true,document.defaultView,1,0,0,0,0,false,false,false,false,0,null);
-}else{
-if(Logger){
-Logger.error("undefined event",type);
-}
-return;
}
+});
+Form.Observer = Class.create();
+Form.Observer.prototype = Object.extend(new Abstract.TimedObserver(), {
+getValue: function() {
+return Form.serialize(this.element);
}
-_286.dispatchEvent(_287);
-}else{
-if(_286.fireEvent){
-_286.fireEvent("on"+type);
-_286[type]();
-}else{
-_286[type]();
-}
-}
-}});
-var Position={includeScrollOffsets:false,prepare:function(){
-this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;
-this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;
-},realOffset:function(_288){
-var _289=0,valueL=0;
-do{
-_289+=_288.scrollTop||0;
-valueL+=_288.scrollLeft||0;
-_288=_288.parentNode;
-}while(_288);
-return [valueL,_289];
-},cumulativeOffset:function(_290){
-var _291=0,valueL=0;
-do{
-_291+=_290.offsetTop||0;
-valueL+=_290.offsetLeft||0;
-_290=_290.offsetParent;
-}while(_290);
-return [valueL,_291];
-},positionedOffset:function(_292){
-var _293=0,valueL=0;
-do{
-_293+=_292.offsetTop||0;
-valueL+=_292.offsetLeft||0;
-_292=_292.offsetParent;
-if(_292){
-p=Element.getStyle(_292,"position");
-if(p=="relative"||p=="absolute"){
+});
+Abstract.EventObserver = function() {}
+Abstract.EventObserver.prototype = {
+initialize: function(element, callback) {
+this.element= $(element);
+this.callback = callback;
+this.lastValue = this.getValue();
+if (this.element.tagName.toLowerCase() == 'form')
+this.registerFormCallbacks();
+else
+this.registerCallback(this.element);
+},
+onElementEvent: function() {
+var value = this.getValue();
+if (this.lastValue != value) {
+this.callback(this.element, value);
+this.lastValue = value;
+}
+},
+registerFormCallbacks: function() {
+var elements = Form.getElements(this.element);
+for (var i = 0; i < elements.length; i++)
+this.registerCallback(elements[i]);
+},
+registerCallback: function(element) {
+if (element.type) {
+switch (element.type.toLowerCase()) {
+case 'checkbox':
+case 'radio':
+Event.observe(element, 'click', this.onElementEvent.bind(this));
break;
-}
-}
-}while(_292);
-return [valueL,_293];
-},offsetParent:function(_294){
-if(_294.offsetParent){
-return _294.offsetParent;
-}
-if(_294==document.body){
-return _294;
-}
-while((_294=_294.parentNode)&&_294!=document.body){
-if(Element.getStyle(_294,"position")!="static"){
-return _294;
-}
-}
-return document.body;
-},within:function(_295,x,y){
-if(this.includeScrollOffsets){
-return this.withinIncludingScrolloffsets(_295,x,y);
-}
-this.xcomp=x;
-this.ycomp=y;
-this.offset=this.cumulativeOffset(_295);
-return (y>=this.offset[1]&&y<this.offset[1]+_295.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+_295.offsetWidth);
-},withinIncludingScrolloffsets:function(_297,x,y){
-var _298=this.realOffset(_297);
-this.xcomp=x+_298[0]-this.deltaX;
-this.ycomp=y+_298[1]-this.deltaY;
-this.offset=this.cumulativeOffset(_297);
-return (this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+_297.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+_297.offsetWidth);
-},overlap:function(mode,_300){
-if(!mode){
-return 0;
-}
-if(mode=="vertical"){
-return ((this.offset[1]+_300.offsetHeight)-this.ycomp)/_300.offsetHeight;
-}
-if(mode=="horizontal"){
-return ((this.offset[0]+_300.offsetWidth)-this.xcomp)/_300.offsetWidth;
-}
-},clone:function(_301,_302){
-_301=$(_301);
-_302=$(_302);
-_302.style.position="absolute";
-var _303=this.cumulativeOffset(_301);
-_302.style.top=_303[1]+"px";
-_302.style.left=_303[0]+"px";
-_302.style.width=_301.offsetWidth+"px";
-_302.style.height=_301.offsetHeight+"px";
-},page:function(_304){
-var _305=0,valueL=0;
-var _306=_304;
-do{
-_305+=_306.offsetTop||0;
-valueL+=_306.offsetLeft||0;
-if(_306.offsetParent==document.body){
-if(Element.getStyle(_306,"position")=="absolute"){
+case 'password':
+case 'text':
+case 'textarea':
+case 'select-one':
+case 'select-multiple':
+Event.observe(element, 'change', this.onElementEvent.bind(this));
break;
}
}
-}while(_306=_306.offsetParent);
-_306=_304;
-do{
-_305-=_306.scrollTop||0;
-valueL-=_306.scrollLeft||0;
-}while(_306=_306.parentNode);
-return [valueL,_305];
-},clone:function(_307,_308){
-var _309=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});
-_307=$(_307);
-var p=Position.page(_307);
-_308=$(_308);
-var _310=[0,0];
-var _311=null;
-if(Element.getStyle(_308,"position")=="absolute"){
-_311=Position.offsetParent(_308);
-_310=Position.page(_311);
-}
-if(_311==document.body){
-_310[0]-=document.body.offsetLeft;
-_310[1]-=document.body.offsetTop;
-}
-if(_309.setLeft){
-_308.style.left=(p[0]-_310[0]+_309.offsetLeft)+"px";
-}
-if(_309.setTop){
-_308.style.top=(p[1]-_310[1]+_309.offsetTop)+"px";
-}
-if(_309.setWidth){
-_308.style.width=_307.offsetWidth+"px";
-}
-if(_309.setHeight){
-_308.style.height=_307.offsetHeight+"px";
-}
-},absolutize:function(_312){
-_312=$(_312);
-if(_312.style.position=="absolute"){
-return;
-}
-Position.prepare();
-var _313=Position.positionedOffset(_312);
-var top=_313[1];
-var left=_313[0];
-var _315=_312.clientWidth;
-var _316=_312.clientHeight;
-_312._originalLeft=left-parseFloat(_312.style.left||0);
-_312._originalTop=top-parseFloat(_312.style.top||0);
-_312._originalWidth=_312.style.width;
-_312._originalHeight=_312.style.height;
-_312.style.position="absolute";
-_312.style.top=top+"px";
-_312.style.left=left+"px";
-_312.style.width=_315+"px";
-_312.style.height=_316+"px";
-},relativize:function(_317){
-_317=$(_317);
-if(_317.style.position=="relative"){
-return;
-}
-Position.prepare();
-_317.style.position="relative";
-var top=parseFloat(_317.style.top||0)-(_317._originalTop||0);
-var left=parseFloat(_317.style.left||0)-(_317._originalLeft||0);
-_317.style.top=top+"px";
-_317.style.left=left+"px";
-_317.style.height=_317._originalHeight;
-_317.style.width=_317._originalWidth;
-}};
-if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){
-Position.cumulativeOffset=function(_318){
-var _319=0,valueL=0;
-do{
-_319+=_318.offsetTop||0;
-valueL+=_318.offsetLeft||0;
-if(_318.offsetParent==document.body){
-if(Element.getStyle(_318,"position")=="absolute"){
-break;
-}
}
-_318=_318.offsetParent;
-}while(_318);
-return [valueL,_319];
-};
}
-var Builder={NODEMAP:{AREA:"map",CAPTION:"table",COL:"table",COLGROUP:"table",LEGEND:"fieldset",OPTGROUP:"select",OPTION:"select",PARAM:"object",TBODY:"table",TD:"table",TFOOT:"table",TH:"table",THEAD:"table",TR:"table"},node:function(_320){
-_320=_320.toUpperCase();
-var _321=this.NODEMAP[_320]||"div";
-var _322=document.createElement(_321);
-try{
-_322.innerHTML="<"+_320+"></"+_320+">";
+Form.Element.EventObserver = Class.create();
+Form.Element.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+getValue: function() {
+return Form.Element.getValue(this.element);
}
-catch(e){
+});
+Form.EventObserver = Class.create();
+Form.EventObserver.prototype = Object.extend(new Abstract.EventObserver(), {
+getValue: function() {
+return Form.serialize(this.element);
}
-var _323=_322.firstChild||null;
-if(_323&&(_323.tagName!=_320)){
-_323=_323.getElementsByTagName(_320)[0];
+});
+if (!window.Event) {
+var Event = new Object();
+}
+Object.extend(Event, {
+KEY_BACKSPACE: 8,
+KEY_TAB: 9,
+KEY_RETURN: 13,
+KEY_ESC:27,
+KEY_LEFT: 37,
+KEY_UP: 38,
+KEY_RIGHT:39,
+KEY_DOWN: 40,
+KEY_DELETE: 46,
+element: function(event) {
+return event.target || event.srcElement;
+},
+isLeftClick: function(event) {
+return (((event.which) && (event.which == 1)) ||
+((event.button) && (event.button == 1)));
+},
+pointerX: function(event) {
+return event.pageX || (event.clientX +
+(document.documentElement.scrollLeft || document.body.scrollLeft));
+},
+pointerY: function(event) {
+return event.pageY || (event.clientY +
+(document.documentElement.scrollTop || document.body.scrollTop));
+},
+stop: function(event) {
+if (event.preventDefault) {
+event.preventDefault();
+event.stopPropagation();
+} else {
+event.returnValue = false;
+event.cancelBubble = true;
+}
+},
+findElement: function(event, tagName) {
+var element = Event.element(event);
+while (element.parentNode && (!element.tagName ||
+(element.tagName.toUpperCase() != tagName.toUpperCase())))
+element = element.parentNode;
+return element;
+},
+observers: false,
+_observeAndCache: function(element, name, observer, useCapture) {
+if (!this.observers) this.observers = [];
+if (element.addEventListener) {
+this.observers.push([element, name, observer, useCapture]);
+element.addEventListener(name, observer, useCapture);
+} else if (element.attachEvent) {
+this.observers.push([element, name, observer, useCapture]);
+element.attachEvent('on' + name, observer);
+}
+},
+unloadCache: function() {
+if (!Event.observers) return;
+for (var i = 0; i < Event.observers.length; i++) {
+Event.stopObserving.apply(this, Event.observers[i]);
+Event.observers[i][0] = null;
+}
+Event.observers = false;
+},
+observe: function(element, name, observer, useCapture) {
+var element = $(element);
+useCapture = useCapture || false;
+if (name == 'keypress' &&
+(navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+|| element.attachEvent))
+name = 'keydown';
+this._observeAndCache(element, name, observer, useCapture);
+},
+stopObserving: function(element, name, observer, useCapture) {
+var element = $(element);
+useCapture = useCapture || false;
+if (name == 'keypress' &&
+(navigator.appVersion.match(/Konqueror|Safari|KHTML/)
+|| element.detachEvent))
+name = 'keydown';
+if (element.removeEventListener) {
+element.removeEventListener(name, observer, useCapture);
+} else if (element.detachEvent) {
+element.detachEvent('on' + name, observer);
}
-if(!_323){
-_323=document.createElement(_320);
}
-if(!_323){
+});
+if (navigator.appVersion.match(/\bMSIE\b/))
+Event.observe(window, 'unload', Event.unloadCache, false);
+Object.extend(Event,
+{
+OnLoad : function (fn)
+{
+var w = document.addEventListener &&
+!window.addEventListener ? document : window;
+Event.observe(w,'load',fn);
+},
+keyCode : function(e)
+{
+ return e.keyCode != null ? e.keyCode : e.charCode
+},
+isHTMLEvent : function(type)
+{
+var events = ['abort', 'blur', 'change', 'error', 'focus',
+'load', 'reset', 'resize', 'scroll', 'select',
+'submit', 'unload'];
+return events.include(type);
+},
+isMouseEvent : function(type)
+{
+var events = ['click', 'mousedown', 'mousemove', 'mouseout',
+'mouseover', 'mouseup'];
+return events.include(type);
+},
+fireEvent : function(element,type)
+{
+element = $(element);
+if(document.createEvent)
+{
+if(Event.isHTMLEvent(type))
+{
+var event = document.createEvent('HTMLEvents');
+event.initEvent(type, true, true);
+}
+else if(Event.isMouseEvent(type))
+{
+var event = document.createEvent('MouseEvents');
+event.initMouseEvent(type,true,true,
+document.defaultView, 1, 0, 0, 0, 0, false,
+false, false, false, 0, null);
+}
+else
+{
+if(Logger)
+Logger.error("undefined event", type);
return;
}
-if(arguments[1]){
-if(this._isStringOrNumber(arguments[1])||(arguments[1] instanceof Array)){
-this._children(_323,arguments[1]);
-}else{
-var _324=this._attributes(arguments[1]);
-if(_324.length){
-try{
-_322.innerHTML="<"+_320+" "+_324+"></"+_320+">";
-}
-catch(e){
-}
-_323=_322.firstChild||null;
-if(!_323){
-_323=document.createElement(_320);
-for(attr in arguments[1]){
-_323[attr=="class"?"className":attr]=arguments[1][attr];
+element.dispatchEvent(event);
}
+else if(element.fireEvent)
+{
+element.fireEvent('on'+type);
+element[type]();
}
-if(_323.tagName!=_320){
-_323=_322.getElementsByTagName(_320)[0];
+else
+element[type]();
}
+});
+var Position = {
+ includeScrollOffsets: false,
+prepare: function() {
+this.deltaX =window.pageXOffset
+|| document.documentElement.scrollLeft
+|| document.body.scrollLeft
+|| 0;
+this.deltaY =window.pageYOffset
+|| document.documentElement.scrollTop
+|| document.body.scrollTop
+|| 0;
+},
+realOffset: function(element) {
+var valueT = 0, valueL = 0;
+do {
+valueT += element.scrollTop|| 0;
+valueL += element.scrollLeft || 0;
+element = element.parentNode;
+} while (element);
+return [valueL, valueT];
+},
+cumulativeOffset: function(element) {
+var valueT = 0, valueL = 0;
+do {
+valueT += element.offsetTop|| 0;
+valueL += element.offsetLeft || 0;
+element = element.offsetParent;
+} while (element);
+return [valueL, valueT];
+},
+positionedOffset: function(element) {
+var valueT = 0, valueL = 0;
+do {
+valueT += element.offsetTop|| 0;
+valueL += element.offsetLeft || 0;
+element = element.offsetParent;
+if (element) {
+p = Element.getStyle(element, 'position');
+if (p == 'relative' || p == 'absolute') break;
+}
+} while (element);
+return [valueL, valueT];
+},
+offsetParent: function(element) {
+if (element.offsetParent) return element.offsetParent;
+if (element == document.body) return element;
+while ((element = element.parentNode) && element != document.body)
+if (Element.getStyle(element, 'position') != 'static')
+return element;
+return document.body;
+},
+within: function(element, x, y) {
+if (this.includeScrollOffsets)
+return this.withinIncludingScrolloffsets(element, x, y);
+this.xcomp = x;
+this.ycomp = y;
+this.offset = this.cumulativeOffset(element);
+return (y >= this.offset[1] &&
+y <this.offset[1] + element.offsetHeight &&
+x >= this.offset[0] &&
+x <this.offset[0] + element.offsetWidth);
+},
+withinIncludingScrolloffsets: function(element, x, y) {
+var offsetcache = this.realOffset(element);
+this.xcomp = x + offsetcache[0] - this.deltaX;
+this.ycomp = y + offsetcache[1] - this.deltaY;
+this.offset = this.cumulativeOffset(element);
+return (this.ycomp >= this.offset[1] &&
+this.ycomp <this.offset[1] + element.offsetHeight &&
+this.xcomp >= this.offset[0] &&
+this.xcomp <this.offset[0] + element.offsetWidth);
+},
+overlap: function(mode, element) {
+if (!mode) return 0;
+if (mode == 'vertical')
+return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
+element.offsetHeight;
+if (mode == 'horizontal')
+return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
+element.offsetWidth;
+},
+clone: function(source, target) {
+source = $(source);
+target = $(target);
+target.style.position = 'absolute';
+var offsets = this.cumulativeOffset(source);
+target.style.top= offsets[1] + 'px';
+target.style.left = offsets[0] + 'px';
+target.style.width= source.offsetWidth + 'px';
+target.style.height = source.offsetHeight + 'px';
+},
+page: function(forElement) {
+var valueT = 0, valueL = 0;
+var element = forElement;
+do {
+valueT += element.offsetTop|| 0;
+valueL += element.offsetLeft || 0;
+if (element.offsetParent==document.body)
+if (Element.getStyle(element,'position')=='absolute') break;
+} while (element = element.offsetParent);
+element = forElement;
+do {
+valueT -= element.scrollTop|| 0;
+valueL -= element.scrollLeft || 0;
+} while (element = element.parentNode);
+return [valueL, valueT];
+},
+clone: function(source, target) {
+var options = Object.extend({
+setLeft:true,
+setTop: true,
+setWidth: true,
+setHeight:true,
+offsetTop:0,
+offsetLeft: 0
+}, arguments[2] || {})
+source = $(source);
+var p = Position.page(source);
+target = $(target);
+var delta = [0, 0];
+var parent = null;
+if (Element.getStyle(target,'position') == 'absolute') {
+parent = Position.offsetParent(target);
+delta = Position.page(parent);
+}
+if (parent == document.body) {
+delta[0] -= document.body.offsetLeft;
+delta[1] -= document.body.offsetTop;
+}
+if(options.setLeft) target.style.left= (p[0] - delta[0] + options.offsetLeft) + 'px';
+if(options.setTop)target.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';
+if(options.setWidth)target.style.width = source.offsetWidth + 'px';
+if(options.setHeight) target.style.height = source.offsetHeight + 'px';
+},
+absolutize: function(element) {
+element = $(element);
+if (element.style.position == 'absolute') return;
+Position.prepare();
+var offsets = Position.positionedOffset(element);
+var top = offsets[1];
+var left= offsets[0];
+var width = element.clientWidth;
+var height= element.clientHeight;
+element._originalLeft = left - parseFloat(element.style.left|| 0);
+element._originalTop= top- parseFloat(element.style.top || 0);
+element._originalWidth= element.style.width;
+element._originalHeight = element.style.height;
+element.style.position = 'absolute';
+element.style.top= top + 'px';;
+element.style.left = left + 'px';;
+element.style.width= width + 'px';;
+element.style.height = height + 'px';;
+},
+relativize: function(element) {
+element = $(element);
+if (element.style.position == 'relative') return;
+Position.prepare();
+element.style.position = 'relative';
+var top= parseFloat(element.style.top|| 0) - (element._originalTop || 0);
+var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);
+element.style.top= top + 'px';
+element.style.left = left + 'px';
+element.style.height = element._originalHeight;
+element.style.width= element._originalWidth;
+}
+}
+if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) {
+Position.cumulativeOffset = function(element) {
+var valueT = 0, valueL = 0;
+do {
+valueT += element.offsetTop|| 0;
+valueL += element.offsetLeft || 0;
+if (element.offsetParent == document.body)
+if (Element.getStyle(element, 'position') == 'absolute') break;
+element = element.offsetParent;
+} while (element);
+return [valueL, valueT];
+}
+}
+var Selector = Class.create();
+Selector.prototype = {
+initialize: function(expression) {
+this.params = {classNames: []};
+this.expression = expression.toString().strip();
+this.parseExpression();
+this.compileMatcher();
+},
+parseExpression: function() {
+function abort(message) { throw 'Parse error in selector: ' + message; }
+if (this.expression == '')abort('empty expression');
+var params = this.params, expr = this.expression, match, modifier, clause, rest;
+while (match = expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)) {
+params.attributes = params.attributes || [];
+params.attributes.push({name: match[2], operator: match[3], value: match[4] || match[5] || ''});
+expr = match[1];
+}
+if (expr == '*') return this.params.wildcard = true;
+while (match = expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)) {
+modifier = match[1], clause = match[2], rest = match[3];
+switch (modifier) {
+case '#': params.id = clause; break;
+case '.': params.classNames.push(clause); break;
+case '':
+case undefined: params.tagName = clause.toUpperCase(); break;
+default:abort(expr.inspect());
+}
+expr = rest;
+}
+if (expr.length > 0) abort(expr.inspect());
+},
+buildMatchExpression: function() {
+var params = this.params, conditions = [], clause;
+if (params.wildcard)
+conditions.push('true');
+if (clause = params.id)
+conditions.push('element.id == ' + clause.inspect());
+if (clause = params.tagName)
+conditions.push('element.tagName.toUpperCase() == ' + clause.inspect());
+if ((clause = params.classNames).length > 0)
+for (var i = 0; i < clause.length; i++)
+conditions.push('Element.hasClassName(element, ' + clause[i].inspect() + ')');
+if (clause = params.attributes) {
+clause.each(function(attribute) {
+var value = 'element.getAttribute(' + attribute.name.inspect() + ')';
+var splitValueBy = function(delimiter) {
+return value + ' && ' + value + '.split(' + delimiter.inspect() + ')';
+}
+switch (attribute.operator) {
+case '=': conditions.push(value + ' == ' + attribute.value.inspect()); break;
+case '~=':conditions.push(splitValueBy(' ') + '.include(' + attribute.value.inspect() + ')'); break;
+case '|=':conditions.push(
+splitValueBy('-') + '.first().toUpperCase() == ' + attribute.value.toUpperCase().inspect()
+); break;
+case '!=':conditions.push(value + ' != ' + attribute.value.inspect()); break;
+case '':
+case undefined: conditions.push(value + ' != null'); break;
+default:throw 'Unknown operator ' + attribute.operator + ' in selector';
}
+});
}
-}
-if(arguments[2]){
-this._children(_323,arguments[2]);
-}
-return _323;
-},_text:function(text){
-return document.createTextNode(text);
-},_attributes:function(_326){
-var _327=[];
-for(attribute in _326){
-_327.push((attribute=="className"?"class":attribute)+"=\""+_326[attribute].toString().escapeHTML()+"\"");
-}
-return _327.join(" ");
-},_children:function(_328,_329){
-if(typeof _329=="object"){
-_329.flatten().each(function(e){
-if(typeof e=="object"){
-_328.appendChild(e);
-}else{
-if(Builder._isStringOrNumber(e)){
-_328.appendChild(Builder._text(e));
-}
-}
+return conditions.join(' && ');
+},
+compileMatcher: function() {
+this.match = new Function('element', 'if (!element.tagName) return false; \
+return ' + this.buildMatchExpression());
+},
+findElements: function(scope) {
+var element;
+if (element = $(this.params.id))
+if (this.match(element))
+if (!scope || Element.childOf(element, scope))
+return [element];
+scope = (scope || document).getElementsByTagName(this.params.tagName || '*');
+var results = [];
+for (var i = 0; i < scope.length; i++)
+if (this.match(element = scope[i]))
+results.push(Element.extend(element));
+return results;
+},
+toString: function() {
+return this.expression;
+}
+}
+function $$() {
+return $A(arguments).map(function(expression) {
+return expression.strip().split(/\s+/).inject([null], function(results, expr) {
+var selector = new Selector(expr);
+return results.map(selector.findElements.bind(selector)).flatten();
+});
+}).flatten();
+}
+var Builder = {
+NODEMAP: {
+AREA: 'map',
+CAPTION: 'table',
+COL: 'table',
+COLGROUP: 'table',
+LEGEND: 'fieldset',
+OPTGROUP: 'select',
+OPTION: 'select',
+PARAM: 'object',
+TBODY: 'table',
+TD: 'table',
+TFOOT: 'table',
+TH: 'table',
+THEAD: 'table',
+TR: 'table'
+},
+node: function(elementName) {
+elementName = elementName.toUpperCase();
+var parentTag = this.NODEMAP[elementName] || 'div';
+var parentElement = document.createElement(parentTag);
+try {parentElement.innerHTML = "<" + elementName + "></" + elementName + ">";
+} catch(e) {}
+var element = parentElement.firstChild || null;
+if(element && (element.tagName != elementName))
+element = element.getElementsByTagName(elementName)[0];
+if(!element) element = document.createElement(elementName);
+if(!element) return;
+if(arguments[1])
+if(this._isStringOrNumber(arguments[1]) ||
+(arguments[1] instanceof Array)) {
+this._children(element, arguments[1]);
+} else {
+var attrs = this._attributes(arguments[1]);
+if(attrs.length) {
+try {parentElement.innerHTML = "<" +elementName + " " +
+attrs + "></" + elementName + ">";
+} catch(e) {}
+element = parentElement.firstChild || null;
+ if(!element) {
+element = document.createElement(elementName);
+for(attr in arguments[1])
+element[attr == 'class' ? 'className' : attr] = arguments[1][attr];
+}
+if(element.tagName != elementName)
+element = parentElement.getElementsByTagName(elementName)[0];
+}
+}
+if(arguments[2])
+this._children(element, arguments[2]);
+return element;
+},
+_text: function(text) {
+ return document.createTextNode(text);
+},
+_attributes: function(attributes) {
+var attrs = [];
+for(attribute in attributes)
+attrs.push((attribute=='className' ? 'class' : attribute) +
+'="' + attributes[attribute].toString().escapeHTML() + '"');
+return attrs.join(" ");
+},
+_children: function(element, children) {
+if(typeof children=='object') {children.flatten().each( function(e) {
+if(typeof e=='object')
+element.appendChild(e)
+else
+if(Builder._isStringOrNumber(e))
+element.appendChild(Builder._text(e));
});
-}else{
-if(Builder._isStringOrNumber(_329)){
-_328.appendChild(Builder._text(_329));
-}
-}
-},_isStringOrNumber:function(_330){
-return (typeof _330=="string"||typeof _330=="number");
-}};
-Object.extend(Builder,{exportTags:function(){
-var tags=["BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG","CAPTION"];
-tags.each(function(tag){
-window[tag]=function(){
+} else
+if(Builder._isStringOrNumber(children))
+ element.appendChild(Builder._text(children));
+},
+_isStringOrNumber: function(param) {
+return(typeof param=='string' || typeof param=='number');
+}
+}
+Object.extend(Builder,
+{
+exportTags:function()
+{
+var tags=["BUTTON","TT","PRE","H1","H2","H3","BR","CANVAS","HR","LABEL","TEXTAREA","FORM","STRONG","SELECT","OPTION","OPTGROUP","LEGEND","FIELDSET","P","UL","OL","LI","TD","TR","THEAD","TBODY","TFOOT","TABLE","TH","INPUT","SPAN","A","DIV","IMG", "CAPTION"];
+tags.each(function(tag)
+{
+window[tag]=function()
+{
var args=$A(arguments);
-if(args.length==0){
+if(args.length==0)
return Builder.node(tag,null);
-}
-if(args.length==1){
+if(args.length==1)
return Builder.node(tag,args[0]);
-}
-if(args.length>1){
+if(args.length>1)
return Builder.node(tag,args.shift(),args);
-}
};
});
-}});
+}
+});
Builder.exportTags();
-Object.extend(Date.prototype,{SimpleFormat:function(_334,data){
-data=data||{};
-var bits=new Array();
-bits["d"]=this.getDate();
-bits["dd"]=String(this.getDate()).zerofill(2);
-bits["M"]=this.getMonth()+1;
-bits["MM"]=String(this.getMonth()+1).zerofill(2);
-if(data.AbbreviatedMonthNames){
-bits["MMM"]=data.AbbreviatedMonthNames[this.getMonth()];
-}
-if(data.MonthNames){
-bits["MMMM"]=data.MonthNames[this.getMonth()];
-}
-var _337=""+this.getFullYear();
-_337=(_337.length==2)?"19"+_337:_337;
-bits["yyyy"]=_337;
-bits["yy"]=bits["yyyy"].toString().substr(2,2);
-var frm=new String(_334);
-for(var sect in bits){
-var reg=new RegExp("\\b"+sect+"\\b","g");
-frm=frm.replace(reg,bits[sect]);
+Object.extend(Date.prototype,
+{
+SimpleFormat: function(format, data)
+{
+data = data || {};
+var bits = new Array();
+bits['d'] = this.getDate();
+bits['dd'] = String(this.getDate()).zerofill(2);
+bits['M'] = this.getMonth()+1;
+bits['MM'] = String(this.getMonth()+1).zerofill(2);
+if(data.AbbreviatedMonthNames)
+bits['MMM'] = data.AbbreviatedMonthNames[this.getMonth()];
+if(data.MonthNames)
+bits['MMMM'] = data.MonthNames[this.getMonth()];
+var yearStr = "" + this.getFullYear();
+yearStr = (yearStr.length == 2) ? '19' + yearStr: yearStr;
+bits['yyyy'] = yearStr;
+bits['yy'] = bits['yyyy'].toString().substr(2,2);
+var frm = new String(format);
+for (var sect in bits)
+{
+var reg = new RegExp("\\b"+sect+"\\b" ,"g");
+frm = frm.replace(reg, bits[sect]);
}
return frm;
-},toISODate:function(){
-var y=this.getFullYear();
-var m=String(this.getMonth()+1).zerofill(2);
-var d=String(this.getDate()).zerofill(2);
-return String(y)+String(m)+String(d);
-}});
-Object.extend(Date,{SimpleParse:function(_341,_342){
-val=String(_341);
-_342=String(_342);
-if(val.length<=0){
-return null;
-}
-if(_342.length<=0){
-return new Date(_341);
-}
-var _343=function(val){
-var _345="1234567890";
-for(var i=0;i<val.length;i++){
-if(_345.indexOf(val.charAt(i))==-1){
-return false;
+},
+toISODate : function()
+{
+var y = this.getFullYear();
+var m = String(this.getMonth() + 1).zerofill(2);
+var d = String(this.getDate()).zerofill(2);
+return String(y) + String(m) + String(d);
}
+});
+Object.extend(Date,
+{
+SimpleParse: function(value, format)
+{
+val=String(value);
+format=String(format);
+if(val.length <= 0) return null;
+if(format.length <= 0) return new Date(value);
+var isInteger = function (val)
+{
+var digits="1234567890";
+for (var i=0; i < val.length; i++)
+{
+if (digits.indexOf(val.charAt(i))==-1) { return false; }
}
return true;
};
-var _346=function(str,i,_348,_349){
-for(var x=_349;x>=_348;x--){
-var _350=str.substring(i,i+x);
-if(_350.length<_348){
-return null;
-}
-if(_343(_350)){
-return _350;
-}
+var getInt = function(str,i,minlength,maxlength)
+{
+for (var x=maxlength; x>=minlength; x--)
+{
+var token=str.substring(i,i+x);
+if (token.length < minlength) { return null; }
+if (isInteger(token)) { return token; }
}
return null;
};
-var _351=0;
-var _352=0;
+var i_val=0;
+var i_format=0;
var c="";
-var _354="";
-var _355="";
+var token="";
+var token2="";
var x,y;
var now=new Date();
var year=now.getFullYear();
-var _358=now.getMonth()+1;
+var month=now.getMonth()+1;
var date=1;
-while(_352<_342.length){
-c=_342.charAt(_352);
-_354="";
-while((_342.charAt(_352)==c)&&(_352<_342.length)){
-_354+=_342.charAt(_352++);
-}
-if(_354=="yyyy"||_354=="yy"||_354=="y"){
-if(_354=="yyyy"){
-x=4;
-y=4;
-}
-if(_354=="yy"){
-x=2;
-y=2;
-}
-if(_354=="y"){
-x=2;
-y=4;
-}
-year=_346(val,_351,x,y);
-if(year==null){
-return null;
-}
-_351+=year.length;
-if(year.length==2){
-if(year>70){
-year=1900+(year-0);
-}else{
-year=2000+(year-0);
-}
-}
-}else{
-if(_354=="MM"||_354=="M"){
-_358=_346(val,_351,_354.length,2);
-if(_358==null||(_358<1)||(_358>12)){
-return null;
-}
-_351+=_358.length;
-}else{
-if(_354=="dd"||_354=="d"){
-date=_346(val,_351,_354.length,2);
-if(date==null||(date<1)||(date>31)){
-return null;
-}
-_351+=date.length;
-}else{
-if(val.substring(_351,_351+_354.length)!=_354){
-return null;
-}else{
-_351+=_354.length;
-}
-}
+while (i_format < format.length)
+{
+c=format.charAt(i_format);
+token="";
+while ((format.charAt(i_format)==c) && (i_format < format.length))
+{
+token += format.charAt(i_format++);
+}
+if (token=="yyyy" || token=="yy" || token=="y")
+{
+if (token=="yyyy") { x=4;y=4; }
+if (token=="yy") { x=2;y=2; }
+if (token=="y"){ x=2;y=4; }
+year=getInt(val,i_val,x,y);
+if (year==null) { return null; }
+i_val += year.length;
+if (year.length==2)
+{
+if (year > 70) { year=1900+(year-0); }
+else { year=2000+(year-0); }
+}
+}
+else if (token=="MM"||token=="M")
+{
+month=getInt(val,i_val,token.length,2);
+if(month==null||(month<1)||(month>12)){return null;}
+i_val+=month.length;
+}
+else if (token=="dd"||token=="d")
+{
+date=getInt(val,i_val,token.length,2);
+if(date==null||(date<1)||(date>31)){return null;}
+i_val+=date.length;
+}
+else
+{
+if (val.substring(i_val,i_val+token.length)!=token) {return null;}
+else {i_val+=token.length;}
+}
+}
+if (i_val != val.length) { return null; }
+if (month==2)
+{
+if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) {
+if (date > 29){ return null; }
+}
+else { if (date > 28) { return null; } }
+}
+if ((month==4)||(month==6)||(month==9)||(month==11))
+{
+if (date > 30) { return null; }
+}
+var newdate=new Date(year,month-1,date, 0, 0, 0);
+return newdate;
}
-}
-}
-if(_351!=val.length){
-return null;
-}
-if(_358==2){
-if(((year%4==0)&&(year%100!=0))||(year%400==0)){
-if(date>29){
-return null;
-}
-}else{
-if(date>28){
-return null;
-}
-}
-}
-if((_358==4)||(_358==6)||(_358==9)||(_358==11)){
-if(date>30){
-return null;
-}
-}
-var _360=new Date(year,_358-1,date,0,0,0);
-return _360;
-}});
-var Prado={Version:"3.0a",Browser:function(){
-var info={Version:"1.0"};
-var _362=parseInt(navigator.appVersion);
-info.nver=_362;
-info.ver=navigator.appVersion;
-info.agent=navigator.userAgent;
-info.dom=document.getElementById?1:0;
-info.opera=window.opera?1:0;
-info.ie5=(info.ver.indexOf("MSIE 5")>-1&&info.dom&&!info.opera)?1:0;
-info.ie6=(info.ver.indexOf("MSIE 6")>-1&&info.dom&&!info.opera)?1:0;
-info.ie4=(document.all&&!info.dom&&!info.opera)?1:0;
-info.ie=info.ie4||info.ie5||info.ie6;
-info.mac=info.agent.indexOf("Mac")>-1;
-info.ns6=(info.dom&&parseInt(info.ver)>=5)?1:0;
-info.ie3=(info.ver.indexOf("MSIE")&&(_362<4));
-info.hotjava=(info.agent.toLowerCase().indexOf("hotjava")!=-1)?1:0;
-info.ns4=(document.layers&&!info.dom&&!info.hotjava)?1:0;
-info.bw=(info.ie6||info.ie5||info.ie4||info.ns4||info.ns6||info.opera);
-info.ver3=(info.hotjava||info.ie3);
-info.opera7=((info.agent.toLowerCase().indexOf("opera 7")>-1)||(info.agent.toLowerCase().indexOf("opera/7")>-1));
-info.operaOld=info.opera&&!info.opera7;
+});
+var Prado =
+{
+Version: '3.0a',
+Browser : function()
+{
+var info = { Version : "1.0" };
+var is_major = parseInt( navigator.appVersion );
+info.nver = is_major;
+info.ver = navigator.appVersion;
+info.agent = navigator.userAgent;
+info.dom = document.getElementById ? 1 : 0;
+info.opera = window.opera ? 1 : 0;
+info.ie5 = ( info.ver.indexOf( "MSIE 5" ) > -1 && info.dom && !info.opera ) ? 1 : 0;
+info.ie6 = ( info.ver.indexOf( "MSIE 6" ) > -1 && info.dom && !info.opera ) ? 1 : 0;
+info.ie4 = ( document.all && !info.dom && !info.opera ) ? 1 : 0;
+info.ie = info.ie4 || info.ie5 || info.ie6;
+info.mac = info.agent.indexOf( "Mac" ) > -1;
+info.ns6 = ( info.dom && parseInt( info.ver ) >= 5 ) ? 1 : 0;
+info.ie3 = ( info.ver.indexOf( "MSIE" ) && ( is_major < 4 ) );
+info.hotjava = ( info.agent.toLowerCase().indexOf( 'hotjava' ) != -1 ) ? 1 : 0;
+info.ns4 = ( document.layers && !info.dom && !info.hotjava ) ? 1 : 0;
+info.bw = ( info.ie6 || info.ie5 || info.ie4 || info.ns4 || info.ns6 || info.opera );
+info.ver3 = ( info.hotjava || info.ie3 );
+info.opera7 = ( ( info.agent.toLowerCase().indexOf( 'opera 7' ) > -1 ) || ( info.agent.toLowerCase().indexOf( 'opera/7' ) > -1 ) );
+info.operaOld = info.opera && !info.opera7;
return info;
-},ImportCss:function(doc,_364){
-if(Prado.Browser().ie){
-var _365=doc.createStyleSheet(_364);
-}else{
-var elm=doc.createElement("link");
-elm.rel="stylesheet";
-elm.href=_364;
-if(headArr=doc.getElementsByTagName("head")){
+},
+ImportCss : function(doc, css_file)
+{
+if (Prado.Browser().ie)
+var styleSheet = doc.createStyleSheet(css_file);
+else
+{
+var elm = doc.createElement("link");
+elm.rel = "stylesheet";
+elm.href = css_file;
+if (headArr = doc.getElementsByTagName("head"))
headArr[0].appendChild(elm);
}
}
-}};
-Prado.Focus=Class.create();
-Prado.Focus.setFocus=function(id){
-var _368=document.getElementById?document.getElementById(id):document.all[id];
-if(_368&&!Prado.Focus.canFocusOn(_368)){
-_368=Prado.Focus.findTarget(_368);
-}
-if(_368){
-try{
-_368.focus();
-_368.scrollIntoView(false);
-if(window.__smartNav){
-window.__smartNav.ae=_368.id;
-}
-}
-catch(e){
-}
-}
-};
-Prado.Focus.canFocusOn=function(_369){
-if(!_369||!(_369.tagName)){
-return false;
-}
-var _370=_369.tagName.toLowerCase();
-return !_369.disabled&&(!_369.type||_369.type.toLowerCase()!="hidden")&&Prado.Focus.isFocusableTag(_370)&&Prado.Focus.isVisible(_369);
-};
-Prado.Focus.isFocusableTag=function(_371){
-return (_371=="input"||_371=="textarea"||_371=="select"||_371=="button"||_371=="a");
-};
-Prado.Focus.findTarget=function(_372){
-if(!_372||!(_372.tagName)){
-return null;
-}
-var _373=_372.tagName.toLowerCase();
-if(_373=="undefined"){
-return null;
-}
-var _374=_372.childNodes;
-if(_374){
-for(var i=0;i<_374.length;i++){
-try{
-if(Prado.Focus.canFocusOn(_374[i])){
-return _374[i];
-}else{
-var _375=Prado.Focus.findTarget(_374[i]);
-if(_375){
-return _375;
-}
-}
-}
-catch(e){
-}
-}
-}
-return null;
};
-Prado.Focus.isVisible=function(_376){
-var _377=_376;
-while((typeof (_377)!="undefined")&&(_377!=null)){
-if(_377.disabled||(typeof (_377.style)!="undefined"&&((typeof (_377.style.display)!="undefined"&&_377.style.display=="none")||(typeof (_377.style.visibility)!="undefined"&&_377.style.visibility=="hidden")))){
-return false;
-}
-if(typeof (_377.parentNode)!="undefined"&&_377.parentNode!=null&&_377.parentNode!=_377&&_377.parentNode.tagName.toLowerCase()!="body"){
-_377=_377.parentNode;
-}else{
-return true;
-}
-}
-return true;
-};
-Prado.PostBack=function(_378,_379){
-var form=$(_379["FormID"]);
-var _380=true;
-if(_379["CausesValidation"]&&Prado.Validation){
-var _381=true;
-if(_379["ValidationGroup"]){
-_381=Prado.Validation.ValidateValidationGroup(_379["ValidationGroup"]);
-}else{
-_381=Prado.Validation.ValidateNonGroup(form);
-}
-if(!_381){
-return Event.stop(_378);
-}
-}
-if(_379["PostBackUrl"]&&_379["PostBackUrl"].length>0){
-form.action=_379["PostBackUrl"];
-}
-if(_379["TrackFocus"]){
-var _382=$("PRADO_LASTFOCUS");
-if(_382){
-var _383=document.activeElement;
-if(_383){
-_382.value=_383.id;
-}else{
-_382.value=_379["EventTarget"];
-}
-}
-}
-$("PRADO_POSTBACK_TARGET").value=_379["EventTarget"];
-$("PRADO_POSTBACK_PARAMETER").value=_379["EventParameter"];
+Prado.PostBack = function(event,options)
+{
+var form = $(options['FormID']);
+var canSubmit = true;
+if(options['CausesValidation'] && typeof(Prado.Validation) != "undefined")
+{
+if(!Prado.Validation.validate(options['FormID'], options['ValidationGroup']))
+return Event.stop(event);
+}
+if(options['PostBackUrl'] && options['PostBackUrl'].length > 0)
+form.action = options['PostBackUrl'];
+if(options['TrackFocus'])
+{
+var lastFocus = $('PRADO_LASTFOCUS');
+if(lastFocus)
+{
+var active = document.activeElement;
+if(active)
+lastFocus.value = active.id;
+else
+lastFocus.value = options['EventTarget'];
+}
+}
+$('PRADO_POSTBACK_TARGET').value = options['EventTarget'];
+$('PRADO_POSTBACK_PARAMETER').value = options['EventParameter'];
Event.fireEvent(form,"submit");
-if(_379["StopEvent"]){
-Event.stop(_378);
-}
-};
-Prado.Element={setValue:function(_384,_385){
-var el=$(_384);
-if(el&&typeof (el.value)!="undefined"){
-el.value=_385;
-}
-},select:function(_387,_388,_389){
-var el=$(_387);
-var _390=_387.indexOf("[]")>-1;
-if(!el&&!_390){
-return;
-}
-_388=_390?"check"+_388:el.tagName.toLowerCase()+_388;
-var _391=Prado.Element.Selection;
-if(isFunction(_391[_388])){
-_391[_388](_390?_387:el,_389);
-}
-},click:function(_392){
-var el=$(_392);
-if(!el){
-return;
-}
-if(document.createEvent){
-var evt=document.createEvent("HTMLEvents");
-evt.initEvent("click",true,true);
+if(options['StopEvent'])
+Event.stop(event);
+}
+Prado.Element =
+{
+setValue : function(element, value)
+{
+var el = $(element);
+if(el && typeof(el.value) != "undefined")
+el.value = value;
+},
+select : function(element, method, value)
+{
+var el = $(element);
+var isList = element.indexOf('[]') > -1;
+if(!el && !isList) return;
+method = isList ? 'check'+method : el.tagName.toLowerCase()+method;
+var selection = Prado.Element.Selection;
+if(isFunction(selection[method]))
+selection[method](isList ? element : el,value);
+},
+click : function(element)
+{
+var el = $(element);
+if(!el) return;
+if(document.createEvent)
+{
+var evt = document.createEvent('HTMLEvents');
+evt.initEvent('click', true, true);
el.dispatchEvent(evt);
-}else{
-if(el.fireEvent){
-el.fireEvent("onclick");
-if(isFunction(el.onclick)){
-el.onclick();
}
+else if(el.fireEvent)
+{
+el.fireEvent('onclick');
+if(isFunction(el.onclick))
+el.onclick();
}
-}
-},setAttribute:function(_394,_395,_396){
-var el=$(_394);
-if(_395=="disabled"&&_396==false){
-el.removeAttribute(_395);
-}else{
-el.setAttribute(_395,_396);
-}
-},setOptions:function(_397,_398){
-var el=$(_397);
-if(el&&el.tagName.toLowerCase()=="select"){
-while(el.length>0){
+},
+setAttribute : function(element, attribute, value)
+{
+var el = $(element);
+if(attribute == "disabled" && value==false)
+el.removeAttribute(attribute);
+else
+el.setAttribute(attribute, value);
+},
+setOptions : function(element, options)
+{
+var el = $(element);
+if(el && el.tagName.toLowerCase() == "select")
+{
+while(el.length > 0)
el.remove(0);
+for(var i = 0; i<options.length; i++)
+el.options[el.options.length] = new Option(options[i][0],options[i][1]);
+}
+},
+focus : function(element)
+{
+var obj = $(element);
+if(isObject(obj) && isdef(obj.focus))
+setTimeout(function(){ obj.focus(); }, 100);
+return false;
}
-for(var i=0;i<_398.length;i++){
-el.options[el.options.length]=new Option(_398[i][0],_398[i][1]);
-}
-}
-},focus:function(_399){
-var obj=$(_399);
-if(isObject(obj)&&isdef(obj.focus)){
-setTimeout(function(){
-obj.focus();
-},100);
}
-return false;
-}};
-Prado.Element.Selection={inputValue:function(el,_401){
-switch(el.type.toLowerCase()){
-case "checkbox":
-case "radio":
-return el.checked=_401;
-}
-},selectValue:function(el,_402){
-$A(el.options).each(function(_403){
-_403.selected=_403.value==_402;
+Prado.Element.Selection =
+{
+inputValue : function(el, value)
+{
+switch(el.type.toLowerCase())
+{
+case 'checkbox':
+case 'radio':
+return el.checked = value;
+}
+},
+selectValue : function(el, value)
+{
+$A(el.options).each(function(option)
+{
+option.selected = option.value == value;
});
-},selectIndex:function(el,_404){
-if(el.type=="select-one"){
-el.selectedIndex=_404;
-}else{
-for(var i=0;i<el.length;i++){
-if(i==_404){
-el.options[i].selected=true;
-}
-}
-}
-},selectClear:function(el){
-el.selectedIndex=-1;
-},selectAll:function(el){
-$A(el.options).each(function(_405){
-_405.selected=true;
-Logger.warn(_405.value);
+},
+selectIndex : function(el, index)
+{
+if(el.type == 'select-one')
+el.selectedIndex = index;
+else
+{
+for(var i = 0; i<el.length; i++)
+{
+if(i == index)
+el.options[i].selected = true;
+}
+}
+},
+selectClear : function(el)
+{
+el.selectedIndex = -1;
+},
+selectAll : function(el)
+{
+$A(el.options).each(function(option)
+{
+option.selected = true;
+Logger.warn(option.value);
});
-},selectInvert:function(el){
-$A(el.options).each(function(_406){
-_406.selected=!_406.selected;
+},
+selectInvert : function(el)
+{
+$A(el.options).each(function(option)
+{
+option.selected = !option.selected;
});
-},checkValue:function(name,_407){
-$A(document.getElementsByName(name)).each(function(el){
-el.checked=el.value==_407;
+},
+checkValue : function(name, value)
+{
+$A(document.getElementsByName(name)).each(function(el)
+{
+el.checked = el.value == value
});
-},checkIndex:function(name,_408){
-var _409=$A(document.getElementsByName(name));
-for(var i=0;i<_409.length;i++){
-if(i==_408){
-_409[i].checked=true;
-}
-}
-},checkClear:function(name){
-$A(document.getElementsByName(name)).each(function(el){
-el.checked=false;
+},
+checkIndex : function(name, index)
+{
+var elements = $A(document.getElementsByName(name));
+for(var i = 0; i<elements.length; i++)
+{
+if(i == index)
+elements[i].checked = true;
+}
+},
+checkClear : function(name)
+{
+$A(document.getElementsByName(name)).each(function(el)
+{
+el.checked = false;
});
-},checkAll:function(name){
-$A(document.getElementsByName(name)).each(function(el){
-el.checked=true;
+},
+checkAll : function(name)
+{
+$A(document.getElementsByName(name)).each(function(el)
+{
+el.checked = true;
});
-},checkInvert:function(name){
-$A(document.getElementsByName(name)).each(function(el){
-el.checked=!el.checked;
+},
+checkInvert : function(name)
+{
+$A(document.getElementsByName(name)).each(function(el)
+{
+el.checked = !el.checked;
});
-}};
-Object.extend(Prado.Element,{Insert:{After:function(_410,_411){
-new Insertion.After(_410,_411);
-},Before:function(_412,_413){
-new Insertion.Before(_412.innerHTML);
-},Below:function(_414,_415){
-new Insertion.Bottom(_414,_415);
-},Above:function(_416,_417){
-new Insertion.Top(_416,_417);
-}},CssClass:{set:function(_418,_419){
-_418=new Element.ClassNames(_418);
-_418.set(_419);
-}}});
-Prado.WebUI=Class.create();
-Prado.WebUI.PostBackControl=Class.create();
-Object.extend(Prado.WebUI.PostBackControl.prototype,{initialize:function(_420){
-this.element=$(_420["ID"]);
-if(_420["CausesValidation"]&&Prado.Validation){
-Prado.Validation.AddTarget(_420["ID"],_420["ValidationGroup"]);
-}
-if(this.onInit){
-this.onInit(_420);
-}
-}});
-Prado.WebUI.createPostBackComponent=function(_421){
-var _422=Class.create();
-Object.extend(_422.prototype,Prado.WebUI.PostBackControl.prototype);
-if(_421){
-Object.extend(_422.prototype,_421);
-}
-return _422;
+}
+};
+Prado.WebUI = Class.create();
+Prado.WebUI.PostBackControl = Class.create();
+Prado.WebUI.PostBackControl.prototype =
+{
+_elementOnClick : null,
+initialize : function(options)
+{
+this.element = $(options.ID);
+if(this.onInit)
+this.onInit(options);
+},
+onInit : function(options)
+{
+if(typeof(this.element.onclick)=="function")
+{
+this._elementOnClick = this.element.onclick;
+this.element.onclick = null;
+}
+Event.observe(this.element, "click", this.onClick.bindEvent(this,options));
+},
+onClick : function(event, options)
+{
+var src = Event.element(event);
+var doPostBack = true;
+var onclicked = null;
+if(this._elementOnClick)
+{
+var onclicked = this._elementOnClick(event);
+if(typeof(onclicked) == "boolean")
+doPostBack = onclicked;
+}
+if(doPostBack)
+this.onPostBack(event,options);
+if(typeof(onclicked) == "boolean" && !onclicked)
+Event.stop(event);
+},
+onPostBack : function(event, options)
+{
+Prado.PostBack(event,options);
+}
};
-Prado.WebUI.TButton=Prado.WebUI.createPostBackComponent();
-Prado.WebUI.ClickableComponent=Prado.WebUI.createPostBackComponent({_elementOnClick:null,onInit:function(_423){
-if(isFunction(this.element.onclick)){
-this._elementOnClick=this.element.onclick;
-this.element.onclick=null;
-}
-Event.observe(this.element,"click",this.onClick.bindEvent(this,_423));
-},onClick:function(_424,_425){
-var src=Event.element(_424);
-var _427=true;
-var _428=null;
-if(this._elementOnClick){
-var _428=this._elementOnClick(_424);
-if(isBoolean(_428)){
-_427=_428;
-}
-}
-if(_427){
-this.onPostBack(_424,_425);
-}
-if(isBoolean(_428)&&!_428){
-Event.stop(_424);
-}
-},onPostBack:function(_429,_430){
-Prado.PostBack(_429,_430);
-}});
-Prado.WebUI.TLinkButton=Prado.WebUI.ClickableComponent;
-Prado.WebUI.TCheckBox=Prado.WebUI.ClickableComponent;
-Prado.WebUI.TBulletedList=Prado.WebUI.ClickableComponent;
-Prado.WebUI.TImageMap=Prado.WebUI.ClickableComponent;
-Prado.WebUI.TImageButton=Class.create();
-Object.extend(Prado.WebUI.TImageButton.prototype,Prado.WebUI.ClickableComponent.prototype);
-Object.extend(Prado.WebUI.TImageButton.prototype,{hasXYInput:false,onPostBack:function(_431,_432){
-if(!this.hasXYInput){
-this.addXYInput(_431,_432);
-this.hasXYInput=true;
-}
-Prado.PostBack(_431,_432);
-},addXYInput:function(_433,_434){
-var _435=Position.cumulativeOffset(this.element);
-var _436=[_433.clientX,_433.clientY];
-var x=_436[0]-_435[0]+1;
-var y=_436[1]-_435[1]+1;
-var id=_434["EventTarget"];
-var _437=INPUT({type:"hidden",name:id+"_x",value:x});
-var _438=INPUT({type:"hidden",name:id+"_y",value:y});
-this.element.parentNode.appendChild(_437);
-this.element.parentNode.appendChild(_438);
-}});
-Prado.WebUI.TRadioButton=Prado.WebUI.createPostBackComponent(Prado.WebUI.ClickableComponent.prototype);
-Prado.WebUI.TRadioButton.prototype.onRadioButtonInitialize=Prado.WebUI.TRadioButton.prototype.initialize;
-Object.extend(Prado.WebUI.TRadioButton.prototype,{initialize:function(_439){
-this.element=$(_439["ID"]);
-if(!this.element.checked){
-this.onRadioButtonInitialize(_439);
-}
-}});
-Prado.WebUI.TTextBox=Prado.WebUI.createPostBackComponent({onInit:function(_440){
-if(_440["TextMode"]!="MultiLine"){
-Event.observe(this.element,"keydown",this.handleReturnKey.bind(this));
-}
-Event.observe(this.element,"change",Prado.PostBack.bindEvent(this,_440));
-},handleReturnKey:function(e){
-if(Event.keyCode(e)==Event.KEY_RETURN){
-var _441=Event.element(e);
-if(_441){
-Event.fireEvent(_441,"change");
+Prado.WebUI.TButton = Class.extend(Prado.WebUI.PostBackControl);
+Prado.WebUI.TLinkButton = Class.extend(Prado.WebUI.PostBackControl);
+Prado.WebUI.TCheckBox = Class.extend(Prado.WebUI.PostBackControl);
+Prado.WebUI.TBulletedList = Class.extend(Prado.WebUI.PostBackControl);
+Prado.WebUI.TImageMap = Class.extend(Prado.WebUI.PostBackControl);
+Prado.WebUI.TImageButton = Class.extend(Prado.WebUI.PostBackControl);
+Object.extend(Prado.WebUI.TImageButton.prototype,
+{
+hasXYInput : false,
+onPostBack : function(event, options)
+{
+if(!this.hasXYInput)
+{
+this.addXYInput(event,options);
+this.hasXYInput = true;
+}
+Prado.PostBack(event, options);
+},
+addXYInput : function(event,options)
+{
+var imagePos = Position.cumulativeOffset(this.element);
+var clickedPos = [event.clientX, event.clientY];
+var x = clickedPos[0]-imagePos[0]+1;
+var y = clickedPos[1]-imagePos[1]+1;
+var id = options['EventTarget'];
+var x_input = INPUT({type:'hidden',name:id+'_x',value:x});
+var y_input = INPUT({type:'hidden',name:id+'_y',value:y});
+this.element.parentNode.appendChild(x_input);
+this.element.parentNode.appendChild(y_input);
+}
+});
+Prado.WebUI.TRadioButton = Class.extend(Prado.WebUI.PostBackControl);
+Prado.WebUI.TRadioButton.prototype.onRadioButtonInitialize = Prado.WebUI.TRadioButton.prototype.initialize;
+Object.extend(Prado.WebUI.TRadioButton.prototype,
+{
+initialize : function(options)
+{
+this.element = $(options['ID']);
+if(!this.element.checked)
+this.onRadioButtonInitialize(options);
+}
+});
+Prado.WebUI.TTextBox = Class.extend(Prado.WebUI.PostBackControl,
+{
+onInit : function(options)
+{
+if(options['TextMode'] != 'MultiLine')
+Event.observe(this.element, "keydown", this.handleReturnKey.bind(this));
+Event.observe(this.element, "change", Prado.PostBack.bindEvent(this,options));
+},
+handleReturnKey : function(e)
+{
+ if(Event.keyCode(e) == Event.KEY_RETURN)
+{
+var target = Event.element(e);
+if(target)
+{
+Event.fireEvent(target, "change");
Event.stop(e);
}
}
-}});
-Prado.WebUI.TListControl=Prado.WebUI.createPostBackComponent({onInit:function(_442){
-Event.observe(this.element,"change",Prado.PostBack.bindEvent(this,_442));
-}});
-Prado.WebUI.TListBox=Prado.WebUI.TListControl;
-Prado.WebUI.TDropDownList=Prado.WebUI.TListControl;
-Prado.WebUI.DefaultButton=Class.create();
-Object.extend(Prado.WebUI.DefaultButton.prototype,{initialize:function(_443){
-this.options=_443;
-this._event=this.triggerEvent.bindEvent(this);
-Event.observe(_443["Panel"],"keydown",this._event);
-},triggerEvent:function(ev,_445){
-var _446=Event.keyCode(ev)==Event.KEY_RETURN;
-var _447=Event.element(ev).tagName.toLowerCase()=="textarea";
-if(_446&&!_447){
-var _448=$(this.options["Target"]);
-if(_448){
-this.triggered=true;
-Event.fireEvent(_448,this.options["Event"]);
+}
+});
+Prado.WebUI.TListControl = Class.extend(Prado.WebUI.PostBackControl,
+{
+onInit : function(options)
+{
+Event.observe(this.element, "change", Prado.PostBack.bindEvent(this,options));
+}
+});
+Prado.WebUI.TListBox = Class.extend(Prado.WebUI.TListControl);
+Prado.WebUI.TDropDownList = Class.extend(Prado.WebUI.TListControl);
+Prado.WebUI.DefaultButton = Class.create();
+Prado.WebUI.DefaultButton.prototype =
+{
+initialize : function(options)
+{
+this.options = options;
+this._event = this.triggerEvent.bindEvent(this);
+Event.observe(options['Panel'], 'keydown', this._event);
+},
+triggerEvent : function(ev, target)
+{
+var enterPressed = Event.keyCode(ev) == Event.KEY_RETURN;
+var isTextArea = Event.element(ev).tagName.toLowerCase() == "textarea";
+if(enterPressed && !isTextArea)
+{
+var defaultButton = $(this.options['Target']);
+if(defaultButton)
+{
+this.triggered = true;
+Event.fireEvent(defaultButton, this.options['Event']);
Event.stop(ev);
}
}
-}});
-Prado.WebUI.TTextHighlighter=Class.create();
-Prado.WebUI.TTextHighlighter.prototype={initialize:function(id){
-if(!window.clipboardData){
-return;
}
-var _449={href:"javascript:;//copy code to clipboard",onclick:"Prado.WebUI.TTextHighlighter.copy(this)",onmouseover:"Prado.WebUI.TTextHighlighter.hover(this)",onmouseout:"Prado.WebUI.TTextHighlighter.out(this)"};
-var div=DIV({className:"copycode"},A(_449,"Copy Code"));
+};
+Prado.WebUI.TTextHighlighter=Class.create();
+Prado.WebUI.TTextHighlighter.prototype=
+{
+initialize:function(id)
+{
+if(!window.clipboardData) return;
+var options =
+{
+href : 'javascript:;/'+'/copy code to clipboard',
+onclick : 'Prado.WebUI.TTextHighlighter.copy(this)',
+onmouseover : 'Prado.WebUI.TTextHighlighter.hover(this)',
+onmouseout : 'Prado.WebUI.TTextHighlighter.out(this)'
+}
+var div = DIV({className:'copycode'}, A(options, 'Copy Code'));
document.write(DIV(null,div).innerHTML);
-}};
-Object.extend(Prado.WebUI.TTextHighlighter,{copy:function(obj){
-var _450=obj.parentNode.parentNode.parentNode;
-var text="";
-for(var i=0;i<_450.childNodes.length;i++){
-var node=_450.childNodes[i];
-if(node.innerText){
-text+=node.innerText=="Copy Code"?"":node.innerText;
-}else{
-text+=node.nodeValue;
-}
-}
-if(text.length>0){
-window.clipboardData.setData("Text",text);
-}
-},hover:function(obj){
-obj.parentNode.className="copycode copycode_hover";
-},out:function(obj){
-obj.parentNode.className="copycode";
-}});
-Prado.WebUI.TRatingList=Class.create();
-Prado.WebUI.TRatingList.prototype={selectedIndex:-1,initialize:function(_451){
-this.options=_451;
-this.element=$(_451["ID"]);
-Element.addClassName(this.element,_451.cssClass);
-this.radios=document.getElementsByName(_451.field);
-for(var i=0;i<this.radios.length;i++){
-Event.observe(this.radios[i].parentNode,"mouseover",this.hover.bindEvent(this,i));
-Event.observe(this.radios[i].parentNode,"mouseout",this.recover.bindEvent(this,i));
-Event.observe(this.radios[i].parentNode,"click",this.click.bindEvent(this,i));
-}
-this.caption=CAPTION();
+}
+};
+Object.extend(Prado.WebUI.TTextHighlighter,
+{
+copy : function(obj)
+{
+var parent = obj.parentNode.parentNode.parentNode;
+var text = '';
+for(var i = 0; i < parent.childNodes.length; i++)
+{
+var node = parent.childNodes[i];
+if(node.innerText)
+text += node.innerText == 'Copy Code' ? '' : node.innerText;
+else
+text += node.nodeValue;
+}
+if(text.length > 0)
+window.clipboardData.setData("Text", text);
+},
+hover : function(obj)
+{
+obj.parentNode.className = "copycode copycode_hover";
+},
+out : function(obj)
+{
+obj.parentNode.className = "copycode";
+}
+});
+Prado.WebUI.TRatingList = Class.create();
+Prado.WebUI.TRatingList.prototype =
+{
+selectedIndex : -1,
+initialize : function(options)
+{
+this.options = options;
+this.element = $(options['ID']);
+Element.addClassName(this.element,options.cssClass);
+this.radios = document.getElementsByName(options.field);
+for(var i = 0; i<this.radios.length; i++)
+{
+Event.observe(this.radios[i].parentNode, "mouseover", this.hover.bindEvent(this,i));
+Event.observe(this.radios[i].parentNode, "mouseout", this.recover.bindEvent(this,i));
+Event.observe(this.radios[i].parentNode, "click", this.click.bindEvent(this, i));
+}
+this.caption = CAPTION();
this.element.appendChild(this.caption);
-this.selectedIndex=_451.selectedIndex;
+this.selectedIndex = options.selectedIndex;
this.setRating(this.selectedIndex);
-},hover:function(ev,_452){
-for(var i=0;i<this.radios.length;i++){
-this.radios[i].parentNode.className=(i<=_452)?"rating_hover":"";
+},
+hover : function(ev,index)
+{
+for(var i = 0; i<this.radios.length; i++)
+this.radios[i].parentNode.className = (i<=index) ? "rating_hover" : "";
+this.setCaption(index);
+},
+recover : function(ev,index)
+{
+for(var i = 0; i<=index; i++)
+Element.removeClassName(this.radios[i].parentNode, "rating_hover");
+this.setRating(this.selectedIndex);
+},
+click : function(ev, index)
+{
+for(var i = 0; i<this.radios.length; i++)
+this.radios[i].checked = (i == index);
+this.selectedIndex = index;
+this.setRating(index);
+if(isFunction(this.options.onChange))
+this.options.onChange(this,index);
+},
+setRating: function(index)
+{
+for(var i = 0; i<=index; i++)
+this.radios[i].parentNode.className = "rating_selected";
+this.setCaption(index);
+},
+setCaption : function(index)
+{
+this.caption.innerHTML = index > -1 ?
+this.radios[index].value : this.options.caption;
}
-this.setCaption(_452);
-},recover:function(ev,_453){
-for(var i=0;i<=_453;i++){
-Element.removeClassName(this.radios[i].parentNode,"rating_hover");
}
-this.setRating(this.selectedIndex);
-},click:function(ev,_454){
-for(var i=0;i<this.radios.length;i++){
-this.radios[i].checked=(i==_454);
-}
-this.selectedIndex=_454;
-this.setRating(_454);
-if(isFunction(this.options.onChange)){
-this.options.onChange(this,_454);
-}
-},setRating:function(_455){
-for(var i=0;i<=_455;i++){
-this.radios[i].parentNode.className="rating_selected";
-}
-this.setCaption(_455);
-},setCaption:function(_456){
-this.caption.innerHTML=_456>-1?this.radios[_456].value:this.options.caption;
-}};
-
diff --git a/framework/Web/Javascripts/js/rico.js b/framework/Web/Javascripts/js/rico.js
index 0d3d0a32..3c2035ca 100644
--- a/framework/Web/Javascripts/js/rico.js
+++ b/framework/Web/Javascripts/js/rico.js
@@ -1,1733 +1,900 @@
-var Rico={Version:"1.1rc1",prototypeVersion:parseFloat(Prototype.Version.split(".")[0]+"."+Prototype.Version.split(".")[1])};
-Rico.ArrayExtensions=new Array();
-if(Object.prototype.extend){
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Object.prototype.extend;
+
+var Rico = {
+Version: '1.1rc1',
+prototypeVersion: parseFloat(Prototype.Version.split(".")[0] + "." + Prototype.Version.split(".")[1])
+}
+Rico.ArrayExtensions = new Array();
+if (Object.prototype.extend) {
+ Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Object.prototype.extend;
}else{
-Object.prototype.extend=function(_1){
-return Object.extend.apply(this,[this,_1]);
-};
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Object.prototype.extend;
+Object.prototype.extend = function(object) {
+return Object.extend.apply(this, [this, object]);
}
-if(Array.prototype.push){
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.push;
+Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Object.prototype.extend;
}
-if(!Array.prototype.remove){
-Array.prototype.remove=function(dx){
-if(isNaN(dx)||dx>this.length){
-return false;
+if (Array.prototype.push) {
+ Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Array.prototype.push;
}
-for(var i=0,n=0;i<this.length;i++){
-if(i!=dx){
+if (!Array.prototype.remove) {
+ Array.prototype.remove = function(dx) {
+if( isNaN(dx) || dx > this.length )
+ return false;
+for( var i=0,n=0; i<this.length; i++ )
+ if( i != dx )
this[n++]=this[i];
-}
-}
this.length-=1;
-};
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.remove;
+ };
+Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Array.prototype.remove;
}
-if(!Array.prototype.removeItem){
-Array.prototype.removeItem=function(_4){
-for(var i=0;i<this.length;i++){
-if(this[i]==_4){
+if (!Array.prototype.removeItem) {
+ Array.prototype.removeItem = function(item) {
+for ( var i = 0 ; i < this.length ; i++ )
+ if ( this[i] == item ) {
this.remove(i);
break;
-}
-}
-};
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.removeItem;
-}
-if(!Array.prototype.indices){
-Array.prototype.indices=function(){
-var _5=new Array();
-for(index in this){
-var _6=false;
-for(var i=0;i<Rico.ArrayExtensions.length;i++){
-if(this[index]==Rico.ArrayExtensions[i]){
-_6=true;
-break;
-}
-}
-if(!_6){
-_5[_5.length]=index;
-}
-}
-return _5;
-};
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.indices;
-}
-if(window.DOMParser&&window.XMLSerializer&&window.Node&&Node.prototype&&Node.prototype.__defineGetter__){
-if(!Document.prototype.loadXML){
-Document.prototype.loadXML=function(s){
-var _8=(new DOMParser()).parseFromString(s,"text/xml");
-while(this.hasChildNodes()){
+ }
+ };
+Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Array.prototype.removeItem;
+}
+if (!Array.prototype.indices) {
+ Array.prototype.indices = function() {
+var indexArray = new Array();
+for ( index in this ) {
+ var ignoreThis = false;
+ for ( var i = 0 ; i < Rico.ArrayExtensions.length ; i++ ) {
+if ( this[index] == Rico.ArrayExtensions[i] ) {
+ ignoreThis = true;
+ break;
+}
+ }
+ if ( !ignoreThis )
+indexArray[ indexArray.length ] = index;
+}
+return indexArray;
+ }
+Rico.ArrayExtensions[ Rico.ArrayExtensions.length ] = Array.prototype.indices;
+}
+if ( window.DOMParser &&
+window.XMLSerializer &&
+window.Node && Node.prototype && Node.prototype.__defineGetter__ ) {
+if (!Document.prototype.loadXML) {
+Document.prototype.loadXML = function (s) {
+ var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
+ while (this.hasChildNodes())
this.removeChild(this.lastChild);
-}
-for(var i=0;i<_8.childNodes.length;i++){
-this.appendChild(this.importNode(_8.childNodes[i],true));
-}
+for (var i = 0; i < doc2.childNodes.length; i++) {
+this.appendChild(this.importNode(doc2.childNodes[i], true));
+ }
};
}
-Document.prototype.__defineGetter__("xml",function(){
-return (new XMLSerializer()).serializeToString(this);
-});
-}
-document.getElementsByTagAndClassName=function(_9,_10){
-if(_9==null){
-_9="*";
-}
-var _11=document.getElementsByTagName(_9)||document.all;
-var _12=new Array();
-if(_10==null){
-return _11;
-}
-for(var i=0;i<_11.length;i++){
-var _13=_11[i];
-var _14=_13.className.split(" ");
-for(var j=0;j<_14.length;j++){
-if(_14[j]==_10){
-_12.push(_13);
+Document.prototype.__defineGetter__( "xml",
+ function () {
+ return (new XMLSerializer()).serializeToString(this);
+ }
+ );
+}
+document.getElementsByTagAndClassName = function(tagName, className) {
+if ( tagName == null )
+ tagName = '*';
+var children = document.getElementsByTagName(tagName) || document.all;
+var elements = new Array();
+if ( className == null )
+return children;
+for (var i = 0; i < children.length; i++) {
+var child = children[i];
+var classNames = child.className.split(' ');
+for (var j = 0; j < classNames.length; j++) {
+if (classNames[j] == className) {
+elements.push(child);
break;
}
}
}
-return _12;
-};
-Rico.Accordion=Class.create();
-Rico.Accordion.prototype={initialize:function(_16,_17){
-this.container=$(_16);
-this.lastExpandedTab=null;
-this.accordionTabs=new Array();
-this.setOptions(_17);
-this._attachBehaviors();
-if(!_16){
-return;
-}
-this.container.style.borderBottom="1px solid "+this.options.borderColor;
-if(this.options.onLoadShowTab>=this.accordionTabs.length){
-this.options.onLoadShowTab=0;
-}
-for(var i=0;i<this.accordionTabs.length;i++){
-if(i!=this.options.onLoadShowTab){
-this.accordionTabs[i].collapse();
-this.accordionTabs[i].content.style.display="none";
-}
+return elements;
}
-this.lastExpandedTab=this.accordionTabs[this.options.onLoadShowTab];
-if(this.options.panelHeight=="auto"){
-var _18=(this.options.onloadShowTab===0)?1:0;
-var _19=parseInt(RicoUtil.getElementsComputedStyle(this.accordionTabs[_18].titleBar,"height"));
-if(isNaN(_19)){
-_19=this.accordionTabs[_18].titleBar.offsetHeight;
-}
-var _20=this.accordionTabs.length*_19;
-var _21=parseInt(RicoUtil.getElementsComputedStyle(this.container.parentNode,"height"));
-if(isNaN(_21)){
-_21=this.container.parentNode.offsetHeight;
-}
-this.options.panelHeight=_21-_20-2;
-}
-this.lastExpandedTab.content.style.height=this.options.panelHeight+"px";
+Rico.Accordion = Class.create();
+Rico.Accordion.prototype = {
+initialize: function(container, options) {
+this.container= $(container);
+this.lastExpandedTab= null;
+this.accordionTabs= new Array();
+this.setOptions(options);
+this._attachBehaviors();
+if(!container) return;
+this.container.style.borderBottom = '1px solid ' + this.options.borderColor;
+if (this.options.onLoadShowTab >= this.accordionTabs.length)
+this.options.onLoadShowTab = 0;
+for ( var i=0 ; i < this.accordionTabs.length ; i++ )
+{
+if (i != this.options.onLoadShowTab){
+ this.accordionTabs[i].collapse();
+ this.accordionTabs[i].content.style.display = 'none';
+}
+}
+this.lastExpandedTab = this.accordionTabs[this.options.onLoadShowTab];
+if (this.options.panelHeight == 'auto'){
+var tabToCheck = (this.options.onloadShowTab === 0)? 1 : 0;
+var titleBarSize = parseInt(RicoUtil.getElementsComputedStyle(this.accordionTabs[tabToCheck].titleBar, 'height'));
+if (isNaN(titleBarSize))
+titleBarSize = this.accordionTabs[tabToCheck].titleBar.offsetHeight;
+var totalTitleBarSize = this.accordionTabs.length * titleBarSize;
+var parentHeight = parseInt(RicoUtil.getElementsComputedStyle(this.container.parentNode, 'height'));
+if (isNaN(parentHeight))
+parentHeight = this.container.parentNode.offsetHeight;
+this.options.panelHeight = parentHeight - totalTitleBarSize-2;
+}
+this.lastExpandedTab.content.style.height = this.options.panelHeight + "px";
this.lastExpandedTab.showExpanded();
-this.lastExpandedTab.titleBar.style.fontWeight=this.options.expandedFontWeight;
-},setOptions:function(_22){
-this.options={expandedBg:"#63699c",hoverBg:"#63699c",collapsedBg:"#6b79a5",expandedTextColor:"#ffffff",expandedFontWeight:"bold",hoverTextColor:"#ffffff",collapsedTextColor:"#ced7ef",collapsedFontWeight:"normal",hoverTextColor:"#ffffff",borderColor:"#1f669b",panelHeight:200,onHideTab:null,onShowTab:null,onLoadShowTab:0};
-Object.extend(this.options,_22||{});
-},showTabByIndex:function(_23,_24){
-var _25=arguments.length==1?true:_24;
-this.showTab(this.accordionTabs[_23],_25);
-},showTab:function(_26,_27){
-var _28=arguments.length==1?true:_27;
-if(this.options.onHideTab){
-this.options.onHideTab(this.lastExpandedTab);
-}
+this.lastExpandedTab.titleBar.style.fontWeight = this.options.expandedFontWeight;
+},
+setOptions: function(options) {
+this.options = {
+ expandedBg: '#63699c',
+ hoverBg : '#63699c',
+ collapsedBg : '#6b79a5',
+ expandedTextColor : '#ffffff',
+ expandedFontWeight: 'bold',
+ hoverTextColor: '#ffffff',
+ collapsedTextColor: '#ced7ef',
+ collapsedFontWeight : 'normal',
+ hoverTextColor: '#ffffff',
+ borderColor : '#1f669b',
+ panelHeight : 200,
+ onHideTab : null,
+ onShowTab : null,
+ onLoadShowTab : 0
+}
+Object.extend(this.options, options || {});
+ },
+showTabByIndex: function( anIndex, animate ) {
+var doAnimate = arguments.length == 1 ? true : animate;
+this.showTab( this.accordionTabs[anIndex], doAnimate );
+ },
+showTab: function( accordionTab, animate ) {
+var doAnimate = arguments.length == 1 ? true : animate;
+if ( this.options.onHideTab )
+ this.options.onHideTab(this.lastExpandedTab);
this.lastExpandedTab.showCollapsed();
-var _29=this;
-var _30=this.lastExpandedTab;
-this.lastExpandedTab.content.style.height=(this.options.panelHeight-1)+"px";
-_26.content.style.display="";
-_26.titleBar.style.fontWeight=this.options.expandedFontWeight;
-if(_28){
-new Effect.AccordionSize(this.lastExpandedTab.content,_26.content,1,this.options.panelHeight,100,10,{complete:function(){
-_29.showTabDone(_30);
-}});
-this.lastExpandedTab=_26;
-}else{
-this.lastExpandedTab.content.style.height="1px";
-_26.content.style.height=this.options.panelHeight+"px";
-this.lastExpandedTab=_26;
-this.showTabDone(_30);
-}
-},showTabDone:function(_31){
-_31.content.style.display="none";
+var accordion = this;
+var lastExpandedTab = this.lastExpandedTab;
+this.lastExpandedTab.content.style.height = (this.options.panelHeight - 1) + 'px';
+accordionTab.content.style.display = '';
+accordionTab.titleBar.style.fontWeight = this.options.expandedFontWeight;
+if ( doAnimate ) {
+ new Effect.AccordionSize( this.lastExpandedTab.content,
+ accordionTab.content,
+ 1,
+ this.options.panelHeight,
+ 100, 10,
+ { complete: function() {accordion.showTabDone(lastExpandedTab)} } );
+ this.lastExpandedTab = accordionTab;
+}
+else {
+ this.lastExpandedTab.content.style.height = "1px";
+ accordionTab.content.style.height = this.options.panelHeight + "px";
+ this.lastExpandedTab = accordionTab;
+ this.showTabDone(lastExpandedTab);
+}
+ },
+showTabDone: function(collapsedTab) {
+collapsedTab.content.style.display = 'none';
this.lastExpandedTab.showExpanded();
-if(this.options.onShowTab){
-this.options.onShowTab(this.lastExpandedTab);
-}
-},_attachBehaviors:function(){
-var _32=this._getDirectChildrenByTag(this.container,"DIV");
-for(var i=0;i<_32.length;i++){
-var _33=this._getDirectChildrenByTag(_32[i],"DIV");
-if(_33.length!=2){
+if ( this.options.onShowTab )
+ this.options.onShowTab(this.lastExpandedTab);
+ },
+_attachBehaviors: function() {
+var panels = this._getDirectChildrenByTag(this.container, 'DIV');
+for ( var i = 0 ; i < panels.length ; i++ ) {
+var tabChildren = this._getDirectChildrenByTag(panels[i],'DIV');
+ if ( tabChildren.length != 2 )
continue;
-}
-var _34=_33[0];
-var _35=_33[1];
-this.accordionTabs.push(new Rico.Accordion.Tab(this,_34,_35));
-}
-},_getDirectChildrenByTag:function(e,_37){
-var _38=new Array();
-var _39=e.childNodes;
-for(var i=0;i<_39.length;i++){
-if(_39[i]&&_39[i].tagName&&_39[i].tagName==_37){
-_38.push(_39[i]);
-}
-}
-return _38;
-}};
-Rico.Accordion.Tab=Class.create();
-Rico.Accordion.Tab.prototype={initialize:function(_40,_41,_42){
-this.accordion=_40;
-this.titleBar=_41;
-this.content=_42;
+var tabTitleBar = tabChildren[0];
+ var tabContentBox = tabChildren[1];
+ this.accordionTabs.push( new Rico.Accordion.Tab(this,tabTitleBar,tabContentBox) );
+}
+ },
+_getDirectChildrenByTag: function(e, tagName) {
+var kids = new Array();
+var allKids = e.childNodes;
+for( var i = 0 ; i < allKids.length ; i++ )
+ if ( allKids[i] && allKids[i].tagName && allKids[i].tagName == tagName )
+kids.push(allKids[i]);
+return kids;
+ }
+};
+Rico.Accordion.Tab = Class.create();
+Rico.Accordion.Tab.prototype = {
+initialize: function(accordion, titleBar, content) {
+this.accordion = accordion;
+this.titleBar= titleBar;
+this.content = content;
this._attachBehaviors();
-},collapse:function(){
+ },
+collapse: function() {
this.showCollapsed();
-this.content.style.height="1px";
-},showCollapsed:function(){
-this.expanded=false;
-this.titleBar.style.backgroundColor=this.accordion.options.collapsedBg;
-this.titleBar.style.color=this.accordion.options.collapsedTextColor;
-this.titleBar.style.fontWeight=this.accordion.options.collapsedFontWeight;
-this.content.style.overflow="hidden";
-},showExpanded:function(){
-this.expanded=true;
-this.titleBar.style.backgroundColor=this.accordion.options.expandedBg;
-this.titleBar.style.color=this.accordion.options.expandedTextColor;
-this.content.style.overflow="visible";
-},titleBarClicked:function(e){
-if(this.accordion.lastExpandedTab==this){
-return;
-}
+this.content.style.height = "1px";
+ },
+showCollapsed: function() {
+this.expanded = false;
+this.titleBar.style.backgroundColor = this.accordion.options.collapsedBg;
+this.titleBar.style.color = this.accordion.options.collapsedTextColor;
+this.titleBar.style.fontWeight= this.accordion.options.collapsedFontWeight;
+this.content.style.overflow = "hidden";
+ },
+showExpanded: function() {
+this.expanded = true;
+this.titleBar.style.backgroundColor = this.accordion.options.expandedBg;
+this.titleBar.style.color = this.accordion.options.expandedTextColor;
+this.content.style.overflow = "visible";
+ },
+titleBarClicked: function(e) {
+if ( this.accordion.lastExpandedTab == this )
+ return;
this.accordion.showTab(this);
-},hover:function(e){
-this.titleBar.style.backgroundColor=this.accordion.options.hoverBg;
-this.titleBar.style.color=this.accordion.options.hoverTextColor;
-},unhover:function(e){
-if(this.expanded){
-this.titleBar.style.backgroundColor=this.accordion.options.expandedBg;
-this.titleBar.style.color=this.accordion.options.expandedTextColor;
-}else{
-this.titleBar.style.backgroundColor=this.accordion.options.collapsedBg;
-this.titleBar.style.color=this.accordion.options.collapsedTextColor;
-}
-},_attachBehaviors:function(){
-this.content.style.border="1px solid "+this.accordion.options.borderColor;
-this.content.style.borderTopWidth="0px";
-this.content.style.borderBottomWidth="0px";
-this.content.style.margin="0px";
-this.titleBar.onclick=this.titleBarClicked.bindAsEventListener(this);
-this.titleBar.onmouseover=this.hover.bindAsEventListener(this);
-this.titleBar.onmouseout=this.unhover.bindAsEventListener(this);
-}};
-Rico.Corner={round:function(e,_43){
-var e=$(e);
-this._setOptions(_43);
-var _44=this.options.color;
-if(this.options.color=="fromElement"){
-_44=this._background(e);
-}
-var _45=this.options.bgColor;
-if(this.options.bgColor=="fromParent"){
-_45=this._background(e.offsetParent);
-}
-this._roundCornersImpl(e,_44,_45);
-},_roundCornersImpl:function(e,_46,_47){
-if(this.options.border){
-this._renderBorder(e,_47);
-}
-if(this._isTopRounded()){
-this._roundTopCorners(e,_46,_47);
-}
-if(this._isBottomRounded()){
-this._roundBottomCorners(e,_46,_47);
-}
-},_renderBorder:function(el,_49){
-var _50="1px solid "+this._borderColor(_49);
-var _51="border-left: "+_50;
-var _52="border-right: "+_50;
-var _53="style='"+_51+";"+_52+"'";
-el.innerHTML="<div "+_53+">"+el.innerHTML+"</div>";
-},_roundTopCorners:function(el,_54,_55){
-var _56=this._createCorner(_55);
-for(var i=0;i<this.options.numSlices;i++){
-_56.appendChild(this._createCornerSlice(_54,_55,i,"top"));
-}
-el.style.paddingTop=0;
-el.insertBefore(_56,el.firstChild);
-},_roundBottomCorners:function(el,_57,_58){
-var _59=this._createCorner(_58);
-for(var i=(this.options.numSlices-1);i>=0;i--){
-_59.appendChild(this._createCornerSlice(_57,_58,i,"bottom"));
-}
-el.style.paddingBottom=0;
-el.appendChild(_59);
-},_createCorner:function(_60){
-var _61=document.createElement("div");
-_61.style.backgroundColor=(this._isTransparent()?"transparent":_60);
-return _61;
-},_createCornerSlice:function(_62,_63,n,_65){
-var _66=document.createElement("span");
-var _67=_66.style;
-_67.backgroundColor=_62;
-_67.display="block";
-_67.height="1px";
-_67.overflow="hidden";
-_67.fontSize="1px";
-var _68=this._borderColor(_62,_63);
-if(this.options.border&&n==0){
-_67.borderTopStyle="solid";
-_67.borderTopWidth="1px";
-_67.borderLeftWidth="0px";
-_67.borderRightWidth="0px";
-_67.borderBottomWidth="0px";
-_67.height="0px";
-_67.borderColor=_68;
-}else{
-if(_68){
-_67.borderColor=_68;
-_67.borderStyle="solid";
-_67.borderWidth="0px 1px";
-}
-}
-if(!this.options.compact&&(n==(this.options.numSlices-1))){
-_67.height="2px";
-}
-this._setMargin(_66,n,_65);
-this._setBorder(_66,n,_65);
-return _66;
-},_setOptions:function(_69){
-this.options={corners:"all",color:"fromElement",bgColor:"fromParent",blend:true,border:false,compact:false};
-Object.extend(this.options,_69||{});
-this.options.numSlices=this.options.compact?2:4;
-if(this._isTransparent()){
-this.options.blend=false;
-}
-},_whichSideTop:function(){
-if(this._hasString(this.options.corners,"all","top")){
-return "";
-}
-if(this.options.corners.indexOf("tl")>=0&&this.options.corners.indexOf("tr")>=0){
-return "";
-}
-if(this.options.corners.indexOf("tl")>=0){
-return "left";
-}else{
-if(this.options.corners.indexOf("tr")>=0){
-return "right";
-}
-}
-return "";
-},_whichSideBottom:function(){
-if(this._hasString(this.options.corners,"all","bottom")){
-return "";
-}
-if(this.options.corners.indexOf("bl")>=0&&this.options.corners.indexOf("br")>=0){
-return "";
-}
-if(this.options.corners.indexOf("bl")>=0){
-return "left";
-}else{
-if(this.options.corners.indexOf("br")>=0){
+ },
+hover: function(e) {
+this.titleBar.style.backgroundColor = this.accordion.options.hoverBg;
+this.titleBar.style.color = this.accordion.options.hoverTextColor;
+ },
+unhover: function(e) {
+if ( this.expanded ) {
+ this.titleBar.style.backgroundColor = this.accordion.options.expandedBg;
+ this.titleBar.style.color = this.accordion.options.expandedTextColor;
+}
+else {
+ this.titleBar.style.backgroundColor = this.accordion.options.collapsedBg;
+ this.titleBar.style.color = this.accordion.options.collapsedTextColor;
+}
+ },
+_attachBehaviors: function() {
+this.content.style.border = "1px solid " + this.accordion.options.borderColor;
+this.content.style.borderTopWidth= "0px";
+this.content.style.borderBottomWidth = "0px";
+this.content.style.margin= "0px";
+this.titleBar.onclick = this.titleBarClicked.bindAsEventListener(this);
+this.titleBar.onmouseover = this.hover.bindAsEventListener(this);
+this.titleBar.onmouseout= this.unhover.bindAsEventListener(this);
+ }
+};
+Rico.Corner = {
+round: function(e, options) {
+var e = $(e);
+this._setOptions(options);
+var color = this.options.color;
+if ( this.options.color == "fromElement" )
+ color = this._background(e);
+var bgColor = this.options.bgColor;
+if ( this.options.bgColor == "fromParent" )
+ bgColor = this._background(e.offsetParent);
+this._roundCornersImpl(e, color, bgColor);
+ },
+_roundCornersImpl: function(e, color, bgColor) {
+if(this.options.border)
+ this._renderBorder(e,bgColor);
+if(this._isTopRounded())
+ this._roundTopCorners(e,color,bgColor);
+if(this._isBottomRounded())
+ this._roundBottomCorners(e,color,bgColor);
+ },
+_renderBorder: function(el,bgColor) {
+var borderValue = "1px solid " + this._borderColor(bgColor);
+var borderL = "border-left: "+ borderValue;
+var borderR = "border-right: " + borderValue;
+var style = "style='" + borderL + ";" + borderR +"'";
+el.innerHTML = "<div " + style + ">" + el.innerHTML + "</div>"
+ },
+_roundTopCorners: function(el, color, bgColor) {
+var corner = this._createCorner(bgColor);
+for(var i=0 ; i < this.options.numSlices ; i++ )
+ corner.appendChild(this._createCornerSlice(color,bgColor,i,"top"));
+el.style.paddingTop = 0;
+el.insertBefore(corner,el.firstChild);
+ },
+_roundBottomCorners: function(el, color, bgColor) {
+var corner = this._createCorner(bgColor);
+for(var i=(this.options.numSlices-1) ; i >= 0 ; i-- )
+ corner.appendChild(this._createCornerSlice(color,bgColor,i,"bottom"));
+el.style.paddingBottom = 0;
+el.appendChild(corner);
+ },
+_createCorner: function(bgColor) {
+var corner = document.createElement("div");
+corner.style.backgroundColor = (this._isTransparent() ? "transparent" : bgColor);
+return corner;
+ },
+_createCornerSlice: function(color,bgColor, n, position) {
+var slice = document.createElement("span");
+var inStyle = slice.style;
+inStyle.backgroundColor = color;
+inStyle.display= "block";
+inStyle.height = "1px";
+inStyle.overflow = "hidden";
+inStyle.fontSize = "1px";
+var borderColor = this._borderColor(color,bgColor);
+if ( this.options.border && n == 0 ) {
+ inStyle.borderTopStyle= "solid";
+ inStyle.borderTopWidth= "1px";
+ inStyle.borderLeftWidth = "0px";
+ inStyle.borderRightWidth= "0px";
+ inStyle.borderBottomWidth = "0px";
+ inStyle.height= "0px";
+ inStyle.borderColor = borderColor;
+}
+else if(borderColor) {
+ inStyle.borderColor = borderColor;
+ inStyle.borderStyle = "solid";
+ inStyle.borderWidth = "0px 1px";
+}
+if ( !this.options.compact && (n == (this.options.numSlices-1)) )
+ inStyle.height = "2px";
+this._setMargin(slice, n, position);
+this._setBorder(slice, n, position);
+return slice;
+ },
+_setOptions: function(options) {
+this.options = {
+ corners : "all",
+ color : "fromElement",
+ bgColor : "fromParent",
+ blend : true,
+ border: false,
+ compact : false
+}
+Object.extend(this.options, options || {});
+this.options.numSlices = this.options.compact ? 2 : 4;
+if ( this._isTransparent() )
+ this.options.blend = false;
+ },
+_whichSideTop: function() {
+if ( this._hasString(this.options.corners, "all", "top") )
+ return "";
+if ( this.options.corners.indexOf("tl") >= 0 && this.options.corners.indexOf("tr") >= 0 )
+ return "";
+if (this.options.corners.indexOf("tl") >= 0)
+ return "left";
+else if (this.options.corners.indexOf("tr") >= 0)
return "right";
-}
-}
return "";
-},_borderColor:function(_70,_71){
-if(_70=="transparent"){
-return _71;
-}else{
-if(this.options.border){
-return this.options.border;
-}else{
-if(this.options.blend){
-return this._blend(_71,_70);
-}else{
+ },
+_whichSideBottom: function() {
+if ( this._hasString(this.options.corners, "all", "bottom") )
+ return "";
+if ( this.options.corners.indexOf("bl")>=0 && this.options.corners.indexOf("br")>=0 )
+ return "";
+if(this.options.corners.indexOf("bl") >=0)
+ return "left";
+else if(this.options.corners.indexOf("br")>=0)
+ return "right";
return "";
-}
-}
-}
-},_setMargin:function(el,n,_72){
-var _73=this._marginSize(n);
-var _74=_72=="top"?this._whichSideTop():this._whichSideBottom();
-if(_74=="left"){
-el.style.marginLeft=_73+"px";
-el.style.marginRight="0px";
-}else{
-if(_74=="right"){
-el.style.marginRight=_73+"px";
-el.style.marginLeft="0px";
-}else{
-el.style.marginLeft=_73+"px";
-el.style.marginRight=_73+"px";
-}
-}
-},_setBorder:function(el,n,_75){
-var _76=this._borderSize(n);
-var _77=_75=="top"?this._whichSideTop():this._whichSideBottom();
-if(_77=="left"){
-el.style.borderLeftWidth=_76+"px";
-el.style.borderRightWidth="0px";
-}else{
-if(_77=="right"){
-el.style.borderRightWidth=_76+"px";
-el.style.borderLeftWidth="0px";
-}else{
-el.style.borderLeftWidth=_76+"px";
-el.style.borderRightWidth=_76+"px";
-}
-}
-if(this.options.border!=false){
-el.style.borderLeftWidth=_76+"px";
-}
-el.style.borderRightWidth=_76+"px";
-},_marginSize:function(n){
-if(this._isTransparent()){
+ },
+_borderColor : function(color,bgColor) {
+if ( color == "transparent" )
+ return bgColor;
+else if ( this.options.border )
+ return this.options.border;
+else if ( this.options.blend )
+ return this._blend( bgColor, color );
+else
+ return "";
+ },
+_setMargin: function(el, n, corners) {
+var marginSize = this._marginSize(n);
+var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom();
+if ( whichSide == "left" ) {
+ el.style.marginLeft = marginSize + "px"; el.style.marginRight = "0px";
+}
+else if ( whichSide == "right" ) {
+ el.style.marginRight = marginSize + "px"; el.style.marginLeft= "0px";
+}
+else {
+ el.style.marginLeft = marginSize + "px"; el.style.marginRight = marginSize + "px";
+}
+ },
+_setBorder: function(el,n,corners) {
+var borderSize = this._borderSize(n);
+var whichSide = corners == "top" ? this._whichSideTop() : this._whichSideBottom();
+if ( whichSide == "left" ) {
+ el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = "0px";
+}
+else if ( whichSide == "right" ) {
+ el.style.borderRightWidth = borderSize + "px"; el.style.borderLeftWidth= "0px";
+}
+else {
+ el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px";
+}
+if (this.options.border != false)
+el.style.borderLeftWidth = borderSize + "px"; el.style.borderRightWidth = borderSize + "px";
+ },
+_marginSize: function(n) {
+if ( this._isTransparent() )
+ return 0;
+var marginSizes= [ 5, 3, 2, 1 ];
+var blendedMarginSizes = [ 3, 2, 1, 0 ];
+var compactMarginSizes = [ 2, 1 ];
+var smBlendedMarginSizes = [ 1, 0 ];
+if ( this.options.compact && this.options.blend )
+ return smBlendedMarginSizes[n];
+else if ( this.options.compact )
+ return compactMarginSizes[n];
+else if ( this.options.blend )
+ return blendedMarginSizes[n];
+else
+ return marginSizes[n];
+ },
+_borderSize: function(n) {
+var transparentBorderSizes = [ 5, 3, 2, 1 ];
+var blendedBorderSizes = [ 2, 1, 1, 1 ];
+var compactBorderSizes = [ 1, 0 ];
+var actualBorderSizes= [ 0, 2, 0, 0 ];
+if ( this.options.compact && (this.options.blend || this._isTransparent()) )
+ return 1;
+else if ( this.options.compact )
+ return compactBorderSizes[n];
+else if ( this.options.blend )
+ return blendedBorderSizes[n];
+else if ( this.options.border )
+ return actualBorderSizes[n];
+else if ( this._isTransparent() )
+ return transparentBorderSizes[n];
return 0;
-}
-var _78=[5,3,2,1];
-var _79=[3,2,1,0];
-var _80=[2,1];
-var _81=[1,0];
-if(this.options.compact&&this.options.blend){
-return _81[n];
-}else{
-if(this.options.compact){
-return _80[n];
-}else{
-if(this.options.blend){
-return _79[n];
-}else{
-return _78[n];
-}
-}
-}
-},_borderSize:function(n){
-var _82=[5,3,2,1];
-var _83=[2,1,1,1];
-var _84=[1,0];
-var _85=[0,2,0,0];
-if(this.options.compact&&(this.options.blend||this._isTransparent())){
-return 1;
-}else{
-if(this.options.compact){
-return _84[n];
-}else{
-if(this.options.blend){
-return _83[n];
-}else{
-if(this.options.border){
-return _85[n];
-}else{
-if(this._isTransparent()){
-return _82[n];
-}
-}
-}
-}
-}
-return 0;
-},_hasString:function(str){
-for(var i=1;i<arguments.length;i++){
-if(str.indexOf(arguments[i])>=0){
-return true;
-}
-}
-return false;
-},_blend:function(c1,c2){
-var cc1=Rico.Color.createFromHex(c1);
-cc1.blend(Rico.Color.createFromHex(c2));
-return cc1;
-},_background:function(el){
-try{
-return Rico.Color.createColorFromBackground(el).asHex();
-}
-catch(err){
-return "#ffffff";
-}
-},_isTransparent:function(){
-return this.options.color=="transparent";
-},_isTopRounded:function(){
-return this._hasString(this.options.corners,"all","top","tl","tr");
-},_isBottomRounded:function(){
-return this._hasString(this.options.corners,"all","bottom","bl","br");
-},_hasSingleTextChild:function(el){
-return el.childNodes.length==1&&el.childNodes[0].nodeType==3;
-}};
-if(window.Effect==undefined){
-Effect={};
-}
-Effect.SizeAndPosition=Class.create();
-Effect.SizeAndPosition.prototype={initialize:function(_90,x,y,w,h,_95,_96,_97){
-this.element=$(_90);
-this.x=x;
-this.y=y;
-this.w=w;
-this.h=h;
-this.duration=_95;
-this.steps=_96;
-this.options=arguments[7]||{};
+ },
+_hasString: function(str) { for(var i=1 ; i<arguments.length ; i++) if (str.indexOf(arguments[i]) >= 0) return true; return false; },
+ _blend: function(c1, c2) { var cc1 = Rico.Color.createFromHex(c1); cc1.blend(Rico.Color.createFromHex(c2)); return cc1; },
+ _background: function(el) { try { return Rico.Color.createColorFromBackground(el).asHex(); } catch(err) { return "#ffffff"; } },
+ _isTransparent: function() { return this.options.color == "transparent"; },
+ _isTopRounded: function() { return this._hasString(this.options.corners, "all", "top", "tl", "tr"); },
+ _isBottomRounded: function() { return this._hasString(this.options.corners, "all", "bottom", "bl", "br"); },
+ _hasSingleTextChild: function(el) { return el.childNodes.length == 1 && el.childNodes[0].nodeType == 3; }
+}
+if ( window.Effect == undefined )
+ Effect = {};
+Effect.SizeAndPosition = Class.create();
+Effect.SizeAndPosition.prototype = {
+initialize: function(element, x, y, w, h, duration, steps, options) {
+this.element = $(element);
+this.x = x;
+this.y = y;
+this.w = w;
+this.h = h;
+this.duration = duration;
+this.steps= steps;
+this.options= arguments[7] || {};
this.sizeAndPosition();
-},sizeAndPosition:function(){
-if(this.isFinished()){
-if(this.options.complete){
-this.options.complete(this);
-}
-return;
-}
-if(this.timer){
-clearTimeout(this.timer);
-}
-var _98=Math.round(this.duration/this.steps);
-var _99=this.element.offsetLeft;
-var _100=this.element.offsetTop;
-var _101=this.element.offsetWidth;
-var _102=this.element.offsetHeight;
-this.x=(this.x)?this.x:_99;
-this.y=(this.y)?this.y:_100;
-this.w=(this.w)?this.w:_101;
-this.h=(this.h)?this.h:_102;
-var difX=this.steps>0?(this.x-_99)/this.steps:0;
-var difY=this.steps>0?(this.y-_100)/this.steps:0;
-var difW=this.steps>0?(this.w-_101)/this.steps:0;
-var difH=this.steps>0?(this.h-_102)/this.steps:0;
-this.moveBy(difX,difY);
-this.resizeBy(difW,difH);
-this.duration-=_98;
+ },
+sizeAndPosition: function() {
+if (this.isFinished()) {
+ if(this.options.complete) this.options.complete(this);
+ return;
+}
+if (this.timer)
+ clearTimeout(this.timer);
+var stepDuration = Math.round(this.duration/this.steps) ;
+var currentX = this.element.offsetLeft;
+var currentY = this.element.offsetTop;
+var currentW = this.element.offsetWidth;
+var currentH = this.element.offsetHeight;
+this.x = (this.x) ? this.x : currentX;
+this.y = (this.y) ? this.y : currentY;
+this.w = (this.w) ? this.w : currentW;
+this.h = (this.h) ? this.h : currentH;
+var difX = this.steps >0 ? (this.x - currentX)/this.steps : 0;
+var difY = this.steps >0 ? (this.y - currentY)/this.steps : 0;
+var difW = this.steps >0 ? (this.w - currentW)/this.steps : 0;
+var difH = this.steps >0 ? (this.h - currentH)/this.steps : 0;
+this.moveBy(difX, difY);
+this.resizeBy(difW, difH);
+this.duration -= stepDuration;
this.steps--;
-this.timer=setTimeout(this.sizeAndPosition.bind(this),_98);
-},isFinished:function(){
-return this.steps<=0;
-},moveBy:function(difX,difY){
-var _107=this.element.offsetLeft;
-var _108=this.element.offsetTop;
-var _109=parseInt(difX);
-var _110=parseInt(difY);
-var _111=this.element.style;
-if(_109!=0){
-_111.left=(_107+_109)+"px";
-}
-if(_110!=0){
-_111.top=(_108+_110)+"px";
-}
-},resizeBy:function(difW,difH){
-var _112=this.element.offsetWidth;
-var _113=this.element.offsetHeight;
-var _114=parseInt(difW);
-var _115=parseInt(difH);
-var _116=this.element.style;
-if(_114!=0){
-_116.width=(_112+_114)+"px";
-}
-if(_115!=0){
-_116.height=(_113+_115)+"px";
-}
-}};
-Effect.Size=Class.create();
-Effect.Size.prototype={initialize:function(_117,w,h,_118,_119,_120){
-new Effect.SizeAndPosition(_117,null,null,w,h,_118,_119,_120);
-}};
-Effect.Position=Class.create();
-Effect.Position.prototype={initialize:function(_121,x,y,_122,_123,_124){
-new Effect.SizeAndPosition(_121,x,y,null,null,_122,_123,_124);
-}};
-Effect.Round=Class.create();
-Effect.Round.prototype={initialize:function(_125,_126,_127){
-var _128=document.getElementsByTagAndClassName(_125,_126);
-for(var i=0;i<_128.length;i++){
-Rico.Corner.round(_128[i],_127);
-}
-}};
-Effect.FadeTo=Class.create();
-Effect.FadeTo.prototype={initialize:function(_129,_130,_131,_132,_133){
-this.element=$(_129);
-this.opacity=_130;
-this.duration=_131;
-this.steps=_132;
-this.options=arguments[4]||{};
+this.timer = setTimeout(this.sizeAndPosition.bind(this), stepDuration);
+ },
+isFinished: function() {
+return this.steps <= 0;
+ },
+moveBy: function( difX, difY ) {
+var currentLeft = this.element.offsetLeft;
+var currentTop= this.element.offsetTop;
+var intDifX = parseInt(difX);
+var intDifY = parseInt(difY);
+var style = this.element.style;
+if ( intDifX != 0 )
+ style.left = (currentLeft + intDifX) + "px";
+if ( intDifY != 0 )
+ style.top= (currentTop + intDifY) + "px";
+ },
+resizeBy: function( difW, difH ) {
+var currentWidth= this.element.offsetWidth;
+var currentHeight = this.element.offsetHeight;
+var intDifW = parseInt(difW);
+var intDifH = parseInt(difH);
+var style = this.element.style;
+if ( intDifW != 0 )
+ style.width = (currentWidth+ intDifW) + "px";
+if ( intDifH != 0 )
+ style.height= (currentHeight + intDifH) + "px";
+ }
+}
+Effect.Size = Class.create();
+Effect.Size.prototype = {
+initialize: function(element, w, h, duration, steps, options) {
+new Effect.SizeAndPosition(element, null, null, w, h, duration, steps, options);
+}
+}
+Effect.Position = Class.create();
+Effect.Position.prototype = {
+initialize: function(element, x, y, duration, steps, options) {
+new Effect.SizeAndPosition(element, x, y, null, null, duration, steps, options);
+}
+}
+Effect.Round = Class.create();
+Effect.Round.prototype = {
+initialize: function(tagName, className, options) {
+var elements = document.getElementsByTagAndClassName(tagName,className);
+for ( var i = 0 ; i < elements.length ; i++ )
+ Rico.Corner.round( elements[i], options );
+ }
+};
+Effect.FadeTo = Class.create();
+Effect.FadeTo.prototype = {
+initialize: function( element, opacity, duration, steps, options) {
+this.element= $(element);
+this.opacity= opacity;
+this.duration = duration;
+this.steps= steps;
+this.options= arguments[4] || {};
this.fadeTo();
-},fadeTo:function(){
-if(this.isFinished()){
-if(this.options.complete){
-this.options.complete(this);
-}
-return;
-}
-if(this.timer){
-clearTimeout(this.timer);
-}
-var _134=Math.round(this.duration/this.steps);
-var _135=this.getElementOpacity();
-var _136=this.steps>0?(this.opacity-_135)/this.steps:0;
-this.changeOpacityBy(_136);
-this.duration-=_134;
-this.steps--;
-this.timer=setTimeout(this.fadeTo.bind(this),_134);
-},changeOpacityBy:function(v){
-var _138=this.getElementOpacity();
-var _139=Math.max(0,Math.min(_138+v,1));
-this.element.ricoOpacity=_139;
-this.element.style.filter="alpha(opacity:"+Math.round(_139*100)+")";
-this.element.style.opacity=_139;
-},isFinished:function(){
-return this.steps<=0;
-},getElementOpacity:function(){
-if(this.element.ricoOpacity==undefined){
-var _140=RicoUtil.getElementsComputedStyle(this.element,"opacity");
-this.element.ricoOpacity=_140!=undefined?_140:1;
-}
-return parseFloat(this.element.ricoOpacity);
-}};
-Effect.AccordionSize=Class.create();
-Effect.AccordionSize.prototype={initialize:function(e1,e2,_143,end,_145,_146,_147){
-this.e1=$(e1);
-this.e2=$(e2);
-this.start=_143;
-this.end=end;
-this.duration=_145;
-this.steps=_146;
-this.options=arguments[6]||{};
-this.accordionSize();
-},accordionSize:function(){
-if(this.isFinished()){
-this.e1.style.height=this.start+"px";
-this.e2.style.height=this.end+"px";
-if(this.options.complete){
-this.options.complete(this);
-}
-return;
-}
-if(this.timer){
-clearTimeout(this.timer);
-}
-var _148=Math.round(this.duration/this.steps);
-var diff=this.steps>0?(parseInt(this.e1.offsetHeight)-this.start)/this.steps:0;
-this.resizeBy(diff);
-this.duration-=_148;
+ },
+fadeTo: function() {
+if (this.isFinished()) {
+ if(this.options.complete) this.options.complete(this);
+ return;
+}
+if (this.timer)
+ clearTimeout(this.timer);
+var stepDuration = Math.round(this.duration/this.steps) ;
+var currentOpacity = this.getElementOpacity();
+var delta = this.steps > 0 ? (this.opacity - currentOpacity)/this.steps : 0;
+this.changeOpacityBy(delta);
+this.duration -= stepDuration;
this.steps--;
-this.timer=setTimeout(this.accordionSize.bind(this),_148);
-},isFinished:function(){
-return this.steps<=0;
-},resizeBy:function(diff){
-var _150=this.e1.offsetHeight;
-var _151=this.e2.offsetHeight;
-var _152=parseInt(diff);
-if(diff!=0){
-this.e1.style.height=(_150-_152)+"px";
-this.e2.style.height=(_151+_152)+"px";
-}
-}};
-if(window.Effect==undefined){
-Effect={};
-}
-Effect.SizeAndPosition=Class.create();
-Effect.SizeAndPosition.prototype={initialize:function(_153,x,y,w,h,_154,_155,_156){
-this.element=$(_153);
-this.x=x;
-this.y=y;
-this.w=w;
-this.h=h;
-this.duration=_154;
-this.steps=_155;
-this.options=arguments[7]||{};
+this.timer = setTimeout(this.fadeTo.bind(this), stepDuration);
+ },
+changeOpacityBy: function(v) {
+var currentOpacity = this.getElementOpacity();
+var newOpacity = Math.max(0, Math.min(currentOpacity+v, 1));
+this.element.ricoOpacity = newOpacity;
+this.element.style.filter = "alpha(opacity:"+Math.round(newOpacity*100)+")";
+this.element.style.opacity = newOpacity;
+if ( window.Effect == undefined )
+ Effect = {};
+Effect.SizeAndPosition = Class.create();
+Effect.SizeAndPosition.prototype = {
+initialize: function(element, x, y, w, h, duration, steps, options) {
+this.element = $(element);
+this.x = x;
+this.y = y;
+this.w = w;
+this.h = h;
+this.duration = duration;
+this.steps= steps;
+this.options= arguments[7] || {};
this.sizeAndPosition();
-},sizeAndPosition:function(){
-if(this.isFinished()){
-if(this.options.complete){
-this.options.complete(this);
-}
-return;
-}
-if(this.timer){
-clearTimeout(this.timer);
-}
-var _157=Math.round(this.duration/this.steps);
-var _158=this.element.offsetLeft;
-var _159=this.element.offsetTop;
-var _160=this.element.offsetWidth;
-var _161=this.element.offsetHeight;
-this.x=(this.x)?this.x:_158;
-this.y=(this.y)?this.y:_159;
-this.w=(this.w)?this.w:_160;
-this.h=(this.h)?this.h:_161;
-var difX=this.steps>0?(this.x-_158)/this.steps:0;
-var difY=this.steps>0?(this.y-_159)/this.steps:0;
-var difW=this.steps>0?(this.w-_160)/this.steps:0;
-var difH=this.steps>0?(this.h-_161)/this.steps:0;
-this.moveBy(difX,difY);
-this.resizeBy(difW,difH);
-this.duration-=_157;
+ },
+sizeAndPosition: function() {
+if (this.isFinished()) {
+ if(this.options.complete) this.options.complete(this);
+ return;
+}
+if (this.timer)
+ clearTimeout(this.timer);
+var stepDuration = Math.round(this.duration/this.steps) ;
+var currentX = this.element.offsetLeft;
+var currentY = this.element.offsetTop;
+var currentW = this.element.offsetWidth;
+var currentH = this.element.offsetHeight;
+this.x = (this.x) ? this.x : currentX;
+this.y = (this.y) ? this.y : currentY;
+this.w = (this.w) ? this.w : currentW;
+this.h = (this.h) ? this.h : currentH;
+var difX = this.steps >0 ? (this.x - currentX)/this.steps : 0;
+var difY = this.steps >0 ? (this.y - currentY)/this.steps : 0;
+var difW = this.steps >0 ? (this.w - currentW)/this.steps : 0;
+var difH = this.steps >0 ? (this.h - currentH)/this.steps : 0;
+this.moveBy(difX, difY);
+this.resizeBy(difW, difH);
+this.duration -= stepDuration;
this.steps--;
-this.timer=setTimeout(this.sizeAndPosition.bind(this),_157);
-},isFinished:function(){
-return this.steps<=0;
-},moveBy:function(difX,difY){
-var _162=this.element.offsetLeft;
-var _163=this.element.offsetTop;
-var _164=parseInt(difX);
-var _165=parseInt(difY);
-var _166=this.element.style;
-if(_164!=0){
-_166.left=(_162+_164)+"px";
-}
-if(_165!=0){
-_166.top=(_163+_165)+"px";
-}
-},resizeBy:function(difW,difH){
-var _167=this.element.offsetWidth;
-var _168=this.element.offsetHeight;
-var _169=parseInt(difW);
-var _170=parseInt(difH);
-var _171=this.element.style;
-if(_169!=0){
-_171.width=(_167+_169)+"px";
-}
-if(_170!=0){
-_171.height=(_168+_170)+"px";
-}
-}};
-Effect.Size=Class.create();
-Effect.Size.prototype={initialize:function(_172,w,h,_173,_174,_175){
-new Effect.SizeAndPosition(_172,null,null,w,h,_173,_174,_175);
-}};
-Effect.Position=Class.create();
-Effect.Position.prototype={initialize:function(_176,x,y,_177,_178,_179){
-new Effect.SizeAndPosition(_176,x,y,null,null,_177,_178,_179);
-}};
-Effect.Round=Class.create();
-Effect.Round.prototype={initialize:function(_180,_181,_182){
-var _183=document.getElementsByTagAndClassName(_180,_181);
-for(var i=0;i<_183.length;i++){
-Rico.Corner.round(_183[i],_182);
-}
-}};
-Effect.FadeTo=Class.create();
-Effect.FadeTo.prototype={initialize:function(_184,_185,_186,_187,_188){
-this.element=$(_184);
-this.opacity=_185;
-this.duration=_186;
-this.steps=_187;
-this.options=arguments[4]||{};
+this.timer = setTimeout(this.sizeAndPosition.bind(this), stepDuration);
+ },
+isFinished: function() {
+return this.steps <= 0;
+ },
+moveBy: function( difX, difY ) {
+var currentLeft = this.element.offsetLeft;
+var currentTop= this.element.offsetTop;
+var intDifX = parseInt(difX);
+var intDifY = parseInt(difY);
+var style = this.element.style;
+if ( intDifX != 0 )
+ style.left = (currentLeft + intDifX) + "px";
+if ( intDifY != 0 )
+ style.top= (currentTop + intDifY) + "px";
+ },
+resizeBy: function( difW, difH ) {
+var currentWidth= this.element.offsetWidth;
+var currentHeight = this.element.offsetHeight;
+var intDifW = parseInt(difW);
+var intDifH = parseInt(difH);
+var style = this.element.style;
+if ( intDifW != 0 )
+ style.width = (currentWidth+ intDifW) + "px";
+if ( intDifH != 0 )
+ style.height= (currentHeight + intDifH) + "px";
+ }
+}
+Effect.Size = Class.create();
+Effect.Size.prototype = {
+initialize: function(element, w, h, duration, steps, options) {
+new Effect.SizeAndPosition(element, null, null, w, h, duration, steps, options);
+}
+}
+Effect.Position = Class.create();
+Effect.Position.prototype = {
+initialize: function(element, x, y, duration, steps, options) {
+new Effect.SizeAndPosition(element, x, y, null, null, duration, steps, options);
+}
+}
+Effect.Round = Class.create();
+Effect.Round.prototype = {
+initialize: function(tagName, className, options) {
+var elements = document.getElementsByTagAndClassName(tagName,className);
+for ( var i = 0 ; i < elements.length ; i++ )
+ Rico.Corner.round( elements[i], options );
+ }
+};
+Effect.FadeTo = Class.create();
+Effect.FadeTo.prototype = {
+initialize: function( element, opacity, duration, steps, options) {
+this.element= $(element);
+this.opacity= opacity;
+this.duration = duration;
+this.steps= steps;
+this.options= arguments[4] || {};
this.fadeTo();
-},fadeTo:function(){
-if(this.isFinished()){
-if(this.options.complete){
-this.options.complete(this);
-}
-return;
-}
-if(this.timer){
-clearTimeout(this.timer);
-}
-var _189=Math.round(this.duration/this.steps);
-var _190=this.getElementOpacity();
-var _191=this.steps>0?(this.opacity-_190)/this.steps:0;
-this.changeOpacityBy(_191);
-this.duration-=_189;
-this.steps--;
-this.timer=setTimeout(this.fadeTo.bind(this),_189);
-},changeOpacityBy:function(v){
-var _192=this.getElementOpacity();
-var _193=Math.max(0,Math.min(_192+v,1));
-this.element.ricoOpacity=_193;
-this.element.style.filter="alpha(opacity:"+Math.round(_193*100)+")";
-this.element.style.opacity=_193;
-},isFinished:function(){
-return this.steps<=0;
-},getElementOpacity:function(){
-if(this.element.ricoOpacity==undefined){
-var _194=RicoUtil.getElementsComputedStyle(this.element,"opacity");
-this.element.ricoOpacity=_194!=undefined?_194:1;
-}
-return parseFloat(this.element.ricoOpacity);
-}};
-Effect.AccordionSize=Class.create();
-Effect.AccordionSize.prototype={initialize:function(e1,e2,_195,end,_196,_197,_198){
-this.e1=$(e1);
-this.e2=$(e2);
-this.start=_195;
-this.end=end;
-this.duration=_196;
-this.steps=_197;
-this.options=arguments[6]||{};
-this.accordionSize();
-},accordionSize:function(){
-if(this.isFinished()){
-this.e1.style.height=this.start+"px";
-this.e2.style.height=this.end+"px";
-if(this.options.complete){
-this.options.complete(this);
-}
-return;
-}
-if(this.timer){
-clearTimeout(this.timer);
-}
-var _199=Math.round(this.duration/this.steps);
-var diff=this.steps>0?(parseInt(this.e1.offsetHeight)-this.start)/this.steps:0;
-this.resizeBy(diff);
-this.duration-=_199;
+ },
+fadeTo: function() {
+if (this.isFinished()) {
+ if(this.options.complete) this.options.complete(this);
+ return;
+}
+if (this.timer)
+ clearTimeout(this.timer);
+var stepDuration = Math.round(this.duration/this.steps) ;
+var currentOpacity = this.getElementOpacity();
+var delta = this.steps > 0 ? (this.opacity - currentOpacity)/this.steps : 0;
+this.changeOpacityBy(delta);
+this.duration -= stepDuration;
this.steps--;
-this.timer=setTimeout(this.accordionSize.bind(this),_199);
-},isFinished:function(){
-return this.steps<=0;
-},resizeBy:function(diff){
-var _200=this.e1.offsetHeight;
-var _201=this.e2.offsetHeight;
-var _202=parseInt(diff);
-if(diff!=0){
-this.e1.style.height=(_200-_202)+"px";
-this.e2.style.height=(_201+_202)+"px";
-}
-}};
-Rico.LiveGridMetaData=Class.create();
-Rico.LiveGridMetaData.prototype={initialize:function(_203,_204,_205,_206){
-this.pageSize=_203;
-this.totalRows=_204;
-this.setOptions(_206);
-this.ArrowHeight=16;
-this.columnCount=_205;
-},setOptions:function(_207){
-this.options={largeBufferSize:7,nearLimitFactor:0.2};
-Object.extend(this.options,_207||{});
-},getPageSize:function(){
-return this.pageSize;
-},getTotalRows:function(){
-return this.totalRows;
-},setTotalRows:function(n){
-this.totalRows=n;
-},getLargeBufferSize:function(){
-return parseInt(this.options.largeBufferSize*this.pageSize);
-},getLimitTolerance:function(){
-return parseInt(this.getLargeBufferSize()*this.options.nearLimitFactor);
-}};
-Rico.LiveGridScroller=Class.create();
-Rico.LiveGridScroller.prototype={initialize:function(_208,_209){
-this.isIE=navigator.userAgent.toLowerCase().indexOf("msie")>=0;
-this.liveGrid=_208;
-this.metaData=_208.metaData;
-this.createScrollBar();
-this.scrollTimeout=null;
-this.lastScrollPos=0;
-this.viewPort=_209;
-this.rows=new Array();
-},isUnPlugged:function(){
-return this.scrollerDiv.onscroll==null;
-},plugin:function(){
-this.scrollerDiv.onscroll=this.handleScroll.bindAsEventListener(this);
-},unplug:function(){
-this.scrollerDiv.onscroll=null;
-},sizeIEHeaderHack:function(){
-if(!this.isIE){
-return;
-}
-var _210=$(this.liveGrid.tableId+"_header");
-if(_210){
-_210.rows[0].cells[0].style.width=(_210.rows[0].cells[0].offsetWidth+1)+"px";
-}
-},createScrollBar:function(){
-var _211=this.liveGrid.viewPort.visibleHeight();
-this.scrollerDiv=document.createElement("div");
-var _212=this.scrollerDiv.style;
-_212.borderRight=this.liveGrid.options.scrollerBorderRight;
-_212.position="relative";
-_212.left=this.isIE?"-6px":"-3px";
-_212.width="19px";
-_212.height=_211+"px";
-_212.overflow="auto";
-this.heightDiv=document.createElement("div");
-this.heightDiv.style.width="1px";
-this.heightDiv.style.height=parseInt(_211*this.metaData.getTotalRows()/this.metaData.getPageSize())+"px";
-this.scrollerDiv.appendChild(this.heightDiv);
-this.scrollerDiv.onscroll=this.handleScroll.bindAsEventListener(this);
-var _213=this.liveGrid.table;
-_213.parentNode.parentNode.insertBefore(this.scrollerDiv,_213.parentNode.nextSibling);
-var _214=this.isIE?"mousewheel":"DOMMouseScroll";
-Event.observe(_213,_214,function(evt){
-if(evt.wheelDelta>=0||evt.detail<0){
-this.scrollerDiv.scrollTop-=(2*this.viewPort.rowHeight);
-}else{
-this.scrollerDiv.scrollTop+=(2*this.viewPort.rowHeight);
-}
-this.handleScroll(false);
-}.bindAsEventListener(this),false);
-},updateSize:function(){
-var _216=this.liveGrid.table;
-var _217=this.viewPort.visibleHeight();
-this.heightDiv.style.height=parseInt(_217*this.metaData.getTotalRows()/this.metaData.getPageSize())+"px";
-},rowToPixel:function(_218){
-return (_218/this.metaData.getTotalRows())*this.heightDiv.offsetHeight;
-},moveScroll:function(_219){
-this.scrollerDiv.scrollTop=this.rowToPixel(_219);
-if(this.metaData.options.onscroll){
-this.metaData.options.onscroll(this.liveGrid,_219);
-}
-},handleScroll:function(){
-if(this.scrollTimeout){
-clearTimeout(this.scrollTimeout);
-}
-var _220=this.lastScrollPos-this.scrollerDiv.scrollTop;
-if(_220!=0){
-var r=this.scrollerDiv.scrollTop%this.viewPort.rowHeight;
-if(r!=0){
-this.unplug();
-if(_220<0){
-this.scrollerDiv.scrollTop+=(this.viewPort.rowHeight-r);
-}else{
-this.scrollerDiv.scrollTop-=r;
-}
-this.plugin();
-}
-}
-var _222=parseInt(this.scrollerDiv.scrollTop/this.viewPort.rowHeight);
-this.liveGrid.requestContentRefresh(_222);
-this.viewPort.scrollTo(this.scrollerDiv.scrollTop);
-if(this.metaData.options.onscroll){
-this.metaData.options.onscroll(this.liveGrid,_222);
-}
-this.scrollTimeout=setTimeout(this.scrollIdle.bind(this),1200);
-this.lastScrollPos=this.scrollerDiv.scrollTop;
-},scrollIdle:function(){
-if(this.metaData.options.onscrollidle){
-this.metaData.options.onscrollidle();
-}
-}};
-Rico.LiveGridBuffer=Class.create();
-Rico.LiveGridBuffer.prototype={initialize:function(_223,_224){
-this.startPos=0;
-this.size=0;
-this.metaData=_223;
-this.rows=new Array();
-this.updateInProgress=false;
-this.viewPort=_224;
-this.maxBufferSize=_223.getLargeBufferSize()*2;
-this.maxFetchSize=_223.getLargeBufferSize();
-this.lastOffset=0;
-},getBlankRow:function(){
-if(!this.blankRow){
-this.blankRow=new Array();
-for(var i=0;i<this.metaData.columnCount;i++){
-this.blankRow[i]="&nbsp;";
-}
-}
-return this.blankRow;
-},loadRows:function(_225){
-var _226=_225.getElementsByTagName("rows")[0];
-this.updateUI=_226.getAttribute("update_ui")=="true";
-var _227=new Array();
-var trs=_226.getElementsByTagName("tr");
-for(var i=0;i<trs.length;i++){
-var row=_227[i]=new Array();
-var _230=trs[i].getElementsByTagName("td");
-for(var j=0;j<_230.length;j++){
-var cell=_230[j];
-var _232=cell.getAttribute("convert_spaces")=="true";
-var _233=RicoUtil.getContentAsString(cell);
-row[j]=_232?this.convertSpaces(_233):_233;
-if(!row[j]){
-row[j]="&nbsp;";
-}
-}
-}
-return _227;
-},update:function(_234,_235){
-var _236=this.loadRows(_234);
-if(this.rows.length==0){
-this.rows=_236;
-this.size=this.rows.length;
-this.startPos=_235;
-return;
-}
-if(_235>this.startPos){
-if(this.startPos+this.rows.length<_235){
-this.rows=_236;
-this.startPos=_235;
-}else{
-this.rows=this.rows.concat(_236.slice(0,_236.length));
-if(this.rows.length>this.maxBufferSize){
-var _237=this.rows.length;
-this.rows=this.rows.slice(this.rows.length-this.maxBufferSize,this.rows.length);
-this.startPos=this.startPos+(_237-this.rows.length);
-}
-}
-}else{
-if(_235+_236.length<this.startPos){
-this.rows=_236;
-}else{
-this.rows=_236.slice(0,this.startPos).concat(this.rows);
-if(this.rows.length>this.maxBufferSize){
-this.rows=this.rows.slice(0,this.maxBufferSize);
-}
-}
-this.startPos=_235;
-}
-this.size=this.rows.length;
-},clear:function(){
-this.rows=new Array();
-this.startPos=0;
-this.size=0;
-},isOverlapping:function(_238,size){
-return ((_238<this.endPos())&&(this.startPos<_238+size))||(this.endPos()==0);
-},isInRange:function(_240){
-return (_240>=this.startPos)&&(_240+this.metaData.getPageSize()<=this.endPos());
-},isNearingTopLimit:function(_241){
-return _241-this.startPos<this.metaData.getLimitTolerance();
-},endPos:function(){
-return this.startPos+this.rows.length;
-},isNearingBottomLimit:function(_242){
-return this.endPos()-(_242+this.metaData.getPageSize())<this.metaData.getLimitTolerance();
-},isAtTop:function(){
-return this.startPos==0;
-},isAtBottom:function(){
-return this.endPos()==this.metaData.getTotalRows();
-},isNearingLimit:function(_243){
-return (!this.isAtTop()&&this.isNearingTopLimit(_243))||(!this.isAtBottom()&&this.isNearingBottomLimit(_243));
-},getFetchSize:function(_244){
-var _245=this.getFetchOffset(_244);
-var _246=0;
-if(_245>=this.startPos){
-var _247=this.maxFetchSize+_245;
-if(_247>this.metaData.totalRows){
-_247=this.metaData.totalRows;
-}
-_246=_247-_245;
-if(_245==0&&_246<this.maxFetchSize){
-_246=this.maxFetchSize;
-}
-}else{
-var _246=this.startPos-_245;
-if(_246>this.maxFetchSize){
-_246=this.maxFetchSize;
-}
-}
-return _246;
-},getFetchOffset:function(_248){
-var _249=_248;
-if(_248>this.startPos){
-_249=(_248>this.endPos())?_248:this.endPos();
-}else{
-if(_248+this.maxFetchSize>=this.startPos){
-var _249=this.startPos-this.maxFetchSize;
-if(_249<0){
-_249=0;
-}
-}
-}
-this.lastOffset=_249;
-return _249;
-},getRows:function(_250,_251){
-var _252=_250-this.startPos;
-var _253=_252+_251;
-if(_253>this.size){
-_253=this.size;
-}
-var _254=new Array();
-var _255=0;
-for(var i=_252;i<_253;i++){
-_254[_255++]=this.rows[i];
-}
-return _254;
-},convertSpaces:function(s){
-return s.split(" ").join("&nbsp;");
-}};
-Rico.GridViewPort=Class.create();
-Rico.GridViewPort.prototype={initialize:function(_256,_257,_258,_259,_260){
-this.lastDisplayedStartPos=0;
-this.div=_256.parentNode;
-this.table=_256;
-this.rowHeight=_257;
-this.div.style.height=this.rowHeight*_258;
-this.div.style.overflow="hidden";
-this.buffer=_259;
-this.liveGrid=_260;
-this.visibleRows=_258+1;
-this.lastPixelOffset=0;
-this.startPos=0;
-},populateRow:function(_261,row){
-for(var j=0;j<row.length;j++){
-_261.cells[j].innerHTML=row[j];
-}
-},bufferChanged:function(){
-this.refreshContents(parseInt(this.lastPixelOffset/this.rowHeight));
-},clearRows:function(){
-if(!this.isBlank){
-this.liveGrid.table.className=this.liveGrid.options.loadingClass;
-for(var i=0;i<this.visibleRows;i++){
-this.populateRow(this.table.rows[i],this.buffer.getBlankRow());
-}
-this.isBlank=true;
-}
-},clearContents:function(){
-this.clearRows();
-this.scrollTo(0);
-this.startPos=0;
-this.lastStartPos=-1;
-},refreshContents:function(_262){
-if(_262==this.lastRowPos&&!this.isPartialBlank&&!this.isBlank){
-return;
-}
-if((_262+this.visibleRows<this.buffer.startPos)||(this.buffer.startPos+this.buffer.size<_262)||(this.buffer.size==0)){
-this.clearRows();
-return;
-}
-this.isBlank=false;
-var _263=this.buffer.startPos>_262;
-var _264=_263?this.buffer.startPos:_262;
-var _265=(this.buffer.startPos+this.buffer.size<_262+this.visibleRows)?this.buffer.startPos+this.buffer.size:_262+this.visibleRows;
-var _266=_265-_264;
-var rows=this.buffer.getRows(_264,_266);
-var _268=this.visibleRows-_266;
-var _269=_263?0:_266;
-var _270=_263?_268:0;
-for(var i=0;i<rows.length;i++){
-this.populateRow(this.table.rows[i+_270],rows[i]);
-}
-for(var i=0;i<_268;i++){
-this.populateRow(this.table.rows[i+_269],this.buffer.getBlankRow());
-}
-this.isPartialBlank=_268>0;
-this.lastRowPos=_262;
-this.liveGrid.table.className=this.liveGrid.options.tableClass;
-var _271=this.liveGrid.options.onRefreshComplete;
-if(_271!=null){
-_271();
-}
-},scrollTo:function(_272){
-if(this.lastPixelOffset==_272){
-return;
-}
-this.refreshContents(parseInt(_272/this.rowHeight));
-this.div.scrollTop=_272%this.rowHeight;
-this.lastPixelOffset=_272;
-},visibleHeight:function(){
-return parseInt(RicoUtil.getElementsComputedStyle(this.div,"height"));
-}};
-Rico.LiveGridRequest=Class.create();
-Rico.LiveGridRequest.prototype={initialize:function(_273,_274){
-this.requestOffset=_273;
-}};
-Rico.LiveGrid=Class.create();
-Rico.LiveGrid.prototype={initialize:function(_275,_276,_277,url,_279,_280){
-this.options={tableClass:$(_275).className,loadingClass:$(_275).className,scrollerBorderRight:"1px solid #ababab",bufferTimeout:20000,sortAscendImg:"images/sort_asc.gif",sortDescendImg:"images/sort_desc.gif",sortImageWidth:9,sortImageHeight:5,ajaxSortURLParms:[],onRefreshComplete:null,requestParameters:null,inlineStyles:true};
-Object.extend(this.options,_279||{});
-this.ajaxOptions={parameters:null};
-Object.extend(this.ajaxOptions,_280||{});
-this.tableId=_275;
-this.table=$(_275);
-this.addLiveGridHtml();
-var _281=this.table.rows[0].cells.length;
-this.metaData=new Rico.LiveGridMetaData(_276,_277,_281,_279);
-this.buffer=new Rico.LiveGridBuffer(this.metaData);
-var _282=this.table.rows.length;
-this.viewPort=new Rico.GridViewPort(this.table,this.table.offsetHeight/_282,_276,this.buffer,this);
-this.scroller=new Rico.LiveGridScroller(this,this.viewPort);
-this.options.sortHandler=this.sortHandler.bind(this);
-if($(_275+"_header")){
-this.sort=new Rico.LiveGridSort(_275+"_header",this.options);
-}
-this.processingRequest=null;
-this.unprocessedRequest=null;
-this.initAjax(url);
-if(this.options.prefetchBuffer||this.options.prefetchOffset>0){
-var _283=0;
-if(this.options.offset){
-_283=this.options.offset;
-this.scroller.moveScroll(_283);
-this.viewPort.scrollTo(this.scroller.rowToPixel(_283));
-}
-if(this.options.sortCol){
-this.sortCol=_279.sortCol;
-this.sortDir=_279.sortDir;
-}
-this.requestContentRefresh(_283);
-}
-},addLiveGridHtml:function(){
-if(this.table.getElementsByTagName("thead").length>0){
-var _284=this.table.cloneNode(true);
-_284.setAttribute("id",this.tableId+"_header");
-_284.setAttribute("class",this.table.className+"_header");
-for(var i=0;i<_284.tBodies.length;i++){
-_284.removeChild(_284.tBodies[i]);
-}
-this.table.deleteTHead();
-this.table.parentNode.insertBefore(_284,this.table);
-}
-new Insertion.Before(this.table,"<div id='"+this.tableId+"_container'></div>");
-this.table.previousSibling.appendChild(this.table);
-new Insertion.Before(this.table,"<div id='"+this.tableId+"_viewport' style='float:left;'></div>");
-this.table.previousSibling.appendChild(this.table);
-},resetContents:function(){
-this.scroller.moveScroll(0);
-this.buffer.clear();
-this.viewPort.clearContents();
-},sortHandler:function(_285){
-this.sortCol=_285.name;
-this.sortDir=_285.currentSort;
-this.resetContents();
-this.requestContentRefresh(0);
-},setTotalRows:function(_286){
-this.resetContents();
-this.metaData.setTotalRows(_286);
-this.scroller.updateSize();
-},initAjax:function(url){
-ajaxEngine.registerRequest(this.tableId+"_request",url);
-ajaxEngine.registerAjaxObject(this.tableId+"_updater",this);
-},invokeAjax:function(){
-},handleTimedOut:function(){
-this.processingRequest=null;
-this.processQueuedRequest();
-},fetchBuffer:function(_287){
-if(this.buffer.isInRange(_287)&&!this.buffer.isNearingLimit(_287)){
-return;
-}
-if(this.processingRequest){
-this.unprocessedRequest=new Rico.LiveGridRequest(_287);
-return;
-}
-var _288=this.buffer.getFetchOffset(_287);
-this.processingRequest=new Rico.LiveGridRequest(_287);
-this.processingRequest.bufferOffset=_288;
-var _289=this.buffer.getFetchSize(_287);
-var _290=false;
-var _291;
-if(this.options.requestParameters){
-_291=this._createQueryString(this.options.requestParameters,0);
-}
-_291=(_291==null)?"":_291+"&";
-_291=_291+"id="+this.tableId+"&page_size="+_289+"&offset="+_288;
-if(this.sortCol){
-_291=_291+"&sort_col="+escape(this.sortCol)+"&sort_dir="+this.sortDir;
-}
-this.ajaxOptions.parameters=_291;
-ajaxEngine.sendRequest(this.tableId+"_request",this.ajaxOptions);
-this.timeoutHandler=setTimeout(this.handleTimedOut.bind(this),this.options.bufferTimeout);
-},setRequestParams:function(){
-this.options.requestParameters=[];
-for(var i=0;i<arguments.length;i++){
-this.options.requestParameters[i]=arguments[i];
-}
-},requestContentRefresh:function(_292){
-this.fetchBuffer(_292);
-},ajaxUpdate:function(_293){
-try{
-clearTimeout(this.timeoutHandler);
-this.buffer.update(_293,this.processingRequest.bufferOffset);
-this.viewPort.bufferChanged();
-}
-catch(err){
-}
-finally{
-this.processingRequest=null;
-}
-this.processQueuedRequest();
-},_createQueryString:function(_294,_295){
-var _296="";
-if(!_294){
-return _296;
-}
-for(var i=_295;i<_294.length;i++){
-if(i!=_295){
-_296+="&";
-}
-var _297=_294[i];
-if(_297.name!=undefined&&_297.value!=undefined){
-_296+=_297.name+"="+escape(_297.value);
-}else{
-var ePos=_297.indexOf("=");
-var _299=_297.substring(0,ePos);
-var _300=_297.substring(ePos+1);
-_296+=_299+"="+escape(_300);
-}
-}
-return _296;
-},processQueuedRequest:function(){
-if(this.unprocessedRequest!=null){
-this.requestContentRefresh(this.unprocessedRequest.requestOffset);
-this.unprocessedRequest=null;
-}
-}};
-Rico.LiveGridSort=Class.create();
-Rico.LiveGridSort.prototype={initialize:function(_301,_302){
-this.headerTableId=_301;
-this.headerTable=$(_301);
-this.options=_302;
-this.setOptions();
-this.applySortBehavior();
-if(this.options.sortCol){
-this.setSortUI(this.options.sortCol,this.options.sortDir);
-}
-},setSortUI:function(_303,_304){
-var cols=this.options.columns;
-for(var i=0;i<cols.length;i++){
-if(cols[i].name==_303){
-this.setColumnSort(i,_304);
-break;
-}
-}
-},setOptions:function(){
-new Image().src=this.options.sortAscendImg;
-new Image().src=this.options.sortDescendImg;
-this.sort=this.options.sortHandler;
-if(!this.options.columns){
-this.options.columns=this.introspectForColumnInfo();
-}else{
-this.options.columns=this.convertToTableColumns(this.options.columns);
-}
-},applySortBehavior:function(){
-var _306=this.headerTable.rows[0];
-var _307=_306.cells;
-for(var i=0;i<_307.length;i++){
-this.addSortBehaviorToColumn(i,_307[i]);
-}
-},addSortBehaviorToColumn:function(n,cell){
-if(this.options.columns[n].isSortable()){
-cell.id=this.headerTableId+"_"+n;
-cell.style.cursor="pointer";
-cell.onclick=this.headerCellClicked.bindAsEventListener(this);
-cell.innerHTML=cell.innerHTML+"<span id=\""+this.headerTableId+"_img_"+n+"\">"+"&nbsp;&nbsp;&nbsp;</span>";
-}
-},headerCellClicked:function(evt){
-var _308=evt.target?evt.target:evt.srcElement;
-var _309=_308.id;
-var _310=parseInt(_309.substring(_309.lastIndexOf("_")+1));
-var _311=this.getSortedColumnIndex();
-if(_311!=-1){
-if(_311!=_310){
-this.removeColumnSort(_311);
-this.setColumnSort(_310,Rico.TableColumn.SORT_ASC);
-}else{
-this.toggleColumnSort(_311);
-}
-}else{
-this.setColumnSort(_310,Rico.TableColumn.SORT_ASC);
-}
-if(this.options.sortHandler){
-this.options.sortHandler(this.options.columns[_310]);
-}
-},removeColumnSort:function(n){
-this.options.columns[n].setUnsorted();
-this.setSortImage(n);
-},setColumnSort:function(n,_312){
-this.options.columns[n].setSorted(_312);
-this.setSortImage(n);
-},toggleColumnSort:function(n){
-this.options.columns[n].toggleSort();
-this.setSortImage(n);
-},setSortImage:function(n){
-var _313=this.options.columns[n].getSortDirection();
-var _314=$(this.headerTableId+"_img_"+n);
-if(_313==Rico.TableColumn.UNSORTED){
-_314.innerHTML="&nbsp;&nbsp;";
-}else{
-if(_313==Rico.TableColumn.SORT_ASC){
-_314.innerHTML="&nbsp;&nbsp;<img width=\""+this.options.sortImageWidth+"\" "+"height=\""+this.options.sortImageHeight+"\" "+"src=\""+this.options.sortAscendImg+"\"/>";
-}else{
-if(_313==Rico.TableColumn.SORT_DESC){
-_314.innerHTML="&nbsp;&nbsp;<img width=\""+this.options.sortImageWidth+"\" "+"height=\""+this.options.sortImageHeight+"\" "+"src=\""+this.options.sortDescendImg+"\"/>";
-}
-}
-}
-},getSortedColumnIndex:function(){
-var cols=this.options.columns;
-for(var i=0;i<cols.length;i++){
-if(cols[i].isSorted()){
-return i;
-}
-}
-return -1;
-},introspectForColumnInfo:function(){
-var _315=new Array();
-var _316=this.headerTable.rows[0];
-var _317=_316.cells;
-for(var i=0;i<_317.length;i++){
-_315.push(new Rico.TableColumn(this.deriveColumnNameFromCell(_317[i],i),true));
-}
-return _315;
-},convertToTableColumns:function(cols){
-var _318=new Array();
-for(var i=0;i<cols.length;i++){
-_318.push(new Rico.TableColumn(cols[i][0],cols[i][1]));
-}
-return _318;
-},deriveColumnNameFromCell:function(cell,_319){
-var _320=cell.innerText!=undefined?cell.innerText:cell.textContent;
-return _320?_320.toLowerCase().split(" ").join("_"):"col_"+_319;
-}};
-Rico.TableColumn=Class.create();
-Rico.TableColumn.UNSORTED=0;
-Rico.TableColumn.SORT_ASC="ASC";
-Rico.TableColumn.SORT_DESC="DESC";
-Rico.TableColumn.prototype={initialize:function(name,_322){
-this.name=name;
-this.sortable=_322;
-this.currentSort=Rico.TableColumn.UNSORTED;
-},isSortable:function(){
-return this.sortable;
-},isSorted:function(){
-return this.currentSort!=Rico.TableColumn.UNSORTED;
-},getSortDirection:function(){
-return this.currentSort;
-},toggleSort:function(){
-if(this.currentSort==Rico.TableColumn.UNSORTED||this.currentSort==Rico.TableColumn.SORT_DESC){
-this.currentSort=Rico.TableColumn.SORT_ASC;
-}else{
-if(this.currentSort==Rico.TableColumn.SORT_ASC){
-this.currentSort=Rico.TableColumn.SORT_DESC;
-}
-}
-},setUnsorted:function(_323){
-this.setSorted(Rico.TableColumn.UNSORTED);
-},setSorted:function(_324){
-this.currentSort=_324;
-}};
-Rico.ArrayExtensions=new Array();
-if(Object.prototype.extend){
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Object.prototype.extend;
-}else{
-Object.prototype.extend=function(_325){
-return Object.extend.apply(this,[this,_325]);
-};
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Object.prototype.extend;
-}
-if(Array.prototype.push){
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.push;
-}
-if(!Array.prototype.remove){
-Array.prototype.remove=function(dx){
-if(isNaN(dx)||dx>this.length){
-return false;
-}
-for(var i=0,n=0;i<this.length;i++){
-if(i!=dx){
-this[n++]=this[i];
-}
-}
-this.length-=1;
-};
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.remove;
-}
-if(!Array.prototype.removeItem){
-Array.prototype.removeItem=function(item){
-for(var i=0;i<this.length;i++){
-if(this[i]==item){
-this.remove(i);
-break;
-}
-}
+this.timer = setTimeout(this.fadeTo.bind(this), stepDuration);
+ },
+changeOpacityBy: function(v) {
+var currentOpacity = this.getElementOpacity();
+var newOpacity = Math.max(0, Math.min(currentOpacity+v, 1));
+this.element.ricoOpacity = newOpacity;
+this.element.style.filter = "alpha(opacity:"+Math.round(newOpacity*100)+")";
+this.element.style.opacity = newOpacity;
+ _toAbsolute: function(element,accountForDocScroll) {
+if ( navigator.userAgent.toLowerCase().indexOf("msie") == -1 )
+ return this._toAbsoluteMozilla(element,accountForDocScroll);
+var x = 0;
+var y = 0;
+var parent = element;
+while ( parent ) {
+var borderXOffset = 0;
+ var borderYOffset = 0;
+ if ( parent != element ) {
+var borderXOffset = parseInt(this.getElementsComputedStyle(parent, "borderLeftWidth" ));
+var borderYOffset = parseInt(this.getElementsComputedStyle(parent, "borderTopWidth" ));
+borderXOffset = isNaN(borderXOffset) ? 0 : borderXOffset;
+borderYOffset = isNaN(borderYOffset) ? 0 : borderYOffset;
+ }
+x += parent.offsetLeft - parent.scrollLeft + borderXOffset;
+ y += parent.offsetTop - parent.scrollTop + borderYOffset;
+ parent = parent.offsetParent;
+}
+if ( accountForDocScroll ) {
+ x -= this.docScrollLeft();
+ y -= this.docScrollTop();
+}
+return { x:x, y:y };
+ },
+_toAbsoluteMozilla: function(element,accountForDocScroll) {
+var x = 0;
+var y = 0;
+var parent = element;
+while ( parent ) {
+ x += parent.offsetLeft;
+ y += parent.offsetTop;
+ parent = parent.offsetParent;
+}
+parent = element;
+while ( parent &&
+parent != document.body &&
+parent != document.documentElement ) {
+ if ( parent.scrollLeft)
+x -= parent.scrollLeft;
+ if ( parent.scrollTop )
+y -= parent.scrollTop;
+ parent = parent.parentNode;
+}
+if ( accountForDocScroll ) {
+ x -= this.docScrollLeft();
+ y -= this.docScrollTop();
+}
+return { x:x, y:y };
+ },
+docScrollLeft: function() {
+if ( window.pageXOffset )
+ return window.pageXOffset;
+else if ( document.documentElement && document.documentElement.scrollLeft )
+ return document.documentElement.scrollLeft;
+else if ( document.body )
+ return document.body.scrollLeft;
+else
+ return 0;
+ },
+docScrollTop: function() {
+if ( window.pageYOffset )
+ return window.pageYOffset;
+else if ( document.documentElement && document.documentElement.scrollTop )
+ return document.documentElement.scrollTop;
+else if ( document.body )
+ return document.body.scrollTop;
+else
+ return 0;
+ }
};
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.removeItem;
-}
-if(!Array.prototype.indices){
-Array.prototype.indices=function(){
-var _327=new Array();
-for(index in this){
-var _328=false;
-for(var i=0;i<Rico.ArrayExtensions.length;i++){
-if(this[index]==Rico.ArrayExtensions[i]){
-_328=true;
-break;
-}
-}
-if(!_328){
-_327[_327.length]=index;
-}
-}
-return _327;
-};
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.indices;
-}
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.unique;
-Rico.ArrayExtensions[Rico.ArrayExtensions.length]=Array.prototype.inArray;
-if(window.DOMParser&&window.XMLSerializer&&window.Node&&Node.prototype&&Node.prototype.__defineGetter__){
-if(!Document.prototype.loadXML){
-Document.prototype.loadXML=function(s){
-var doc2=(new DOMParser()).parseFromString(s,"text/xml");
-while(this.hasChildNodes()){
-this.removeChild(this.lastChild);
-}
-for(var i=0;i<doc2.childNodes.length;i++){
-this.appendChild(this.importNode(doc2.childNodes[i],true));
-}
-};
-}
-Document.prototype.__defineGetter__("xml",function(){
-return (new XMLSerializer()).serializeToString(this);
-});
-}
-document.getElementsByTagAndClassName=function(_330,_331){
-if(_330==null){
-_330="*";
-}
-var _332=document.getElementsByTagName(_330)||document.all;
-var _333=new Array();
-if(_331==null){
-return _332;
-}
-for(var i=0;i<_332.length;i++){
-var _334=_332[i];
-var _335=_334.className.split(" ");
-for(var j=0;j<_335.length;j++){
-if(_335[j]==_331){
-_333.push(_334);
-break;
-}
-}
-}
-return _333;
+Prado.RicoLiveGrid = Class.create();
+Prado.RicoLiveGrid.prototype = Object.extend(Rico.LiveGrid.prototype,
+{
+initialize : function(tableId, options)
+{
+ this.options = {
+tableClass: $(tableId).className || '',
+loadingClass: $(tableId).className || '',
+scrollerBorderRight: '1px solid #ababab',
+bufferTimeout:20000,
+sortAscendImg:'images/sort_asc.gif',
+sortDescendImg: 'images/sort_desc.gif',
+sortImageWidth: 9,
+sortImageHeight:5,
+ajaxSortURLParms: [],
+onRefreshComplete:null,
+requestParameters:null,
+inlineStyles: true,
+visibleRows:10,
+totalRows:0,
+initialOffset:0
};
-var RicoUtil={getElementsComputedStyle:function(_336,_337,_338){
-if(arguments.length==2){
-_338=_337;
-}
-var el=$(_336);
-if(el.currentStyle){
-return el.currentStyle[_337];
-}else{
-return document.defaultView.getComputedStyle(el,null).getPropertyValue(_338);
-}
-},createXmlDocument:function(){
-if(document.implementation&&document.implementation.createDocument){
-var doc=document.implementation.createDocument("","",null);
-if(doc.readyState==null){
-doc.readyState=1;
-doc.addEventListener("load",function(){
-doc.readyState=4;
-if(typeof doc.onreadystatechange=="function"){
-doc.onreadystatechange();
-}
-},false);
-}
-return doc;
-}
-if(window.ActiveXObject){
-return Try.these(function(){
-return new ActiveXObject("MSXML2.DomDocument");
-},function(){
-return new ActiveXObject("Microsoft.DomDocument");
-},function(){
-return new ActiveXObject("MSXML.DomDocument");
-},function(){
-return new ActiveXObject("MSXML3.DomDocument");
-})||false;
-}
-return null;
-},getContentAsString:function(_340){
-return _340.xml!=undefined?this._getContentAsStringIE(_340):this._getContentAsStringMozilla(_340);
-},_getContentAsStringIE:function(_341){
-var _342="";
-for(var i=0;i<_341.childNodes.length;i++){
-var n=_341.childNodes[i];
-if(n.nodeType==4){
-_342+=n.nodeValue;
-}else{
-_342+=n.xml;
-}
-}
-return _342;
-},_getContentAsStringMozilla:function(_343){
-var _344=new XMLSerializer();
-var _345="";
-for(var i=0;i<_343.childNodes.length;i++){
-var n=_343.childNodes[i];
-if(n.nodeType==4){
-_345+=n.nodeValue;
-}else{
-_345+=_344.serializeToString(n);
-}
-}
-return _345;
-},toViewportPosition:function(_346){
-return this._toAbsolute(_346,true);
-},toDocumentPosition:function(_347){
-return this._toAbsolute(_347,false);
-},_toAbsolute:function(_348,_349){
-if(navigator.userAgent.toLowerCase().indexOf("msie")==-1){
-return this._toAbsoluteMozilla(_348,_349);
-}
-var x=0;
-var y=0;
-var _350=_348;
-while(_350){
-var _351=0;
-var _352=0;
-if(_350!=_348){
-var _351=parseInt(this.getElementsComputedStyle(_350,"borderLeftWidth"));
-var _352=parseInt(this.getElementsComputedStyle(_350,"borderTopWidth"));
-_351=isNaN(_351)?0:_351;
-_352=isNaN(_352)?0:_352;
-}
-x+=_350.offsetLeft-_350.scrollLeft+_351;
-y+=_350.offsetTop-_350.scrollTop+_352;
-_350=_350.offsetParent;
-}
-if(_349){
-x-=this.docScrollLeft();
-y-=this.docScrollTop();
-}
-return {x:x,y:y};
-},_toAbsoluteMozilla:function(_353,_354){
-var x=0;
-var y=0;
-var _355=_353;
-while(_355){
-x+=_355.offsetLeft;
-y+=_355.offsetTop;
-_355=_355.offsetParent;
-}
-_355=_353;
-while(_355&&_355!=document.body&&_355!=document.documentElement){
-if(_355.scrollLeft){
-x-=_355.scrollLeft;
-}
-if(_355.scrollTop){
-y-=_355.scrollTop;
-}
-_355=_355.parentNode;
-}
-if(_354){
-x-=this.docScrollLeft();
-y-=this.docScrollTop();
-}
-return {x:x,y:y};
-},docScrollLeft:function(){
-if(window.pageXOffset){
-return window.pageXOffset;
-}else{
-if(document.documentElement&&document.documentElement.scrollLeft){
-return document.documentElement.scrollLeft;
-}else{
-if(document.body){
-return document.body.scrollLeft;
-}else{
-return 0;
-}
-}
-}
-},docScrollTop:function(){
-if(window.pageYOffset){
-return window.pageYOffset;
-}else{
-if(document.documentElement&&document.documentElement.scrollTop){
-return document.documentElement.scrollTop;
-}else{
-if(document.body){
-return document.body.scrollTop;
-}else{
-return 0;
-}
-}
-}
-}};
-Prado.RicoLiveGrid=Class.create();
-Prado.RicoLiveGrid.prototype=Object.extend(Rico.LiveGrid.prototype,{initialize:function(_356,_357){
-this.options={tableClass:$(_356).className||"",loadingClass:$(_356).className||"",scrollerBorderRight:"1px solid #ababab",bufferTimeout:20000,sortAscendImg:"images/sort_asc.gif",sortDescendImg:"images/sort_desc.gif",sortImageWidth:9,sortImageHeight:5,ajaxSortURLParms:[],onRefreshComplete:null,requestParameters:null,inlineStyles:true,visibleRows:10,totalRows:0,initialOffset:0};
-Object.extend(this.options,_357||{});
-this.tableId=_356;
-this.table=$(_356);
+Object.extend(this.options, options || {});
+this.tableId = tableId;
+this.table = $(tableId);
this.addLiveGridHtml();
-var _358=this.table.rows[0].cells.length;
-this.metaData=new Rico.LiveGridMetaData(this.options.visibleRows,this.options.totalRows,_358,_357);
-this.buffer=new Rico.LiveGridBuffer(this.metaData);
-var _359=this.table.rows.length;
-this.viewPort=new Rico.GridViewPort(this.table,this.table.offsetHeight/_359,this.options.visibleRows,this.buffer,this);
-this.scroller=new Rico.LiveGridScroller(this,this.viewPort);
-this.options.sortHandler=this.sortHandler.bind(this);
-if($(_356+"_header")){
-this.sort=new Rico.LiveGridSort(_356+"_header",this.options);
-}
-this.processingRequest=null;
-this.unprocessedRequest=null;
-if(this.options.initialOffset>=0){
-var _360=this.options.initialOffset;
-this.scroller.moveScroll(_360);
-this.viewPort.scrollTo(this.scroller.rowToPixel(_360));
-if(this.options.sortCol){
-this.sortCol=_357.sortCol;
-this.sortDir=_357.sortDir;
-}
-var grid=this;
-setTimeout(function(){
-grid.requestContentRefresh(_360);
-},100);
-}
-},fetchBuffer:function(_362){
-if(this.buffer.isInRange(_362)&&!this.buffer.isNearingLimit(_362)){
-return;
-}
-if(this.processingRequest){
-this.unprocessedRequest=new Rico.LiveGridRequest(_362);
-return;
-}
-var _363=this.buffer.getFetchOffset(_362);
-this.processingRequest=new Rico.LiveGridRequest(_362);
-this.processingRequest.bufferOffset=_363;
-var _364=this.buffer.getFetchSize(_362);
-var _365=false;
-var _366={"page_size":_364,"offset":_363};
-if(this.sortCol){
-Object.extend(_366,{"sort_col":this.sortCol,"sort_dir":this.sortDir});
-}
-Prado.Callback(this.tableId,_366,this.ajaxUpdate.bind(this),this.options);
-this.timeoutHandler=setTimeout(this.handleTimedOut.bind(this),this.options.bufferTimeout);
-},ajaxUpdate:function(_367,_368){
-try{
-clearTimeout(this.timeoutHandler);
-this.buffer.update(_367,this.processingRequest.bufferOffset);
-this.viewPort.bufferChanged();
-}
-catch(err){
-}
-finally{
-this.processingRequest=null;
-}
+var columnCount= this.table.rows[0].cells.length;
+this.metaData= new Rico.LiveGridMetaData(this.options.visibleRows, this.options.totalRows, columnCount, options);
+this.buffer= new Rico.LiveGridBuffer(this.metaData);
+var rowCount = this.table.rows.length;
+this.viewPort =new Rico.GridViewPort(this.table,
+this.table.offsetHeight/rowCount,
+this.options.visibleRows,
+this.buffer, this);
+this.scroller= new Rico.LiveGridScroller(this,this.viewPort);
+this.options.sortHandler = this.sortHandler.bind(this);
+if ( $(tableId + '_header') )
+ this.sort = new Rico.LiveGridSort(tableId + '_header', this.options)
+this.processingRequest = null;
+this.unprocessedRequest = null;
+if (this.options.initialOffset >= 0)
+{
+ var offset = this.options.initialOffset;
+this.scroller.moveScroll(offset);
+this.viewPort.scrollTo(this.scroller.rowToPixel(offset));
+ if (this.options.sortCol) {
+ this.sortCol = options.sortCol;
+ this.sortDir = options.sortDir;
+ }
+ var grid = this;
+ setTimeout(function(){
+ grid.requestContentRefresh(offset);
+ },100);
+}
+},
+fetchBuffer: function(offset)
+ {
+if ( this.buffer.isInRange(offset) &&
+ !this.buffer.isNearingLimit(offset)) {
+ return;
+ }
+if (this.processingRequest) {
+this.unprocessedRequest = new Rico.LiveGridRequest(offset);
+ return;
+}
+var bufferStartPos = this.buffer.getFetchOffset(offset);
+this.processingRequest = new Rico.LiveGridRequest(offset);
+this.processingRequest.bufferOffset = bufferStartPos;
+var fetchSize = this.buffer.getFetchSize(offset);
+var partialLoaded = false;
+var param =
+ {
+'page_size' : fetchSize,
+'offset' : bufferStartPos
+ };
+if(this.sortCol)
+ {
+Object.extend(param,
+ {
+'sort_col': this.sortCol,
+'sort_dir': this.sortDir
+});
+ }
+Prado.Callback(this.tableId, param, this.ajaxUpdate.bind(this), this.options);
+ this.timeoutHandler = setTimeout( this.handleTimedOut.bind(this), this.options.bufferTimeout);
+},
+ajaxUpdate: function(result, output)
+ {
+try {
+ clearTimeout( this.timeoutHandler );
+ this.buffer.update(result,this.processingRequest.bufferOffset);
+ this.viewPort.bufferChanged();
+}
+catch(err) {}
+finally {this.processingRequest = null; }
this.processQueuedRequest();
-}});
-Object.extend(Rico.LiveGridBuffer.prototype,{update:function(_369,_370){
-if(this.rows.length==0){
-this.rows=_369;
-this.size=this.rows.length;
-this.startPos=_370;
-return;
-}
-if(_370>this.startPos){
-if(this.startPos+this.rows.length<_370){
-this.rows=_369;
-this.startPos=_370;
-}else{
-this.rows=this.rows.concat(_369.slice(0,_369.length));
-if(this.rows.length>this.maxBufferSize){
-var _371=this.rows.length;
-this.rows=this.rows.slice(this.rows.length-this.maxBufferSize,this.rows.length);
-this.startPos=this.startPos+(_371-this.rows.length);
-}
-}
-}else{
-if(_370+_369.length<this.startPos){
-this.rows=_369;
-}else{
-this.rows=_369.slice(0,this.startPos).concat(this.rows);
-if(this.rows.length>this.maxBufferSize){
-this.rows=this.rows.slice(0,this.maxBufferSize);
-}
-}
-this.startPos=_370;
-}
-this.size=this.rows.length;
-}});
-Object.extend(Rico.GridViewPort.prototype,{populateRow:function(_372,row){
-if(isdef(_372)){
-for(var j=0;j<row.length;j++){
-_372.cells[j].innerHTML=row[j];
-}
-}
-}});
-
+ }
+});
+Object.extend(Rico.LiveGridBuffer.prototype,
+{
+ update: function(newRows, start)
+{
+ if (this.rows.length == 0) {
+ this.rows = newRows;
+ this.size = this.rows.length;
+ this.startPos = start;
+ return;
+}
+if (start > this.startPos) {
+ if (this.startPos + this.rows.length < start) {
+this.rows =newRows;
+this.startPos = start;
+ } else {
+this.rows = this.rows.concat( newRows.slice(0, newRows.length));
+if (this.rows.length > this.maxBufferSize) {
+ var fullSize = this.rows.length;
+ this.rows = this.rows.slice(this.rows.length - this.maxBufferSize, this.rows.length)
+ this.startPos = this.startPos +(fullSize - this.rows.length);
+}
+ }
+} else {
+ if (start + newRows.length < this.startPos) {
+this.rows =newRows;
+ } else {
+this.rows = newRows.slice(0, this.startPos).concat(this.rows);
+if (this.rows.length > this.maxBufferSize)
+ this.rows = this.rows.slice(0, this.maxBufferSize)
+ }
+ this.startPos =start;
+}
+this.size = this.rows.length;
+ }
+});
+Object.extend(Rico.GridViewPort.prototype,
+{
+ populateRow: function(htmlRow, row)
+ {
+ if(isdef(htmlRow))
+ {
+for (var j=0; j < row.length; j++) {
+ htmlRow.cells[j].innerHTML = row[j]
+}
+ }
+ }
+});
diff --git a/framework/Web/Javascripts/js/validator.js b/framework/Web/Javascripts/js/validator.js
index 867efc22..7d343d87 100644
--- a/framework/Web/Javascripts/js/validator.js
+++ b/framework/Web/Javascripts/js/validator.js
@@ -1,583 +1,507 @@
-Prado.Validation=Class.create();
-Prado.Validation.Util=Class.create();
-Prado.Validation.Util.toInteger=function(_1){
-var _2=/^\s*[-\+]?\d+\s*$/;
-if(_1.match(_2)==null){
-return null;
-}
-var _3=parseInt(_1,10);
-return (isNaN(_3)?null:_3);
-};
-Prado.Validation.Util.toDouble=function(_4,_5){
-_5=undef(_5)?".":_5;
-var _6=new RegExp("^\\s*([-\\+])?(\\d+)?(\\"+_5+"(\\d+))?\\s*$");
-var m=_4.match(_6);
-if(m==null){
-return null;
-}
-var _8=m[1]+(m[2].length>0?m[2]:"0")+"."+m[4];
-var _9=parseFloat(_8);
-return (isNaN(_9)?null:_9);
-};
-Prado.Validation.Util.toCurrency=function(_10,_11,_12,_13){
-_11=undef(_11)?",":_11;
-_13=undef(_13)?".":_13;
-_12=undef(_12)?2:_12;
-var exp=new RegExp("^\\s*([-\\+])?(((\\d+)\\"+_11+")*)(\\d+)"+((_12>0)?"(\\"+_13+"(\\d{1,"+_12+"}))?":"")+"\\s*$");
-var m=_10.match(exp);
-if(m==null){
-return null;
-}
-var _15=m[2]+m[5];
-var _16=m[1]+_15.replace(new RegExp("(\\"+_11+")","g"),"")+((_12>0)?"."+m[7]:"");
-var num=parseFloat(_16);
-return (isNaN(num)?null:num);
-};
-Prado.Validation.Util.toDate=function(_18,_19){
-var y=0;
-var m=-1;
-var d=0;
-var a=_18.split(/\W+/);
-var b=_19.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 "%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;
-}
-break;
-case "%M":
-min=parseInt(a[i],10);
-break;
-}
-}
-if(y!=0&&m!=-1&&d!=0){
-var _27=new Date(y,m,d,hr,min,0);
-return (isObject(_27)&&y==_27.getFullYear()&&m==_27.getMonth()&&d==_27.getDate())?_27.valueOf():null;
-}
-return null;
-};
-Prado.Validation.trim=function(_28){
-if(isString(_28)){
-return _28.trim();
+
+Prado.Validation =Class.create();
+Object.extend(Prado.Validation,
+{
+managers : {},
+validate : function(formID, groupID)
+{
+if(this.managers[formID])
+{
+return this.managers[formID].validate(groupID);
+}
+else
+{
+throw new Error("Form '"+form+"' is not registered with Prado.Validation");
+}
+},
+isValid : function(formID, groupID)
+{
+if(this.managers[formID])
+return this.managers[formID].isValid(groupID);
+return true;
+},
+addValidator : function(formID, validator)
+{
+if(this.managers[formID])
+this.managers[formID].addValidator(validator);
+else
+throw new Error("A validation manager for form '"+formID+"' needs to be created first.");
+},
+addSummary : function(formID, validator)
+{
+if(this.managers[formID])
+this.managers[formID].addSummary(validator);
+else
+throw new Error("A validation manager for form '"+formID+"' needs to be created first.");
}
-return "";
-};
-Prado.Validation.Util.focus=function(_29){
-var obj=$(_29);
-if(isObject(obj)&&isdef(obj.focus)){
-setTimeout(function(){
-obj.focus();
-},100);
+});
+Prado.Validation.prototype =
+{
+validators : [],
+summaries : [],
+groups : [],
+options : {},
+initialize : function(options)
+{
+this.options = options;
+Prado.Validation.managers[options.FormID] = this;
+},
+validate : function(group)
+{
+if(group)
+return this._validateGroup(group);
+else
+return this._validateNonGroup();
+},
+_validateGroup: function(groupID)
+{
+var valid = true;
+var manager = this;
+if(this.groups.include(groupID))
+{
+this.validators.each(function(validator)
+{
+if(validator.group == groupID)
+valid = valid & validator.validate(manager);
+else
+validator.hide();
+});
}
-return false;
-};
-Prado.Validation.validators=[];
-Prado.Validation.forms=[];
-Prado.Validation.summaries=[];
-Prado.Validation.groups=[];
-Prado.Validation.TargetGroups={};
-Prado.Validation.CurrentTargetGroup=null;
-Prado.Validation.HasTargetGroup=false;
-Prado.Validation.ActiveTarget=null;
-Prado.Validation.IsGroupValidation=false;
-Prado.Validation.AddForm=function(id){
-Prado.Validation.forms.push($(id));
-};
-Prado.Validation.AddTarget=function(id,_32){
-var _33=$(id);
-Event.observe(_33,"click",function(){
-Prado.Validation.ActiveTarget=_33;
-Prado.Validation.CurrentTargetGroup=Prado.Validation.TargetGroups[id];
+this.updateSummary(groupID, true);
+return valid;
+},
+_validateNonGroup : function()
+{
+var valid = true;
+var manager = this;
+this.validators.each(function(validator)
+{
+if(!validator.group)
+valid = valid & validator.validate(manager);
+else
+validator.hide();
+});
+this.updateSummary(null, true);
+return valid;
+},
+isValid : function(group)
+{
+if(group)
+return this._isValidGroup(group);
+else
+return this._isValidNonGroup();
+},
+_isValidNonGroup : function()
+{
+var valid = true;
+this.validators.each(function(validator)
+{
+if(!validator.group)
+valid = valid & validator.isValid;
+});
+return valid;
+},
+_isValidGroup : function(groupID)
+{
+var valid = true;
+if(this.groups.include(groupID))
+{
+this.validators.each(function(validator)
+{
+if(validator.group == groupID)
+valid = valid & validator.isValid;
});
-if(_32){
-Prado.Validation.TargetGroups[id]=_32;
-Prado.Validation.HasTargetGroup=true;
}
-};
-Prado.Validation.SetActiveGroup=function(_34,_35){
-Prado.Validation.ActiveTarget=_34;
-Prado.Validation.CurrentTargetGroup=_35;
-};
-Prado.Validation.AddGroup=function(_36,_37){
-_36.active=false;
-_36.target=$(_36.target);
-_36.validators=_37;
-Prado.Validation.groups.push(_36);
-Event.observe(_36.target,"click",Prado.Validation.UpdateActiveGroup);
-};
-Prado.Validation.UpdateActiveGroup=function(ev){
-var _39=Prado.Validation.groups;
-for(var i=0;i<_39.length;i++){
-_39[i].active=(isdef(ev)&&_39[i].target==Event.element(ev));
+return valid;
+},
+addValidator : function(validator)
+{
+this.validators.push(validator);
+if(validator.group && !this.groups.include(validator.group))
+this.groups.push(validator.group);
+},
+addSummary : function(summary)
+{
+this.summaries.push(summary);
+},
+getValidatorsWithError : function(group)
+{
+var validators = this.validators.findAll(function(validator)
+{
+var notValid = !validator.isValid;
+var inGroup = group && validator.group == group;
+var noGroup = validator.group == null;
+return notValid && (inGroup || noGroup);
+});
+return validators;
+},
+updateSummary : function(group, refresh)
+{
+var validators = this.getValidatorsWithError(group);
+this.summaries.each(function(summary)
+{
+var inGroup = group && summary.group == group;
+var noGroup = !group && !summary.group;
+if(inGroup || noGroup)
+summary.updateSummary(validators, refresh);
+else
+summary.hideSummary(true);
+});
}
-Prado.Validation.IsGroupValidation=isdef(ev);
};
-Prado.Validation.IsValid=function(_40){
-var _41=true;
-var _42=Prado.Validation.validators;
-for(var i=0;i<_42.length;i++){
-_42[i].enabled=!_42[i].control||undef(_42[i].control.form)||_42[i].control.form==_40;
-_42[i].visible=Prado.Validation.IsGroupValidation?_42[i].inActiveGroup():true;
-if(Prado.Validation.HasTargetGroup){
-_42[i].enabled=Prado.Validation.CurrentTargetGroup==_42[i].group;
-}
-_41&=_42[i].validate();
-}
-Prado.Validation.ShowSummary(_40);
-Prado.Validation.UpdateActiveGroup();
-return _41;
-};
-Prado.Validation.prototype={initialize:function(_43,_44){
-this.evaluateIsValid=_43;
-this.attr=undef(_44)?[]:_44;
-this.message=$(_44.id);
-this.control=$(_44.controltovalidate);
-this.enabled=isdef(_44.enabled)?_44.enabled:true;
-this.visible=isdef(_44.visible)?_44.visible:true;
-this.group=isdef(_44.validationgroup)?_44.validationgroup:null;
-this.isValid=true;
-Prado.Validation.validators.push(this);
-if(this.evaluateIsValid){
-this.evaluateIsValid.bind(this);
-}
-},validate:function(){
-if(this.visible&&this.enabled&&this.evaluateIsValid){
-this.isValid=this.evaluateIsValid();
-}else{
-this.isValid=true;
-}
-this.observe();
-this.update();
-return this.isValid;
-},update:function(){
-if(this.attr.display=="Dynamic"){
-this.isValid?Element.hide(this.message):Element.show(this.message);
-}
-if(this.message){
-this.message.style.visibility=this.isValid?"hidden":"visible";
-}
-var _45=this.attr.controlcssclass;
-if(this.control&&isString(_45)&&_45.length>0){
-Element.condClassName(this.control,_45,!this.isValid);
-}
-Prado.Validation.ShowSummary();
-var _46=this.attr.focusonerror;
-var _47=Prado.Validation.HasTargetGroup;
-var _48=this.group==Prado.Validation.CurrentTargetGroup;
-if(_46&&(!_47||(_47&&_48))){
-Prado.Element.focus(this.attr.focuselementid);
-}
-},setValid:function(_49){
-this.isValid=_49;
-this.update();
-},observe:function(){
-if(undef(this.observing)){
-if(this.control&&this.control.form){
-Event.observe(this.control,"change",this.validate.bind(this));
-}
-this.observing=true;
-}
-},convert:function(_50,_51){
-if(undef(_51)){
-_51=Form.Element.getValue(this.control);
-}
-switch(_50){
-case "Integer":
-return Prado.Validation.Util.toInteger(_51);
-case "Double":
-case "Float":
-return Prado.Validation.Util.toDouble(_51,this.attr.decimalchar);
-case "Currency":
-return Prado.Validation.Util.toCurrency(_51,this.attr.groupchar,this.attr.digits,this.attr.decimalchar);
-case "Date":
-return Prado.Validation.Util.toDate(_51,this.attr.dateformat);
-}
-return _51.toString();
-},inActiveGroup:function(){
-var _52=Prado.Validation.groups;
-for(var i=0;i<_52.length;i++){
-if(_52[i].active&&_52[i].validators.contains(this.attr.id)){
-return true;
-}
-}
-return false;
-}};
-Prado.Validation.Summary=Class.create();
-Prado.Validation.Summary.prototype={initialize:function(_53){
-this.attr=_53;
-this.div=$(_53.id);
-this.visible=false;
-this.enabled=false;
-this.group=isdef(_53.validationgroup)?_53.validationgroup:null;
-Prado.Validation.summaries.push(this);
-},show:function(_54){
-var _55=_54||this.attr.refresh=="1";
-var _56=this.getMessages();
-if(_56.length<=0||!this.visible||!this.enabled){
-if(_55){
-if(this.attr.display=="None"||this.attr.display=="Dynamic"){
-Element.hide(this.div);
-}else{
-this.div.style.visibility="hidden";
-}
-}
-return;
-}
-if(Prado.Validation.HasTargetGroup){
-if(Prado.Validation.CurrentTargetGroup!=this.group){
-if(_55){
-if(this.attr.display=="None"||this.attr.display=="Dynamic"){
-Element.hide(this.div);
-}else{
-this.div.style.visibility="hidden";
-}
-}
-return;
-}
-}
-if(this.attr.showsummary!="False"&&_55){
-this.div.style.display="block";
-this.div.style.visibility="visible";
-while(this.div.childNodes.length>0){
-this.div.removeChild(this.div.lastChild);
-}
-new Insertion.Bottom(this.div,this.formatSummary(_56));
-}
-if(_54){
-window.scrollTo(this.div.offsetLeft-20,this.div.offsetTop-20);
-}
-var _57=this;
-if(_54&&this.attr.showmessagebox=="True"&&_55){
-setTimeout(function(){
-alert(_57.formatMessageBox(_56));
-},20);
-}
-},getMessages:function(){
-var _58=Prado.Validation.validators;
-var _59=[];
-for(var i=0;i<_58.length;i++){
-if(_58[i].isValid==false&&isString(_58[i].attr.errormessage)&&_58[i].attr.errormessage.length>0){
-_59.push(_58[i].attr.errormessage);
-}
-}
-return _59;
-},formats:function(_60){
-switch(_60){
+Prado.WebUI.TValidationSummary = Class.create();
+Prado.WebUI.TValidationSummary.prototype =
+{
+group : null,
+options : {},
+visible : false,
+summary : null,
+initialize : function(options)
+{
+this.options = options;
+this.group = options.ValidationGroup;
+this.summary = $(options.ID);
+this.visible = this.summary.style.visibility != "hidden"
+this.visible = this.visible && this.summary.style.display != "none";
+Prado.Validation.addSummary(options.FormID, this);
+},
+updateSummary : function(validators, update)
+{
+if(validators.length <= 0)
+return this.hideSummary(update);
+var refresh = update || this.visible == false || this.options.Refresh != false;
+if(this.options.ShowSummary != false && refresh)
+{
+this.displayHTMLMessages(this.getMessages(validators));
+this.visible = true;
+}
+if(this.options.ScrollToSummary != false)
+window.scrollTo(this.summary.offsetLeft-20, this.summary.offsetTop-20);
+if(this.options.ShowMessageBox == true && refresh)
+{
+this.alertMessages(this.getMessages(validators));
+this.visible = true;
+}
+},
+displayHTMLMessages : function(messages)
+{
+this.summary.show();
+this.summary.style.visibility = "visible";
+while(this.summary.childNodes.length > 0)
+this.summary.removeChild(this.summary.lastChild);
+new Insertion.Bottom(this.summary, this.formatSummary(messages));
+},
+alertMessages : function(messages)
+{
+var text = this.formatMessageBox(messages);
+setTimeout(function(){ alert(text); },20);
+},
+getMessages : function(validators)
+{
+var messages = [];
+validators.each(function(validator)
+{
+var message = validator.getErrorMessage();
+if(typeof(message) == 'string' && message.length > 0)
+messages.push(message);
+})
+return messages;
+},
+hideSummary : function(refresh)
+{
+if(refresh || this.options.Refresh != false)
+{
+if(this.options.Display == "None" || this.options.Display == "Dynamic")
+this.summary.hide();
+this.summary.style.visibility="hidden";
+this.visible = false;
+}
+},
+formats : function(type)
+{
+switch(type)
+{
case "List":
-return {header:"<br />",first:"",pre:"",post:"<br />",last:""};
+return { header : "<br />", first : "", pre : "", post : "<br />", last : ""};
case "SingleParagraph":
-return {header:" ",first:"",pre:"",post:" ",last:"<br />"};
+return { header : " ", first : "", pre : "", post : " ", last : "<br />"};
case "BulletList":
default:
-return {header:"",first:"<ul>",pre:"<li>",post:"</li>",last:"</ul>"};
-}
-},formatSummary:function(_61){
-var _62=this.formats(this.attr.displaymode);
-var _63=isdef(this.attr.headertext)?this.attr.headertext+_62.header:"";
-_63+=_62.first;
-for(var i=0;i<_61.length;i++){
-_63+=(_61[i].length>0)?_62.pre+_61[i]+_62.post:"";
-}
-_63+=_62.last;
-return _63;
-},formatMessageBox:function(_64){
-var _65=isdef(this.attr.headertext)?this.attr.headertext+"\n":"";
-for(var i=0;i<_64.length;i++){
-switch(this.attr.displaymode){
+return { header : "", first : "<ul>", pre : "<li>", post : "</li>", last : "</ul>"};
+}
+},
+formatSummary : function(messages)
+{
+var format = this.formats(this.options.DisplayMode);
+var output = this.options.HeaderText ? this.options.HeaderText + format.header : "";
+output += format.first;
+messages.each(function(message)
+{
+output += message.length > 0 ? format.pre + message + format.post : "";
+});
+output += format.last;
+return output;
+},
+formatMessageBox : function(messages)
+{
+var output = this.options.HeaderText ? this.options.HeaderText + "\n" : "";
+for(var i = 0; i < messages.length; i++)
+{
+switch(this.options.DisplayMode)
+{
case "List":
-_65+=_64[i]+"\n";
+output += messages[i] + "\n";
break;
case "BulletList":
default:
-_65+=" - "+_64[i]+"\n";
+output += "- " + messages[i] + "\n";
break;
case "SingleParagraph":
-_65+=_64[i]+" ";
+output += messages[i] + " ";
break;
}
}
-return _65;
-},inActiveGroup:function(){
-var _66=Prado.Validation.groups;
-for(var i=0;i<_66.length;i++){
-if(_66[i].active&&_66[i].id==this.attr.group){
-return true;
-}
-}
-return false;
-}};
-Prado.Validation.ShowSummary=function(_67){
-var _68=Prado.Validation.summaries;
-for(var i=0;i<_68.length;i++){
-if(isdef(_67)){
-if(Prado.Validation.IsGroupValidation){
-_68[i].visible=_68[i].inActiveGroup();
-}else{
-_68[i].visible=undef(_68[i].attr.group);
-}
-_68[i].enabled=$(_68[i].attr.form)==_67;
-}
-_68[i].show(_67);
-}
-};
-Prado.Validation.OnSubmit=function(ev){
-if(typeof tinyMCE!="undefined"){
-tinyMCE.triggerSave();
-}
-if(!Prado.Validation.ActiveTarget){
-return true;
-}
-var _69=Prado.Validation.IsValid(Event.element(ev)||ev);
-if(Event.element(ev)&&!_69){
-Event.stop(ev);
+return output;
}
-Prado.Validation.ActiveTarget=null;
-return _69;
};
-Prado.Validation.OnLoad=function(){
-Event.observe(Prado.Validation.forms,"submit",Prado.Validation.OnSubmit);
-};
-Prado.Validation.ValidateValidatorGroup=function(_70){
-var _71=Prado.Validation.groups;
-var _72=null;
-for(var i=0;i<_71.length;i++){
-if(_71[i].id==_70){
-_72=_71[i];
-Prado.Validation.groups[i].active=true;
-Prado.Validation.CurrentTargetGroup=null;
-Prado.Validation.IsGroupValidation=true;
-}else{
-Prado.Validation.groups[i].active=false;
-}
-}
-if(_72){
-return Prado.Validation.IsValid(_72.target.form);
-}
-return true;
-};
-Prado.Validation.ValidateValidationGroup=function(_73){
-var _74=Prado.Validation.TargetGroups;
-for(var id in _74){
-if(_74[id]==_73){
-var _75=$(id);
-Prado.Validation.ActiveTarget=_75;
-Prado.Validation.CurrentTargetGroup=_73;
-Prado.Validation.IsGroupValidation=false;
-return Prado.Validation.IsValid(_75.form);
-}
-}
-return true;
-};
-Prado.Validation.ValidateNonGroup=function(_76){
-if(Prado.Validation){
-var _77=$(_76);
-_77=_77||document.forms[0];
-Prado.Validation.ActiveTarget=_77;
-Prado.Validation.CurrentTargetGroup=null;
-Prado.Validation.IsGroupValidation=false;
-return Prado.Validation.IsValid(_77);
+Prado.WebUI.TBaseValidator = Class.create();
+Prado.WebUI.TBaseValidator.prototype =
+{
+enabled : true,
+visible : false,
+isValid : true,
+options : {},
+_isObserving : false,
+group : null,
+initialize : function(options)
+{
+options.OnValidate = options.OnValidate || Prototype.emptyFunction;
+options.OnSuccess = options.OnSuccess || Prototype.emptyFunction;
+options.OnError = options.OnError || Prototype.emptyFunction;
+this.options = options;
+this.control = $(options.ControlToValidate);
+this.message = $(options.ID);
+this.group = options.ValidationGroup;
+Prado.Validation.addValidator(options.FormID, this);
+},
+getErrorMessage : function()
+{
+return this.options.ErrorMessage;
+},
+updateControl: function()
+{
+if(this.message)
+{
+if(this.options.Display == "Dynamic")
+this.isValid ? this.message.hide() : this.message.show();
+this.message.style.visibility = this.isValid ? "hidden" : "visible";
+}
+this.updateControlCssClass(this.control, this.isValid);
+if(this.options.FocusOnError && !this.isValid)
+Prado.Element.focus(this.options.FocusElementID);
+this.visible = true;
+},
+updateControlCssClass : function(control, valid)
+{
+var CssClass = this.options.ControlCssClass;
+if(typeof(CssClass) == "string" && CssClass.length > 0)
+{
+if(valid)
+control.removeClassName(CssClass);
+else
+control.addClassName(CssClass);
+}
+},
+hide : function()
+{
+this.isValid = true;
+this.updateControl();
+this.visible = false;
+},
+validate : function(manager)
+{
+if(this.enabled)
+this.isValid = this.evaluateIsValid(manager);
+this.options.OnValidate(this, manager);
+this.updateControl();
+if(this.isValid)
+this.options.OnSuccess(this, manager);
+else
+this.options.OnError(this, manager);
+this.observeChanges(manager);
+return this.isValid;
+},
+observeChanges : function(manager)
+{
+if(this.options.ObserveChanges != false && !this._isObserving)
+{
+var validator = this;
+Event.observe(this.control, 'change', function()
+{
+if(validator.visible)
+{
+validator.validate(manager);
+manager.updateSummary(validator.group);
}
-return true;
-};
-Event.OnLoad(Prado.Validation.OnLoad);
-Prado.Validation.TRequiredFieldValidator=function(){
-var _78=this.control.getAttribute("type");
-if(_78=="file"){
-return true;
-}else{
-var a=Prado.Validation.trim($F(this.control));
-var b=Prado.Validation.trim(this.attr.initialvalue);
-return (a!=b);
+});
+this._isObserving = true;
+}
+},
+trim : function(value)
+{
+return typeof(value) == "string" ? value.trim() : "";
+},
+convert : function(dataType, value)
+{
+if(typeof(value) == "undefined")
+value = $F(this.control);
+var string = new String(value);
+switch(dataType)
+{
+case "Integer":
+return string.toInteger();
+case "Double" :
+case "Float" :
+return string.toDouble(this.options.DecimalChar);
+case "Currency" :
+return string.toCurrency(this.options.GroupChar, this.options.Digits, this.options.DecimalChar);
+case "Date":
+var value = string.toDate(this.options.DateFormat);
+if(value && typeof(value.getTime) == "function")
+return value.getTime();
+else
+return null;
+case "String":
+return string.toString();
}
-};
-Prado.Validation.TRegularExpressionValidator=function(){
-var _79=Prado.Validation.trim($F(this.control));
-if(_79==""){
-return true;
+return value;
}
-var rx=new RegExp(this.attr.validationexpression);
-var _81=rx.exec(_79);
-return (_81!=null&&_79==_81[0]);
-};
-Prado.Validation.TEmailAddressValidator=Prado.Validation.TRegularExpressionValidator;
-Prado.Validation.TCustomValidator=function(){
-var _82=isNull(this.control)?null:$F(this.control);
-var _83=this.attr.clientvalidationfunction;
-eval("var validate = "+_83);
-return validate&&isFunction(validate)?validate(this,_82):true;
-};
-Prado.Validation.TRangeValidator=function(){
-var _84=Prado.Validation.trim($F(this.control));
-if(_84==""){
-return true;
}
-var _85=this.attr.minimumvalue;
-var _86=this.attr.maximumvalue;
-if(undef(_85)&&undef(_86)){
+Prado.WebUI.TRequiredFieldValidator = Class.extend(Prado.WebUI.TBaseValidator,
+{
+evaluateIsValid : function()
+{
+var inputType = this.control.getAttribute("type");
+if(inputType == 'file')
+{
return true;
}
-if(_85==""){
-_85=0;
+else
+{
+var a = this.trim($F(this.control));
+var b = this.trim(this.options.InitialValue);
+return(a != b);
}
-if(_86==""){
-_86=0;
}
-var _87=this.attr.type;
-if(undef(_87)){
-return (parseFloat(_84)>=parseFloat(_85))&&(parseFloat(_84)<=parseFloat(_86));
-}
-var min=this.convert(_87,_85);
-var max=this.convert(_87,_86);
-_84=this.convert(_87,_84);
-return _84>=min&&_84<=max;
-};
-Prado.Validation.TCompareValidator=function(){
-var _89=Prado.Validation.trim($F(this.control));
-if(_89.length==0){
+});
+Prado.WebUI.TCompareValidator = Class.extend(Prado.WebUI.TBaseValidator,
+{
+_observingComparee : false,
+evaluateIsValid : function(manager)
+{
+var value = this.trim($F(this.control));
+if (value.length <= 0)
return true;
+var comparee = $(this.options.ControlToCompare);
+if(comparee)
+var compareTo = this.trim($F(comparee));
+else
+var compareTo = this.options.ValueToCompare || "";
+var isValid =this.compare(value, compareTo);
+if(comparee)
+{
+this.updateControlCssClass(comparee, isValid);
+this.observeComparee(comparee, manager);
+}
+return isValid;
+},
+observeComparee : function(comparee, manager)
+{
+if(this.options.ObserveChanges != false && !this._observingComparee)
+{
+var validator = this;
+Event.observe(comparee, "change", function()
+{
+if(validator.visible)
+{
+validator.validate(manager);
+manager.updateSummary(validator.group);
}
-var _90;
-var _91=$(this.attr.controlhookup);
-if(_91){
-_90=Prado.Validation.trim($F(_91));
-}else{
-_90=isString(this.attr.valuetocompare)?this.attr.valuetocompare:"";
-}
-var _92=Prado.Validation.TCompareValidator.compare;
-var _93=_92.bind(this)(_89,_90);
-if(_91){
-var _94=this.attr.controlcssclass;
-if(isString(_94)&&_94.length>0){
-Element.condClassName(_91,_94,!_93);
-}
-if(undef(this.observingComparee)){
-Event.observe(_91,"change",this.validate.bind(this));
-this.observingComparee=true;
-}
+});
+this._observingComparee = true;
}
-return _93;
-};
-Prado.Validation.TCompareValidator.compare=function(_95,_96){
-var op1,op2;
-if((op1=this.convert(this.attr.type,_95))==null){
+},
+compare : function(operand1, operand2)
+{
+var op1, op2;
+if((op1 = this.convert(this.options.DataType, operand1)) == null)
return false;
-}
-if(this.attr.operator=="DataTypeCheck"){
-return true;
-}
-if((op2=this.convert(this.attr.type,_96))==null){
+if ((op2 = this.convert(this.options.DataType, operand2)) == null)
return true;
-}
-switch(this.attr.operator){
+switch (this.options.Operator)
+{
case "NotEqual":
-return (op1!=op2);
+return (op1 != op2);
case "GreaterThan":
-return (op1>op2);
+return (op1 > op2);
case "GreaterThanEqual":
-return (op1>=op2);
+return (op1 >= op2);
case "LessThan":
-return (op1<op2);
+return (op1 < op2);
case "LessThanEqual":
-return (op1<=op2);
+return (op1 <= op2);
default:
-return (op1==op2);
-}
-};
-Prado.Validation.TRequiredListValidator=function(){
-var min=undef(this.attr.min)?Number.NEGATIVE_INFINITY:parseInt(this.attr.min);
-var max=undef(this.attr.max)?Number.POSITIVE_INFINITY:parseInt(this.attr.max);
-var _98=document.getElementsByName(this.attr.selector);
-if(_98.length<=0){
-return true;
-}
-var _99=new Array();
-if(isString(this.attr.required)&&this.attr.required.length>0){
-_99=this.attr.required.split(/,\s* /);
+return (op1 == op2);
}
-var _100=true;
-var _101=Prado.Validation.TRequiredListValidator;
-switch(_98[0].type){
-case "radio":
-case "checkbox":
-_100=_101.IsValidRadioList(_98,min,max,_99);
-break;
-case "select-multiple":
-_100=_101.IsValidSelectMultipleList(_98,min,max,_99);
-break;
}
-var _102=this.attr.elementcssclass;
-if(isString(_102)&&_102.length>0){
-map(_98,function(_103){
-condClass(_103,_102,!_100);
});
+Prado.WebUI.TCustomValidator = Class.extend(Prado.WebUI.TBaseValidator,
+{
+evaluateIsValid : function(manager)
+{
+var value = $F(this.control);
+var clientFunction = this.options.ClientValidationFunction;
+if(typeof(clientFunction) == "string" && clientFunction.length > 0)
+{
+validate = clientFunction.toFunction();
+return validate(this, value);
}
-if(undef(this.observingRequiredList)){
-Event.observe(_98,"change",this.validate.bind(this));
-this.observingRequiredList=true;
-}
-return _100;
-};
-Prado.Validation.TRequiredListValidator.IsValidRadioList=function(_104,min,max,_105){
-var _106=0;
-var _107=new Array();
-for(var i=0;i<_104.length;i++){
-if(_104[i].checked){
-_106++;
-_107.push(_104[i].value);
-}
-}
-return Prado.Validation.TRequiredListValidator.IsValidList(_106,_107,min,max,_105);
-};
-Prado.Validation.TRequiredListValidator.IsValidSelectMultipleList=function(_108,min,max,_109){
-var _110=0;
-var _111=new Array();
-for(var i=0;i<_108.length;i++){
-var _112=_108[i];
-for(var j=0;j<_112.options.length;j++){
-if(_112.options[j].selected){
-_110++;
-_111.push(_112.options[j].value);
-}
-}
+return true;
}
-return Prado.Validation.TRequiredListValidator.IsValidList(_110,_111,min,max,_109);
-};
-Prado.Validation.TRequiredListValidator.IsValidList=function(_114,_115,min,max,_116){
-var _117=true;
-if(_116.length>0){
-if(_115.length<_116.length){
+});
+Prado.WebUI.TRangeValidator = Class.extend(Prado.WebUI.TBaseValidator,
+{
+evaluateIsValid : function(manager)
+{
+var value = this.trim($F(this.control));
+if(value.length <= 0)
+return true;
+if(typeof(this.options.DataType) == "undefined")
+this.options.DataType = "String";
+var min = this.convert(this.options.DataType, this.options.MinValue || null);
+var max = this.convert(this.options.DataType, this.options.MaxValue || null);
+value = this.convert(this.options.DataType, value);
+Logger.warn(min+" <= "+value+" <= "+max);
+if(value == null)
return false;
+var valid = true;
+if(min != null)
+valid = valid && value >= min;
+if(max != null)
+valid = valid && value <= max;
+return valid;
}
-for(var k=0;k<_116.length;k++){
-_117=_117&&_115.contains(_116[k]);
-}
+});
+Prado.WebUI.TRegularExpressionValidator = Class.extend(Prado.WebUI.TBaseValidator,
+{
+evaluateIsValid : function(master)
+{
+var value = this.trim($F(this.control));
+if (value.length <= 0)
+return true;
+var rx = new RegExp(this.options.ValidationExpression);
+var matches = rx.exec(value);
+return (matches != null && value == matches[0]);
}
-return _117&&_114>=min&&_114<=max;
-};
-
+});
+Prado.WebUI.TEmailAddressValidator = Prado.WebUI.TRegularExpressionValidator;