YUI.add("key-io",function(a){a.namespace("KEY.io");a.KEY.io.RemoteConnect=function(b){a.KEY.io.RemoteConnect.superclass.constructor.call(this,b);b=b||{};if(b.timeout){this.set("timeout",b.timeout)}if(b.synchron){this.set("synchron",b.synchron)}if(b.delay){this.set("delay",b.delay)}if(b.success){this.success=b.success}if(b.failure){this.failure=b.failure}this.publish("remoteConnect:start");this.publish("remoteConnect:end");this.set("ioCfg",a.mix(this.get("ioCfg"),b));this.set("ioCfg.on.start",a.bind(this.onStart,this));this.set("ioCfg.on.complete",a.bind(this.onComplete,this));this.set("ioCfg.on.end",a.bind(this.onEnd,this));var c=a.Node.create('<div class="loading hidden" role="presentation"></div>');this.set("nodeLoading",c)};a.KEY.io.RemoteConnect.NAME="remoteConnect";a.KEY.io.RemoteConnect.IDLE=0;a.KEY.io.RemoteConnect.REQUESTING=1;a.KEY.io.RemoteConnect.ATTRS={ioCfg:{value:{method:"POST",on:{start:{},complete:{},end:{}},data:null,context:null}},status:{value:a.KEY.io.RemoteConnect.IDLE},tid:{value:-1},timeout:{value:5000},synchron:{value:false},lasttime:{value:0},delay:{value:200},data:{value:null},context:{value:null},overlayError:{value:null},nodeLoading:{value:null},nodeLoadingToggle:{value:null}};a.extend(a.KEY.io.RemoteConnect,a.Base,{initializer:function(b){},destructor:function(){},success:function(b){},failure:function(c,b){this.showOverlayError(b)},onComplete:function(f,c){if(this.fire("remoteConnect:end")){if(c.status<200||c.status>=300){a.log("Response: "+c.status+" "+c.statusText);a.log(c.getAllResponseHeaders());this.failure(f,false)}else{try{var b=a.JSON.parse(c.responseText);this.set("data",b);a.log("Data set to: "+c.responseText,"info","RemoteConnect");this.success(f)}catch(d){a.log(d,"warn");this.failure(f,true)}}this.onEnd(f,c)}},onStart:function(d){var c=this.get("nodeLoading");var b=this.get("nodeLoadingToggle");c.removeClass("hidden");if(b){b.addClass("hidden")}},onEnd:function(e,c){var d=this.get("nodeLoading");var b=this.get("nodeLoadingToggle");d.addClass("hidden");if(b){b.removeClass("hidden")}},setDataOut:function(b){try{this.set("ioCfg.data",b)}catch(c){return false}return true},setNodeLoadingPos:function(c){var b=this.get("nodeLoading");if(b.get("parentNode")){b.remove()}this.set("nodeLoadingToggle",null);if(!c){return}try{if(c=="center"){c=a.one("#kmain")}var e=c.get("tagName").toLowerCase();if(e=="a"||e=="input"){var j=c.get("parentNode");if(j.hasClass("bbutton")){this.set("nodeLoadingToggle",j)}else{j=j.get("parentNode");if(j.hasClass("bbutton")){this.set("nodeLoadingToggle",j)}}}var f=this.get("nodeLoadingToggle");if(f){c=f.get("parentNode")}a.Node.getDOMNode(c).appendChild(a.Node.getDOMNode(b));var g=c.getComputedStyle("width");var d=c.getComputedStyle("height");var i=(g.replace("px","")/2)-(b.getComputedStyle("width").replace("px","")/2);var h=(d.replace("px","")/2)-(b.getComputedStyle("height").replace("px","")/2);if(f!=null){b.setStyle("width",g);b.setStyle("height",d);b.setStyle("position",c.getStyle("position"));b.setStyle("top","");b.setStyle("left","")}else{b.setStyle("width","");b.setStyle("height","");b.setStyle("position","absolute");b.setStyle("top",h+"px");b.setStyle("left",i+"px");if(c.getStyle("position")==null||c.getStyle("position")=="static"){c.setStyle("position","relative");if(c.getStyle("zIndex")=="auto"){c.setStyle("zIndex","-1")}}}}catch(k){a.log(k,"error","RemoteConnect")}},showOverlayError:function(f){var d=this.get("overlayError");var c=a.get("#RemoteConnectErrorBox");if(!d&&c){d=new a.Overlay({contentBox:c,width:"30em",visible:false,zIndex:199});c.removeClass("hidden");d.render();d.set("centered","#kmain");a.one("#RemoteConnectErrorBox .button-ok a").on("click",a.bind(this.onHideOverlayError,this));d.get("boundingBox").appendChild(a.Node.create('<div class="yui-menu-shadow"></div>'));this.set("overlayError",d)}var e=a.one("#RemoteConnectErrorBox .RemoteConnectError");var b=a.one("#RemoteConnectErrorBox .RemoteConnectErrorHttp");e.addClass("hidden");b.addClass("hidden");var g=f?e:b;g.removeClass("hidden");d.show()},onHideOverlayError:function(c){var b=this.get("overlayError");if(b){b.hide()}return true},isIdle:function(){return this.get("status")==a.KEY.io.RemoteConnect.IDLE},abort:function(){if(this.get("status")!=a.KEY.io.RemoteConnect.IDLE){this.set("status",a.KEY.io.RemoteConnect.IDLE)}return true},start:function(){var e=true;var b=-1;if(this.get("status")!=a.KEY.io.RemoteConnect.IDLE){e=this.abort()}if(e&&this.fire("remoteConnect:start")){this.set("status",a.KEY.io.RemoteConnect.REQUESTING);this.set("lasttime",new Date().getTime());var c=this.get("ioCfg");var d=c.url.indexOf("#");if(d!=-1){c.url=c.url.substring(0,d)}b=a.io(c.url,c);this.onStart(b)}return b}});a.KEY.io.FormRemoteConnect=function(c){var h=a.get("#"+c.form.id);var e="";if(h){e=h.get("action")}else{a.log("Cannot find FormRemoteConnect element #"+c.form.id,"info","FormRemoteConnect")}var b={url:e,form:{useDisabled:true}};c=a.merge(b,c);a.KEY.io.FormRemoteConnect.superclass.constructor.call(this,c);this.publish("formRemoteConnect:success");this.publish("formRemoteConnect:ok");this.publish("formRemoteConnect:captchareload");this.publish("formRemoteConnect:failure");a.Global.publish("form:submit",{broadcast:true,bubbles:true});this.set("oForm",h);if(h){a.log("registering for submit"+this.get("oForm").get("id"));a.Global.on("form:submit",this.onSubmit,this,this)}this.resetDataOut();if(this.get("ioCfg.form.incremental")){this.enableIncrementalValidation()}var g=a.Node.getDOMNode(this.get("oForm"));var d=this.get("submitElement.name");var f=this.get("submitElement.defaultValue");var i=g[d];if(i){if(!f){this.set("submitElement.defaultValue",i.value)}else{this.setSubmitElementValue(f)}a.log("defaultSubmitValue is "+this.get("submitElement.defaultValue"),"info","FormRemoteConnect")}};a.KEY.io.FormRemoteConnect.NAME="formRemoteConnect";a.KEY.io.FormRemoteConnect.ATTRS={oForm:{value:null},successClear:{value:true},submitElement:{value:{name:"submitElement",defaultValue:null}}};a.extend(a.KEY.io.FormRemoteConnect,a.KEY.io.RemoteConnect,{initializer:function(b){},destructor:function(){},onSubmit:function(c,b){a.log("Submit of Form "+b,"info","FormRemoteConnect");if(b&&b.get("tagName").toLowerCase()=="form"&&b.get("id")==this.get("oForm").get("id")){if(c){this.setNodeLoadingPos(c.currentTarget)}this.resetDataOut();this.start();if(c){c.preventDefault()}return false}},onStart:function(b){a.KEY.io.FormRemoteConnect.superclass.onStart.call(this,b)},onElementFocus:function(b){a.Event.detach("blur",this.onElementBlur,b.target);a.Event.attach("blur",this.onElementBlur,b.target,this,b.target.get("value"))},onElementBlur:function(f,b){if(f.target.get("value")==b){a.log("Blur: unchanged value "+b,"info","FormRemote");return}var d=f.target.get("id").split("-");var c=d.pop();this.setNodeLoadingPos(null);this.setFormLineOkClear(c,true);this.setFormErrorClear(c);this.submit(c)},resetDataOut:function(){this.setDataOut("isAjax=true")},success:function(c){a.KEY.io.FormRemoteConnect.superclass.success.call(this,c);var b=this.get("data.FormData");this.handleFormData(b);this.setSubmitElementValue(this.get("submitElement.defaultValue"))},handleFormData:function(i){var c=this.get("oForm").get("name");var j=c.split("-");var f=j[j.length-1];var g=a.get("#formerr-"+f);if(i!=null){var b=function(){if(!i.oks){this.get("oForm").all(".formerror").set("innerHTML","").addClass("hidden");this.get("oForm").all(".formres-err").removeClass("formres-err");if(g!=null&&!g.hasClass("hidden")){g.addClass("hidden")}}if(i.errors&&this.fire("formRemoteConnect:failure")){if(g){g.removeClass("hidden")}var p=this.get("ioCfg.form.captcha")||"";for(var r in i.errors){a.log("ErrorKey: "+r);var q="#err-"+f+"-"+r;var l=a.get(q);if(l){l.set("innerHTML",i.errors[r]["text"]).removeClass("hidden")}else{a.log("Node "+q+" not found!","warn","FormRemote")}var m="#formline-"+f+"-"+r;var s=a.get(m);if(s!=null){s.addClass("formres-err").removeClass("formres-ok").removeClass("formres-no");s.addClass("formres-err-"+f+"-"+r).removeClass("formres-ok-"+f+"-"+r).removeClass("formres-no-"+f+"-"+r)}else{a.log("Node "+m+" not found!","info","FormRemote")}if(r==p&&i.errors[r].error!="MISSING"){this.captchaReload()}}}if(i.oks!=null&&this.fire("formRemoteConnect:ok")){for(var n in i.oks){var r=i.oks[n];a.log("OksKey: "+r);var m="#formline-"+f+"-"+r;var s=a.get(m);if(s!=null){s.addClass("formres-ok").removeClass("formres-err").removeClass("formres-no");s.addClass("formres-ok-"+f+"-"+r).removeClass("formres-err-"+f+"-"+r).removeClass("formres-no-"+f+"-"+r)}else{a.log("Node "+m+" not found!","info","FormRemote")}var q="#err-"+f+"-"+r;var l=a.get(q);if(l!=null){l.set("innerHTML","");if(!l.hasClass("hidden")){l.addClass("hidden")}}}if(g!=null){var k=g.all(".formerror");var o=true;for(var n=0;n<k.size();n++){if(!k.item(n).hasClass("hidden")){o=false;break}}if(o){if(g!=null){g.addClass("hidden")}}}}};var d=new Date().getTime()-this.get("lasttime");var h=this.get("delay");if(d<h){KYUI().use("async-queue",a.bind(function(k){var l=new k.AsyncQueue();l.add({fn:b,timeout:(h-d),context:this});l.run()},this))}else{a.bind(b,this)()}}else{if(this.fire("formRemoteConnect:success")){a.log("success of Form");if(g!=null){g.addClass("hidden")}var e=this.get("successClear");if(e){this.get("oForm").reset()}this.setFormLinesOkClear(e)}}},setFormLinesOkClear:function(b){var e=this.get("oForm").all(".formline");for(var d=0;d<e.size();d++){var c=e.item(d);this.setFormLineOkClear(c,b)}},setFormLineOkClear:function(d,b){var h=b?"no":"ok";var e=b?"ok":"no";var c=null;if(typeof(d)=="string"){var g=this.get("oForm").get("id").split("-");var f=g[g.length-1];c=this.get("oForm").one("#formline-"+f+"-"+d)}else{c=d;var g=c.get("id").split("-");var d=g[g.length-1];var f=g[g.length-2]}if(c!=null){c.addClass("formres-"+h).removeClass("formres-"+e).removeClass("formres-err");c.addClass("formres-"+h+"-"+f+"-"+d).removeClass("formres-"+e+"-"+f+"-"+d).removeClass("formres-err-"+f+"-"+d)}},setFormErrorsClear:function(){var f=null;var c=this.get("oForm").all(".formerror");if(c.size()>0){var e=c.item(0).get("id").split("-");var f=a.get("#formerr-"+e[e.length-2])}for(var b=0;b<c.size();b++){var d=c.item(b);this.setFormErrorClear(d)}if(f!=null){f.addClass("hidden")}},setFormErrorClear:function(b){var c=null;if(typeof(b)=="string"){var e=this.get("oForm").get("id").split("-");var d=e[e.length-1];c=this.get("oForm").one("#formerr-"+d+"-"+b)}else{c=b}if(c!=null){c.set("innerHTML","");if(!c.hasClass("hidden")){c.addClass("hidden")}}},failure:function(c,b){if(this.fire("formRemoteConnect:failure")){a.KEY.io.FormRemoteConnect.superclass.failure.call(this,c,b)}},submit:function(b){if(b){this.setFormLineOkClear(b,true);this.setFormErrorClear(b);this.setSubmitElementValue(b)}var d=this.get("oForm");var c=a.Global.getEvent("form:submit",true);if(c){c.stopped=0}if(a.Global.fire("form:submit",null,d)){d.submit()}},reset:function(){this.get("oForm").reset();this.setFormLinesOkClear(true);this.setFormErrorsClear()},setSubmitElementValue:function(e){var c=a.Node.getDOMNode(this.get("oForm"));var b=this.get("submitElement.name");var d=c[b];if(d==null){d=a.Node.create('<input type="hidden" name="'+b+'" />');this.get("oForm").append(d)}d.setAttribute("value",e);a.log("set value to "+e)},showOverlayError:function(b){a.KEY.io.FormRemoteConnect.superclass.showOverlayError.call(this,b);this.get("overlayError").set("centered",this.get("oForm"))},enableIncrementalValidation:function(){a.log("Init increments","info","FormRemoteConnect");var d=a.Node.getDOMNode(this.get("oForm"));for(var b=0;b<d.elements.length;b++){var c=d.elements[b];a.one(c).on("focus",this.onElementFocus,this)}},captchaReload:function(){var h=this.get("ioCfg.form.id");var c=this.get("oForm").get("name");var b=c.split("-");var f=b[b.length-1];var d=this.get("ioCfg.form.captcha");if(d!=null&&this.fire("formRemoteConnect:captchareload",h)&&a.Global.fire("formRemoteConnect:captchareload",h)){try{a.get("#"+f+"-"+d).set("value","").focus()}catch(g){}return true}return false}})},"1.0",{requires:["base","io-base","io-form","json","event","node","overlay","anim"],skinnable:false});