// error messages
var sError_EmptyTextMessage = "Please enter information to all fields marked with an *.";
var sError_EmptyPassword = "Please supply a password.";
var sError_MultiSelectMessage = "Please select one or more from this list.";
var sError_SingleSelectMessage = "Please select one from this list.";
var sError_EmailMessage = "The email address you entered is invalid.";
var sError_DateMessage = "The date you entered was invalid.";
var sError_TooFewCharsPassword = "Your password needs to be a mininum of 5 characters";
var sError_AlphaNumberic = "Please enter only letters and/or numbers. This field is AlphaNumeric.";
var sError_UnMatchingPasswordsMessage = "The passwords you entered do not match.";
var sError_invalidPhone = "The number you entered is invalid. Please re-enter the number";
var sError_ZipMessage = "The Zip Code you entered is invalid."

//---------------------------------------------------------------------------
// main driver
//---------------------------------------------------------------------------

function validate(oForm)
{

	var bValid = false;	
	for(var i = 0; i < oForm.elements.length; i++)	// loop thru all elements
	{
		if(oForm.elements[i].name.charAt(0) == "_")	// looks at first char of the name of the form element... if '_' then
		{				
			bValid = false;
			switch(oForm.elements[i].type)							// checks for specific types
			{
				case "text":					
					if(!checkTextBox(oForm.elements[i]))
						return false;
					break;
				
				
				case "select-one":
					if(!checkSingleSelect(oForm.elements[i]))
						return false;
					break;
				
				case "select-multiple":
					if(!checkMultiSelect(oForm.elements[i]))
						return false;
					break;

				case "textarea":
					if(!checkTextArea(oForm.elements[i]))
						return false;
					break;
				
				
				case "password":
					if(!checkPassword(oForm.elements[i]))
						return false;
					break;
			}
		}	
	}
	
	if(!checkMatchingPasswords(oForm))					// check for matching passwords
		return false;
	
	if(!checkPhones(oForm))
		return false;
	
	if(!checkFax(oForm))
		return false;

		
	return true;
}

//---------------------------------------------------------------------------
// check textbox fields
//---------------------------------------------------------------------------

function checkTextBox( oElement )
{
	var sValue = oElement.value;
	sValue = Trim(sValue);
	oElement.value = sValue;
	
	if(isFax(oElement.name))
		return true;

	if(isPhone(oElement.name))
		return true;
	
	if(sValue == "")
	{
		enableErrorLabel(oElement.name);
		alert(sError_EmptyTextMessage);
		oElement.focus();
		return false;
	}
	
	if(isZip(oElement.name))
		if(!isValidZip(oElement.value))
		{
			enableErrorLabel(oElement.name);
			alert(sError_ZipMessage);
			oElement.focus();
			return false;
		}
	
	if(isEmail(oElement.name))
		if(!isValidEmail(oElement.value))
		{
			enableErrorLabel(oElement.name);
			alert(sError_EmailMessage);
			oElement.focus();
			return false;
		}
		disableErrorLabel(oElement.name);
	return true;
}


//---------------------------------------------------------------------------
// checks muliti selects
//---------------------------------------------------------------------------

function checkMultiSelect( oElement )
{
	for(var i = 0; i < oElement.options.length; i++)
		if(oElement.options[i].selected)
		{
			disableErrorLabel(oElement.name);
			return true;
		}
	enableErrorLabel(oElement.name);
	alert(sError_MultiSelectMessage);
	oElement.focus();
	return false;
}

//---------------------------------------------------------------------------
// checks textareas
//---------------------------------------------------------------------------

function checkTextArea(oElement)
{
	var sValue = Trim(oElement.value);
	if(sValue == "")
	{
		enableErrorLabel(oElement.name);
		alert(sError_EmptyTextMessage);
		oElement.focus();
		return false;
	}
	disableErrorLabel(oElement.name);
	return true;
}

//---------------------------------------------------------------------------
// checks single selects
//---------------------------------------------------------------------------

function checkSingleSelect( oElement )
{
	if(oElement.options.selectedIndex == 0)
	{
		enableErrorLabel(oElement.name);
		alert(sError_MultiSelectMessage);
		oElement.focus();
		return false;
	}

	disableErrorLabel(oElement.name);
	return true;
}

//---------------------------------------------------------------------------
// checks password fields
//---------------------------------------------------------------------------

function  checkPassword(oElement)
{
var sValue = oElement.value;
	sValue = Trim(sValue);
	oElement.value = sValue;
		
	if(sValue == "")
	{
		enableErrorLabel(oElement.name);
		alert(sError_EmptyPassword);
		oElement.focus();
		return false;
	}
	disableErrorLabel(oElement.name);
	return true;
}

//---------------------------------------------------------------------------
// checks for matching passwords
//---------------------------------------------------------------------------

function checkMatchingPasswords(oForm)
{
	var nPos = new Array();
	for(var i = 0; i < oForm.elements.length; i++)
		if(oForm.elements[i].name.indexOf("_pass") == 0)
			nPos[nPos.length] = i;

	if(nPos.length == 2)
	{
		if(oForm.elements[nPos[0]].value != oForm.elements[nPos[1]].value)
		{
			enableErrorLabel(oForm.elements[nPos[0]].name );
			enableErrorLabel(oForm.elements[nPos[1]].name );
			oForm.elements[nPos[0]].focus();
			alert(sError_UnMatchingPasswordsMessage);
			return false;			
		}
	}
	return true;
}

//---------------------------------------------------------------------------
// checks to see if field is fax fields
//---------------------------------------------------------------------------

