// adresa skriptu s odpovedmi
var serverAddress="/funkce/ajax_vyhledavani.php";
// kes na pozadavky
var cache= new Array();
// promenna jedne instance XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
var pocet_zajezdu_na_stranku=20;
var vybrana_stranka=0;
var showErrors;


//------------------------------------------------------------------------------
function ukaz_kolecko()
{
 var rodic;
 var pomkolecko;
 pomkolecko=document.getElementById('kolecko');
 rodic=document.getElementById('vyhledavacitabulka');
 if(!pomkolecko)
 {
   pomkolecko=document.createElement('img');
   pomkolecko.setAttribute('id','kolecko');
   pomkolecko.setAttribute('style',' position:absolute; left:270px; top:105px; ');
   pomkolecko.setAttribute('src','/images/loading.gif');
   rodic.appendChild(pomkolecko);
 }
}

//------------------------------------------------------------------------------
function schovej_kolecko()
{
 var rodic;
 var pomkolecko;
 pomkolecko=document.getElementById('kolecko');
 rodic=document.getElementById('vyhledavacitabulka');
 if(pomkolecko)
 {
  rodic.removeChild(pomkolecko);
 }
}

//------------------------------------------------------------------------------
function obarvit(id_prvku)
{
 pom=document.getElementById(id_prvku);
 pom.style.color="#FF0000";
}
//------------------------------------------------------------------------------




function odbarvit(id_prvku)
{
 pom=document.getElementById(id_prvku);
 pom.style.color="#FFFFFF";
}
//------------------------------------------------------------------------------
function vyber_typu(id_prvku,nespoustet)
{
// document.getElementById('ladeni').innerHTML+= ('vl<br>');
 // prebarvovani tlacitek vyberu typu zajezdu
 var p1=document.getElementById('x_pobytove');
 var p2=document.getElementById('x_poznavaci');
 var p3=document.getElementById('x_lyzarske');
 var p4=document.getElementById('x_aktivni');
 
 var tz=document.getElementById('f_typzajezdu');
 var popiska=document.getElementById('vybrana_sekce');
 var uak=document.getElementById('ubytovani_a_kategorie');
 var sado=document.getElementById('strava_a_doprava');
 
 var pomstrava=document.getElementById('f_strava');
 var pomnstrava=document.getElementById('nadpis_strava');
 var pomdestinace=document.getElementById('f_destinace');
 var pomndestinace=document.getElementById('nadpis_destinace');
 
 var pomubyt=document.getElementById('f_ubytovani');
 var pomkat=document.getElementById('f_kategorie');
 
 var dodon=document.getElementById('docasna_doprava_nadpis');
 var dodo=document.getElementById('docasna_doprava');
 var sdo=document.getElementById('s_doprava');
 
 var pom=document.getElementById(id_prvku);
 
 
 
 p1.style.color='white';p1.style.backgroundColor='darkblue'; 
 p2.style.color='white';p2.style.backgroundColor='darkblue'; 
 p3.style.color='white';p3.style.backgroundColor='darkblue'; 
 p4.style.color='white';p4.style.backgroundColor='darkblue'; 


 pom.style.color='darkblue';pom.style.backgroundColor='white'; 
 
 if(id_prvku=='x_pobytove') 
 {
  tz.value='Pobytový';
  popiska.innerHTML='Pobytové zájezdy'
 }  
 if(id_prvku=='x_poznavaci') 
 {
  tz.value='Poznávací';
  popiska.innerHTML='Poznávací zájezdy'
  uak.style.display = "none"; // schovani hotelu a kat
  sado.style.display = "none"; // schovani hotelu a kat
  
  pomstrava.style.display = "none"; // schovani stravy
  pomnstrava.style.display = "none"; // schovani stravy
  pomdestinace.style.display = "none"; // schovani destinace
  pomndestinace.style.display = "none"; // schovani destinace
  pomubyt.style.display = "none"; // schovani destinace
  
  pomstrava.options[0].selected=true;
  pomdestinace.options[0].selected=true;
  pomubyt.options[0].selected=true;
  pomkat.options[0].selected=true;
  dodon.innerHTML='Doprava:';
  if (dodo.innerHTML=='')
  {
   dodo.innerHTML=sdo.innerHTML;
   sdo.innerHTML='';
  }
  
 }   
 else
 {
  uak.style.display = '';
  sado.style.display = '';
  
  pomstrava.style.display = '';
  pomnstrava.style.display = '';
  pomdestinace.style.display = ''; // schovani destinace
  pomndestinace.style.display = ''; // schovani destinace
  pomubyt.style.display = ''; // schovani destinace
  dodon.innerHTML='';
  if (sdo.innerHTML=='')
  {
   sdo.innerHTML=dodo.innerHTML;
   dodo.innerHTML='';
  }

  
 } 

 if(id_prvku=='x_lyzarske') 
 {
  tz.value='Lyžařský';
  popiska.innerHTML='Lyžařské zájezdy'
 }  
 if(id_prvku=='x_aktivni')   
 {
  tz.value='Aktivní dovolená';
  popiska.innerHTML='Aktivní dovolená'
 }
 if(nespoustet==0)
 {
  uprava_vyberu(tz.value,tz.id);
 }
//document.getElementById('ladeni').innerHTML+= ('vl2<br>');

}


