<!-- 

var errors;

function CheckForm()
{
  //alert('started checking form');
  myForm = arguments[0];
  errors = '';       //clear out errors...
  notagain = new Object;

  var standardChecks = new Object;
  var standardMessages = new Object;
  standardChecks['#firstName'] = ['.+','^.{1,30}$'];
  standardMessages['#firstName'] = ['Please enter your first name','Please use no more than 30 characters for your first name'];
  standardChecks['#lastName'] = ['.+','^.{1,30}$'];
  standardMessages['#lastName'] = ['Please enter your last name','Please use no more than 30 characters for your last name'];
  standardChecks['#searchLastName'] = ['.+','^.{1,30}$'];
  standardMessages['#searchLastName'] = ['Please enter the last name','Please use no more than 30 characters for the last name'];
  standardChecks['#primaryFirstName'] = ['.+','^.{1,30}$'];
  standardMessages['#primaryFirstName'] = ['Please enter the primary registrants first name','Please use no more than 30 characters for your first name'];
  standardChecks['#primaryLastName'] = ['.+','^.{1,30}$'];
  standardMessages['#primaryLastName'] = ['Please enter the primary registrants last name','Please use no more than 30 characters for your last name'];
  standardChecks['#address1'] = ['.+'];
  standardMessages['#address1'] = ['Please enter your address'];
  standardChecks['#address2'] = ['.*'];
  standardMessages['#address2'] = ['NOT REQUIRED'];
  standardChecks['#city'] = ['.+'];
  standardMessages['#city'] = ['Please enter your city'];
  standardChecks['#zip'] = ['.+','^\\d+$','^\\d{5}$'];
  standardMessages['#zip'] = ['Please enter your postal code','Please use only digits for your postal code','Please use 5 digits for your postal code'];
  standardChecks['#zip2'] = ['^$|\\d{4}'];
  standardMessages['#zip2'] = ['Please use four digits for your postal+4 code'];
  standardChecks['#phone'] = ['.+','^\\(?\\d{3}\\)?\\ ?\\/?\\-?\\.?\\s?\\d{3}\\ ?\\/?\\.?\\-?\\s?\\d{4}$'];  //only US phone numbers
  standardMessages['#phone'] = ['Please enter your daytime phone number','Please enter a valid daytime phone number'];
  standardChecks['#optphone'] = ['^$|^\\(?\\d{3}\\)?\\ ?\\/?\\-?\\.?\\s?\\d{3}\\ ?\\/?\\.?\\-?\\s?\\d{4}$'];  //only US phone numbers
  standardMessages['#optphone'] = ['Please enter a valid evening phone number'];
  standardChecks['#fax'] = ['^$|^\\(?\\d{3}\\)?\\ ?\\/?\\-?\\.?\\s?\\d{3}\\ ?\\/?\\.?\\-?\\s?\\d{4}$'];  //only US phone numbers
  standardMessages['#fax'] = ['Please enter a valid fax number'];
  standardChecks['#email'] = ['.+','^[0-9a-zA-Z]([\\-\\_\\.]?[0-9a-zA-Z])*\@[0-9a-zA-Z]([\\-\\.]?[0-9a-zA-Z])*\\.[a-zA-Z]{2,4}$','^.{6,50}$'];
  standardMessages['#email'] = ['Please enter your email address','Please enter a valid email address','Please use no more than 50 characters for your email address'];
  standardChecks['#optemail'] = ['^$|^[0-9a-zA-Z]([\\-\\_\\.]?[0-9a-zA-Z])*\@[0-9a-zA-Z]([\\-\\.]?[0-9a-zA-Z])*\\.[a-zA-Z]{2,3}$','^.{0,50}$'];
  standardMessages['#optemail'] = ['Please enter a valid email address','Please use no more than 50 characters for your email address'];
  standardChecks['#password'] = ['.+','^.{1,16}$'];
  standardMessages['#password'] = ['Please enter your password','Please use no more than 16 characters for your password'];
  standardChecks['#passwordHint'] = ['.+','^.{1,60}$'];
  standardMessages['#passwordHint'] = ['Please enter your password clue','Please use no more than 60 characters for your password clue'];
  standardChecks['#giftRecipient'] = ['.+'];
  standardMessages['#giftRecipient'] = ['Please enter all recipients for your gifts'];
  standardChecks['#keywords'] = ['^[0-9a-zA-Z\&\\s]+$'];
  standardMessages['#keywords'] = ['Please enter one or more keywords or a single, five digit, item id. Only letters, numbers and the "&" sign are allowed.'];
  standardChecks['#itemId'] = ['.+','^\\d+$','^\\d{5}$'];
  standardMessages['#itemId'] = ['Please enter an item ID','Please enter only digits for the item ID','Please enter five digits for the item ID'];
  standardChecks['#sku'] = ['.+','^\\d+$','^\\d{12}$'];
  standardMessages['#sku'] = ['Please enter a SKU','Please enter only digits for the SKU','Please enter twelve digits for the SKU'];

  standardChecks['#eventYear'] = ['^\\d{4}$'];
  standardMessages['#eventYear'] = ['Please enter an event year'];
  standardChecks['#eventMonth'] = ['^.{1,2}$'];
  standardMessages['#eventMonth'] = ['Please enter an event month'];
  standardChecks['#eventDay'] = ['^.{1,2}$'];
  standardMessages['#eventDay'] = ['Please enter an event day'];

  standardChecks['#multiemail'] = ['.+'];
  standardMessages['#multiemail'] = ['Please enter the email address(es)'];

  standardChecks['#catalog'] = ['^.{1,12}$'];
  standardMessages['#catalog'] = ['Please enter your catalog code'];
  standardChecks['#initials'] = ['^.{2,3}$'];
  standardMessages['#initials'] = ['Please enter your initials'];
  standardChecks['#agentLogin'] = ['^.{1,20}$'];
  standardMessages['#agentLogin'] = ['Please enter your login to use a special payment'];
  standardChecks['#agentPassword'] = ['^.{1,20}$'];
  standardMessages['#agentPassword'] = ['Please enter your password to use a special payment'];

  var notthisone = 0;
  var fieldnum = 0;
  var numcodes = 0;
  var numchecks = 0;
  var code = '';

  if (!eval("_init_" + myForm.name + "()"))
  {
    alert("Could not initialize checks and messages - expected function _init_" + myForm.name + "()");
    return false;
  }

  //expects additional parameters to be function names to be called...
  if (arguments.length > 1)
  {
    for(var ct = 1; ct < arguments.length; ct++)
    {
      var customReturn = eval(arguments[ct]);
      if(customReturn == false)
      {
        return false;
      }
    }
  }
 
  var myRegex = new RegExp;
  var check = '';

  for(fieldnum = 0; fieldnum < myForm.elements.length; fieldnum++)
  {
    var fieldname = myForm.elements[fieldnum].name;

    if (!fieldname.match(/[\w\.\_\-]+$/))
    {
      break;
    }

    fieldname = fieldname.match(/([\w\.\_\-]+$)/)[1];
    fieldname = fieldname.replace(/\./g, "\_");

    //if ((myForm.elements[fieldnum].type != "hidden") && !(void 0 == fieldname + "_checks"))

    if ((myForm.elements[fieldnum].type != "hidden") 
      && (myForm.elements[fieldnum].type != "image") 
      && (myForm.elements[fieldnum].type != "submit")
      && !(fieldname.substring(0,"NO_CHECK_".length) == "NO_CHECK_"))
    {
      //alert(fieldname);
      numchecks = eval(fieldname + "_checks.length");
      for(var ct = 0; ct < numchecks; ct++)
      {
        check = eval(fieldname + "_checks[" + ct + "]");
        if (check.match(/^!/))
        {
          check = check.replace(/^!/, '');
          myRegex.compile(check);
          if (myRegex.test(myForm.elements[fieldnum].value))
          {
            var message = '';  
            message = eval(fieldname + "_messages[" + ct + "]");
            errors += message + "\n";
            break;
          }
        }
        else if (check.match(/^#/))
        {
          if (check.match(/^#\d+$/))
          {
            notthisone = check.match(/^#(\d+)$/)[1];
  
  	    if (myForm.elements[fieldnum].selectedIndex == notthisone)
            {
              var message = '';  
              message = eval(fieldname + "_messages[" + ct + "]");
              errors += message + "\n";
              break;
            }
          }
          else if (check.match(/^#RR/))
          {
            var noneed = 0;
            for(i in notagain)
            {
              if (i == fieldname)
              {
                noneed++;
              }
            }
            if (!noneed)
            {
              notagain[fieldname] = 0;
            }
            if (!notagain[fieldname])
            {
              var realname = myForm.elements[fieldnum].name;
              var len = myForm[realname].length; 
              if (len == void 0)
              {
                if (myForm[realname].checked)
                {
                  break;
                }else
                {
                  var message = '';
                  message += eval(fieldname + "_messages[" + ct + "]");
                  errors += message + "\n";
                  break;
                }
              }               
              var gotOne = 0;
              for(var i=0; i < len; i++)
              {
                if (myForm[realname][i].checked) 
                {
                  gotOne++;
                }
              }
              notagain[fieldname] = 1;
              if (!gotOne)
              {
                var message = '';  
                message = eval(fieldname + "_messages[" + ct + "]");
                errors += message + "\n";
                break;
              }
            }
          }
          else if (check.match(/^##/))
          {
            if (myForm.elements[fieldnum].selectedIndex == -1 || myForm.elements[fieldnum].options[myForm.elements[fieldnum].selectedIndex].value == "") 
            {
              var message = '';  
              message = eval(fieldname + "_messages[" + ct + "]");
              errors += message + "\n";
              break;
            }
          }
          else if (check.match(/^#F(.+)$/))
          {
            var funk = check.match(/^#F(.+)$/)[1];
            var test = '';
            eval("test = " + funk);
            if(test)
            {
              var message = '';  
              message = eval(fieldname + "_messages[" + ct + "]");
              errors += message + "\n";
              break;
            }
          }
          else          // we aughta have one of the standard checks...
          {
            /* 
               muauahahaa!  for the MST name crap:
               if the check has MST on the end, clip that and expect the user
               to define the messages.  beautiful!
            */

            var standardMessageArray;

            if(check.substring(check.length-3,check.length) == 'MST')
            {
              check = check.substring(0,check.length-3);
              standardMessageArray = eval(fieldname + "_messages");
            }
            else
            {
              standardMessageArray = standardMessages[check];
            }

            var standardCheckArray = standardChecks[check];

            for (scct = 0; scct < standardCheckArray.length; scct++)
            {
              myRegex.compile(standardCheckArray[scct]);
              if (!myRegex.test(myForm.elements[fieldnum].value))
              {
                errors += standardMessageArray[scct] + "\n";
                break;
              }
            }
          }
        }
        else
        {
          myRegex.compile(check);
          if (!myRegex.test(myForm.elements[fieldnum].value))
          {
            var message = '';  
            message = eval(fieldname + "_messages[" + ct + "]");
            errors += message + "\n";
            break;
          }
        }
      }
    }
  }

  if (errors)
  {
    alert(errors);
    return false;
  }

  return true;
}

function CheckIfOne()
{
  var myForm = arguments[0];
  var num = 0;
  var value = '';

  for(var ct=0; ct < myForm.elements.length; ct++)
  {
    value = myForm.elements[ct].value;
    if ((value != '') && (myForm.elements[ct].type != 'hidden') && (myForm.elements[ct].type != 'image') && (myForm.elements[ct].type != 'submit'))
    {
      num += 1;
    }
  }
  if (num > 1)
  {
      errors += "Please fill out only ONE of the available fields\n";
  }
  else if (num < 1)
  {
      errors += "Please fill out ONE of the available fields\n";
  }
}

//-->
