var jpForm=new Class({Implements:[Options,Events],form:null,fields:[],errorMessageContainer:null,submitInfoMessageContainer:null,options:{autoClear:false,valuesToConsiderNull:[],errorMessageContainerTag:"p",errorMessageContainerId:"jpFrmMessage",errorMessage:"Please fill in all the required fields.",submitInfoMessageContainerId:"jpFrmSendingMessage",submittingMessage:"Submitting...",sentMessage:"Thank you, your enquiry has been sent.",sendErrorMessage:"Sorry, an error occured. Please try again later.",autoScrollOnError:false,inlineErrorMsg:true,ajax:false,loadingClass:"loading",sentClass:"sent",autoFocus:true,resetToNull:false,relations:[]},initialize:function(C,A){this.form=$(C);if(!this.form){return }this.setOptions(A);if(this.form.hasClass("jpFrmNoInlineErrorMsg")){this.options.inlineErrorMsg=false}this.errorMessageContainer=$(this.options.errorMessageContainerId);this.form.getElements("input, textarea, select").each(function(D){this.fields.push(new jpField(D,this.options))},this);if(this.options.autoFocus&&!this.options.autoClear&&this.fields.length){var B=0;do{if(this.fields[B].type!="hidden"){this.fields[B].element.focus();break}}while(++B<this.fields.length)}if(this.options.ajax){new Element("input",{type:"hidden",name:"ajax",value:"1"}).injectInside(this.form)}this.form.addEvent("submit",function(D){this.fireEvent("submit",D)}.bindWithEvent(this));this.addEvent("submit",function(D){this.submit(D)}.bindWithEvent(this));if(this.options.resetToNull){this.form.getElements("input[type=reset]").each(function(D){D.addEvent("click",function(E){E.stop();this.reset()}.bindWithEvent(this))},this)}this.options.relations.each(function(D){this.addRelation(D)},this)},submit:function(A){var C=true;for(var B=0;B<this.fields.length;B++){C*=this.fields[B].check()}if(C){if(this.errorMessageContainer){this.errorMessageContainer.dispose();this.errorMessageContainer=null}for(var B=0;B<this.fields.length;B++){this.fields[B].clearNullFields()}if(this.options.ajax){A.stop();this.form.addClass(this.options.loadingClass);this.form.set("send",{url:this.form.get("action"),onComplete:function(){this.form.removeClass(this.options.loadingClass);this.form.addClass(this.options.sentClass)}.bind(this),onSuccess:function(E){if(E=="success"){this.submitInfoMessageContainer.set("html",this.options.sentMessage)}else{this.submitInfoMessageContainer.set("html",this.options.sendErrorMessage)}}.bind(this),onFailure:function(){this.submitInfoMessageContainer.set("html",this.options.sendErrorMessage)}.bind(this)});this.form.send();this.submitInfoMessageContainer=new Element(this.options.errorMessageContainerTag,{id:this.options.submitInfoMessageContainerId,html:this.options.submittingMessage});this.submitInfoMessageContainer.injectTop(this.form)}this.fireEvent("sent")}else{new Event(A).stop();if(this.options.inlineErrorMsg){if(!this.errorMessageContainer){this.errorMessageContainer=new Element(this.options.errorMessageContainerTag,{id:this.options.errorMessageContainerId});this.errorMessageContainer.injectTop(this.form)}this.errorMessageContainer.set("html",this.options.errorMessage);if(this.options.autoScrollOnError){new Fx.Scroll(window,{wheelStops:false,duration:100}).toElement(this.form)}}else{alert(this.options.errorMessage)}for(var D=0;D<this.fields.length;D++){if(this.fields[D].hasError){this.fields[D].element.focus();break}}}},addRelation:function(F){var C=this.getField(F.masterField);if(C){switch(F.type){case"incremental-show":var E=$$("."+F.slaveFieldsClass);var B=[];for(var D=0;D<E.length;D++){B.push(this.getField(E[D]))}var A=typeof F.slavesContainer!="undefined"?F.slavesContainer:null;C.addIncrementalShowRelation(B,A);break}}},getField:function(B){B=$(B);for(var A=0;A<this.fields.length;A++){if(this.fields[A].element==B){return this.fields[A]}}return null},reset:function(){this.fields.each(function(A){A.reset()},this)}});var jpField=new Class({Implements:[Options,Events],element:null,label:null,cleared:false,initialValue:"",type:null,hasError:false,hasFocus:false,labelTimer:null,slaves:[],slavesContainer:null,options:{autoClear:true,valuesToConsiderNull:[],requiredClass:"jpFrmRequired",errorClass:"jpFrmError",emailClass:"jpFrmEmail",dateClass:"jpFrmDate",numericClass:"jpFrmNumeric",labelDelay:2000},initialize:function(C,B){this.element=$(C);if(!this.element){return }this.setOptions(B);this.initialValue=this.element.value;var A=this.element.get("tag");if(A=="input"){this.type=this.element.getAttribute("type")||"text"}else{this.type=A}this.element.addEvent("blur",function(){this.hasFocus=false;if(this.hasError){this.check()}this.hideLabel();if(this.options.autoClear){this.setToDefault()}}.bind(this));this.label=new jpLabel(null,this);if(this.options.autoClear&&(this.type=="text"||this.type=="password"||this.type=="textarea")){this.element.addEvent("focus",function(){this.hasFocus=true;this.showLabel();this.clearDefault()}.bind(this));this.element.addEvent("mouseenter",function(){this.showLabel()}.bindWithEvent(this));this.element.addEvent("mouseleave",function(){this.hideLabel()}.bindWithEvent(this))}},showLabel:function(){if(this.label){$clear(this.labelTimer);this.label.show()}},hideLabel:function(A){if(this.label){if((!this.hasFocus&&!this.hasError)||A){$clear(this.labelTimer);this.label.hide()}}},getValue:function(A){var C=this.element.value;if(!A){var B=0;while(B<this.options.valuesToConsiderNull.length){if(C==this.options.valuesToConsiderNull[B]){C="";break}B++}}return C},clearNullFields:function(){if(this.type!="select"||!this.element.multiple){this.element.value=this.getValue()}},isRequired:function(){return this.element.hasClass(this.options.requiredClass)},check:function(){var A=true;if(this.isRequired()&&!this.get("disabled")){switch(this.type){case"text":case"password":case"textarea":case"file":case"select":var B=this.getValue();A=B!="";if(A){if(this.element.hasClass(this.options.emailClass)){A=B.match(/.+\@.+\..+/)?true:false}if(this.element.hasClass(this.options.numericClass)){A=B.match(/\d+/)?true:false}if(this.element.hasClass(this.options.dateClass)){A=B.match(/\d{1,2}\/\d{1,2}\/\d{4}/)?true:false}}break;case"checkbox":A=this.element.checked;break}}if(!A){this.setError()}else{this.removeError()}return A},setError:function(){this.fireEvent("error");this.hasError=true;this.element.addClass(this.options.errorClass);if(this.label){this.label.setError();this.label.show()}},removeError:function(){this.fireEvent("removeError");this.hasError=false;this.element.removeClass(this.options.errorClass);if(this.label){this.label.removeError();this.label.hide()}},clearDefault:function(){if(this.element&&!this.cleared){this.element.value=""}this.cleared=true},setToDefault:function(){if(this.getValue(true)==""){this.element.value=this.initialValue;this.cleared=false}},get:function(A){if(A=="value"){return this.getValue()}return this.element.get(A)},hide:function(){this.element.getParent().addClass("hidden")},show:function(){this.element.getParent().removeClass("hidden")},addIncrementalShowRelation:function(A,B){this.slaves=A;this.slavesContainer=typeof B!="undefined"?$(B):null;this.updateIncrementalShowRelation(true);this.element.addEvent("change",function(){this.updateIncrementalShowRelation()}.bindWithEvent(this))},updateIncrementalShowRelation:function(C){var A=this.getValue();if(this.slavesContainer){if(A==0){this.slavesContainer.addClass("hidden")}else{this.slavesContainer.removeClass("hidden")}}for(var B=0;B<this.slaves.length;B++){if(B>=A){this.slaves[B].hide();this.slaves[B].element.set("disabled",true)}else{this.slaves[B].show();this.slaves[B].element.set("disabled",false);if(B==0&&(typeof C=="undefined"||!C)){this.slaves[B].element.focus()}}}},reset:function(){switch(this.type){case"textbox":case"textarea":this.element.set("value","");break;case"checkbox":case"radio":this.element.checked=false;break;case"select":this.element.getElements("option").each(function(A){A.selected=false});break}}});var jpLabel=new Class({Implements:[Options,Events],element:null,hovering:false,options:{autohide:true,activeClass:"jpFrmActive",errorClass:"jpFrmError",hideOnHover:true},initialize:function(B,A){if(B){this.element=$(B)}if(!this.element&&A){A=typeof A=="object"?A:$(A);if(A){this.element=$$("label[for="+A.get("id")+"]")}}if(!this.element){return }this.element.addEvent("mouseenter",function(){this.onHover()}.bind(this));this.element.addEvent("mouseleave",function(){this.onHoverEnd()}.bind(this))},show:function(){if(this.options.autohide){this.fireEvent("show");this.element.addClass(this.options.activeClass);this.timerId=null}},hide:function(){if(this.options.autohide){this.fireEvent("hide");this.element.removeClass(this.options.activeClass)}},onHover:function(){this.hovering=true},onHoverEnd:function(){this.hovering=false},setError:function(){this.fireEvent("error");this.element.addClass(this.options.errorClass)},removeError:function(){this.fireEvent("removeError");this.element.removeClass(this.options.errorClass)}});
