function delayAction( action_sting, mseconds_int )
{
    setTimeout( action_sting, mseconds_int );
}

function trimSpacesFromAllTextFields(){
   j = 0;
   while ( j < document.forms.length){
      i = 0;
      while ( i < document.forms[j].elements.length){
         if (document.forms[j].elements[i].type == "text"){
            document.forms[j].elements[i].value = trim(document.forms[j].elements[i].value);
         }
         i++;
      }
      j++
   }
   return true;
};

function autoTab(input,len, e)
{
  var keyCode = (isNetscape) ? e.which : e.keyCode;
  var filter = (isNetscape) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];

  if(input.value.length >= len && !containsElement(filter,keyCode))
  {
    input.value = input.value.slice(0, len);
    input.form[(getIndex(input)+1) % input.form.length].focus();
  }

  function containsElement(arr, ele)
  {
    var found = false, index = 0;

    while(!found && index < arr.length)

      if(arr[index] == ele)
        found = true;
      else
        index++;

    return found;
  }

  function getIndex(input)
  {
    var index = -1, i = 0, found = false;

    while (i < input.form.length && index == -1)

       if (input.form[i] == input)
         index = i;
       else
         i++;

    return index;
  }

  return true;
}

/** disableAllLinks(msg) and disableAllForms()
    for use with the Printer Friendly page.
    Typical msg usage: disableAllLinks('Links disabled for printable page...');*/
function disableAllLinks(msg)
{
   var message = (msg != null) ? msg : "";
   var linkCount = document.links.length;
   for(var i = 0; i<linkCount; i++)
   {
         document.links[i].href="javascript:// " + message;
   }
}
function disableAllForms()
{
   var formCount = document.forms.length;
   for(var i = 0; i < formCount; i++)
   {
      var currentFormLength = document.forms[i].elements.length;
      for(var ii = 0; ii < currentFormLength; ii++)
      {
         document.forms[i].elements[ii].disabled = true;
      }
   }
}
// searches the a named form for named elements and disables or enables them.
// ATTENTION: spaces not allowed in nameString_csv
function disableFormElementsByName( formName_string, namesString_csv, enableOrDisable_string )
{
   var dForm = eval('document.' + formName_string);
   var listOfNames = namesString_csv;
   var enableDisableValue = false;
   var enableOrDisable = ( enableOrDisable_string != null ) ? enableOrDisable_string.toLowerCase() : "";
   if( enableOrDisable != 'enable' && enableOrDisable != 'disable')
   {
      return void('do nothing'); // do nothing.
   }
   else if(enableOrDisable == 'disable')
   {
      enableDisableValue = true;
   }
   else if(enableOrDisable == 'enable')
   {
      enableDisableValue = false;
   }
   for(var i = 0; i < dForm.length; i++)
   {
      var namePattern      = "\\b" + dForm[i].name + "\\b"; // "\b" = word boundary.
      var nameExpression   = new RegExp(namePattern, "");
      if(listOfNames.match(nameExpression) != null)
      {
         dForm[i].disabled = enableDisableValue;
      }
   }
}
function setTabIndexOnAllFormElements( documentForm, tabIndex_int )
{
   for(var i = 0; i < documentForm.length; i++)
   {
      if( documentForm.elements[i].type.toLowerCase() != "hidden" ||
          documentForm.elements[i].disabled != true ||
          documentForm.elements[i].readonly != true)
      {
        documentForm.elements[i].tabIndex = tabIndex_int;
      }
   }
}

function searchAllLinksAndReplaceHref( searchForInHref_string, replaceWithHref_string )
{
   var findInHref = searchForInHref_string;
   var newHref = replaceWithHref_string;
   var linkCount = document.links.length;
   for(var i = 0; i < linkCount; i++)
   {
      if( !(document.links[i].href.indexOf(findInHref) == -1) )
      {
         document.links[i].href = newHref;
      }
   }
}

/* ***************
===== types for validateAll ===== */
var sep           = ". -";      // Seperators
var okText        = "";         // To toss or reject.
var okAlpha       = "abcdefghijklmnopqrstuvwxyz";
var okNumb        = "0123456789";
var okAlphaSep    = okAlpha + sep;
var okNumbSep     = okNumb + sep;
var okAlphaNumb   = okAlpha + okNumb;
var okEmailLocal  = okAlphaNumb + ".&'*+-/=?^_{}~";
var okEmailDomain = okAlphaNumb + "._-";

