if (typeof OBJ=="undefined"||!OBJ){var OBJ={}}if(typeof OBJ.forms=="undefined"){OBJ.forms={};iE='cross';iO='tick';iI='help';iA='alert';iB='info';ERR=1;OK=2;INFO=3;NUL=4;EM=5;}
$$=function(el,classN){var pat=new RegExp(classN,'g');if(pat.test(el.classN)){return true}return false}
OBJ.forms.aForm=function(field){this.name='';this.field=field || null;this.isR=false;this.sImg=null;this.fieldStatus=null;this.mod=false;this.setup=function(){this.cI();this.validate();addE(this.field,'blur',this.aV(this))};this.applyM=function(field){return function(){field.setM(true)}};this.applyC=function(field){return function(){}};this.aV=function(field){return function(){field.validate()}};this.gNi=function(field){return new OBJ.forms.aForm(field)};this.setM=function(mod){this.mod=mod};this.getM=function(){return this.mod};this.setS=function(state){var title='';classN="stat ";switch(state){case ERR:classN+=iE;break;case OK:classN+=iO;this.eMsg="Completed";break;case EM:classN+=iA;break;case NUL:classN+=iB;break;default:classN+=iI;}this.sImg.className=classN;this.sImg.title=this.eMsg;}
this.cI=function(){j=0;a=this.field.parentNode;b=this.fieldStatus;if(b==null){var msgSpans=a.getElementsByTagName('span');for(var i=0;i<msgSpans.length;i++) {if($$(msgSpans[i],'stat')){b=msgSpans[i];return b}}j=j+1;
var span=document.createElement('span');span.className='stat ';this.sImg=span;b=a.appendChild(span);span.title=this.eMsg;}return b};this.getM=function(){};this.validate=function(){if(this.field.value){this.setS(OK);return true};if(this.mod==false){this.setS(INFO)}else{this.setS(ERR)};return false};this.setName=function(name){this.name=name};this.getName=function(){return this.name};this.getDE=function(){return this.field};this.setDOMElement=function(element){this.field=field};this.isReq=function(){return this.isR}}
OBJ.forms.fff=function(){var fFreg=new Array();this.lookup=function(name,field){if(fFreg[name]!=null){return fFreg[name].gNi(field)}};this.rFf=function(name,field){if(field  instanceof OBJ.forms.aForm){if(fFreg[name] !=null){return};fFreg[name]=field}}};var fFac=new OBJ.forms.fff();
OBJ.forms.aText=function(field){this.regex='';this.cleanRegex='';this.pattern=null;this.validate=function(){if(this.field.value){this.clean();this.pattern=new RegExp(this.regex);var validated=this.pattern.test(this.field.value);if(validated){this.setS(OK)}else{this.setS(ERR)}return validated};if(this.mod==false){if(this.isR==false){this.setS(NUL)}else{this.setS(INFO)}}else{if(this.isR==false){this.setS(NUL)}else{this.setS(EM)}};return false};this.clean=function(){this.field.value=this.field.value.replace(this.cleanRegex,'');this.field.value=this.field.value.replace("'","\u2019")}};OBJ.forms.aText.prototype=new OBJ.forms.aForm;
OBJ.forms.eField=function(field){this.field=field;this.name='email';this.regex=/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,8}$/i;this.isR=true;this.eMsg='Please enter a valid email address';this.gNi=function(field){return new OBJ.forms.eField(field)};this.clean=function(){}};OBJ.forms.eField.prototype=new OBJ.forms.aText;fFac.rFf('email', new OBJ.forms.eField());
OBJ.forms.numField=function(field){this.field=field;this.name='number';  this.regex = /([0-9]){6,15}/g;this.cleanRegex = /[^\d-+()]/g;this.isR=true;this.eMsg='Must be a number';this.gNi=function(field){return new OBJ.forms.numField(field)};};OBJ.forms.numField.prototype=new OBJ.forms.aText; fFac.rFf('number', new OBJ.forms.numField());
OBJ.forms.noField=function(field){this.field=field;this.name='textno';this.regex=/[0-9\w ]/g;this.cleanRegex=/[^\w \u2019,]/g;this.isR=false;this.eMsg='Helpful to know!';this.gNi=function(field){return new OBJ.forms.noField(field)};};OBJ.forms.noField.prototype=new OBJ.forms.aText; fFac.rFf('textno', new OBJ.forms.noField());
OBJ.forms.gReq=function(field){this.field=field;this.name='text';this.regex=/[a-z][\w]+/g;this.cleanRegex=/[^\w &-.,\u2019]/g;this.isR=true;this.eMsg='Required';this.gNi=function(field){return new OBJ.forms.gReq(field)}};OBJ.forms.gReq.prototype=new OBJ.forms.aText;fFac.rFf('text', new OBJ.forms.gReq());
OBJ.forms.Form=function(form){var f=new Array();var form=form || $(form) || null;var completed=false;var validate=function(){var fEE=null;for(var i=0;i<f.length;i++){f[i].setM(true);f[i].validate();var valid=f[i].validate();if(!valid && f[i].isReq()){if(!fEE){fEE=f[i].getDE();}}};if(fEE){$('msgval').innerHTML="Please complete all the requested information.";return false;}return true};function getFN(name){var field=null;for(var i=0;i<f.length;i++){if(f[i].getDE().name==name){return f[i].getDE()}}return field;};this.doForm=function(e){o=$(e);el=o.elements;for(var i=0;i<el.length;i++){doFormField(el[i]);}form.onsubmit=validate};var doFormField=function(field){t=field.type;if(field && (t=='text' || t=='textarea')){if(!getFN(field.name)){var cN=field.className;var fieldO=null;fieldO=fFac.lookup(cN, field);if(fieldO){var element=fieldO.getDE();fieldO.setup();f[f.length]=fieldO;}}}}};OBJ.forms.valOb=function(){this.doV=function(){var forms=document.forms;for(var i=0;i<forms.length;i++){var form=new OBJ.forms.Form(forms[i]);form.doForm(forms[i].id);}}}
addL(function(){gvalidator=new OBJ.forms.valOb();gvalidator.doV();});
