/*********************************************************************
JavaScript 1.2 Validation Script
	version 3.1.1
	by matthew frank

There are no warranties expressed or implied.  This script may be
re-used and distrubted freely provided this header remains intact
and all supporting files are included (unaltered) in the distribution:

		kkValidationV9a.js   - this file
		validation.htm  - example form
		readme.htm      - directions on using this script
		test.htm        - part of an automated test harness
		test.js         - part of an automated test harness
		(validation-3.1.1.zip contains all files)

If you are interested in keeping up with the latest releases of this
script or asking questions about its implementation, think about joining
the Yahoo! Groups discussion forum dedicated to validation:

	http://groups.yahoo.com/group/validation

16-Aug-02 KBM  Recompared with latest Matt version (amendments NOT included yet)
26-Oct-03 KBM  KBM changed fitted into version 3.1.1
20-Jun-09 KBM  Changes to accomodate IE8

Extensions (c) Kristen Baker-Munton 2002-2009
*********************************************************************/

// JSLint "helper"
/*global alert, confirm, document, eval, location, navigator, parent, screen, window */

function Validation(){var validationFunctions=new Array();var isDOMCompliant=!!document.getElementById;var isInitialFocusSet=false;var sMonthNames=" Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec ";this.Err=function(){this.raise=function(source,message,stem,event){if(typeof event!="object"){event=new Object()}var sName=getProperty(source,"kkDisplayName");var sMsg=choose((stem?getProperty(source,stem.toUpperCase()+"-MESSAGE"):null),getProperty(source,"MESSAGE"),message.replace(/\.$/,"")+(sName?"\nin the "+sName+" field.":"."));if(event.type!="change"||event.type=="change"&&!suppressOnchange(source)){alert(sMsg);toFunction(getProperty(source,"onvalidatefocus"))();if(source.focus){source.focus();}if(source.select){source.select();}}paintElement(source,sMsg);if(source.focus){source.focus();}if(source.select){source.select();}}};var setProperty=function(object,property,value){if (value === ''){value = "_RK_BLANK_";}if(object.setAttribute){if (value === null){object.removeAttribute(property);}else{object.setAttribute(property,value);}}else{object[property]=value}};var getProperty=function(object,property){var returnValue;if(object){returnValue=object[property];if (returnValue === "_RK_BLANK_"){returnValue = "";}if(!propertyOn(returnValue)&&object.getAttribute){returnValue=object.getAttribute(property);if (returnValue === "_RK_BLANK_"){returnValue = "";}else if (returnValue === "false"){returnValue = false;}else if (returnValue === "true"){returnValue = true;}}}return returnValue};var propertyOn=function(){var isOn,attribute,length=arguments.length;for(var i=0;i<length;i++){attribute=arguments[i];if(typeof attribute=="string"){attribute=attribute.toLowerCase();}isOn=typeof attribute!="undefined"&&attribute!==null&&attribute!="false"&&attribute!="off"&&attribute!==false;if(isDOMCompliant){isOn&=(attribute!=="");}if(isOn){break}}return!!isOn};var trim=function(string){return string.replace(/^\s+/,"").replace(/\s+$/,"");};var pad=function(value,width){width=choose(width,2);var returnValue=value.toString();for(var i=width-returnValue.length;i>0;i--){returnValue="0"+returnValue}return returnValue};var toFunction=function(value){if(value){if(typeof value!="function"){value=new Function(value);}}else{value=function(){return}}return value};var minMaxRange=function(min,max){if(propertyOn(min)){min=""+min}if(propertyOn(max)){max=""+max}if(!!min&&!!max){return" between "+min+" and "+max}else if(!!min){return" greater than or equal to "+min}else if(!!max){return" less than or equal to "+max}else{return""}};var dateOrTime=function(format){var date=false,time=false;date=format.search(/mm?/i)>-1||format.search(/dd?/i)>-1||format.search(/yyyy/i)>-1;time=format.search(/hh?/i)>-1||format.search(/nn/i)>-1||format.search(/ss/i)>-1||format.search(/ap/i)>-1;return(date?"date":"")+(time?"time":"");};var toDate=function(date,format){var i,regex,index=new Array();var day,month,year,hour,minute,second,ampm;index[format.search(/dd?/i)]="day";index[format.search(/mm?/i)]="month";index[format.search(/yyyy/i)]="year";index[format.search(/hh/i)]="hour";index[format.search(/nn/i)]="minute";index[format.search(/ss/i)]="second";index[format.search(/ap/i)]="ampm";regex=format.replace(/(\$|\^|\*|\(|\)|\+|\.|\?|\\|\{|\}|\||\[|\])/g,"\\$1");if(format.search(/dd/i)>-1){regex=regex.replace(/dd/i,"(0[1-9]|[1-2]\\d|3[0-1])");}else{regex=regex.replace(/d/i,"(0?[1-9]|[1-2]\\d|3[0-1])");}if(format.search(/mm/i)>-1){regex=regex.replace(/mm/i,"(0[1-9]|1[0-2])");}else{regex=regex.replace(/m/i,"(0?[1-9]|1[0-2])");}regex=regex.replace(/nn/i,"([0-5]\\d)").replace(/ss/i,"([0-5]\\d)").replace(/yyyy/i,"(\\d{4})").replace(/\s+/g,"\\s*");if(format.search(/hh24/i)>-1){regex=regex.replace(/hh24/i,"([0-1]\\d|2[0-3])");}else{regex=regex.replace(/hh/i,"(0\\d|1[0-2])").replace(/ap/i,"([ap]m?)");}if(!new RegExp("^"+regex+"$","i").test(date)){return}year=month=day=hour=minute=second=0;ampm="";var key=0;for(i=0;key<index.length;key++){if(index[key]){eval(index[key]+"=RegExp.$"+(++i));}}if(hour<12&&(/^pm?$/i.test(ampm))){hour=parseInt(hour,10)+12}else if(hour==12&&(/^am?$/i.test(ampm))){hour=0}if(year===0){year=1}if(month===0){month=1}if(day===0){day=1}if(month===2&&day>((year%4===0&&year%100!==0||year%400===0)?29:28)||day>((month-1)%7+1)%2+30){return}return""+pad(year,4)+pad(month)+pad(day)+pad(hour)+pad(minute)+pad(second);};var kDate=function(sDate){var nDay,nMonth,nYear,aResult,nTodayCentury,nResult,nTodayYear,sTemp;var re=new RegExp("^[^0-9]*([0-3]?[0-9])[^0-9A-Z]*([01]?[0-9])[^0-9A-Z]*([0-9][0-9])([0-9][0-9])?[^0-9]*$","i");aResult=re.exec(sDate);if(aResult){nDay=aResult[1];nMonth=aResult[2];nYear=(aResult[4]==="")?aResult[3]:((aResult[3]*100)+parseInt(aResult[4],10));}else{re=new RegExp("^[^0-9]*([0-3]?[0-9])[^0-9A-Z]*([A-Z][A-Z][A-Z])[^0-9A-Z]*([0-9][0-9])([0-9][0-9])?[^0-9]*$","i");aResult=re.exec(sDate);if(aResult){nDay=aResult[1];re=new RegExp(" "+aResult[2]+" ","i");nMonth=(sMonthNames.search(re)/4)+1;nYear=(aResult[4]===""||typeof aResult[4]==="undefined")?aResult[3]:((aResult[3]*100)+parseInt(aResult[4],10));}}if(typeof nDay=="undefined"||nDay<=0||typeof nMonth=="undefined"||nMonth<=0||nMonth>12||typeof nYear=="undefined"||nYear<=0||isNaN(nDay)||isNaN(nMonth)||isNaN(nYear)){return}nYear=parseInt(nYear,10);if(nYear<100){nTodayYear=2002;nTodayCentury=parseInt(nTodayYear/100,10)*100;nResult=nYear+nTodayCentury;if(nResult<nTodayYear-30||nTodayYear+30<nResult){nResult+=100;if(nResult<nTodayYear-30||nTodayYear+30<nResult){nResult-=200;if(nResult<nTodayYear-30||nTodayYear+30<nResult){return;}}}nYear=nResult}if(nMonth===2&&nDay>((nYear%4===0&&nYear%100!==0||nYear%400===0)?29:28)||nDay>((nMonth-1)%7+1)%2+30){return}sTemp=""+pad(nDay)+" "+sMonthNames.substr((nMonth-1)*4+1,3)+" "+nYear;return sTemp};var formatNumber=function(i){if(typeof i=="undefined"||i===null){return null}var sEnd=(/\./.test(i=i.toString()))?"\\.":"$";var re=new RegExp("(\\d)(\\d{3})(,|"+sEnd+")");if(re.test(i)){i=formatNumber(i.replace(re,"$1,$2$3"));}return i};var choose=function(){var i,value,iArguments=arguments.length;for(i=0;i<iArguments;i++){value=arguments[i];if(typeof value!="undefined"&&value!==null&&value!==""){return value}}};var suppressOnchange=function(element){return propertyOn(getProperty(element,"SUPPRESS-ONCHANGE-MESSAGE"),getProperty(element.form,"SUPPRESS-ONCHANGE-MESSAGE"));};var suppressOnchangeTitle=function(element){return propertyOn(getProperty(element,"SUPPRESS-ONCHANGE-TITLE"),getProperty(element.form,"SUPPRESS-ONCHANGE-TITLE"));};var suppressCompulsoryFields=function(element){return propertyOn(getProperty(element,"SUPPRESS-COMPULSORY-FIELDS"),getProperty(element.form,"SUPPRESS-COMPULSORY-FIELDS"));};var getValueOf=function(element){var returnValue=null;switch(element.type){case"text":case"textarea":case"file":case"password":case"hidden":returnValue=element.value;break;case"select-one":if(element.selectedIndex>=0){returnValue=element.options[element.selectedIndex].value}break;case"select-multiple":for(var i=0,iOptions=element.options.length;i<iOptions;i++){if(element.options[i].selected&&trim(element.options[i].value.toString())){returnValue=true;break}}break;case"radio":case"checkbox":returnValue=element.checked;break;default:returnValue=null}return returnValue};var paintElement=function(element,sMsg){if(element.style){var backgroundColor=choose(getProperty(element,"INVALID-COLOR"),getProperty(element.form,"INVALID-COLOR"));if(backgroundColor){setProperty(element,"OLD-BG-COLOR",element.style.backgroundColor);element.style.backgroundColor=backgroundColor}else{setProperty(element,"OLD-CLASS-NAME",element.className);if(isDOMCompliant){element.className=trim(element.className+" invalid");}else{element.className="invalid"}}}var bSupressTitle=choose(getProperty(element,"SUPPRESS-ONCHANGE-TITLE"),getProperty(element.form?element.form:element,"SUPPRESS-ONCHANGE-TITLE"),false);if(!bSupressTitle){setProperty(element,"OLD-TITLE",element.title);element.title=sMsg}};var restoreForm=function(form,bReset){var elements=form.elements;var iElements=elements.length;for(var i=0;i<iElements;i++){restoreElement(elements[i]);if(bReset){elements[i].onreset();}}};var restoreElement=function(element){element.__=null;if(element.style){var backgroundColor=getProperty(element,"OLD-BG-COLOR");if(backgroundColor!==null&&typeof backgroundColor!="undefined"){element.style.backgroundColor=backgroundColor;setProperty(element,"OLD-BG-COLOR",null);}else{var oldClass=getProperty(element,"OLD-CLASS-NAME");if(oldClass!==null&&typeof oldClass!="undefined"){element.className=oldClass;setProperty(element,"OLD-CLASS-NAME",null);}}}var sOldTitle=getProperty(element,"OLD-TITLE");if(sOldTitle!==null&&typeof sOldTitle!="undefined"){element.title=sOldTitle;setProperty(element,"OLD-TITLE",null);}};var isValidForm=function(form,event){var i,iElements,orderBy,position;var element,elementList=form.elements;restoreForm(form);if(form.onbeforevalidate()===false){return false}orderBy=getProperty(form,"ORDERED-VALIDATION");if(propertyOn(orderBy)){orderBy=/^tabindex$/i.test(orderBy)?"tabIndex":"VALIDATION-ORDER";elementList=new Array();i=0;for(iElements=form.elements.length;i<iElements;i++){element=form.elements[i];position=parseInt(getProperty(element,orderBy),10);if(propertyOn(position)&&!isNaN(position)){elementList=elementList.slice(0,position).concat(element,elementList.slice(position));}else{elementList[elementList.length]=element}}}i=0;for(iElements=elementList.length;i<iElements;i++){if(!elementList[i].validate(event)){return false}}if(form.onaftervalidate()===false){return false}return true};var isRequired=function(element){return propertyOn(getProperty(element,"REQUIRED")&&!suppressCompulsoryFields(element));};var isFloat=function(value,signed){return new RegExp("^"+(propertyOn(signed)?"-?":"")+"(\\d*(,?\\d{3})*\\.?\\d+|\\d+(,?\\d{3})*\\.?\\d*)$").test(value);};var isInteger=function(value,signed){return new RegExp("^"+(propertyOn(signed)?"-?":"")+"(\\d{1,3})(,?\\d{3})*$").test(value);};var isCurrency=function(value,signed){var reMain="((\\d{1,3})(,?\\d{3})*(\\.\\d{2})?|((\\d{1,3})(,?\\d{3})*)?\\.\\d{2})";return new RegExp("^("+"("+(propertyOn(signed)?"(\\$?\\-?|\\-?\\$?)":"\\$?")+reMain+")"+(propertyOn(signed)?"|(\\(\\$?"+reMain+"\\))":"")+")$").test(value);};var isValidElement=function(element,event){var iFields;if(typeof element.type=="undefined"||element.__||propertyOn(getProperty(element,"disabled"))||propertyOn(getProperty(element,"readOnly"))){return true}element.__=true;if(element.onbeforevalidate()===false){return false}var iLength,vAnd,or,oRegexp,iMin,iMax,format,sMask,date,minDate,maxDate,bFirst;var dtDate,dtMinDate,dtMaxDate,nFailPoint;iMin=getProperty(element,"MIN");iMax=getProperty(element,"MAX");var pass=true;if(element.value){element.value=trim(element.value);}var sValue=getValueOf(element);var bSigned=getProperty(element,"SIGNED");if(propertyOn(getProperty(element,"KCAPS"))&&sValue){element.value=sValue=sValue.toUpperCase();}if(isRequired(element)&&!sValue){Validation.Err.raise(element,"Please enter a value","REQUIRED",event);return false}if(((bFirst=propertyOn(getProperty(element,"FLOAT")))||propertyOn(getProperty(element,"NUMBER")))&&sValue){if(!isFloat(sValue,bSigned)){pass=false}else if(iMin==parseFloat(iMin)&&parseFloat(sValue.replace(/,/g,""))<parseFloat(iMin)){pass=false}else if(iMax==parseFloat(iMax)&&parseFloat(sValue.replace(/,/g,""))>parseFloat(iMax)){pass=false}if(!pass){Validation.Err.raise(element,"Please enter a "+(bSigned?"":"positive ")+"number"+minMaxRange(formatNumber(iMin),formatNumber(iMax)),bFirst?"FLOAT":"NUMBER",event);return false}}else if(((bFirst=propertyOn(getProperty(element,"AMOUNT")))||propertyOn(getProperty(element,"CURRENCY")))&&sValue){if(!isCurrency(sValue,bSigned)){pass=false}else if(iMin==parseFloat(iMin)&&parseFloat(sValue.replace(/[\$,]/g,"").replace(/^\(\$(.*)\)$/,"-$1"))<parseFloat(iMin)){pass=false}else if(iMax==parseFloat(iMax)&&parseFloat(sValue.replace(/[\$,]/g,"").replace(/^\(\$(.*)\)$/,"-$1"))>parseFloat(iMax)){pass=false}if(!pass){Validation.Err.raise(element,"Please enter a "+(bSigned?"":"positive ")+"dollar amount"+minMaxRange(formatNumber(iMin),formatNumber(iMax)),bFirst?"AMOUNT":"CURRENCY",event);return false}}else if(propertyOn(getProperty(element,"INTEGER"))&&sValue){if(!isInteger(sValue,bSigned)){pass=false}else if(iMin==parseInt(iMin,10)&&parseInt(sValue.replace(/,/g,""),10)<parseInt(iMin,10)){pass=false}else if(iMax==parseInt(iMax,10)&&parseInt(sValue.replace(/,/g,""),10)>parseInt(iMax,10)){pass=false}if(!pass){Validation.Err.raise(element,"Please enter a "+(bSigned?"n ":"positive ")+"integer"+minMaxRange(formatNumber(iMin),formatNumber(iMax)),"INTEGER",event);return false}}else if(((bFirst=propertyOn((format=getProperty(element,"DATE"))))||propertyOn((format=getProperty(element,"DATETIME"))))&&sValue){if(format===""||typeof format!="string"){format="D/M/YYYY";}minDate=toDate(iMin,format);maxDate=toDate(iMax,format);date=toDate(sValue,format);if(typeof date=="undefined"){pass=false}else if(propertyOn(iMin)&&typeof minDate!="undefined"&&date<minDate){pass=false}else if(propertyOn(iMax)&&typeof maxDate!="undefined"&&date>maxDate){pass=false}if(!pass){Validation.Err.raise(element,"Please enter a value"+minMaxRange(iMin,iMax)+" in the proper format:\n\t"+format.replace(/ap/i,"AM/PM").toUpperCase(),bFirst?"DATE":"DATETIME",event);return false}}else if(propertyOn(getProperty(element,"KDATE"))&&sValue){iMin=getProperty(element,"MIN");iMax=getProperty(element,"MAX");if(iMin===null){iMin="01 Jan 1800"}if(iMax===null){iMax="31 Dec 2199"}dtMinDate=new Date();dtMinDate=Date.parse(iMin);dtMaxDate=new Date();dtMaxDate=Date.parse(iMax);var sTemp=kDate(sValue);if(typeof sTemp=="undefined"||typeof(dtDate=new Date(sTemp))=="undefined"){pass=false;nFailPoint=1}else if(propertyOn(iMin)&&typeof iMin!="undefined"&&dtDate<dtMinDate){pass=false;nFailPoint=2}else if(propertyOn(iMax)&&typeof iMax!="undefined"&&dtDate>dtMaxDate){pass=false;nFailPoint=3}if(!pass){Validation.Err.raise(element,"Please enter a value"+minMaxRange(iMin,iMax)+" in the format ddmmyyyy (including century)","KDATE",event);return false}if(typeof sTemp!="undefined"){element.value=sTemp}}else if(propertyOn(getProperty(element,"PHONE"))&&sValue){var sPhone=sValue.replace(/\D/g,"");var iDigits=sPhone.length;if(!(iDigits==10||iDigits==11&&(/^1/.test(sPhone)))){Validation.Err.raise(element,"Please enter a valid phone number","PHONE",event);return false}}else if(propertyOn(getProperty(element,"EMAIL"))&&sValue){if(!(/^[\w_-]+(\.[\w_-]+)*@[\w_-]+(\.[\w_-]+)*\.[a-z]{2,4}$/i.test(sValue))){Validation.Err.raise(element,"Please enter a valid email address","EMAIL",event);return false}}else if(propertyOn(getProperty(element,"ZIP"))&&sValue){if(!(/^\d{5}(-?\d{4})?$/.test(sValue))){Validation.Err.raise(element,"Please enter a valid ZIP code","ZIP",event);return false}}if(propertyOn(oRegexp=getProperty(element,"REGEXP"))&&sValue){if(oRegexp.constructor!=RegExp){oRegexp=new RegExp(oRegexp,"i");}if(!oRegexp.test(sValue)){Validation.Err.raise(element,"Please enter a valid value","REGEXP",event);return false}}if(sValue&&(iLength=getProperty(element,"maxlength"))&&!(/\D/.test(iLength))&&sValue.length>iLength){Validation.Err.raise(element,"Please enter a value having no more than "+formatNumber(iLength)+" characters","MAXLENGTH",event);return false}if (sValue&& (iLength = getProperty(element, "MINLENGTH"))&& ! (/\D/.test(iLength))&& sValue.length < iLength){Validation.Err.raise(element, "Please enter a value having at least  " + formatNumber(iLength) + " characters", "MINLENGTH", event);return false;}for(var i=0;validationFunctions[i];i++){if(validationFunctions[i](element,sValue)===false){return false}}if(propertyOn(vAnd=getProperty(element,"AND"))&&!sValue){if(typeof vAnd=="string"){vAnd=vAnd.toString().split(/,/);}var oNewElement;i=0;for(iFields=vAnd.length;i<iFields;i++){if((oNewElement=(typeof vAnd[i].form=="object")?vAnd[i]:element.form.elements[trim(vAnd[i])])){if(!!getValueOf(oNewElement)){Validation.Err.raise(element,"Please enter a value","AND",event);return false}}}}if((or=getProperty(element,"OR"))&&!sValue){var fields,message;if(or.constructor==Array||or.constructor==String){fields=or}else{fields=or["fields"]}if(fields){if(fields.constructor!=Array){fields=fields.toString().split(/,/);}i=0;var bValue;for(iFields=fields.length;!bValue&&i<iFields;i++){oNewElement=(fields[i].form)?fields[i]:element.form.elements[trim(fields[i])];if(oNewElement){bValue=!!getValueOf(oNewElement);}}if(!bValue){Validation.Err.raise(element,message?message:"Please enter a value","OR",event);return false}}}if(element.onvalidate()===false){return false}if(element.onaftervalidate()===false){return false}return true};this.add=function(code){if(typeof code=="function"){eval("code="+code.toString());validationFunctions[validationFunctions.length]=code}};this.setup=function(){var initialFocus;for(var i=0,oForm,iForms=document.forms.length;i<iForms;i++){oForm=document.forms[i];if(!oForm._){oForm._onsubmit_=toFunction(getProperty(oForm,"onsubmit"));oForm._onreset_=toFunction(getProperty(oForm,"onreset"));oForm.validate=function(oEvent){return isValidForm(this,oEvent);};oForm.onbeforevalidate=toFunction(getProperty(oForm,"onbeforevalidate"));oForm.onaftervalidate=toFunction(getProperty(oForm,"onaftervalidate"));oForm.onautosubmit=toFunction(getProperty(oForm,"onautosubmit"));oForm.onsubmit=function(oEvent){if(!this.validate(choose(oEvent,window.event))){return false}if(this._onsubmit_&&this._onsubmit_(oEvent)===false){return false}return true};oForm.onreset=function(oEvent){restoreForm(this,true);if(this._onreset_&&this._onreset_(oEvent)===false){return false}};oForm.markRequired=function(){var oldClassName,element;for(var k=0;(element=this.elements[k]);k++){oldClassName=getProperty(element,"OLD-CLASS-NAME");if(propertyOn(getProperty(element,"REQUIRED"))){if(!(/\brequired\b/i.test(element.className))){if(propertyOn(oldClassName)){setProperty(element,"OLD-CLASS-NAME",isDOMCompliant?trim(oldClassName+" required"):"required");}else{if(isDOMCompliant){element.className=trim(element.className+" required");}else{element.className="required"}}}}else{if(propertyOn(oldClassName)){setProperty(element,"OLD-CLASS-NAME",trim(oldClassName.replace(/\brequired\b/gi,"")));}else if(element.className){element.className=trim(element.className.replace(/\brequired\b/gi,""));}}}};oForm._=true}for(var j=0,element,iElements=oForm.elements.length;j<iElements;j++){element=oForm.elements[j];if(!element._){if(!isInitialFocusSet&&propertyOn((initialFocus=getProperty(element,"INITIAL-FOCUS")))){element.focus();if(/^select$/i.test(initialFocus)){element.select();}isInitialFocusSet=true}element._onkeypress_=toFunction(getProperty(element,"onkeypress"));element._onchange_=toFunction(getProperty(element,"onchange"));element._onpropertychange_=toFunction(getProperty(element,"onpropertychange"));element.validate=function(oEvent){return isValidElement(this,oEvent);};element.onbeforevalidate=toFunction(getProperty(element,"onbeforevalidate"));element.onvalidate=toFunction(getProperty(element,"onvalidate"));element.onaftervalidate=toFunction(getProperty(element,"onaftervalidate"));element.onautosubmit=toFunction(getProperty(element,"onautosubmit"));element.onreset=toFunction(getProperty(element,"onreset"));element.onpropertychange=function(oEvent){oEvent=choose(oEvent,window.event);if(oEvent.propertyName&&oEvent.propertyName.toUpperCase()=="REQUIRED"){this.form.markRequired();}if(this._onpropertychange_){this._onpropertychange_(oEvent);}};element.onkeypress=function(oEvent){var keyEnter=13;var keyNewLine=10;var keyTab=9;var keyBackspace=8;var keyNull=0;var keyDelete=46;var keyEscape=27;if(this._onkeypress_&&this._onkeypress_(oEvent)===false){return false}var filter=getProperty(this,"FILTER");var bKCaps=propertyOn(getProperty(this,"KCAPS"));var bFilter=propertyOn(filter);if(bKCaps||bFilter){oEvent=choose(oEvent,window.event);var keyCode=choose(oEvent.which,oEvent.keyCode);var keyChar=String.fromCharCode(keyCode);if(bFilter){if(filter.constructor!=RegExp){filter=new RegExp(filter);}if(keyCode!=keyNull&&keyCode!=keyTab&&keyCode!=keyEnter&&keyCode!=keyNewLine&&keyCode!=keyBackspace&&keyCode!=keyDelete&&keyCode!=keyEscape&&!filter.test(keyChar)){return false}}}return true};if(element.type!="radio"&&element.type!="checkbox"){element.onchange=function(oEvent){oEvent=choose(oEvent,window.event);restoreElement(this);if(propertyOn(getProperty(this,"VALIDATE-ONCHANGE"),getProperty(this.form,"VALIDATE-ONCHANGE"))){if(!this.validate(oEvent)&&!suppressOnchange(this)){return false}}if(this._onchange_&&this._onchange_()===false){return false}var autoSubmit=getProperty(this,"AUTO-SUBMIT");if(propertyOn(autoSubmit)&&this.onautosubmit()!==false&&this.form.onautosubmit()!==false){this.form.submit();}}}element._=true}}oForm.markRequired();}};this.Err=new this.Err();this.setup();}if(!!RegExp&&!!"".replace&&"ab".replace(/a/,"")=="b"&&!!document.forms&&!((navigator.appVersion.indexOf("Mac")!=-1)&&(navigator.appVersion.indexOf("MSIE")!=-1))){Validation=new Validation()}


