//*******************Main function to select which validation to use***************************
//For each field you want to validate, it must have an id set to one of the validators (ie. id="isText").
//It must also have an alt tag with the plain text name of the field for the error message (ie. alt="First Name")
//You must link to the external .js file on every page you need to have validation on.
//You must add this onSubmit function to the form tag: onsubmit="return checkForm(this)"

//validate = the kind of validation
//val = field value
//fname = field name
//frm = form name
//cnt = number of the field

function validateForm(validate,val,fname,frm,cnt)
{
	if (validate == "isText")
	{
		if (validateEmpty(val,fname,frm,cnt))
		{
			return true;
		}
		return false;
	}
	else if (validate == "isInteger")
	{
		if (validateInteger(val,fname,frm,cnt))
		{
			return true;
		}
		return false;
	}
	else if (validate == "isNumber")
	{
		if (validateNumeric(val,fname,frm,cnt))
		{
			return true;
		}
		return false;
	}
	else if (validate == "isEmail")
	{
		if (validateEmail(val,fname,frm,cnt))
		{
			return true;
		}
		return false;
	}
	else if (validate == "isSelect")
	{
		if (validateSelect(val,fname,frm,cnt))
		{
			return true;
		}
		return false;
	}
	else if (validate == "isGreater0")
	{
		if (validateGreater0(val,fname,frm,cnt))
		{
			return true;
		}
		return false;
	}
	else if (validate == "isSearch")
	{
		if (validateSearch(val,fname,frm,cnt))
		{
			return true;
		}
		return false;
	}
	else if (validate == "isSame")
	{
		if (validateSame(val,fname,frm,cnt))
		{
			return true;
		}
		return false;
	}
}
//*********************************************************************************************

function Trim(str)
{
    return str.replace(/^\s+|\s+$/g, "");
};

