

function validateCompleteForm(objForm,strErrorClass){

return _validateInternal(objForm,strErrorClass,0);

};

function validateStandard(objForm,strErrorClass){

return _validateInternal(objForm,strErrorClass,1);

};

function _validateInternal(form,strErrorClass,nErrorThrowType){

var strErrorMessage="";var objFirstError=null;

if(nErrorThrowType==0){

strErrorMessage=(form.err)?form.err:_getLanguageText("err_form");

};

var fields=_GenerateFormFields(form);

for(var i=0;i<fields.length;++i){

var field=fields[i];

if(!field.IsValid(fields)){

field.SetClass(strErrorClass);

if(nErrorThrowType==1){

_throwError(field);

return false;

}else{

if(objFirstError==null){

objFirstError=field;

}

strErrorMessage=_handleError(field,strErrorMessage);

bError=true;

}

}else{

field.ResetClass();

}

};

if(objFirstError!=null){

alert(strErrorMessage);

objFirstError.element.focus();

return false;

};

return true;

};

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;

};

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;

};

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;

};

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%\"";

};

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){

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)){

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"))

{

nBegin=0;nEnd=regex.length-1;

if(regex.charAt(0)=="/")nBegin=1;

if(regex.charAt(regex.length-1)=="/")nEnd=regex.length-2;

return new RegExp(regex.slice(nBegin,nEnd));

}

else{

return regex;

};

};

Field.prototype._ValidateText=function(arrFields){

if((this.required)&&(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((/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\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_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));

};

};