/* ===== BEGIN type descriptions BEGIN =====
TYPE           DONE   Description
text           [X]
alpha          [X]
numb           [X]
currency       [X]   digits w/ "."(period) as seperator     (3334.3334)
numbMINxMAX    [ ]
date           [X]   valid 8 digit date w/ any separator    (mm dd yyyy)
zip            [X]   5 or 9 digits w/ ". -" as separator    (12345 6789)
   zip NOTE: "."(period), " "(space) or "-"(dash) as separator
phone          [X]   10 digits w/ any separator                (123 456 7890)
ssn            [X]   9 digits w/ any separator                 (123 45 6789)
email          [X]   valid email format                        (username@domain.ext)
pick           [X]   must make a selection that has a value    (dropdown, checkbox, or radio)
pickX          [X]   must make X number of selections w/value  (dropdown, checkbox, or radio)
   NOTE: pick does not yet pay attention to the 'required' parameter.
      If you set type to 'pick' it is automatically considered required.
===== END type descriptions END =====  */

var vaFieldList = new Array;
/* This is a dummy array. In the case that no array is loaded on the HTML page,
but the validator is still being ran.
new Array(<required:TRUE or FALSE>, <userlabel>, <type of validation>);
*/

var vaErrorMsg = "";
/* ********************
validateAll( <name of form> ) RETURNS <TRUE> or Pops up error message
******************** */
function validateAll(formName) {
vaErrorMsg  = "\n";
vaErrorMsg += "Problem(s) with the form:\n";
vaErrorMsg += "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~               \n\n";
var errorCount = 0;
var vaForm = eval('document.' + formName);
   for(var vaList = 0; vaList < vaFieldList.length; vaList++) {
      var findElement = vaFieldList[vaList];
      for(var fe = 0; fe < vaForm.length; fe++) {
         if(vaForm.elements[fe].name == findElement) {
            var findReq = eval(findElement + '[0]')
            var findLabel = eval(findElement + '[1]')
            var findType = eval(findElement + '[2]')
            var fieldErrorMsg = "";
            var eCount = 0;
            if(findReq == "true" && findType != 'pick') {
               //alert(">" + vaForm.elements[fe].value + "<");
               if( vaForm.elements[fe].value == "" ) {
                  fieldErrorMsg += "   Is required.";
                  eCount++;
               }
            }
            if(findType == "text") {
               if( (!validateText(formName, findElement)) && (vaForm.elements[fe].value != "") ) {
                  fieldErrorMsg += "  Invalid characters: [" + okText + "].";
                  eCount++;
               }
            }
            if(findType == "alpha") {
               if( (!validateAlpha(formName, findElement)) && (vaForm.elements[fe].value != "") ) {
                  fieldErrorMsg += "  Only alpha allowed.";
                  eCount++;
               }
            }
            if(findType == "numb") {
               if( (!validateNumb(formName, findElement)) && (vaForm.elements[fe].value != "") ) {
                  fieldErrorMsg += "  Only numbers allowed.";
                  eCount++;
               }
            }
            if(findType == "date") {
               if( (!validateDate(formName, findElement)) && (vaForm.elements[fe].value != "") ) {
                  fieldErrorMsg += "  Must be a valid date. (MMDDYYYY or M-D-YYYY)";
                  eCount++;
               }
            }
            if(findType == "zip") {
               if( !validateZip(formName, findElement) && (vaForm.elements[fe].value != "") ) {
                  fieldErrorMsg += "  Must be a 5 or 9 digit zip code. (123451234 or 12345-1234)";
                  eCount++;
               }
            }
            if(findType == "phone") {
               var phoneTest = charStrip(vaForm.elements[fe].value, okNumb, 'keep');
               if( phoneTest.length != 10 && vaForm.elements[fe].value != "" ) {
                  fieldErrorMsg += "  Must be a 10 digit phone number. (1231231234 or 123-123-1234)";
                  eCount++;
               }
            }
            if(findType == "ssn") {
               var ssnTest = charStrip(vaForm.elements[fe].value, okNumb, 'keep');
               if( ssnTest.length != 9 && vaForm.elements[fe].value != "" ) {
                  fieldErrorMsg += "  Must be a 9 digit Social Security Number. (123121234 or 123-12-1234)";
                  eCount++;
               }
            }
            if(findType == "email") {
               if( (!validateEmail(formName, findElement)) && (vaForm.elements[fe].value != "") ) {
                  fieldErrorMsg += "  Must be a valid email address.";
                  eCount++;
               }
            }
            if(findType == "currency") {
               if( (!validateCurrency(formName, findElement)) && (vaForm.elements[fe].value != "") ) {
                  fieldErrorMsg += "  Must be a number with one or less decimal points.";
                  eCount++;
               }
            }
            if( findType.indexOf("pick") != -1 ) {
            var pickHowMany = charStrip(findType, okNumb, 'keep');
            pickHowMany = ( pickHowMany == null || pickHowMany == "" ) ? 1 : pickHowMany;
               if(vaForm.elements[fe].type.indexOf('select') != -1){
                  if( !validatePick(formName, findElement, pickHowMany) ){
                     fieldErrorMsg += (pickHowMany==1) ? "  Please make a selection." : "  Please make " + pickHowMany + " selections.";
                        eCount++;
                  }
               }
               if(vaForm.elements[fe].type == 'radio'){
                  if( !validateRadio(formName, findElement, pickHowMany) ){
                     fieldErrorMsg += (pickHowMany==1) ? "  Please check a selection." : "  Please check " + pickHowMany + " selections.";
                        eCount++;
                  }
                  var skipElements = eval('document.' + formName + '.' + findElement + '.length')
                  fe += (skipElements - 1);
               }
               if(vaForm.elements[fe].type == 'checkbox'){
                  if( !validateCheckbox(formName, findElement, pickHowMany) ){
                     fieldErrorMsg += (pickHowMany==1) ? "  Please check a selection." : "  Please check " + pickHowMany + " selections.";
                        eCount++;
                  }
                  var skipElements = eval('document.' + formName + '.' + findElement + '.length')
                  fe += (skipElements - 1);
               }
            }
            if(eCount > 0) {
               vaErrorMsg += findLabel + " -" + fieldErrorMsg + "\n";
               errorCount++;
            }
         }
      }
   }
   vaErrorMsg += "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nPlease correct these issues and try again.";
   if(errorCount >0) {
      alert(vaErrorMsg);
   }
   else {
      formatAll(formName);
      return true;
   }
} // End validateAll
/* ********************
validateAlpha( <name of form>, <name of field> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateAlpha(formName, fieldName){
var okChar = okAlpha;
var checkMe = eval('document.' + formName + '.' + fieldName + '.value');
   if( !charCheck(checkMe, okChar, 'accept') ) {
      return false;
   }
   else {
      return true;
   }
} // End validateAlpha
/* ********************
validateNumb( <name of form>, <name of field> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateNumb(formName, fieldName){
var okChar = okNumb;
var checkMe = eval('document.' + formName + '.' + fieldName + '.value');
   if( !charCheck(checkMe, okChar, 'accept') ) {
      return false;
   }
   else {
      return true;
   }
} // End validateNumb
/* ********************
validateText( <name of form>, <name of field> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateText(formName, fieldName){
var okChar = okText;
var checkMe = eval('document.' + formName + '.' + fieldName + '.value');
   if( !charCheck(checkMe, okChar, 'reject') ) {
      return false;
   }
   else {
      return true;
   }
} // End validateText
/* ********************
validateDate( <name of form>, <name of field> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateDate(formName, fieldName)
{
   var okChar = okNumb;
   var monthDays = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
   var checkMe = eval('document.' + formName + '.' + fieldName + '.value');
   var checkNumbers = charStrip(checkMe, okChar, 'keep');
   if(checkNumbers.length != 8)
   {
      var sTemp = "";
      var sArray = new Array;
      var sCount = 0;
      for(var s = 0; s < checkMe.length; s++)  // find seperators
      {
         sTemp = checkMe.substring(s, s+1);
         if( !charCheck(sTemp, okNumb) )
         {
            sArray[sCount] = s;
            sCount ++;
         }
      }
      if( sArray.length > 2 ||
          sArray.length < 2 ||
          (sArray[1] == sArray[2] - 1) ||
          (sArray[1] == 0) ||
          (sArray[2] == checkMe.length - 1) )
      {
         return false;
      }
      var mm   = (sArray[0] < 2) ? "0"+checkMe.substring(0,sArray[0]) : checkMe.substring(0,sArray[0]);
      var dd   = (sArray[1] - sArray[0] < 3) ? "0"+checkMe.substring(sArray[0]+1,sArray[1]) : checkMe.substring(sArray[0]+1,sArray[1]);
      var yyyy = charStrip(checkMe.substring(checkMe.length - 4,checkMe.length),okNumb,'keep');
   }
   if(checkNumbers.length == 8)
   {
      var mm   = checkNumbers.substring(0,2);
      var dd   = checkNumbers.substring(2,4);
      var yyyy = checkNumbers.substring(4,8);
   }
   if( ((yyyy%4)==0)  &&  !((yyyy%100)==0 && (yyyy%400)!=0) )
   {
      monthDays[1] = 29;
   }
   if(yyyy.length < 4)
   {
      return false;
   }
   if( (mm < 1) || (mm > 12) )
   {
      return false;
   }
   if( (dd < 1) || (dd > monthDays[mm-1]) )
   {
      return false;
   }
   else{
      var writeToField = eval('document.' + formName + '.' + fieldName);
      writeToField.value =  mm + "/" + dd + "/" + yyyy;
      return true;
   }
} // End validateDate
/* ********************
validateZip( <name of form>, <name of field> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateZip(formName, fieldName){
var okChar = okNumbSep;
var checkMe = eval('document.' + formName + '.' + fieldName + '.value');
   if( !(checkMe.length == 5 || checkMe.length == 9 || (checkMe.length == 10 && charCheck(checkMe.substring(5,6),sep,"accept"))) ) return false;
   if( !charCheck(checkMe, okChar, 'accept') ) return false;
checkMe = charStrip(checkMe, okNumb, 'keep');
   if( !(checkMe.length == 5 || checkMe.length == 9) ) return false;
   else return true;
} // End validateZip
/* ********************
validatePick( <name of form>, <name of field>, <number of selections required> ) RETURNS <TRUE> or <FALSE>
******************** */
function validatePick(formName, fieldName, pickHowMany){
var checkMe = eval('document.' + formName + '.' + fieldName);
var selectedValue = "";
var pickHowMany = ( pickHowMany == null || pickHowMany == "" ) ? 1 : pickHowMany;
var pickedCount = 0;
var checkMeIsArray = (checkMe.checked == null);
   if( checkMeIsArray )
   {
      for(var i = 0; i < checkMe.length; i++)
      {
      selectedValue = checkMe[i].value;
         if( ( checkMe[i].selected == true || checkMe[i].checked == true) && !((selectedValue == null) || (selectedValue == "")) )
         {
            pickedCount++;
         }
      }
   }
   else
   {
      selectedValue = checkMe.value;
      if( checkMe.checked == true && !((selectedValue == null) || (selectedValue == "")) )
      {
         pickedCount++;
      }
   }
   if( pickedCount >= pickHowMany ){
      return true;
   }
   else return false;
} // End validatePick
/* ********************
validateRadio( <name of form>, <name of field>, <number of selections required> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateRadio(formName, fieldName, pickHowMany)
{
   var checkMe = eval('document.' + formName + '.' + fieldName);
   var selectedValue = getRadio(formName, fieldName);
   var pickHowMany = ( pickHowMany == null || pickHowMany == "" ) ? 1 : pickHowMany;
   var checkedCount = 0;
   var checkMeIsArray = (checkMe.checked == null);
   if( checkMeIsArray )
   {
      for(var i = 0; i < checkMe.length; i++)
      {
         if( checkMe[i].checked == true && !((selectedValue == null) || (selectedValue == "")) )
         {
            checkedCount++;
         }
      }
   }
   else if( !checkMeIsArray )
   {

      if( checkMe.checked == true && !((selectedValue == null) || (selectedValue == "")) )
      {
         checkedCount++;
      }
   }
   if( checkedCount == pickHowMany )
   {
      return true;
   }
   else return false;
} // End validateRadio


/* ********************
validateCheckbox( <name of form>, <name of field>, <number of selections required> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateCheckbox(formName, fieldName, pickHowMany)
{
   var checkMe = eval('document.' + formName + '.' + fieldName);
   var selectedValue = getCheckbox(formName, fieldName);
   var pickHowMany = ( pickHowMany == null || pickHowMany == "" ) ? 1 : pickHowMany;
   var checkedCount = 0;
   var checkMeIsArray = (checkMe.checked == null);
   if( checkMeIsArray )
   {
      for(var i = 0; i < checkMe.length; i++)
      {
         if( checkMe[i].checked == true && !((selectedValue == null) || (selectedValue == "")) )
         {
            checkedCount++;
         }
      }
   }
   else if( !checkMeIsArray )
   {

      if( checkMe.checked == true && !((selectedValue == null) || (selectedValue == "")) )
      {
         checkedCount++;
      }
   }
   if( checkedCount == pickHowMany )
   {
      return true;
   }
   else return false;
} // End validateCheckbox


/* ********************
validateEmail( <name of form>, <name of field> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateEmail(formName, fieldName) {
var okCharsLocal= okEmailLocal;
var okCharsDomain= okEmailDomain;
var tempAt = "";
var temp = "";
var checkMe = eval('document.' + formName + '.' + fieldName);
var emailToValidate = checkMe.value;
var a = emailToValidate.lastIndexOf('@');
var d = emailToValidate.lastIndexOf('.');
var dd = emailToValidate.lastIndexOf('..');
var atCount = 0;

// Regular expression pattern: <anyOneCharacter>@<anyOneCharacter>
var emailPattern           = /^(.+)@(.+)$/;
/* If string matches pattern:
      Create array from pattern: 0=whole string, 1=part before @, 2=part after @
   Otherwise assigns null. */
