
    function getObj(name){ 
        var obj = null; 
        obj = document.all[name]; return obj;
     } 
/////////////////////////////////////////////////////////////
//                Setup Class Names
/////////////////////////////////////////////////////////////
//default classes for infobox
var infoboxOkClass= "notetrue";
var infoboxWarningClass    = "notetrue";
var infoboxErrorClass    = "noteawoke";
var infoboxHintClass    = "note";
//default classes for input field
var inputWarningClass    = "note";
var inputErrorClass= "noteawoke";
var inputOkClass= "notetrue";
var inputNormalClass    = "note";

var requireErrorInfo	= "<span class=\"R\">此项为必填项。</span><br \/>";
	

/////////////////////////////////////////////////////////////
//                Initialize Form
/////////////////////////////////////////////////////////////
function initForm(){    
    //initialize form UI and add triggers
    var infobox;
    var x = document.getElementById("register");
    if(!x) return;
    
    var y = x.getElementsByTagName("input");
    for (var i=0;i<y.length;i++){
        if(y[i].type == 'text' || y[i].type == 'password'){
            initStatus(y[i],true);
            
            setFiledWidth(y[i]);
            y[i].onfocus    = getFocus;
            y[i].onblur= lostFocus;
            //y[i].onkeyup    = showMyStatus;
        }
    }
}
function initStatus(obj,isInput){
    if(isInput){
        if(isRequired(obj)) showStatus(obj,"Warning");
        else showStatus(obj,"Normal");
    }
    
    var infobox = getInfobox(obj);
    var errorCode = getInitStatus(obj);
    
    if(infobox && infobox.innerHTML == ""){
        if(!errorCode || errorCode == 0){
            infobox.className    = infoboxHintClass;
            infobox.innerHTML    = getErrorMsg(obj,0);
        }
        if(errorCode >0){
            infobox.className    = infoboxErrorClass;
            infobox.innerHTML    = getErrorMsg(obj,errorCode);
        }
    }    
}
/////////////////////////////////////////////////////////////
//                Base Functions
/////////////////////////////////////////////////////////////
function isIE() {
    if(document.all) return true;
    return false;
}
function setFiledWidth(obj){
    obj.style.width=(19/3)*obj.size+11;
}
function formEle(required,datatype,parameter,infobox,errormsg,combine,status){
    this.r    = required;    
    this.d    = datatype;
    this.p    = parameter;
    this.i    = infobox;
    this.e    = errormsg;
    this.c = combine;
    this.s = status;
    
} 
function isRequired(obj){
    if(obj.id){
        if(eval(obj.id).r) return eval(obj.id).r;
    }
    return false;
}
function isCombine(obj){
    if(obj.id){
if(eval(obj.id).c) return eval(obj.id).c;
    }
    return false;
}
function getDatatype(obj){
    if(obj.id){
if(eval(obj.id).d) return eval(obj.id).d;
    }
    return false;
}
function getInfobox(obj){
    if(obj.id){
        if(eval(obj.id).i && document.getElementById(eval(obj.id).i)) return document.getElementById(eval(obj.id).i);
    }
    return;
}
function getErrorMsg(obj,errorCode){
    if(obj.id){
if(eval(obj.id).e[errorCode]) return eval(obj.id).e[errorCode];
    }
    return;
}
function getHintMsg(obj){
    if(obj.id){
if(eval(obj.id).e[0]) return eval(obj.id).e[0];
    }
    return;
}
function getInitStatus(obj){
    if(obj.id){
if(eval(obj.id).s || eval(obj.id).s==0 ) return eval(obj.id).s;
    }
    return;
}
function getAttrName(str){
    var s=str.split("=");
    return s[0];
}
function getAttrValue(str){
    var s=str.split("=");
    return s[1];
}
function getAttrValueByName(obj,str){
    var para;
    if(obj.id){
if(eval(obj.id).p) para=eval(obj.id).p;
else return;
    }else{
return;
    }
    var s = para.split(",");
    for(var i=0;i<s.length;i++){
if(getAttrName(s[i]) == str){
    if(getAttrValue(s[i]))
return getAttrValue(s[i]);
    else
return;
}
    }
    return;
}
function getMailServer(str){
    //be sure str is a correct email address
    str = str.trim();
    return str.substr(str.indexOf("@")+1);
}
String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

String.prototype.realLength = function()
{
    return this.replace(/[^\x00-\xff]/g,"**").length;
}
/////////////////////////////////////////////////////////////
//                UI Functions
/////////////////////////////////////////////////////////////
function getFocus(evnt)
{
    var obj;
    if (isIE()) {
        obj = event.srcElement;
    }else {
        obj = evnt.target;
    }
    showInfo(obj,0);
}

