function LTrim(co) {
    var s;
    s = co;
    while(s.charAt(0)==" ") {s = s.substring(1,s.length);};
    return s;   
}

function RTrim(co) {
    var s;
    s = co;
    while(s.charAt(s.length-1)==" ") {s = s.substring(0,s.length-1);};
    return s;
}

function testGPS(polozka)
{
    var s;
    s = polozka.value;
    if(s == "") {return true;};
    var i;
    var j;
    var sirka;
    var povoleneZnaky;
    var NeOk;
    var duvod;
    duvod = " ";
    NeOk = false;
    //zjisteni sirky ci delky
    povoleneZnaky = "NS";
    if(povoleneZnaky.indexOf(s.charAt(0)) < 0) {
       povoleneZnaky = "EW";
       if(povoleneZnaky.indexOf(s.charAt(0)) < 0) {
         NeOk = true;
       } else {
         sirka = false;
         povoleneZnaky = "EW";
       }
    } else {
       sirka = true;
       povoleneZnaky = "NS";
    }
    if(!NeOk) {
       //na zacatku musi byt pismeno
       if(povoleneZnaky.indexOf(s.charAt(0)) < 0) {
          NeOk = true;
          duvod = duvod + "První znak musí být písmeno světové strany. ";
       };
       //pak nasleduji 2/3 cislice
       if(sirka) {
          povoleneZnaky = "0123456789";
          if(povoleneZnaky.indexOf(s.charAt(1)) < 0) {
             NeOk = true;
             duvod = duvod + "Stupně musí být dvě číslice. ";
          };
          if(povoleneZnaky.indexOf(s.charAt(2)) < 0) {
             NeOk = true;
             duvod = duvod + "Stupně musí být dvě číslice. ";
          };
          j = 3;
       } else {
          povoleneZnaky = "01";
          if(povoleneZnaky.indexOf(s.charAt(1)) < 0) {
             NeOk = true;
             duvod = duvod + "Stupně musí být tři číslice. ";
          };
          povoleneZnaky = "0123456789";
          if(povoleneZnaky.indexOf(s.charAt(2)) < 0) {
             NeOk = true;
             duvod = duvod + "Stupně musí být tři číslice. ";
          };
          if(povoleneZnaky.indexOf(s.charAt(3)) < 0) {
             NeOk = true;
             duvod = duvod + "Stupně musí být tři číslice. ";
          };
          j = 4;
       };
       //pak nasleduje mezera
       if(s.charAt(j) != " ") {
          NeOk = true;
          duvod = duvod + "Minuty musí být odděleny mezerou. ";
       };
       //dve cislice
       if(povoleneZnaky.indexOf(s.charAt(j+1)) < 0) {
          NeOk = true;
          duvod = duvod + "Minuty musí být dvě číslice. ";
       };
       if(povoleneZnaky.indexOf(s.charAt(j+2)) < 0) {
          NeOk = true;
          duvod = duvod + "Minuty musí být dvě číslice. ";
       };
       //tecka
       if(s.charAt(j + 3) != ".") {NeOk = true;};
       //tri cislice
       if(povoleneZnaky.indexOf(s.charAt(j+4)) < 0) {
          NeOk = true;
          duvod = duvod + "Tisíciny minuty musí být tři číslice. ";
       };
       if(povoleneZnaky.indexOf(s.charAt(j+5)) < 0) {
          NeOk = true;
          duvod = duvod + "Tisíciny minuty musí být tři číslice. ";
       };
       if(povoleneZnaky.indexOf(s.charAt(j+6)) < 0) {
          NeOk = true;
          duvod = duvod + "Tisíciny minuty musí být tři číslice. ";
       };
       //spravna delka
       if(sirka) {j = 10;} else {j = 11;};
       i = s.length;
       if(i != j) {
          NeOk = true;
          duvod = duvod + "Délka souřadnice je patná. ";
       };
    };
    if(NeOk) {
       if(sirka) {
          alert("Prosím, zde vyplňujte pouze přesné souřadnice ve formátu Nss MM.mmm nebo Sss MM.mmm.\n\n" + duvod);
       } else {
          alert("Prosím, zde vyplňujte pouze přesné souřadnice ve formátu Esss MM.mmm nebo Wsss MM.mmm.\n\n" + duvod);
       };
       //polozka.value = "";
       polozka.focus();
       return (false);
    }
}

