        /**************** To use, follow these instructions ******************
            You may set up a settings hidden field with general settings, like:
                <input type="hidden" id="settings" divMSG="errMsgs" placement="right"/>
                
                divMsgs (optional) = the div that all error messages are placed in - in addition the the errors on each box
                placement = where the error boxes are placed.  Proper values are: right, bottom
                
            Each input field on the form should have the following attributes set:
                frmtype = the name of the "form" to be validated.  That is, a grouping of field that you wish to be validated
                errmsg = the error message to be displayed
                validate = the validation types.  Proper values are: required, email, numeric
                errWidth (optional)= if the error box is displayed on the right, then you may optionally set the width of the box.  Default width is 150px
                                        this setting is ignored if the error box is on the bottom 
                                        
                example field:
                    <input id="Text2" type="text" value="" frmtype="default" errmsg="What ya eye cula" errWidth="200px" validate="email" />
                    
            Validation needs to be triggered by calling the function "validateForm('default')", with the form to validate passed as a parameter                   
        */
        
		var tmp, settings, divErrMsgs, tmp2;
		var browser="ie", placement ="right";
		var ua = window.navigator.userAgent;
		var msie = ua.indexOf ( "MSIE " );

        InitializeErrorHandling();
            
        function InitializeErrorHandling()
        {
			settings = document.getElementById("settings");
	        
			if (settings != null) {
				tmp = settings.getAttribute("placement");
				tmp2 = settings.getAttribute("divMSG");
				if (tmp2 != null)
					divErrMsgs = document.getElementById(tmp2);
	            
				if (tmp.length > 0)
					placement = tmp;
			}
	        
		  //  alert (ua);
			if (msie > 0)
				browser = "ie";
			else if(ua.indexOf ( "Chrome" )>0)
				browser = "ch";
			else if(ua.indexOf ( "Firefox" )>0)
				browser = "ff";
        }
        
        function validateForm(formToValidate) { 
           for (k =0; k < document.forms.length ; k ++){
           /// alert (document.forms[k]);
              return validateFormByForm(formToValidate, document.forms[k]);
             } 
          //  return    validateFormByForm(formToValidate, document.forms[0]); 
            
        }
            
        function validateFormByForm(formToValidate, theForm) 
        {
       if(! theForm)
            return true;
             
            var  i, typ, newDiv, errMsg, validateType;//, theForm = document.forms[x];
            var rtn = true;
           resetForm(formToValidate);
           if (divErrMsgs == null)
           InitializeErrorHandling();
            divErrMsgs.innerHTML = "";
            
            for(i=0; i<theForm.elements.length; i++){
                typ = theForm.elements[i].type;
                curfield = theForm.elements[i];
                if (curfield.getAttribute('frmtype') == formToValidate) {  
                    //if (curfield.value.length == 0) { 
                  //      alert(curfield.getAttribute('parentID'));
                    var flag = true;
                    if( curfield.getAttribute('parentID')!= null){ 
                        if( document.getElementById (curfield.getAttribute('parentID')).style.display=="none"){
                        flag = false ; 
                           /* validateType = curfield.getAttribute('validate');
                            var type =validateType.split(";");
                            
                            for(k =0; k <type.length; k ++){
                            //alert(	[0] );validateType
	                             //   alert (curfield.value);
	                            if (!isValid(curfield,type[k] )) {
	                                errMsg = curfield.getAttribute('errmsg');
        	                        
	                                newDiv = createErrorDiv(curfield, formToValidate);
	                                ShowDIV(newDiv, curfield,'&nbsp;'+ errMsg.split(";")[k] );
	                                addToErrDIV(divErrMsgs, curfield.id, '&nbsp;'+errMsg.split(";")[k] );
	                                rtn = false;
        	                        
	                            }else if(type[k] =="phone"  ){
	                    	        FormatPhone(curfield);
	                            }
                           }*/
                      }
                    }
                    
                    if(flag){ 
                       var validateType = curfield.getAttribute('validate');
                        
                        
                        var vdisabled = curfield.getAttribute('vdisabled');
                        if(vdisabled){
                            var disabled =vdisabled.split(";");
                        
                        }
                          flag = true;
                        var type =validateType.split(";");
                        for(k =0; k <type.length; k ++){
                        //alert(	[0] );validateType
	                         //   alert (curfield.value);
	                         
                            if(vdisabled){
                                if(disabled.length > k){
                                    if(disabled[k]=="true")
                                        flag = false;
                                    
                                }
                            }
                            if(flag){
	                            if (!isValid(curfield,type[k] )) {
	                                errMsg = curfield.getAttribute('errmsg');
        	                        
	                                newDiv = createErrorDiv(curfield, formToValidate);
	                                ShowDIV(newDiv, curfield,'&nbsp;'+ errMsg.split(";")[k] );
	                                addToErrDIV(divErrMsgs, curfield.id, '&nbsp;'+errMsg.split(";")[k] );
	                                rtn = false;
        	                        
	                            }else if(type[k] =="phone"  ){
	                    	        FormatPhone(curfield);
	                            }
	                        }
	                        
                        } 
                    }
                    //else
                        //HideDIV(curfield , "Err" + curfield.id);
                }
            }
            
            divErrMsgs.innerHTML += "<br><br>";
            return rtn; 
        }
        
        function addToErrDIV(divErrMsgs, field, errMSG) {
            //divErrMsgs.innerHTML += '<br>' + field + ': '+ errMSG;
            
            divErrMsgs.innerHTML += '<li>' +   errMSG+'</li>';
        }
        
        function isValid(obj, validateType) {
            var rtn = true;
            var val = obj.value;
           var disabled= obj.getAttribute('disabled');
           if(disabled){
            if(disabled == "true")
                return rtn
           }
            if(obj.style.display!="none"){
                if (validateType == "required"&& val.length == 0 ){ 
                    
                        rtn = false;
                        var relatedControl = obj.getAttribute('relatedControl');
                        if(relatedControl){
                            var tmpID =relatedControl.split(";");
                            for(j =0; j <tmpID.length; j ++){
                                if(document.getElementById (tmpID[j]) ){
                                    if(document.getElementById (tmpID[j]).value.length >0)
                                         rtn = true;
                                }
                            }
                        }  
                    
                    
               } else if (validateType == "email" && !isValidEmail(val))
                    rtn = false;
                else if (validateType == "numeric" && !isValidNumber(val)) 
                    rtn = false;
                else if (validateType == "phone" && !isValidPhone(val)) 
                    rtn = false;
                else if (validateType == "money" && !isValidMoney(val)) 
                    rtn = false;
                else if (validateType == "custom"){ 
                    rtn = eval (obj.getAttribute('custom_function') );
                } else if(validateType == "regexp"){
                       if(obj.value !=''){        
                            var pattern = obj.getAttribute('pattern')      ;     
                            
                        var regex = new RegExp( pattern ); 
                            if(regex.exec(obj.value) == null)     
                            rtn = true  ;//pattern.exec(obj.value  );
                            else
                            rtn = false  ; 
                            //alert (regex.exec(obj.value));
                        }
                }else if (validateType == "message"){  
                    if(obj.getAttribute('valid'))
                    {
                        if(obj.getAttribute('valid')=="true")
                            rtn = true;
                        else
                            rtn = false;
                            
                    } 
                } 

            } 
                return rtn;
        }
        AddValidationEvent();
        
        function isValidMoney(val){
            var rtn = true;
            if(val!=''){   
           // alert (val);
           
        	  // val = val.replace ('-',''); 
                var regex = new RegExp( "^\\$?([1-9]{1}[0-9]{0,2}(\\,[0-9]{3})*(\\.[0-9]{0,2})?|[1-9]{1}[0-9]{0,}(\\.[0-9]{0,2})?|0(\\.[0-9]{0,2})?|(\\.[0-9]{1,2})?)$" ); 
                if(regex.exec(val) == null) 
                rtn = false;//pattern.exec(obj.value  );
                else
                rtn = true   ; 
                //alert (regex.exec(obj.value));
            }
            return rtn;
        }
        function AddValidationEvent(){ 
           for (k =0; k <document.forms.length ; k ++){
              AddValidationEventByForm(  document.forms[k]);
            } 
          // // //AddValidationEventByForm(  document.forms[0]);
      }
       function AddValidationEventByForm(theForm){ 
            for(i=0; i<theForm.elements.length; i++)
            {
                var obj = theForm.elements[i];
                var validator = obj.getAttribute('validate');
                if(validator ) {
                   // if(browser =="ff" || browser=="ch"){
                    //obj.attributes ("onchange")= "javascript:ValidateMe(this)";
                     //  obj.setAttribute("onchange","javascript:ValidateMe(this)");
                   // }else{
                  // obj.attributes.add ("onchange","javascript:");
                  //alert(obj.type);
                  if( !obj.getAttribute('NoChangeEvent'))
                  obj.onchange =OnChangeEvent ;
                  //else
                  //obj.onfocus= OnChangeEvent ;
                   // = test();
                //   document.attributes.item
                   // }//ValidateMe(obj)
                }

            }

        }
         function OnChangeEvent(event){
         	var obj;
         	//alert(event);
         	if(browser =="ff" || browser=="ch"){ 
         		obj = event.target;
         	} else {
         		obj = window.event.srcElement;
         	}
         	var validateType = obj.getAttribute('validate');
         	if(validateType.indexOf( "message") >=0){
         	    obj.setAttribute('validate','true');
         	  //  alert ();
         	}
         	
            ValidateMe(obj);
         }
        function GetPlacement(obj){
            var p = obj.getAttribute("placement");
            if(p)
                return p;
            else
                return placement;
        }
        function ValidateMe(obj){ 
        	
		validateType = obj.getAttribute('validate');
		var type =validateType.split(";");
		 
		 
		 if(obj.className=="txtErr"){
		 
                if(GetPlacement(obj) =="popup"){ 
                        obj.title="";
                    }
		        obj.className ="";
               var errorObj = document.getElementById("Err"+obj.id);
           
               if(errorObj) {
                	if(browser=="ie"){
                    		errorObj.removeNode(true);
                    	}
                    	
                    	if(browser=="ff"||browser=="ch")
                    	{ 
				            errorObj.parentNode.removeChild(errorObj);
                    	} 
                }
        }
                
		for(k =0; k != type.length; k ++){
			if(type[k] !="required"){
			if (!isValid(obj,type[k] )) {
	                        errMsg = obj.getAttribute('errmsg');
	                        
	                        newDiv = createErrorDiv(obj, "default");
	                        ShowDIV(newDiv, obj, '&nbsp;' + errMsg.split(";")[k] );
	                        addToErrDIV(divErrMsgs, obj.id, '&nbsp;' +errMsg.split(";")[k] );
	                        rtn = false;
	                        
	                    }else if(type[k] =="phone"  ){
	                    	FormatPhone(obj);
	                    }	                    
			}
		}
        }
        
        function FormatPhone(obj){
        	
        	if(isValidPhone(obj.value)){
 		var phone = obj.value; 
 		    phone = phone.replace(".", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace("-", "");
		    phone = phone.replace("(", "");
		    phone = phone.replace(")", "");
		    var tmpArray =phone.split("");
		    if( phone.length == 10  ){
		    	
			obj.value ="("+tmpArray[0]+tmpArray[1]+tmpArray[2]+")"+tmpArray[3]+tmpArray[4]+tmpArray[5]+"-"+tmpArray[6]+tmpArray[7]+tmpArray[8]+tmpArray[9];
		  //  alert(curfield.value );
			}
	
		    if( phone.length == 11  ){
			obj.value ="("+tmpArray[1]+tmpArray[2]+tmpArray[3]+")"+tmpArray[4]+tmpArray[5]+tmpArray[6]+"-"+tmpArray[7]+tmpArray[8]+tmpArray[9]+tmpArray[10];
		
		
			}
		}
 		
      	}
        
        function isValidPhone(val) {
        	if(val.length ==0)
        	return true; 
        	 var phone = val.replace(".", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace(" ", "");
		    phone = phone.replace("-", "");
		    phone = phone.replace("(", "");
		    phone = phone.replace(")", "");
		   // alert(phone);
		   
		    if((phone.length == 10 ||  phone.length == 11 )){
		    	return isValidNumber(phone); 
		    }else{
		    return false;
		    } 
        }

        function isValidEmail(val) {
        if(val.length==0)
        	return true;
            var pat, rtn = true;
            pat = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
//            pat = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9])+(\.[a-zA-Z0-9_-]+)+$/;
            if( !pat.test( val ) )
                rtn = false;
            return rtn;
        }
        
        function isValidNumber(val) {
        if(val.length==0)
        	return true;
        	 
            var pat, rtn = true;
            pat = /^([\d\.])+$/;
            if( !pat.test( val ) )
                rtn = false;
            return rtn;
        }
        
        function createErrorDiv(curfield, formToValidate) {
            var newo = document.createElement('div');
            var newDivName = 'Err' + curfield.id;

            newo.id = newDivName;
            newo.name = newDivName;
            newo.setAttribute('frmtype', formToValidate);
            
            if(curfield.getAttribute('parentID'))
            {
            document.getElementById (curfield.getAttribute('parentID')).style.position="relative";
                document.getElementById (curfield.getAttribute('parentID')).appendChild(newo);  
                    //document.body.appendChild(newo);  
            
            }else{document.body.appendChild(newo); }
           //  document.body.appendChild(newo); 
            return newo;
        }
        
        function ShowDIV(objdiv, objinput, errMsg) {
            var left, top, pos = getElementPosition(objinput);
             
            setPos(objdiv, objinput, pos, GetPlacement(objinput)); 
            if(objinput.getAttribute('ErrorCSS'))
            objdiv.className = objinput.getAttribute('ErrorCSS');
            else
            objdiv.className = "divErr";
            objinput.className = "txtErr";
            objdiv.innerHTML = errMsg;
             if(GetPlacement(objinput) =="popup"){
             objinput.title = errMsg;
             }
        }
         var PreMessageObj=null;
        function ShowErrorDIV(event){
         	var obj; 
         	if(browser =="ff" || browser=="ch"){ 
         		obj = event.target;
         	} else {
         		obj = window.event.srcElement;
         	}
             
             var errorObj = document.getElementById( "Err"+obj.id); 
             if(errorObj){              
                
                errorObj.style.display="block";
             } 
         }
        function HidenErrorDIV(event){
            var obj; 

            if(browser =="ff" || browser=="ch"){ 
                obj = event.target;
            } else {
                obj = window.event.srcElement;
            }
            
            obj.style.display="none";  
            var pObj = document.getElementById( obj.id.substring(  3));
           pObj.style.display="block";  
            if(pObj){  
            try{
                pObj.focus();
            }
           catch (e){}
            
            }
        //alert(errorObj.id);
        }
         
         
        function HidenErrorDIV2(event){
            var obj; 

            if(browser =="ff" || browser=="ch"){ 
                obj = event.target;
            } else {
                obj = window.event.srcElement;
            }
             
            var pObj = document.getElementById( "Err"+obj.id );
            if(pObj){  
                pObj.style.display="none";  
            }
        //alert(errorObj.id);
        }
         
         
         
        function setPos(objdiv, objinput, pos, p) {
        
            var offset=0, clientHeight = objinput.clientHeight;
              if(p =="above"){
                //alert(objinput.onchange);
                objdiv.style.left =  pos.left  + 'px'; 
                objdiv.style.top =   '0px'; 
                objdiv.style.width =  objinput.getAttribute('errWidth');  
                objdiv.style.height =  20+ 'px';
              }else if(p =="inside"){
            
                objdiv.style.left =  pos.left   + 'px';  
                objdiv.style.top =  pos.top  + 'px'; 
               if( objinput.getAttribute('errWidth'))
                    objdiv.style.width =  objinput.getAttribute('errWidth');  
               else  
                    objdiv.style.width =parseInt ( objinput.style.width )   +'px' ;
                     
                    
               // if( objinput.clientHeight >2){ 
                if(objinput.type == "select-one"){ 
                 if( objinput.getAttribute('errHeight'))
                    objdiv.style.height =  objinput.getAttribute('errHeight');  
                    else
                    objdiv.style.height = '20px';// objinput.clientHeight -1+ 'px';
                }else               if( objinput.getAttribute('errHeight'))
                    objdiv.style.height =  objinput.getAttribute('errHeight');  
                else{ 
                    if( objinput.clientHeight >2)
                        objdiv.style.height =  objinput.clientHeight  + 'px';
                    else
                        objdiv.style.height =   '21px';
                }
              /*  objdiv.style.left =  pos.left +1 + 'px'; 
                 if(objinput.type == "select-one"){
                     objdiv.style.top =  pos.top + 1+ 'px'; 
                }else{
                     objdiv.style.top =  pos.top +1+ 'px'; 
                }
                
               if( objinput.getAttribute('errWidth'))
                    objdiv.style.width =  objinput.getAttribute('errWidth');  
               else if(browser=="ff")
                    objdiv.style.width =parseInt ( objinput.style.width ) -3 +'px' ;
                    else
                
                    objdiv.style.width =parseInt ( objinput.style.width ) -2 +'px' ;
                    
               // if( objinput.clientHeight >2){ 
                if(objinput.type == "select-one"){ 
                    objdiv.style.height = '18px';// objinput.clientHeight -1+ 'px';
                }else{
                    if( objinput.clientHeight >2)
                        objdiv.style.height =  objinput.clientHeight -2+ 'px';
                    else
                        objdiv.style.height =   '16px';
                }
                */
                
                
                
                
              // } 
              // else
              //  objdiv.style.height =   '20px';
                objdiv.onclick = HidenErrorDIV;
                
                if( !objinput.getAttribute('NoBlurEvent')) 
                    objinput.onblur =ShowErrorDIV;
                if( !objinput.getAttribute('NoFocusEvent')) 
                    objinput.onfocus = HidenErrorDIV2;
                      
                  //  objdiv.onblur = ShowErrorDIV  ;
                    
            }else if(p =="popup"){
                objdiv.style.display="none"; 
                
            }else{
                if (browser == "ff"){
                    offset = -4;
                    clientHeight = objinput.offset+objinput.clientHeight;//+Height
                }
                else if (objinput.nodeName.toLowerCase() == "select" && browser == "ie" && p == "right")
                    offset = 10;
                else if( browser == "ch"){
            	     offset = 4;
                }
                    
                if (p == "right") {
                    objdiv.style.left = (pos.left + objinput.clientWidth + 0 + offset) + 'px'; 
                    if( browser == "ch")
                    objdiv.style.top = (pos.top + 1) + 'px';
                    else
                    objdiv.style.top = (pos.top +0) + 'px';
                    if (objinput.getAttribute('errWidth') != null)
                        objdiv.style.width = objinput.getAttribute('errWidth');
                    else
                        objdiv.style.width = '150px';
                        
                    objdiv.style.height = (objinput.offsetHeight) + 'px';
                
                }
                else { //bottom
                    objdiv.style.left = (pos.left + 1) + 'px'; // uncomment for left side --objinput.clientWidth + 5;
                    if( browser == "ch")
                    objdiv.style.top = (pos.top + clientHeight + 6 + offset) + 'px';
                    
                    else
                    objdiv.style.top = (pos.top + clientHeight + 5 + offset) + 'px';
                        
                    objdiv.style.width = objinput.offsetWidth + 'px';
                    objdiv.style.height = objinput.offsetHeight + 'px';
                }
            }
        }
        
        function HideDIV(curfield, HideControl) {
            var ctrl;
            ctrl = document.getElementById(HideControl);
            
            if (ctrl != null) {
                curfield.className = "";
                ctrl.display = "none";
                document.body.removeChild(ctrl);
           }
        }
        function resetForm(formToValidate) {
         
           for (k =0; k <document.forms.length ; k ++){
                resetFormByForm(formToValidate, document.forms[k]);
           } 
              //  resetFormByForm(formToValidate, document.forms[0]);
        }
       function  resetFormByForm(formToValidate, theForm){
        
            var i, cnt, elements, field;//, theForm = document.forms[x];
            elements = document.getElementsByTagName('*');
            
            cnt = elements.length - 1;
            for(i=cnt; i>=0; i--){
                field = elements[i];
                
                if (field.getAttribute('frmtype') == formToValidate) {
                    field.className = "";
                    if(GetPlacement(field) =="popup"){ 
                        field.title="";
                        
                    }
                }
                if (field.id.substring(0,3).toLowerCase() == "err" &&field.getAttribute('frmtype') == formToValidate) {
                	    if(browser=="ie"){
                    		field.removeNode(true);
                    	}
                    	
                    	if(browser=="ff"||browser=="ch")
                    	{ 
				            field.parentNode.removeChild(field);
                    	}
                    	
                }
            }
        }
        
        
        
        function getElementPosition(offsetTrail){
            var offsetLeft = 0;
            var offsetTop = 0;
            var curfield = offsetTrail;
            while (offsetTrail){
                offsetLeft += offsetTrail.offsetLeft;
                offsetTop += offsetTrail.offsetTop;
                offsetTrail = offsetTrail.offsetParent;
                if(offsetTrail && curfield.getAttribute('parentID'))
                {
                    if(offsetTrail.id == curfield.getAttribute('parentID'))
                    break;
                }
            }
            if (navigator.userAgent.indexOf('Mac') != -1 && typeof document.body.leftMargin != 'undefined'){
                offsetLeft += document.body.leftMargin;
                offsetTop += document.body.topMargin;
            }
            return {left:offsetLeft,top:offsetTop};
        }
        
        
        
        
        
	function  Resized(){
	    if ( typeof  MoveWindow == "function"){
	     MoveWindow(); 
	    }	    
	}