// will store reference to the XMLHttpRequest object
var xmlHttp = null;
// holds the remote server address
var ajaxServerAddress = '';
// when set to true, display detailed error messages
var ajaxShowErrors = false;
//var ajaxShowErrors = true;


// creates an XMLHttpRequest instance
function createXmlHttpRequestObject()
{
  // will store the reference to the XMLHttpRequest object
  var xmlHttp;
  // this should work for all browsers except IE6 and older
  try
  {
    // try to create XMLHttpRequest object
    xmlHttp = new XMLHttpRequest();
  }
  catch(e)
  {
    // assume IE6 or older
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                                    "MSXML2.XMLHTTP.5.0",
                                    "MSXML2.XMLHTTP.4.0",
                                    "MSXML2.XMLHTTP.3.0",
                                    "MSXML2.XMLHTTP",
                                    "Microsoft.XMLHTTP");
    // try every id until one works
    for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
    {
      try
      {
        // try to create XMLHttpRequest object
        xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
      }
      catch (e) {} // ignore potential error
    }
  }
  // return the created object or display an error message
  if (!xmlHttp)
    ajaxDisplayError('Error creating the XMLHttpRequest object.');
  else
    return xmlHttp;
}

// function that displays an error message
function ajaxDisplayError(message) {
  // ignore errors if ajaxShowErrors is false
  if (ajaxShowErrors) {
    // turn error displaying Off
    ajaxShowErrors = false;
    // display error message

    alert("Nastala chyba: \n" + message);
  }
}



// vytvoření objektu XMLHttpRequest
xmlHttp = createXmlHttpRequestObject();


// ajax pro uložení
function katalog_rezervace() {
  var script = 'rezervace_nevdama.php';
  var data = 'sender=ajax';
  data+= '&zajezd=' + encodeURIComponent(document.getElementById('zajezd').value);
  data+= '&termin_od=' + encodeURIComponent(document.getElementById('termin_od').value);
  data+= '&termin_do=' + encodeURIComponent(document.getElementById('termin_do').value);
  data+= '&ubytovani=' + encodeURIComponent(document.getElementById('ubytovani').value);
  data+= '&dospelych=' + encodeURIComponent(document.getElementById('dospelych').value);
  data+= '&deti=' + encodeURIComponent(document.getElementById('deti').value);
  data+= '&jmeno=' + encodeURIComponent(document.getElementById('jmeno').value);
  data+= '&telefon=' + encodeURIComponent(document.getElementById('telefon').value);
  data+= '&email=' + encodeURIComponent(document.getElementById('email').value);
  data+= '&adresa=' + encodeURIComponent(document.getElementById('adresa').value);
  data+= '&vzkaz=' + encodeURIComponent(document.getElementById('vzkaz').value);


  // only continue if xmlHttp isn't void
  if ( xmlHttp ) {
	  // try to connect to the server
    try {
      if ( xmlHttp.readyState == 4 || xmlHttp.readyState == 0 ) {
        xmlHttp.open('POST', script, true);
        xmlHttp.setRequestHeader("Content-Type",
                                 "application/x-www-form-urlencoded");
        xmlHttp.onreadystatechange = katalog_rezervace_odpoved;
        xmlHttp.send(data);
      }
      else {
        // if connection was busy, try again after 1 second
        setTimeout("katalog_rezervace();", 1000);
      }
    }
    // display the error in case of failure
    catch (e) {
      ajaxDisplayError(e.toString());
    }
  }
  else {
    alert("Váš prohlížeč bohužel nepodporuje technologii použitou k odeslání rezervace.\n\nKontaktujte nás prosím telefonicky nebo e-mailem.");
  }

  return false; /*neodesilat formular*/
}

// function that retrieves the HTTP response
function katalog_rezervace_odpoved() {
  // continue if the process is completed
  if (xmlHttp.readyState == 4) {
    if (xmlHttp.status == 200) { // continue only if HTTP status is "OK"
      try {
        // read server response as text, to check for errors
        var response = xmlHttp.responseText;
        // server error?
        if ( response.indexOf("ERRNO")>=0 || response.indexOf("error:")>=0 || response.length==0 ) {
          throw(response.length == 0 ? "Void server response." : response);
        }
        zobraz_katalog_rezervace_odpoved();
      }
      catch(e) {
        ajaxDisplayError(e.toString()); // display error message
      }
    }
    else {
      ajaxDisplayError(xmlHttp.statusText);
    }
  }
}

// Processes server's response
function zobraz_katalog_rezervace_odpoved() {

  var responseXml = xmlHttp.responseXML;
  var errelements = new Array();

  xmlDoc = responseXml.documentElement;
  errcode = xmlDoc.getElementsByTagName("errcode")[0].firstChild.data;
  message = '';
  for ( i=0; i<xmlDoc.getElementsByTagName("errmessage").length; i++ ) {
    message+= '<div>' + xmlDoc.getElementsByTagName("errmessage")[i].firstChild.data + '</div>';
  }

  if ( !message.length ) {
    message+= '<div>Opravte prosím označená pole.</div>';
  }

  for ( i=0; i<xmlDoc.getElementsByTagName("errelement").length; i++ ) {
    add_classname(xmlDoc.getElementsByTagName("errelement")[i].firstChild.data,'error');
    errelements.push(xmlDoc.getElementsByTagName("errelement")[i].firstChild.data);
  }

  for ( i=0; i<xmlDoc.getElementsByTagName("element").length; i++ ) {
    if ( !in_array(xmlDoc.getElementsByTagName("element")[i].firstChild.data,errelements) ) {
      remove_classname(xmlDoc.getElementsByTagName("element")[i].firstChild.data,'error');
    }
  }


  if ( errcode!='0' ) {
    add_classname('rezervace_zprava','error');
    document.getElementById('rezervace_zprava').innerHTML = message;
  }
  else {
    document.getElementById('rezervace_zprava').innerHTML = '<div class="hotovo">Děkujeme, vaše rezervace byla v&nbsp;pořádku odeslána.<br />Naši pracovníci Vás budou kontaktovat.</div>';
    document.getElementById('rezervace_submit').style.display = 'none';

    for ( i=0; i<xmlDoc.getElementsByTagName("element").length; i++ ) {
      document.getElementById(xmlDoc.getElementsByTagName("element")[i].firstChild.data).disabled = true;
      add_classname(xmlDoc.getElementsByTagName("element")[i].firstChild.data,'disabled');
    }
  }
}


