//////////////////////////////////////////////////////////////
//															//
//	Name:	Validations.js									//
//															//
//	Description:	This file holds a common set of 		//
//					functions used for validation of 		//
//					some common items.						//
//															//
//////////////////////////////////////////////////////////////

//
//	Name:	hasValidChars
//
//	Description:	This function will return true if all 
//					of the chars in str are in the chars 
//					string passed in.
//
//					This function will also return false
//					if the str passed in is of length 0
//
function hasValidChars( str, chars )
{
	var str = str.toLowerCase();
	if(str.length == 0) 
		return false;
	
	var chars = chars.toLowerCase();
	var cArr = str.split("");
	var len = cArr.length;
	for(var i = 0; i < len; i++)
	{
		var valid = (chars.indexOf(cArr[i]) != -1)
		if(!valid) return false;
	}
	
	return true;
}
//
//	Name:	isEmail
//
//	Description:	This function will check to see that an email
//					is correct. The rules are that there is a user
//					and a domain in the string. The second rule is that 
//					the second level domain is not 1 character long.
//					The third rule is that the entire adddress is composed of
//					0-9 or a-z or -, . @
function isEmail(str)
{
	var str = str.toLowerCase();
	
	if(!hasValidChars( str,"0123456789abcdefghijklmnopqrstuvwxyz-_.@"))
	{
		return false;
	}
	
	var parts = str.split("@");
	//
	//	Do we have a user and domain group?
	//
	if(parts.length!=2) 
		return false;
	
	var domain = parts[1].split(".");
	var ext = domain.pop();
	//
	//	IS the domain longet than 2 characters
	//
	if(ext.length<2) 
		return false;
	//
	//	was there a root domain? (e.g. do we have a domain after pulling out the root?);
	//
	if ( domain.length < 1 )
		return false;
	
	return true;
}

function isUSPhoneNumber(str)
{
	var str = str.toString();
	var paren = str.indexOf("(");
	if(paren!=-1)
	{
		str = str.split("(");
		if(str.length!=2)
			return false;
		
		str = str.join("").split(")");
		if(str.length!=2) 
			return false;
		str = str.join("");		
	}
	
	var dash = str.indexOf("-")!=-1;
	if(dash){
		str = str.split("-");
		if(str.length>4) return false;
		str = str.join("");		
	}
	
	if(!hasValidChars(str,"0123456789")) return false;
	
	var char;
	if(str.length ==  10){
		char = str.substr(0,1);
	}else if(str.length == 11){
		char = str.substr(1,1);
	}else{
		return false;
	}
	
	return char!=0;
}


function isCreditCard (str, min)
{
	var str = str.toString();
	str = str.split("-").join("");
	str = str.split(" ").join("");	
	
	if(!hasValidChars(str,"0123456789"))
	{
		return false;
	}
	
	var min = Number(min);
	if(!isNaN(min))
	{
		if(str.length<min) return false;
	}
	
	var numbers = str.split("");
	var len = numbers.length;
	
	for(var i = 0; i < len; i++, i++)
	{
		var num = numbers[i]*2;
		num = num.toString();
		if(num.length == 2){
			num = Number(num.substr(0,1)) + Number(num.substr(1));
		}			
		numbers[i] = num;
	}
	
	var mNum = 0;
	for(var i = 0; i < len; i++)
	{
		mNum+=Number(numbers[i]);
	}

	return (mNum%10==0);
}

function isDigit(n)
{
	if ( ( n >= 0x30 ) && ( n <= 0x39 ) )
		return true;
	else
		return false;
}

function isCreditCard (str, min)
{
	var str = str.toString();
	str = str.split("-").join("");
	str = str.split(" ").join("");	
	
	if(!hasValidChars(str,"0123456789")){
		return false;
	}
	
	var min = Number(min);
	if(!isNaN(min)){
		if(str.length<min) return false;
	}
	
	var numbers = str.split("");
	var len = numbers.length;
	
	for(var i = 0; i < len; i++, i++){
		var num = numbers[i]*2;
		num = num.toString();
		if(num.length == 2){
			num = Number(num.substr(0,1)) + Number(num.substr(1));
		}			
		numbers[i] = num;
	}
	
	var mNum = 0;
	for(var i = 0; i < len; i++){
		mNum+=Number(numbers[i]);
	}

	return (mNum%10==0);
}