function testCisla(zaporne,cele,polozka)
{
    var s;
    s = polozka.value;
    if(s == "") {return true;};
    var i;
    var j;
    var povoleneZnaky;
    var NeOk;
    NeOk = false;
    if(zaporne) {
       //minus muze byt jen na zacatku
       if(s.charAt(0) == "-") {s = s.substring(1,s.length);};
    };
    //kontrola povolenych znaku
    if(cele) {povoleneZnaky = "0123456789";} else {povoleneZnaky = "0123456789.";};
    for(i = 0; i < s.length; i++) {
        if(povoleneZnaky.indexOf(s.charAt(i)) < 0) {NeOk = true;};
    };
    //jen jedna tecka
    i = s.indexOf(".");
    j = s.lastIndexOf(".");
    if(i != j) {NeOk = true;};
    if(NeOk) {
       if(cele) {alert("Prosím, zde vyplňujte pouze povolená čísla.");}
       else {alert("Prosím, zde vyplňujte pouze povolená čísla. Desetinné znaménko je tečka.");};
       //polozka.value = "";
       polozka.focus();
       return false;
    };
}

function testNum(cele,zlomky,zapor,polozka)
{
    var s;
    s = polozka.value;
    if(s == "") {return true;};
    var i;
    var j;
    var povoleneZnaky;
    var NeOk;
    var duvod;
    NeOk = false;
    if(zapor) {
       //minus muze byt jen na zacatku
       if(s.charAt(0) == "-") {s = s.substring(1,s.length);};
    };
    //kontrola povolenych znaku
    if(zlomky==0) {povoleneZnaky = "0123456789";} else {povoleneZnaky = "0123456789.";};
    for(i = 0; i < s.length; i++) {
        if(povoleneZnaky.indexOf(s.charAt(i)) < 0) {NeOk = true; duvod = "Nepovolený znak";};
    };
    //jen jedna tecka
    i = s.indexOf(".");
    j = s.lastIndexOf(".");
    if(i != j) {NeOk = true; duvod = "Vícenásobný výskyt desettiné tečky";};
    if(i>=0) {
       //maximum celych cisel
       if(i>cele) {NeOk = true; duvod = "Překročení počtu celých číslic";};
       //maximum zlomku
       j = s.length - i - 1;  
       if(j>zlomky) {NeOk = true; duvod = "Překročení počtu desetinných číslic"};
    } else {
       //maximum celych cisel
       if(s.length>cele) {NeOk = true; duvod = "Překročení počtu číslic";};  
    };
    //vyhodnoceni
    if(NeOk) {
       if(zlomky==0) {alert("Prosím, zde vyplňujte pouze povolená čísla. " + duvod);}
       else {alert("Prosím, zde vyplňujte pouze povolená čísla. Desetinné znaménko je tečka. " + duvod);};
       //polozka.value = "";
       polozka.focus();
       return true;//false;
    };
}

function testTelefonu(polozka)
{
    var s;
    s = polozka.value;
    if(s == "") {return true;};
    var i;
    var j;
    var NeOk;
    var povoleneZnaky;
    NeOk = false;
    //plus muze a musi byt pouze na zacatku
    if(s.charAt(0) == "+") {s = s.substring(1,s.length);} else {NeOk = true;};
    //druhy znak nesmi byt minus
    if(s.charAt(0) == "-") {NeOk = true;};
    //kontrola povolenych znaku
    povoleneZnaky = "0123456789-";
    for(i = 0; i < s.length; i++) {
       if(povoleneZnaky.indexOf(s.charAt(i)) < 0) {NeOk = true;};
    };
    //kontrola minimalni delky +1-2-345
    if(s.length < 7) {NeOk = true;};
    //nalezeni minusu, druhe nesmi byt hned za prvnim
    i = s.indexOf("-");
    j = s.lastIndexOf("-");
    if(i < 0) {NeOk = true;};
    //if(i == j) {NeOk = true;}; //tohle je kontrola na dve pomlcky v cisle
    if(i == j+1) {NeOk = true;};
    if(NeOk) {
       alert("Prosím, zde vyplňujte pouze telefonní čísla ve formátu +420-12345678 nebo +420-987-123456 bez mezer.");
       //polozka.value = "";
       polozka.focus();
       return false;
    };
}

