var Adept={};Adept.Core={namespace:function(name){var parts=name.split('.');var parent=window;for(var i=0;i<parts.length;i++){if(!parts[i]){continue}if(!parent[parts[i]]){parent[parts[i]]={}}parent=parent[parts[i]]}},isset:function(value){return typeof(value)!='undefined'&&value!=null},defaultValue:function(value,defaultValue){return(this.isset(value))?value:defaultValue},getUniqueId:function(object){if(!this.isset(object)){throw new Adept.Exception.IllegalArgument('object not defined'+object)}if(!object.uniqueID){object.uniqueID=this.generateId()}return object.uniqueID},generateId:function(){return'uid'+((new Date()).getTime()+Math.round(Math.random()*10000))},getPageId:function(){var url=window.location.pathname;if(url[url.length-1]!="/"){url+="/"}var pattern=/[^\w]/g;url=url.replace(pattern,'_');return"viewId"+url}};Adept.Core.namespace('Adept');Adept.Logger={writers:[],addWriter:function(writer){this.writers.push(writer)},getWriters:function(){return this.writers},log:function(message){for(var i=0;i<this.writers.length;i++){this.writers[i].log(message)}},error:function(message){for(var i=0;i<this.writers.length;i++){this.writers[i].error(message)}},debug:function(message){for(var i=0;i<this.writers.length;i++){this.writers[i].debug(message)}},warn:function(message){for(var i=0;i<this.writers.length;i++){this.writers[i].warn(message)}},info:function(message){for(var i=0;i<this.writers.length;i++){this.writers[i].info(message)}},fine:function(message){for(var i=0;i<this.writers.length;i++){this.writers[i].fine(message)}}};Adept.Core.namespace('Adept.Logger');Adept.Logger.Writer=Class.create({log:function(message){throw"Abstract method called"},error:function(message){throw"Abstract method called"},debug:function(message){throw"Abstract method called"},warn:function(message){throw"Abstract method called"},info:function(message){throw"Abstract method called"},fine:function(message){throw"Abstract method called"}});Adept.Core.namespace('Adept.Logger.Writer');Adept.Logger.Writer.FireBug=Class.create(Adept.Logger.Writer,{log:function(message){Try.these(function(){console.log("LOG:"+message)})},error:function(message){Try.these(function(){console.error(message)})},debug:function(message){Try.these(function(){console.debug(message)})},warn:function(message){Try.these(function(){console.warn(message)})},info:function(message){Try.these(function(){console.info(message)})},fine:function(message){Try.these(function(){console.log("FINE: "+message)})}});Adept.Core.namespace('Adept.Logger.Writer');Adept.Logger.Writer.Window=Class.create(Adept.Logger.Writer,{window:null,getWindow:function(){if(!this.window||this.window.closed){this.window=window.open("Log",null,"width=400,height=200,"+"scrollbars=yes,resizable=yes,status=no,"+"location=no,menubar=no,toolbar=no");this.window.document.write("<html><head><title>Debug Log</title></head><body></body></html>")}return this.window},write:function(message,type){var document=this.getWindow().document;var container=document.createElement('div');container.innerHTML=type+": "+message;document.body.appendChild(container)},log:function(message){this.write(message,"LOG")},error:function(message){this.write(message,"ERROR")},debug:function(message){this.write(message,"DEBUG")},warn:function(message){this.write(message,"WARNING")},info:function(message){this.write(message,"INFO")},fine:function(message){this.write(message,"FINE")}});Adept.Core.namespace('Adept');Adept.Config={ADEPT_IMG_URL:'/helloworld/static/img',ADEPT_CSS_URL:'',ADEPT_JS_URL:'',LOGGER:'',DEBUG:true};Adept.Core.namespace('Adept');Adept.Exception=Class.create({message:'',initialize:function(message){this.message=message},getMessage:function(){return this.message}});Adept.Core.namespace('Adept');Adept.Exception.IllegalState=Class.create(Adept.Exception,{initialize:function($super,message){Adept.Core.defaultValue(message,'Illegal object state');$super(message)}});Adept.Core.namespace('Adept');Adept.Exception.IllegalArgument=Class.create(Adept.Exception,{initialize:function($super,message){message=Adept.Core.defaultValue(message,'Illegal argument');$super(message)}});Adept.Core.namespace('Adept');Adept.Observer={propListeners:{},domListeners:{},addListener:function(element,event,listener,proprietary){proprietary=proprietary||false;if(!Adept.Core.isset(event)){throw Adept.Exception.IllegalArgument("event undefined")}if(!(listener instanceof Object)){throw new Adept.Exception.IllegalState("Illegal listener type")}if(this.isDomEvent(element,event)&&!proprietary){this.addDomListener(element,event,listener)}else{this.addProprietaryListener(element,event,listener)}},removeListener:function(element,event,listener,proprietary){var elementId=this.getElementUniqueId(element);element=$(element);if(this.isDomEvent(element,event)&&!proprietary){if(!Adept.Core.isset(element.domListeners)||!Adept.Core.isset(element.domListeners[event])){return}Event.stopObserving(element,event,element.domListeners[event].invokeListenersChain);element.domListeners[event]=null}else{if(!Adept.Core.isset(element.propListeners[elementId])&&!Adept.Core.isset(element.propListeners[event])){return}element.propListeners[event].flush();if(element.propListeners[event].getListeners().length==0){element.propListeners[event]=null}}},notify:function(element,event,options){Adept.Logger.info("[Notify] '"+element+"', Event: '"+event+"'");var controller=this.getObject(element);if(!Adept.Core.isset(controller.propListeners)||!Adept.Core.isset(controller.propListeners[event])){return}var chain=controller.propListeners[event];var event=new Adept.Event($(element),event,options);chain.invokeChain(event)},flush:function(){this.propListeners={};this.domListeners={}},clear:function(element,event){},getObject:function(element){if(Object.isString(element)){if(!Adept.Core.isset($(element))){}element=$(element);return element}return element},isDomEvent:function(element,event){return element==window||element==document||(Object.isElement($(element))&&Adept.Event.Dom.has(event))},getElementUniqueId:function(element){if(Object.isString(element)){if(!Adept.Core.isset($(element))){return element}element=$(element)}if(Object.isElement(element)){return element.id}Adept.Core.getUniqueId(element);return Adept.Core.getUniqueId(element)},addProprietaryListener:function(element,event,listener){Adept.Logger.info("[Listen Propriertary Event] '"+element+"', Event '"+event+"'");var elementId=this.getElementUniqueId(element);var elementObject=this.getObject(element);if(!Adept.Core.isset(elementObject.propListeners)){elementObject.propListeners=new Object()}if(!Adept.Core.isset(elementObject.propListeners[event])){elementObject.propListeners[event]=new Adept.ListenerChain()}elementObject.propListeners[event].add(listener)},addDomListener:function(element,event,listener){Adept.Logger.info("[Listen DOM Event] '"+element+"', Event '"+event+"'");var elementObject=this.getObject(element);if(!Adept.Core.isset(elementObject.domListeners)){elementObject.domListeners=new Object()}if(!Adept.Core.isset(elementObject.domListeners[event])){var chain=new Adept.ListenerChain();Event.observe(element,event,chain.invokeChain.bindAsEventListener(chain));elementObject.domListeners[event]=chain}elementObject.domListeners[event].add(listener)},notifyDomListeners:function(element,event){Try.these(function(){var eventObj=document.createEvent("Events");eventObj.initEvent(event,true,true);element.dispatchEvent(eventObj)},function(){var eventObj=document.createEventObject();element.fireEvent('on'+event,eventObj)})}};Adept.Core.namespace('Adept');Adept.ListenerChain=Class.create({listeners:[],initialize:function(){this.listeners=[]},invokeChain:function(event){for(var i=0;i<this.listeners.length;i++){if(event.stopped){break}listener=this.listeners[i];listener(event)}},add:function(listener,priority){this.listeners.push(listener)},remove:function(listener){this.listeners=this.listeners.without(listener)},flush:function(){this.listeners=[]},getListeners:function(){return this.listeners},setListeners:function(listeners){this.listeners=listeners}});Adept.Core.namespace('Adept');Adept.Event=Class.create({type:null,sender:null,stopped:false,options:{},initialize:function(sender,eventName,options){this.sender=sender;this.type=eventName;this.options=options||{}},element:function(){return this.getSender()},stop:function(){this.stopped=true},getSender:function(){return this.sender},setSender:function(sender){this.sender=sender},getEventName:function(){return this.type},setEventName:function(eventName){this.type=eventName},getOptions:function(){return this.options},setOptions:function(options){this.options=options},isStopped:function(){return this.stopped}});Adept.Core.namespace('Adept.Event');Adept.Event.Dom={MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",CLICK:"click",DBCLICK:"dblclick",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEMOVE:"mousemove",CONTEXTMENU:"contextmenu",KEYDOWN:"keydown",KEYUP:"keyup",KEYPRESS:"keypress",SUBMIT:"submit",RESET:"reset",LOAD:"load",BEFOREUNLOAD:"beforeunload",UNLOAD:"unload",ABORT:"abort",ERROR:"error",FOCUS:"focus",BLUR:"blur",SCROLL:'scroll',RESIZE:'resize',CHANGE:'change',SELECT:'select',has:function(eventType){var values=$H(this).values();if(values.indexOf(eventType)==-1){return false}return true}};Adept.Core.namespace('Adept');Adept.Assert={failed:function(message){Adept.Logger.error(message)},isset:function(value){if(!Adept.Core.isset(value)){Adept.Assert.failed('Adept.Assert.isset: value is not set')}},isString:function(value){if(!Adept.Core.isset(value)||'string'==typeof(value)){Adept.Assert.failed('Adept.Assert.isString: value is not set')}},isInteger:function(){},elementExists:function(id){if(!$(id)){Adept.Assert.failed('Adept.Assert.elementExists: element '+id+' is not found')}},elementNotExists:function(id){if($(id)){Adept.Assert.failed('Adept.Assert.elementNotExists: element '+id+' is presents')}}};Adept.Core.namespace('Adept');Adept.Application={IDLE_EVENT:'idle',PROCESSING_EVENT:'processing',BUSY_EVENT:'busy',backends:{},controllers:{},initialize:function(){},loaded:function(){},registerController:function(clientId,controller){this.controllers[clientId]=controller},getController:function(element){if(Object.isElement($(element))){element=$(element).id}if(!Adept.Core.isset(this.controllers[element])){throw new Adept.Exception("Controller for "+element+" is not defined. ")}return this.controllers[element]}};function $AC(element){return Adept.Application.getController(element)}Adept.Application.initialize();Adept.DataBag={defaultNamespace:'default',getCookieName:function(namespace,name){if(!namespace){namespace=this.defaultNamespace}return namespace+"_"+name},getOptions:function(options){options=options||{};var expires='';if(options.expires){if(typeof(options.expires)=='number'){date=new Date();date.setTime(date.getTime()+(options.expires*24*60*60*1000));options.expires=date.toGMTString()}else{options.expires=options.expires.toGMTString()}}else{options.expires=-1}expires='; expires= '+options.expires;var path=options.path?'; path='+options.path:'; path=/';var domain=options.domain?'; domain='+options.domain:'';var secure=options.secure?'; secure':'';return[expires,path,domain,secure].join(' ')},save:function(namespace,name,value,options){document.cookie=this.getCookieName(namespace,name)+'='+encodeURIComponent(value)+this.getOptions(options)},load:function(namespace,name){var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i<cookies.length;i++){var cookie=cookies[i].strip();var cookieName=this.getCookieName(namespace,name);if(cookie.substring(0,cookieName.length+1)==(cookieName+'=')){cookieValue=decodeURIComponent(cookie.substring(cookieName.length+1));break}}}return cookieValue},remove:function(namespace,name,options){this.save(namespace,name,'',options)}};