//******************************** OBJEDNÁVKA KATALOGU ************************************
function katalog_objednavka() {
  var script = 'katalog_objednat.php';
  var data = 'sender=ajax';
  if ( document.getElementById('katalog_lq') && document.getElementById('katalog_lq').checked ) { data+= '&katalog[]=lq'; }
  if ( document.getElementById('katalog_zq') && document.getElementById('katalog_zq').checked ) { data+= '&katalog[]=zq'; }
  if ( document.getElementById('katalog_zqn') && document.getElementById('katalog_zqn').checked ) { data+= '&katalog[]=zqn'; }
  if ( document.getElementById('katalog_lignano') && document.getElementById('katalog_lignano').checked ) { data+= '&katalog[]=lignano'; }
  data+= '&ko_jmeno=' + encodeURIComponent(document.getElementById('ko_jmeno').value);
  data+= '&ko_ulice=' + encodeURIComponent(document.getElementById('ko_ulice').value);
  data+= '&ko_obec=' + encodeURIComponent(document.getElementById('ko_obec').value);
  data+= '&ko_psc=' + encodeURIComponent(document.getElementById('ko_psc').value);
  data+= '&ko_email=' + encodeURIComponent(document.getElementById('ko_email').value);
  data+= '&ko_vzkaz=' + encodeURIComponent(document.getElementById('ko_vzkaz').value);

  // only continue if xmlHttp isn't void
  if ( xmlHttp ) {
	  // try to connect to the server
    try {
      if ( xmlHttp.readyState == 4 || xmlHttp.readyState == 0 ) {
        xmlHttp.open('POST', script, true);
        xmlHttp.setRequestHeader("Content-Type",
                                 "application/x-www-form-urlencoded");
        xmlHttp.onreadystatechange = katalog_objednavka_odpoved;
        xmlHttp.send(data);
      }
      else {
        // if connection was busy, try again after 1 second
        setTimeout("katalog_objednavka();", 1000);
      }
    }
    // display the error in case of failure
    catch (e) {
      ajaxDisplayError(e.toString());
    }
  }
  else {
    alert("Váš prohlížeč bohužel nepodporuje technologii použitou k odeslání rezervace.\n\nKontaktujte nás prosím telefonicky nebo e-mailem.");
  }

  return false; /*neodesilat formular*/
}

// function that retrieves the HTTP response
function katalog_objednavka_odpoved() {
  // continue if the process is completed
  if (xmlHttp.readyState == 4) {
    if (xmlHttp.status == 200) { // continue only if HTTP status is "OK"
      try {
        // read server response as text, to check for errors
        var response = xmlHttp.responseText;
        // server error?
        if ( response.indexOf("ERRNO")>=0 || response.indexOf("error:")>=0 || response.length==0 ) {
          throw(response.length == 0 ? "Void server response." : response);
        }
        zobraz_katalog_objednavka_odpoved();
      }
      catch(e) {
        ajaxDisplayError(e.toString()); // display error message
      }
    }
    else {
      ajaxDisplayError(xmlHttp.statusText);
    }
  }
}

// Processes server's response
function zobraz_katalog_objednavka_odpoved() {

  var responseXml = xmlHttp.responseXML;
  var errelements = new Array();

  xmlDoc = responseXml.documentElement;
  errcode = xmlDoc.getElementsByTagName("errcode")[0].firstChild.data;
  message = '';
  for ( i=0; i<xmlDoc.getElementsByTagName("errmessage").length; i++ ) {
    message+= '<div>' + xmlDoc.getElementsByTagName("errmessage")[i].firstChild.data + '</div>';
  }

  if ( !message.length ) {
    message+= '<div>Opravte prosím označená pole.</div>';
  }

  for ( i=0; i<xmlDoc.getElementsByTagName("errelement").length; i++ ) {
    add_classname(xmlDoc.getElementsByTagName("errelement")[i].firstChild.data,'error');
    errelements.push(xmlDoc.getElementsByTagName("errelement")[i].firstChild.data);
  }

  for ( i=0; i<xmlDoc.getElementsByTagName("element").length; i++ ) {
    if ( !in_array(xmlDoc.getElementsByTagName("element")[i].firstChild.data,errelements) ) {
      remove_classname(xmlDoc.getElementsByTagName("element")[i].firstChild.data,'error');
    }
  }


  if ( errcode!='0' ) { 
    add_classname('katalog_objednavka_zprava','error');
    document.getElementById('katalog_objednavka_zprava').innerHTML = message;
  }
  else {
    document.getElementById('katalog_objednavka_zprava').innerHTML = '<div class="hotovo">Děkujeme, vaše objednávka byla v&nbsp;pořádku odeslána.</div>';
    document.getElementById('katalog_objednat_submit').style.display = 'none';

    for ( i=0; i<xmlDoc.getElementsByTagName("element").length; i++ ) {
      document.getElementById(xmlDoc.getElementsByTagName("element")[i].firstChild.data).disabled = true;
      add_classname(xmlDoc.getElementsByTagName("element")[i].firstChild.data,'disabled');
    }
  }

}

