function validnum(str)
{
	return inValidCharSet(str,"0123456789");
}

function validletter(str)
{
	return inValidCharSet(str,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
}

function validchar(str)
{
	return inValidCharSet(str,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
}

function shiftFieldFocus(e, thisField, nextField, number) {
	var key;
	if(window.event) key = e.keyCode; 
	else if(e.which) key = e.which; 
	if (thisField.value.length >= number && key != 9)
		nextField.focus()
}

function validPhone(field1, field2, field3, fieldLabel)
{
	var result = true;

	var RE3 = /^\d\d\d$/;
	var RE4 = /^\d\d\d\d$/;
	if ( (! RE3.test(field1.value)) || (! RE3.test(field2.value)) || (! RE4.test(field3.value)) )
	{
		alert('Please enter a 10 digit number for the "' + fieldLabel +'" field.');
		field1.focus();
		result = false;
	}
	
	return result;
}

function validPhone1(field1, fieldLabel)
{
	var result = true;

	var RE = /^\d.*\d$/;
	if (! RE.test(field1.value))
	{
		alert('Please enter a number for the "' + fieldLabel +'" field.');
		field1.focus();
		result = false;
	}
	
	return result;
}

function validPhone2(field1, fieldLabel){
	// Declaring required variables
	var digits = "0123456789";
	// non-digit characters which are allowed in phone numbers
	var phoneNumberDelimiters = "()- ";
	// characters which are allowed in international phone numbers
	// (a leading + is OK)
	var validWorldPhoneChars = phoneNumberDelimiters + "+";
	// Minimum no of digits in an international phone no.
	var minDigitsInIPhoneNumber = 10;
	
	function isInteger(s)
	{   var i;
		for (i = 0; i < s.length; i++)
		{   
			// Check that current character is number.
			var c = s.charAt(i);
			if (((c < "0") || (c > "9"))) return false;
		}
		// All characters are numbers.
		return true;
	}
	
	function stripCharsInBag(s, bag)
	{   var i;
		var returnString = "";
		// Search through string's characters one by one.
		// If character is not in bag, append to returnString.
		for (i = 0; i < s.length; i++)
		{   
			// Check that current character isn't whitespace.
			var c = s.charAt(i);
			if (bag.indexOf(c) == -1) returnString += c;
		}
		return returnString;
	}
	
	function checkInternationalPhone(strPhone){
	s=stripCharsInBag(strPhone,validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
	}
	var Phone=field1
	
	if ((Phone.value==null)||(Phone.value=="")){
		alert('Please enter a number for the "' + fieldLabel +'" field.')
		Phone.focus();
		return false;
	}
	if (checkInternationalPhone(Phone.value)==false){
		alert('Please enter a number for the "' + fieldLabel +'" field. This should be a 10 digit number.')
		Phone.focus();
		return false;
	}
	return true
 }


function validOneCheck(field1,fieldLabel) {
	count = 0;
	for(x=0; x<field1.length; x++){
		if(field1[x].checked==true){
			count++;
		}
	}
	if (count==0){
		alert ('Please select at least one of the "' + fieldLabel + '."');
		return false;
	} else {
		return true;
	}
}

function isEmailAddr(email)
{
  var result = false;
  var theStr = new String(email);
  var index = theStr.indexOf("@");
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  return result;
}

function validRequired(formField,fieldLabel) {
	var result = true;
	if (formField.value == "")
	{
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}
	return result;
}

function validRequiredCheck(formField,fieldLabel) {
	for(var i=0;i<formField.length;i++) {
		if (formField[i].checked) {
			return true;
		}
	}
	alert('Please select a value for the "' + fieldLabel +'" field.');
	return false;
}

function validRequiredSelection(formField,fieldLabel) {
	var result = true;
	if (formField.selectedIndex == 0)
	{
		alert('Please select a value for the "' + fieldLabel +'" field.');
		formField.focus();
		result = false;
	}
	return result;
}

function validRequiredCheckDependant(formField,depFormField,value,fieldLabel) {
	var result = true;
	if (depFormField[value].checked) {
		result = validRequired(formField,fieldLabel);
	}
	return result;
}

function validRequiredCheckDropDependant(formField,depFormField,value,fieldLabel) {
	var result = true;
	if (depFormField.selectedIndex == value) {
		result = validRequired(formField,fieldLabel);
	}
	return result;
}

function validRequiredCheckCheckDependant(formField,depFormField,value,fieldLabel) {
	var result = true;
	if (depFormField[value].checked) {
		result = validRequiredCheck(formField,fieldLabel);
	}
	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function allCaps(str)
{
	return inValidCharSet(str,"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
}

function inValidCharSet(str,charset)
{
	var result = true;

	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	
	return result;
}

function validPrice(formField,fieldLabel,required)
{
	var result = true;
	
	if (formField.value == "0.00")
		formField.value = '';

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
		if (formField.value.indexOf(".")==-1){formField.value+=".00"}
		while (formField.value.substr(formField.value.indexOf(".")).length<3){formField.value+="0"}
		
		var priceRE = /^\d*(\.\d\d)?$/;
		var flag = priceRE.test(formField.value);
 		if (!flag) {
			formField.value = "";
 			alert('The amount entered is not in the correct format.  Please enter the amount to be paid in the form of "dollars.cents".');
			formField.focus();		
			result = false;
		}
	} 

	if (result)
	{
		if (! confirm("Is $" + formField.value + " the correct amount you wish to pay?\n\nPress 'OK' if this is correct. Press 'Cancel' if you wish to change this amount."))
		{
			formField.value = "";
			formField.focus();
			result = false;
		}
	}
	
	return result;
}

function LoadPrice ()
{
	if (document.regform.price.value == "") {
		document.regform.price.value = "0.00";
	}
}

function validNum(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		if (!allDigits(formField.value))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}

function validInt(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
  
 	if (result)
 	{
 		var num = parseInt(formField.value);
 		if (isNaN(num))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}


function validState(formField,fieldLabel)
{
	var result = true;

	if (validRequired(formField.bill_country,"Country") && ((form.bill_country.selectedIndex == 1)||(form.bill_country.selectedIndex == 2)))
 	{
 	if (!validRequiredSelection(formField.bill_state,"State"))
		return false;
	} 
	
	return result;
}

function validCCNumber(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel)) {
		result = false;
	}
	else {
		result = allDigits(formField.value);
	
		if (result && ((formField.value.length < 14) || (formField.value.length > 16)) )
			result = false;
		
		if (!result) {
			alert('Please enter a valid number for the "' + fieldLabel +'" field.');
			formField.focus();
		}
	}

	return result;
}

function validEmail(formField,fieldLabel,required)
{
	var result = true;
	
	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		formField.focus();
		result = false;
	}

  return result;

}

function validCustomerNumber(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
	{
		result = (allDigits(formField.value) && formField.value.length == 6);

		if (!result)
 			{
 				alert('Please enter a 6 digit value for the "' + fieldLabel +'" field.');
				formField.focus();		
			}
	}

	return result;
}

function validInvoice(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
		result = allCaps(formField.value.substring(0,1)) && allDigits(formField.value.substring(2,8));
		if (!result)
		{
			alert('Please enter an invoice number with the form ??###### in the "' + fieldLabel +'" field.');
			formField.focus();		
		}
	}

	return result;
}

function validSSN(field1,field2,field3,depField,fieldLabel) {
	var result = true;
	var RE2 = /^\d\d$/;
	var RE3 = /^\d\d\d$/;
	var RE4 = /^\d\d\d\d$/;
	if (depField[0].checked) {
		if ( (! RE3.test(field1.value)) || (! RE2.test(field2.value)) || (! RE4.test(field3.value)) ) {
			alert('Please enter a 9 digit number for the "' + fieldLabel +'" field.');
			field1.focus();
			result = false;
		}
	}
	return result;
}

function validPleaseSpecify(formField,depFormField,fieldLabel) {
	var result = true;
	if (depFormField[depFormField.selectedIndex].text.match(/(please specify)/)) {
		result = validRequired(formField,fieldLabel);
	}
	return result;
}

function checkFields(theForm)
{
	if(validateForm(theForm)) {
		return true;
	}
	else {
		return false;
	}
}

function TrackCount(fieldObj,maxChars)
{
  if ( (maxChars - fieldObj.value.length) < 0)
  {
    fieldObj.value = fieldObj.value.substring(0,maxChars);
  }
}

function LimitText(fieldObj,maxChars)
{
  var result = true;
  if (fieldObj.value.length >= maxChars)
    result = false;
  
  if (window.event)
    window.event.returnValue = result;
  return result;
}

function PopulateCountryFromState(state, countryField)
{
	stateList = new Array();
	stateList["CO"] = "United States";
	stateList["ON"] = "Canada";

	alert("country = " + stateList[state]);
	countryField.value = stateList[state];
	
}

function NumbersOnly(e)
{
	var key;
	if(window.event) key = e.keyCode; 
	else if(e.which) key = e.which; 
	else return true;
	var reg = /\d/;
	return reg.test(String.fromCharCode(key));
}
