/* START OF THE VALIDATION FUNCTIONS */
/*
 *
 */
function IsFilled(p_input) {
	if (p_input.value.length != 0) {
        return true;
    }
    return false;
}

/*
 *
 */
function IsEmailAddress(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	var regex= new RegExp("^([.0-9a-z_-]+)@(([0-9a-z-]+\.)+[0-9a-z]{2,4})$");
	return regex.test(p_input.value);
}

/*
 *
 */
function IsAlphabetic(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
    var regex= new RegExp("^[a-zA-Z]*$");
    return regex.test(p_input.value);
}

/*
 *
 */
function IsNumeric(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	var regex= new RegExp("^[0-9]*$");
	return regex.test(p_input.value);
}

/*
 *
 */
function IsAlphaNumeric(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
    var regex= new RegExp("^[a-zA-Z0-9]*$");
    return regex.test(p_input.value);
}

/*
 *
 */
function IsNumeric(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	var regex= new RegExp("^[0-9]*$");
	return regex.test(p_input.value);
}

/*
 *
 */
function IsName(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	var listOfNames= new Array("administrator", "internet", "admin", "services", "service", "domain", "domaine");
	//Convert input to lower case
	var input= p_input.value.toLowerCase();
	
	//Check if the input in Alphabetic
	/*if (!IsAlphabetic(input)){
		return false;
	}*/
	
	//Loop through each restricted name
	for(i in listOfNames){
		if (input == listOfNames[i]){
			return false;
		}
	}
	
	var regex= new RegExp("^[a-zA-ZéÉèÈêÊçÇïÏ\'-]*$");
	return regex.test(p_input.value);
}

/*
 *
 */
function IsDomainName(p_input){
	if (p_input.value.length == 0) {
        return true;
    }
	
	var isDotCA= new RegExp("\.ca$");
	
	if (isDotCA.test(p_input.value)) {
		var regex= new RegExp("^[a-z0-9-]{3,44}\.[a-z\.{1}]{2,5}$");
	} else {
		var regex= new RegExp("^[a-z0-9-]{3,63}\.[a-z\.{1}]{2,4}$");
	}
	
	return regex.test(p_input.value);
}

/*
 *
 */
function IsURL(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	var regex= /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/
	return regex.test(p_input.value);
}

/*
 *
 */
function IsIPAddress(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	var regex= /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/;
	var ipaddr= p_input.value;
	
   	if (regex.test(ipaddr)) {
    	var parts = ipaddr.split(".");
      	if (parseInt(parseFloat(parts[0])) == 0) { return false; }
   		for (var i=0; i<parts.length; i++) {
       		if (parseInt(parseFloat(parts[i])) > 255) { return false; }
      	}
   return true;
   } else {
      return false;
   }
}

/*
 *
 */
function IsMatch(p_input1, p_input2){	
	return p_input1.value == p_input2.value;
}

/*
 *
 */
function IsMinLength(p_input, p_minValue){
	if (p_input.value.length == 0) {
        return true;
    }
    
	return p_input.value.length >= p_minValue;
}

/*
 *
 */
function IsMaxLength(p_input, p_minValue){
	if (p_input.value.length == 0) {
        return true;
    }
	
	return p_input.value.length <= p_minValue;
}

/*
 *
 */
function IsHigher(p_input, p_minValue) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	return (p_input.value * 1) > p_minValue;
}

/*
 *
 */
function IsLower(p_input, p_maxValue) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	return (p_input.value * 1) < p_maxValue;
}

/*
 * To use this function, you need a field named addressCountryCode 
 */
function IsPostalCode(p_input){
	if (p_input.value.length == 0) {
        return true;
    }
	
	var temp_postalCode= p_input.value.replace(' ', '');
	var postalCode= temp_postalCode.toUpperCase();
	var country= document.getElementById('addressCountryCode').value;

	if (country == 'CA'){
		var regex= new RegExp("^[A-Z][0-9][A-Z][0-9][A-Z][0-9]$");
		return regex.test(postalCode);
	}
	else if (country == 'US') {
		var objRegExp  = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
		//check for valid US Zipcode
		return objRegExp.test(postalCode);
	}	

	return true;
}

/*
 *
 */
function IsNameServer(p_input){
	if (p_input.value.length == 0) {
        return true;
    }
	
	var nameServer= p_input.value.split('.');
	
	// If there are less than 3 parts to the name, we don't have the machine's name so it is invalid
	if (nameServer.length < 3){
		return false;
	}
	
	for(var i=0; i < nameServer.length; i++)
	{
    	if (nameServer[i].length == 0){
    		return false;
    	}
	}
	
	var regex= new RegExp("^[-0-9a-zA-Z\.]+$");	
	return regex.test(p_input.value);
}