var emailAddressPartsArray = emailToValidate.match(emailPattern);
// Check if pattern matched string
if(emailAddressPartsArray == null)
{
   return false;
}
var localPart              = emailAddressPartsArray[1];
var domainPart             = emailAddressPartsArray[2];

// Check if the last '.' is present, is not last char, is not before '@'
   if((d == -1) ||
      (d == emailToValidate.length - 1) ||
      (d < a) ||
// Check if any '..'
      (dd != -1) )
   {
         return false;
   }
// Check if '.' is first char
   else if( emailToValidate.indexOf('.') == 0 )
   {
      return false;
   }
// Check if '.' is adjacent to '@'
   else if( (emailToValidate.substring(a+1,a+2) == '.') || (emailToValidate.substring(a,a-1) == '.') ) {
      return false;
   }
   else {

// Check local part is vaid
      if(!charCheck( localPart, okCharsLocal, "accept" ))
      {
         return false;
      }

// Check domain part is vaid
      if(!charCheck( domainPart, okCharsDomain, "accept" ))
      {
         return false;
      }

// Passes everything; do this step:
      return true;
   }
} // End validateEmail
/* ********************
validateCurrency( <name of form>, <name of field> ) RETURNS <TRUE> or <FALSE>
******************** */
function validateCurrency(formName, fieldName)
{
   var okChars= okNumb + ".";
   var tempPeriod = "";
   var temp = "";
   var checkMe = eval('document.' + formName + '.' + fieldName + '.value');
   var pCount = 0;
/* Check each char and count the '.' */
   for (var j = 0; j < checkMe.length; j++)
   {
      tempPeriod = checkMe.substring(j,j+1);
      if (tempPeriod == '.')
      {
         pCount++;
         if(pCount > 1 || (pCount == 1 && checkMe.length == 1))
         {
            return false;
         }
      }
   }
/* Check each char and compare to okChars list */
   for (var i = 0; i < checkMe.length; i++)
   {
      temp = checkMe.substring(i,i+1);
      if (okChars.indexOf(temp) == -1)
      {
         return false;
      }
   }
/* If if passes everything do this step: */
      return true;
} // End validateCurrency
/* ********************
charCheck( <string to be checked>, <list of characters>, <accept || reject charList *option*> )
RETURNS <TRUE> or <FALSE>
If no *options* given:
 charList defaults to: "!@#$%^&*()_+-="
 acceptReject defaults to "accept"
******************** */
function charCheck( stringToCheck, charList, acceptReject ) {
var temp          = "";
var toDo          = "";
var useChars       = ( charList == null ) ? "!@#$%^&*()_+-=" : charList;
if( (acceptReject == null) || (acceptReject == "accept" ) ){
   toDo          = "accept";
}
else if( acceptReject == "reject" ) {
   toDo          = acceptReject;
}
   if(toDo == "reject") {
      for (var i = 0; i < stringToCheck.length; i++) {
         temp = stringToCheck.substring(i,i+1);
          if(useChars.indexOf(temp.toLowerCase()) != -1) { return false; }
      }
      return true;
   }
   if(toDo == "accept") {
      for (var i = 0; i < stringToCheck.length; i++) {
         temp = stringToCheck.substring(i,i+1);
          if(useChars.indexOf(temp.toLowerCase()) == -1) { return false; }
      }
      return true;
   }
} // End charCheck
/* ********************
charStrip( <string to be stripped>, <list of characters *option*>, <keep charList *option*> )
RETURNS <string without toStrip charicters>
If no *options* given:
 charList defaults to: "!@#$%^&*()_+-="
 keepToss defaults to "toss"
******************** */
function charStrip( stringToStrip, charList, keepToss ) {
var temp         = "";
var strippedText    = "";
var useChars       = ( charList == null ) ? "!@#$%^&*()_+-=" : charList;
var toDo          = "";
if( (keepToss == null) || (keepToss == "toss" ) ){
   toDo          = "toss";
}
else if( keepToss == "keep" ) {
   toDo          = keepToss;
}
   if(toDo == "toss") {
      for (var i = 0; i < stringToStrip.length; i++) {
         temp = stringToStrip.substring(i,i+1);
          if(useChars.indexOf(temp.toLowerCase()) != -1) { strippedText += ""; }
         else { strippedText += temp; }
      }
   }
   if(toDo == "keep") {
      for (var i = 0; i < stringToStrip.length; i++) {
         temp = stringToStrip.substring(i,i+1);
          if(useChars.indexOf(temp.toLowerCase()) == -1) { strippedText += ""; }
         else { strippedText += temp; }
      }
   }
   // strip leading spaces
   while (strippedText.substring(0,1) == ' ') {
      strippedText = strippedText.substring(1, strippedText.length);
   }
   // strip trailing spaces
   while (strippedText.substring(strippedText.length-1, strippedText.length) == ' ') {
      strippedText = strippedText.substring(0, strippedText.length-1);
   }
   return strippedText;
} // End charStrip