function testUrl(polozka)
{
    var s;
    s = polozka.value;
    if(s == "") {return true;};
    var i;
    var j;
    var k;
    var NeOk;
    var povoleneZnaky;
    var povoleneDNS;
    var dns;
    NeOk = false;
    s = s.toLowerCase();
    //kontrola povolenych znaku #33 .. #127
    povoleneZnaky = "!\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\^_`]~";
    for(i = 0; i < s.length; i++) {
       if(povoleneZnaky.indexOf(s.charAt(i)) < 0) {NeOk = true;};
    };
    s = s.substring(0,7);
    if(s != "http://") {NeOk = true;};
    //kontrola domeny
    povoleneDNS = ".-0123456789abcdefghijklmnopqrstuvwxyz";
    //nejprve hledam konec domeny
    povoleneZnaky = ":/?[]#@";
    dns = s.substring(7,s.length);
    for(i = 0; i < dns.length; i++) {
       if(povoleneZnaky.indexOf(dns.charAt(i)) >= 0) {j = i; i = dns.length;};
    };
    dns = dns.substring(0,j+1);
    for(i = 0; i < dns.length; i++) {
       if(povoleneDNS.indexOf(dns.charAt(i)) < 0) {NeOk = true;};
    };
    //kontrola tecky na zacatku a na konci domeny
    i = dns.indexOf(".");
    j = dns.lastIndexOf(".");
    k = dns.length - 1;
    if(i==0 || j==k) {NeOk = true;};
    if(NeOk) {
       alert("Prosím, zde vyplňujte pouze URL adresu ve formátu http://xyz.acb.fn bez mezer a diakritiky.");
       //polozka.value = "";
       polozka.focus();
       return false;
    };
}

function testMailu(polozka)
{
    var s;
    s = polozka.value;
    if(s == "") {return true;};
    var i;
    var j;
    var k;
    var NeOk;
    var povoleneZnaky;
    var povoleneDNS;
    var dns;
    NeOk = false;
    s = s.toLowerCase();
    //kontrola povolenych znaku dle RFC
    povoleneZnaky = ".0123456789@abcdefghijklmnopqrstuvwxyz!#$%*/?|^{}`~&'+-=_";
    for(i = 0; i < s.length; i++) {
       if(povoleneZnaky.indexOf(s.charAt(i)) < 0) {NeOk = true;};
    };
    //kontrola pouze jednoho zavinace
    i = s.indexOf("@");
    j = s.lastIndexOf("@");
    if(i != j || i<1) {NeOk = true;};
    //kontrola domeny
    povoleneDNS = ".-0123456789abcdefghijklmnopqrstuvwxyz";
    dns = s.substring(i+1,s.length);
    for(i = 0; i < dns.length; i++) {
       if(povoleneDNS.indexOf(dns.charAt(i)) < 0) {NeOk = true;};
    };
    //kontrola tecky na zacatku a na konci domeny
    i = dns.indexOf(".");
    j = dns.lastIndexOf(".");
    k = dns.length - 1;
    if(i==0 || j==k) {NeOk = true;};
    if(NeOk) {
       alert("Prosím, zde vyplňujte pouze platnou e-mailovou adresu.");
       //polozka.value = "";
       polozka.focus();
       return false;
    };
}

