From e392ecbf6e422825083bc7204eacb7090619a47c Mon Sep 17 00:00:00 2001 From: xue <> Date: Fri, 21 Apr 2006 12:36:06 +0000 Subject: Merge from 3.0 branch till 953. --- framework/Web/Javascripts/js/ajax.js | 3867 ++++++++++++++------------ framework/Web/Javascripts/js/colorpicker.js | 984 ++++--- framework/Web/Javascripts/js/datepicker.js | 845 +++--- framework/Web/Javascripts/js/effects.js | 1490 +++++----- framework/Web/Javascripts/js/logger.js | 925 ++++--- framework/Web/Javascripts/js/prado.js | 3939 ++++++++++++++------------- framework/Web/Javascripts/js/rico.js | 2553 ++++++----------- framework/Web/Javascripts/js/validator.js | 994 ++++--- 8 files changed, 7885 insertions(+), 7712 deletions(-) (limited to 'framework/Web/Javascripts/js') 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"+_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[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-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 -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=" "){ -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,""); -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, + ''); +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 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 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.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_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 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("
  • "+elem.substr(0,_122.length)+""+elem.substr(_122.length)+"
  • "); +}, +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("
  • " + elem.substr(0, entry.length) + "" + +elem.substr(entry.length) + "
  • "); 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("
  • "+elem.substr(0,_125)+""+elem.substr(_125,_122.length)+""+elem.substr(_125+_122.length)+"
  • "); +} 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("
  • " + elem.substr(0, foundPos) + "" + +elem.substr(foundPos, entry.length) + "" + elem.substr( +foundPos + entry.length) + "
  • "); 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 "
      " + ret.join('') + "
    "; } -if(_121.length){ -ret=ret.concat(_121.slice(0,_120.options.choices-ret.length)); +}, options || {}); } -return "
      "+ret.join("")+"
    "; -}},_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(/
    /i); -},convertHTMLLineBreaks:function(_135){ -return _135.replace(/
    /gi,"\n").replace(//gi,"\n").replace(/<\/p>/gi,"\n").replace(/

    /gi,""); -},createEditField:function(){ +}, +hasHTMLLineBreaks: function(string) { +if (!this.options.handleLineBreaks) return false; +return string.match(/
    /i); +}, +convertHTMLLineBreaks: function(string) { +return string.replace(/
    /gi, "\n").replace(//gi, "\n").replace(/<\/p>/gi, "\n").replace(/

    /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.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)&&(_241this.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) && (sliderValuethis.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 > 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 _89max?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>")); -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.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.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;i0)&&!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+=""; -this.buttonsContainerElement.innerHTML+=""; -if(!Prado.Inspector.disabled){ -this.buttonsContainerElement.innerHTML+=""; -} -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"; -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+="

    "+_36+"
    "; -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= 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 += "
    " + message + "
    " +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.commandIndex0){ -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/g,">"); 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-1){ -this.d.getElementById(_63).innerHTML="[-]"; -}else{ -this.d.getElementById(_63).innerHTML="[+]"; -} -},buildInspectionLevel:function(){ -var _64=this.displaying; -var _65=_64.split("."); -var _66=["[object Window]"]; -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]=""+_65[i]+""; -} -return _66.join("."); -},buildTree:function(){ -mHTML="
    Inspecting "+this.buildInspectionLevel()+"
    "; -mHTML+="
      "; +}, +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 = ["[object Window]"]; +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] = ""+list[i]+""; +} +return links.join("."); +}, +buildTree : function() { +mHTML = "
      Inspecting "+this.buildInspectionLevel()+"
      "; +mHTML +="
        "; this.types.sort(); -var _68=0; -for(i=0;i[+]"+this.types[i]+" ("+this.nameList[this.types[i]].length+")
          "; +var so_objIndex=0; +for(i=0;i[+]" + this.types[i] + " (" + this.nameList[this.types[i]].length + ")
            "; this.hidden["ul"+i]=0; -for(e=0;e=0&&/^[a-zA-Z_]/.test(_69)){ -if(this.displaying.indexOf("[object ")<0){ -_71=" more"; -}else{ -if(this.displaying.indexOf("[object Window]")>=0){ -_71=" more"; -} -} -} -mHTML+="
          • [+]"+_69+"
            • "+_70+_71+"
            "; -this.hidden["mul"+_68]=0; -_68++; +for(e=0;e= 0 && /^[a-zA-Z_]/.test(prop)) +{ +if(this.displaying.indexOf("[object ") < 0) +more = " more"; +else if(this.displaying.indexOf("[object Window]") >= 0) +more = " more"; +} +mHTML+="
          • [+]" + prop + "
            • " + value + more + "
            "; +this.hidden["mul"+so_objIndex]=0; +so_objIndex++; } mHTML+="
          "; } mHTML+="
        "; -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="[esc] to close
        Javascript Object Tree V2.0, more info."; +cObj.innerHTML = "[esc] to close
        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:"(?:)((\n|\r|.)*?)(?:)",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: '(?:)((\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;i0&&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]+>/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;i0?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 ab?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 "#"; -}}; -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 '#'; } -}; -Object.extend(Array.prototype,Enumerable); -Object.extend(Array.prototype,{_each:function(_127){ -for(var i=0;i"; -}}; -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 '#'; +} +} +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"; +setTimeout(function() {content.evalScripts()}, 10); +}, +contentFromAnonymousTable: function() { +var div = document.createElement('div'); +div.innerHTML = '' + this.content + '
        '; 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 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;i0)||_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[0]&&x=this.offset[1]&&this.ycomp=this.offset[0]&&this.xcomp"; +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+">"; -} -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[0] && +x = this.offset[1] && +this.ycomp = this.offset[0] && +this.xcomp 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 + ">"; +} 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 + ">"; +} 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=_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; i0){ -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 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 -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-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 ) + return false; +for( var i=0,n=0; i=this.accordionTabs.length){ -this.options.onLoadShowTab=0; -} -for(var i=0;i= 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="
        "+el.innerHTML+"
        "; -},_roundTopCorners:function(el,_54,_55){ -var _56=this._createCorner(_55); -for(var i=0;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 = "
        " + el.innerHTML + "
        " + }, +_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=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= 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;ithis.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.lengththis.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.startPos)&&(_240+this.metaData.getPageSize()<=this.endPos()); -},isNearingTopLimit:function(_241){ -return _241-this.startPos=this.startPos){ -var _247=this.maxFetchSize+_245; -if(_247>this.metaData.totalRows){ -_247=this.metaData.totalRows; -} -_246=_247-_245; -if(_245==0&&_246this.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(" "); -}}; -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_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;i0; -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,"
        "); -this.table.previousSibling.appendChild(this.table); -new Insertion.Before(this.table,"
        "); -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"+"   "; -} -},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="  "; -}else{ -if(_313==Rico.TableColumn.SORT_ASC){ -_314.innerHTML="  "; -}else{ -if(_313==Rico.TableColumn.SORT_DESC){ -_314.innerHTML="  "; -} -} -} -},getSortedColumnIndex:function(){ -var cols=this.options.columns; -for(var i=0;ithis.length){ -return false; -} -for(var i=0,n=0;i=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.lengththis.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 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;i29)?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:"
        ",first:"",pre:"",post:"
        ",last:""}; +return { header : "
        ", first : "", pre : "", post : "
        ", last : ""}; case "SingleParagraph": -return {header:" ",first:"",pre:"",post:" ",last:"
        "}; +return { header : " ", first : "", pre : "", post : " ", last : "
        "}; case "BulletList": default: -return {header:"",first:"
          ",pre:"
        • ",post:"
        • ",last:"
        "}; -} -},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 : "
          ", pre : "
        • ", post : "
        • ", last : "
        "}; +} +}, +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 (op10){ -_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; -- cgit v1.2.3