$(document).ready(function() {

   /* window.status podle input title */
   $(":input").each(function() {
      var title = $(this).attr("title");
      if (!title) return;
      $(this).focus(function() {
         window.status = title;
      });
      $(this).blur(function() {
         window.status = window.defaultStatus;
      });
   });

   /* validace... */
   if (window.CASTOBCE && window.CDOM && window.COR && window.COZ && window.INVALID_CISLO && window.INVALID_ICO && window.INVALID_KRITERIA && window.INVALID_KRITERIUM && window.INVALID_OBEC && window.INVALID_PRIJMENI && window.INVALID_SLOVNIK && window.INVALID_ZNAKY && window.JMENO && window.OBEC && window.PODNIKATEL && window.PRIJMENI && window.ULICE) {
      $("#kriteria").submit(function() {
         //if (!validate(this)) return false;
         if (!OnSearch(this)) return false;
         $(":input", this).removeAttr("disabled");
      });
      window.status = "Browser validation v. 2.1";
   }
   else {
      window.status = "No browser validation";
   }

   /* on reset, on revert... */
   $("#kriteria").bind("reset", function(e) {
      if ($("#kriterium_osoba").attr("defaultCheck")) {
         $("#kriterium_osoba").click();
      }
      else {
         $("#kriterium_subjekt").click();
      }
   });

   /* podle subjektu */
   $("#kriterium_subjekt").click(function() {
      $(".kriterium_osoba").hide();
      $(".kriterium_osoba :input").attr("disabled", true);
      $(".kriterium_subjekt :input").removeAttr("disabled");
      $(".kriterium_subjekt").show();
   });

   /* podle osob */
   $("#kriterium_osoba").click(function() {
      $(".kriterium_subjekt").hide();
      $(".kriterium_subjekt :input").attr("disabled", true);
      $(".kriterium_osoba :input").removeAttr("disabled");
      $(".kriterium_osoba").show();
   });

   /* podle zaskrtnute volby (default check) */
   if ($("#kriterium_osoba").is(":checked")) {
      $("#kriterium_osoba").click().attr("defaultCheck", true);
   }
   else {
      $("#kriterium_subjekt").click().attr("defaultCheck", true);
   }

   /* focus vybraneho prvku */
   $(".focus").each(function() {
      $(this).focus();
      return;
   });
});

/* validace... */
function validate()
{
   return true;
}

function isNumber(a)
{
   return a.match(/^\d+$/);
}

// funkce pro kontrolu vlozeneho textu do input pole
// a_typ = "T" - text
//         "N" - cislo
//         "X" - SLOVNIKOVA POLOZKA
// a_obj = objekt formulare
function checkSearchInpText(a_typ,a_obj)
{
   var okInput =  1; // indikator chybneho textu
   // overeni vstupnich parametru
   if (!a_typ) {var a_typ = "N";}
   if (a_obj) {
      var testStr = a_obj.value;
   } else {
      // vypiseme chybu ze objekt neexistuje
      alert(a_obj);
      return false;
   }
   // pokud je text prazdny pak je to OK ???
   if (testStr == "") return true;

   // kontroly jednotlivych typu textu
   switch(a_typ) {
      case "N":
         // pro ciselne policka formulare
         if (testStr.match(/^(\d)+$/)==null) {
            okInput = 0;
         }
         break
      case "T":
         // text se zastupnymi znaky
         if (
            testStr.match(/^([^\%\?\*_ <>;]{1,}[^\%\?\*_<>;]{1,})/)==null ||
            testStr.match(/^([ ]{1,})/)!=null ||
            testStr.match(/^([ ]{1,})*([\*\?\%_]{1,})+([ ]{1,})*$/)!=null ||
            testStr.match(/^([\%\?\*_ ]{1,})([^\%\?\*_ ]{0,})/)!=null ||
            testStr.match(/(.[^\%\*\?_]{0,})([\%\?\*_]{1,})([^\%\*\?_]{0,}.)/)!=null
         ) {
            okInput = 0;
         }
         break
      case "X":
         var chyba = 0;
         //rozdelime si text na slova
         var tstTxtArr = testStr.split(" ");
         // provedeme kontrolu jednotlivych slov
         var pocet = 0;
         for (id in tstTxtArr) {
            if (tstTxtArr[id]!="" && tstTxtArr[id]!=" ") {
               if (tstTxtArr[id].match(/^([^<>;\%\?\*_]{1,})$/g)==null) {
                  chyba = 1;
                  break;
               }
               pocet+=tstTxtArr[id].length;
            }
         }

         if (pocet<2 || chyba == 1) {
            okInput = 0;
         }
         break
   }

   if (okInput == 0) return false;
   return true;
}

// Funkce otestuje, zada je spravne ICO
// IN: a_ICO = hodnota IC cisla
function isICO(a_ICO)
{
   // doplnime si na delku 8 znaku nulama
   if (a_ICO.length < 8) {
      var fillNum = (8 - a_ICO.length);
      for (var i=0;i<fillNum;i++) {
         a_ICO = "0"+a_ICO;
      }
   }
   //kontrola na cislo a delku
   if (a_ICO.length != 8 || !isNumber(a_ICO)) {
	    return false;
   }
   //kontrolni soucet vahovych soucinu
   l_soucet = 0;
	for (i = 8;i > 1;i--) {
	   l_soucet += (i * a_ICO.charAt(8-i));
	}
	l_zbytek = l_soucet % 11;
	//kontrolni cislice
   switch (l_zbytek) {
	   case 0:
			   l_kontrolniCislice = 1;
				break;
	   case 10:
			   l_kontrolniCislice = 1;
				break;
	   case 1:
			   l_kontrolniCislice = 0;
				break;
      default:
			   l_kontrolniCislice = 11 - l_zbytek;
		 	   break;
   }
	//porovnani kontrolni cislice
	if	(a_ICO.charAt(7) != l_kontrolniCislice) {
	   return false;
	}
	return true;
}