/* ********************
getRadio( <name of form>, <name of field> ) RETURNS <value of selected radiobutton>
******************** */
function getRadio(formName, fieldName)
{
   var checkMe = eval('document.' + formName + '.' + fieldName);
   var valueOfRadio = "";
   if( checkMe != null )
   {
      var checkMeIsArray = (checkMe.checked == null);
      if( checkMeIsArray )
      {
         for(chkd = 0; chkd < checkMe.length; chkd++)
         {
            if (checkMe[chkd].checked)
            {
               valueOfRadio = checkMe[chkd].value;
            }
         }
      }
      else if( !checkMeIsArray )
      {
         if (checkMe.checked)
         {
            valueOfRadio = checkMe.value;
         }
      }
   }
   return valueOfRadio;
} // End getRadio

/* ********************
getCheckbox( <name of form>, <name of field> ) RETURNS <array values of selected checkboxes>
******************** */
function getCheckbox(formName, fieldName)
{
   var checkMe = eval('document.' + formName + '.' + fieldName);
   var valueOfCheckbox = new Array();
   if( checkMe != null )
   {
      var checkMeIsArray = (checkMe.checked == null);
      if( checkMeIsArray )
      {
         for(var chkd = 0; chkd < checkMe.length; chkd++)
         {
            if (checkMe[chkd].checked)
            {
               valueOfCheckbox[valueOfCheckbox.length] = checkMe[chkd].value;
            }
         }
      }
      else if( !checkMeIsArray )
      {
         if (checkMe.checked)
         {
            valueOfCheckbox[0] = checkMe.value;
         }
      }
   }
   return valueOfCheckbox;
} // End getCheckbox

