var new_fieldname = ""
function validateForm(form)
{
	//If you would like to use this script please do not remove the next 4 lines
	//script_name = "Form Validator ver 2.0"
	//action =  "Checks Required, Integer and Date (Added Numeric, Email, Money)"
	//copyright = "(c) 1998 - Art Lubin / Artswork"
	//email = "perflunk@aol.com"
	//additional = "modified 2004, Eric Cross"
	var x = form.elements.length
	var message = ""
	var more_message = ""
	var showmsg = "no"
	x = x - 1
	var disablesubmit = document.getElementById("submitbutton");
	if (disablesubmit) disablesubmit.disabled=true;
	for (var i = 0; i <= x; i++) {
		var messenger = form.elements[i].name
		messenger = messenger.substring(0, 2)
		var fieldname = form.elements[i].name
		fieldname = fieldname.substring(2)
		{
			if (messenger == "r_") { //Required Check
				more_message = r_check(form,x,fieldname,i)
			}
			else if (messenger == "i_") { //Integer Check
				more_message = i_check(form,x,fieldname,i)
			}
			else if (messenger == "d_") { //Date Check
				more_message = d_check(form,x,fieldname,i)
			}
			else if (messenger == "t_") { //Time Check
				more_message = t_check(form,x,fieldname,i)
			}
			else if (messenger == "n_") { //Numeric Check
				more_message = n_check(form,x,fieldname,i)
			}
			else if (messenger == "e_") { //Email Check
				more_message = e_check(form,x,fieldname,i)
			}			
			else if (messenger == "m_") { //Money Check
				more_message = m_check(form,x,fieldname,i)
			}			
			else if (messenger == "c_") { //Credit Card Check
				more_message = c_check(form,x,fieldname,i)
			}			
			if (more_message != "") {
				if (message == "") {
					message = more_message
					more_message=""
				}
				else {
			        message = message + "\n" + more_message
					more_message=""
				}
	        }
			if (message > "") {
				showmsg = "yes"
			}													
		}	
	}
	
	//This code will prevent a submit if data is incorrect
	if (showmsg == "yes") {
		alert("The following form field(s) were incomplete or incorrect:\n\n" + message + "\n\n Please complete or correct the form and submit again.")
		if (disablesubmit) disablesubmit.disabled=false;
		return false;
	}
	else {
		return true;
	}
		
}
//End Function

//Required Check
function r_check(form,x,fieldname,i) {
	var msg_addition = ""
	new_fieldname = fieldname
	for (var y = 0; y <= x; y++) {
		if ((form.elements[y].type == "radio" || form.elements[y].type == "checkbox") && form.elements[y].name == new_fieldname && form.elements[y].checked == true) {
			msg_addition = ""
			break
		}
		else if ((form.elements[y].type == "radio" || form.elements[y].type == "checkbox") && form.elements[y].name == new_fieldname && form.elements[y].checked == false) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
		else if (form.elements[y].type == "select-one") {
			var l = form.elements[y].selectedIndex
			if (form.elements[y].name == fieldname && form.elements[y].options[l].value != "") {
				msg_addition = ""
				break
			}
			else if (form.elements[y].name == fieldname && form.elements[y].options[l].value == "") {
				msg_addition = form.elements[i].value;
				HilightItem(form.elements[y],'#B60008','#FFFFFF');
			}
		}
		else if (form.elements[y].name == fieldname && form.elements[y].value == "" && form.elements[y].type != "radio" && form.elements[y].type != "checkbox" && form.elements[y].type != "select-one") {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
			break
		}
		else if (form.elements[y].name == fieldname && form.elements[y].value != "" && form.elements[y].type != "radio" && form.elements[y].type != "checkbox" && form.elements[y].type != "select-one") {
			msg_addition = ""
		}	
	}
	return(msg_addition)
}
			
//Integer Check
function i_check(form,x,fieldname,i) {
	var msg_addition = ""
	for (var y = 0; y <= x; y++) {
		if (form.elements[y].name == fieldname)
		break
	}						
	inputStr = form.elements[y].value.toString()
	if (inputStr == "") {
		//msg_addition = form.elements[i].value
	}
	else {
		var reNumber = /(^-?\d\d*$)/;
		if(!reNumber.test(inputStr)) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
	}
	return(msg_addition)
}	
	
//Numeric Check
function n_check(form,x,fieldname,i) {
	var msg_addition = ""
	for (var y = 0; y <= x; y++) {
		if (form.elements[y].name == fieldname)
		break
	}						
	inputStr = form.elements[y].value.toString()
	if (inputStr == "") {
		//msg_addition = form.elements[i].value
	}
	else {
		var reNumber = /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/;
		if(!reNumber.test(inputStr)) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
	}
	return(msg_addition)
}	
	
//Money Check
function m_check(form,x,fieldname,i) {
	var msg_addition = ""
	for (var y = 0; y <= x; y++) {
		if (form.elements[y].name == fieldname)
		break
	}						
	inputStr = form.elements[y].value.toString()
	if (inputStr == "") {
		//msg_addition = form.elements[i].value
	}
	else {
		var reNumber = /^((\$)?[0-9]+|(\$)?[0-9]{1,3}(,[0-9]{3})*)(\.[0-9]{1,2})?$/;
		if(!reNumber.test(inputStr)) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
	}
	return(msg_addition)
}	
	