function testRC(polozka)
{
    var s;
    s = polozka.value;
    if(s == "") {return true;};
    var i;
    var j;
    var k;
    var l;
    var m;
    var cast;
    var duvod;
    var NeOk;
    var povoleneZnaky;
    NeOk = false;
    //kontrola povolenych znaku #33 .. #127
    povoleneZnaky = "/0123456789";
    for(i = 0; i < s.length; i++) {
       if(povoleneZnaky.indexOf(s.charAt(i)) < 0) {NeOk = true; duvod = "Nepovolené znaky";};
    };
    //kontrola pouze jednoho lomena na 7. pozici
    i = s.indexOf("/");
    j = s.lastIndexOf("/");
    if(i != j) {NeOk = true; duvod = "Více znaků lomeno";};
    if(i != 6) {NeOk = true; duvod = "patná pozice znaku lomeno";};
    //kontrola delky
    i = s.length;
    if(i<10 || i>11) {NeOk = true;};
    //kontrola hodnot
    cast = s.substring(2,4);
    j = cast * 1;
    if(j>12 && (j<50 || j>62)) {NeOk = true; duvod = "patný měsíc";};
    cast = s.substring(4,6);
    j = cast * 1;
    if(j<1 || j>31) {NeOk = true; duvod = "patný den";};
    //kontrolni soucet
    i = s.length;
    if(i=11) {
       cast = s.substring(0,6) + s.substring(7,10);
       i = cast * 1;
       cast = s.charAt(10);
       j = cast * 1;
       k = i / 11;
       l = Math.floor(k);
       m = l * 11
       i = i - m;
       if(i==10) {i=0;};
       if(i != j) {NeOk = true; duvod = "Nesedí kontrolní součet";};
    };
    if(NeOk) {
       alert("Prosím, zde vyplňujte pouze platné rodné číslo ve formátu rrmmdd/nnn(n). " + duvod);
       //polozka.value = "";
       polozka.focus();
       return false;
    };
}

