/* This function validates all fields at once */function validateCompleteForm(objForm,strErrorClass){return _validateInternal(objForm,strErrorClass,0);};/* This function validates fields one at a time - exiting when it finds an error */function validateStandard(objForm,strErrorClass){return _validateInternal(objForm,strErrorClass,1);};/* This function does the actual validation work */function _validateInternal(form,strErrorClass,nErrorThrowType){var strErrorMessage="";var objFirstError=null;if(nErrorThrowType==0) /* i.e validate all form fields at once */{strErrorMessage=(form.err)?form.err:_getLanguageText("err_form");};var fields=_GenerateFormFields(form);for(var i=0;i<fields.length;++i) /* Step through all the fields on the form */{	var field=fields[i];	if(!field.IsValid(fields)){		field.SetClass(strErrorClass);		if(nErrorThrowType==1){  /* Set to validate fields one at a time */			_throwError(field);			return false;}		else { /* Set to validate fields all at once */			if(objFirstError==null){				objFirstError=field;} /* Set first error field for set focus */			strErrorMessage=_handleError(field,strErrorMessage);			bError=true;}			}		else		{			field.ResetClass(); /* No error so reset field's class */		}	};		if(objFirstError!=null){		alert(strErrorMessage);		objFirstError.element.focus();		return false;	};return true;};/* This function provides for error messages in languages other than default (English) * The standard error messages are defined below in the _jsVal_Language function * */function _getLanguageText(id){objTextsInternal=new _jsVal_Language();objTexts=null;	try{	objTexts=new jsVal_Language();}	catch(ignored){};	switch(id){		case "err_form":strResult=(!objTexts||!objTexts.err_form)?objTextsInternal.err_form:objTexts.err_form;break;		case "err_enter":strResult=(!objTexts||!objTexts.err_enter)?objTextsInternal.err_enter:objTexts.err_enter;break;		case "err_select":strResult=(!objTexts||!objTexts.err_select)?objTextsInternal.err_select:objTexts.err_select;break;};	return strResult;	};/* This function returns an array of the fields on a form */function _GenerateFormFields(form){	var arr=new Array();	for(var i=0;i<form.length;++i){		var element=form.elements[i];		var index=_getElementIndex(arr,element);		if(index==-1){			arr[arr.length]=new Field(element,form);}		else{			arr[index].Merge(element)		};	};	return arr;};/* Given an element in the array, this function returns the element index number */function _getElementIndex(arr,element){	if(element.name){		var elementName=element.name.toLowerCase();		for(var i=0;i<arr.length;++i){			if(arr[i].element.name){				if(arr[i].element.name.toLowerCase()==elementName){				return i;				}			};		};	}	return -1; /* Return false if not found */};/* This function allows standard error messages to be specified */function _jsVal_Language(){this.err_form="Please enter/select values for the following fields:\n\n";this.err_select="Please select a valid \"%FIELDNAME%\"";this.err_enter="Please enter a valid \"%FIELDNAME%\"";};/* This function sets up all the field attributes for the fields on a form */function Field(element,form){	this.type=element.type;	this.element=element;	this.exclude=element.exclude||element.getAttribute('exclude');	this.err=element.err||element.getAttribute('err');	this.required=_parseBoolean(element.required||element.getAttribute('required'));	this.realname=element.realname||element.getAttribute('realname');	this.elements=new Array();	switch(this.type){		/* If element is textarea, password, text or file */		case "textarea": 		case "password":		case "text":		case "file":			this.value=element.value;			this.minLength=element.minlength||element.getAttribute('minlength');			this.maxLength=element.maxlength||element.getAttribute('maxlength');			this.regexp=this._getRegEx(element);			this.minValue=element.minvalue||element.getAttribute('minvalue');			this.maxValue=element.maxvalue||element.getAttribute('maxvalue');			this.equals=element.equals||element.getAttribute('equals');			this.callback=element.callback||element.getAttribute('callback');			break;		case "select-one":		case "select-multiple":			this.values=new Array();			for(var i=0;i<element.options.length;++i){//				if(element.options[i].selected&&(!this.exclude||element.options[i].value!=this.exclude)){				if(element.options[i].selected){					if((element.options[i].value!=this.exclude)&&(element.options[i].text!=this.exclude)){						this.values[this.values.length]=element.options[i].value;					}				}			}			this.min=element.min||element.getAttribute('min');			this.max=element.max||element.getAttribute('max');			this.equals=element.equals||element.getAttribute('equals');			break;		case "checkbox":			this.min=element.min||element.getAttribute('min');			this.max=element.max||element.getAttribute('max');		case "radio":			this.required=_parseBoolean(this.required||element.getAttribute('required'));			this.values=new Array();			if(element.checked){				this.values[0]=element.value;			}			this.elements[0]=element;			break;		};	};		Field.prototype.Merge=function(element){	var required=_parseBoolean(element.getAttribute('required'));	if(required){		this.required=true;	};	if(!this.err){		this.err=element.getAttribute('err');	};	if(!this.equals){		this.equals=element.getAttribute('equals');	};	if(!this.callback){		this.callback=element.getAttribute('callback');	};	if(!this.realname){		this.realname=element.getAttribute('realname');	};	if(!this.max){		this.max=element.getAttribute('max');	};	if(!this.min){		this.min=element.getAttribute('min');	};	if(!this.regexp){		this.regexp=this._getRegEx(element);	};	if(element.checked){		this.values[this.values.length]=element.value;	};this.elements[this.elements.length]=element;};	Field.prototype.IsValid=function(arrFields){	switch(this.type){		case "textarea":		case "password":		case "text":		case "file":			return this._ValidateText(arrFields);		case "select-one":		case "select-multiple":		case "radio":		case "checkbox":			return this._ValidateGroup(arrFields);		default: return true;	};};	Field.prototype.SetClass=function(newClassName){		if((newClassName)&&(newClassName!="")){			if((this.elements)&&(this.elements.length>0)){				for(var i=0;i<this.elements.length;++i){					if(this.elements[i].className!=newClassName){						this.elements[i].oldClassName=this.elements[i].className;						this.elements[i].className=newClassName;					}				}			}			else{			if(this.element.className!=newClassName){				this.element.oldClassName=this.element.className;				this.element.className=newClassName;				}			};		}	};	Field.prototype.ResetClass=function(){		if((this.type!="button")&&(this.type!="submit")&&(this.type!="reset")){			if((this.elements)&&(this.elements.length>0)){				for(var i=0;i<this.elements.length;++i){					if(this.elements[i].oldClassName){						this.elements[i].className=this.elements[i].oldClassName;					}					else{						this.element.className="";					}				}			}			else{				if(this.elements.oldClassName){					this.element.className=this.element.oldClassName;				}			else{				this.element.className="";				}			};		};	};	Field.prototype._getRegEx=function(element){		regex=element.regexp||element.getAttribute('regexp')		if(regex==null)return null;		retype=typeof(regex);		if(retype.toUpperCase()=="FUNCTION")			return regex;		else if((retype.toUpperCase()=="STRING")&&!(regex=="JSVAL_RX_EMAIL")&&!(regex=="JSVAL_RX_TEL")				&&!(regex=="JSVAL_RX_PC")&&!(regex=="JSVAL_RX_ZIP")&&!(regex=="JSVAL_RX_MONEY")				&&!(regex=="JSVAL_RX_CREDITCARD")&&!(regex=="JSVAL_RX_POSTALZIP")&&!(regex=="JSVAL_RX_ALPHA")				&&!(regex=="JSVAL_RX_ALPHANUM")&&!(regex=="JSVAL_RX_NUMBER"))			{				nBegin=0;nEnd=0;				if(regex.charAt(0)=="/")nBegin=1;				if(regex.charAt(regex.length-1)=="/")nEnd=regex.length-1;		return new RegExp("\"" + regex.slice(nBegin,nEnd) + "\"");		}		else{			return regex;		};	};		Field.prototype._ValidateText=function(arrFields){//		if((this.required)&&(this.callback)){ trying change below		if(this.callback){			nCurId=this.element.id?this.element.id:"";			nCurName=this.element.name?this.element.name:"";			eval("bResult = "+this.callback+"('"+nCurId+"', '"+nCurName+"', '"+this.value+"');");			if(bResult==false){				return false;			};			}else{			if(this.required&&!this.value){				return false;			};		if(this.value&&(this.minLength&&this.value.length<this.minLength)){			return false;		};		if(this.value&&(this.maxLength&&this.value.length>this.maxLength)){			return false;		};		if(this.regexp){			if(!_checkRegExp(this.regexp,this.value))			{				if(!this.required&&this.value){					return false;				}				if(this.required){					return false;				}			}			else				{				return true;			};		};		if(this.equals){			for(var i=0;i<arrFields.length;++i){				var field=arrFields[i];				if((field.element.name==this.equals)||(field.element.id==this.equals)){					if(field.element.value!=this.value){						return false;					};					break;				};			};		};		if(this.required){			var fValue=parseFloat(this.value);		if((this.minValue||this.maxValue)&&isNaN(fValue)){			return false;		};		if((this.minValue)&&(fValue<this.minValue)){			return false;		};		if((this.maxValue)&&(fValue>this.maxValue)){			return false		};	};	}	return true;	};	Field.prototype._ValidateGroup=function(arrFields){		if(this.required&&this.values.length==0){			return false;		};		if(this.required&&this.min&&this.min>this.values.length){			return false;		};		if(this.required&&this.max&&this.max<this.values.length){			return false;		};		return true;		};function _handleError(field,strErrorMessage){	var obj=field.element;	strNewMessage=strErrorMessage+((field.realname)?field.realname:((obj.id)?obj.id:obj.name))+"\n";	return strNewMessage;};function _throwError(field){	var obj=field.element;	switch(field.type){		case "text":		case "password":		case "textarea":		case "file":			alert(_getError(field,"err_enter"));			try{				obj.focus();			}			catch(ignore){}			break;		case "select-one":		case "select-multiple":		case "radio":		case "checkbox":			alert(_getError(field,"err_select"));			break;		};};function _getError(field,str){	var obj=field.element;	strErrorTemp=(field.err)?field.err:_getLanguageText(str);	idx=strErrorTemp.indexOf("\\n");	while(idx>-1){		strErrorTemp=strErrorTemp.replace("\\n","\n");		idx=strErrorTemp.indexOf("\\n");	};	return strErrorTemp.replace("%FIELDNAME%",(field.realname)?field.realname:((obj.id)?obj.id:obj.name));};function _parseBoolean(value){	return !(!value||value==0||value=="0"||value=="false");};function _checkRegExp(regx,value){	switch(regx){		case "JSVAL_RX_EMAIL":			return((/^[a-zA-Z1-9.-_???????]+([\._-]?[a-zA-Z1-9.???????]+)*@[a-zA-Z1-9???????]+([\.-]?[a-zA-Z1-9.???????]+)*(\.\w{2,5})+$/).test(value));		case "JSVAL_RX_TEL":			return((/^1?[\-]?\(?\d{3}\)?[\-]?\d{3}[\-]?\d{4}$/).test(value));		case "JSVAL_RX_PC":			return((/^[a-z]\d[a-z]?\d[a-z]\d$/i).test(value));		case "JSVAL_RX_ZIP":			return((/^\d{5}$/).test(value));		case "JSVAL_RX_MONEY":			return((/^\d+([\.]\d\d)?$/).test(value));		case "JSVAL_RX_ALPHANUM":			return((/^[a-zA-Z0-9 ]*$/).test(value));				case "JSVAL_RX_ALPHA":			return((/^[a-zA-Z ]*$/).test(value));				case "JSVAL_RX_NUMBER":			return((/^[0-9.]*$/).test(value));				case "JSVAL_RX_CREDITCARD":			return(!isNaN(value));		case "JSVAL_RX_POSTALZIP":			if(value.length==6||value.length==7)				return((/^[a-zA-Z]\d[a-zA-Z] ?\d[a-zA-Z]\d$/).test(value));			if(value.length==5||value.length==10)				return((/^\d{5}(\-\d{4})?$/).test(value));		break;		default:			return(regx.test(value));	};};