﻿this.ModeEnum=new function()
{

this.Change='change';
this.Blur='blur';

}



function HashtableForValidate()
{
    this._hash        = new Object();
    this.add        = function(key,value){
                        if(typeof(key)!="undefined"){
                                this._hash[key]=typeof(value)=="undefined"?null:value;
                                return true;
                        } else {
                            return false;
                        }
                    }
    this.remove        = function(key){delete this._hash[key];}
    this.count        = function(){var i=0;for(var k in this._hash){i++;} return i;}
    this.items        = function(key){return this._hash[key];}
    this.contains    = function(key){ return typeof(this._hash[key])!="undefined";}
    this.clear        = function(){for(var k in this._hash){delete this._hash[k];}}

}

 function ValidateConfig()
				{
					/*	Globals.  Modify these to suit your setup
					------------------------------------------- */
						
					//	Attribute used for fValidate Validator codes
					this.code = 'validators';
					
					//	Attribute used for custom error messages (override built-in error messages)
					this.emsg = 'emsg';
					
					//	Attribute used for pattern with custom validator type
					this.pattern = 'pattern';
					
					//	Change this to the classname you want for the error highlighting
					this.errorClass = 'errHilite';

					// Added by Ivan to designate a label to be an error label
					this.errorSelectorCssClass = 'error';
			
			this.tips= 'tips' ;
				}
				
		
               
	
	
				var config=new ValidateConfig();
			
				 var _keycontrol=new HashtableForValidate();
				var _result;
				var _listcontrol=new HashtableForValidate();
                function ValidateForm(formID,validateMode)
				{
				
				//this._validateresult=new HashtableForValidate();
				this._validatekeys=new Array();
				this._form=new Object();	
                 this._validatelist=new HashtableForValidate();
				_form=document.getElementById(formID);
			this._mode="";
			this._mode=arguments.length==1?"blur":validateMode;
			
				if(_form)
				{
				this.labels=_form.getElementsByTagName("Label");
				
				this.inputs=_form.getElementsByTagName("Input");
				
				this.textareas=_form.getElementsByTagName("textarea");
				
				this.selects=_form.getElementsByTagName("Select");
				this.validators=new Array();
				
				
				for(var i=0;i<inputs.length;i++)
				{
				validators.push(inputs[i]);
				}
				for(var i=0;i<textareas.length;i++) 
				{
				validators.push(textareas[i]);
				}
				for(var i=0;i<selects.length;i++)
				{
				validators.push(selects[i]);
				}
				
				var _labelfor="";
				for(var i=0;i<labels.length;i++)
				{
				_labelfor=labels[i].getAttributeNode("for").value;
                
                if(_labelfor!="")
                
                for(var j=0;j<validators.length;j++)
                {
             
                  if(validators[j].name==_labelfor)
			{
			_validatelist.add(validators[j].name,labels[i]);

			
			_validatekeys.push(validators[j].name);
			
			addEvent(validators[j]);
			break;
				}
				}
				_keycontrol.add(formID,_validatekeys);
				_listcontrol.add(formID,_validatelist);
				}
			
				}
				

				function addEvent(inputObj)
				{
				if(inputObj.getAttribute(config.code))
				{
				/** 验证匹配 **/
			 if(inputObj.getAttribute(config.code).split('|')[0]=='equalto')
             this._form.elements[inputObj.getAttribute(config.code).split('|')[1]].setAttribute('equalto',inputObj);
          
				if(this._mode==ModeEnum.Change)
                 inputObj.onchange=function(){
          
                 if(validateObj(inputObj))
                  _result=true;
                  else
                  _result=false;
                 };
				else if(this._mode==ModeEnum.Blur)
				{
				
				 inputObj.onblur=function(){
                  if(validateObj(inputObj))
                  _result=true;
                  else
                  _result=false;
                 
                 };
                 }
				
				}
				/*
				Begin to validate
				*/
				function validateObj(inputObj)
				{
				
				var code=inputObj.getAttribute(config.code);
				var pattern=inputObj.getAttribute(config.pattern);
				
				if(code!=null)
				{
			
				var _type = "";
				
				/* 匹配验证类型 */
				switch (code.split('|')[0])
				{
				
				
					/* 匹配为空 */
				case 'blank':
				
				_type = "Blank";
				break;
				
				
					/* 匹配用户名 */
				case 'username':
				
				_type = "UserName";
				break;
				
					/* 匹配密码 */
				case 'password':
				_type = "PassWord";
				break;
				
				
					/* 匹配邮件 */
				case 'email':
				_type = "Email";
				break;
				
					/* 匹配电话号码（含手机） */
				case 'phone':
				_type = "Phone";
				break;
				
					/* 匹配身份证 */
				case 'idcard':
				_type = "IdCard";
				break;
				
					/* 匹配数字 */
				case 'number':
				_type = "Integer";
				
				break;
				
					/* 匹配日期 */
				case 'date':
				_type = "Date";
				break;
                
                case 'length':
                _type='Length';
                break;
                
				default :
				break;
				
				}
				if(code.split('|').length==1)
				{
				if(_type!="")
				{
				
				if(_type=="Blank")
				{
	          
				if(inputObj.tagName=="SELECT"&&inputObj.value=="0")
				{
				return setError(inputObj);
				}
				if(checkBlank(inputObj.value))//判断是否为空
					return setCorret(inputObj);
				else
					return setError(inputObj);
				}
				else if(_type=="PassWord")
				{
				
				if(checkPassword(inputObj.value))//判断是否为password
				return setCorret(inputObj);
				else
				return setError(inputObj);
				}
				else if(_type=="UserName")
				{
				if(ValidatesHS.items(_type).test(inputObj.value)&&getLen(inputObj.value)<=20&&getLen(inputObj.value)>=3)
				return setCorret(inputObj);
				else
				return setError(inputObj);
				}
				else
				{
				if(ValidatesHS.items(_type).test(inputObj.value))
				return setCorret(inputObj);
				else
				return setError(inputObj);
				
				}

				}
				
				}
				else if(code.split('|').length==2)
				{
				if(code.split('|')[0]=='equalto')//验证是否相同
				{if(this._form.elements[code.split('|')[1]])		
				if(inputObj.value==this._form.elements[code.split('|')[1]].value)
				return setCorret(inputObj);
				else
				return setError(inputObj);
				}
				
				else if(code.split('|')[1]=='bok')//可为空
				{
				if(ValidatesHS.items(_type).test(inputObj.value))
				return setCorret(inputObj);
				else if(inputObj.value!="")
				return setError(inputObj);
				else  if(inputObj.value=="")
				{
				var _newlist=_listcontrol.items(formID);
				var tempobj=_newlist.items(inputObj.name);
				tempobj.className="tip";
				return true;
				}
				}
				
				}
				
				else if(code.split('|').length==3)
				{
				
				if(_type=="Length")//验证长度
				var min=parseInt(code.split('|')[1]);
				var max=parseInt(code.split('|')[2]);
				if(checkLength(min,max,inputObj.value))
				return setCorret(inputObj);
				else
				return setError(inputObj);
				}
				
				}
				else if(pattern!=null)//自定义正则
				{
								
				var my_regex=new RegExp(pattern); 

				if(my_regex.test(inputObj.value))
					return setCorret(inputObj);
				else
				return setError(inputObj);
			

				}
				
				if(inputObj.getAttribute('equalto')!=null&&inputObj.getAttribute('equalto').value!="")//验证是否相同
			    {  if(inputObj.getAttribute('equalto').value==inputObj.value)   
			    return setCorret(inputObj.getAttribute('equalto'));
				else
				return setError(inputObj.getAttribute('equalto'));
			    }
			   
				}
				
		
				}
				
				
				function checkBlank(teststr)
				{
				if(teststr.length==0||teststr=="")
				return false;
				else
				return true;
				
				}

			function checkPassword(teststr)
				{
				
				return checkLength(6,20,teststr)
				}
				
				
				function checkLength(min,max,teststr)//验证长度
				{
				if(teststr.length>=min&&teststr.length<=max)
				return true;
				else
				return false;
			    }
				
				
	
				function setCorret(inputObj)
				{
			    var _newlist=_listcontrol.items(formID);
				var tempobj=_newlist.items(inputObj.name);
					tempobj.className="correct";
				tempobj.innerHTML="正确";
				return true;
			
				}
				
				function setError(inputObj)
				{
			var _newlist=_listcontrol.items(formID);
				var tempobj=_newlist.items(inputObj.name);
				tempobj.className="error";
				tempobj.innerHTML=inputObj.getAttribute(config.emsg);
				return false;
				}
				
				}
				
				
				function   getLen(str) {
   var totallength=0;   
   for (var i=0;i<str.length;i++)
   {
    var intCode=str.charCodeAt(i);    
    if (intCode>=0&&intCode<=128) {
     totallength=totallength+1; //非中文单个字符长度加 1
    }
    else {
     totallength=totallength+2; //中文字符长度则加 2
    }
   } //end for   
   return totallength;}
				
				
				
				
				//验证Form
				function  testForm(formID)
			{
			var result=true;
			
			this._form=document.getElementById(formID);
			if(this._form)
			{
                this._key=_keycontrol.items(formID);
                for(var i=0;i<this._key.length;i++)
                {
                if(this._form.elements[this._key[i]].onchange)
                this._form.elements[this._key[i]].fireEvent('onchange')
                else if(this._form.elements[this._key[i]].onblur)
                this._form.elements[this._key[i]].fireEvent('onblur')
             if(!_result)
             {
             if(result)
             {
             if(this._form.elements[this._key[i]].style.display!='none')
             this._form.elements[this._key[i]].focus();
             }
             result=false;
             }
                }
                }
				return result;
				}


