function ag25_kontrolaFormulare() { //definice objektu
  
  var own = this; //hodnota this se muze menit behem skriptu, takze bezpecnost
  
  own.formular = null;
  own.kontrolovaneTypyPoli = new Array(/text/i, /checkbox/i, /password/i, /file/i, /textarea/i); //typy poli, ktere mohou byt kontrolovany
  own.chybovaClassName = 'ag25_kontrolaFormulare_chyba';
  
/* -------------------------------------------------------------------------------------------------------- */
  own.jePovolenyTypPole = function (pole) {
    var i = 0;
    for (i = 0; i < own.kontrolovaneTypyPoli.length; i++) {
      if (pole.type.search(own.kontrolovaneTypyPoli[i]) != -1)
        return true;
    }
    return false;
  }
  
  own.jeTrebaKontrolovat = function (pole) { //pokud je definovan atribut, podleha pole kontrole
    if (pole.title == undefined || pole.title == '')
      return false;
    else
      return true;
  }
  
  own.jePoleSpravne = function (pole) {
    if (pole.type == 'checkbox') {
      if (pole.checked == false)
        return false;
      else
        return true;
    }
    else {
      if (pole.value == '') //validaci emailu nechame na php
        return false;
      else
        return true;
    }
  }
  
  own.kontrola = function (formular) {
    own.formular = formular;
    var i = 0;
    for (i = 0; i < own.formular.elements.length; i++) {
      var pole = own.formular.elements[i];
      if (own.jeTrebaKontrolovat(pole)) {
        if (own.jePovolenyTypPole(pole)) { //jen nektere typy poli mohou byt kontrolovany
          if (own.jePoleSpravne(pole)) {
            pole.className = pole.className.replace(new RegExp('[ ]*'+own.chybovaClassName), ''); //nahrazeni "ag25_kontrolaFormulare_chyba" nebo " ag25_kontrolaFormulare_chyba" za prazdny retezec
          }
          else {
            if (pole.className.search(own.chybovaClassName) == -1) {
              if (pole.className != '')
                pole.className = pole.className + ' ';
              pole.className = pole.className + own.chybovaClassName;
            }
            pole.focus();
            alert(pole.title); //uz vime, ze title je definovan
            return false;
          }
        }
      }
    }
    return true;
  }
}

