
/************
 *
 *		validators.js 
 *
 *		Last Modified: 10/04/2006 
 *
 *		Change Log:	
 *				10/04/2006	added SSNToString() function to display the number like 555-22-4545
 *
 */

////////////////////////////////
//		COMMON FUNCTIONS
////////////////////////////////

function isDigit( c ) 
{
	var digits = "0123456789";
	return (c.length == 1 && digits.indexOf( c ) != -1);
}

function getDigits( txt ) 
{
	var chr; 
	var num = "";
	for (var i = 0; i < txt.length; i++) 
	{
		chr = txt.charAt(i);
		if (isDigit( chr )) num += chr; 
	}
	return num;
}	

function AllCharsTheSame( str ) 
{
	var num = 1;
	var chr = str.charAt(0);

	for (var i = 1; i < str.length; i++) 
	{	
		if (chr == str.charAt(i)) 
			num++;
		else 
			break;
	}
	return (num == 9);
}

/////////////////////////////////////////
//		Social Security Number (SSN)
/////////////////////////////////////////

function CheckSSN( elm )
{
	if (!SSNIsValid( elm.value )) 
	{
		window.alert("Social Security Number is invalid.\nPlease, check it again.");
		elm.focus();
		return false;
	}
	return true;
}

function SSNIsValid( txt ) 
{
	var isValid = false;	
	if (txt.length >= 9) 
	{
		var ssn = getDigits( txt );
		if (ssn.length == 9 || !SSNIsRejected( ssn ) || !AllCharsTheSame( ssn )) 
		{
			var area   = ssn.substr(0,3);
			var group  = ssn.substr(3,2);
			var serial = ssn.substr(5,4);
			
			if (!SSNAreaIsNeverUsed( area ) && serial != "0000") 
			{
				isValid = true;
			
				// Advanced validation comes here ...
			}
		}
	}
	return isValid;
}

function SSNToString( txt ) 
{
	var str = txt;
	if (txt.length >= 9) 
	{
		var ssn = getDigits( txt );
		if (ssn.length == 9) 
		{
			var area   = ssn.substr(0,3);
			var group  = ssn.substr(3,2);
			var serial = ssn.substr(5,4);
			
			str = area + "-" + group + "-" + serial;
		}
	}
	return str;
}

function SSNIsRejected( ssn ) 
{
	var rejected = ["123456789","078051120"];
	var res = false;

	for (var i = 0; i < rejected.length; i++) 
	{
		if (ssn == rejected[i]) 
		{
			res = true;
			break;
		}
	}
	return res;
}

function SSNAreaIsNeverUsed( area )
{
	var res = (area.charAt(0) == "9");
	if(!res)
	{
		var rejected = ["000","666"];
		for (var i = 0; i < rejected.length; i++) 
		{
			if (area == rejected[i]) 
			{
				res = true;
				break;
			}
		}
	}
	return res;
}

/////////////////////////////////////////
//		Phone Number
/////////////////////////////////////////

function CheckPhone( elm )
{
	if (!PhoneIsValid( elm.value )) 
	{
		window.alert("Phone Number is invalid.\nIt should contains at least 10 digits: (area code + number).\nPlease, include your country code if you are outside of the USA or Canada.");
	//	elm.focus();
		return false;
	}
	return true;
}

function PhoneIsValid( txt ) 
{
	var isValid = false;	
	if (txt.length >= 10)
	{
		var num = getDigits( txt );
		if (num.length >= 10)
		{
			var pos   = 0;
			var extra = "";
			if (num.length > 10)
			{
				pos    = num.length - 10;
				extra  = num.substr(0,pos);
			}
			var area   = num.substr(pos,3);
			var number = num.substr(pos+3,7);
			
			if (area.charAt(0) != "0" && number.charAt(0) != "0") 
			{
				isValid = true;
			
				// Advanced validation comes here ...
			}
		}
	}
	return isValid;
}

function PhoneToString( txt ) 
{
	var str = txt;	
	if (txt.length >= 10)
	{
		var num = getDigits( txt );
		if (num.length >= 10)
		{
			var pos   = 0;
			var extra = "";
			if (num.length > 10)
			{
				pos    = num.length - 10;
				extra  = num.substr(0,pos);
			}
			var area   = num.substr(pos,3);
			var number = num.substr(pos+3,7);
			
			str = ((extra != "") ? extra + " - " : "") + "(" + area + ")" + " " + number.substr(0,3) + " - " + number.substr(3,4);
		}
	}
	return str;
}