//------------------------------------------------------------------------------
function u_v1() // funkce spustena po startu
{
 // zapamatuji si radeji vsechny promenne
 
 
 // konec zapamatovani

 uprava_vyberu("nerozhoduje","f_zeme",1);
}


//------------------------------------------------------------------------------
function vyber_stranky(vstupni_hodnota,id_prvku)
// funkce, ktera skoci na vybranou stranku
{
 window.document.filter.f_stranka.value=id_prvku;
 document.filter.submit();
 

}

//------------------------------------------------------------------------------
function uprava_vyberu(vstupni_hodnota,id_prvku,onload)
{
 // odesle dotaz na prvek id_prvku  

 // alert ("vstup="+vstupni_hodnota+",id_prvku="+id_prvku);

 if(id_prvku=='f_razeni')
 {
  document.filter.submit();
 }
  
 var parametry="";
 var vlozit;

 
 parametry+="zvoleno="+id_prvku;
 parametry+="&";

// document.getElementById('ladeni').innerHTML+= ('vlozit zvoleno='+id_prvku+'<br>'); 

 
 var pom=document.getElementById("f_lastmoment_vsechny");
 if(pom.checked) vlozit="vsechny"; else vlozit="lastmoment";
 var pom1=document.getElementById("h_lastmoment");
 if(pom1!="") vlozit=pom1;
 parametry+=encodeURIComponent("f_lastmoment")+"="+encodeURIComponent(vlozit);
 parametry+="&";

// document.getElementById('ladeni').innerHTML+= ('vlozit checked='+vlozit+'<br>'); 


 pom=document.getElementById("f_lastmoment_last");
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(pom.checked);
 parametry+="&";

 pom=document.getElementById("f_zeme");
 pom1=document.getElementById("h_zeme");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
// document.getElementById('ladeni').innerHTML+= ('vlozit zeme='+vlozit+'<br>'); 
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";

 pom=document.getElementById("f_destinace");
 pom1=document.getElementById("h_destinace");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
// document.getElementById('ladeni').innerHTML+= ('vlozit destinace='+vlozit+'<br>'); 
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";

 pom=document.getElementById("f_typzajezdu");
 pom1=document.getElementById("h_typzajezdu");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
//document.getElementById('ladeni').innerHTML+= ('vlozit destinace='+vlozit+'<br>'); 
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";

 pom=document.getElementById("f_ubytovani");
 pom1=document.getElementById("h_ubytovani");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";

 pom=document.getElementById("f_kategorie");
 pom1=document.getElementById("h_kategorie");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";

 pom=document.getElementById("f_strava");
 pom1=document.getElementById("h_strava");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";

 pom=document.getElementById("f_doprava");
 pom1=document.getElementById("h_doprava");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";

 pom=document.getElementById("f_odjezd");
 pom1=document.getElementById("h_odjezd");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";
 
 pom=document.getElementById("f_delka");
 pom1=document.getElementById("h_delka");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";

 pom=document.getElementById("f_cena");
 pom1=document.getElementById("h_cena");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);
 parametry+="&";
 
 pom=document.getElementById("f_razeni");
 pom1=document.getElementById("h_razeni");
 if(pom1.value!='') vlozit=pom1.value; else vlozit=pom.value;
 parametry+=encodeURIComponent(pom.id)+"="+encodeURIComponent(vlozit);

 if (vstupni_hodnota)
 odesli_dotaz (parametry);

}