/* ********************
getIndexesFromSelect( <name of form>, <name of field> ) RETURNS <array values of selected checkboxes>
******************** */
function getIndexesFromSelect(formName, fieldName)
{
   var checkMe = eval('document.' + formName + '.' + fieldName);
   var valueOfSelect = '';
   if( checkMe != null )
   {
      for(var sel = 0; sel < checkMe.length; sel++)
      {
         if (checkMe.options[sel].selected)
         {
            if(valueOfSelect == '')
            {
               valueOfSelect += sel + '';
            }
            else
            {
               valueOfSelect += ', ' + sel;
            }

         }
      }
   }
   return valueOfSelect;
} // End getIndexesFromSelect


/* ********************
getValuesFromSelect( <name of form>, <name of field> ) RETURNS <array values of selected options>
******************** */
function getValuesFromSelect(formName, fieldName)
{
   var checkMe = eval('document.' + formName + '.' + fieldName);
   var valueOfSelect = '';
   if( checkMe != null )
   {
      for(var sel = 0; sel < checkMe.length; sel++)
      {
         if (checkMe.options[sel].selected)
         {
            if(valueOfSelect == '')
            {
               valueOfSelect += checkMe.options[sel].value + '';
            }
            else
            {
               valueOfSelect += ',' + checkMe.options[sel].value;
            }

         }
      }
   }
   return valueOfSelect;
} // End getValuesFromSelect


