var former_data = [];
var former_error_msg = [];
var former_changed = [];


function process_former_data(form_name) {
  var form_data = former_data[form_name];

  for(var key in form_data ) {
    get_check_handler(form_name, key, true);
    }

  var form_object = document.forms[form_name];

  var form_submit_handler = function(e) {
    e = e || window.event;

    var result = process_former_data_check(form_name);

    if( result == false ) {
      if(typeof e.preventDefault != 'undefined') e.preventDefault();
      }
    else {
      former_changed[form_name] = false;
      }

    return result;
  }
  
  addHandler(form_object, "submit", form_submit_handler);


  var page_unload_handler = function(e) {
    e = e || window.event;
    
    var result = ''; // по умолчанию игнорируем изменения
    
    if( typeof former_changed[form_name] != 'undefined' && former_changed[form_name] == true ) {
      result = former_error_msg["unload"];
      }

    if(result != '') e.returnValue = result;
    
    return ( result != '' ? result : null );
  }

  addHandler(window, "beforeunload", page_unload_handler);
}

function process_former_data_check(form_name) {
  var form_data = former_data[form_name];
  var result = true;

  for(var key in form_data ) {
    form_data[key].check_handler();

    if(form_data[key].is_valid == false) result = false;
  }

  //if(result == true) alert('sending');

  return result;
}


function get_check_handler(form_name, key, add_check_handler) {  
  var obj = former_data[form_name][key];
  var item_field_object = document.getElementById(obj.id + "_field");
  var item_error_object = document.getElementById(obj.id + "_error");

  if( obj.checker == undefined ) obj.checker = 'regexp';

  var handler = function() {
    var result = true;
    var error = "ok";
    var value = item_field_object.value;
    
    former_changed[form_name] = true;

    if( obj.required != undefined && value == "" ) {
      result = false;
      error = "required";
      }
    else if(obj.checker == "regexp" && value != "" && obj.regexp != undefined) {
      var reg = new RegExp(obj.regexp);
      result = reg.test(item_field_object.value);
      if(result == false) error = "regexp";
      }

    if( obj.validate != undefined && obj.validate != "silent" && obj.validate != "inline" ) {
      item_error_object.style.color = (error == "ok") ? "green" : "red";
      item_error_object.innerHTML = former_error_msg[error];
      }
    else
      {
      result = true;
      }

    former_data[form_name][key].is_valid = result;

    return true;
  }

  if(add_check_handler == true) addHandler(item_field_object, "keyup", handler);

  former_data[form_name][key].check_handler = handler;
}

function show_error() {}


