﻿function getErrorMsg(obj,errorCode){
//var Infobox=getInfobox(obj)
switch(obj.id){
    case "username":
        if(document.getElementById("username_info").outerText){
            return document.getElementById("username_info").outerText
        }else{
            return usernameNormal;
        }
        
        break;
    case "password":
        return passwordNormal;
        break;
    case "confirm_password":
        return confirm_passwordNormal;
        break;
    //case "fctbox":
      //  return brandNormal;
       // break;
 //   case "brbox":
   //     return brandNormal;
     //   break;
 //   case "szdq_location":
  //      return areaNormal;
  //      break;
 	case "szdq_sublocation":
       return areaNormal;
       break;
    case "sex1":
    	return sexNormal;
        break;
    case "sex2":
        return sexNormal;
        break;
    case "email":
        return emailNormal;
        break;
    case "question":
        return questionNormal;
        break;
    case "answer":
        return answerNormal;
        break;
    case "validateNum":
        return validateNumNormal;
        break;

}
}

function initForm(){

    var x=document.getElementById("Content")
    if(!x) return;
    
     var z=x.getElementsByTagName("select");
    for(var j=0;j<z.length;j++)
	{
		if(z[j].name != 'szdq_location' && z[j].name != 'szdq_sublocation')
		{
			initStatus(z[j]);
		    z[j].onfocus =  getFocus;
		    z[j].onblur = lostFocus;
		    z[j].onchange = showMyStatus;
   		}
    }
    
    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]);
            y[i].onfocus = getFocus;
            y[i].onblur	 = lostFocus;
            y[i].onkeyup = showMyStatus;
        }
        
        if (y[i].id=="sex1" || y[i].id=="sex2"){
            initStatus(y[i]);
            y[i].onfocus = getFocus;
            y[i].onblur	 = lostFocus;
            y[i].onclick = showMyStatus;
        }
    }
    
   
}
function initStatus(obj){
    
    //if(obj.id== "szdq_sublocation")
	//	return;
    var Infobox=getInfobox(obj)
    if (obj.id=="username"){
	   if (document.getElementById("username_info").outerText=="" ){
	        Infobox.innerHTML=getErrorMsg(obj,0)
	    	Infobox.Inherits="HintMsg";
	    	initMyStatus(obj)
	    }
    }
    else{
        Infobox.innerHTML=getErrorMsg(obj,0)
    	Infobox.Inherits="HintMsg";
	    initMyStatus(obj)
	}

/*
switch(obj.id){
    case "username":
        Infobox.innerHTML=usernameNormal;
        Infobox.Inherits="HintMsg";
        break;
    case "password":
        Infobox.innerHTML=passwordNormal;
        Infobox.Inherits="HintMsg";
        break;
    case "confirm_password":
        Infobox.innerHTML=confirm_passwordNormal;
        Infobox.Inherits="HintMsg";
        break;
    case "fctbox":
        Infobox.innerHTML=brandNormal;
        Infobox.Inherits="HintMsg";
        break;
    case "brbox":
        Infobox.innerHTML=brandNormal;
        Infobox.Inherits="HintMsg";
        break;
 //   case "szdq_location":
 //       Infobox.innerHTML=areaNormal;
 //       Infobox.Inherits="HintMsg";
 //       break;
 	  case "szdq_sublocation":
       	Infobox.innerHTML=areaNormal;
      	Infobox.Inherits="HintMsg";
      	 break;
    case "sex1","sex2":
        Infobox.innerHTML=sexNormal;
        Infobox.Inherits="HintMsg";
        break;
    case "email":
        Infobox.innerHTML=emailNormal;
        Infobox.Inherits="HintMsg";
        break;
}
*/
}


