var zipcode_format= /^\d{5}$/;
var email_format=/^\w{2,}[\.]{0,1}\w{0,}[\.]{0,1}\w{1,}[@]\w{2,}[\.]{0,1}\w{1,}[\.]{1}com$|net$|org$|gov$|edu$|.us$/
var phone_format = /^\d{3}[-]{1}\d{3}[-]{1}\d{4}$/;
var state_arr= "|DC|VA|MD|WV|DE|NY|CT|CO|TX|CA|FL|TN|SC|NC|GA|RI|VT|NM|MI|IL|WI|MA|KS|AK|AL|AR|AZ|HI|IA|ID|IN|KY|LA|ME|MN|MO|MS|MT|NH|NJ|OH|OK|PA|SD|UT|WA|WY|"

/**
function _CF_isEmailAddress(e, old){
	if (e.value==""){return;}
	var at=e.value.indexOf('@')
	var com=e.value.indexOf(".com")
	var edu=e.value.indexOf(".edu")
	var org=e.value.indexOf(".org")
	var gov=e.value.indexOf(".gov")
	var net=e.value.indexOf(".net")
	
	if (at==-1){
		alert("email should contain @")
		_CF_getFocus(e,old);
		return false;
	}
	
    if((com==-1)&&(edu==-1)&&(org==-1)&&(net==-1)&&(gov==-1)){
		alert("email is not in right format")
		_CF_getFocus(e,old);
		return false;
	}
	return true;
}
**/
function _CF_getLeadingSpace(val){
	for(var i=0; i<=val.length-1; i++){
		if(val.charAt(i)!=' '){return i;}
	}
	return 0;
}

function _CF_getTrailingSpace(val){
	for(var i=0; i<=val.length-1; i++){
		if(val.charAt(val.length-1-i)!=' '){return val.length-1-i;}
	}
	return 0;
}


function _CF_isEmailAddress(e, old){
	var intAt=0;
	var intDot=0;
	var intCom=false;
	var bCom=false;
	var atPos=0;
	var whtCom="";
	var bWrongPos=false;
	var arr= new Array('.com','.net','.gov','.edu','.org');
	
	if(e.value == "") { return false;}
	//var email_format = new RegExp ("\\w{2,}[.]{0,1}\\w{0,}[.]{0,1}\\w{1,}[@]\\w{2,}[.]{1}com$|net$|org$|gov$|edu$")
	e.value=e.value.substring(_CF_getLeadingSpace(e.value),_CF_getTrailingSpace(e.value)+1)
	
	/**
	if(!email_format.test(e.value)){
		alert("Please input an email address with correct format\njohn@home.com");
		e.value=old;
		return;
	}
	**/
	for(var i=0; i<=e.value.length-1;i++){
		if(e.value.charAt(i) =='.'){intDot++;}
		if(e.value.charAt(i) =='@'){intAt++; atPos=i;}
	}
	
	for(var i=0; i<=arr.length;i++){
		if (e.value.substr(e.value.length-4, 4).toLowerCase()==arr[i]){
			bCom=true;
			break;
		}
	}
	if(e.value.substr(e.value.length-3, 3).toLowerCase()=='.us'){bCom=true;}
	
	for(var i=0; i<=arr.length;i++){
		if (e.value.length-e.value.indexOf(arr[i]) != 4 ){
			if(e.value.indexOf(arr[i]) != -1){
				intCom=true;
				whtCom = arr[i]
				break;
			}
		}
	}
	
	bWrongPos=(atPos==0)||(atPos==e.value.length-5)
	
	if(bWrongPos){
		alert("Please check your email address and make sure you have correct email format");
		//e.value="";
		e.value=old;
		return false;
	}
	if(intDot > 4){
		alert("Please check your email address, there are "+ intDot+" '.' in your email address")
		e.value=old;
		return false;
	}
	if(intAt != 1){
		alert("Please check your email address, there are "+ intAt + " '@' in your email address.")
		e.value=old;
		return false;
	}
	if(intCom){
		alert("Please check your email address and make sure it contains only one " + whtCom +"\nand please make sure it ends with " + whtCom + ' also.')
		e.value=old;
		return false;
	}
	if(!bCom){
		alert("Please check your email address and make sure it ends with\n .com/.gov/.edu/.org/.net.'")
		e.value=old;
		return false;
	}
	return true;
}

