var
display_error = true,
error_message = '',
validators = {
 'password' : /^[0-9a-zA-Z\.\-\_]*$/,
 'name'     : /^[a-zA-Z0-9]*$/,
 'full_name': /^[\sa-zA-Z0-9]*$/,
 'address'  : /^[\s0-9a-zA-Z\.\-\\\/]*$/,
 'text'     : /^.*$/,
 'email'    : /^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/,
 'phone'    : /^[\d\.\s\-]+$/,
 'integer'  : /^[\+\-]?\d*$/,
 'float'    : /^[\+\-]?\d*\.?\d*$/,
 'date'     : /^(\d{2})\/(\d{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();
			if(display_error)
      	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(); 
          if(display_error)
      			error_message = error_message + '"' + form_field.value + '" is not valid value for ' + display_name + '!' + '\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(); 
          if(display_error)
      			error_message = error_message + '"' + form_field.value + '" is not valid value for ' + display_name + '!' + '\n';
        }
		    return valid;
    } 
    if(type=='text' || type=='password' || type=='name' || type=='full_name' || type=='address' || type=='phone' ){
	    return true;
    } 
    if (!validators[type].test(form_field.value)){
      if (error_message == '') form_field.focus(); 
      if(display_error)
      	error_message = error_message + '"' + form_field.value + '" is not valid value for ' + display_name + '!' + '\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();
      if(display_error)
      	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();
      if(display_error)
      	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();
      if(display_error)
      	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 = '';
  }
}

function add_error(error){
	error_message = error_message + error + '\n';
}

function set_display_error(value){
	display_error = value;
}