Adept.Core.namespace('Adept');Adept.Controller=Class.create({INIT_EVENT:'init',id:null,initialize:function(id){this.id=id;Adept.Application.registerController(id,this);this.init();Adept.Observer.notify(this.getElementId(),this.INIT_EVENT);Adept.Logger.info('Controller '+id+' has been initialized')},init:function(){},getElement:function(){return $(this.id)},getElementId:function(){return this.id}});Adept.Core.namespace('Adept.Controller');Adept.Controller.Throbber=Class.create(Adept.Controller,{offsetX:16,offsetY:16,active:false,mouseX:0,mouseY:0,processes:0,init:function(){this.hide();Adept.Observer.addListener(document,'mousemove',this.onMouseMove.bindAsEventListener(this));Adept.Observer.addListener(document,'mouseover',this.onMouseOver.bindAsEventListener(this));Adept.Observer.addListener(document,'mouseout',this.onMouseOut.bindAsEventListener(this));Adept.Observer.addListener(Adept.Application,'idle',this.onIdle.bind(this));Adept.Observer.addListener(Adept.Application,'processing',this.onBusy.bind(this));Adept.Observer.addListener(Adept.Application,'busy',this.onBusy.bind(this))},onIdle:function(){if(this.processes>0){this.processes--;if(this.processes==0&&this.active){this.hide()}}},onBusy:function(){if(!this.active){this.show()}this.processes++},onMouseOver:function(event){if(this.active){this.setPosition(Event.pointerX(event),Event.pointerY(event));Element.show(this.getElement())}},onMouseOut:function(event){if(this.active){Element.hide(this.getElement())}},setPosition:function(mouseX,mouseY){this.getElement().style.left=(mouseX+this.offsetX)+'px';this.getElement().style.top=(mouseY+this.offsetY)+'px'},onMouseMove:function(event){this.mouseX=Event.pointerX(event);this.mouseY=Event.pointerY(event);if(this.active){this.setPosition(this.mouseX,this.mouseY)}},show:function(){this.setPosition(this.mouseX,this.mouseY);Element.show(this.getElement());this.active=true},hide:function(){this.active=false;Element.hide(this.getElement())}});Adept.Core.namespace('Adept.Controller');Adept.Controller.Form=Class.create(Adept.Controller,{action:null,ajax:false,validators:null,serverEvent:null,BEFORE_SUBMIT_EVENT:'beforeSubmit',AFTER_SUBMIT_EVENT:'afterSubmit',initialize:function($super,id){this.validators=new Array();$super(id);Adept.Observer.addListener(this.getElementId(),'submit',this.onSubmit.bindAsEventListener(this))},addValidator:function(validator){this.validators.push(validator)},addBeforeSubmitListener:function(listener){Adept.Observer.addListener(this.getElementId(),this.BEFORE_SUBMIT_EVENT,listener)},addAfterSubmitListener:function(listener){Adept.Observer.addListener(this.getElementId(),this.AFTER_SUBMIT_EVENT,listener)},onSubmit:function(event){this.submit(event)},submit:function(event){if(this.validate()){if(this.isAjax()){return this.submitAjax(event)}else{if(this.serverEvent!=null){var field=document.createElement("INPUT");field.type='hidden';field.name="event["+this.serverEvent.sender+"]";field.value=this.serverEvent.event;this.getElement().appendChild(field)}return this.getElement().submit()}}else{event.stop()}},attachServerEvent:function(sender,event){this.serverEvent={};this.serverEvent.sender=sender;this.serverEvent.event=event},getAction:function(){return this.action||window.location.href},setAction:function(action){this.action=action},isAjax:function(){return this.ajax},setAjax:function(ajax){this.ajax=ajax},getMethod:function(){return this.getElement().method||'post'},submitAjax:function(event){try{var request=Adept.Ajax.Backend.createRequest(Form.serialize(this.getElementId()),this.getAction());if(this.serverEvent!=null){request.addEvent(this.serverEvent.sender,this.serverEvent.event)}Adept.Observer.addListener(request,"request",function(){Adept.Logger.info("form "+this.getElementId()+" notify beforeSubmit");Adept.Observer.notify(this.getElementId(),this.BEFORE_SUBMIT_EVENT);Form.disable(this.getElementId());Adept.Observer.removeListener(this.getElementId(),'submit',this.onSubmit.bindAsEventListener(this))}.bind(this),true);request.send();Adept.Observer.addListener(request,"complite",function(){Form.enable(this.getElementId());Adept.Logger.info("form "+this.getElementId()+" notify afterSubmit");Adept.Observer.notify(this.getElementId(),this.AFTER_SUBMIT_EVENT)}.bind(this),true);event.stop()}catch(e){Adept.Logger.error('Can not submit form: '+e.message);event.stop()}},validate:function(){try{var valid=true;for(var i=0;i<this.validators.length;i++){if(!(this.validators[i]instanceof Adept.Validator.Server)){this.validators[i].validate();if(!this.validators[i].isValid()){valid=false}}}return valid}catch(e){alert(e)}}});Adept.Core.namespace('Adept.Controller');Adept.Controller.Pager=Class.create(Adept.Controller,{ajaxLoading:false,initialize:function($super,id){$super(id);oThis=this;var links=this.getElement().getElementsByTagName('a');$A(links).each(function(link){Adept.Observer.addListener(link,'click',oThis.onSend.bindAsEventListener(oThis))})},onSend:function(event){if(this.isAjaxLoading()){var link=event.element();var request=Adept.Ajax.Backend.createRequest(link.href);request.send();event.stop()}},isAjaxLoading:function(){return this.ajaxLoading},setAjaxLoading:function(ajaxLoading){this.ajaxLoading=ajaxLoading}});Adept.Core.namespace("Adept.Controller");Adept.Controller.Timer=Class.create(Adept.Controller,{initialize:function($super,id,interval){this.id=id;new PeriodicalExecuter(this.onTimer.bind(this),interval)},onTimer:function(){var request=Adept.Ajax.Backend.createRequest();request.addEvent(this.id,'timer');request.setBusyState(request.IDLE);request.send()}});