/* CUSTOMIZED LINES 569-579 TO DISPLAY errorsDiv AS A ONE LINE SPAN RATHER THAN UL LI list*//*********************************************************************** * YAV - Yet Another Validator  v2.0                                   * * Copyright (C) 2005-2008                                             * * Author: Federico Crivellaro <f.crivellaro@gmail.com>                * * WWW: http://yav.sourceforge.net                                     * *                                                                     * * This library is free software; you can redistribute it and/or       * * modify it under the terms of the GNU Lesser General Public          * * License as published by the Free Software Foundation; either        * * version 2.1 of the License, or (at your option) any later version.  * *                                                                     * * This library is distributed in the hope that it will be useful,     * * but WITHOUT ANY WARRANTY; without even the implied warranty of      * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU   * * Lesser General Public License for more details.                     * *                                                                     * * You should have received a copy of the GNU Lesser General Public    * * License along with this library; if not, write to the Free Software * * Foundation, Inc.,59 Temple Place,Suite 330,Boston,MA 02111-1307 USA * *                                                                     * * last revision:  2 MAR 2008                                          * ***********************************************************************/var yav = {//------------------------------------------------------------ PUBLIC FUNCTIONSundef: undefined,isFocusSet: undefined,internalRules: undefined,f: undefined,formEvt: undefined,fieldsEvt: new Array(),rulesEvt: new Array(),helpEvt: new Array(),mask: new Array(),onOKEvt: new Array(),onErrorEvt: new Array(),preValidationEvt: new Array(),filterByName: null,performCheck: function (formName, strRules, alertType, filterErrorsByName) {	yav.filterByName = (filterErrorsByName) ? filterErrorsByName: null;	for(var j=0; j<yav.preValidationEvt.length; j++) {		if (yav.filterByName==yav.preValidationEvt[j].name) {			var preValidationResult = eval(yav.preValidationEvt[j].fn);			yav.preValidationEvt[j].executedWithSuccess = preValidationResult;			if (!preValidationResult) {				return preValidationResult;			}			break;		}	}	yav.isFocusSet = false;    var rules = yav.makeRules(strRules);    yav.internalRules = yav.makeRules(strRules);    yav.f = document.forms[formName];    if( !yav.f ) {        yav.debug('DEBUG: could not find form object ' + formName);        return null;    }    var errors = new Array();    var ix = 0;    if (rules.length) {        for(var i=0; i<rules.length; i++) {            var aRule = rules[i];            if (aRule!=null) {				yav.highlight(yav.getField(yav.f, aRule.el), yav_config.inputclassnormal);            }        }    } else {        if (rules!=null) {			yav.highlight(yav.getField(yav.f, rules.el), yav_config.inputclassnormal);        }    }    if (rules.length) {		for(var i=0; i<rules.length; i++) {            var aRule = rules[i];            var anErr = null;            if (aRule==null) {                //do nothing            } else if (aRule.ruleType=='pre-condition' || aRule.ruleType=='post-condition' || aRule.ruleType=='andor-operator') {                //do nothing            } else if (aRule.ruleName=='implies') {                pre  = aRule.el;                post = aRule.comparisonValue;                var oldClassName = yav.getField(yav.f, rules[pre].el).className;				if ( yav.filterByName!=null ) {					if (rules[pre].el==yav.filterByName || rules[post].el==yav.filterByName) {						yav.clearInlineSpans(rules[pre].el, rules[post].el);					}				}                if ( yav.checkRule(yav.f, rules[pre])==null && yav.checkRule(yav.f, rules[post])!=null ) {                    anErr = yav.deleteInline(aRule.alertMsg) + '__inline__'+rules[post].el;                } else if ( yav.checkRule(yav.f, rules[pre])!=null ) {                    yav.getField(yav.f, rules[pre].el).className = oldClassName;                }            } else if (aRule.ruleName=='date_lt' || aRule.ruleName=='date_le') {                if ( yav.filterByName!=null ) {					if (aRule.comparisonValue && aRule.comparisonValue.indexOf('$'+yav.filterByName)==0) {						yav.clearInlineSpans(aRule.el, yav.filterByName);					}				}                anErr = yav.checkRule(yav.f, aRule);            } else {                anErr = yav.checkRule(yav.f, aRule);            }            if ( anErr!=null ) {				if (yav.filterByName && yav.filterByName!=null) {					if (aRule.ruleName=='implies') {						if (rules[pre].el==yav.filterByName || rules[post].el==yav.filterByName) {							yav.clearInlineSpans(rules[pre].el, rules[post].el);						}						aRule = rules[aRule.comparisonValue];					}					//todo					if (aRule.ruleName=='or') {                        var tmp = aRule.comparisonValue.split('-');                        for(var t=0; t<tmp.length; t++) {                            yav.clearInlineSpans(rules[tmp[t]].el);                        }						if (rules[aRule.el].el==yav.filterByName) {							yav.clearInlineSpans(rules[aRule.el].el);						}						aRule = rules[aRule.el];					}					//					if (aRule.el==yav.filterByName || (aRule.comparisonValue && aRule.comparisonValue.indexOf('$'+yav.filterByName)==0)) {						for(var z=0; z<rules.length; z++) {							if (rules[z].ruleName=='implies' && rules[rules[z].el].el==aRule.el) {								yav.clearInlineSpans(rules[rules[z].comparisonValue].el);							}						}						errors[ix] = anErr;	                    ix++;						break;									}				} else {	                errors[ix] = anErr;	                ix++;				}            }        }//for    } else {        var myRule = rules;        err = yav.checkRule(yav.f, myRule);        if ( err!=null ) {			if (yav.filterByName && yav.filterByName != null) {				if (myRule.el == yav.filterByName) {					errors[0] = err;				}			} else {				errors[0] = err;			}        }    }	var retval = yav.displayAlert(errors, alertType);	yav.filterByName = null;    return retval;},checkKeyPress: function (ev, obj, strRules) {    var keyCode = null;	keyCode = (typeof(ev.which))!='undefined' ? ev.which : window.event.keyCode;    var rules = yav.makeRules(strRules);    var keyAllowed = true;    if (rules.length) {        for(var i=0; i<rules.length; i++) {            var aRule = rules[i];            if (aRule.ruleName=='keypress' && aRule.el==obj.name) {                keyAllowed = yav.isKeyAllowed(keyCode, aRule.comparisonValue);                break;            }        }    } else {        var aRule = rules;        if (aRule.ruleName=='keypress' && aRule.el==obj.name) {            keyAllowed = yav.isKeyAllowed(keyCode, aRule.comparisonValue);        }    }    if (!keyAllowed) {        if ( typeof(ev.which)=='undefined' ) {            window.event.keyCode=0;        } else {            ev.preventDefault();            ev.stopPropagation();            ev.returnValue=false;        }    }    return keyAllowed;},init: function (formName, strRules) {	yav.addMask('alphabetic', null, null, yav_config.alphabetic_regex);	yav.addMask('alphanumeric', null, null, yav_config.alphanumeric_regex);	yav.addMask('alnumhyphen', null, null, yav_config.alnumhyphen_regex);	yav.addMask('alnumhyphenat', null, null, yav_config.alnumhyphenat_regex);	yav.addMask('alphaspace', null, null, yav_config.alphaspace_regex);	yav.formEvt = formName;	yav.rulesEvt = strRules;	if (strRules.length) {        for(var i=0; i<strRules.length; i++) {			var aRule = yav.splitRule(strRules[i]);			var elm = yav.getField(document.forms[formName], aRule.el);			if (elm && aRule.ruleName=='mask') {				yav.addEvent(elm, 'keypress', yav.maskEvt.bindAsEventListener(elm));			} else if (elm && !yav.inArray(yav.fieldsEvt, aRule.el) ) {				var eventAdded = false;				for(var j=0; j<yav.onOKEvt.length; j++) {					if (elm.name==yav.onOKEvt[j].name) {						yav.addEvent(elm, yav.onOKEvt[j].evType, 							function(){								if (yav.performEvt(this.name)) {									yav.performOnOKEvt(this.name);								} else {									for(var k=0; k<yav.preValidationEvt.length; k++) {										if (this.name==yav.preValidationEvt[k].name) {											if (yav.preValidationEvt[k].executedWithSuccess==false) {												yav.preValidationEvt[k].executedWithSuccess = null;												return;											}											yav.preValidationEvt[k].executedWithSuccess = null;											break;										}									}									yav.performOnErrorEvt(this.name);								}						    } );						eventAdded = true;						break;					}				}				if (!eventAdded) {					for(var j=0; j<yav.onErrorEvt.length; j++) {						if (elm.name==yav.onErrorEvt[j].name) {							yav.addEvent(elm, yav.onErrorEvt[j].evType, 								function(){									if (!yav.performEvt(this.name)) {										for(var k=0; k<yav.preValidationEvt.length; k++) {											if (this.name==yav.preValidationEvt[k].name) {												if (yav.preValidationEvt[k].executedWithSuccess==false) {													yav.preValidationEvt[k].executedWithSuccess = null;													return;												}												yav.preValidationEvt[k].executedWithSuccess = null;												break;											}										}										yav.performOnErrorEvt(this.name);									}							    } );							eventAdded = true;							break;						}					}				}				yav.fieldsEvt.push(aRule.el);				if (!eventAdded) {					yav.addEvent(elm, 'blur', 					  function(){						yav.performEvt(this.name);					  });				}			}        }    } else {		var rule = yav.splitRule(strRules);		var elm = yav.getField(document.forms[formName], rule.el);		if (elm && rule.ruleName=='mask') {			yav.addEvent(elm, 'keypress', yav.maskEvt.bindAsEventListener(elm));		} else if (elm) {			var eventAdded = false;			for(var j=0; i<yav.onOKEvt.length; j++) {				if (elm.name==yav.onOKEvt[i].name) {					yav.addEvent(elm, yav.onOKEvt[j].evType, 						function(){						    if (yav.performEvt(this.name)) {								yav.performOnOKEvt(this.name);							}					    } );					eventAdded = true;					break;				}			}			for(var j=0; j<yav.onErrorEvt.length; j++) {				if (elm.name==yav.onErrorEvt[j].name) {					yav.addEvent(elm, yav.onErrorEvt[j].evType, 						function(){							if (!yav.performEvt(this.name)) {								for(var k=0; k<yav.preValidationEvt.length; k++) {									if (this.name==yav.preValidationEvt[k].name) {										if (yav.preValidationEvt[k].executedWithSuccess==false) {											yav.preValidationEvt[k].executedWithSuccess = null;											return;										}										yav.preValidationEvt[k].executedWithSuccess = null;										break;									}								}								yav.performOnErrorEvt(this.name);							}					    } );					eventAdded = true;					break;				}			}			if (!eventAdded) {				yav.addEvent(elm, 'blur', 			      function(){				    yav.performEvt(this.name);			      });			}		}	}	if (yav.helpEvt.length>0) {        for(var i=0; i<yav.helpEvt.length; i++) {			var elm = yav.getField(document.forms[formName], yav.helpEvt[i].name);			if ( elm ) {			    if ( elm.focus ) {    				yav.addEvent(elm, 'focus',     				  function(){    					yav.showHelpEvt(this.name);    				  });    		    } else {    				yav.addEvent(elm, 'click',     				  function(){    					yav.showHelpEvt(this.name);    				  });    		    }				if ( !yav.inArray(yav.fieldsEvt, yav.helpEvt[i].name) ) {					yav.addEvent(elm, 'blur', 					  function(){						yav.cleanInline(this.name);					  });				}			}        }	}},displayMsg: function(name, msg, clazz) {    var elm = yav.get(yav_config.errorsdiv+'_'+name);	if (elm) {		elm.innerHTML = msg;	    elm.className = clazz;	    elm.style.display = '';	} else {		elm = yav.get(yav_config.errorsdiv);		if (elm) {			elm.innerHTML = msg;		    elm.className = clazz;		    elm.style.display = '';		} else {			alert(msg);		}	}},cleanInline: function(name) {    yav.get(yav_config.errorsdiv+'_'+name).innerHTML = '';    yav.get(yav_config.errorsdiv+'_'+name).className = '';    yav.get(yav_config.errorsdiv+'_'+name).style.display = 'none';},addHelp: function (name, helpMsg) {	var elem = new Object();	elem.name = name;	elem.help = helpMsg;	yav.helpEvt.push(elem);},addMask: function (name, format, charsAllowed, regex) {	var elem = new Object();	elem.name = name;	elem.format = format;	elem.charsAllowed = charsAllowed;	elem.regex = regex ? regex : null;	yav.mask.push(elem);},postValidation_OnOK: function(name, evType, fn){	var elem = new Object();	elem.name = name;	elem.evType = evType;	elem.fn = fn;	yav.onOKEvt.push(elem);},postValidation_OnError: function(name, evType, fn){	var elem = new Object();	elem.name = name;	elem.evType = evType;	elem.fn = fn;	yav.onErrorEvt.push(elem);},preValidation: function(fn, name){	var elem = new Object();	elem.name = (name && name!=null)? name : null;	elem.fn = fn;	elem.executedWithSuccess = null;	yav.preValidationEvt.push(elem);},//------------------------------------------------------------ PRIVATE FUNCTIONSinArray: function(arr, value) {	var found = false;	for (var i=0;i<arr.length;i++) {		if (arr[i]==value) {			found = true;			break;		}	}	return found;},performEvt: function(name) {	var elm = yav.get(yav_config.errorsdiv);    if (elm) {		elm.innerHTML = '';	    elm.className = '';	    elm.style.display = 'none';	}	return yav.performCheck(yav.formEvt, yav.rulesEvt, 'inline', name); },performOnOKEvt: function(name) {    for(var j=0; j<yav.onOKEvt.length; j++) {		if (name==yav.onOKEvt[j].name) {			eval(yav.onOKEvt[j].fn);			break;		}	}},performOnErrorEvt: function(name) {    for(var j=0; j<yav.onErrorEvt.length; j++) {		if (name==yav.onErrorEvt[j].name) {			eval(yav.onErrorEvt[j].fn);			break;		}	}},showHelpEvt: function(name) {    for(var i=0; i<yav.helpEvt.length; i++) {		if (yav.helpEvt[i].name==name) {            yav.get(yav_config.errorsdiv+'_'+name).innerHTML = yav.helpEvt[i].help;            yav.get(yav_config.errorsdiv+'_'+name).className = yav_config.innerhelp;            yav.get(yav_config.errorsdiv+'_'+name).style.display = '';			break;		}    }},maskEvt: function(ev) {    var mask = null;	var myRule = null;    for(var i=0; i<yav.rulesEvt.length; i++) {		var aRule = yav.splitRule(yav.rulesEvt[i]);		var elm = yav.getField(document.forms[yav.formEvt], aRule.el);		if (elm && aRule.ruleName=='mask' && elm.name==this.name) {		    for(var j=0; j<yav.mask.length; j++) {				if ( yav.mask[j].name==aRule.comparisonValue ) {					mask = yav.mask[j];					break;				}		    }			myRule = aRule;			break;		}    }    var key  = (typeof(ev.which))!='undefined' ? ev.which : window.event.keyCode;    var ch      = String.fromCharCode(key);    var str     = this.value + ch;    var pos     = str.length;	if (key==8 || key==0) { 		return true;	}	var keyAllowed = false;	if (mask==null) {		if ( yav.isKeyAllowed(key, myRule.comparisonValue) ) {			keyAllowed = true;		} else {			if ( typeof(ev.which)=='undefined' ) {		        window.event.keyCode=0;		    } else {		        ev.preventDefault();		        ev.stopPropagation();		        ev.returnValue=false;		    }		}		return keyAllowed;	} else if ( mask.format==null ) {		reg = new RegExp(mask.regex);        if ( reg.test(ch) ) {			keyAllowed = true;		} else {			if ( typeof(ev.which)=='undefined' ) {		        window.event.keyCode=0;		    } else {		        ev.preventDefault();		        ev.stopPropagation();		        ev.returnValue=false;		    }		}		return keyAllowed;	} else if ( yav.isKeyAllowed(key, mask.charsAllowed) && pos <= mask.format.length ) {        if ( mask.format.charAt(pos - 1) != ' ' ) {            str = this.value + mask.format.charAt(pos - 1) + ch;        }		this.value = str;		keyAllowed = true;    }	if ( typeof(ev.which)=='undefined' ) {        window.event.keyCode=0;    } else {        ev.preventDefault();        ev.stopPropagation();        ev.returnValue=false;    }	return keyAllowed;},displayAlert: function (messages, alertType) {    var retval =null;    yav.clearAllInlineSpans();    if (alertType=='classic') {        retval = yav.displayClassic(messages);    } else if (alertType=='innerHtml') {        retval = yav.displayInnerHtml(messages);    }else if (alertType=='inline') {        retval = yav.displayInline(messages);    }else if (alertType=='jsVar') {        retval = yav.displayJsVar(messages);    } else {        yav.debug('DEBUG: alert type ' + alertType + ' not supported');    }    return retval;},displayClassic: function (messages) {    var str = '';    if ( messages!=null && messages.length>0 ) {    	if (yav.strTrim(yav_config.HEADER_MSG).length > 0) {            str += yav_config.HEADER_MSG + '\n\n';        }        for (var i=0; i<messages.length; i++) {            str += ' ' + yav.deleteInline(messages[i]) + '\n';        }    	if (yav.strTrim(yav_config.FOOTER_MSG).length > 0) {            str += '\n' + yav_config.FOOTER_MSG;        }        alert(str);        return false;    } else {    	return true;    }},displayInnerHtml: function (messages) {    if ( messages!=null && messages.length>0 ) {        var str = '';    	if (yav.strTrim(yav_config.HEADER_MSG).length > 0) {            str += yav_config.HEADER_MSG;        }        str += '<span>';        for (var i=0; i<messages.length; i++) {            str += '<span>'+yav.deleteInline(messages[i])+'</span>';        }        str += '</span>';    	if (yav.strTrim(yav_config.FOOTER_MSG).length > 0) {            str += yav_config.FOOTER_MSG;        }        yav.get(yav_config.errorsdiv).innerHTML = str;        yav.get(yav_config.errorsdiv).className = yav_config.innererror;        yav.get(yav_config.errorsdiv).style.display = 'inline';        return false;    } else {        yav.get(yav_config.errors).innerHTML = '';        yav.get(yav_config.errorsdiv).className = '';        yav.get(yav_config.errorsdiv).style.display = 'none';        return true;    }},displayInline: function (messages) {    if ( messages!=null && messages.length>0 ) {        var genericErrors = new Array();        var genericErrIndex = 0;        for (var i=0; i<messages.length; i++) {            var elName = messages[i].substring(messages[i].indexOf('__inline__')+10);            if ( yav.get(yav_config.errorsdiv+'_'+elName) ) {                yav.get(yav_config.errorsdiv+'_'+elName).innerHTML = yav.deleteInline(messages[i]);                yav.get(yav_config.errorsdiv+'_'+elName).className = yav_config.innererror;                yav.get(yav_config.errorsdiv+'_'+elName).style.display = '';            } else {                genericErrors[genericErrIndex] = messages[i];                genericErrIndex++;            }        }        if (genericErrIndex>0) {            yav.displayInnerHtml(genericErrors);        }        return false;    } else {        return true;    }},clearAllInlineSpans: function () {    var allDivs = document.getElementsByTagName("span");    for (var j=0; j<allDivs.length; j++) {        var idName = allDivs[j].id;        if ( idName.indexOf(yav_config.errorsdiv+'_')==0 ) {			if (yav.filterByName!=null) {				if ( idName==yav_config.errorsdiv+'_'+yav.filterByName ) {					yav.get(idName).innerHTML = '';		            yav.get(idName).className = '';		            yav.get(idName).style.display = 'none';				}			} else {	            yav.get(idName).innerHTML = '';	            yav.get(idName).className = '';	            yav.get(idName).style.display = 'none';			}        }    }},clearInlineSpans: function () {    var allDivs = document.getElementsByTagName("span");    for (var j=0; j<allDivs.length; j++) {        var idName = allDivs[j].id;        if ( idName.indexOf(yav_config.errorsdiv+'_')==0 ) {			for (var k=0; k<arguments.length; k++) {				if ( idName==yav_config.errorsdiv+'_'+arguments[k] ) {					yav.get(idName).innerHTML = '';		            yav.get(idName).className = '';		            yav.get(idName).style.display = 'none';				}			}        }    }},displayJsVar: function (messages) {    yav.get(yav_config.errorsdiv).className = '';    yav.get(yav_config.errorsdiv).style.display = 'none';    if ( messages!=null && messages.length>0 ) {        for (var i=0; i<messages.length; i++) {            messages[i] = yav.deleteInline(messages[i]);        }        var str = '';        str += '<script>var jsErrors;</script>';        yav.get(yav_config.errorsdiv).innerHTML = str;        jsErrors = messages;        return false;    } else {        yav.get(yav_config.errorsdiv).innerHTML = '<script>var jsErrors;</script>';        return true;    }},rule: function (el, ruleName, comparisonValue, alertMsg, ruleType) {    var checkArguments = arguments.length>=4 && arguments[0]!=null && arguments[1]!=null;    if ( !checkArguments ) {        return false;    }    tmp = el.split(':');    nameDisplayed = '';    if (tmp.length == 2) {        nameDisplayed = tmp[1];        el = tmp[0];    }    this.el = el;    this.nameDisplayed = nameDisplayed;    this.ruleName = ruleName;    this.comparisonValue = comparisonValue;    this.ruleType = ruleType;	if (alertMsg==yav.undef || alertMsg==null) {        this.alertMsg = yav.getDefaultMessage(el, nameDisplayed, ruleName, comparisonValue)+'__inline__'+this.el;    } else {        this.alertMsg = alertMsg+'__inline__'+this.el;    }},checkRule: function (f, myRule) {    retVal = null;    if (myRule != null) {        if (myRule.ruleName=='custom') {			var customFunction = null;			if (myRule.comparisonValue!=null) {				customFunction = ' retVal = ' + myRule.comparisonValue;			} else { // deprecated, maintained for back compatibility	            customFunction = ' retVal = ' + myRule.el;			}			retVal = eval(customFunction);			if (myRule.comparisonValue!=null && retVal!=this.undef && retVal!=null) {				retVal += '__inline__'+myRule.el;			}			if (retVal!=null && myRule.comparisonValue!=null) {				yav.highlight(yav.getField(yav.f, myRule.el), yav_config.inputclasserror);			}        } else if (myRule.ruleName=='and') {            var op_1 = myRule.el;            var op_next = myRule.comparisonValue;            if ( yav.checkRule(f, yav.internalRules[op_1])!=null ) {                retVal = myRule.alertMsg;                if (myRule.ruleType=='pre-condition' || myRule.ruleType=='andor-operator') {                    //yav.highlight(yav.getField(f, yav.internalRules[op_1].el), yav_config.inputclasserror);                }            } else {                var op_k = op_next.split('-');                for(var k=0; k<op_k.length; k++) {                    if ( yav.checkRule(f, yav.internalRules[op_k[k]])!=null ) {                        retVal = myRule.alertMsg;                        if (myRule.ruleType=='pre-condition' || myRule.ruleType=='andor-operator') {                            //yav.highlight(yav.getField(f, yav.internalRules[op_k[k]].el), yav_config.inputclasserror);                        }                        break;                    }                }            }        } else if (myRule.ruleName=='or') {            var op_1 = myRule.el;            var op_next = myRule.comparisonValue;            var success = false;            if ( yav.checkRule(f, yav.internalRules[op_1])==null ) {                success = true;            } else {                if (myRule.ruleType=='pre-condition' || myRule.ruleType=='andor-operator') {                    //yav.highlight(yav.getField(f, yav.internalRules[op_1].el), yav_config.inputclasserror);                }                var op_k = op_next.split('-');                for(var k=0; k<op_k.length; k++) {                    if ( yav.checkRule(f, yav.internalRules[op_k[k]])==null ) {                        success = true;                        break;                    } else {                        if (myRule.ruleType=='pre-condition' || myRule.ruleType=='andor-operator') {                            //yav.highlight(yav.getField(f, yav.internalRules[op_k[k]].el), yav_config.inputclasserror);                        }                    }                }            }            if (success) {                yav.highlight(yav.getField(f, yav.internalRules[op_1].el), yav_config.inputclassnormal);                var op_k = op_next.split('-');                for(var k=0; k<op_k.length; k++) {                    yav.highlight(yav.getField(f, yav.internalRules[op_k[k]].el), yav_config.inputclassnormal);                }            } else {                retVal = myRule.alertMsg;            }        } else {            el = yav.getField(f, myRule.el);            if (el == null) {                yav.debug('DEBUG: could not find element ' + myRule.el);                return null;            }            var err = null;            if(el.type) {                if(el.type=='hidden'||el.type=='text'||el.type=='password'||el.type=='textarea') {					err = yav.checkText(el, myRule);                } else if(el.type=='checkbox') {                    err = yav.checkCheckbox(el, myRule);                } else if(el.type=='select-one') {                    err = yav.checkSelOne(el, myRule);                } else if(el.type=='select-multiple') {                    err = yav.checkSelMul(el, myRule);                } else if(el.type=='radio') {                    err = yav.checkRadio(el, myRule);                } else {                    yav.debug('DEBUG: type '+ el.type +' not supported');                }            } else {                err = yav.checkRadio(el, myRule);            }            retVal = err;        }    }    return retVal;},checkRadio: function (el, myRule) {    var err = null;    if (myRule.ruleName=='required') {        var radios = el;	    var found=false;	    if (isNaN(radios.length) && radios.checked) {	    	found=true;	    } else {		    for(var j=0; j < radios.length; j++) {		        if(radios[j].checked) {		            found=true;		            break;		        }		    }		}        if( !found ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='equal') {        var radios = el;	    var found=false;	    if (isNaN(radios.length) && radios.checked) {	    	if (radios.value==myRule.comparisonValue) {	    	    found=true;	    	}	    } else {		    for(var j=0; j < radios.length; j++) {		        if(radios[j].checked) {        	    	if (radios[j].value==myRule.comparisonValue) {        	    	    found=true;                        break;        	    	}		        }		    }		}        if( !found ) {            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='notequal') {        var radios = el;	    var found=false;	    if (isNaN(radios.length) && radios.checked) {	    	if (radios.value!=myRule.comparisonValue) {	    	    found=true;	    	}	    } else {		    for(var j=0; j < radios.length; j++) {		        if(radios[j].checked) {        	    	if (radios[j].value!=myRule.comparisonValue) {        	    	    found=true;                        break;        	    	}		        }		    }		}        if( !found ) {            err = myRule.alertMsg;        }    } else {        yav.debug('DEBUG: rule ' + myRule.ruleName + ' not supported for radio');    }    return err;},checkText: function (el, myRule) {    err = null;    if (yav_config.trimenabled) {    	el.value = yav.strTrim(el.value);    }    if (myRule.ruleName=='required') {        if ( el.value==null || el.value=='' ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='equal') {        err = yav.checkEqual(el, myRule);    } else if (myRule.ruleName=='notequal') {        err = yav.checkNotEqual(el, myRule);    } else if (myRule.ruleName=='numeric') {        reg = new RegExp("^[0-9]*$");        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='alphabetic') {        reg = new RegExp(yav_config.alphabetic_regex);        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='alphanumeric') {        reg = new RegExp(yav_config.alphanumeric_regex);        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='alnumhyphen') {        reg = new RegExp(yav_config.alnumhyphen_regex);        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='alnumhyphenat') {        reg = new RegExp(yav_config.alnumhyphenat_regex);        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='alphaspace') {        reg = new RegExp(yav_config.alphaspace_regex);        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='email') {        reg = new RegExp(yav_config.email_regex);        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='maxlength') {        if ( isNaN(myRule.comparisonValue) ) {            yav.debug('DEBUG: comparisonValue for rule ' + myRule.ruleName + ' not a number');        }else if ( el.value.length > myRule.comparisonValue ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='minlength') {        if ( isNaN(myRule.comparisonValue) ) {            yav.debug('DEBUG: comparisonValue for rule ' + myRule.ruleName + ' not a number');        } else if ( el.value.length < myRule.comparisonValue ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='numrange') {        reg = new RegExp("^[-+]{0,1}[0-9]*[.]{0,1}[0-9]*$");        if ( !reg.test(yav.unformatNumber(el.value)) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        } else {            regRange = new RegExp("^[0-9]+-[0-9]+$");             if ( !regRange.test(myRule.comparisonValue) ) {                yav.debug('DEBUG: comparisonValue for rule ' + myRule.ruleName + ' not in format number1-number2');            } else {                rangeVal = myRule.comparisonValue.split('-');                if (eval(yav.unformatNumber(el.value))<eval(rangeVal[0]) || eval(yav.unformatNumber(el.value))>eval(rangeVal[1])) {                    yav.highlight(el, yav_config.inputclasserror);                     err = myRule.alertMsg;                }            }        }    } else if (myRule.ruleName=='regexp') {        reg = new RegExp(myRule.comparisonValue);        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else if (myRule.ruleName=='integer') {        err = yav.checkInteger(el, myRule);    } else if (myRule.ruleName=='double') {        err = yav.checkDouble(el, myRule);    } else if (myRule.ruleName=='date') {        err = yav.checkDate(el, myRule);    } else if (myRule.ruleName=='date_lt') {        err = yav.checkDateLessThan(el, myRule, false);    } else if (myRule.ruleName=='date_le') {        err = yav.checkDateLessThan(el, myRule, true);    } else if (myRule.ruleName=='keypress') {        // do nothing    } else if (myRule.ruleName=='empty') {        if ( el.value!=null && el.value!='' ) {            yav.highlight(el, yav_config.inputclasserror);            err = myRule.alertMsg;        }    } else {        yav.debug('DEBUG: rule ' + myRule.ruleName + ' not supported for ' + el.type);    }    return err;},checkInteger: function (el, myRule) {    reg = new RegExp("^[-+]{0,1}[0-9]*$");    if ( !reg.test(el.value) ) {        yav.highlight(el, yav_config.inputclasserror);        return myRule.alertMsg;    }},checkDouble: function (el, myRule) {    var sep = yav_config.DECIMAL_SEP;    reg = new RegExp("^[-+]{0,1}[0-9]*[" + sep + "]{0,1}[0-9]*$");    if ( !reg.test(el.value) ) {        yav.highlight(el, yav_config.inputclasserror);        return myRule.alertMsg;    }},checkDate: function (el, myRule) {    error = null;    if (el.value!='') {        var dateFormat = yav_config.DATE_FORMAT;        ddReg = new RegExp("dd");        MMReg = new RegExp("MM");        yyyyReg = new RegExp("yyyy");        if ( !ddReg.test(dateFormat) || !MMReg.test(dateFormat) || !yyyyReg.test(dateFormat)  ) {            yav.debug('DEBUG: locale format ' + dateFormat + ' not supported');        } else {            ddStart = dateFormat.indexOf('dd');            MMStart = dateFormat.indexOf('MM');            yyyyStart = dateFormat.indexOf('yyyy');        }        strReg = dateFormat.replace('dd','[0-9]{2}').replace('MM','[0-9]{2}').replace('yyyy','[0-9]{4}');        reg = new RegExp("^" + strReg + "$");        if ( !reg.test(el.value) ) {            yav.highlight(el, yav_config.inputclasserror);            error = myRule.alertMsg;        } else {            dd   = el.value.substring(ddStart, ddStart+2);            MM   = el.value.substring(MMStart, MMStart+2);            yyyy = el.value.substring(yyyyStart, yyyyStart+4);            if ( !yav.checkddMMyyyy(dd, MM, yyyy) ) {                yav.highlight(el, yav_config.inputclasserror);                error = myRule.alertMsg;            }        }    }    return error;},checkDateLessThan: function (el, myRule, isEqualAllowed) {    error = null;    var isDate = yav.checkDate(el, myRule)==null ? true : false;    if ( isDate && el.value!='' ) {        var dateFormat = yav_config.DATE_FORMAT;        ddStart = dateFormat.indexOf('dd');        MMStart = dateFormat.indexOf('MM');        yyyyStart = dateFormat.indexOf('yyyy');        dd   = el.value.substring(ddStart, ddStart+2);        MM   = el.value.substring(MMStart, MMStart+2);        yyyy = el.value.substring(yyyyStart, yyyyStart+4);        myDate = "" + yyyy + MM + dd;        strReg = dateFormat.replace('dd','[0-9]{2}').replace('MM','[0-9]{2}').replace('yyyy','[0-9]{4}');        reg = new RegExp("^" + strReg + "$");        var isMeta = myRule.comparisonValue.indexOf('$')==0             ? true            : false;        var comparisonDate = '';        if (isMeta) {            toSplit = myRule.comparisonValue.substr(1);            tmp = toSplit.split(':');            if (tmp.length == 2) {                comparisonDate = yav.getField(yav.f, tmp[0]).value;            } else {                comparisonDate = yav.getField(yav.f, myRule.comparisonValue.substr(1)).value;            }        } else {            comparisonDate = myRule.comparisonValue;        }        if ( !reg.test(comparisonDate) ) {            yav.highlight(el, yav_config.inputclasserror);            error = myRule.alertMsg;        } else {            cdd   = comparisonDate.substring(ddStart, ddStart+2);            cMM   = comparisonDate.substring(MMStart, MMStart+2);            cyyyy = comparisonDate.substring(yyyyStart, yyyyStart+4);            cDate = "" + cyyyy + cMM + cdd;            if (isEqualAllowed) {                if ( !yav.checkddMMyyyy(cdd, cMM, cyyyy) || myDate>cDate ) {                    yav.highlight(el, yav_config.inputclasserror);                    error = myRule.alertMsg;                }            } else {                if ( !yav.checkddMMyyyy(cdd, cMM, cyyyy) || myDate>=cDate ) {                    yav.highlight(el, yav_config.inputclasserror);                    error = myRule.alertMsg;                }            }        }    } else {        if ( el.value!='' ) {            yav.highlight(el, yav_config.inputclasserror);            error = myRule.alertMsg;        }    }    return error;},checkEqual: function (el, myRule) {    error = null;    var isMeta = myRule.comparisonValue.indexOf('$')==0         ? true        : false;    var comparisonVal = '';    if (isMeta) {        toSplit = myRule.comparisonValue.substr(1);        tmp = toSplit.split(':');        if (tmp.length == 2) {            comparisonVal = yav.getField(yav.f, tmp[0]).value;        } else {            comparisonVal = yav.getField(yav.f, myRule.comparisonValue.substr(1)).value;        }    } else {        comparisonVal = myRule.comparisonValue;    }    if ( el.value!=comparisonVal ) {        yav.highlight(el, yav_config.inputclasserror);        error = myRule.alertMsg;    }    return error;},checkNotEqual: function (el, myRule) {    error = null;    var isMeta = myRule.comparisonValue.indexOf('$')==0         ? true        : false;    var comparisonVal = '';    if (isMeta) {        toSplit = myRule.comparisonValue.substr(1);        tmp = toSplit.split(':');        if (tmp.length == 2) {            comparisonVal = yav.getField(yav.f, tmp[0]).value;        } else {            comparisonVal = yav.getField(yav.f, myRule.comparisonValue.substr(1)).value;        }    } else {        comparisonVal = myRule.comparisonValue;    }    if ( el.value==comparisonVal ) {        yav.highlight(el, yav_config.inputclasserror);        error = myRule.alertMsg;    }    return error;},checkddMMyyyy: function (dd, MM, yyyy) {    retVal = true;    if (    (dd<1) || (dd>31) || (MM<1) || (MM>12) ||            (dd==31 && (MM==2 || MM==4 || MM==6 || MM==9 || MM==11) ) ||            (dd >29 && MM==2) ||            (dd==29 && (MM==2) && ((yyyy%4 > 0) || (yyyy%4==0 && yyyy%100==0 && yyyy%400>0 )) )) {       retVal = false;    }    return retVal;},checkCheckbox: function (el, myRule) {    if (myRule.ruleName=='required') {        if ( !el.checked ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else if (myRule.ruleName=='equal') {        if ( !el.checked || el.value!=myRule.comparisonValue ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else if (myRule.ruleName=='notequal') {        if ( el.checked && el.value==myRule.comparisonValue ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else {        yav.debug('DEBUG: rule ' + myRule.ruleName + ' not supported for ' + el.type);    }},checkSelOne: function (el, myRule) {    if (myRule.ruleName=='required') {        var found = false;        var inx = el.selectedIndex;        if(inx>=0 && el.options[inx].value) {            found = true;        }        if ( !found ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else if (myRule.ruleName=='equal') {        var found = false;        var inx = el.selectedIndex;        if(inx>=0 && el.options[inx].value==myRule.comparisonValue) {            found = true;        }        if ( !found ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else if (myRule.ruleName=='notequal') {        var found = false;        var inx = el.selectedIndex;        if(inx>=0 && el.options[inx].value!=myRule.comparisonValue) {            found = true;        }        if ( !found ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else {        yav.debug('DEBUG: rule ' + myRule.ruleName + ' not supported for ' + el.type);    }},checkSelMul: function (el, myRule) {    if (myRule.ruleName=='required') {        var found = false;        opts = el.options;        for(var i=0; i<opts.length; i++) {            if(opts[i].selected && opts[i].value) {                found = true;                break;            }        }        if ( !found ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else if (myRule.ruleName=='equal') {        var found = false;        opts = el.options;        for(var i=0; i<opts.length; i++) {            if(opts[i].selected && opts[i].value==myRule.comparisonValue) {                found = true;                break;            }        }        if ( !found ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else if (myRule.ruleName=='notequal') {        var found = false;        opts = el.options;        for(var i=0; i<opts.length; i++) {            if(opts[i].selected && opts[i].value!=myRule.comparisonValue) {                found = true;                break;            }        }        if ( !found ) {            yav.highlight(el, yav_config.inputclasserror);            return myRule.alertMsg;        }    } else {        yav.debug('DEBUG: rule ' + myRule.ruleName + ' not supported for ' + el.type);    }},debug: function (msg) {   if (yav_config.debugmode) {        alert(msg);   }},strTrim: function (str) {    return str.replace(/^\s+/,'').replace(/\s+$/,'');},makeRules: function (strRules) {    var rules=new Array();    if (strRules.length) {        for(var i=0; i<strRules.length; i++) {            rules[i] = yav.splitRule(strRules[i]);        }    } else {        rules[0] = yav.splitRule(strRules);    }    return rules;},splitRule: function (strRule) {    var retval = null;    if (strRule!=yav.undef) {        params = strRule.split(yav_config.RULE_SEP);        switch (params.length) {            case 2:                retval = new yav.rule(params[0], params[1], null, null, null);                break;            case 3:                if (yav.threeParamRule(params[1])) {                    retval = new yav.rule(params[0], params[1], params[2], null, null);                } else if (params[2]=='pre-condition' || params[2]=='post-condition' || params[2]=='andor-operator') {                    retval = new yav.rule(params[0], params[1], null, 'foo', params[2]);                } else {                    retval = new yav.rule(params[0], params[1], null, params[2], null);                }                break;            case 4:                if (yav.threeParamRule(params[1]) && (params[3]=='pre-condition' || params[3]=='post-condition' || params[3]=='andor-operator')) {                    retval = new yav.rule(params[0], params[1], params[2], 'foo', params[3]);                } else {                    retval = new yav.rule(params[0], params[1], params[2], params[3], null);                }                break;            default:                yav.debug('DEBUG: wrong definition of rule');        }    }    return retval;},threeParamRule: function (ruleName) {    return (ruleName=='equal' || ruleName=='notequal' || ruleName=='minlength' || ruleName=='maxlength' || ruleName=='date_lt' || ruleName=='date_le' || ruleName=='implies' || ruleName=='regexp' || ruleName=='numrange' || ruleName=='keypress' || ruleName=='and' || ruleName=='or' || ruleName=='custom' || ruleName=='mask')        ? true        : false;},highlight: function (el, clazz) {	if (yav.rulesEvt.length>0 && clazz==yav_config.inputclasserror) {		return;	}    if (!yav.isFocusSet && clazz==yav_config.inputclasserror) {        if (  (!el.type) && (el.length>0) && (el.item(0).type=='radio') ) {            el.item(0).focus();        } else {            el.focus();           }        yav.isFocusSet = true;    }    if (el!=yav.undef && yav_config.inputhighlight) {        if ( yav_config.multipleclassname ) {            yav.highlightMultipleClassName(el, clazz);        } else {            el.className = clazz;        }            }},highlightMultipleClassName: function (el, clazz) {    re = new RegExp("(^|\\s)("+yav_config.inputclassnormal+"|"+yav_config.inputclasserror+")($|\\s)");    el.className = yav.strTrim (    ( (typeof el.className != "undefined")        ? el.className.replace(re, "")        : ""    ) + " " + clazz );},getDefaultMessage: function (el, nameDisplayed, ruleName, comparisonValue) {    if (nameDisplayed.length == 0) {        nameDisplayed = el;    }    var msg = yav_config.DEFAULT_MSG;    if (ruleName=='required') {        msg = yav_config.REQUIRED_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='minlength') {        msg = yav_config.MINLENGTH_MSG.replace('{1}', nameDisplayed).replace('{2}', comparisonValue);    } else if (ruleName=='maxlength') {        msg = yav_config.MAXLENGTH_MSG.replace('{1}', nameDisplayed).replace('{2}', comparisonValue);    } else if (ruleName=='numrange') {        msg = yav_config.NUMRANGE_MSG.replace('{1}', nameDisplayed).replace('{2}', comparisonValue);    } else if (ruleName=='date') {        msg = yav_config.DATE_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='numeric') {        msg = yav_config.NUMERIC_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='integer') {        msg = yav_config.INTEGER_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='double') {        msg = yav_config.DOUBLE_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='equal') {        msg = yav_config.EQUAL_MSG.replace('{1}', nameDisplayed).replace('{2}', yav.getComparisonDisplayed(comparisonValue));    } else if (ruleName=='notequal') {        msg = yav_config.NOTEQUAL_MSG.replace('{1}', nameDisplayed).replace('{2}', yav.getComparisonDisplayed(comparisonValue));    } else if (ruleName=='alphabetic') {        msg = yav_config.ALPHABETIC_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='alphanumeric') {        msg = yav_config.ALPHANUMERIC_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='alnumhyphen') {        msg = yav_config.ALNUMHYPHEN_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='alnumhyphenat') {        msg = yav_config.ALNUMHYPHENAT_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='alphaspace') {        msg = yav_config.ALPHASPACE_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='email') {        msg = yav_config.EMAIL_MSG.replace('{1}', nameDisplayed);    } else if (ruleName=='regexp') {        msg = yav_config.REGEXP_MSG.replace('{1}', nameDisplayed).replace('{2}', comparisonValue);    } else if (ruleName=='date_lt') {        msg = yav_config.DATE_LT_MSG.replace('{1}', nameDisplayed).replace('{2}', yav.getComparisonDisplayed(comparisonValue));    } else if (ruleName=='date_le') {        msg = yav_config.DATE_LE_MSG.replace('{1}', nameDisplayed).replace('{2}', yav.getComparisonDisplayed(comparisonValue));    } else if (ruleName=='empty') {        msg = yav_config.EMPTY_MSG.replace('{1}', nameDisplayed);    }    return msg;},getComparisonDisplayed: function (comparisonValue) {    comparisonDisplayed = comparisonValue;    if (comparisonValue.substring(0, 1)=='$') {        comparisonValue = comparisonValue.substring(1, comparisonValue.length);        tmp = comparisonValue.split(':');        if (tmp.length == 2) {            comparisonDisplayed = tmp[1];        } else {            comparisonDisplayed = comparisonValue;        }    }    return comparisonDisplayed;},isKeyAllowed: function (keyCode, charsAllowed) {    retval = false;    var aCharCode;    if (keyCode==8 || keyCode==0) {        retval = true;    } else {        for(var i=0; i<charsAllowed.length; i++) {            aCharCode = charsAllowed.charCodeAt(i);            if (aCharCode==keyCode) {                retval = true;                break;            }        }    }    return retval;},getField: function (formObj, fieldName){	var retval = null;	if (formObj.elements[fieldName]){		retval = formObj.elements[fieldName];	}else if (yav.get(fieldName)){		retval = yav.get(fieldName);	}	return retval;},get: function(id) {	return document.getElementById(id);},unformatNumber: function (viewValue){    var retval = viewValue.replace(yav_config.THOUSAND_SEP, "");     retval = retval.replace(yav_config.DECIMAL_SEP, ".");    return retval;},deleteInline: function (msg) {    if (msg.indexOf('__inline__')==-1) {        return msg;    } else {        return msg.substring(0, msg.indexOf('__inline__'));    }},addEvent: function(elm, evType, fn) {    if (elm.addEventListener) {        elm.addEventListener(evType, fn, false);        return true;    }    else if (elm.attachEvent) {		// The main drawback of the Microsoft event registration model is that 		// attachEvent() creates a reference to the function and does not copy it.		// so these lines (commented out) don't work in some circumstances.        //var r = elm.attachEvent('on'+evType, fn);        //return r;		elm['on' + evType] = fn;    }    else {        elm['on' + evType] = fn;	}},call: function(elmName, evType, fn) {	var elm = document.forms[yav.formEvt].elements[elmName];	addEvent(elm, evType, fn);}}//end namespace 'yav'Function.prototype.bindAsEventListener = function(object) {  var __method = this;  return function(event) {    return __method.call(object, event || window.event);  }}