//Email validation
function e_check(form,x,fieldname,i) {
	var msg_addition = "";
	var inputStr = "";
	for (var y = 0; y <= x; y++) {
		if (form.elements[y].name == fieldname)
			break;
	}						
	inputStr = form.elements[y].value.toString();
	if (inputStr == "") {
		//msg_addition = form.elements[i].value
	}
	else {
//		var reNumber = /(^[a-z]([a-z_\.]*)@([a-z_\-\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{3})(\.[a-z]{2})*$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{3})(\.[a-z]{2,3})(\.[a-z]{2})*$)/i;
		var reNumber = /^([a-z0-9_\.\-])+\@(([a-z0-9\-])+\.)+([a-z0-9]{2,4})+$/i;
		if(!reNumber.test(inputStr)) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
	}
	return(msg_addition);
}	

//date must be in MM/DD/YY format OR M/D/YY or a MIX of the two
function d_check(form,x,fieldname,i) {
	var msg_addition = ""	
	for (var y = 0; y <= x; y++) {
		if (form.elements[y].name == fieldname)
		break
	}		
	var inputStr = form.elements[y].value
	if (inputStr == "") {
		//msg_addition = form.elements[i].value
	}
	else {
		var reNumber = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2,4}$/;
		if(!reNumber.test(inputStr)) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
		else{
			var strSeparator = inputStr.substring(2,3) //find date separator
			var arrayDate = inputStr.split(strSeparator); //split date into month, day, year
			//create a lookup for months not equal to Feb.
			var arrayLookup = { '01' : 31,'03' : 31, '04' : 30,'05' : 31,'06' : 30,'07' : 31,'08' : 31,'09' : 30,'10' : 31,'11' : 30,'12' : 31}
			var intDay = parseInt(arrayDate[1],10);
			//check if month value and day value agree
			if(arrayLookup[arrayDate[0]] != null) {
				if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0) {
					return(msg_addition); //found in lookup table, good date
				}
			}
			//check for February
			var intYear = parseInt(arrayDate[2],10);
			var intMonth = parseInt(arrayDate[0],10);
			if( ((intYear % 4 == 0 && intDay <= 29) || (intYear % 4 != 0 && intDay <=28)) && intDay !=0) {
				return(msg_addition); //Feb. had valid number of days
			}
		}
		msg_addition = form.elements[i].value;
		HilightItem(form.elements[y],'#B60008','#FFFFFF');
	}
	return(msg_addition)
}

//Time validation
function t_check(form,x,fieldname,i) {
	var msg_addition = "";
	var inputStr = "";
	for (var y = 0; y <= x; y++) {
		if (form.elements[y].name == fieldname)
			break;
	}						
	inputStr = form.elements[y].value.toString();
	if (inputStr == "") {
		//msg_addition = form.elements[i].value
	}
	else {
		var reNumber = /^(0?[1-9]|1[012])(:[0-5]\d){0,2}( [AP]M)$/i;
		if(!reNumber.test(inputStr)) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
	}
	return(msg_addition);
}	

//Credit Card validation
function c_check(form,x,fieldname,i) {
	var msg_addition = "";
	var inputStr = "";
	for (var y = 0; y <= x; y++) {
		if (form.elements[y].name == fieldname)
			break;
	}						
	inputStr = form.elements[y].value.toString();
	if (inputStr == "") {
		//msg_addition = form.elements[i].value
	}
	else {
		// remove non-numerics
		var s = inputStr;
		var v = "0123456789";
		var w = "";
		for (ii=0; ii < s.length; ii++) {
			x = s.charAt(ii);
			if (v.indexOf(x,0) != -1)
			w += x;
		}
		// validate number
		j = w.length / 2;
		if (j < 6.5 || j > 8 || j == 7) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
		k = Math.floor(j);
		m = Math.ceil(j) - k;
		c = 0;
		for (ii=0; ii<k; ii++) {
			a = w.charAt(ii*2+m) * 2;
			c += a > 9 ? Math.floor(a/10 + a%10) : a;
		}
		for (ii=0; ii<k+m; ii++) c += w.charAt(ii*2+1-m) * 1;
		//return (c%10 == 0);

		if(c%10 != 0) {
			msg_addition = form.elements[i].value;
			HilightItem(form.elements[y],'#B60008','#FFFFFF');
		}
	}
	return(msg_addition);
}	

function HilightItem(x,bgColor,FontColor) {
	x.style.backgroundColor = bgColor;
	x.style.color = FontColor;
	try {x.focus();}
	catch(err) {return false;}
}

function UnHilightItem(x) {
	// Don't need to set the colors to return to default.
	if(x.value != '') {
		x.style.backgroundColor = '#FFFFFF';
		x.style.color = '#000000';
	}
}

function mask(str, format, validchars)
{
	if (validchars == null) {var validchars = "0123456789";}
	var tempstring = "";var returnstring = "";var tempstringpointer = 0;var returnstringpointer = 0;count = 0;
	if (window.event && window.event.keyCode == 8) {
		//alert(validchars.indexOf(Right(str.value,1)));
		if (validchars.indexOf(Right(str.value,1))!=1) {
			str.value = Left(str.value, str.value.length)
			//alert(str.value)
			return null;
			//length = length - 1;
		}
	}
	var length = str.value.length;
	for (var x=0; x<length; x++){if (validchars.indexOf(str.value.charAt(x))!=-1) {tempstring = tempstring + str.value.charAt(x);};};
	for (x=0; x<format.length;x++){if (tempstringpointer <= tempstring.length){if (format.substr(x, 1)=="#"){returnstring = returnstring + tempstring.substr(tempstringpointer, 1);tempstringpointer++;}else{returnstring = returnstring + format.substr(x, 1);}}}
	str.value = returnstring;
}	

function Left(str, n){
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}

function Right(str, n){
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}