/** Get the index of any item in a select element by it's value.
      ifNotFoundReturnValue is optional; by default, returns -1 (negative one).
*/
function getIndexFromSelectByValue( select_element, match_value, ifNotFoundReturnValue )
{
   var notFoundValue = (ifNotFoundReturnValue !== null) ? ifNotFoundReturnValue : -1;
   if(match_value == null || select_element[0] == null || select_element.length == 0)
   {
      return notFoundValue;
   }

   var i = 0;
   while(i < select_element.length)
   {
      if( select_element[i].value == match_value )
      {
         return i;
      }
      i = i + 1;
   }
   return notFoundValue; // didn't find a match:
} // End getIndexFromSelectByValue



/* ********************
formatAll
******************** */
function formatAll(formName) {
var vaForm = eval('document.' + formName);
   for(var vaList = 0; vaList < vaFieldList.length; vaList++)
   {
      var findElement = vaFieldList[vaList];
      for(var fe = 0; fe < vaForm.length; fe++)
	  {
         if(vaForm.elements[fe].name == findElement)
		 {
            var findType = eval(findElement + '[2]');
            if( findType == "date" ||
				findType == "zip" ||
				findType == "phone" ||
				findType == "ssn")
			{
                   vaForm.elements[fe].value = charStrip(vaForm.elements[fe].value,okNumb,"keep");
            }
         }
      }
   }
} // End formatAll

