﻿
var isNS = (!document.all);
var isIE = (document.all);
var isNS6 = isNS && document.getElementById;
var gClient = "";

var CheckType = new Object();
CheckType.Required = 1;
CheckType.Numeric = 2;
CheckType.Alpha = 4;
CheckType.MinValue = 8;
CheckType.MaxValue = 16;
CheckType.MinLength = 32;
CheckType.MaxLength = 64;
CheckType.RegEx = 128;
CheckType.Zipcode = 256;
CheckType.Telephone = 512;
CheckType.SSN = 1024;
CheckType.Creditcard = 2048;
CheckType.Email = 4096;

var previousObj = '';
var previousValue = '';
var eventObj;
var intended = /INPUT|TEXTAREA|SELECT|OPTION/; //Regular expression to highlight only form elements
var ErrorMsg = '';
var FirstErrorField = new Object();

var isBackspace = false;
var isTab = false;
var isShiftTab = false;
var isDel = false;
var isShift = false;

function setError(field,description)
{
	if (typeof(description) != 'undefined')
	{
		ErrorMsg += '- ' + description + '\n';
	}
	FieldErrorHighlight(field);
	if (FirstErrorField == null) 
	{
		FirstErrorField = field;
	}
}

function doValidateField(field, validation)
{
	if (typeof(field) == 'undefined') return;

	thetype = field.type.toLowerCase();	

	f = field.id

	if(f.indexOf(gClient)>-1)
	{
		strRegExp = "regExp = /" + gClient + "\_" + "/gi;"
		eval(strRegExp)
		
		f = f.replace(regExp,"")
		//alert("regExp = " + regExp)
		//alert(f)
	}

	switch (f)
	{
		// panel 1 Email address validation
		case "txtEmail" : 
			isError = !isEmail(field.value);
			description = 'Địa chỉ email'; 
			break;		
		case "txtHoVaTen" :
		    isError = isEmpty(field.value);
			description = 'Họ'; 
			break;
		case "txtName" :
			isError = isEmpty(field.value);
			description = 'Họ và tên'; 
			break;
		case "txtTen" :
			isError = isEmpty(field.value);
			description = 'Tên'; 
			break;
		case "txtDiaChiLienHe" : 
			isError = !isAddress(field.value);
			description = 'Địa chỉ liên hệ'; 
			break;
		case "txtDiaChiCongTy" : 
			isError = !isAddress(field.value);
			description = 'Địa chỉ liên hệ của công ty'; 
			break;
		case "txtTenCongTy" :		
			isError = isEmpty(field.value);
			description = 'Tên công ty/cơ quan'; 
			break;		
		case "txtDiDong" : 
			isError = !isPhoneAreaCode(field.value);
			description = 'Điện thoại di động'; 
			break;
		case "txtNganhKD" : 
			isError = !isName(field.value);
			description = 'Ngành kinh doanh'; 
			break;		
		case "txtDiaChi" : 
			isError = !isAddress(field.value);
			description = 'Địa chỉ công ty'; 
			break;
		case "txtLinhVucHoatDong" : 
			isError = isEmpty(field.value);
			description = 'Lĩnh vực hoạt động'; 
			break;			
		case "txtNguoiLienHe" : 
			isError = isEmpty(field.value);
			description = 'Người liên hệ'; 
			break;
	    case "txtDTCoQuan" : 
			isError = !isPhoneAreaCode(field.value);
			description = 'Điện thoại cơ quan'; 
			break;
		case "txtDTDiDong" : 
			isError = !isPhoneAreaCode(field.value);
			description = 'Điện thoại di động'; 
			break;
		case "txtMucTieuDaoTao" : 
			isError = isEmpty(field.value);
			description = 'Mục tiêu đào tạo của chương trình'; 
			break;
		case "txtDeNghiDaoTao" : 
			isError = isEmpty(field.value);
			description = 'Đề nghị chương trình đào tạo'; 
			break;
		case "ddlCourse" : 
			isError = isEmpty(field.value);
			description = 'Khóa học đang tham dự tại PACE'; 
			break;
		case "txtDiaDiem" : 
			isError = !isAddress(field.value);
			description = 'Địa điểm học'; 
			break;	
	    case "txtCompany" : 
			isError = isEmpty(field.value);
			description = 'Đơn vị công tác'; 
			break;		
		default :
			if (typeof(validation) != 'undefined')
			{
				try
				{
					eval("isError = " + validation + "(field.value)");
				}
				catch (ex)
				{
					alert("[doValidateField] bad eval");
				}
			}
			else
			{
				switch(thetype)
				{
					case "select-one" :
					case "select-multiple" :
					case "text" :
					case "textarea" :
						isError = isEmpty(field.value);
						break;
					case "checkbox" :
						isError = !field.checked;
						break;						
					default :
						if (thetype == 'undefined')
						{
							var blnchecked = false;
							for (var j = 0; j < field.length; j++){
								if (field[j].checked){
									blnchecked = true;
								}
							}
							isError = !blnchecked;
						}
				}
			}
			break;
	}
	if (field.title.length > 0)
		description = field.title;
		
	if (isError)
	{
		setError(field,description);
	}
	else
	{
		FieldRemoveHighlight(field);	
	}
}

