var
error_message = '',
validators = {
 'password' : /^[0-9a-zA-Z\.\-\_]*$/,
 'name'     : /^[\sa-zA-Z\&\,]*$/,
 'full_name': /^[\sa-zA-Z\&\,]*$/,
 'address'  : /^[\s0-9a-zA-Z\.\-\\\/]*$/,
 'text'     : /^.*$/,
 'email'    : /^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/,
 'phone'    : /^[\d\.\s\-]+$/,
 'integer'  : /^[\+\-]?\d*$/,
 'float'    : /^[\+\-]?\d*\.?\d*$/,
 'date'     : /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/,
 'time'     : /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})$/
}
  
function valid(form_field, type, display_name, allow_empty){
  /* form_field.value == display_name - this is for the cases where the display name replaces the empty value */
  if (form_field.value.length == 0 || form_field.value == display_name){
    if (!allow_empty){
      if (error_message == '') form_field.focus();
      error_message = error_message + display_name + ' is a required field!' + '\n';
      return false;
    }
  } else {
    if(type=='date'){
        var valid = true;
		    if (!validators[type].test(form_field.value)) valid = false;
		    if (RegExp.$1 > 12 || RegExp.$2 > 31) valid = false; // check allowed ranges	
		    var dt_test = new Date(RegExp.$3, Number(RegExp.$1-1), RegExp.$2); // check number of days in month
		    if (dt_test.getMonth() != Number(RegExp.$1-1)) valid = false;
        if(!valid){
          if (error_message == '') form_field.focus(); 
          error_message = error_message + '"' + form_field.value + '" is not valid value for ' + display_name + '! Please use mm/dd/yyyy format.' + '\n';
        }
		return valid;
    } 
    if(type=='time'){
        var valid = true;
		    // check format
		    if (!validators[type].test(form_field.value)) valid = false;
		    // check allowed ranges	
		    if (RegExp.$1 > 23 || RegExp.$2 > 59 || RegExp.$3 > 59) valid = false;
        if(!valid){
          if (error_message == '') form_field.focus(); 
          error_message = error_message + '"' + form_field.value + '" is not valid value for ' + display_name + '!' + '\n';
        }
		return valid;
    } 
    if (!validators[type].test(form_field.value)){
      if (error_message == '') form_field.focus(); 
      error_message = error_message + '"' + form_field.value + '" is not valid value for ' + display_name + '!' + '\n';
      return false;
    }
    if(type=='phone'){
		  if(form_field.value.length<10){
				if (error_message == '') form_field.focus(); 
				error_message = error_message + display_name + ' must be at least 10 characters long!' + '\n';
				return false;
			}
		}
  }
  return true;
}

function valid_password(form_field, retype_field, display_name, allow_empty){
  if (form_field.value.length == 0){
    if (!allow_empty){
      if (error_message == '') form_field.focus();
      error_message = error_message + display_name + ' is a required field!' + '\n';
      return false;
    }
  } else {
    if (!validators['password'].test(form_field.value)){
      if (error_message == '') form_field.focus();
      error_message = error_message + 'Allowed characters for ' + display_name + ' are (0-9, a-z, A-Z, ".", "-" and "_")!' + '\n';
      return false;
    }
    else if (form_field.value != retype_field.value){
      if (error_message == '') form_field.focus();
      error_message = error_message + 'The ' + display_name + ' was not retyped correctly!' + '\n';
      retype_field.value = '';
      return false;
    }
  }
  return true;
}

function display_errors(){
  if (error_message != ''){
    alert(error_message);
    error_message = '';
  }
}