var HandleEstateForm=new Class({Implements:[Options,Events],options:{requestUrl:"",classExcludeElements:"",useClientcideWaiter:false,clientcideOverlayTarget:null,clientcideWaiterOptions:{},onRequestStart:$empty(),onRequestComplete:$empty(),onRequestEmpty:$empty(),onRequestFailed:$empty()},initialize:function(d,a,b){this.setOptions(b);this.frm=d;this.frmAction=(this.frm)?this.frm.get("action"):"";this.frmIsDisabled=false;this.container=a;this.frmElements=[];if(!this.checkInit()){return}this.containerSpinner=false;if(this.options.useClientcideWaiter){var c=($chk(this.options.clientcideOverlayTarget))?this.options.clientcideOverlayTarget:this.container;this.containerSpinner=new Waiter(c,this.options.clientcideWaiterOptions)}this.setupForm();this.parseElements()},setupForm:function(){var a=this;this.frm.addEvent("submit",function(b){if(a.frmIsDisabled){new Event(b).stop()}});this.frm.set("send",{url:a.options.requestUrl,onRequest:function(){a.handleReqStart()},onFailure:function(b){a.handleReqFailed(b)},onComplete:function(c,b){if(!c){c=""}if(!b){b=""}a.handleReqComplete(c,b)}})},checkInit:function(){var a=1;var b="";if(!$chk(this.frm)){b+=a+". Required element 'Form' not found.\n";a++}if(this.frmAction.clean()==""){b+=a+". Please check required formular action.\n";a++}if(!$chk(this.container)){b+=a+". Required element 'Container' not found.\n";a++}if((!$chk(this.options.requestUrl)||this.options.requestUrl.clean()=="")){b+=a+". Please check required option 'requestUrl'.\n";a++}if(b!=""){alert(b);return false}return true},parseElements:function(){this.frm.getElements("input, textarea, select").each(function(b){var a=function(){this.frm.send()}.bind(this);switch(b.type){case"text":if(this.options.classExcludeElements==""||!b.hasClass(this.options.classExcludeElements)){}var c=this;b.addEvents({focus:function(){c.frmIsDisabled=true},blur:function(){c.frmIsDisabled=false}});break;case"textarea":break;case"select":case"select-one":if(this.options.classExcludeElements==""||!b.hasClass(this.options.classExcludeElements)){b.addEvent("change",a)}this.frmElements.push(b);break;case"select-multiple":if(this.options.classExcludeElements==""||!b.hasClass(this.options.classExcludeElements)){b.addEvents({blur:a});this.frmElements.push(b)}break;case"checkbox":case"radio":if(this.options.classExcludeElements==""||!b.hasClass(this.options.classExcludeElements)){b.addEvents({click:a,keydown:function(d){if(d.key=="space"){a()}}});this.frmElements.push(b)}break}}.bind(this))},handleReqStart:function(){this.handleSpinner(true);this.fireEvent("onRequestStart")},handleReqComplete:function(b,a){if(b){this.garbageCleanUp();this.container.innerHTML=b;this.parseElements();this.handleSpinner(false);this.fireEvent("onRequestComplete",b,a)}else{this.handleReqEmpty()}},handleReqFailed:function(a){this.handleSpinner(false);this.fireEvent("onRequestFailed",a)},handleReqEmpty:function(){this.handleSpinner(false);this.fireEvent("onRequestEmpty")},handleSpinner:function(a){if(this.containerSpinner){if(a){this.containerSpinner.start()}else{this.containerSpinner.stop()}}},garbageCleanUp:function(){this.frmElements.each(function(a){a.removeEvents()})}});