var validateErrorMsg = new Array();
validateErrorMsg[0] = new Array('Requried field','\u5fc5\u586b\u6b04\u4f4d');
validateErrorMsg[1] = new Array('Value is not correct email type','\u975e\u6b63\u78ba\u96fb\u5b50\u90f5\u4ef6\u683c\u5f0f');
validateErrorMsg[2] = new Array('Phone number must be entered as [0] ','\u96fb\u8a71\u683c\u5f0f\u5fc5\u9808\u70ba');
validateErrorMsg[3] = new Array('Length must equal [0]','\u9577\u5ea6\u5fc5\u9808\u7b49\u65bc[0]');
validateErrorMsg[4] = new Array('Length must between [0] and [1]','\u9577\u5ea6\u5fc5\u9808\u5728[0]\u81f3[1]\u4e4b\u9593');
validateErrorMsg[5] = new Array('Length must greater than [0]','\u9577\u5ea6\u5fc5\u9808\u5927\u65bc[0]');
validateErrorMsg[6] = new Array('Length must less than [0]','\u9577\u5ea6\u5fc5\u9808\u5c0f\u65bc[0]');
validateErrorMsg[7] = new Array('Value is not correct number type','\u975e\u6b63\u78ba\u6578\u5b57\u683c\u5f0f');
validateErrorMsg[8] = new Array('Value is not correct integer type','\u975e\u6b63\u78ba\u6574\u6578\u683c\u5f0f');
validateErrorMsg[9] = new Array('Value must between [0] and [1]','\u6578\u503c\u5fc5\u9808\u5728[0]\u81f3[1]\u4e4b\u9593');
validateErrorMsg[10] = new Array('Value must greater than [0]','\u6578\u503c\u5fc5\u9808\u5927\u65bc[0]');
validateErrorMsg[11] = new Array('Value must less than [0]','\u6578\u503c\u5fc5\u9808\u5c0f\u65bc[0]');
validateErrorMsg[12] = new Array('Date format is yyyy/MM/dd','\u65e5\u671f\u683c\u5f0f\u70ba YYYY/MM/DD');
validateErrorMsg[13] = new Array('Date format is yyyy/MM/dd HH:MI','\u65e5\u671f\u683c\u5f0f\u70ba YYYY/MM/DD HH:MI');
validateErrorMsg[14] = new Array('--  Please input the following required field(s):\n\n','-- \u8acb\u8f38\u5165\u4ee5\u4e0b\u5fc5\u586b\u6b04\u4f4d:\n\n');
validateErrorMsg[15] = new Array('--  Please check the following error field(s):\n\n','-- \u8acb\u8f38\u5165\u4ee5\u4e0b\u932f\u8aa4\u6b04\u4f4d:\n\n');

function checkValidateAction(supportEventGroup,eventGroup){
    if(supportEventGroup == ''){
		return true;
	}else{
		if(supportEventGroup == eventGroup){
		    return true;
		}else{
		    return false;
		}
	}
}