/* ********************
formMonitor( <name of form>, <capture | compare> ) 'compare' RETURNS true if unchanged.
'capture' when the page loads, 'compare' when leaving.
******************** */
var completeFormContents = new Array();
function formMonitor( formName, action )
{
   df = eval('document.' + formName);
   var captureForm = new Array();

   for(var fi = 0; fi < df.length; fi++)
   {
      captureForm[fi] = _getMonitorElementValue(df.elements[fi]);
   }

   if(action == 'capture')
   {
      completeFormContents = captureForm;
   }
   else if(action == 'compare')
   {
      if( _compareArrays(completeFormContents, captureForm) )
      {
         // alert( 'No changes have been made to this form...' );
         return true;
      }
      else
      {
         // alert( 'Changes have been made. You should save first...' );
         return false;
      }
   }
} // End formMonitor

/** Support functions for formMonitor BEGIN */
   function _getMonitorElementValue(element)
   {
      var eType  = (element.type != null) ? element.type.toLowerCase() : null;
      var eValue = "";

      if( eType == 'text' || eType == 'password' || eType == 'textarea' || eType == 'hidden' )
      {
         eValue = element.value;
      }
      else if( eType == 'radio' )
      {
         eValue = element.value + ":" + element.checked;
      }
      else if( eType == 'checkbox' )
      {
         eValue = element.value + ":" + element.checked;
      }
      else if( eType == 'select-one' || eType == 'select-multiple' )
      {
         eValue = getValuesFromSelect(element.form.name, element.name);
      }
      else if( eType == 'button' || eType == 'reset' || eType == 'submit' || eType == 'file' || eType == null )
      {
         // Do nothing but leave an empty slot in the array.
         eValue = '';
      }
      return eValue;
   }
   function _compareArrays(array1, array2)
   {
      var areEqual = true;
      if( array1.length != array2.length )
      {
         areEqual = false;
      }
      for(var i = 0; i < array1.length; i++)
      {
         if(array1[i] != array2[i])
         {
            areEqual = false;
         }
      }
      return areEqual;
   }
/** Support functions for formMonitor END */

/** checkCheckboxGroupByNamePrefix( <string: name of form that contains checkboxes>,
												<string: prefix of the checkboxes to be all (un)checked>,
												<boolean: true = check; false = uncheck> )
 */
function checkCheckboxGroupByNamePrefix(formName_string, checkBoxNamePrefix_string, check_boolean)
{
   var dForm = eval( 'document.' + formName_string );
   for(var i = 0; i < dForm.length; i++)
   {
      if(dForm[i].type == 'checkbox')
      {
         if(dForm[i].name.indexOf(checkBoxNamePrefix_string) == 0)
         {
            dForm[i].checked = check_boolean;
         }
      }
   }
}

function countCheckedCheckboxesGroupByNamePrefix(formName_string, checkBoxNamePrefix_string, check_boolean)
{
   var dForm = eval( 'document.' + formName_string );
   var count = 0;
   for(var i = 0; i < dForm.length; i++)
   {
      if(dForm[i].type == 'checkbox')
      {
         if(dForm[i].name.indexOf(checkBoxNamePrefix_string) == 0)
         {
            if(dForm[i].checked == check_boolean)
            {
               count++;
            }
         }
      }
   }
   return count;
}

/** populateSelectList( <select list form element>,
<2d array: option text, option value>,
<index of item to set selected>) */
function populateSelectList(select_e, newValues_2dArray, selected_index)
{
var setSelected = (selected_index == null) ? 0 : selected_index;
var i;
var j = 0;
   // empty existing items
   for (i = select_e.options.length; i >= 0; i--)
   {
      select_e.options[i] = null;
   }
   if (newValues_2dArray != null)
   {
      // add new items
      for (i = 0; i < newValues_2dArray.length; i++)
      {
         select_e.options[j] = new Option(newValues_2dArray[i][0]);
         if (newValues_2dArray[i][1] != null)
         {
            select_e.options[j].value = newValues_2dArray[i][1];
         }
         j++;
      }
   }
   if(select_e.options.length > 0)
   {
      select_e.options[setSelected].selected = true;
   }
}