//*******************Functions to call within functions*****************************************
function isEmpty(inputStr)
{
	if (Trim(inputStr) == "" || inputStr == null) {
		return true;
	}
	return false;
}
//********************Function to validate if a field is empty*************************************
function validateEmpty(val,fname,frm,cnt)
{
	inputStr = val.toString();
	if (isEmpty(inputStr))
	{
		alert("Please fill out the " + fname + " field.");
		if(frm.elements[cnt].type.indexOf("select") == -1)
		{
		    frm.elements[cnt].focus();
		    frm.elements[cnt].select();
		}
		else
		    frm.elements[cnt].focus();
		return false;
	}
	return true;
}
//********************Function to validate email address************************
function validateEmail(val,fname,frm,cnt)
{
	inputStr = val.toString();
	if (isEmpty(inputStr)) 
	{
		alert("Please enter an email address.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false;
	}
	else if (val.indexOf("@") == -1)
	{
		alert("Please enter a correct email address. Missing '@'");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false;		
	}
	else if (val.indexOf(".") == -1)
	{
		alert("Please enter a correct email address. Missing '.'.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false;
	}	
	return true;	
}	
		
//*******************Function to validate value entered is a number*************************
function validateNumeric(val,fname,frm,cnt)
{	
	oneDec = false
	inputStr = val.toString();
	if (isEmpty(inputStr)) 
	{
		alert("Only numbers and a decimal point are allowed in the " + fname + " field.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false; 
	}
	else
	{
		for (var i = 0; i < inputStr.length; i++)
		{
			var oneChar = inputStr.charAt(i);
			if (i == 0 && oneChar == "-")
			{
				continue;
			}
			if (oneChar == "." && !oneDec)
			{
				oneDec = true;
				continue;
			}
			if (oneChar < "0" || oneChar > "9")
			{
				alert("Only numbers and a decimal point are allowed in the " + fname + " field.");
				frm.elements[cnt].focus();
				frm.elements[cnt].select();
				return false;
			}
		}	
		return true;
	}
}
	
//***********************Function to validate if value entered is an integer*********************
function validateInteger(val,fname,frm,cnt)
{
	inputStr = val.toString();
	if (isEmpty(inputStr)) 
	{
		alert("Please enter only whole numbers in the " + fname + " field.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false; 
	} 
	else 
	{
		for (var i = 0; i < inputStr.length; i++) 
		{
			var oneChar = inputStr.charAt(i);
			if (oneChar < "0" || oneChar > "9") 
			{
				alert("Please enter only whole numbers in the " + fname + " field.");
				frm.elements[cnt].focus();
				frm.elements[cnt].select();
				return false;
			}
		}
		return true;
	}
}

//**************************************Function to validate select box************************************************
function validateSelect(val,fname,frm,cnt) 
{
	if (val == "") 
	{
		alert("Please select a(n) " + fname + ".");
		return false;
	}
	return true;
}

//***********************Function to validate if value entered is greater than 0*********************
function validateGreater0(val,fname,frm,cnt)
{
	inputStr = val.toString();
	if (isEmpty(inputStr)) 
	{
		alert("Please enter only whole numbers in the " + fname + " field.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false; 
	} 
	else if (inputStr.length == 1 && inputStr.charAt(0) == 0) 
	{
		alert("Please enter a whole number greater than 0 in the " + fname + " field.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false;
	}
	else 
	{
		for (var i = 0; i < inputStr.length; i++) 
		{
			var oneChar = inputStr.charAt(i);
			if (oneChar < "0" || oneChar > "9") 
			{
				alert("Please enter only whole numbers in the " + fname + " field.");
				frm.elements[cnt].focus();
				frm.elements[cnt].select();
				return false;
			}
		}
		return true;
	}
}

//***********************Function to validate if value entered is an integer*********************
function validateSearch(val,fname,frm,cnt)
{
	inputStr = val.toString();
	if (isEmpty(inputStr)) 
	{
		alert("Please fill out the " + fname + " field.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false; 
	} 
	else 
	{
		if (val.length < 3) 
		{
			alert("Please enter at least 3 characters in the " + fname + " field.");
			frm.elements[cnt].focus();
			frm.elements[cnt].select();
			return false;
		}
		return true;
	}
}

//***********************Function to validate if two fields are the same*********************
function validateSame(val,fname,frm,cnt)
{
	var input1 = frm.elements[cnt].value
	var input2 = frm.elements[cnt + 1].value
	if (isEmpty(input1))
	{
		alert("Please make sure both " + fname + " fields are the same.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false;
	}
	else if (isEmpty(input2))
	{
		alert("Please make sure both " + fname + " fields are the same.");
		frm.elements[cnt + 1].focus();
		frm.elements[cnt + 1].select();
		return false;
	}
	else if (input1 != input2)
	{
		alert("Please make sure both " + fname + " fields are the same.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false;
	}
	return true;
}

//**************************************Main function to check the form************************************************
function checkForm(frm)
{
	if(frm.Submit != null)
		frm.Submit.disabled = true;
	
	for (var i=0;i<frm.length;i++)
	{
		if (frm.elements[i].id > "" && frm.elements[i].id.substring(0,2) == "is")
		{
			if (validateForm(frm.elements[i].id,frm.elements[i].value,frm.elements[i].alt,frm,i))
			{
				if (i<frm.length)
					continue;
				else
					return true;
			}
			if(frm.Submit != null)
				frm.Submit.disabled = false;
			return false;
		}
	}
	return true;
}




//*****************These have not been modified to work with new validation****************

//***********************Function to validate phone number*********************
function validatePhone(field) 
{
	var input = field.value
	inputStr = field.value.toString()
	if (isEmpty(input))
	{
		alert("Please fill out all fields.");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false; 
	}
	else
	{
		for (var i = 0; i < inputStr.length; i++)
		{
			var oneChar = inputStr.charAt(i);
			
			if (oneChar < "0" || oneChar > "9")
			{
				alert("Please enter a 10 digit phone number. (555-555-5555)");
				frm.elements[cnt].focus();
				frm.elements[cnt].select();
				return false;
			}
		}
		document.order.Telephone.value = document.order.phone.value + "-" + document.order.phone1.value + "-" + document.order.phone2.value
		return true;
	}
}
//***********************Function to convert phone number*********************
function convertPhone(support) 
{
	document.support.telephone.value = document.support.phone.value + "-" + document.support.phone1.value + "-" + document.support.phone2.value
}	

//***********************Function to check if two fields are the same**************************
//*****Email*****
function validateSameEmail(order) {
	var input3 = document.order.email
	var input4 = document.order.email1
	if (isEmpty(input3.value)) {
		alert("Please enter an email address.");
		select(input3);
		return false;
	}else if (input3.value.indexOf("@") == -1) {
		alert("Please enter a correct email address. Missing '@'");
		select(input3);
		return false;		
	}else if (input3.value.indexOf(".") == -1) {
		alert("Please enter a correct email address. Missing '.'.");
		select(input3);
		return false;
	}else if (isEmpty(input4.value)) {
		alert("Please enter an email address.");
		select(input4);
		return false;
	}else if (input4.value.indexOf("@") == -1) {
		alert("Please enter a correct email address. Missing '@'");
		select(input4);
		return false;		
	}else if (input4.value.indexOf(".") == -1) {
		alert("Please enter a correct email address. Missing '.'.");
		select(input4);
		return false;
	}else if (input3.value != input4.value) {
		alert("Please make sure both email field are the same.");
		select(input3);
		return false;
	}
	return true;
}

//********************************************Functions to validate a correct domain name*****************************
function validateDomain(field)
{
	var input = field.value
	inputStr = field.value.toString();
	if (isEmpty(input))
	{
		alert("Please enter a valid name in the field.");
		select(field);
		return false; 
	}
	else
	{
	for (var i = 0; i < inputStr.length; i++)
	{
		var oneChar = inputStr.charAt(i);
		if (oneChar == ".")
		{
			alert("Please enter a valid name in the field. Periods are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == " ")
		{
			alert("Please enter a valid name in the field. Spaces are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "'")
		{
			alert("Please enter a valid name in the field. Apostrophes are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "!")
		{
			alert("Please enter a valid name in the field. Exclamations are not allowed.");
			select(field);
			return false;
		} 
		else if (oneChar == "&")
		{
			alert("Please enter a valid name in the field. Ampersands are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "#")
		{
			alert("Please enter a valid name in the field. # is not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "@")
		{
			alert("Please enter a valid name in the field. @ is not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "*")
		{
			alert("Please enter a valid name in the field. Asterisks are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "%")
		{
			alert("Please enter a valid name in the field. Percents are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "$")
		{
			alert("Please enter a valid name in the field. Dollar signs are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "_") 
		{
			alert("Please enter a valid name in the field. Underscores are not allowed.");
			select(field);
			return false;
		} 
		else if (oneChar == "+") 
		{
			alert("Please enter a valid name in the field. Plusses are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "=")
		{
			alert("Please enter a valid name in the field. Equals are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "^")
		{
			alert("Please enter a valid name in the field. ^ is not allowed.");
			select(field);
			return false;
		} 
		else if (oneChar == "<")
		{
			alert("Please enter a valid name in the field. < is not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == ">")
		{
			alert("Please enter a valid name in the field. > is not allowed.");
			select(field);
			return false;
		} 
		else if (oneChar == ",")
		{
			alert("Please enter a valid name in the field. Commas are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "?")
		{
			alert("Please enter a valid name in the field. Question marks are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "~") 
		{
			alert("Please enter a valid name in the field. Tildes are not allowed.");
			select(field);
			return false;
		} 
		else if (oneChar == "`")
		{
			alert("Please enter a valid name in the field. ` is not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "[")
								{
			alert("Please enter a valid name in the field. Brackets are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "]")
		{
			alert("Please enter a valid name in the field. Brackets are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == ";")
		{
			alert("Please enter a valid name in the field. Semi-colons are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == ":") 
		{
			alert("Please enter a valid name in the field. Colons are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "{")
		{
			alert("Please enter a valid name in the field. Curly braces are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "}")
		{
			alert("Please enter a valid name in the field. Curly braces are not allowed.");
			select(field);
			return false;
		}
		else if (oneChar == "(") 
								{
			alert("Please enter a valid name in the field. Parenthesis are not allowed.");
			select(field);
			return false;
		} 
		else if (oneChar == ")") 
		{
			alert("Please enter a valid name in the field. Parenthesis are not allowed.");
			select(field);
			return false;
		}
	}
	return true;
	}
}
//************************Functions to validate correct dates*************************
function validateMonth(field) 
{
	var input = parseInt(field.value, 10)
	if (isEmpty(input)) 
	{
		alert("Be sure to enter a month value.");
		select(field)
		return false;
	}
	else
	{
		if (isNaN(input))
		{
			alert("Month values must be numbers only.");
			select(field);
			return false;
		}
		else
		{
			if (!inRange(input,1,12)) 
			{
				alert("Enter a month between 1 and 12.");
				select(field);
				return false;
			}
		}
	}
	calcDate();
	return true;
}
function validateDay(field) 
{
	var input = parseInt(field.value, 10)
	if (isEmpty(input)) 
	{
		alert("Be sure to enter a day value.");
		select(field)
		return false;
	}
	else 
	{
		if (isNaN(input)) 
		{
			alert("Day values must be numbers only.");
			select(field);
			return false;
		} 
		else 
		{
			var mm = parseInt(document.test.month.value, 10);
			var dd = parseInt(document.test.day.value, 10);
			var yy = parseInt(document.test.year.value, 10);
			var monthMax = new Array("","January","February","March","April","May","June","July","August","September","October","November","December")
			if ((mm == 4 || mm == 6 || mm == 9 || mm == 11) &&  dd > 30)
			{
				alert(monthMax[mm] + " only has 30 days.");
				select(field);
				return false;
			}
			else if ((mm == 1 || mm == 3 || mm == 5 || mm == 7 || mm == 8 || mm == 10 || mm == 12) && dd > 31)
			{
				alert(monthMax[mm] + " only has 31 days.");
				select(field);
				return false;	
			}
			else if (yy % 4 > 0 && dd >28 && mm == 2)
			{
				alert("February of " + yy + " only has 28 days.");
				select(test.day);
				return false;
			} 
			else if (dd > 29 && mm == 2)
			{
				alert("February of " + yy + " only has 29 days.");
				select(test.day);
				return false; 
			}	
		} 
		calcDate();
		return true;
	}
}

function validateYear(field)
{
	var input = parseInt(field.value, 10)
	if (isEmpty(input))
	{
		alert("Be sure to enter a year value.");
		select(field)
		return false;
	}
	else
	{
		if (isNaN(input))
		{
			alert("Year values must be numbers only.");
			select(field);
			return false;
		}
			
	}
	calcDate();
	return true;
}

function calcDate() {
	var mm = parseInt(document.test.month.value, 10);
	var dd = parseInt(document.test.day.value, 10);
	var yy = parseInt(document.test.year.value, 10);
	if (yy < 100 && yy > 30)
	{
		yy += 1900
	}
	else if (yy <= 30)
	{
		yy += 2000
	}
	document.test.fullDate.value = mm + "/" + dd + "/" + yy
}

//**************************Function to validate if radio button is checked************************************
function validateRadio(order) {
	for (var i = 0; i < order.R1.length; i++) {
		if (document.order.R1[i].checked) {
		return true;
		}
	}
	alert("Please select a web site.");
	return false;
}
//*******************************************Function to validate if check box is checked***********************
function validateCheck(order) {
	if (document.order.agree.checked) {
		return true;
		} else {
		alert("Please check the box to agree to our terms in order to continue.")
		return false;
		}
	return true;
}

//***********************Function to validate if the passwords are entered and unique*********************
function validatePassword(val,fname,frm,cnt)
{
	var input1 = frm.PCPw
	var input2 = frm.SA1Pw
	var input3 = frm.SA2Pw2
	
	if (isEmpty(val))
	{
		alert("Please enter a password in the " + fname + " field");
		frm.elements[cnt].focus();
		frm.elements[cnt].select();
		return false;
	}
	
	if (input1.value == input2.value)
	{
		if (frm.PCFName.value != frm.SA1FName.value || frm.PCLName.value != frm.SA1LName.value)
		{
			alert("Each user must have a unique password.");
			frm.elements[cnt].focus();
			frm.elements[cnt].select();
			return false;
		}
	}
	
	if (input1.value == input3.value)
	{
		if (frm.PCFName.value != frm.SA2FName2.value || frm.PCLName.value != frm.SA2LName2.value)
		{
			alert("Each user must have a unique password.");
			frm.elements[cnt].focus();
			frm.elements[cnt].select();
			return false;
		}
	}
	return true;
}