function validateFormField(formName,checkField,lang,eventGroup)
{
	var requiredError = new Array();
	var validateError = new Array();
	lang_index = 0;
    if(lang == 'zh'){
	    lang_index = 1;
	}else{
	    lang_index = 0;
	}
	
	for(i=0;i<checkField.length;i++){
        element = document.forms[formName].elements[checkField[i][1]];
        value = "";
        if(typeof element.length != 'number'){ 
            if(element.tagName == 'INPUT' && element.getAttribute('type') == 'radio'){
                if(element.checked){
                    value = element.value;
                }
            }else if(element.tagName == 'OPTION'){
                if(element.selected){
                   value = element.value;
                } 
            }else if(element.tagName == 'INPUT' && element.getAttribute('type') == 'checkbox'){
                if(element.checked){
                    value = element.value;
                }
            }else{                     
                value = element.value;                 
            } 
        }else{
            for(j=0;j<element.length;j++){
                if(element[j].tagName == 'INPUT' && element[j].getAttribute('type') == 'radio'){
	                if(element[j].checked){
	                    value = element[j].value;
	                }
                }else if(element[j].tagName == 'OPTION'){
                    if(element[j].selected){
                        if(value == ''){
                            value = element[j].value;
                        } 
                    }
                }else if(element[j].tagName == 'INPUT' && element[j].getAttribute('type') == 'checkbox'){
	                if(element[j].checked){
	                    if(value == ''){
                            value = element[j].value;
                        } 
	                }
                }else{                     
                    if(value == ''){
                        value = element[j].value;
                    }                    
                } 
            }
        }
        		
                showLabel = checkField[i][2];
                errorMsg = "";
                if(typeof showLabel != 'string'  || isEmptyValue(showLabel)){
                     showLabel = document.forms[formName].elements[checkField[i][1]].getAttribute('label');
                     if(typeof showLabel != 'string'  || isEmptyValue(showLabel)){
                         showLabel = checkField[i][1];
                     }
                }
                var emptyFlag = isEmptyValue(value);
                var errorFlag = false;
		        if(checkField[i][0] == "REQUIRED" && checkValidateAction(checkField[i][4],eventGroup)){
		            if(emptyFlag){
                        errorFlag = true;
                        errorMsg = validateErrorMsg[0][lang_index];
                        requiredError[requiredError.length] = new Array(showLabel,errorMsg);
		            }
		        }
                if(!emptyFlag){
                    if(checkField[i][0] == "EMAIL" && checkValidateAction(checkField[i][4],eventGroup)){
		         if(!isEmail(value)){
                             errorFlag = true;
                             errorMsg = validateErrorMsg[1][lang_index];
                             validateError[validateError.length] = new Array(showLabel,errorMsg);
		         }
		    }else if(checkField[i][0] == "PHONE" && checkValidateAction(checkField[i][4],eventGroup)){				  
		         if(!isPhoneNumber(value)){
                             errorFlag = true;
                             errorMsg = replace(validateErrorMsg[2][lang_index],'[0]','(###) ###-####');
                             validateError[validateError.length] = new Array(showLabel,errorMsg);
		         }
		    }else if(checkField[i][0] == "DATE" && checkValidateAction(checkField[i][4],eventGroup)){				  
		         if(!isDate(value)){
		                     errorFlag = true;
		                     errorMsg = validateErrorMsg[12][lang_index];
		                     validateError[validateError.length] = new Array(showLabel,errorMsg);
		         }
		    }else if(checkField[i][0] == "DATETIME" && checkValidateAction(checkField[i][4],eventGroup)){				  
		         if(!isDateTime(value)){
		                     errorFlag = true;
		                     errorMsg = validateErrorMsg[13][lang_index];
		                     validateError[validateError.length] = new Array(showLabel,errorMsg);
		         }
		    }else if(checkField[i][0] == "LENGTH" && checkValidateAction(checkField[i][4],eventGroup)){
                        minLength = checkField[i][5];
                        maxLength = checkField[i][6];
                        if(typeof minLength == 'string' && !isEmptyValue(minLength)
                           &&typeof maxLength == 'string' && !isEmptyValue(maxLength)){
                             if(lessMinLength(value,minLength) || greatMaxLength(value,maxLength)){
                                 errorFlag = true;
                                 if(parseInt(minLength) == parseInt(maxLength)){
                                     errorMsg = replace(validateErrorMsg[3][lang_index],'[0]',parseInt(minLength));
                                     validateError[validateError.length] = new Array(showLabel,errorMsg);
                                 }else{
                                     errorMsg = replace(validateErrorMsg[4][lang_index],'[0]',parseInt(minLength));
									 errorMsg = replace(errorMsg,'[1]',parseInt(maxLength));
                                     validateError[validateError.length] = new Array(showLabel,errorMsg);
                                 }
                            }
                        }else{
                            if(typeof minLength == 'string' && !isEmptyValue(minLength)){
                                if(lessMinLength(value,minLength)){
                                    errorFlag = true;
                                    errorMsg = replace(validateErrorMsg[5][lang_index],'[0]',parseInt(minLength));
                                    validateError[validateError.length] = new Array(showLabel,errorMsg);
                                }
                            }
                            if(typeof maxLength == 'string' && !isEmptyValue(maxLength)){
                                if(greatMaxLength(value,maxLength)){
                                    errorFlag = true;
                                    errorMsg = replace(validateErrorMsg[5][lang_index],'[0]',parseInt(maxLength));
                                    validateError[validateError.length] = new Array(showLabel,errorMsg);
                                }
                            }
                        }
		    }else if(checkField[i][0] == "NUMBER" && checkValidateAction(checkField[i][4],eventGroup)){
                        if(isNaN(value)){
                            errorFlag = true;
                            errorMsg = validateErrorMsg[7][lang_index];
                            validateError[validateError.length] = new Array(showLabel,errorMsg);
                        } else {
                            var intFlag = (checkField[i][5] == "true");
                            if(intFlag){
                                if(!isInteger(value)){
                                    errorFlag = true;
                                    errorMsg = validateErrorMsg[8][lang_index];
                                    validateError[validateError.length] = new Array(showLabel,errorMsg);
                                }
                            }
                            if(!errorFlag){
                                minRange = checkField[i][6];
                                maxRange = checkField[i][7];

                                if(typeof minRange == 'string' && !isEmptyValue(minRange)
                                        && typeof maxRange == 'string' && !isEmptyValue(maxRange)){
                                    if(parseInt(value) < parseInt(minRange) || parseInt(value) > parseInt(maxRange)){
                                        errorFlag = true;
                                        errorMsg = replace(validateErrorMsg[9][lang_index],'[0]',parseInt(minRange));
                                        errorMsg = replace(errorMsg,'[1]',parseInt(minRange));
                                        validateError[validateError.length] = new Array(showLabel,errorMsg);
                                    }
                                }else{
                                    if(typeof minRange == 'string' && !isEmptyValue(minRange)){
                                        if(parseInt(value) < parseInt(minRange)){
                                            errorFlag = true;
                                            errorMsg = replace(validateErrorMsg[10][lang_index],'[0]',parseInt(minRange));
                                            validateError[validateError.length] = new Array(showLabel,errorMsg);
                                        }
                                    }
                                    if(typeof maxRange == 'string' && !isEmptyValue(maxRange)){
                                        if(parseInt(value) > parseInt(maxRange)){
                                            errorFlag = true;
                                            errorMsg = replace(validateErrorMsg[11][lang_index],'[0]',parseInt(maxRange));
                                            validateError[validateError.length] = new Array(showLabel,errorMsg);
                                        }
                                    }
                                }
                            }
                        }

		    }
                }
                msgId = checkField[i][3];
                if(errorFlag){
                    if(typeof element.length != 'number'){
                        element.style.background = "#C8BA92";
                    }else{
                       for(j=0;j<element.length;j++){
                           element[j].style.background = "#C8BA92";
                       }
                    }
                    if(typeof msgId == 'string' && !isEmptyValue(msgId)){
                        msgDiv = document.getElementById(msgId);
                        if(typeof msgDiv.AUTO == 'string' && msgDiv.AUTO == "true"){
                            msgDiv.innerHTML = errorMsg;
                        }
                        msgDiv.style.visibility = "visible";
                        msgDiv.style.display = "";
                    }
                }else{
                    if(typeof element.length != 'number'){
                        element.style.background = "#F9F9F9";
                    }else{
                       for(j=0;j<element.length;j++){
                           element[j].style.background = "#F9F9F9";
                       }
                    }                
                    if(typeof msgId == 'string' && !isEmptyValue(msgId)){
                        msgDiv = document.getElementById(msgId);
                        if(typeof msgDiv.AUTO == 'string' && msgDiv.AUTO == "true"){
                            msgDiv.innerHTML = "";
                        }
                        msgDiv.style.visibility = "hidden";
                        msgDiv.style.display = "none";
                    }
                }
        }

	var message = "";
	if(requiredError.length > 0 ){
            message += validateErrorMsg[14][lang_index];
	    for(i=0;i<requiredError.length;i++){
                message +=  "    "+requiredError[i][0]
                message += "\n";
            }
            message += "\n";
	}
	if(validateError.length > 0 ){
            message += validateErrorMsg[15][lang_index];
	    for(i=0;i<validateError.length;i++){
                message +=  "    "+validateError[i][0]
		 if(!(typeof validateError[i][1] == 'object' || isEmptyValue(validateError[i][1]))){
                     message += " --- "+validateError[i][1]+"\n";
		} else {
                     message += "\n";
		}
            }
            message += "\n";
	}
	return message;
}

