// 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 rezervace(termin_typ) {
  var script = 'rezervace.php';
  var data = 'sender=ajax';
  data+= '&zajezd_id=' + encodeURIComponent(document.getElementById('zajezd_id').value);
  data+= '&rezervovat_kde=';
  data+= ( document.getElementById('rezervovat_kde_praha').checked==true ) ? 'praha' : 'budejovice';

  if ( termin_typ=='obdobi' && document.getElementById('termin') ) {
    data+= '&termin=' + encodeURIComponent(document.getElementById('termin').value);
  }
  else if ( termin_typ=='noc' ) {
    data+= '&termin_od=' + encodeURIComponent(document.getElementById('termin_od').value);
    data+= '&termin_do=' + encodeURIComponent(document.getElementById('termin_do').value);
  }

  if ( document.getElementById('ubytovani') ) {
    data+= '&ubytovani=' + encodeURIComponent(document.getElementById('ubytovani').value);
  }

  doprava = document.getElementsByName('doprava');
  for ( i=0;i<doprava.length;i++ ) {
    if ( doprava[i].checked ) {
      data+= '&doprava=' + encodeURIComponent(doprava[i].value);
      break;
    }
  }
  
  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 = rezervace_odpoved;
        xmlHttp.send(data);
      }
      else {
        // if connection was busy, try again after 1 second
        setTimeout("rezervace('" + termin_typ + "');", 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 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_rezervace_odpoved();
      }
      catch(e) {
        ajaxDisplayError(e.toString()); // display error message
      }
    }
    else {
      ajaxDisplayError(xmlHttp.statusText);
    }
  }
}

// Processes server's response
function zobraz_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');
    }
  }

}

