//JS FUNCTIONS FOR ASP & HTML FORMS

var reWhitespace = /^\s+$/; 
var reAlphabetic = /^[a-zA-Z]+$/; 
var reInteger = /^\d+$/; 
var rePostCode = /^[a-zA-Z]{1,2}((\d[a-zA-Z]{0,1})|(\d{1,2})) \d[a-zA-Z]{2}$/; 
var reEmail = /^([\w-_']{1,})(\.[\w-_']{1,}){0,}@([\w-_]{1,})(\.[\w-_]{1,}){1,}$/; 
var reCurrency = /^\d{1,3}(,\d{3})*\.\d\d$|^\d+\.\d\d$/; 
 

//form validation functions
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,msg)
{
	var result = true;
	
	if (formField.value == "")
	{
		alert(msg);
		formField.focus();
		result = false;
	}
	
	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

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 validEmail(formField,msg,required)
{
	var result = true;
	
	if (!required && formField.value == "") 
	{ 
			return true; 
	} else { 
			result = validRequired(formField,msg) 
	} 

	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert(msg);
		formField.focus();
		result = false;
	}
   
  return result;

}

function validNum(formField,msg,required)
{
	var result = true;

	if (!required && formField.value == "") 
	{ 
			return true; 
	} else { 
			result = validRequired(formField,msg) 
	} 
  
 	if (result)
 	{
 		if (!allDigits(formField.value))
 		{
 			alert(msg);
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}


function validInt(formField,msg,required)
{
	var result = true;

	if (!required && formField.value == "") 
	{ 
			return true; 
	} else { 
			result = validRequired(formField,msg) 
	} 
  
 	if (result)
 	{
 		var num = parseInt(formField.value,10);
 		if (isNaN(num))
 		{
 			alert(msg);
			formField.focus();		
			result = false;
		}
	} 
	
	return result;
}

function validDate(formField,msg,required) 
{ 
	var result = true; 

	if (!required && formField.value == "") 
	{ 
			return true; 
	} else { 
			result = validRequired(formField,msg) 
	} 
	
	if (result) 
	{ 
		var elems = formField.value.split("/"); 
		
		result = (elems.length == 3); // should be three components 
		
		if (result) 
		{ 
		var month = parseInt(elems[1],10); 
		var day = parseInt(elems[0],10); 
			var year = parseInt(elems[2],10); 
			result = allDigits(elems[0]) && (month > 0) && (month < 13) && 
				 allDigits(elems[1]) && (day > 0) && (day < 32) && 
				 allDigits(elems[2]) && ((elems[2].length == 2) || (elems[2].length == 4)); 
		} 
		
		if (!result) 
		{ 
			alert(msg); 
			formField.focus();              
		} 
	} 
	
	return result; 
} 

function validCurrency(formField,msg,required) 
{ 
	var result = true; 

	if (!required && formField.value == "") 
	{ 
			return true; 
	} else { 
			result = validRequired(formField,msg) 
	} 

	if (result) 
	{ 
	  if (!only_decimals(formField.value)) 
		{ 
			alert(msg); 
			formField.focus();              
			result = false; 
		} 
	} 
  return result; 
} 

function validPostcode(formField,msg,required) 
{ 
	var result = true; 
	
	if (!required && formField.value == "") 
	{ 
			return true; 
	} else { 
			result = validRequired(formField,msg) 
	} 
	
	if (result) 
	{ 
	  if (!rePostCode.test(formField.value)) 
		{ 
			alert(msg); 
			formField.focus();              
			result = false; 
		} 
	} 
  return result; 
} 

function only_decimals(the_value) { 
 point = 0; 
 // Check to make sure they only enter numbers or a decimal point // 
 for (i=0; i<the_value.length; i++) { 
  if (((the_value.charAt(i) < "0")&&(the_value.charAt(i) != ".")&&(the_value.charAt(i) != "-"))||((the_value.charAt(i) > "9")&&(the_value.charAt(i) != ".")&&(the_value.charAt(i) != "-"))) {

   return false; 
  } 
  // Check if they have entered a decimal point how many digits and what amount //  
  if (the_value.charAt(i) == ".") { 
   point++; 
   // Check if they have entered more than 1 decimal point // 
   if (point==2) { 
    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 upperMe(field) {
	field.value = field.value.toUpperCase()
}

function z(oTD) {
var el, i = 0;
while (el = oTD.childNodes[i++]) 
	if (el.type == 'radio') el.checked = true;
}
function y(oTD) {
var el, i = 0;
while (el = oTD.childNodes[i++]) 
	if (el.type == 'checkbox'){
		box = eval(el);
		box.checked = !box.checked;
	}
}