function doValidateForm(theForm, value, condition)
{
	//alert(value);
	
	var errors = '';
	var isOK = true;
	
	ErrorMsg = '';
	FirstErrorField = null;
	
	rExp = / /ig;		
	
	for(var i = 0; i < value.length; i++)
	{	
		gClient = value.substring(i, i + 1);
		
		if(gClient == "_")
		    {			    
			    gClient = value.substring(0, i)
			    i = value.length;
			}
	}
//	alert(gClient);  
  
    switch(condition)
    {
        case "register":
            doValidateField(document.getElementById(gClient + "_txtHoVaTen"));  
            doValidateField(document.getElementById(gClient + "_txtDiaChiLienHe"));              
            doValidateField(document.getElementById(gClient + "_txtEmail"));    
            doValidateField(document.getElementById(gClient + "_txtDiDong"));    		
		    break;
		    
        case "inhouse":
            doValidateField(document.getElementById(gClient + "_txtTenCongTy"));
            doValidateField(document.getElementById(gClient + "_txtDiaChi"));  
            doValidateField(document.getElementById(gClient + "_txtLinhVucHoatDong"));  
            doValidateField(document.getElementById(gClient + "_txtNguoiLienHe"));  
            doValidateField(document.getElementById(gClient + "_txtDTCoQuan"));  
            doValidateField(document.getElementById(gClient + "_txtDTDiDong")); 
            doValidateField(document.getElementById(gClient + "_txtEmail"));     
            doValidateField(document.getElementById(gClient + "_txtDeNghiDaoTao"));              
            break;
        case "sendmail":
            doValidateField(document.getElementById(gClient + "_txtName"));
            doValidateField(document.getElementById(gClient + "_txtEmail"));            
            doValidateField(document.getElementById(gClient + "_txtRequest"));
            break;
        case "event":
            doValidateField(document.getElementById(gClient + "_txtHoVaTen"));  
            doValidateField(document.getElementById(gClient + "_txtDiaChiLienHe"));              
            doValidateField(document.getElementById(gClient + "_txtEmail"));    
            doValidateField(document.getElementById(gClient + "_txtDiDong"));
            doValidateField(document.getElementById(gClient + "_txtCourseName"));    		
		    break;
		case "suppclass":
            doValidateField(document.getElementById(gClient + "_txtHoVaTen"));     
            doValidateField(document.getElementById(gClient + "_txtTen"));              
            doValidateField(document.getElementById(gClient + "_txtEmail"));    
            doValidateField(document.getElementById(gClient + "_txtDiDong"));
            doValidateField(document.getElementById(gClient + "_txtCompany")); 
            doValidateField(document.getElementById(gClient + "_ddlCourse"));               		
		    break;
    }  

    if (ErrorMsg.length > 0) 
    {	
	    isOK = false;
	    alert('Thông tin Quý Vị điền vào chưa chính xác.\n\nXin vui lòng điền đầy đủ các thông tin dưới đây:\n' + ErrorMsg);
	    try
	    {
		    FirstErrorField.focus();
	    }
	    catch (ex)
	    {
	    }
	    //ToggleSubmit(theForm, true);
    }
    
	return isOK;	
}