function lessMinLength(value,minLength)
{
	var count = 0;
	for(j =0; j < value.length ; j++)
	{
	    count = (value.charCodeAt(j) > 127 ? count+2 : count+1);
	}
	if(count >= minLength)
	{
            return false;
	}else{
            return true;
	}
}

function greatMaxLength(value,maxLength)
{
	var count = 0;
	for(j =0; j < value.length ; j++)
	{
	    count = (value.charCodeAt(j) > 127 ? count+2 : count+1);
	}
	if(count <= maxLength)
	{
            return false;
	}else{
            return true;
	}
}

function isEmptyValue(value)
{
    var vtest= trim(value);
    if(vtest == ""){
	return true;
    }else{
	return false;
    }
}

function trim(str) {
    while (str.charAt(str.length - 1)==" ")
	str = str.substring(0, str.length - 1);
    while (str.charAt(0)==" ")
	str = str.substring(1, str.length);
    return str;
}

function replace(str,org,rep){
    while(str.indexOf(org)> -1){
        str = str.substr(0,str.indexOf(org))+ rep + str.substr(str.indexOf(org)+org.length);
    }
	return str;
}

function isInteger(value)
{
    var ok = true;
    var vtest = value;

    if (vtest.length >0 )
    {
	for (var j=0; j<vtest.length; j++)
	{
	    if (isNaN(vtest.charAt(j)))
	    {
                ok = false;
	    }
	}
    }
    else
    {
        return false;
    }

    if (isNaN(parseInt(vtest))){
	ok = false;
    }

    return ok;
}


