var jFormsJQ={_forms:{},tForm:null,frmElt:null,declareForm:function(aForm){this._forms[aForm.name]=aForm;$('#'+aForm.name).bind('submit',function(ev){$(ev.target).trigger('jFormsUpdateFields');return jFormsJQ.verifyForm(ev.target)})},getForm:function(name){return this._forms[name]},verifyForm:function(frmElt){this.tForm=this._forms[frmElt.attributes.getNamedItem("id").value];this.frmElt=frmElt;var msg='';var valid=true;this.tForm.errorDecorator.start();for(var i=0;i<this.tForm.controls.length;i++){var c=this.tForm.controls[i];var elt=frmElt.elements[c.name];if(!elt)continue;var val=this.getValue(elt);if(val==''){if(c.required){this.tForm.errorDecorator.addError(c,1);valid=false}}else{if(!c.check(val,this)){this.tForm.errorDecorator.addError(c,2);valid=false}}}if(!valid)this.tForm.errorDecorator.end();return valid},getValue:function(elt){var value='';if(elt.nodeType){switch(elt.nodeName.toLowerCase()){case"input":switch(elt.getAttribute("type")){case"checkbox":case"radio":if(elt.checked)value='true';else value='false';break;default:value=elt.value;break}break;case"textarea":value=elt.value;break;case"select":if(!elt.multiple){value=elt.value;break}var options=elt.getElementsByTagName("option");value=[];for(var i=0;i<options.length;i++){if(options[i].selected){value.push(options[i].value)}}break}}else if(elt.item){value=[];for(var i=0;i<elt.length;i++){var radio=elt.item(i);if(radio.checked){value.push(radio.value)}}}return value},showHelp:function(aFormName,aControlName){var frm=this._forms[aFormName];var ctrls=frm.controls;var ctrl=null;for(var i=0;i<ctrls.length;i++){if(ctrls[i].name==aControlName){ctrl=ctrls[i];break}if(ctrls[i].confirmField&&ctrls[i].confirmField.name==aControlName){ctrl=ctrls[i].confirmField;break}}if(ctrl){frm.helpDecorator.show(ctrl.help)}},hasClass:function(elt,clss){return elt.className.match(new RegExp('(\\s|^)'+clss+'(\\s|$)'))},addClass:function(elt,clss){if(this.isCollection(elt)){for(var j=0;j<elt.length;j++){if(!this.hasClass(elt[j],clss)){elt[j].className+=" "+clss}}}else{if(!this.hasClass(elt,clss)){elt.className+=" "+clss}}},removeClass:function(elt,clss){if(this.isCollection(elt)){for(var j=0;j<elt.length;j++){if(this.hasClass(elt[j],clss)){elt[j].className=elt[j].className.replace(new RegExp('(\\s|^)'+clss+'(\\s|$)'),' ')}}}else{if(this.hasClass(elt,clss)){elt.className=elt.className.replace(new RegExp('(\\s|^)'+clss+'(\\s|$)'),' ')}}},setAttribute:function(elt,name,value){if(this.isCollection(elt)){for(var j=0;j<elt.length;j++){elt[j].setAttribute(name,value)}}else{elt.setAttribute(name,value)}},removeAttribute:function(elt,name){if(this.isCollection(elt)){for(var j=0;j<elt.length;j++){elt[j].removeAttribute(name)}}else{elt.removeAttribute(name)}},isCollection:function(elt){if(elt instanceof NodeList||elt instanceof HTMLCollection||elt instanceof Array)return true;if(elt.length!=undefined&&!(elt.localName!=undefined&&(elt.localName!='SELECT'||elt.localName!='select')))return true;return false}};function jFormsJQForm(name){this.name=name;this.controls=[];this.errorDecorator=new jFormsJQErrorDecoratorAlert();this.helpDecorator=new jFormsJQHelpDecoratorAlert()};jFormsJQForm.prototype={addControl:function(ctrl){this.controls.push(ctrl);ctrl.formName=this.name},setErrorDecorator:function(decorator){this.errorDecorator=decorator},setHelpDecorator:function(decorator){this.helpDecorator=decorator},getControl:function(aControlName){var ctrls=this.controls;for(var i=0;i<ctrls.length;i++){if(ctrls[i].name==aControlName){return ctrls[i]}}return null}};function jFormsJQControlString(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help='';this.isConfirmField=false;this.confirmFieldOf='';this.minLength=-1;this.maxLength=-1};jFormsJQControlString.prototype.check=function(val,jfrm){if(this.minLength!=-1&&val.length<this.minLength)return false;if(this.maxLength!=-1&&val.length>this.maxLength)return false;return true};function jFormsJQControlSecret(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help='';this.confirmField=null;this.minLength=-1;this.maxLength=-1};jFormsJQControlSecret.prototype.check=function(val,jfrm){if(this.minLength!=-1&&val.length<this.minLength)return false;if(this.maxLength!=-1&&val.length>this.maxLength)return false;if(this.confirmField){var val2=jfrm.getValue(jfrm.frmElt.elements[this.confirmField.name]);if(val!=val2){jfrm.tForm.errorDecorator.addError(this.confirmField,2);return false}}return true};function jFormsJQControlSecretConfirm(name,label){this.name=name;this.label=label;this.errInvalid='';this.errRequired='';this.help='';this.minLength=-1;this.maxLength=-1};function jFormsJQControlBoolean(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlBoolean.prototype.check=function(val,jfrm){return(val=='true'||val=='false')};function jFormsJQControlDecimal(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlDecimal.prototype.check=function(val,jfrm){return(-1!=val.search(/^\s*[\+\-]?\d+(\.\d+)?\s*$/))};function jFormsJQControlInteger(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlInteger.prototype.check=function(val,jfrm){return(-1!=val.search(/^\s*[\+\-]?\d+\s*$/))};function jFormsJQControlHexadecimal(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlHexadecimal.prototype.check=function(val,jfrm){return(val.search(/^0x[a-f0-9A-F]+$/)!=-1)};function jFormsJQControlDatetime(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlDatetime.prototype.check=function(val,jfrm){var t=val.match(/^(\d{4})\-(\d{2})\-(\d{2}) (\d{2}):(\d{2})(:(\d{2}))?$/);if(t==null)return false;var yy=parseInt(t[1],10);var mm=parseInt(t[2],10)-1;var dd=parseInt(t[3],10);var th=parseInt(t[4],10);var tm=parseInt(t[5],10);var ts=0;if(t[7]!=null)ts=parseInt(t[7],10);var dt=new Date(yy,mm,dd,th,tm,ts);if(yy!=dt.getFullYear()||mm!=dt.getMonth()||dd!=dt.getDate()||th!=dt.getHours()||tm!=dt.getMinutes()||ts!=dt.getSeconds())return false;else return true};function jFormsJQControlDate(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlDate.prototype.check=function(val,jfrm){var t=val.match(/^(\d{4})\-(\d{2})\-(\d{2})$/);if(t==null)return false;var yy=parseInt(t[1],10);var mm=parseInt(t[2],10)-1;var dd=parseInt(t[3],10);var dt=new Date(yy,mm,dd,0,0,0);if(yy!=dt.getFullYear()||mm!=dt.getMonth()||dd!=dt.getDate())return false;else return true};function jFormsJQControlTime(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlTime.prototype.check=function(val,jfrm){var t=val.match(/^(\d{2}):(\d{2})(:(\d{2}))?$/);if(t==null)return false;var th=parseInt(t[1],10);var tm=parseInt(t[2],10);var ts=0;if(t[4]!=null)ts=parseInt(t[4],10);var dt=new Date(2007,05,02,th,tm,ts);if(th!=dt.getHours()||tm!=dt.getMinutes()||ts!=dt.getSeconds())return false;else return true};function jFormsJQControlLocaleDatetime(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help='';this.lang=''};jFormsJQControlLocaleDatetime.prototype.check=function(val,jfrm){var yy,mm,dd,th,tm,ts;if(this.lang.indexOf('fr_')==0){var t=val.match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2})(:(\d{2}))?$/);if(t==null)return false;yy=parseInt(t[3],10);mm=parseInt(t[2],10)-1;dd=parseInt(t[1],10);th=parseInt(t[4],10);tm=parseInt(t[5],10);ts=0;if(t[7]!=null)ts=parseInt(t[7],10)}else{var t=val.match(/^(\d{2})\/(\d{2})\/(\d{4}) (\d{2}):(\d{2})(:(\d{2}))?$/);if(t==null)return false;yy=parseInt(t[3],10);mm=parseInt(t[1],10)-1;dd=parseInt(t[2],10);th=parseInt(t[4],10);tm=parseInt(t[5],10);ts=0;if(t[7]!=null)ts=parseInt(t[7],10)}var dt=new Date(yy,mm,dd,th,tm,ts);if(yy!=dt.getFullYear()||mm!=dt.getMonth()||dd!=dt.getDate()||th!=dt.getHours()||tm!=dt.getMinutes()||ts!=dt.getSeconds())return false;else return true};function jFormsJQControlLocaleDate(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help='';this.lang=''};jFormsJQControlLocaleDate.prototype.check=function(val,jfrm){var yy,mm,dd;if(this.lang.indexOf('fr_')==0){var t=val.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);if(t==null)return false;yy=parseInt(t[3],10);mm=parseInt(t[2],10)-1;dd=parseInt(t[1],10)}else{var t=val.match(/^(\d{2})\/(\d{2})\/(\d{4})$/);if(t==null)return false;yy=parseInt(t[3],10);mm=parseInt(t[1],10)-1;dd=parseInt(t[2],10)}var dt=new Date(yy,mm,dd,0,0,0);if(yy!=dt.getFullYear()||mm!=dt.getMonth()||dd!=dt.getDate())return false;else return true};function jFormsJQControlUrl(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlUrl.prototype.check=function(val,jfrm){return(val.search(/^[a-z]+:\/\/((((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))((\/)|$)/)!=-1)};function jFormsJQControlEmail(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlEmail.prototype.check=function(val,jfrm){return(val.search(/^((\"[^\"f\n\r\t\b]+\")|([\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+(\.[\w\!\#\$\%\&\'\*\+\-\~\/\^\`\|\{\}]+)*))@((\[(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))\])|(((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9]))\.((25[0-5])|(2[0-4][0-9])|([0-1]?[0-9]?[0-9])))|((([A-Za-z0-9\-])+\.)+[A-Za-z\-]+))$/)!=-1)};function jFormsJQControlIpv4(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlIpv4.prototype.check=function(val,jfrm){var t=val.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/);if(t)return(t[1]>255||t[2]>255||t[3]>255||t[4]>255);return false};function jFormsJQControlIpv6(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help=''};jFormsJQControlIpv6.prototype.check=function(val,jfrm){return(val.search(/^([a-f0-9]{1,4})(:([a-f0-9]{1,4})){7}$/i)!=-1)};function jFormsJQControlChoice(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help='';this.items={}};jFormsJQControlChoice.prototype={addControl:function(ctrl,itemValue){if(this.items[itemValue]==undefined)this.items[itemValue]=[];this.items[itemValue].push(ctrl)},check:function(val,jfrm){if(this.items[val]==undefined)return false;var list=this.items[val];var valid=true;for(var i=0;i<list.length;i++){var val2=jfrm.getValue(jfrm.frmElt.elements[list[i].name]);if(val2==''){if(list[i].required){jfrm.tForm.errorDecorator.addError(list[i],1);valid=false}}else if(!list[i].check(val2,jfrm)){jfrm.tForm.errorDecorator.addError(list[i],2);valid=false}}return valid},activate:function(val){var frmElt=document.getElementById(this.formName);for(var j in this.items){var list=this.items[j];for(var i=0;i<list.length;i++){var elt=frmElt.elements[list[i].name];if(val==j){jFormsJQ.removeAttribute(elt,"readonly");jFormsJQ.removeClass(elt,"jforms-readonly")}else{jFormsJQ.setAttribute(elt,"readonly","readonly");jFormsJQ.addClass(elt,"jforms-readonly")}}}}};function jFormsJQErrorDecoratorAlert(){this.message=''};jFormsJQErrorDecoratorAlert.prototype={start:function(){this.message=''},addError:function(control,messageType){if(messageType==1){this.message+="* "+control.errRequired+"\n"}else if(messageType==2){this.message+="* "+control.errInvalid+"\n"}else{this.message+="* Error on '"+control.label+"' field\n"}},end:function(){if(this.message!=''){alert(this.message)}}};function jFormsJQHelpDecoratorAlert(){};jFormsJQHelpDecoratorAlert.prototype={show:function(message){alert(message)}};