var n = "0123456789";
var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
function isValid(parm , val) {if (parm == "") return false; for (var i=0; i < parm.length; i++) { if (val.indexOf(parm.charAt(i),0) == -1) return false; } return true;}
function isAlpha(str){return isValid(str,a)};
function isAlphaNumeric(str){return isValid(str,n+a)};
function isName(str){r1=new RegExp("^[a-zA-Z]+[-a-zA-Z' ]+[ ]*$"); r2=new RegExp("[AaEeIiOoUuYy]+"); return(r1.test(str)&&r2.test(str));}
function isName_Num(str){r1=new RegExp("^[a-zA-Z]+[-a-zA-Z' 0-9]+[ ]*$"); r2=new RegExp("[AaEeIiOoUuYy]+"); return(r1.test(str)&&r2.test(str));} // numbers allowed 
function isAddress(str){r1=new RegExp("[a-zA-Z]+"); r2=new RegExp("[0-9]+"); return(r1.test(str)&&r2.test(str));}
function isZipcode(str){r1=new RegExp("^([ ]*)([0-9]{5})([ ]*)$");r2=new RegExp("^([ ]*)([A-Za-z][0-9][A-Za-z][ ]?([0-9][A-Za-z][0-9])?)([ ]*)$");if(str.indexOf("-") == 11) str=str.substring(0,11);return(r1.test(str)||r2.test(str));}
function isPhoneAreaCode(str){with(new RegExp("[2-9][0-9]"))return(test(str))}
function isPhonePrefix(str){r1=new RegExp("[0-9]{3}");r2=new RegExp("000|555|800");return(r1.test(str)&&!r2.test(str));}
function isPhoneSuffix(str){with(new RegExp("[0-9]{4}"))return(test(str))}
function isPhoneExtension(str){with(new RegExp("^[0-9]*$"))return(test(str))}
function isValidPhone(str){r=new RegExp("[1]{7}|[2]{7}|[3]{7}|[4]{7}|[5]{7}|[6]{7}|[7]{7}|[8]{7}|[9]{7}");return(!r.test(str));}
function isSSN(str){r1=new RegExp("^([0-7]{1}[0-9]{8})$");r2=new RegExp("[0]{9}|[1]{9}|[2]{9}|[3]{9}|[4]{9}|[5]{9}|[6]{9}|[7]{9}|123456789|111223333|123121234");return(r1.test(str)&&!r2.test(str));}
function isDate(y,m,d){with(new Date(y,m-1,d))return((getDate()==d)&&(getMonth()==m-1))}
function isEmpty(str){strObj = new String(str); r = /(\s+)/g; strObj = strObj.replace(r,""); return (strObj.length == 0);}
function isChecked(str){ alert(str); return true; }
function IsNumber(str){
    for(var i = 0; i < str.length; i++)
	{	
		var temp = str.substring(i, i + 1);
		
		if(!(temp == "." || (temp >= 0 && temp <=9)))
			return false;
	}
	return true;
}
//function isEmail(str){ with(new RegExp("^[A-Za-z0-9](([_\.\-]?[a-zA-Z0-9]+)*)@([A-Za-z0-9]+)(([\.\-]?[a-zA-Z0-9]+)*)\.([A-Za-z]{2,})$")) return(test(str));}
function isEmail(str){
	supported=0;
	if(window.RegExp){
		tempStr="a";
		tempReg=new RegExp(tempStr);
		if(tempReg.test(tempStr))supported=1;
	}
	if(!supported)
		return(str.indexOf(".")>2)&&(str.indexOf("@")>0);
	r1=new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	r2=new RegExp("^.+\\@[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,4}|[0-9]{1,4})([ ]*)$");

	return(!r1.test(str)&&r2.test(str));
}

/**********************************************************************
FormatNumber(num,decimalNum,bolCommas,bolLeadingZero,bolParens)
	parameters:
		num - the number to format
		decimalNum - the number of decimal places to format the number to
		bolCommas - put commas as number separators.
		bolLeadingZero - true / false - display a leading zero for
										numbers between -1 and 1
		bolParens - true / false - use parenthesis around negative numbers
 	return:
		The formatted number!
 **********************************************************************/
