//******** FORM FIELD VALIDATION FUNCTIONS:**********
//* - parameter 'required' is boolean - indicates if field is required on form
//*
//* validRequired(formField,"fieldLabel")
//*   -- checks if field is empty
//*
//* menuSelected(formField, fieldLabel)
//*   -- checks if a selection has been made for drop down menu
//*
//* checkMail(thisField, emailLabel, required)
//*   -- checks email address and if required is true, checks for empty field
//*
//* invalidCharMinLength(formField, charset, minLength, fieldLabel, validityAlertMsg, required)
//*   -- checks if field contains 'charset' and if required is true, checks for empty field
//*   -- check if field meets minimum required length - minLength
//*   -- validityAlertMsg is used to tell the user what to enter (i.e. Please enter only letters and numbers for the address field.)
//*
//* invalidChar(formField, charset, fieldLabel, validityAlertMsg, required)
//*   -- checks if field contains 'charset' and if required is true, checks for empty field
//*   -- validityAlertMsg is used to tell the user what to enter (i.e. Please enter only letters and numbers for the address field.)
//*
//* validZipcode(formField, fieldLabel, strCountry, required)
//*   -- checks for 5 or 5-3 zip code entry, - or space is optional if the strCountry is "US"
//*
//* validCanadaPostalCode(formField, fieldLabel, strCountry, required)
//*   -- checks for a valid Canadian postal code - strCountry should be set to "CA" for Canada
//*  
//* validPhone(strPhoneNum, phoneLabel, required)
//*   -- checks for areacode(optional) phone-prefix and phone in parens around areacode optional, 
//*   -- space, -./ has delimiter optional and if required is true, checks for empty field;
//*   -- does not allow repeating numbers in area code, 911, 123
//*   -- does not the numbers 555-1212, 123-4567, 456-7890
//*
//* getSelectedRadio(buttonGroup)
//*   -- returns selected radio button index
//*
//* getSelectedRadioValue(buttonGroup) 
//*   -- returns selected radio button value
//*
//* getSelectedCheckbox(buttonGroup) 
//*   -- returns an array of positions of the selected checkboxes
//*
//* getSelectedCheckboxValue(buttonGroup) 
//*   -- returns an array of values of the selected checkboxes
//*
//* checkRadio(buttonGroup, fieldLabel)
//*   -- checks if radio button group has been selected
//*
//* validDigits(formField, requiredLength, fieldLabel, required)
//*   -- check for exact length and only digits
//*   -- and if required is true, checks for empty field
//*
//* LAST MODIFIED: Trang -- 5/11/2004
//* Trang -- 3/28/2005 added exclusive for member problem  - no phone number of 503.638.1000
//**************************


function validDigits(formField, requiredLength, fieldLabel, required)
{

var url = window.location;
myString = new String(url);
if(myString.indexOf("socom")>-1) {
    document.entryform.formsource.value = GetCookie("SRCT");
} 


 var result = true;
 var xxx = formField.value;
 var regExp = "/^";
 for(i=0; i<requiredLength; i++) {
 	regExp += "\\d";
 }
 regExp += "$/";
var digitSet = eval(regExp);

 if(required)
 {
 	result = validRequired(formField, fieldLabel);
 }

 if(result && xxx != "" && !digitSet.test(xxx))
 {
  alert('Please enter only numbers for the "' + fieldLabel + '" field');
  formField.focus();
  result = false;
 }

 return result;
}


function checkRadio(formField, fieldLabel)
{
	if(getSelectedRadio(formField) == -1) 
	{
		alert('Please make a selection for the "' + fieldLabel + '" field.');
		return false;
	}
	return true;
}

function getSelectedRadio(buttonGroup) 
{
	// returns the array number of the selected radio button or -1 if no button is selected
   if (buttonGroup[0]) 
   { 	
   		// if the button group is an array (one button is not an array)
		for (var i=0; i<buttonGroup.length; i++) 
		{
         	if (buttonGroup[i].checked) 
         	{
            	return i;
         	}
      	}
   } 
   else 
   {
		if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero
   }
   // if we get to this point, no radio button is selected
   return -1;
   
} // Ends the "getSelectedRadio" function


function getSelectedRadioValue(buttonGroup) 
{
	// returns the value of the selected radio button or "" if no button is selected
   	var i = getSelectedRadio(buttonGroup);
   	if (i == -1) 
   	{
      	return "";
   } 
   else 
   {
      	if (buttonGroup[i]) 
      	{ 
      		// Make sure the button group is an array (not just one button)
         	return buttonGroup[i].value;
      	}
      	else
      	{ 
      		// The button group is just the one button, and it is checked
         	return buttonGroup.value;
      	}
   }
} // Ends the "getSelectedRadioValue" function


