  var global_current_date  = new Date();
  var global_current_month = global_current_date.getMonth()+1;
  var global_current_day   = global_current_date.getDate();
  var global_current_year  = global_current_date.getFullYear();
  
  var possible_yes         = new Array();
  
  possible_yes["yes"]      = true;
  possible_yes["Yes"]      = true;
  possible_yes["Y"]        = true;
  possible_yes["y"]        = true;
  possible_yes["1"]        = true;
  possible_yes["true"]     = true;
  possible_yes["True"]     = true;
  possible_yes["on"]       = true;
  
  /*
   *util functions
   *
   *isNullorEmpty :: check for empty or null values
   *trim :: remove white space
   *showHide:: hide or show hidden fields passing switch state and id
   *isDefined :: checks if id/field exists
   */
  function trim (str){
    return str.replace(/^\s+/, '');
  }
  
  //test if null or empty
  function isNullOrEmpty(id){
    return (  (trim($F(id)) == null || trim($F(id)) == '') && isDefined(id)  )
  }
  
  function isDefined(id){
    if($(id) == null){
      if(document.getElementsByName(id).length == 0)
        return false;
    }else{
      return true;
    }
  }
  
  function fadeIn(id){
    if(isDefined(id)){
      new Effect.Appear(id);
    }
  }
  
  function fadeOut(id){
    if(isDefined(id)){
      new Effect.Fade(id);
    }
  }
  
  function clearInputField(id){
    if(isDefined(id)){
      $(id).value="";
    }
  }
  
  function clearErrorMessage(id){
    if(isDefined(id)){
      $(id).innerHTML="";
    }
  }

  function isValidLength(id,error_id, length_required){
    var is_valid  = true;
    var error_msg = '\nPlease enter a valid length.';
    if(isDefined(id) && isDefined(error_id)){
      if ($(id).value.length != length_required ){
        $(error_id).innerHTML = error_msg;
        fadeIn(error_id);
        is_valid = false;
      }
    }
    return is_valid;
  }
  
  function isValidSelection(error_id){
    var is_valid = true;
    if(isDefined(error_id)){
      var parent      = $(error_id).parentNode;
      var selections  = parent.getElementsByTagName('SELECT');
      if(selections.length > 0){
        if ( $(selections[0].id).value == "" ){
          $(error_id).innerHTML = '\nThis is a required field.';
          fadeIn(error_id);
          is_valid = false;
        }
      }
    }
    return is_valid;
  }
  
  function isChecked(error_id){
    var is_valid = true;
    if(isDefined(error_id) ){
      var radios = Form.getElements($(error_id).parentNode);
      if ( radios.length > 0 && !radios[0].checked && !radios[1].checked  ){
        $(error_id).innerHTML = '\nPlease select one of the above options.';
        fadeIn(error_id);
        is_valid = false;
      }
    }
    return is_valid;
  }
  
  function unChecked(error_id){
    var is_valid = true;
    if(isDefined(error_id) ){
      var checkbox = Form.getElements($(error_id).parentNode);
      checkbox[0].checked = false;
      checkbox[1].checked = false;
    }
    return is_valid;
  }
  
  function isEmptyInput(error_id){
    var is_empty = false;
    if(isDefined(error_id)){
      var input_field   = Form.getElements($(error_id).parentNode);
      if(input_field.length > 0){
        if ( isNullOrEmpty(input_field[0].id)   ){
          is_empty = true;
          $(error_id).innerHTML = '\nThis is a required field.';
          fadeIn(error_id);
        }
      }
    }
    return is_empty;
  }
  
  function isValidNumber(error_id){
    var is_valid = true;
    if(  isDefined(error_id)  ){
      var number_field  = Form.getElements($(error_id).parentNode);
      if(number_field.length > 0){
        if ( isNaN(trim($(number_field[0].id).value) )   ){
          $(error_id).innerHTML = '\nThis is a numeric field.';
          fadeIn(error_id);
          is_valid = false;
        }
      }
    }
    return is_valid;
  }
  
  function isValidRequiredAlphaInput(error_id){
    var is_valid = true;
    if(isDefined(error_id)){
      var alpha_field   = Form.getElements($(error_id).parentNode);
      if(alpha_field.length > 0){
        if (isEmptyInput(error_id)){
          $(error_id).innerHTML = '\nThis is a required field.';
          fadeIn(error_id);
          is_valid = false;
        }else if ( !/^[\D]+$/.test( (trim($(alpha_field[0].id).value)) )  ){
          $(error_id).innerHTML = '\nPlease use letters only (a-z).';
          fadeIn(error_id);
          is_valid = false;
        }
      }
    }
    return is_valid;
  }
  
  function isValidUsState(error_id){
    var is_valid   = true;
    if( isDefined(error_id) ){
      var parent_node    = $(error_id).parentNode;
      var states         = parent_node.getElementsByTagName('SELECT');
      var error_msg      = '\nPlease select a state.';
      if(states.length == 0){ //checks for drop down element is valid 
        var states       = parent_node.getElementsByTagName('INPUT');
        error_msg        = '\nPlease enter a valid state.'
      }
      if( !/^[a-z]{2}$/i.test(states[0].value)   ){
        $(error_id).innerHTML = error_msg;
        fadeIn(error_id);
        is_valid = false;
      }
    }
    return is_valid;
  }
  
  function isValidEmail(error_id){
    var is_valid = true;
    // validate email
    if( isDefined(error_id)  ){
      var email_field = Form.getElements($(error_id).parentNode);
      if(email_field.length > 0){
        var email     = email_field[0].id;
        if (isNullOrEmpty(email)  ){
          $(error_id).innerHTML = '\nPlease enter your email address.';
          fadeIn(error_id);
          is_valid = false;
        }else if (!/^([A-Z0-9]+[._]?){1,}[A-Z0-9-]+\@(([A-Z0-9]+[-]?){1,}[A-Z0-9]+\.){1,}([A-Z]{2,4}|museum)$/i.test($F(email))){
          $(error_id).innerHTML = '\nPlease enter a valid email address.';
          fadeIn(error_id);
          is_valid = false;
        }
      }
    }
    return is_valid;
  }
  
  function isValidPhone(error_id){
    var is_valid     = true;
    if(  isDefined(error_id)  ){
      var phone_fields = Form.getElements($(error_id).parentNode);
      if(phone_fields.length == 3){
        var phone_area      = phone_fields[0].value;
        var phone_exchange  = phone_fields[1].value;
        var phone_station   = phone_fields[2].value;
      }else if(phone_fields.length == 1){
        var phone_area      = phone_fields[0].value.substr(0,3);
        var phone_exchange  = phone_fields[0].value.substr(3,3);
        var phone_station   = phone_fields[0].value.substr(6,4);
      }
      if(  !/^[2-9][0-8][0-9]$/.test(phone_area) || !/^[2-9][0-9][0-9]$/.test(phone_exchange) || !/^[0-9][0-9][0-9][0-9]$/.test(phone_station)  ){
        is_valid = false;
        $(error_id).innerHTML = "\nPlease enter a valid phone number.";
        fadeIn(error_id);
      }
    }
    return is_valid;
  }

  function isValidHeight(error_id){
    var is_valid = true;  
    //validate height-weight
    if(isDefined(error_id)){
        var parent_node   = $(error_id).parentNode;
        var height_fields = parent_node.getElementsByTagName('SELECT');
          
        if(height_fields.length == 0){
          var height_fields = parent_node.getElementsByTagName('INPUT');
        }
        
        var height_feet   = trim($(height_fields[0].id).value);
        var height_inches = trim($(height_fields[1].id).value);
        
        if(  !/^\d$/.test(height_feet) && /^$/.test(height_feet) ){
          is_valid = false;
          $(error_id).innerHTML = "\nPlease enter a valid height.";
          fadeIn(error_id);
        }
        if(  is_valid  ){
          if(  !/^\d$/.test(height_inches) && /^$/.test(height_inches) ){
            is_valid = false;
            $(error_id).innerHTML = "\nPlease enter a valid height.";
            fadeIn(error_id);
          }
        }
      
        if(  is_valid  ){
          fadeOut(error_id);
        }
    }
    return is_valid;
  }

  function isValidZip(error_id){
    var is_valid   = true;
    if(isDefined(error_id)){
      var zipcode     = Form.getElements($(error_id).parentNode);
      if(  !/^\d{5}$/.test($F(zipcode[0].id))  ){
        $(error_id).innerHTML = '\nPlease enter a valid zip code.';
        fadeIn(error_id);
        is_valid = false;
      }
    }
    return is_valid;
  }
  /*
   *isValidDate(error_id)
   *returns: true/false
   *checks that the date belongs to the month within the given year
   */
  function isValidDate(error_id){
    var is_valid         = true;
    if(isDefined(error_id)){      
      //error msgs        
      var error_msg_mm   = '\nPlease select a valid month.';
      var error_msg_dd   = '\nPlease select a valid day.';
      var error_msg_yyyy = '\nPlease select a valid year.';
      var error_msg_valid= '\nPlease select a valid date.';
      
      var parent_node    = $(error_id).parentNode;
      var date_fields    = parent_node.getElementsByTagName('SELECT');
      
      if(date_fields.length == 0){
        var date_fields  = parent_node.getElementsByTagName('INPUT');
        error_msg_mm     = '\nPlease enter a valid month.';
        error_msg_dd     = '\nPlease enter a valid day.';
        error_msg_yyyy   = '\nPlease enter a valid year.';
        error_msg_valid  = '\nPlease enter a valid date.';
      }
      if(  date_fields.length == 3  ){
        var id_mm   = date_fields[0].id;
        var id_dd   = date_fields[1].id;
        var id_yyyy = date_fields[2].id;
        if(isDefined(id_mm) && isDefined(id_dd) && isDefined(id_yyyy) && isDefined(error_id)){
        	//validate if it is a valid date (day is in the month)
          if(is_valid){
            var new_date = new Date();
            var this_mm  = $F(id_mm) - 1;
            new_date.setFullYear( $F(id_yyyy), this_mm, $F(id_dd) );
          	if ( new_date.getMonth() != this_mm ) {
              $(error_id).innerHTML = error_msg_valid;
              fadeIn(error_id);
          	  is_valid = false;
          	}
          }
        }
      }
    }
    return is_valid;
  }