/*
<SCRIPT SRC="includes/validateForm.js" LANGUAGE="JavaScript"></SCRIPT>
*/
var valArray = new Array();

function validateForm(thisForm, validationType)
{
	var retVal = true;	
	setValidateFields(validationType);
	var i, arLen, fieldObj;
	arLen = valArray.length;
	var sErrorMessage = "";	
	var currFieldValid = true;
	var firstInvalidField = null;	
	for(i=0;i<arLen;i++)
	{
		currFieldValid = true;
		fieldObj = eval("thisForm." + valArray[i][0]);
		switch(valArray[i][1])
		{
			case 1://numeric
			{
				if(!isNumeric(fieldObj.value, false, false))
				{
					currFieldValid = false;
				}
				break;
			}
			case 2://String
			{
				if(isEmpty(fieldObj.value))
				{
					currFieldValid = false;
				}
				break;
			}
			case 3://date
			{
				break;
			}
			case 4://email
			{
				if(!checkEmail(fieldObj.value))
				{
					currFieldValid = false;
				}
				break;
			}
			case 5://phone
			{
				if(!checkPhoneNumber(fieldObj.value))
				{
					currFieldValid = false;
				}
				break;
			}
			case 6://phone
			{
				if(!Any_Object_Checked(fieldObj))
				{
					currFieldValid = false;
				}
				break;
			}
		}
		if(!currFieldValid)
		{
			sErrorMessage = addToMessage(sErrorMessage, valArray[i][2]);
			retVal = retVal && currFieldValid;
			if(!firstInvalidField)
			{
				if(fieldObj.length)
				{
					firstInvalidField = fieldObj[0];
				}
				else
				{
					firstInvalidField = fieldObj;
				}
			}
		}
	}
	if(!retVal)
	{
		alert(sErrorMessage);
		if(firstInvalidField)
		{
			firstInvalidField.focus();
			firstInvalidField.select();
		}
	}
	return retVal;
}

function setValidateFields(validationType)
{
	valArray = new Array();
	switch(validationType)
	{
		case 1://contact
		{
			addToValidArray("fname", 2, "First name is a required field");
			addToValidArray("lname", 2, "Last name is a required field");
			addToValidArray("company", 2, "Company is a required field");
			addToValidArray("phone", 5, "Enter phone number in nnn-nnn-nnnn format");
			addToValidArray("email", 4, "Enter a valid Email address");
			break;
		}
		case 2://software req
		{
			addToValidArray("fname", 2, "First name is a required field");
			addToValidArray("lname", 2, "Last name is a required field");
			addToValidArray("company", 2, "Company is a required field");
			addToValidArray("phone", 5, "Enter phone number in nnn-nnn-nnnn format");
			addToValidArray("email", 4, "Enter a valid Email address");
			break;
		}
		case 3://web register for events
		{			
			addToValidArray("event_name", 6, "Select an event", false);
			addToValidArray("fname", 2, "First name is a required field");
			addToValidArray("lname", 2, "Last name is a required field");
			addToValidArray("title", 2, "Title is a required field");
			addToValidArray("company", 2, "Company is a required field");
			addToValidArray("phone", 5, "Enter phone number in nnn-nnn-nnnn format");
			addToValidArray("email", 4, "Enter a valid Email address");
			break;
		}
		case 4://tell a friend
		{			
			addToValidArray("toName", 2, "To is a required field");
			addToValidArray("fromName", 2, "Your name is a required field");
			addToValidArray("toEmail", 4, "Enter a valid To Email address");
			addToValidArray("email", 4, "Enter a valid From Email address");
			addToValidArray("subject", 2, "Subject is a required field");
			addToValidArray("message", 2, "Message is a required field");
			break;
		}
	}
}

function addToValidArray(fieldName, fieldType, sMessage, bCanFocus)
{
	/*
	1 = numeric
	2 = string
	3 = date
	4 = email
	5 = phone
	6 = checkbox or radio
	*/
	if(arguments.length <= 3)
	{
		bCanFocus = true;
	}
	var newField = new Array();
	newField[0] = fieldName;
	newField[1] = fieldType;
	newField[2] = sMessage;
	newField[3] = bCanFocus;
	valArray[valArray.length] = newField;
}

function addToMessage(sMessage, sMsg)
{
	return sMessage + "\n" + sMsg + "          ";
}

function checkPhoneNumber(phone_number) 
{
	var trimmedNumber = phone_number.replace(/[\s\(\)-]/g, "");
  	if(/^\d{10,}$/.test(trimmedNumber))
  	{
    	return true;
  	}
  	return false;
}

function checkPhoneNumber2(phone_number) 
{
  if (/^\s*\(?\s*(\d\s*){3}\s*\)?\s*[-\s]?\s*(\d\s*){3}\s*[-\s]?\s*(\d\s*){4}\s*$/.test(phone_number))
  {
    return true;
  }
  return false;
}


function checkEmail(email) 
{
  if (/^[\w']+([\.-]?[\w']+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email))
  {
    return true;
  }
  return false;
}

function isEmpty(sVal)
{		
	var returnValue = true;
	
	returnValue = /^\s*$/.test(sVal);
	
	return returnValue;	
}

function isNumeric(sVal, allowNegative, allowDecimal)
{		
	var sValTemp = parseFloat(sVal);
	var returnValue = true;
	returnValue = returnValue && (!isNaN(sValTemp));
	
	if(allowNegative)
	{
		if(allowDecimal)
		{
			returnValue = returnValue && (/^[+-]?\d*(\.(\d)+)?$/.test(sVal));
		}
		else
		{
			returnValue = returnValue && (/^[+-]?\d*$/.test(sVal));
		}
	}
	else
	{
		if(allowDecimal)
		{
			returnValue = returnValue && (/^\d*(\.(\d)+)?$/.test(sVal));
		}
		else
		{
			returnValue = returnValue && (/^\d*$/.test(sVal));
		}
	}
	return returnValue;	
}

function Any_Object_Checked(chObj)
{
	var chLen, i;
	var returnValue = false;
	if(chObj)
	{
		chLen = chObj.length;
		if(chLen)
		{
			for(i=0;i<chLen;i++)
			{
				if(chObj[i].checked)
				{
					returnValue = true;
					break;
				}
			}
		}
		else
		{
			if(chObj.checked)
			{
				returnValue = true;
			}
		}
	}	
	return returnValue;
}


function enableObject(obj, bEnable)
{	
	obj.disabled = !bEnable;
}