function getSelectedCheckbox(buttonGroup) 
{
   	// Go through all the check boxes. return an array of all the ones
   	// that are selected (their position numbers). if no boxes were checked,
   	// returned array will be empty (length will be zero)
   	var retArr = new Array();
   	var lastElement = 0;
   	if (buttonGroup[0]) 
   	{ 
   		// if the button group is an array (one check box is not an array)
      	for (var i=0; i<buttonGroup.length; i++) 
      	{
         	if (buttonGroup[i].checked) 
         	{
            	retArr.length = lastElement;
            	retArr[lastElement] = i;
            	lastElement++;
         	}
      	}
   	}
   	else
   	{
   		// There is only one check box (it's not an array)
      	if (buttonGroup.checked) 
      	{ 
      		// if the one check box is checked
         	retArr.length = lastElement;
         	retArr[lastElement] = 0; // return zero as the only array value
      	}
   }
   return retArr;
} // Ends the "getSelectedCheckbox" function


function getSelectedCheckboxValue(buttonGroup) 
{
   	// return an array of values selected in the check box group. if no boxes
   	// were checked, returned array will be empty (length will be zero)
   	var retArr = new Array(); // set up empty array for the return values
   	var selectedItems = getSelectedCheckbox(buttonGroup);
   	if (selectedItems.length != 0) 
   	{ 
   		// if there was something selected
      	retArr.length = selectedItems.length;
      	for (var i=0; i<selectedItems.length; i++) 
      	{
         	if (buttonGroup[selectedItems[i]]) 
         	{ 
         		// Make sure it's an array
            	retArr[i] = buttonGroup[selectedItems[i]].value;
         	}
         	else
         	{ 
         		// It's not an array (there's just one check box and it's selected)
            	retArr[i] = buttonGroup.value; // return that value
         	}
      	}
   	}
   	return retArr;
} // Ends the "getSelectedCheckBoxValue" function


function validRequired(formField,fieldLabel)
{
	var result = true;

	if (formField.value == "" || formField.value ==  null)
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}

	return result;
}


function menuSelected(formField, fieldLabel)
{
	if(formField.options[formField.selectedIndex].value == "")
	{
		alert('Please select a value for the "' + fieldLabel +'" field.');
		formField.focus();
		return false;
	}
	return true;
}


function checkMail(thisField, emailLabel, required)
{
   var result = true;
   var x = thisField.value.toLowerCase();
   var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9])+$/;
   var invalidEmails = new Array ("unknown@unknown.com","none@none.com","noemail@aol.com", "noemail@yahoo.com", "noemail@hotmail.com", "noemail@netzero.com", "noemail@juno.com", "noemail@netscape.com", "noemail@prodegy.net", "noemail@msn.net");
   var isEmpty = false ;
   if(x == "" || x == null) { isEmpty = true; }
   
   if(required && isEmpty)
   {
	alert('Please enter a value for the "' + emailLabel + '" field.');
	thisField.focus();
	result = false;
   }

   if(result && !isEmpty && !filter.test(x))
   {
	alert('Please enter a valid ' + emailLabel + ' value.');
	thisField.focus();
	result = false;
   }
   
   for(i=0; i<invalidEmails.length; i++)
   {
	if(result && invalidEmails[i] == x)
   	{
		alert('Please enter a valid ' + emailLabel + ' value.');
		thisField.focus();
		result = false;
   	}
   }
   
   return result;
}


function invalidCharMinLength(formField, charset, minLength, fieldLabel, validityAlertMsg, required)
{
	var result = true;

	if(required && !validRequired(formField, fieldLabel))
	{
		result = false;
	}

	if(result && (charset.test(formField.value) || (formField.value.length < minLength)))
	{
		if(validityAlertMsg == "")
		{
			alert('Please enter a valid value for the "' + fieldLabel + '" field.');
		} 
		else
		{
			alert(validityAlertMsg);
		}
		formField.focus();
		result = false;
	}
	return result;
}


function invalidChar(formField, charset, fieldLabel, validityAlertMsg, required)
{
	var result = true;

	if(required && !validRequired(formField, fieldLabel))
	{
		result = false;
	}

	if(result && charset.test(formField.value))
	{
		if(validityAlertMsg == "")
		{
			alert('Please enter a valid value for the "' + fieldLabel + '" field.');
		} 
		else
		{
			alert(validityAlertMsg);
		}
		formField.focus();
		result = false;
	}
	return result;
}


