var jFormsJQ={_forms:{},tForm:null,declareForm:function(aForm){this._forms[aForm.name]=aForm;jQuery('#'+aForm.name).bind('submit',function(ev){jQuery(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];var msg='';var valid=true;this.tForm.errorDecorator.start();for(var i=0;i<this.tForm.controls.length;i++){if(!this.verifyControl(this.tForm.controls[i],this.tForm))valid=false}if(!valid)this.tForm.errorDecorator.end();return valid},verifyControl:function(ctrl,frm){var val;if(typeof ctrl.getValue=='function'){val=ctrl.getValue()}else{var elt=frm.element.elements[ctrl.name];if(!elt)return true;val=this.getValue(elt)}if(val===null||val===false){if(ctrl.required){frm.errorDecorator.addError(ctrl,1);return false}}else{if(!ctrl.check(val,frm)){frm.errorDecorator.addError(ctrl,2);return false}}return true},getValue:function(elt){if(elt.nodeType){switch(elt.nodeName.toLowerCase()){case"input":if(elt.getAttribute('type')=='checkbox')return elt.checked;case"textarea":var val=jQuery.trim(elt.value);return(val!==''?val:null);case"select":if(!elt.multiple)return(elt.value!==''?elt.value:null);var values=[];for(var i=0;i<elt.options.length;i++){if(elt.options[i].selected)values.push(elt.options[i].value)}if(values.length)return values;return null}}else if(elt.item){var values=[];for(var i=0;i<elt.length;i++){var item=elt.item(i);if(item.checked)values.push(item.value)}if(values.length){if(elt.item(0).getAttribute('type')=='radio')return values[0];return values}}return null},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();this.element=jQuery('#'+name).get(0)};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.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.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;return true};function jFormsJQControlConfirm(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help='';this._masterControl=name.replace(/_confirm$/,'')};jFormsJQControlConfirm.prototype.check=function(val,jfrm){if(jFormsJQ.getValue(jfrm.element.elements[this._masterControl])!==val)return false;return true};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='';this.minDate=null;this.maxDate=null;this.multiFields=false};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 if((this.minDate!==null&&val<this.minDate)||(this.maxDate!==null&&val>this.maxDate))return false;return true};jFormsJQControlDatetime.prototype.getValue=function(){if(!this.multiFields){var val=jQuery.trim(jQuery('#'+this.formName+'_'+this.name).val());return(val!==''?val:null)}var controlId='#'+this.formName+'_'+this.name;var v=jQuery(controlId+'_year').val()+'-'+jQuery(controlId+'_month').val()+'-'+jQuery(controlId+'_day').val()+' '+jQuery(controlId+'_hour').val()+':'+jQuery(controlId+'_minutes').val();var secondsControl=jQuery('#'+this.formName+'_'+this.name+'_seconds');if(secondsControl.attr('type')!=='hidden'){v+=':'+secondsControl.val();if(v=='-- ::')return null}else if(v=='-- :')return null;return v};function jFormsJQControlDate(name,label){this.name=name;this.label=label;this.required=false;this.errInvalid='';this.errRequired='';this.help='';this.multiFields=false;this.minDate=null;this.maxDate=null};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 if((this.minDate!==null&&val<this.minDate)||(this.maxDate!==null&&val>this.maxDate))return false;return true};jFormsJQControlDate.prototype.getValue=function(){if(!this.multiFields){var val=jQuery.trim(jQuery('#'+this.formName+'_'+this.name).val());return(val!==''?val:null)}var controlId='#'+this.formName+'_'+this.name;var v=jQuery(controlId+'_year').val()+'-'+jQuery(controlId+'_month').val()+'-'+jQuery(controlId+'_day').val();if(v=='--')return null;return v};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=jFormsJQ.getValue(jfrm.element.elements[list[i].name]);if(val2==''){if(list[i].required){jfrm.errorDecorator.addError(list[i],1);valid=false}}else if(!list[i].check(val2,jfrm)){jfrm.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)}};