/*
 *
 */
function IsCreditCardNumber(p_input, p_ccTypeInput){
	if (p_input.value.length == 0) {
        return true;
    }
	
	var creditCardNumber= p_input.value;
	var creditCardName= p_ccTypeInput.value;
	var isValidFormat= true;
	var isPassCheck= true;
	var firstNum;
	var secondNum;
	var currentNum;
	var numSum= 0;
		
	switch (creditCardName) {
		case 'visa':
			var regex= new RegExp("^4[0-9]{12}([0-9]{3})?$");
			isValidFormat= regex.test(creditCardNumber);
    		break;
		case 'mastercard':
			var regex= new RegExp("^5[1-5][0-9]{14}$");
			isValidFormat= regex.test(creditCardNumber);
			break;
		case 'amex':
			var regex= new RegExp("^3[47][0-9]{13}$");
			isValidFormat= regex.test(creditCardNumber);
			break;
		default:
			return false;
			break;
	}
	
	var revCreditCardNumer= StrRev(creditCardNumber);
	
	for (var i= 0; i < revCreditCardNumer.length; i++) {
		currentNum= revCreditCardNumer.substring(i, i+1);

		// Double every second digit
		if ((i % 2) == 1) {
			currentNum= (currentNum * 2);
		}
			
		// Add digits of 2-digit numbers together
		if (currentNum > 9) {
			firstNum= (currentNum % 10);
			secondNum= ((currentNum - firstNum) / 10);
			currentNum= (firstNum + secondNum);
		}
			
		numSum+= (currentNum*1);
	}
		
	// If the total has no remainder it's OK
	isPassCheck= (numSum % 10 == 0);
		
	if (isValidFormat && isPassCheck) {
		return true;
	} else {
		return false;
	}
}

/*
 *
 */
function IsPhoneNumber(p_input){
	if (p_input.value.length == 0) {
        return true;
    }
	
	//Replace blank space
	var phoneNumber= p_input.value.replace(/ /g, '');
	//Replace hyphen
	var phoneNumber= phoneNumber.replace(/-/g, '');
	
	if (phoneNumber.length != 10) {
		return false; // Ex.: 5145559999
	}

	if (phoneNumber.length != 10) {
		return false;
	}

	return true;
}

/*
 *
 */
function IsValidCreditCardExpiration(p_input) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	var date = new Date();
	var currentMonth= date.getMonth() + 1;
	var currentYear= date.getYear() - 100;
	var expirationMonth= p_input.value.substring(2,4);
	var expirationYear= p_input.value.substring(0,2);
	
	if (expirationMonth > 12){
		return false;
	}
	
	if (currentYear > expirationYear) {
		return false;
	}
	else if (currentYear <= expirationYear) {
		if (currentMonth >= expirationMonth) {
			return false;
		}
	}
	
	return true;
}

/*
 *
 */
function IsInBetween(p_input, p_min, p_max) {
	if (p_input.value.length == 0) {
        return true;
    }
	
	if (p_input.value < p_min) {
		return false;
	}
	
	if (p_input.value > p_max) {
		return false;
	}
	
	return true;
}

/*
 *
 */
function IsRadioButtonSelected(p_input) {
	var isSelected= false;
	
	for(var i= 0; i < p_input.length; i++) {
		if(p_input[i].checked) {
			isSelected= true;
		}
	}
	
	return isSelected;
}

/*
 *
 */
function IsChecked(p_input) {
	return p_input.checked;	
}

/*
 *
 */
function TextareaIsFilled(p_input) {
	return p_input.value.length > 0;
}

/*
 *
 */
function HasDecimalPrecision(p_input, p_decimalPrecision) {
	var floatValueInString= p_input.value;
	var decimalNumber= p_decimalPrecision;

	var length= floatValueInString.length;
	var dotPos= StrrPos(floatValueInString, '.');
	var comPos= StrrPos(floatValueInString, ',');
	var pos= (dotPos == false) ? comPos : dotPos;

	if ((length - (pos + 1)) != decimalNumber) {
		return false;
	}

	return true;
}

/*
 *
 */
function StrRev(p_string) { 
    var ret = '', i = 0;
 
    for ( i = p_string.length-1; i >= 0; i-- ){
       ret += p_string.charAt(i);
    }
 
    return ret;
}

function StrrPos(p_srting, p_charToSearch, p_offset){
    var i = p_srting.lastIndexOf(p_charToSearch, p_offset); // returns -1
    return i >= 0 ? i : false;
}
/* END OF THE VALIDATION FUNCTIONS */