function validZipcode(formField, fieldLabel, strCountry, required)
{
	var result = true;
	var filter = /(^\d{5}[\s-]?$)|(^\d{5}[\s-]?\d{4}$)/;
	var x = formField.value;
	var isEmpty = false ;
	
	if(strCountry == "US")
	{
		if(x == "" || x == null) { isEmpty = true; }

		if(required && isEmpty)
		{
			alert('Please enter a value for the "' + fieldLabel + '" field.');
			formField.focus();
			result = false;
		}

		if(result && !isEmpty && !filter.test(x))
		{
			alert('Please enter a valid zip code.');
			formField.focus();
			result = false;
		}
	}
	return result;
}


function validCanadaPostalCode(formField, fieldLabel, strCountry, required)
{
	//ANA NAN
	var result = true;
	var filter = /^[a-zA-Z]\d[a-zA-Z][\s]?\d[a-zA-Z]\d$/;
	var z = formField.value;
	var isEmpty = false;
	
	if(strCountry == "CA")
	{
		if(z == "" || z == null) { isEmpty = true; }

		if(required && isEmpty)
		{
			alert('Please enter a value for the "' + fieldLabel + '" field.');
			formField.focus();
			result = false;
		}

		if(result & !isEmpty && !filter.test(z))
		{
			alert('Please enter a valid Canadian postal code.');
			formField.focus();
			result = false;
		}
	}
	return result;
}


function validPhone(strPhoneNum, phoneLabel, required)
{
	var result = true;
	var filter = /(^\(?[0-9]{3}\)?[0-9]{3}[\s-.\/]?[0-9]{4}$)/;
	var isEmpty = false ;
	
	//do not allow repeating digits in area code, 123, 911
	var invalidAreaCodes1 = /^\(?(\d)\1\1\)?[0-9]{3}[\s-.\/]?[0-9]{4}$/;
	var invalidAreaCodes2 = /^\(?911|123\)?[0-9]{3}[\s-.\/]?[0-9]{4}$/;
	
	// for repeating numbers in the last 7 numbers
	var invalidPhoneNumber1 = /^\(?[0-9]{3}\)?(\d)\1\1[\s-.\/]?\1\1\1\1$/;
	
	// for repeating prefix
	var invalidPhoneNumber2 = /^\(?[0-9]{3}\)?(\d)\1\1[\s-.\/]?[0-9]{4}$/;	
	// for 123-4567
	var invalidPhoneNumber3 = /^\(?[0-9]{3}\)?123[\s-.\/]?4567$/;
	// for 456-7890
	var invalidPhoneNumber4 = /^\(?[0-9]{3}\)?456[\s-.\/]?7890$/;	
	// for 911-/d/d/d/d
	var invalidPhoneNumber5 = /^\(?[0-9]{3}\)?911[\s-.\/]?[0-9]{4}$/;
	// for /d/d/d-1212
	var invalidPhoneNumber6 = /^\(?[0-9]{3}\)?[0-9]{3}[\s-.\/]?1212$/;
	
	//added 3/28/2005 exclusive for member problem  - no phone number of 503.638.1000
	var invalidPhoneNumber7 = /^\(?503\)?638[\s-.\/]?1000$/
	
	
	if(strPhoneNum == "" || strPhoneNum == null) { isEmpty = true; }

	if(required && isEmpty)
	{
		alert('Please enter a value for the "' + phoneLabel + '" field.');
		result = false;
	}

	if(result && !isEmpty && !filter.test(strPhoneNum))
	{
		alert('Please enter a valid ' + phoneLabel + ' value.');
		result = false;
	}
	if(result && !isEmpty && (invalidAreaCodes1.test(strPhoneNum) || 
				  invalidAreaCodes2.test(strPhoneNum) || 
				  invalidPhoneNumber1.test(strPhoneNum) ||
				  invalidPhoneNumber2.test(strPhoneNum) ||
				  invalidPhoneNumber3.test(strPhoneNum) || 
				  invalidPhoneNumber4.test(strPhoneNum) ||
				  invalidPhoneNumber5.test(strPhoneNum) ||
				  invalidPhoneNumber6.test(strPhoneNum) ||
				  invalidPhoneNumber7.test(strPhoneNum)) )
	{
		alert('Please enter a valid ' + phoneLabel + ' value.');
		result = false;
	}	
	return result;
}