function lostFocus(evnt)
{
    var obj;
    if (isIE()) {
        obj = event.srcElement;
    }else {
        obj = evnt.target;
    }
    showInfo(obj,-1);
    
    if(obj.value == ''){
        return;
    }
    
    errorCode = validateValue(obj);
    
    if(errorCode == 0){   
        if(obj.id){
            if(obj.id == 'username'){
                checkUsername();
                return;
            }
            if(obj.id == 'email'){
                checkEmail()
                return;
            }
            document.getElementById(eval(obj.id).i).innerHTML = validatedInfo;
            document.getElementById(eval(obj.id).i).className = infoboxOkClass;
        }
    }else{
        if(obj.id){
            if(eval(obj.id).i && document.getElementById(eval(obj.id).i)) {
                if(errorCode > 0){
                    document.getElementById(eval(obj.id).i).innerHTML = (eval(obj.id).e)[errorCode];
                    document.getElementById(eval(obj.id).i).className = infoboxErrorClass;
                }else{
                    document.getElementById(eval(obj.id).i).innerHTML = (eval(obj.id).e)[0];
                    document.getElementById(eval(obj.id).i).className = infoboxHintClass;                    
                }
            }
        }
    }
}

function showInfo(obj,errorCode,forcible)
//Show Information in Infobox
//errorCode==0 for hint message
//if forcible==true, no matter what the status of infobox now, change it,
//otherwise,if the status of infobox is "Error", do not change it forever.
{
    var infobox = getInfobox(obj);
    
    if(infobox){
        if(infobox.className != infoboxErrorClass || forcible){
            if(errorCode == 0 ){
                infobox.innerHTML    = getErrorMsg(obj,errorCode);
                if(infobox.innerHTML != '&nbsp;'){
                    infobox.className = infoboxWarningClass;
                }
            }
            if(errorCode >0){
                infobox.className    = infoboxErrorClass;
                infobox.innerHTML    = getErrorMsg(obj,errorCode);
            }
            if(errorCode <0){
                infobox.className    = infoboxHintClass;
            }
        }
    }    
}

function showMyStatus(evnt){
    var obj,errorCode;
    if (isIE()) {
        obj = event.srcElement;
    }else {
        obj = evnt.target;
    }
    errorCode = validateValue(obj);
    
    if(errorCode == 0){
        showStatus(obj,"Ok");
    }
    if(errorCode >= 1){
        showStatus(obj,"Error");
    }
    if(errorCode < 0){
        showStatus(obj,"Normal");
    }
}
function showStatus(obj,stat)
//Show the status of user currently inputting field
//3 Statuses: Warning|Error|Ok
{
    switch(stat){
        case "Warning":
                obj.className = inputWarningClass;
                break;
        case "Error":
                obj.className = inputErrorClass;
                break;
        case "Ok":
                obj.className = inputOkClass;
                break;
        default:
            obj.className = inputNormalClass;
            break;
    }
}
/////////////////////////////////////////////////////////////
//                Validator Functions
/////////////////////////////////////////////////////////////
function validateValue(obj){
    //trim
    var patn = /(^\s)|(\s$)/;
    if(patn.test(obj.value))    obj.value = obj.value.trim();
    //switcher
    var errorCode = -1;
    switch(getDatatype(obj)){
        case "username":
            errorCode = validateUsername(obj);
            break;
        case "password":
            errorCode = validatePassword(obj);
            break;
        case "confirm_password":
            errorCode = validateSafePassword(obj);
            break;
        case "email":
            errorCode = validateEmail(obj);
            break;
        default:
            errorCode = -1;
            break;
    }
    return errorCode;
}

function validateAll(formObj){
    var obj,infobox,pass;
    var pass;
    var x = formObj;
    
    pass = true;
    
    if(!x) return;
    var y = x.getElementsByTagName("input");

    for (var i=0;i<y.length;i++){
        obj = y[i];
        obj.value = obj.value.trim();
        infobox = getInfobox(y[i]);
        if(obj.type == 'text' || obj.type == 'password'){
            if(!isRequired(obj) && obj.value == ""){
                continue;
            }
            if(isRequired(obj) && obj.value == ""){
                pass = false;
                obj.focus();
                showStatus(obj,"Error");
                infobox.className    = infoboxErrorClass;
                infobox.innerHTML    = "<h1>"+requireErrorInfo + getErrorMsg(obj,0) + "<\/h1>";
                continue;
            }

            if(validateValue(obj)>0){
                pass = false;
                obj.focus();
                showStatus(obj,"Error");
                showInfo(obj,validateValue(obj),true);
                continue;
            }
        }
    }
 formObj.target="registerSave";
 if(!validateAccede(formObj)) pass = false;    
    return pass;
}

