//
// Phone number validations
//
var digits = "0123456789";
var phoneNumberDelimiters = "()- ";
var validWorldPhoneChars = phoneNumberDelimiters + "+";
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}
function trim(s) {
	var i;
    var returnString = "";

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if ((c != " ") && (c != "(") && (c != ")") && (c != "-")) returnString += c;
    }
    return returnString;
}

function stripCharsInBag(s, bag) {   
	var i;
    var returnString = "";

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function ValidatePhone(strPhone){
	var bracket=3;

	strPhone=trim(strPhone);
	if(strPhone.indexOf("-")!=-1)bracket=bracket+1;
	if(strPhone.indexOf("(")!=-1 && strPhone.indexOf("(")>bracket)return false;

	var brchr=strPhone.indexOf("(");
	if(strPhone.indexOf("(")!=-1 && strPhone.charAt(brchr+2)!=")")return false;
	if(strPhone.indexOf("(")==-1 && strPhone.indexOf(")")!=-1)return false;

	s=stripCharsInBag(strPhone,validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function NiceTelephoneDisplay(str) {
	var strReturn='';
	var lCode='';
	var mCode;
	var rCode='';
	
	str = trim(str);
	lCode = str.substr(0,3);
	mCode = str.substr(3,3);
	rCode = str.substr(6,4)
	strReturn = '(' + lCode + ') ' + mCode + '-' + rCode;
	return strReturn;
}

//
// Email address validations
//
function ValidateEmail(str) {
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	
	if (str.indexOf(at)==-1) return false;
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr) return false;
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr) return false;
	if (str.indexOf(at,(lat+1))!=-1) return false;
	if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) return false;
	if (str.indexOf(dot,(lat+2))==-1) return false;
	if (str.indexOf(" ")!=-1) return false;
	return true;
}

//
// Canadian postal code validation
//
function ValidatePostalCode(str) {
	strlen=str.length;
	if ((strlen!==6) && (strlen!==7)) return false;
	str = str.toUpperCase();
	s1='ABCEGHJKLMNPRSTVXY';s2=s1+'WZ';d3='0123456789';s3=' ';
	if (strlen == 6) {
		if (s1.indexOf(str.charAt(0)) < 0) return false;
		if (d3.indexOf(str.charAt(1)) < 0) return false;
		if (s2.indexOf(str.charAt(2)) < 0) return false;
		if (d3.indexOf(str.charAt(3)) < 0) return false;
		if (s2.indexOf(str.charAt(4)) < 0) return false;
		if (d3.indexOf(str.charAt(5)) < 0) return false;
	}
	else {
		if (s1.indexOf(str.charAt(0)) < 0) return false;
		if (d3.indexOf(str.charAt(1)) < 0) return false;
		if (s2.indexOf(str.charAt(2)) < 0) return false;
		if (s3.indexOf(str.charAt(3)) < 0) return false;
		if (d3.indexOf(str.charAt(4)) < 0) return false;
		if (s2.indexOf(str.charAt(5)) < 0) return false;
		if (d3.indexOf(str.charAt(6)) < 0) return false;
	}
	return true;
}

function NicePostalCodeDisplay(str) {
	var strReturn='';
	var lCode='';
	var rCode='';
	
	str = trim(str);
	if (str.length == 6) {
		lCode = str.substr(0,3);
		rCode = str.substr(3,3)
	}
	else {
		lCode = str.substr(0,3);
		rCode = str.substr(4,3)
	}
	strReturn = lCode.toUpperCase() + ' ' + rCode.toUpperCase();
	return strReturn;
}