function FormatNumber(num,decimalNum,bolCommas,bolLeadingZero,bolParens)
{ 
	if (isNaN(parseInt(num))) return "NaN";

	var tmpNum = num;
	var iSign = num < 0 ? -1 : 1; // Get sign of number
	
	// Adjust number so only the specified number of numbers after the decimal point are shown.
	tmpNum *= Math.pow(10,decimalNum);
	tmpNum = Math.round(Math.abs(tmpNum))
	tmpNum /= Math.pow(10,decimalNum);
	tmpNum *= iSign; // Readjust for sign

	var tmpNumStr = new String(tmpNum);

	// See if we need to strip out the leading zero or not.
	if (!bolLeadingZero && num < 1 && num > -1 && num != 0)
		if (num > 0)
			tmpNumStr = tmpNumStr.substring(1,tmpNumStr.length);
		else
			tmpNumStr = "-" + tmpNumStr.substring(2,tmpNumStr.length);
		
	// See if we need to put in the commas
	if (bolCommas && (num >= 1000 || num <= -1000)) {
		var iStart = tmpNumStr.indexOf(".");
		if (iStart < 0)
			iStart = tmpNumStr.length;

		iStart -= 3;
		while (iStart >= 1) {
			tmpNumStr = tmpNumStr.substring(0,iStart) + "," + tmpNumStr.substring(iStart,tmpNumStr.length)
			iStart -= 3;
		}		
	}

	// See if we need to use parenthesis
	if (bolParens && num < 0)
		tmpNumStr = "(" + tmpNumStr.substring(1,tmpNumStr.length) + ")";

	return tmpNumStr;		// Return our formatted string!
}

function fieldAdvance(obj,dir) 
{
	try
	{
		var maxLen = obj.maxLength;
		var curLen = obj.value.length;
		var parentForm = obj.form;
		var id;
		var nextElement;
		var prevElement;
		
		if (curLen >= maxLen) 
		{
			id = getElementID(obj);
			nextElement = (id + 1) % parentForm.elements.length;
			prevElement = (id - 1) % parentForm.elements.length;				
			parentForm.elements[nextElement].focus();
			FieldActiveHighlight(parentForm.elements[nextElement]);

			//alert('c:' + obj.name);
			//alert('p:' + parentForm.elements[prevElement].name);
			//alert('n:' + parentForm.elements[nextElement].name);
		}
		/*
		if (curLen == 0 && isBackspace && (obj.value == previousValue))
		{
			id = getElementID(obj);
			nextElement = (id + 1) % parentForm.elements.length;
			prevElement = (id - 1) % parentForm.elements.length;				
			parentForm.elements[prevElement].focus();
			FieldActiveHighlight(parentForm.elements[prevElement]);
		}
		*/
	}
	catch (ex)
	{
	}
			
}

function getElementID(obj)
{
	var i;
	var parentForm = obj.form;
	
	for (i = 0; i < parentForm.elements.length; i++)
		if (obj == parentForm.elements[i])
			break;
	return i;	
}

function ToggleSubmit(theForm, IsEnabled)
{
	var tempobj;
	try
	{
		if (document.all || document.getElementById) // IE & NS6
		{
			//screen thru every element in the form, and hunt down "submit" and "reset"
			for (i = 0; i < theForm.length; i++)
			{
				tempobj = theForm.elements[i];
				if ( tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset")
					tempobj.disabled = !IsEnabled;
			}
		}
	}
	catch (ex)
	{
	}
}

//Function to check whether element clicked is form element
function checkel(which)
{
	if (which.style && intended.test(which.tagName) )
	{
		if (isNS6 && (eventobj.nodeType == 3) )
			eventobj = eventobj.parentNode.parentNode
		return true
	}
	else
		return false
}

function FieldErrorHighlight(field) {

	var obj = field;
	
	if (field.tagName.toLowerCase() == 'input')
	{
		obj.style.borderColor = 'red';
		obj.style.borderStyle = 'solid';
		obj.style.borderWidth = '1px;';
	}
	else if (field.tagName.toLowerCase() == 'select')
	{
		obj.style.borderColor = 'red';
		obj.style.borderStyle = 'solid';
		obj.style.borderWidth = '1px;';
	}

}

function FieldRemoveHighlight(field) {

	var obj = field;
	
	if (field.tagName.toLowerCase() == 'input')
	{
		obj.style.borderColor = '';
		obj.style.borderStyle = '';
		obj.style.borderWidth = '';
	}
	else if (field.tagName.toLowerCase() == 'select')
	{
		obj.style.color = '';
	}

}

function FieldActiveHighlight(obj)
{

return;

	if (previousObj != '')
	{
		if (previousObj != obj)
		{
			if (checkel(previousObj))
			{
				previousObj.className = '';
			}
			previousObj = obj;
			if (checkel(obj))
			{
				obj.className = 'ActiveElement';
			}
		}
	}
	else
	{
		previousObj = obj
		if (checkel(obj))
		{
			obj.className = 'ActiveElement';
		}
	}
}