function validateAccede(formObj){
	if (!formObj.accede.checked){
		warning_check("accede_info",'<h1>请阅读爱狗网服务协议,并同意后继续注册。<\/h1>');  
  document.getElementById("accede_info").focus(); 
  return false;
 }else{
  clean_check("accede_info");  
  return true;
 }

		
}

function validateUsername(obj){
    var str = obj.value;
    //var patn = /^[^\s]*$/;
    var patn = /^[\u0391-\uFFE5a-zA-Z0-9][\u0391-\uFFE5\w]*$/
    //var patn = /^[\u4e00-\u9fa5a-zA-Z0-9][\uu4e00-\u9fa5\w]*$/
    if(patn.test(str)){
        var strlen = str.realLength();
        if(strlen>=2 && strlen<=15) return 0;
    }
    return 1; 
}

function validatePasswordFormat(str){
    var patn = /.{3,6}/; 
    var patn1 =   /^[a-zA-Z0-9_]+$/; 
    if(!patn.test(str) || !patn1.test(str) ) 
        return false;
    else
        return true;
}
function validatePassword(obj){
    var str = obj.value;

    if(validatePasswordFormat(str))        
        return 0;
    else
        return 1; 
}

function validateSafePassword(obj){
    var str = obj.value;

    if(str != document.getElementById("password").value) 
        return 1;
    else if(!validatePasswordFormat(str))
        return 2;
    else
        return 0;
}

function validateEmail(obj){
    var str = obj.value;
    var patn = /^[_a-zA-Z0-9\-]+(\.[_a-zA-Z0-9\-]*)*@[a-zA-Z0-9\-]+([\.][a-zA-Z0-9\-]+)+$/;
    if(patn.test(str)){
        return 0;
    }else{
        return 1;
    }
}

function validateCode(obj){
    var str = obj.value;
    if(str.realLength() == 4){
        return validateNumber(obj);
    }else{
        return 1;
    }
}

function validateNum(obj){
    var str = obj.value;
    var patn = new RegExp("\\d{"+getAttrValueByName(obj,"minlen")+","+getAttrValueByName(obj,"maxlen")+"}"); 
    if(patn.test(str)) return 0;
    return 1;     
}
function validateNumber(obj){
    var str1 = obj.value;
    
    var str = tot(str1); 
    obj.value = str;

    if(str.length == 0){
        return -1;
    }
    var patn = /^[0-9-\/]+$/;
    if(!patn.test(str)) return 1;
    return 0;
}

function validateAnswer(obj){
    var str = obj.value;

    if(str.realLength() > 50){
        return 1;
    }else if(str.length == 0){
        return -1;
    }
    return 0;
}

function validateCheckCode(obj){
    var str = obj.value;
    var patn = /^[0-9a-zA-Z]{4}$/;
    if(patn.test(str)) return 0;
    return 1;
}    

function checkByteLength(str,minlen,maxlen) {
    if (str == null) return false;
    var l = str.length;
    var blen = 0;
    for(i=0; i<l; i++) {
if ((str.charCodeAt(i) & 0xff00) != 0) {
    blen ++;
}
blen ++;
    }
    if (blen > maxlen || blen < minlen) {
return false;
    }
    return true;
}      

function tot(mobnumber){                        
    if(mobnumber.indexOf("０")!=-1){           
        mobnumber = mobnumber.replace("０","0");}                                               
    if(mobnumber.indexOf("１")!=-1){             
        mobnumber = mobnumber.replace("１","1");}       
    if(mobnumber.indexOf("２")!=-1){             
        mobnumber = mobnumber.replace("２","2");}       
    if(mobnumber.indexOf("３")!=-1){             
        mobnumber = mobnumber.replace("３","3");}       
    if(mobnumber.indexOf("４")!=-1){             
        mobnumber = mobnumber.replace("４","4");}       
    if(mobnumber.indexOf("５")!=-1){             
        mobnumber = mobnumber.replace("５","5");}       
    if(mobnumber.indexOf("６")!=-1){             
        mobnumber = mobnumber.replace("６","6");}       
    if(mobnumber.indexOf("７")!=-1){             
        mobnumber = mobnumber.replace("７","7");}       
    if(mobnumber.indexOf("８")!=-1){             
        mobnumber = mobnumber.replace("８","8");}       
    if(mobnumber.indexOf("９")!=-1){             
        mobnumber = mobnumber.replace("９","9");}       
                                                    
    return mobnumber;                               
}          
	function warning_check(obj,message){
		document.getElementById(obj).innerHTML = message;
		document.getElementById(obj).className= infoboxErrorClass;
	}
	
	function clean_check(obj){
		document.getElementById(obj).innerHTML = "";
		document.getElementById(obj).className= infoboxHintClass;
	}