//------------------------------------------------------------------------------
// vytvoreni instance XMLHttpRequest s opravou na IE6
function createXmlHttpRequestObject() 
{
  // odkaz na XMLHttpRequest 
  var xmlHttp;
  // nejprve pokus v novych browserech 
  try
  {
    // pokus o vytvoreni XMLHttpRequest object
    xmlHttp = new XMLHttpRequest();
  }
  catch(e) // kdyz se to nepovidlo
  {
    // predpokladame IE 6 nebo starsi vykopavku - nadefinujeme vsechny starsi verze
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.7.0",
                                    "MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // zkusime je postupne vytvorit
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
    {
      try 
      { 
        // pokus vyrobit XMLHttpRequest object
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      } 
      catch (e) {} // nepovede se, nic se nedeje
    }
  }
  if (!xmlHttp) // povedlo se alespon nejak?
  {
   alert("Error creating the XMLHttpRequest object."); // ne, zarveme ze to nechodi
  }  
  return xmlHttp; // vrati vytvoreny objekt xml
}
//------------------------------------------------------------------------------

//  zobrazeni errorove hlasky
function displayError($message)
{
 // document.getElementById('ladeni').innerHTML+= ('XXXXXXXXXXX <br>'); 

  // pokud showErrors je false, nic nedela
  if (showErrors)
  {
    // a vypne ...
    showErrors = false;
    // display error message
 
    alert("Chyba javascriptu: \n" + $message);
    // spusti upravu po 10 vterinach
    setTimeout("uprava_vyberu();", 10000);
  }
}
//------------------------------------------------------------------------------

// vymaze vsechny polozky ze selectu
function clearSelectList(kteryseznam) 
{
 var vybrano=null;
// var select = document.getElementById(kteryseznam);
 while (kteryseznam.length > 0) 
 {
//  kteryseznam[0].getProperty('selected')
  kteryseznam.remove(0);
 }
 
}
//------------------------------------------------------------------------------
// prida jednu polozku do selectu
function appendToSelect(select, value, content,vybranahodnota) 
{
    var opt;
    opt = document.createElement("option");
    opt.value = value;
    if (vybranahodnota==value)
    opt.setAttribute('selected','true')
    opt.appendChild(document.createTextNode(content));
    select.appendChild(opt);
}
//------------------------------------------------------------------------------

// nahradi v selectu s danym id vsechny prvky tim, co prislo v xml
// take se podiva, jestli neco neprislo v parametrech stranky
function upravSelect(xmlDoc, jmeno_v_xml ) 
{
 try
 {
  if(!jmeno_v_xml)
  {
//   document.getElementById('ladeni').innerHTML+= ('jmeno_v_xml=null'+''+'<br>');
   return;
  }
  
  var id_v_dokumentu="f_"+jmeno_v_xml;
  var id_v_pameti="h_"+jmeno_v_xml;

  var xml_vyber=xmlDoc.getElementsByTagName(jmeno_v_xml)[0];
  if (!xml_vyber) return;

  // alert('upravuji '+jmeno_v_xml);

//  document.getElementById('ladeni').innerHTML+= ('id_v_dokumentu= '+id_v_dokumentu+'<br>');

  var document_vyber=document.getElementById(id_v_dokumentu);
  var vybrano=document_vyber.value;
  if(!vybrano) return;
  var pompamet=document.getElementById(id_v_pameti);

  if(pompamet!=null) 
   if(pompamet.value!='')
   {
     vybrano=pompamet.value; // vybere se to, co bylo pri nacteni stranky
     pompamet.value='';      // a pamet se vynuluje
   }
  if(jmeno_v_xml=='typzajezdu')
  {
//   alert(vybrano); 
   if(vybrano=='Pobytový')vyber_typu('x_pobytove',1);
   if(vybrano=='Poznávací')vyber_typu('x_poznavaci',1);
   if(vybrano=='Lyžařský')vyber_typu('x_lyzarske',1);
   if(vybrano=='Aktivní dovolená')vyber_typu('x_aktivni',1);
   return;
  }


  var pole_optionu=xml_vyber.getElementsByTagName("option");
   
//  getElementById
//  alert('upravuji 2 id_v_pameti='+id_v_pameti);
//  alert('upravuji 2a pompamet='+pompamet);

//  alert('upravuji 2b pompamet.value='+pompamet.value);
  

 // document.getElementById('ladeni').innerHTML+= ('upravuji 3 vybrano= '+vybrano+'<br>');
  clearSelectList(document_vyber);
  appendToSelect(document_vyber, "nerozhoduje", "(nerozhoduje)");
  
  var i; 
  for (i=0;i<pole_optionu.length;i++)
  {
   var hodnota=pole_optionu[i].firstChild.data;
   var obsah=hodnota;
   appendToSelect(document_vyber, hodnota, obsah,vybrano);
  }
 }
 catch (e)
 {
 // alert('pokus o opravu chyby');
 
 }
//  alert('upravuji 4 '+jmeno_v_xml);
}
//------------------------------------------------------------------------------