function validateAll(formObj)
{
    var obj,infobox,pass;
	pass = true;
	var x = formObj;
	
	if(!x) return;	
	
	var z = x.getElementsByTagName("select");
	for (var j=0;j<z.length;j++)
	{
	if(z[j] != 'szdq_sublocation')
	{	
	    obj=z[j];
	    obj.value=obj.value.trim();
	    infobox = getInfobox(obj);
	    if(validateValue(obj)>0)
	    {
	        if(pass==true)	obj.focus();
	        pass=false;
	        showStatus(obj,"Error");
	        showInfo(obj,validateValue(obj));
	        continue;
	    }
	    if(validateValue(obj)==0)
	    {
			showStatus(obj,"Ok");
			infobox.className	= "HintMsg";
			infobox.innerHTML	= "完成";
			continue;
		}
	}
	}
	
	
	var y = x.getElementsByTagName("input");
	for (var i=0;i<y.length;i++)
	{		
	    obj = y[i];		
	  //  if( obj.id=='ValidateNum')
		//	continue;
		obj.value = obj.value.trim();
		infobox = getInfobox(y[i]);
		
		if(obj.type == 'text' || obj.type == 'password' || obj.type=="radio")
		{
		    
		  if(requestMethod!='POST' || (requestMethod=='POST' && obj.id != 'username') )
		  { 
		   
		    if (obj.value == ""){
				if(pass==true)	obj.focus();
				pass = false;
				showStatus(obj,"Error");
				infobox.className	= "ErrorMsg";
				infobox.innerHTML	= requireErrorInfo + getErrorMsg(obj,0);
				continue;
			}
		   
		    if(validateValue(obj)>0){
		        if(pass==true)	obj.focus();
				pass = false;
				showStatus(obj,"Error");
				showInfo(obj,validateValue(obj));
				continue;
			}
			
			if(validateValue(obj)==0){
				showStatus(obj,"Ok");
				infobox.className	= "HintMsg";
				infobox.innerHTML	= "完成";
				continue;
			}
		 }
		 
		}		
	}		

	return pass;
}

function getInfobox(obj){
    var Infobox
    if (obj.type=="text" || obj.type=="password")
        Infobox = document.getElementById(obj.id+"_info");
    else{
        if(obj.type=="select-one"){
           // if(obj.id=="fctbox" || obj.id=="brbox"){
             //   Infobox=document.getElementById("brand_info")
            //}
           // if(obj.id=="szdq_location"){
           //     Infobox=document.getElementById("area_info")
            //}
 			if(obj.id=="szdq_sublocation"){
                Infobox=document.getElementById("area_info")
 	         }
            if(obj.id=="question"){
                Infobox=document.getElementById("question_info")
            }
        }
        if(obj.type=="radio"){
            Infobox = document.getElementById("sex_info")
        }
    }
    return Infobox;
}

function getMarkBox(obj){
    var markBox
    if(obj.type=="select-one"){
       // if(obj.id=="fctbox" || obj.id=="brbox"){
          //  markBox=document.getElementById("brand_mark")
      //  }
       // if(obj.id=="szdq_location"){
        //    markBox=document.getElementById("area_mark")
       // }
 		if(obj.id=="szdq_sublocation"){
            markBox=document.getElementById("area_mark")
        }
        
         if(obj.id=="question"){
            markBox=document.getElementById("question_mark")
        }
    }
    if(obj.type=="radio"){
        markBox = document.getElementById("sex_mark")
    }
    return markBox;
}

function isIE() {
	if(document.all) return true;
	return false;
}

function getFocus(evnt){
    var obj
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	}
	//var obj= event.srcElement;
    showInfo(obj,0);
}

function lostFocus(evnt){
    var obj
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	}
    //var obj= event.srcElement;
    showInfo(obj,-1);
}

function showInfo(obj,statecode){
    var Infobox=getInfobox(obj)
    if(Infobox.className != "ErrorMsg"){
        if (statecode==0){
            Infobox.className = "WarningMsg";
            Infobox. innerHTML=getErrorMsg(obj,0)
        }
        if (statecode >0 ){
            Infobox.className = "ErrorMsg";
           Infobox. innerHTML=getErrorMsg(obj,1) 
        }
        if (statecode < 0){
            Infobox.className = "HintMsg";
           Infobox. innerHTML=getErrorMsg(obj,0) 
        }
    }
}

function initMyStatus(obj){
    errorCode=validateValue(obj);
    if(errorCode == 0){
		showStatus(obj,"Ok");
	}
	if(errorCode >= 1){
		showStatus(obj,"Error");
	}
	if(errorCode < 0){
		showStatus(obj,"Normal");
	}
}

