c4form={_DEFAULT_ERROR_TAG:"",_RE_CONTAINS_NON_ALPHANUMERIC:/[^A-Za-z0-9]/,_RE_CONTAINS_NON_ALPHA:/[^\sA-Za-z]/,_RE_CONTAINS_NON_NUMERIC:/[^0-9]/,_RE_CONTAINS_NON_NUMERIC_DASHES:/[^0-9\-]/,_RE_EMAIL:/^[0-9a-zA-Z]([-.\w])*([0-9a-zA-Z])*@[0-9a-zA-Z](([-\w])*\.)+[a-zA-Z]{2,9}$/,_RE_DATE_DD_MM_YYYY:/^(0[1-9]|[1-2][0-9]|3[0-1])\/(0[1-9]|1[0-2])\/((19|20)\d\d)$/,DEBUG:true};c4form.Form=function(D,B){var C=C4.DOM.$;if(!document.getElementById||!document.getElementsByTagName){return }this.formId=D;this.formEl=C(this.formId);this.validations=[];this.bypassValidation=false;this.stopErrorsFor=[];for(var A=0;A<B.length;A++){v=B[A];this.validations.push(new c4form.Validation(v,this))}inputs=this.formEl.getElementsByTagName("input");for(var A=0;A<inputs.length;A++){inp=inputs[A];if(inp.getAttribute("type")!=null&&(inp.getAttribute("type").toLowerCase()=="submit"||inp.getAttribute("type").toLowerCase()=="image")){if(inp.className.match(/(^|\s)dontvalidate($|\s)/)){C4.BOM.addEvent(inp,"click",this._getCancelClick())}else{C4.BOM.addEvent(inp,"click",this._getSubmitClick())}}}C4.BOM.addEvent(this.formEl,"submit",this._getSubmitHandler())};c4form.Form.prototype={_getSubmitHandler:function(){_this=this;return function(A){if(!_this.bypassValidation){_this.clearErrorMessages();_this.doValidations();if(_this.hasErrors()){C4.BOM.stopEvent(A);_this.focusOnFirstError()}}if(_this.DEBUG){C4.BOM.stopEvent(A)}}},_getCancelClick:function(){_this=this;return function(A){_this.bypassValidation=true}},_getSubmitClick:function(){_this=this;return function(A){_this.bypassValidation=false}},clearErrorMessages:function(){this.stopErrorsFor=[];this.errorsArr=[];for(var A=0;A<this.validations.length;A++){this.validations[A].clearError()}},doValidations:function(){for(var A=0;A<this.validations.length;A++){this.validations[A].validate()}},hasErrors:function(){errors=false;for(var A=0;A<this.validations.length;A++){if(this.validations[A].containsError){errors=true}}return errors},focusOnFirstError:function(){focusSet=false;for(var A=0;A<this.validations.length;A++){v=this.validations[A];if(!focusSet&&v.containsError&&v.canFocus()){v.focus();focusSet=true}}}};c4form.Validation=function(A,C){var B=C4.DOM.$;this.fieldId=A.fieldId;this.fieldEl=B(this.fieldId);this.pattern=A.pattern||c4form.patterns._IS_NOT_EMPTY;this.errorId=A.errorId||this.fieldId+"Error";this.errorEl=B(this.errorId);this.message=A.message||this.pattern.defaultMessage;this.messageTag=A.messageTag||c4form._DEFAULT_ERROR_TAG;this.additional=A.additional||null;this.containsError=false;this.formRef=C};c4form.Validation.prototype={clearError:function(){this.containsError=false;if(this.errorEl.innerHTML!=""){this.errorEl.innerHTML=""}if(this.errorEl.errorShown!=null){this.errorEl.errorShown=null}},showError:function(){if(!this.errorsStopped()){this.containsError=true;errorItemText=document.createTextNode(this.message);if(this.messageTag!=null&&this.messageTag!=""){errorItem=document.createElement(this.messageTag);errorItem.appendChild(errorItemText)}else{errorItem=errorItemText}if(this.messageTag=="li"){if(this.errorEl.errorShown!=null){this.errorEl.getElementsByTagName("ul")[0].appendChild(errorItem)}else{ul=document.createElement("ul");ul.className="error";ul.appendChild(errorItem);this.errorEl.appendChild(ul);this.errorEl.errorShown=true}}else{this.errorEl.appendChild(errorItem)}if(this.pattern.stopValidating){this.formRef.stopErrorsFor.push(this.fieldId)}}},validate:function(){if(!this.pattern.test(this.fieldEl,this.additional)){this.showError()}},errorsStopped:function(){for(var A=0;A<this.formRef.stopErrorsFor.length;A++){if(this.formRef.stopErrorsFor[A]==this.fieldId){return true}}return false},canFocus:function(){return this.fieldEl.focus},focus:function(){this.fieldEl.focus()}};c4form.Pattern=function(A,B,C){this.patternFunction=A;this.defaultMessage=B;this.stopValidating=C};c4form.Pattern.prototype={test:function(B,A){return this.patternFunction(B,A)}};c4form.patterns={};c4form.patterns._IS_NOT_EMPTY=new c4form.Pattern(function(A){return(!A.value.match(/^\s+$/)&&A.value.length!=0)},"This field must not be empty",true);c4form.patterns._IS_NOT_EMPTY_WHEN_UNCHECKED=new c4form.Pattern(function(B,A){return(A.fieldId2.checked||(c4form.patterns._IS_NOT_EMPTY.test(B)&&B.value!=A.emptyValue))},"This field must not be empty",true);c4form.patterns._IS_ALPHANUMERIC=new c4form.Pattern(function(A){A.value=A.value.replace(/\s/g,"");return(!A.value.match(c4form._RE_CONTAINS_NON_ALPHANUMERIC))},"This field must only contain letters and numbers",false);c4form.patterns._IS_ALPHA=new c4form.Pattern(function(A){return(!A.value.match(c4form._RE_CONTAINS_NON_ALPHA))},"This field must only contain letters and spaces",false);c4form.patterns._IS_NUMERIC=new c4form.Pattern(function(A){A.value=A.value.replace(/\s/g,"");return(!A.value.match(c4form._RE_CONTAINS_NON_NUMERIC))},"The field must only contain numbers",false);c4form.patterns._IS_NUMERIC_DASHES=new c4form.Pattern(function(A){A.value=A.value.replace(/\s/g,"");return(!A.value.match(c4form._RE_CONTAINS_NON_NUMERIC_DASHES))},"The field must only contain numbers and dashes",false);c4form.patterns._IS_EMAIL=new c4form.Pattern(function(A){A.value=A.value.replace(/\s/g,"");return(A.value.match(c4form._RE_EMAIL))},"Please provide a valid email address",false);c4form.patterns._IS_SELECTED=new c4form.Pattern(function(A){if(A.nodeName.toLowerCase()=="select"){return(A.selectedIndex!=0)}else{return true}},"Please select an option",false);c4form.patterns._IS_CHECKED=new c4form.Pattern(function(A){return(A.checked)},"Please check this option",false);c4form.patterns._IS_C4_PASSWORD=new c4form.Pattern(function(A){return(c4form.patterns._IS_ALPHANUMERIC.test(A)&&A.value.length>=6)},"Your password must be at least six characters long and contain only letters and numbers",false);c4form.patterns._IS_IDENTICAL_TO=new c4form.Pattern(function(B,A){comparisonField=$(A.fieldId2);return(B.value==comparisonField.value)},"The two values are not the same",false);c4form.patterns._IS_DATE_DD_MM_YYYY=new c4form.Pattern(function(A){A.value=A.value.replace(/\s/g,"");return(A.value.match(c4form._RE_DATE_DD_MM_YYYY))},"Please provide a valid date in the format dd/mm/yyyy",false);c4form.patterns._IS_RADIO_SELECTED=new c4form.Pattern(function(B){fieldName=B.getAttribute("name");parentForm=null;currentNode=B.parentNode;while(currentNode.nodeName.toLowerCase()!="form"){currentNode=currentNode.parentNode}inputs=currentNode.getElementsByTagName("input");otherRadioInputs=[];for(var A=0;A<inputs.length;A++){if(inputs[A].getAttribute("name")==fieldName){otherRadioInputs.push(inputs[A])}}radioSelected=false;for(var A=0;A<otherRadioInputs.length;A++){if(otherRadioInputs[A].checked){radioSelected=true}}return radioSelected},"Please select one of the options",false);c4form.patterns._CHARACTER_MAX=new c4form.Pattern(function(B,A){return(B.value.length<=A)},"There are too many characters in this field",false);c4form.patterns._CHARACTER_MIN=new c4form.Pattern(function(B,A){return(B.value.length>=A)},"There are too few characters in this field",false);c4form.patterns._MULTIPLE_ALL_SELECTED=new c4form.Pattern(function(D,A){var C=C4.DOM.$;otherFields=A.split(",");otherFieldsEls=[];allSelected=true;for(var B=0;B<otherFields.length;B++){otherFieldsEls.push(C(otherFields[B]))}for(var B=0;B<otherFieldsEls.length;B++){if(otherFieldsEls[B]==null){continue}if(!c4form.patterns._IS_SELECTED.test(otherFieldsEls[B])){allSelected=false}}return allSelected},"Please select an item from each of the menus",false);