var lang = [];
lang['required']      = 'Pole %s% jest wymagane.';
lang['isNumber']      = 'Pole %s% musi zawierać liczbę.';
lang['isInteger']     = 'Pole %s% musi zawierać liczbę całkowitą.';
lang['isPostInteger'] = 'Pole %s% musi zawierać dodatnią liczbę całkowitą.';
lang['isNotDefault']  = 'Pole %s% jest wymagane.';
lang['notExists']     = 'Wprowadzone %s% już istnieje.';
lang['regexp']        = 'Pole %s% musi zawierać poprawną wartość.';
lang['validPrice']    = 'Pole %s% musi zawierać poprawną cenę.';

function required(str) {
  if (str == null || str == '') {
    return false;
  }
  return true;
}

function isNumber(str) {
  var decimal = false;
  str = str.toString();
  for (var i = 0; i < str.length; i++) {
    var char = str.charAt(i);
    if (i == 0 && char == '-') {
      continue;
    }
    if (char == '.' && !decimal) {
      decimal = true;
      continue;
    }
    if (char < '0' || char > '9') {
      return false;
    }
  }
  return true;
}

function isInteger(str) {
  str = str.toString();
  for (var i = 0; i < str.length; i++) {
    var char = str.charAt(i);
    if (i == 0 && char == '-') {
      continue;
    }
    if (char < '0' || char > '9') {
      return false;
    }
  }
  return true;
}

function isPostInteger(str) {
  str = str.toString();
  for (var i = 0; i < str.length; i++) {
    var char = str.charAt(i);
    if (char < '0' || char > '9') {
      return false;
    }
  }
  return true;
}

function isNotDefault(str, default_str) {
  str = str.toString().toLowerCase();
  str = str.replace(/^\s+/, '');
  str = str.replace(/\s+$/, '');
  str = str.replace(/\s{2,}/, ' ');
  default_str = default_str.toString().toLowerCase();
  if (str == default_str) {
    return false;
  }
  return true;
}

function notExists(needle, haystack) {
  needle = needle.toString().toLowerCase();
  needle = needle.replace(/^\s+/, '');
  needle = needle.replace(/\s+$/, '');
  needle = needle.replace(/\s{2, }/, ' ');
  haystack = haystack.split('#')  
  for (var i in haystack) {
    if (needle == haystack[i].toString().toLowerCase()) {
      return false;
    }
  }
  return true;
}

function regexp(str, re, method) {
  var patt = new RegExp(re);
  switch (method) {
    case 'test':
      return patt.test(str);
      break;
    case 'search':
      return str.search(patt);
      break;
    case 'exec':
      return patt.exec(str);
      break;
  }
}

function validPrice(str) {
  return regexp(str, '^[0-9]{1,10}(\.[0-9]{1,2})?$', 'test');
}

function validate(valid_array) {
  for (var i in valid_array) {
    var field = valid_array[i].field;
    var rules = valid_array[i].rules.split('|');;
    for (var j = 0; j < rules.length; j++) {
      var params = valid_array[i].params[j];
      if (eval(rules[j] + '(' + params + ')') == false) {
        window.alert(lang[rules[j]].replace('%s%', field));
        return false;
      }    
    }
  }
  return true;
}

function validate2(field, method) {
  var args = validate.arguments;
  for (var i = 1; i < args.length; i++) {
    if (eval(args[i] + "('" + field + "')") == false) {
      return false;
    }
  }
  return true;
}

/*

// rozpoczecie sprawdzania poprawnosci
function dispatcher(validation_func) {
  this.doValidate = validation_func;
}

var dispatchLookup = new Array();
dispatchLookup['isNotEmpty'] = new dispatcher(isNotEmpty);
dispatchLookup['isPostInteger'] = new dispatcher(isPostInteger);
dispatchLookup['isInteger'] = new dispatcher(isInteger);
dispatchLookup['isNumber'] = new dispatcher(isNumber);

// glowna funkcja sprawdzajaca wywolywana
// przez obsluge zdarzen formularza
function validate(frame, field, method) {
  g_frame = frame;
  g_field = eval('window.' + frame.name + 'document.forms[0].' + field.name);
  var args = validate.arguments;
  for (var i = 2; i < args.length; i++) {
    if (!dispatchLookup[args[i]].doValidate()) {
      return false;
    }
  }
  return true;
}

  przyklady wywolan
  <input type="text" name="number" size="10" onChange="parent.validate(window, this, 'isNumber')" />
  onSubmit="return checkForm(this)"
  
  function checkForm(form) {
    if (parent.validate(window, form.birthdate, 'isDateFormat')) {
      if (parent.validate(window, form.phone, 'isPhone')) {
        if (parent.validate(window, form.name, 'isNotEmpty')) {
          return true;
        }
      }
    }
    return false;
  }


// funkcje i instrukcje globalne
// eval(), escape(), isNaN(), Number(), parseFloat(), parseInt(), String(), unescape(), unwatch(), watch()

*/

function process_form(form) {
  var element_names = new Object();
  element_names["req_email"] = "E-mail";
  element_names["req_subject"] = "Temat";
  element_names["req_message"] = "Wiadomość";
  element_names["req_username"] = "Nazwa";
  element_names["req_token"] = "Token";  

  if (document.all || document.getElementById) {
    for (i = 0; i < form.length; ++i) {
      var elem = form.elements[i];
      if (elem.name && elem.name.substring(0, 4) == "req_") {
        if (elem.type && (elem.type=="text" || elem.type=="textarea" || elem.type=="password" || elem.type=="file") && elem.value=='') {
          window.alert("\"" + element_names[elem.name] + "\" jest obowiązkowym polem.");
          elem.focus();
          return false;
        }
      }
    }
  }

  return true;
}