function showMyStatus(evnt){
  
  var obj,errorCode;
	if (isIE()) {
		obj = event.srcElement;
	}else {
		obj = evnt.target;
	} 
    //var obj
    //var errorCode 
    //obj = event.srcElement;
   	if(obj.id=="fctbox") comp_brlist()
    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":
			if(obj.type == "text" || obj.type=="password")	{
			    obj.className = "Warning";
			}
		    if(obj.type == "select-one" || obj.type=="radio") getMarkBox(obj).innerHTML = "";
			break;
		case "Error":
			if(obj.type == "text" || obj.type=="password")	{
			obj.className = "Error";
			}
		    if(obj.type == "select-one" || obj.type=="radio") getMarkBox(obj).innerHTML = "";
			break;
		case "Ok":
		    if(obj.type == "text" || obj.type=="password")	obj.className = "Ok";
		    if(obj.type == "select-one" || obj.type=="radio") getMarkBox(obj).innerHTML = selectOK;
			break;
		default:
			if(obj.type == "text" || obj.type=="password")	obj.className = "Normal";
		    if(obj.type == "select-one" || obj.type=="radio") getMarkBox(obj).innerHTML = "";
			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(obj.id){
	    case "username":
	        errorCode = validateUsername(obj);
			break;
	    case "password":
			errorCode = validatePassword(obj);
			break;
	    case "confirm_password":
			errorCode = validateSafePassword(obj);
			break;
	    //case "fctbox":
	      //  errorCode = validateBrand(obj);
	       // break;
	    //case "brbox":
	      //  errorCode = validateBrand(obj)
	       // break;
//	    case "szdq_location":
//	        errorCode = validateArea(obj);
//	        break;
 		case "szdq_sublocation":
 	        errorCode = validateArea(obj);
 	        break;
	    case "email":
	        errorCode = validateEmail(obj);
	        break;
	    case "sex1":
	        errorCode = validateSex(obj);
	        break;
	    case "sex2":
	        errorCode = validateSex(obj);
	        break;
	    case "question":
	        errorCode = validateArea(obj);
	        break;
	    case "answer":
	        errorCode = validateAnswer(obj);
	        break;
	    case "validateNum":
	        errorCode = validateArea(obj);
	        break;
	        
	}
	return errorCode;
}

//functions for each particular datatype validation
function validateUsername(obj){
	var str = obj.value;
	//var patn =   /^[\u0391-\uFFE5a-zA-Z0-9][\u0391-\uFFE5\w]{2,20}$/; 
	var patn = /^[^_^\s]*$/;
	if(patn.test(str)){
		if(checkByteLength(str,4,20)) return 0;
	}
	return 1; 
}
function validatePassword(obj){
	var str = obj.value;
	var patn = /.{6,16}/; 
	if(patn.test(str)) return 0;
	return 1; 
}
function validateSafePassword(obj){
	var str = obj.value;
	//check length and alphabet
	if(validatePassword(obj)>0) return 1;
	//check if same as username
	if(str == document.getElementById("username").value) return 2;
	//check if all the characters are the same
	//for(var i=0;i<str.length;i++){
	//	if(str.charAt(0)!=str.charAt(i)) break;
	//}
	//if(i == str.length) return 3;
	//check if is number sequence
	//var seqStr="01234567890";
	//if(seqStr.indexOf(str) != -1) return 4;
	//check if is lower alphabet sequence
	//var seqStr="abcdefghijklmnopqrstuvwxyz";
	//if(seqStr.indexOf(str) != -1) return 5;
	//check if is upper alphabet sequence
	//var seqStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	//if(seqStr.indexOf(str) != -1) return 6;
	//
	if(str != document.getElementById("password").value) return 7;
	//if validated
	return 0;
}
function validateBrand(obj)
{
    var str = obj.value;
    var fct = document.getElementById("fctbox").value;
    var br =  document.getElementById("brbox").value;
    if(fct =="" || br == "" || br=="0") return 1;
    return 0;
    
}
function validateAnswer(obj)
{
    var str = obj.value;
    var patn = /.{3,20}/; 
	if(patn.test(str)) return 0;
    return 1;
}
function validateArea(obj){
    var str = obj.value;
    if(str=="") return 1;
    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)){
	/*
		var blocklist = obj.id.p;
		if(blocklist.length > 0){
			for(var i=0;i<blocklist.length;i++){
				if(getMailServer(obj.value) == blocklist[i])
					return 2;//mailserver in block list
			}
			return 0;
		}
		*/
		return 0;
	}else{
		return 1; //incorrect format
	}
}
function validateSex(obj){
    var s1 = document.getElementById("sex1").checked;
    var s2 =  document.getElementById("sex2").checked;
    if(s1 || s2 ) 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;
}
String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

