    
    function initForm(){    
        
        var e = document.getElementsByTagName("INPUT");
        for (var i=0;i<e.length;i++){
            if (e[i].type == "text" || e[i].type == "password"){
                e[i].onfocus = getFocus;

                var fe = getFormEl(e[i]);
                if (isObject(fe) && fe.blurFun)
                    e[i].onblur = fe.blurFun;   
                else
                    e[i].onblur = lostFocus
                
                showInfo(e[i], -1);
            }
        }
        
        var s = document.getElementsByTagName("SELECT");
        for (var i=0;i<s.length;i++){
            s[i].onfocus = getFocus;
            s[i].onblur  = lostFocus; 
            
            var fe = getFormEl(s[i]);
            if (isObject(fe) && fe.blurFun)
                 s[i].onblur = fe.blurFun;   
            else
                 s[i].onblur = lostFocus
                     
            showInfo(s[i], -1);     
        }
        
    }
    
    function FormEl(formId, infoId, infos, blurFun){
        this.id = formId;
        this.infoId = infoId;
        this.infos = infos;
        this.blurFun = blurFun;
    }
    
    function getFormEl(obj){
        if(obj.id){
            return eval(obj.id);
         }
         
         return ;
    }
    
    function getInfobox(obj){
        
        if(obj.id){
            
            var e = eval(obj.id);
            
            if (!e.infos || e.infos == "")
                return ;
                
            if(e.infoId && document.getElementById(e.infoId)) 
                return document.getElementById(e.infoId);
        }
        
        return;
    }
    
    function resetInfoBox(obj){
        getInfobox(obj).className = hintClass;
        showInfo(obj, -1);
    }
    function successInfoBox(obj){
        getInfobox(obj).className = successClass;
        showInfo(obj,3);
    }
    
    function getFocus(evnt){
        
        var obj;
        if (browseris.ie)
            obj = event.srcElement;
        else
            obj = evnt.target;
          
        showInfo(obj, 0);
    }
    
    function lostFocus(evnt){
        
        var obj;
        if (browseris.ie)
            obj = event.srcElement;
        else{
            obj = evnt.target;
        }
        
        showInfo(obj, -1);
    }
    
    function showInfo(obj, code){
        var el = getInfobox(obj);
        if (!isObject(el))
            return;
            
        if (el.className != errorClass){
            var str = "";
            
	        if (code == 0){
	            el.className = hightLightClass;
                str = hintInfo + getErrorMsg(obj, code);
            }
	        
            if (code == -1){
	            el.className = hintClass;
                code = 0;
                str = hintInfo + getErrorMsg(obj, code);
            }
	        
            if (code >0 && code <3){
	            el.className = errorClass;
                str = getErrorMsg(obj, code)
            }
           if(code == 3){
              el.className = successClass;
              str = successInfo;
           }  
                
            el.innerHTML = str;
        }
    }
    
    function getErrorMsg(obj,errorCode){
	    if(obj.id){
	        if(eval(obj.id).infos[errorCode]) return eval(obj.id).infos[errorCode];
	    }
	    return;
	}
    
    function showErrorMsg(obj, msg){
        var el = getInfobox(obj);
            el.className = errorClass;
            el.innerHTML = msg;
           	
        //return false;
    }
   
    function showInvlidormatErrorInfo(obj, msgId){
        showErrorMsg(obj, invalidFormatErrorInfo + getErrorMsg(obj, msgId));
   }
    
    function validateRequiredObj(obj, requireErrorInfo){
        if (!isObject(obj))
            return;
        
        if (obj.value == ""){
            showErrorMsg(obj, requiredErrorInfo + getErrorMsg(obj, 0));
                    
            return false;
       }
            
       return true;
   }
   
   
   function validateUserName(obj)
   {
    
        var flag = true;
        if(!validateRequiredObj(obj))
        {
            flag = false;
        }
        else if (obj.value.length < 4 || obj.value.length > 20)
        {
            showInvlidormatErrorInfo(obj, 2);
            flag = false;
        }
        else 
        {
            var reg = /^[a-z][a-z0-9_]{3,19}/;
            var username = obj.value.toLowerCase();
           
            if (!reg.test(username))
            {
                showInvlidormatErrorInfo(obj, 2);
                flag = false;
            } 
        }
        
        return flag;
   }
   
   function validateNickName(obj)
   {
        var flag = true;
        if(!validateRequiredObj(obj)){
            flag = false;
        }
        else 
        {
            var flag = true;
            var reg = /^[a-zA-Z0-9\u0391-\uFFE5]{1,}/;
            var nickname = obj.value.toLowerCase();
            
            if (obj.value.length < 0 || obj.value.length > 20)
                 flag = false;
            else
            { 
                if (!reg.test(nickname))
                {
                    showInvlidormatErrorInfo(obj, 1);
                    flag = false;
                }
            } 
            
            if (!flag)
                showInvlidormatErrorInfo(obj, 1);
        }
        
        if (flag)
           resetInfoBox(obj);
            
        return flag;
   }
       
   function validatePassword(obj, strengthFlag){
        var flag = true;
        if(!validateRequiredObj(obj)){
            flag = false;
        }
        else 
        {
            var length = obj.value.length;
            var flag = true;
            var reg = /[^\s]/;
            if (length < 6 || length > 30)
                flag = false;
                
            for (var i=0; i<length; i++){
                if (!reg.test(obj.value.charAt(i))){
                    flag = false;
                    break;
                }
            }
            
            if (!flag)
                showInvlidormatErrorInfo(obj, 1);
        }
        
        if (flag)
           resetInfoBox(obj);
            
        return flag;
   }
   
   function validatePasswordConfirm(pwd, confirmPwd){
   
        var flag = true;
        if(!validateRequiredObj(confirmPwd)){
            flag = false;
        }else if (confirmPwd.value != pwd.value){
            showInvlidormatErrorInfo(confirmPwd, 1);
            flag = false;
        }
        
        if (flag)
           resetInfoBox(confirmPwd);
           //showInfo(confirmPwd,3) 
            
        return flag;
   }
   
   function validateHintQuestion(question){
        var flag = true;
        if(!validateRequiredObj(question)){
            flag = false;
        }
        
        if (flag)
            resetInfoBox(question);
            
        return flag;
   }
   
   function validateTown(question){
        var flag = true;
        if(!validateRequiredObj(question)){
            flag = false;
        }
        
        if (flag)
            resetInfoBox(question);
            
        return flag;
   }
   
   function validateHintAnswer(answer){
        var flag = true;
        if (!validateRequiredObj(answer)){
            flag = false;
        }else if (answer.value.length < 1){
            showInvlidormatErrorInfo(answer, 0);
            flag = false;
        }
        
        if (flag)
            resetInfoBox(answer);
            
        return flag;
   }
   
   function validateIDCardType(obj){
        var flag = true;
        if(!validateRequiredObj(obj)){
            flag = false;
        }
        
        if (flag)
            resetInfoBox(obj);
            
        return flag;
   }
   
   function validateIDCardNumber(obj, type){
        var flag = true;
        
        if (!validateRequiredObj(obj)){
            flag = false;
        }else {
            if (type.value == "ID"){
                if (obj.value.length != 15 && obj.value.length != 18){
                    showInvlidormatErrorInfo(obj, 1);
                    flag = false;
                }
            }else if (obj.value.length < 8){
	            showInvlidormatErrorInfo(obj, 2);
	            flag = false;
	        }
        }
        
        if (flag)
            resetInfoBox(obj);
            
        return flag;
   }
   
   function validateUpdateSecure(obj){
        var flag = validateRequiredObj(obj);
        if (flag)
            resetInfoBox(obj);
            
        return flag;
   }
   
   function validateEmail(obj)
   {
        var flag = true;
        if(!validateRequiredObj(obj)){
            flag = false;
        }
        else 
        {
            var flag = true;
            var reg = /^[a-zA-Z0-9]{1,}@[a-zA-Z0-9]{1,}(\.[a-zA-Z0-9]{2,}){0,}\.[a-zA-Z]{2,}$/;
            var email = obj.value.toLowerCase();
            
            if (obj.value.length < 4 || obj.value.length > 100)
                 flag = false;
            else
            { 
                if (!reg.test(email))
                {
                    showInvlidormatErrorInfo(obj, 1);
                    flag = false;
                }
            } 
            
            if (!flag)
                showInvlidormatErrorInfo(obj, 1);
        }
        
        if (flag)
           resetInfoBox(obj);
            
        return flag;
   }
   
   /*   
   function validateEmail(emailStr){
        if (emailStr.length == 0) {
            return true;
        }
        
        var emailPat=/^(.+)@(.+)$/;
        var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
        var validChars="\[^\\s" + specialChars + "\]";
        var quotedUser="(\"[^\"]*\")";
        var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
        var atom=validChars + '+';
        var word="(" + atom + "|" + quotedUser + ")";
        var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
        var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
        var matchArray=emailStr.match(emailPat);
        if (matchArray == null) {
            return false;
        }
        
        var user=matchArray[1];
        var domain=matchArray[2];
        if (user.match(userPat) == null) {
             return false;
        }
               
        var IPArray = domain.match(ipDomainPat);
        if (IPArray != null) {
           for (var i = 1; i <= 4; i++) {
                if (IPArray[i] > 255) {
                         return false;
                }
           }
           return true;
        }
        
        var domainArray=domain.match(domainPat);
        if (domainArray == null) {
             return false;
        }
        
        var atomPat=new RegExp(atom,"g");
        var domArr=domain.match(atomPat);
        var len=domArr.length;
        if ((domArr[domArr.length-1].length < 2) ||
            (domArr[domArr.length-1].length > 3)) {
                   return false;
         }
         
         if (len < 2) {
            return false;
         }
      
        return true;
   }
    */