// odesle dotaz na server
function odesli_dotaz(vstup1)
{
 ukaz_kolecko();
  // pouze pokud xmlHttp je vporadku
  if (xmlHttp)
  {
    // pokud neco prislo, dame to do kese 
    if (vstup1) // do kese se da jen kdyz prijde neco noveho
    { 
//      alert("vkladam "+vstup1);
      while (cache.length) cache.pop(); // smazani pole
      
      cache.push(vstup1+"&omezeni=pocet");
      cache.push(vstup1+"&omezeni=typzajezdu");
      cache.push(vstup1+"&omezeni=zeme");
      cache.push(vstup1+"&omezeni=destinace");
      cache.push(vstup1+"&omezeni=ubytovani");
      cache.push(vstup1+"&omezeni=kategorie");
      cache.push(vstup1+"&omezeni=strava");
      cache.push(vstup1+"&omezeni=odjezd");
      cache.push(vstup1+"&omezeni=delka");
      cache.push(vstup1+"&omezeni=doprava");
      cache.push(vstup1+"&omezeni=cena");
//      cache.push(vstup1+"&omezeni=pocet");
    }
    
    
    if(cache.length>0)
    {
     document.body.style.cursor = 'wait';
    }
    else
    {
     document.body.style.cursor = 'default';
    }
    
    
    // zkusime se pripojit
    try
    {

// document.getElementById('ladeni').innerHTML+= ('odesilani - '+cache+' <br>'); 
      // pouze pokud XMLHttpRequest neco nedela
      // a neco je v kesi
      if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 0) 
         && cache.length > 0)
      {
      // try // oblbnuti mozzily
      //  { netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead'); }
      // catch(e) {};
        // vezmeme parametry z kesene
        var cacheEntry = cache.shift();
// document.getElementById('ladeni').innerHTML+= ('odesilani - '+cacheEntry+' <br>'); 
        //  a posle dotaz
        var adresa=serverAddress+"?"+cacheEntry;
//        alert(adresa);
        xmlHttp.open("GET", adresa , true);
        xmlHttp.setRequestHeader("Content-Type", 
                                 "application/x-www-form-urlencoded");
        xmlHttp.onreadystatechange = obsluha_prichodu_odpovedi;
        // xmlHttp.overrideMimeType("")
        xmlHttp.send();
      }
    }
    catch (e)
    {
      // display an error when failing to connect to the server

      displayError(e.toString());
    }
  }
}


//------------------------------------------------------------------------------
// function that handles the HTTP response
function obsluha_prichodu_odpovedi()
{
// document.getElementById('ladeni').innerHTML+= ('prichod 1 ');
  // pokud je stav 4 (prisla odpoved), cteme zpravy
 showErrors=true;
  if (xmlHttp.readyState == 4) 
  {
//   alert (xmlHttp.getAllResponseHeaders());
    // continue only if HTTP status is "OK"
    if (xmlHttp.status == 200) 
    {
      try
      {
        // read the response from the server
        nacti_odpoved();
      }
      catch(e)
      {
        // display error message
        displayError(e.toString());
      }
    }
    else
    {
      // display error message
      displayError(xmlHttp.statusText);
    }
  }
 // odeslani dalsiho pozadavku, pokud je buffer neprazdny
// document.getElementById('ladeni').innerHTML+= ('prichod 2 ');
 

 if(cache.length) 
 {
  // rozsvitime kolecko, pokud nesviti
  ukaz_kolecko();
  setTimeout("odesli_dotaz();",10); // dalsi kousek cache, pokud tam neco je
 } 
 else
 {
  // zhasneme kolecko
  schovej_kolecko();
 }
 
 
// document.getElementById('ladeni').innerHTML+= ('prichod 3 <br>');

}

