var regexOneOrMoreChar = /[\a-zA-Z+]/;
var regexOneOrMoreDigits = /[\d+]/;
var regexNoDigitsChars = /[^\da-zA-Z]/gi;

var DATE_SPLITTER = "/";

function setCaretAtEnd (field, pos) {
	if (field.createTextRange) {
		var range = field.createTextRange();
		range.moveStart('character', pos);
		range.collapse();
		range.select();
	}
	else {
		 field.setSelectionRange(pos, pos);
	}
}

function Mask_IsFieldValid(ctrlName) {
	var value = Mask_GetViewValue(ctrlName);
	var mask = Mask_GetMask(ctrlName).replace(/#/gi,'_');
	mask = mask.replace(/@/gi,'_');
	
	if (value == undefined || value.length == 0 || value == mask) {
		return true;
	}
	else {
		var i;
		for (i = 0; i < value.length; i++) {
			if (value.charAt(i) == '_') {
				return false;
			}
		}
		
		return true;
	}
}

//Updates the hidden fields for the postal mask by passing the form's html objects
function Mask_IsPostalCodeValid(postalFieldName){
	for(var i = 0 ; i < 6 ;  i++ ) {
		if(eval(postalFieldName).value.charAt(i)) {
			if(eval(postalFieldName).value.charAt(i) == "" || eval(postalFieldName).value.charAt(i) == " ") {
				alert(MASK_INVALID_POSTAL_CODE);
				
				Format_UpdateContent(eval(postalFieldName).name, "");
				eval("document.forms[0].__MASK__" + eval(postalFieldName).name + ".value=''");
				var valueToAssign = document.forms[0].elements[eval(postalFieldName).name].value.MaskValue('@#@ #@#');
				eval("document.forms[0].__MASK__" + eval(postalFieldName).name + ".value='" + valueToAssign + "'");
			}
		}
	}

	return;
}

function Mask_IsTelephoneValid(ctrlName) {
	return Mask_IsFieldValid(ctrlName);
}

function HandleTelephoneExtension(ctrlName) {
	if (!IsNumerical(ctrlName)) {
		alert(MASK_INVALID_TELEPHONE_EXTENSION);
		document.forms[0].elements[ctrlName].value = "";
	}
}

function Mask_ZipCodeValid(ctrlName) {
	return Mask_IsFieldValid(ctrlName);
}

function Mask_SINValid(ctrlName) {
	if (!Mask_IsFieldValid(ctrlName))
	{
		return false;
	}
	else
	{	
		if (document.forms[0].elements[ctrlName] != undefined)
		{
			var sin = document.forms[0].elements[ctrlName].value;
			var sinCheck = "121212121";		
			var i;
			var sum = 0;
			
			for (i = 0; i < sin.length; i++)
			{
				var result = (sin.substring(i, i+1) * 1) * (sinCheck.substring(i, i+1) * 1);

				if (result > 9)
				{
					result = 1 + (result % 10);
				}
				
				sum += result;
			}
			
			return (sum % 10 == 0);
		}
		
		return false;	
	}
}

function IsNumerical(ctrlName) {
	var numbers = '0123456789';
	var value = document.forms[0].elements[ctrlName].value;
	
	if (value == undefined || value.length == 0) {
		return true;
	}
	else {
		var i;
		for (i = 0; i < value.length; i++) {
			if (numbers.indexOf("" + value.charAt(i)) == -1) {
				return false;
			}
		}
		
		return true;
	}
}


function SplitPostalCode(ctrlName, fsaField, lduField)
{
	if (Mask_IsFieldValid(ctrlName))
	{
		var postalCode = document.forms[0].element[ctrlName].value;
		fsaField.value = postalCode.substring(0, 3);
		lduField.value = postalCode.substring(3, 6);
	}
}

function RemoveLeadingZeros(data)
{
	if (data != undefined)
	{
		var index = 0;
		
		for (i = 0; i < data.length; i++)
		{
			if (data.charAt(i) != '0')
			{
				break;
			}
			else
			{
				index++;
			}
		}
		
		return data.substring(index);
	}
	
	return data;
}