// Support Functions
function strip(filter,str){
	var i,curChar;
	var retStr = '';
	var len = str.length;
	for(i=0; i<len; i++){
		curChar = str.charAt(i);
		if(filter.indexOf(curChar)<0) //not in filter, keep it
			retStr += curChar;
	}
	return retStr;
}
function reformat(str){
	var arg;
	var pos = 0;
	var retStr = '';
	var len = reformat.arguments.length;
	for(var i=1; i<len; i++){
		arg = reformat.arguments[i];
		if(i%2==1)
			retStr += arg;
		else{
			retStr += str.substring(pos, pos + arg);
			pos += arg;
		}
	}
	return retStr;
}
//End Support Functions
//Validation Rules
function notEmpty(str){
	if(strip(" \n\r\t",str).length ==0)
		return false;
	else
		return true;
}
function validateInteger(str){
	str = strip(' ',str);
	//remove leading zeros, if any
	while(str.length > 1 && str.substring(0,1) == '0'){
		str = str.substring(1,str.length);
	}
	var val = parseInt(str);
	if(isNaN(val))
		return false;
	else
		return true;
}
function validateFloat(str){
	str = strip(' ',str);
	//remove leading zeros, if any
	while(str.length > 1 && str.substring(0,1) == '0'){
		str = str.substring(1,str.length);
	}
	var val = parseFloat(str);
	if(isNaN(val))
		return false;
	else
		return true;
}
function validateUSPhone(str){
	str = strip("*() -./_\n\r\t\\",str);
	if(str.length == 10 || str.length == 7)
		return true;
	else
		return false;
}
function validateSSN(str){
	str = strip(" -.\n\r\t",str);
	if(validateInteger(str) && str.length == 9)
		return true;
	else
		return false;
}
function validateZip(str){
	str = strip("- \n\r\t",str);
	if(validateInteger(str)&&(str.length==9 || str.length==5))
		return true;
	else
		return false;
}
function validateCC(str,type){
	str = strip("-./_\n\r\t\\",str);
	if(type=="1")
		if(str.charAt(0)!="4")
			return false;
	if(type=="2")
		if(str.charAt(0)!="5")
			return false;
	if(type=="3")
		if(str.charAt(0)!="6")
			return false;
	if(type=="4")
		if(str.charAt(0)!="3")
			return false;
	if(validateInteger(str)&&((str.length==15&&type=="4") || str.length==16))
		return true;
	else
		return false;
}
function validateDate(str){
	var dateVar = new Date(str);
	if(isNaN(dateVar.valueOf()) || (dateVar.valueOf() ==0))
		return false;
	else
		return true;
}
function validateEMail(str){
	str = strip(" \n\r\t",str);
	if(str.indexOf("@")>-1 && str.indexOf(".")>-1)
		return true;
	else
		return false;
}
//End Validation Rules
//Formatting functions
function formatPhone(str){
	str = strip("*() -./_\n\r\t\\",str);
	if(str.length==10)
		return reformat(str,"(",3,") ",3,"-",4);
	if(str.length==7)
		return reformat(str,"",3,"-",4);
}
function formatSSN(str){
	str = strip(" -.\n\r\t",str);
	return reformat(str,"",3,"-",2,"-",4);
}
function formatZip(str){
	str = strip("- \n\r\t",str);
	if(str.length==5)
		return str;
	if(str.length==9)
		return reformat(str,"",5,"-",4);
}
function formatCC(str,type){
	str = strip("-./_\n\r\t\\",str);
	switch(type){
		case "1": 
			return reformat(str,"",4,"-",4,"-",4,"-",4);
			break;
		case "2": 
			return reformat(str,"",4,"-",4,"-",4,"-",4);
			break;
		case "3": 
			return reformat(str,"",4,"-",4,"-",4,"-",4);
			break;
		case "4":
			return reformat(str,"",4,"-",6,"-",5);
	}
}
function formatDate(str,style){
	var dateVar = new Date(str);
	var year = dateVar.getYear();
	if(year<10)
		year += 2000;
	if(year<100)
		year += 1900;
	switch(style){
		case "MM/DD/YY":
			return (dateVar.getMonth() + 1) + "/" + dateVar.getDate() + "/" + year;
			break;
		case "DD/MM/YY":
			return dateVar.getDate() + "/" + (dateVar.getMonth() + 1) + "/" + year;
			break;
		case "Month Day, Year":
			return getMonthName(dateVar) + " " + dateVar.getDate() + ", " + year;
			break;
		case "Day, Month Day, Year":
			return getDayName(dateVar) + ", " + getMonthName(dateVar) + " " + dateVar.getDate() + ", " + year;
			break;
		default:
			return (dateVar.getMonth() + 1) + "/" + dateVar.getDate() + "/" + year;
			break;
	}
}
//End Formatting Functions