//------------------------------------------------------------------------------
// zpracuje odpoved 
function nacti_odpoved()
{
  //  alert ("skutecne obsluhuji odpoved");
  // retrieve the server's response 
  var odpoved = xmlHttp.responseText;
// server error?
//  alert ("zpracovanvam : "+odpoved);
  
  if (odpoved.indexOf("ERRNO") >= 0 
      || odpoved.indexOf("error:") >= 0
      || odpoved.length == 0)
    throw(odpoved.length == 0 ? "Server error." : response);
  // get response in XML format (assume the response is valid XML)
  var responseXml = xmlHttp.responseXML;
  // vezme jen rootovy element
  var xmlDoc = responseXml.documentElement;
  var pom=document.getElementById("pocet_nabidek");
//  alert(xmlDoc.getElementsByTagName("pocet_zajezdu")[0]);
  if(xmlDoc.getElementsByTagName("pocet_zajezdu")[0]) // jestli vubec nejaky pocet prisel ...
  {
   // vyplneni poctu zajezdu
   var pocet_zajezdu=xmlDoc.getElementsByTagName("pocet_zajezdu")[0].firstChild.data;
   pom.innerHTML=""
   +(pocet_zajezdu)
   +" zájezdů/"
   +(xmlDoc.getElementsByTagName("pocet_terminu")[0].firstChild.data) + " termínů";

   // a jeste nabidky terminu - dalsi stranky
   pom=document.getElementById("nabidky_stranek");
   if(pom)
   {
    pom.innerHTML="Další stránky: "; // vymazani
   }
      
   var pocet_zajezdu_na_stranku=30;
   var pocet_stranek=pocet_zajezdu / pocet_zajezdu_na_stranku;
   var vybrano=1; // ktera stranka je vybrana z minuleho vyberu
   var pompamet=document.getElementById("h_stranka");
 

  
   if(pompamet!=null) 
    if(pompamet.value!="")
     {
      vybrano=pompamet.value; // vybere se to, co bylo pri nacteni stranky
      pompamet.value='';      // a pamet se vynuluje - to kdyz si vybral neco jineho
     }
  // alert ("vybrano stranka="+vybrano);
   
   var vybrano1;
//   alert (pocet_stranek + " " +pocet_zajezdu + " " + pocet_zajezdu_na_stranku);
   for(var i=1;i<=pocet_stranek;i++)
   {
    if(i==vybrano)
     vybrano1='"odkazstranyvybrana"';
    else
     vybrano1='"odkazstrany"';

    if(pom) // jen pokud mame k dispozici tag pro nabidku stranek
     pom.innerHTML=pom.innerHTML +
    '<a href="#" class='+vybrano1+' name="f_strana'+i+'" id="'+i+'" onMouseDown="vyber_stranky(this.name,this.id)"> '
     + i + ' </a> ' ; 
    
   }

//   var id_v_dokumentu="f_"+jmeno_v_xml;
//  var id_v_pameti="h_"+jmeno_v_xml;   

  }
// vyplneni vyberu zeme

  upravSelect(xmlDoc, "typzajezdu");
  upravSelect(xmlDoc, "zeme");
  upravSelect(xmlDoc, "destinace");
  upravSelect(xmlDoc, "ubytovani");
  upravSelect(xmlDoc, "kategorie");
  upravSelect(xmlDoc, "strava");
  upravSelect(xmlDoc, "doprava");
  upravSelect(xmlDoc, "odjezd");
  upravSelect(xmlDoc, "delka");
  upravSelect(xmlDoc, "cena");
  upravSelect(xmlDoc, "radit");

//  alert ("konec uprav");
}



// spusteni skriptu po nacteni stranky
// alert ('pokus o nacteni po startu 0.');

//------------------------------------------------------------------------------
{
 if(window.addEventListener) 
 {
  window.addEventListener("load",u_v1,false);
 }
 else if(window.attachEvent) 
 {
  window.attachEvent("onload",u_v1);
 }
 else 
 {
  window.onload=u_v1;
 }
}
 