function testDCtext(datum,cas,delka,polozka)
{
    if(!(datum || cas)) {return true;};
    var s;
    var sp;
    s = polozka.value;
    s = LTrim(s);
    s = RTrim(s);
    if(s == "") {return true;};
    var i;
    var j;
    var k;
    var den;
    var mesic;
    var rok;
    var hodina;
    var minuta;
    var sekunda;
    var milisek;
    var povoleneZnaky;
    var NeOk;
    NeOk = false;
    povoleneZnaky = "0123456789";
    if(datum) {povoleneZnaky = povoleneZnaky + "."};
    if(cas) {povoleneZnaky = povoleneZnaky + ":,"};
    if(datum && cas) {povoleneZnaky = povoleneZnaky + " "};
    for(i = 0; i < s.length; i++) {
        if(povoleneZnaky.indexOf(s.charAt(i)) < 0) {NeOk = true;};
    };
    povoleneZnaky = "0123456789";
    if(NeOk) {
       alert("Prosím, zde vyplňujte pouze povolené znaky.");
       //polozka.value = "";
       polozka.focus();
       return false;
    };
    sp = s;
    if(datum) {
       i = s.indexOf(".");
       j = s.lastIndexOf(".");
       den = LTrim(s.substring(0,i));
       den = RTrim(den);
       mesic = LTrim(s.substring(i+1,j))
       mesic = RTrim(mesic);
       if(cas) {
          sp = LTrim(s.substring(j+2,s.length));
          k = sp.indexOf(" ");
          if(k<0) {
             alert("patný formát poloky.");
             //polozka.value = "";
             polozka.focus();
             return false;
          };
          //sp ted obsahuje zbytek polozky - cas
          sp = LTrim(sp.substring(k+1,sp.length));
          rok = LTrim(s.substring(j+1,s.length-sp.length));
          rok = RTrim(rok);
       }
       else {
          rok = LTrim(s.substring(j+1,s.length));
          rok = RTrim(rok);
       };
       for(i = 0; i < den.length; i++) {
           if(povoleneZnaky.indexOf(den.charAt(i)) < 0) {NeOk = true;};
       };
       for(i = 0; i < mesic.length; i++) {
           if(povoleneZnaky.indexOf(mesic.charAt(i)) < 0) {NeOk = true;};
       };
       for(i = 0; i < rok.length; i++) {
           if(povoleneZnaky.indexOf(rok.charAt(i)) < 0) {NeOk = true;};
       };
       if(!NeOk) {
          i = den * 1;
          if(i > 31 || i < 1) {NeOk = true;};
          if(den.length == 1) {den = "0" + den};
          i = mesic * 1;
          if(i > 12 || i < 1) {NeOk = true;};
          if(mesic.length == 1) {mesic = "0" + mesic};
          if(rok.length == 2) {rok = "20" + rok;};
          i = rok * 1;
          if(i > 2067 || i < 1900) {NeOk = true};
       };
    };
    if(cas) {
       i = sp.indexOf(":");
       j = sp.lastIndexOf(":");
       minuta = "00";
       sekunda = "00";
       milisek = "0";
       if(i>=0) {
          hodina = LTrim(sp.substring(0,i));
          hodina = RTrim(hodina);
          if(i==j) {
             minuta = LTrim(sp.substring(i+1,sp.length));
             minuta = RTrim(minuta);
             if(minuta.length==0) {minuta = "00"};
          }
          else {
             if((i+1)<j) {
                minuta = LTrim(sp.substring(i+1,j));
                minuta = RTrim(minuta);
             };
             if(j>=(sp.length-1)) {sp = "00,0";} else {sp = LTrim(sp.substring(j+1,sp.length));};
             sp = RTrim(sp);
             if(sp.length>0) {
                k = sp.indexOf(",")
                if(k>=0) {
                   sekunda = LTrim(sp.substring(0,k));
                   sekunda = RTrim(sekunda);
                   if((k+1)<sp.length) {
                      milisek = LTrim(sp.substring(k+1,sp.length));
                      milisek = RTrim(milisek);
                   };
                }
                else {sekunda = sp;};
             };
          };
       }
       else {hodina = LTrim(sp);};
       for(i = 0; i < hodina.length; i++) {
           if(povoleneZnaky.indexOf(hodina.charAt(i)) < 0) {NeOk = true;};
       };
       for(i = 0; i < minuta.length; i++) {
           if(povoleneZnaky.indexOf(minuta.charAt(i)) < 0) {NeOk = true;};
       };
       for(i = 0; i < sekunda.length; i++) {
           if(povoleneZnaky.indexOf(sekunda.charAt(i)) < 0) {NeOk = true;};
       };
       for(i = 0; i < milisek.length; i++) {
           if(povoleneZnaky.indexOf(milisek.charAt(i)) < 0) {NeOk = true;};
       };
       if(!NeOk) {
          i = hodina * 1;
          if(i > 23 || i < 0) {NeOk = true;};
          if(hodina.length == 0) {hodina = "0" + hodina};
          if(hodina.length == 1) {hodina = "0" + hodina};
          i = minuta * 1;
          if(i > 59 || i < 0) {NeOk = true;};
          if(minuta.length == 0) {minuta = "0" + minuta};
          if(minuta.length == 1) {minuta = "0" + minuta};
          i = sekunda * 1;
          if(i > 59 || i < 0) {NeOk = true;};
          if(sekunda.length == 0) {sekunda = "0" + sekunda};
          if(sekunda.length == 1) {sekunda = "0" + sekunda};
          i = milisek * 1;
          if(i > 9 || i < 0) {NeOk = true;};
       };
    };
    s = "";
    if(NeOk) {
       if(datum) {s = "dd.mm.rrrr"};
       if(cas) {
          if(datum) {s = s + " "};
          s = s + "hh:mm:ss,ms";
       };
       alert("Prosím, zde vyplňujte hodnoty ve formátu " + s);
       //polozka.value = "";
       polozka.focus();
       return false;
    }
    else {
       if(datum) {s = den + "." + mesic + "." + rok};
       if(cas) {
          if(datum) {s = s + " "};
          s = s + hodina + ":" + minuta + ":" + sekunda + "," + milisek;
       };
       s = s.substring(0,delka);
       polozka.value = s;
       return true;
    };
}