/** create2dArrayFromArray( <array>, <array - optional argument> ) */
function create2dArrayFromArray( array_a, array_b )
{
   var arrayA = array_a;
   var arrayB = (array_b != null) ? array_b : array_a;
   var returnArray = new Array();

   if(arrayA.length != arrayB.length)
   {
      var longerArray = (arrayA.length > arrayB.length) ? arrayA.length : arrayB.length;
      for(var i = 0; i < longerArray; i++)
      {
         if( arrayA[i] == null && arrayB[i] != null )
         {
            arrayA[i] = arrayB[i];
         }
         else if(arrayB[i] == null && arrayA[i] != null )
         {
            arrayB[i] = arrayA[i];
         }
         else if( arrayA[i] == null && arrayB[i] == null)
         {
            arrayA[i] = '';
            arrayB[i] = '';
         }
      }
   }

   for(var ii = 0; ii < arrayA.length; ii++ )
   {
      if(arrayA[ii] != null && arrayB[ii] != null)
      {
         returnArray[ii] = new Array( arrayA[ii], arrayB[ii] );
      }
      else if(arrayA[ii] == null && arrayB[ii] != null)
      {
         returnArray[ii] = new Array( arrayB[ii], arrayB[ii] );
      }
      else if(arrayB[ii] == null && arrayA[ii] != null)
      {
         returnArray[ii] = new Array( arrayA[ii], arrayA[ii] );
      }
      else
      {
         returnArray[ii] = new Array('','');
      }
   }
   return returnArray;
}

/** createCookie(<name of variable>,
                 <value of variable>,
                 <days to keep cookie from expiring, otherwise expires with browser session - optional argument>) */
function createCookie(name,value,days)
{
   if (days !== null)
   {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
   }
   else
   {
      expires = "";
   }
   document.cookie = name+"="+value+expires+"; path=/";
}

/** readCookie(<name of variable>) returns value of cookie or null if not exists */
function readCookie(name) {
   var cVarName = name + "=";
   var cVarValue = null;
   var cVarArray = document.cookie.split(';');
   for(var i = 0; i < cVarArray.length; i++)
   {
      var cVar = cVarArray[i];
      while(cVar.charAt(0) == ' ')
      {
         cVar = cVar.substring(1,cVar.length);
      }
      if(cVar.indexOf(cVarName) === 0)
      {
         cVarValue =  cVar.substring(cVarName.length,cVar.length);
      }
  }
  return cVarValue;
}

/** deleteCookie( name ) */
function deleteCookie(name)
{
   createCookie(name,'',-1);
}

function setSelected( name, obj )
{
   for( var i = 0; i < obj.length; i++ )
   {
      if( obj[i].value == name )
      {
         obj[i].selected = true;
      }
   }
}

function isArray( mustBeNonFormElementObject )
{
   var obj = mustBeNonFormElementObject;
   if (typeof obj == 'object')
   {
      var matchedPattern = obj.constructor.toString().match(/array/i);
      return (matchedPattern != null);
   }
   return false;
}

/** used to show or hide an HTML element (most reliable with DIV tags) by unique id
   showHideElement( <string: comma seperated list of ids>, <string: values of "show" or "hide">) */
function showHideElement( elementIds_csv, showOrHide_string )
{
   var elementList = elementIds_csv.split(',');
   var showOrHide = showOrHide_string.toLowerCase();
   var styleDisplay = "";

   if(showOrHide == "show")
   {
      styleDisplay = "block";
   }
   else if(showOrHide == "hide")
   {
      styleDisplay = "none";
   }
   else
   {
      styleDisplay = "auto";
   }

   if(document.getElementById)
   {
      for(var i = 0; i < elementList.length; i++)
      {
         document.getElementById(elementList[i]).style.display = styleDisplay;
      }
   }
   else if(document.all)
   {
      for(var i = 0; i < elementList.length; i++)
      {
         document.all[elementList[i]].style.display = styleDisplay;
      }
   }
}

/** Puts a message in the status bar of the browser window.
      hideDelay_seconds is an optional int. Defaults to 5 seconds. */
function showStatusMessage( message_string, hideDelay_seconds )
{
   if(message_string != null)
   {
      window.status = message_string;
   }
   var hideDelay = (hideDelay_seconds != null) ? hideDelay_seconds : 5;
       hideDelay = hideDelay * 1000;
   var action = "window.status = '';";
   setTimeout(action, hideDelay);
}
