if(typeof(ONEGEEK)=="undefined"||!window.ONEGEEK){ONEGEEK={};}if(typeof ONEGEEK.forms=="undefined"){ONEGEEK.forms={};ENABLE_AUTO_FORM_VALIDATION=true;ENABLE_COMPACT_MESSAGES=true;ICON_DIR="../images/icons/";ICON_ERROR=ICON_DIR+"cross.png";ICON_OK=ICON_DIR+"tick.png";ICON_INFO=ICON_DIR+"help.png";ICON_ALERT=ICON_DIR+"icon_alert.gif";FIELD_STATUS_ERROR=1;FIELD_STATUS_OK=2;FIELD_STATUS_INFO=3;FIELD_STATUS_NONE=4;}ONEGEEK.forms.DOMUtilities=function(){this.findPos=function(obj){var curleft=0;var curtop=0;if(obj.offsetParent){do{curleft+=obj.offsetLeft;curtop+=obj.offsetTop;}while((obj=obj.offsetParent));}return[curleft,curtop];};this.togglePopup=function(source,target){var div=target;var coords=this.findPos(source);if(div.style.display=="block"){div.style.display="none";}else{div.style.position="absolute";div.style.left=coords[0]+10+"px";div.style.top=coords[1]-6+"px";div.style.display="block";}};this.doesElementBelongToClass=function(element,className){var classes=element.className;var pattern=new RegExp(className,"g");if(pattern.test(classes)){return true;}return false;};this.removeClass=function(element,className){var classes=element.className;var regex="\b"+className+"\b";element.className=classes.replace(className,"");};this.addClass=function(element,className){var classes=element.className;if(!this.doesElementBelongToClass(element,className)){element.className+=" "+className;}};this.addEvent=function(element,event,handler){if(element.attachEvent){element.attachEvent("on"+event,handler);}else{if(element.addEventListener){element.addEventListener(event,handler,false);}else{if(!element.id){var date=new Date();element.id=date.getTime();}eval("document.getElementById("+element.id+").on"+event+"="+handler);}}};};var util=new ONEGEEK.forms.DOMUtilities();ONEGEEK.forms.AbstractFormField=function(b){this.name="";this.field=b||null;this.successMessage="Completed";this.errorMessage="Please complete";this.contextMessage="Please complete";this.messageSpan=null;this.isRequired=false;this.statusImg=null;this.statusLink=null;this.fieldStatus=null;this.modified=false;this.setup=function(){if(util.doesElementBelongToClass(this.field,"required")){this.isRequired=true;}this.getMessageSpan();if(ENABLE_COMPACT_MESSAGES){this.createFieldStatusIcon();}this.createRequiredSpan();this.validate();util.addEvent(this.field,"blur",this.applyFieldValidation(this));util.addEvent(this.field,"click",this.applyContextInformation(this));util.addEvent(this.field,"change",this.applyFieldModification(this));};this.setForm=function(c){this.form=c;};this.applyFieldModification=function(c){return function(){c.setModified(true);};};this.applyContextInformation=function(c){return function(){var d=c.getMessageSpan();if(d&&c.getModified()===false&&c.getDOMElement.value===""&&c.getContextMessage()){c.setState(FIELD_STATUS_INFO);}};};this.applyFieldValidation=function(c){return function(){c.validate();};};this.getNewInstance=function(c){return new ONEGEEK.forms.AbstractFormField(c);};this.setModified=function(c){this.modified=c;};this.getModified=function(){return this.modified;};this.setState=function(d){util.removeClass(this.messageSpan,"error");util.removeClass(this.messageSpan,"info");util.removeClass(this.messageSpan,"ok");util.removeClass(this.messageSpan,"hidden");if(ENABLE_COMPACT_MESSAGES){util.addClass(this.messageSpan,"hidden");}var g="";var f="";var e="";var c=null;switch(d){case FIELD_STATUS_ERROR:g=ICON_ALERT;e="There are errors with this field. Click for more info.";f="There are errors with this field. Click for more info.";c=this.errorMessage;util.addClass(this.messageSpan,"error");break;case FIELD_STATUS_OK:g=ICON_OK;e="This field has been completed successfully.";f="This field has been completed successfully.";c=this.successMessage;util.addClass(this.messageSpan,"ok");break;default:g=ICON_INFO;e="Click for more information about this field.";f="Click for more information about this field.";c=this.contextMessage;util.addClass(this.messageSpan,"info");}if(ENABLE_COMPACT_MESSAGES){this.statusImg.src=g;this.statusImg.alt=e;this.statusImg.title=f;}if(c!==null){this.messageSpan.innerHTML=c;}else{util.addClass(this.messageSpan,"hidden");}};this.createRequiredSpan=function(){var c=document.createElement("span");c.className="required";if(this.isRequired){c.innerHTML="*";}else{c.innerHTML="&nbsp;&nbsp;";}this.field.parentNode.insertBefore(c,this.field.parentNode.firstChild);};this.createFieldStatusIcon=function(){if(this.fieldStatus===null){var e=this.field.parentNode.getElementsByTagName("span");for(var c=0;c<e.length;c++){if(util.doesElementBelongToClass(e[c],"fieldstatus")){this.fieldStatus=e[c];return this.fieldStatus;}}var d=document.createElement("span");d.className="fieldstatus";this.statusImg=document.createElement("img");this.statusImg.src=ICON_INFO;this.statusLink=document.createElement("a");this.statusLink.onclick=a(this.statusLink,this.messageSpan);this.statusLink.appendChild(this.statusImg);d.appendChild(this.statusLink);this.fieldStatus=this.field.parentNode.insertBefore(d,this.getMessageSpan());return this.fieldStatus;}else{return this.fieldStatus;}};var a=function(d,c){return function(){util.togglePopup(d,c);};};this.getMessageSpan=function(){if(this.messageSpan===null){var e=this.field.parentNode.getElementsByTagName("span");for(var c=0;c<e.length;c++){if(util.doesElementBelongToClass(e[c],"msg")){this.messageSpan=e[c];return this.messageSpan;}}var d=document.createElement("span");if(!ENABLE_COMPACT_MESSAGES){d.className="msg icon info";}else{d.className="msg hidden info";}d.innerHTML=this.contextMessage;this.messageSpan=this.field.parentNode.appendChild(d);return this.messageSpan;}else{return this.messageSpan;}};this.validate=function(){if(this.field.value){this.setState(FIELD_STATUS_OK);return true;}if(this.modified===false){this.setState(FIELD_STATUS_INFO);}else{this.setState(FIELD_STATUS_ERROR);}return false;};this.clean=function(){};this.setName=function(c){this.name=c;};this.getName=function(){return this.name;};this.getDOMElement=function(){return this.field;};this.setDOMElement=function(c){this.field=b;};this.getContextMessage=function(){return this.contextMessage;};this.getErrorMessage=function(){return this.errorMessage;};this.getSuccessMessage=function(){return this.successMessage;};this.isRequiredField=function(){return this.isRequired;};};ONEGEEK.forms.FormFieldFactory=function(){var a=new Array();this.lookupFormField=function(b,c){if(a[b]!=null){return a[b].getNewInstance(c);}return null;};this.registerFormField=function(b,c){if(c instanceof ONEGEEK.forms.AbstractFormField){if(a[b]!=null){alert("FormFieldFactory registerFormField(): Cannot register field, as this namespace is in use");return;}a[b]=c;}else{alert("FormFieldFactory registerFormField(): Cannot register field, as this object is not of type FormField");}};};var formFieldFactory=new ONEGEEK.forms.FormFieldFactory();ONEGEEK.forms.AbstractComboBox=function(a){this.name="select";this.field=a;this.getNewInstance=function(b){return new ONEGEEK.forms.AbstractComboBox(b);};this.validate=function(){if(this.field.value&&this.field.value!==""){this.setState(FIELD_STATUS_OK);return true;}if(this.modified===false||!this.isRequired){this.setState(FIELD_STATUS_INFO);}else{this.setState(FIELD_STATUS_ERROR);}return false;};this.setup=function(){if(util.doesElementBelongToClass(this.field,"required")){this.isRequired=true;}this.getMessageSpan();if(ENABLE_COMPACT_MESSAGES){this.createFieldStatusIcon();}this.createRequiredSpan();this.validate();util.addEvent(this.field,"click",this.applyFieldValidation(this));util.addEvent(this.field,"blur",this.applyFieldValidation(this));util.addEvent(this.field,"click",this.applyContextInformation(this));util.addEvent(this.field,"change",this.applyFieldModification(this));};};ONEGEEK.forms.AbstractComboBox.prototype=new ONEGEEK.forms.AbstractFormField();ONEGEEK.forms.GenericComboBox=function(a){this.field=a;this.getNewInstance=function(b){return new ONEGEEK.forms.GenericComboBox(b);};};ONEGEEK.forms.GenericComboBox.prototype=new ONEGEEK.forms.AbstractComboBox();formFieldFactory.registerFormField("select",new ONEGEEK.forms.GenericComboBox());formFieldFactory.registerFormField("combo",new ONEGEEK.forms.GenericComboBox());ONEGEEK.forms.AbstractCheckbox=function(a){this.field=a;this.name="checkbox";this.clean=function(){};this.validate=function(){var b=document.forms[0].elements[this.field.name];for(i=0;i<b.length;i++){if(b[i].checked){this.setState(FIELD_STATUS_OK);return true;}else{if(this.modified!==true||!this.isRequired){this.setState(FIELD_STATUS_INFO);}else{this.setState(FIELD_STATUS_ERROR);}}}return false;};this.setup=function(){if(util.doesElementBelongToClass(this.field,"required")){this.isRequired=true;}this.getMessageSpan();if(ENABLE_COMPACT_MESSAGES){this.createFieldStatusIcon();}this.createRequiredSpan();this.validate();var b=document.forms[0].elements[this.field.name];for(i=0;i<b.length;i++){util.addEvent(b[i],"click",this.applyFieldValidation(this));util.addEvent(b[i],"click",this.applyContextInformation(this));util.addEvent(b[i],"change",this.applyFieldModification(this));}};};ONEGEEK.forms.AbstractCheckbox.prototype=new ONEGEEK.forms.AbstractFormField();ONEGEEK.forms.GenericCheckbox=function(a){this.field=a;this.getNewInstance=function(b){return new ONEGEEK.forms.GenericCheckbox(b);};};ONEGEEK.forms.GenericCheckbox.prototype=new ONEGEEK.forms.AbstractCheckbox();formFieldFactory.registerFormField("checkbox",new ONEGEEK.forms.GenericCheckbox());ONEGEEK.forms.AbstractRadioButton=function(a){this.field=a;this.name="radio";this.clean=function(){};this.setup=function(){if(util.doesElementBelongToClass(this.field,"required")){this.isRequired=true;}this.getMessageSpan();if(ENABLE_COMPACT_MESSAGES){this.createFieldStatusIcon();}this.createRequiredSpan();this.validate();var b=document.forms[0].elements[this.field.name];for(i=0;i<b.length;i++){util.addEvent(b[i],"click",this.applyFieldValidation(this));util.addEvent(b[i],"click",this.applyContextInformation(this));util.addEvent(b[i],"change",this.applyFieldModification(this));}};this.validate=function(){var b=document.forms[0].elements[this.field.name];for(i=0;i<b.length;i++){if(b[i].checked){this.setState(FIELD_STATUS_OK);return true;}else{if(this.modified!==true||!this.isRequired){this.setState(FIELD_STATUS_INFO);}else{this.setState(FIELD_STATUS_ERROR);}}}return false;};};ONEGEEK.forms.AbstractRadioButton.prototype=new ONEGEEK.forms.AbstractFormField();ONEGEEK.forms.GenericRadioButton=function(a){this.field=a;this.getNewInstance=function(b){return new ONEGEEK.forms.GenericRadioButton(b);};};ONEGEEK.forms.GenericRadioButton.prototype=new ONEGEEK.forms.AbstractRadioButton();formFieldFactory.registerFormField("radio",new ONEGEEK.forms.GenericRadioButton());ONEGEEK.forms.AbstractTextField=function(a){this.regex="";this.cleanRegex="";this.pattern=null;this.validate=function(){if(this.field.value){this.clean();this.pattern=new RegExp(this.regex);var b=this.pattern.test(this.field.value);if(b){this.setState(FIELD_STATUS_OK);}else{this.setState(FIELD_STATUS_ERROR);}return b;}if(this.modified===false||this.isRequired===false){this.setState(FIELD_STATUS_INFO);}else{this.setState(FIELD_STATUS_ERROR);}return false;};this.clean=function(){this.field.value=this.field.value.replace(this.cleanRegex,"");};};ONEGEEK.forms.AbstractTextField.prototype=new ONEGEEK.forms.AbstractFormField();ONEGEEK.forms.NameField=function(a){this.field=a;this.name="name";this.regex=/^([a-zA-Z\-\'\s]{2,30})$/g;this.cleanRegex=/[^a-zA-Z\-\'\s]/g;this.errorMessage="Your name must be between 2 and 30 characters";this.contextMessage="We would like to call you by your name";this.getNewInstance=function(b){return new ONEGEEK.forms.NameField(b);};};ONEGEEK.forms.NameField.prototype=new ONEGEEK.forms.AbstractTextField();formFieldFactory.registerFormField("firstname",new ONEGEEK.forms.NameField());formFieldFactory.registerFormField("lastname",new ONEGEEK.forms.NameField());formFieldFactory.registerFormField("name",new ONEGEEK.forms.NameField());ONEGEEK.forms.PhoneField=function(a){this.field=a;this.name="phone";this.regex=/^([0-9]{8,10})$/g;this.cleanRegex=/[^0-9]/g;this.errorMessage="Your phone number needs to be at least 8 digits long i.e. 03 1234 5678";this.contextMessage=this.errorMessage;this.getNewInstance=function(b){return new ONEGEEK.forms.PhoneField(b);};};ONEGEEK.forms.PhoneField.prototype=new ONEGEEK.forms.AbstractTextField();formFieldFactory.registerFormField("phone",new ONEGEEK.forms.PhoneField());ONEGEEK.forms.EmailField=function(a){this.field=a;this.name="email";this.regex=/^[A-Z0-9._%+\-]+@[A-Z0-9.\-]+\.[A-Z]{2,4}$/i;this.errorMessage="Please enter a valid email address i.e. user@domain.com";this.contextMessage="Your email address will be kept confidential";this.getNewInstance=function(b){return new ONEGEEK.forms.EmailField(b);};this.clean=function(){};};ONEGEEK.forms.EmailField.prototype=new ONEGEEK.forms.AbstractTextField();formFieldFactory.registerFormField("email",new ONEGEEK.forms.EmailField());ONEGEEK.forms.GenericTextField=function(a){this.field=a;this.name="generic";this.cleanRegex=/[<>\/\\\(\);]/g;this.getNewInstance=function(b){return new ONEGEEK.forms.GenericTextField(b);};this.validate=function(){this.clean();if(this.modified===true&&this.field.value!==""){this.setState(FIELD_STATUS_OK);}else{this.setState(FIELD_STATUS_INFO);}return true;};};ONEGEEK.forms.GenericTextField.prototype=new ONEGEEK.forms.AbstractTextField();formFieldFactory.registerFormField("text",new ONEGEEK.forms.GenericTextField());formFieldFactory.registerFormField("generictext",new ONEGEEK.forms.GenericTextField());ONEGEEK.forms.CaptchaTextField=function(a){this.field=a;this.name="captcha";this.regex=/^([A-Za-z0-9\-:_\s\/]+)$/g;this.cleanRegex=/[<>();]/g;this.successMessage="Thankyou...";this.errorMessage="Please enter the required information";this.contextMessage="Please enter the required information";this.getNewInstance=function(b){return new ONEGEEK.forms.CaptchaTextField(b);};};ONEGEEK.forms.CaptchaTextField.prototype=new ONEGEEK.forms.AbstractTextField();formFieldFactory.registerFormField("captcha",new ONEGEEK.forms.CaptchaTextField());ONEGEEK.forms.RecaptchaTextField=function(a){this.field=a;this.name="recaptcha";this.contextMessage="Need some <a href='javascript:Recaptcha.showhelp()'>help</a>? Get another <a href='javascript:Recaptcha.reload()'>CAPTCHA</a>";this.getNewInstance=function(b){return new ONEGEEK.forms.RecaptchaTextField(b);};};ONEGEEK.forms.RecaptchaTextField.prototype=new ONEGEEK.forms.CaptchaTextField();formFieldFactory.registerFormField("recaptcha_response_field",new ONEGEEK.forms.RecaptchaTextField());formFieldFactory.registerFormField("recaptcha",new ONEGEEK.forms.RecaptchaTextField());ONEGEEK.forms.Form=function(d){var a=new Array();d=d||document.getElementById(d)||null;var b=false;this.getForm=function(){return d;};this.validate=function(k){var j=null;for(var f=0;f<a.length;f++){a[f].setModified(true);var h=a[f].validate();if(!h&&a[f].isRequiredField()){if(!j){j=a[f].getDOMElement();}}}if(j){j.focus();alert("Please correct the highlighted errors.");return false;}var g=d.getElementsByTagName("input");for(f=0;f<g.length;f++){if(g[f].type=="submit"){g[f].setProperty("lastvalue",g[f].value);g[f].disabled=true;g[f].value="Please wait...";}}return true;};this.getFormId=function(){return id;};var c=function(e){var g=null;for(var f=0;f<a.length;f++){if(a[f].getDOMElement().name==e){return a[f].getDOMElement();}}return g;};this.doForm=function(){if(d){var f=d.getElementsByTagName("input");for(var h=0;h<f.length;h++){this.doFormField(f[h]);}var e=d.getElementsByTagName("textarea");for(h=0;h<e.length;h++){this.doFormField(e[h]);}var g=d.getElementsByTagName("select");for(h=0;h<g.length;h++){this.doFormField(g[h]);}d.onsubmit=this.validate;}};this.doFormField=function(l){if(l&&l.type=="text"||l.type=="password"||l.type=="textarea"||l.type=="select-one"||l.type=="select-multiple"||l.type=="checkbox"||l.type=="file"||l.type=="radio"){if(!c(l.name)){var k=l.className;var g=null;var e=0;if(k.indexOf(" ")>-1){var h=k.split(" ");do{k=h[e];g=formFieldFactory.lookupFormField(k,l);e++;}while(g===null&&e<h.length);}else{g=formFieldFactory.lookupFormField(k,l);}if(g){var f=g.getDOMElement();g.setup();g.setForm(this);a[a.length]=g;}}}};};ONEGEEK.forms.GValidator=function(){this.autoApplyFormValidation=function(){var a=document.getElementsByTagName("form");for(i=0;i<a.length;i++){if(a[i].className=="autoform"||a[i].className=="gform"){var b=new ONEGEEK.forms.Form(a[i]);b.doForm();}}};};function addLoadEventGVal(a){var b=window.onload;if(typeof window.onload!="function"){window.onload=a;}else{window.onload=function(){if(b){b();}a();};}}if(ENABLE_AUTO_FORM_VALIDATION){addLoadEventGVal(function(){gvalidator=new ONEGEEK.forms.GValidator();gvalidator.autoApplyFormValidation();});}