function _CF_validatePhone(e, old){
	var validchar="1,2,3,4,5,6,7,8,9,0,(,),.,-, ";
	if (e.value==""){return true;}
	for(var i=0; i <=e.value.length-1;i++){
		if (validchar.indexOf(e.value.charAt(i))== -1){
			alert("There is at least one invalid charactor inside phone number.");
			e.value="";
			return false;
		}
	}
	if(!phone_format.test(e.value)){
		if(!confirm("Are you sure ["+e.value+"] is the correct phone number?")){
			_CF_getFocus(e, old);
			return false;
		}
	}
	return true;
}

function _CF_getFocus(e, old){
	e.value=old;
	e.focus();
	e.select();
}

function _CF_validateExt(e, wht){
	if(e.value==""){return;}
	var ext=e.value.split('.')[e.value.split('.').length-1].toUpperCase();
	if(wht.indexOf(ext, 0)==-1){
		alert("Please upload the correct file format.")
		e.select()
		return;
	}
}

function _CF_validateZipcode(e,old){
	if (e.value==""){return;}
	if(!zipcode_format.test(e.value)){
		alert("Incorrect zip code format.\nCorrect format is: 12345");
		_CF_getFocus(e,old);
		return false;
	}
	return true;
}

function isDate(e){
	var iCheck = 0;
	
	var	d = new Date();
	var currYear = d.getFullYear();
	
	//if user don't input anything, then don't go through this function
	if (e.value == ""){return true;}
	//use RegExp object to check date format
	
	//check to see if there are two /s
	for(var i = 0; i < parseInt(e.value.length,10)-1; i ++){
		if (e.value.charAt(i)== '/')
			iCheck ++;
	}
	if (iCheck != 2){error_message(e, "invalid date format.  Correct format is: (mm/dd/yyyy)"); return false;}
	
	//get year, month, day if input format is valid
	var dArr = e.value.split("/");
	var sMonth = dArr[0];
	var sDay = dArr[1];
	var sYear = dArr[2];
	
	//check month
	if (sMonth > 12 || sMonth < 1 ){error_message(e, "invalid date."); return false;}
	//check day
	if (sDay > 31 || sDay < 1){error_message(e, "invalid date."); return false;}
	
	//check year value and add 20 if year value is two digits
	if (sYear.length == 2){
		var y = currYear.toString().substr(2, 2);
		if (sYear == y){sYear = '2' + '0' +  sYear ;}
		else {error_message(e, "invalid date."); return false;}
	}
	else{
		if (sYear < 1900 || sYear > currYear){error_message(e, "invalid year."); return false;}
	}
	if (sMonth == 4||sMonth == 6||sMonth == 9||sMonth == 11){
		if (sDay > 30){
			error_message(e, "invalid date."); return false;
		}
	}
	
	
	//check leap year
	if (sMonth == 2){						
		var leap = parseInt(sYear/4)
		if (isNaN(leap)) {
			error_message(e, "invalid month."); return false; 
		}
		if (sDay > 29){error_message(e, "invalid date."); return false;}

		if (sDay == 29 && ((sYear/4)!=parseInt(sYear/4))) {error_message(e, "invalid date."); return false;}	
	}
	
	
	//add 0 infront of month and day if they are one digit
	if (sMonth.length == 1){sMonth = '0'+ sMonth;}
	if (sDay.length == 1){sDay = '0'+ sDay;}
	
	//reset user input date if everything is correct
	e.value = sMonth + '/' + sDay + '/' + sYear;
	return true;
}

function error_message(f, msg){
	alert(f.value + " is an " + msg + " Please check your date entry and try again.");
	f.select();
	f.focus();	
	return false;
}

function _CF_deselectTopOption(e){
	for(var i=1;i<=e.length-1;i++){
		if(e.options[i].selected){
			e.options[0].selected=false;
			return;
		}
	}
}

function _CF_inputUpperCase(e){
	if(e.value==""){return;}
	if (state_arr.indexOf('|'+e.value.toUpperCase()+'|') == -1){
		alert("Please enter a correct state name.");
		e.value="";
		e.focus();
		return;
	}
	e.value=e.value.toUpperCase();

}