function checkFax(oForm)
{
	var nFaxPos = new Array();
	for(var i = 0; i < oForm.elements.length; i++)
		if(oForm.elements[i].name.toLowerCase().indexOf("_fax") == 0)
			nFaxPos[nFaxPos.length] = i;
	
	if(nFaxPos.length == 3)
	{
		var sValue1 = Trim(oForm.elements[nFaxPos[0]].value);
		var sValue2 = Trim(oForm.elements[nFaxPos[1]].value);
		var sValue3 = Trim(oForm.elements[nFaxPos[2]].value);

		if((sValue1.length > 0) || (sValue2.length > 0) || (sValue3.length > 0))
		{
			if(isNaN(sValue1) || (sValue1.length < 3))
			{
				enableErrorLabel("_fax");
				oForm.elements[nFaxPos[0]].focus();
				alert(sError_invalidPhone);
				return false;
			}

			if(isNaN(sValue2) || (sValue2.length < 3))
			{
				enableErrorLabel("_fax");
				oForm.elements[nFaxPos[1]].focus();
				alert(sError_invalidPhone);
				return false;
			}
		
			if(isNaN(sValue3) || (sValue3.length < 4))
			{
				enableErrorLabel("_fax");
				oForm.elements[nFaxPos[2]].focus();
				alert(sError_invalidPhone);
				return false;
			}				
		}
		disableErrorLabel("_fax");
	}
	return true;
}

//---------------------------------------------------------------------------
// checks to see if field is phone fields
//---------------------------------------------------------------------------

function checkPhones(oForm)
{
	var nPhonePos = new Array();
	for(var i = 0; i < oForm.elements.length; i++)
		if(oForm.elements[i].name.toLowerCase().indexOf("_phone") == 0)
			nPhonePos[nPhonePos.length] = i;
	
	if(nPhonePos.length == 3)
	{
		var sValue1 = Trim(oForm.elements[nPhonePos[0]].value);
		var sValue2 = Trim(oForm.elements[nPhonePos[1]].value);
		var sValue3 = Trim(oForm.elements[nPhonePos[2]].value);
		
		if(isNaN(sValue1) || (sValue1.length < 3))
		{
			enableErrorLabel("_phone");
			oForm.elements[nPhonePos[0]].focus();
			alert(sError_invalidPhone);
			return false;
		}

		if(isNaN(sValue2) || (sValue2.length < 3))
		{
			enableErrorLabel("_phone");
			oForm.elements[nPhonePos[1]].focus();
			alert(sError_invalidPhone);
			return false;
		}
		
		if(isNaN(sValue3) || (sValue3.length < 4))
		{
			enableErrorLabel("_phone");
			oForm.elements[nPhonePos[2]].focus();
			alert(sError_invalidPhone);
			return false;
		}				
		disableErrorLabel("_phone");
	}
	return true;
}

//---------------------------------------------------------------------------
// checks to see if field is email field
//---------------------------------------------------------------------------

function isZip(sName)
{
	if(sName.indexOf("_zip") == 0)
		return true;
	return false;
}

//---------------------------------------------------------------------------
// checks to see if field is email field
//---------------------------------------------------------------------------

function isEmail(sName)
{
	if(sName.indexOf("_email") == 0)
		return true;
	return false;
}

//---------------------------------------------------------------------------
// checks to see if field is phone field
//---------------------------------------------------------------------------

function isPhone(sName)
{
	if(sName.toLowerCase().indexOf("_phone") == 0)
		return true;
	return false;
}

//---------------------------------------------------------------------------
// checks to see if field is fax field
//---------------------------------------------------------------------------

function isFax(sName)
{
	if(sName.toLowerCase().indexOf("_fax") == 0)
		return true;
	return false;
}



//---------------------------------------------------------------------------
// checks value to see if its a valid zip
//---------------------------------------------------------------------------

function isValidZip( sValue )
{
	sValue = Trim(sValue);
	if((sValue.length < 5) ||(isNaN(sValue)))
		return false;
	return true;	
}

//---------------------------------------------------------------------------
// checks value to see if its a valid email address
//---------------------------------------------------------------------------

function isValidEmail( sValue )
{
	var nAtPos = sValue.indexOf("@");
	var nAtPos2 = sValue.lastIndexOf("@");
	var nPeriodPos = sValue.indexOf(".");
	var nPeriodPos2 = sValue.lastIndexOf(".");
	var nWhitePos = sValue.indexOf(" ");
	if((nWhitePos != -1) || (nAtPos != nAtPos2) || (nAtPos == 0) || (nAtPos == sValue.length-1) || (nPeriodPos == 0) || (nPeriodPos == sValue.length-1) ||  (nPeriodPos == nAtPos+1)|| (nPeriodPos+1 == nAtPos) || (nAtPos == -1) || (nPeriodPos == -1))
		return false;
	return true;	
}

//---------------------------------------------------------------------------
//  turns labels red
//---------------------------------------------------------------------------

function enableErrorLabel( sName )
{
	if((oBrowser.isIE && oBrowser.version >= 5) || (oBrowser.isNS && oBrowser.version >= 5))
		document.getElementById("label"+sName).className = "error"
}

//---------------------------------------------------------------------------
// turns labels normal
//---------------------------------------------------------------------------

function disableErrorLabel( sName )
{
	if((oBrowser.isIE && oBrowser.version >= 5) || (oBrowser.isNS && oBrowser.version >= 5))
		document.getElementById("label"+sName).className = "normal"
}