function isEmail(value)
{
    var ok = true;
    var vtest = value;
	if(vtest == ""){
		return false;
	}
    var i = 1;
    var sLength = vtest.length;

    while ((i < sLength) && (vtest.charAt(i) != "@"))
    {
		i++
    }

    if ((i >= sLength) || (vtest.charAt(i) != "@"))
    {
	ok = false;
    }
    else{
	 i += 2;
    }

    if(ok){
       while ((i < sLength) && (vtest.charAt(i) != "."))
       {
           i++;
       }
       // there must be at least one character after the .
       if ((i >= sLength - 1) || (vtest.charAt(i) != "."))
       {
	   ok = false;
       } else {
	   ok = true;
       }
    }
    return ok;
}

function isPhoneNumber(value)
{
     rePhoneNumber = new RegExp(/^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/);

     if (!rePhoneNumber.test(value)) {
          return false;
     }
     return true;
}

function isDate(str){
    var re = new RegExp("^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})$");
    var ar;
    var res = true;
    
    if ((ar = re.exec(str)) != null){
        var i;
        i = parseFloat(ar[3]);
        // verify dd
        if (i <= 0 || i > 31){
            res = false;
        }
        i = parseFloat(ar[2]);
        // verify mm
        if (i <= 0 || i > 12){
            res = false;
        }
    }else{
        res = false;
    } 
    return res;
}

function isDateTime(str){
    var re = new RegExp("^([0-9]{4})[./]{1}([0-9]{1,2})[./]{1}([0-9]{1,2})[ ]{1}([0-9]{1,2})[:]{1}([0-9]{1,2})$");
    var ar;
    var res = true;
    
    if ((ar = re.exec(str)) != null){
        var i;
        i = parseFloat(ar[3]);
        // verify dd
        if (i <= 0 || i > 31){
            res = false;
        }
        i = parseFloat(ar[2]);
        // verify mm
        if (i <= 0 || i > 12){
            res = false;
        }
        i = parseFloat(ar[4]);
        // verify hh
        if (i < 0 || i > 24){
            res = false;
        }
        i = parseFloat(ar[5]);
        // verify hh
        if (i < 0 || i > 60){
            res = false;
        }        
    }else{
        res = false;
    } 
    return res;
}






