// Validation v3
// Last modified: April 09, 2008
// By Frédéric Fortier

//Allowed Character
function allowedChar(strValidCharacterSet, strToBeChecked) {
    var i;
    if (isBlank(strToBeChecked) == 0) {return false}
    StrLen = strToBeChecked.length;
	for (i=0; i < StrLen; i++) {
        if (strValidCharacterSet.indexOf(strToBeChecked.charAt(i)) == -1) {
            return false;
        }
    }
    return true;
};

//Search Array
function searchArr(SearchedEle, ArrayToSearch) {
	var i;
    if (SearchedEle.length == 0) {return false}
    ArrayLen = ArrayToSearch.length;
	for (i=0; i < ArrayLen; i++) {
        if (SearchedEle == ArrayToSearch[i]) {
            return true;
        }
    }
    return false;
};

//Determine boolean value
function isBool(b){
	if(b == 'true' || b == 1){
		return true;
	}
	return false;
};

//Determine if the value is blank
function isBlank(s){
	return !Boolean(s.replace(/\s+/g,'').length);
};

//Generate array of element to be validated
function GenerateEleArr(fEle) {
	var EleArr = [];
	var ExcludeInputArr = ['hidden','submit','reset','button'];

	for (i=0; i<fEle.length; i++) {
		if (!searchArr(fEle[i].name, EleArr) && !searchArr(fEle[i].type, ExcludeInputArr)){
			EleArr.push(fEle[i].name);
		}
	}
	return EleArr;
};
//Validation Function
function validateV2(EleArr,iLangID){
	var TextEleArr = ['text','password','textarea'];
	var empty_fields = "";
	var errors = "";

	iLangID = typeof(iLangID) == "undefined" ? 1 : iLangID;

	if(iLangID == 1){
		vLangID = "EN";
	}else{
		vLangID = "FR";
	}

	for (i=0; i<EleArr.length; i++){
		//Initialyze Element
		eName = EleArr[i].replace(/(\[)|(\])/g,'');// Remove Square Braquets from the name of the element (Checkbox and Multiple DropDown)
		e = document.getElementById(eName);	
		/*alert(e);
		if(e == null){
			//return false;
		}
		try{*/
		eFormat = e.getAttribute('Format');				// Format
		eMinLen = e.getAttribute('MinLength');	    	// Minimum Lenght
		eMaxLen = e.getAttribute('MaxLength');			// Maximum Length
		eMin = e.getAttribute('MinValue');				// Minimum Value
		eMax = e.getAttribute('MaxValue');				// Maximum Value
		eMinSelected = e.getAttribute('MinSelected');	// Minimum Selected
		eMaxSelected = e.getAttribute('MaxSelected');	// Maximum Selected
		eAllowedChar = e.getAttribute('AllowedChar');	// Allowed Character
		eCompare = e.getAttribute('Compare');			// Compare
		eVal = e.value;									// Element Value
		eType = e.type;									// Element Type
		eTitle = e.title;								// Element Title
		/*}
		catch(err){
			alert(err);
			alert(EleArr[i]);
			alert(eName);
			return false;
		}*/
		
		//alert('nane = '+e.name+ ' type = '+e.type+ ' value = '+e.value+ ' required = '+e.getAttribute('valrequired'));
		if(isBool(e.getAttribute('valrequired'))){
			if (((eVal == null) || (eVal == "") || isBlank(eVal)) && (searchArr(eType, TextEleArr))) {
				empty_fields += '\n'+eTitle;
			}
		}
		
		//Required Checkbox/Radio button
		if((eType == "radio" || eType == "checkbox") && isBool(e.getAttribute('valrequired'))) {
			EleByName = document.getElementsByName(e.name);

			crcheck = false;
			EleByNameLen = EleByName.length;
			for (k=0; k<EleByNameLen; k++){
				if (EleByName[k].checked){
					crcheck = true;
				}
			}
			
			if(!crcheck) {
				empty_fields += '\n'+eTitle;
			}
		}

		//String Validation
		if (searchArr(eType, TextEleArr)) {
			//Minimum length
			if(!!eMinLen && eVal.length < eMinLen && isBool(e.getAttribute('valrequired'))){
				errors += eval("vTrans.Trans[3]."+vLangID) + eTitle + eval("vTrans.Trans[4]."+vLangID) + eMinLen + eval("vTrans.Trans[5]."+vLangID);
			}

			//Maximum length
			if(!!eMaxLen && eVal.length > eMaxLen && isBool(e.getAttribute('valrequired'))){
				errors += eval("vTrans.Trans[3]."+vLangID) + eTitle + eval("vTrans.Trans[6]."+vLangID) + eMinLen + eval("vTrans.Trans[5]."+vLangID);
			}

			//Comparision
			if(eCompare != null && document.getElementById(eCompare).value != eVal){
				errors += eval("vTrans.Trans[17]."+vLangID) + eTitle + eval("vTrans.Trans[18]."+vLangID) + document.getElementById(eCompare).title + eval("vTrans.Trans[16]."+vLangID);
			}

			//Allowed Character
			if(!!eAllowedChar && !allowedChar(eAllowedChar, eVal)) {
				errors += eval("vTrans.Trans[3]."+vLangID) + eTitle + eval("vTrans.Trans[9]."+vLangID);
			}
		}

		//Email format validation
		if ((eFormat == 'email') && (searchArr(eType, TextEleArr)) && !!eVal) {
			var EmailFilter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

			if (!EmailFilter.test(eVal)){
				errors += eval("vTrans.Trans[7]."+vLangID) + eVal + eval("vTrans.Trans[8]."+vLangID);
			}
		}

		//Numeric format validation
		if ((eFormat == 'numeric') && (searchArr(eType, TextEleArr)) && !!eVal) { 
			var NumFilter = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;

			if ((!NumFilter.test(eVal)) || (((eMin != null) && (eVal < eMin)) && ((eMax != null) && (eVal > eMax)))) {
				errors += eval("vTrans.Trans[3]."+vLangID) + eTitle + eval("vTrans.Trans[10]."+vLangID);

				if (eMin != null) {
					errors += eval("vTrans.Trans[11]."+vLangID) + eMin;
				}
				
				if (eMax != null && eMin != null) {
					errors += eval("vTrans.Trans[12]."+vLangID) + eMax;
				} else if (eMax != null) {
					errors += eval("vTrans.Trans[13]."+vLangID) + eMax;
				}

				errors += ".\n";
			}
		}

		//Date format validation
		if ((eFormat == 'date') && (searchArr(eType, TextEleArr)) && !!eVal) {
			var DateFilter = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}$/;
			var cSeparator = eVal.substring(2,3);
			var DateArr = eVal.split(cSeparator);
			var LookupArr = {'01':31,'03':31,'04':30,'05':31,'06':30,'07':31,'08':31,'09':30,'10':31,'11':30,'12':31};
			var iMonth = parseInt(DateArr[0],10);
			var iDay = parseInt(DateArr[1],10);
			var iYear = parseInt(DateArr[2]);
                            
			validDate = ((DateFilter.test(eVal)) && ((LookupArr[DateArr[0]] != 'undefined' && (iDay <= LookupArr[DateArr[0]] && iDay != 0)) || ((iMonth == 2) && (iDay > 0 && iDay < 29) || (iDay == 29 && ((iYear % 4 == 0) && (iYear % 100 != 0) || (iYear % 400 == 0))))));
	
			if(!validDate){
				errors += eval("vTrans.Trans[13]."+vLangID) + eTitle + eval("vTrans.Trans[14]."+vLangID);
			}
		}

		if (eType == "select-one" && e.selectedIndex == 0 && isBool(e.getAttribute('valrequired'))) {
			errors += eval("vTrans.Trans[15]."+vLangID) + eTitle + eval("vTrans.Trans[16]."+vLangID);
		} else if (eType == "select-multiple" && isBool(e.getAttribute('valrequired'))) {
			var SelectedCnt = 0;		    
			
			for (k=0; k<e.options.length; k++) {
				if(e.options[k].selected){
					SelectedCnt++;
				}
			}
			
			if(SelectedCnt < eMinSelected){
				errors += eval("vTrans.Trans[17]."+vLangID) + eTitle + eval("vTrans.Trans[19]."+vLangID) + eMinSelected + eval("vTrans.Trans[20]."+vLangID);                    
			}
		}
	}
	
	if (!empty_fields && !errors) {
		return true;
	} else {
	    msg =  eval("vTrans.Trans[1]."+vLangID);
		msg += eval("vTrans.Trans[0]."+vLangID);

		if (empty_fields){
			msg += eval("vTrans.Trans[2]."+vLangID) + empty_fields + '\n';
		}

		if (errors){
			msg += '\n'+errors;			
		}

		alert(msg);

		return false;
	}	
};