function isDate(a_datum) {
   // kontrola syntaxe datumu podle reg vyrazu
   var re = new RegExp("^([0-9]{1,2})[.]([0-9]{1,2})[.]([0-9]{4})?$","ig");
   var str= new String(a_datum);
   if (!re.test(str)) return false;

   a_datum_puvodni = a_datum.split(".");
   if (a_datum_puvodni.length!=3) return false;
   if (a_datum_puvodni[2].length!=4) return false;
   a_datum_nove = new Date(a_datum_puvodni[2],a_datum_puvodni[1]-1,a_datum_puvodni[0],0,0,0);

   if (a_datum_puvodni[1] == 2) { // zkontrolujeme prestupny rok
      var isleap = (a_datum_puvodni[2] % 4 == 0 && (a_datum_puvodni[2] % 100 != 0 || a_datum_puvodni[2] % 400 == 0));
      if (a_datum_puvodni[0] > 29 || (a_datum_puvodni[0]==29 && !isleap)) {
         return false;
      }
   }
   if (a_datum_puvodni[0] == a_datum_nove.getDate() && a_datum_puvodni[1] == (a_datum_nove.getMonth()+1) && a_datum_puvodni[2] == a_datum_nove.getFullYear()) {
      return true;
   } else {
      return false;
   }
}

function OnSearch(f)
{
   // kontrola policek formulare
   var chyba = 0;
   var hlaseni = "";

   /* volba objektu vyhledavani */
   var podleSubjektu = $("#kriterium_subjekt:radio").attr("checked");
   var podleOsob = $("#kriterium_osoba:radio").attr("checked");

   if (podleOsob && f.PRIJMENI.value == "") {
      hlaseni += window.INVALID_PRIJMENI;
   }
   if (podleOsob && f.NAROZENI.value != "" && !isDate(f.NAROZENI.value)) {
      hlaseni += window.INVALID_NAROZENI;
   }
   if (f.ULICE.value == "" && f.CDOM.value == "" && f.COR.value == "" && f.COZ.value == ""
         && f.OBEC.value == "" && f.OKRES.value == "" && f.CASTOBCE.value == "") {
      if (podleSubjektu && f.OBCHJM.value == "" && f.ICO.value == "") {
         hlaseni += window.INVALID_KRITERIUM;
      }
   }
   // kontrola IC cisla
   if (podleSubjektu && f.ICO.value!="" && !isICO(f.ICO.value)) {
      hlaseni+= window.INVALID_ICO + "\n";
   }
   if (podleSubjektu && !checkSearchInpText("N", f.ICO)  && hlaseni=="") {
      hlaseni+= window.INVALID_ICO + " " + window.INVALID_CISLO + "\n";
   }
   // kontrola zadani obce
   if ((f.OKRES.value!="" || f.CASTOBCE.value!="" || f.ULICE.value!="" || f.CDOM.value!="" || f.COR.value!="" || f.COZ.value!="") && f.OBEC.value=="") {
      hlaseni+= window.INVALID_OBEC + "\n";
   }

   if (hlaseni!="") {
      alert(hlaseni);
      return false;
   }

   /* pokud je zadani ico, tak uz se nic nekontroluje */
   if (podleSubjektu && f.ICO.value != "") return true;

   var hlaseniSK = "";
   // kontrola vyhledavacich pozadavku
   if (podleSubjektu && !checkSearchInpText("X", f.OBCHJM)) {
      hlaseniSK+= "- " + window.PODNIKATEL + " " + window.INVALID_SLOVNIK +"\n";
   }
   if (podleOsob && !checkSearchInpText("X", f.JMENO)) {
      hlaseniSK+= "- " + window.JMENO + " " + window.INVALID_SLOVNIK +"\n";
   }
   if (podleOsob && !checkSearchInpText("X", f.PRIJMENI)) {
      hlaseniSK+= "- " + window.PRIJMENI + " " + window.INVALID_SLOVNIK +"\n";
   }
   if (!checkSearchInpText("X", f.OBEC)) {
      hlaseniSK+= "- " + window.OBEC + " " + window.INVALID_SLOVNIK +"\n";
   }
   if (!checkSearchInpText("X", f.CASTOBCE)) {
      hlaseniSK+= "- " + window.CASTOBCE + " " + window.INVALID_SLOVNIK +"\n";
   }
   if (!checkSearchInpText("X", f.ULICE)) {
      hlaseniSK+= "- " + window.ULICE + " " + window.INVALID_SLOVNIK +"\n";
   }
   if (!checkSearchInpText("N", f.COR)) {
      hlaseniSK+= "- " + window.COR + " " + window.INVALID_CISLO +"\n";
   }
   if (f.COZ.value!="" && !f.COZ.value.match(/^[a-zA-Z]$/)) {
      hlaseniSK+= "- " + window.COZ + " " + window.INVALID_ZNAKY +"\n";
   }
   if (!checkSearchInpText("N", f.CDOM)) {
      hlaseniSK+= "- " + window.CDOM + " " + window.INVALID_CISLO +"\n";
   }
   if (hlaseniSK!="") {
      alert(window.INVALID_KRITERIA + "\n\n" + hlaseniSK);
      return false;
   }
   return true;
}

