var getResultURL = "https://ssl.pojisteni.com/ajax/GetByAJAX.php?SQLquery=";

var SQLquery1;
var a_SQLquery1;

var SQLquery2;
var a_SQLquery2;

var targetItemInputType1;
var targetItemID1;
var targetItemInputType2;
var targetItemID2;

var a_targetItemInputType1;
var a_targetItemID1;
var a_targetItemInputType2;
var a_targetItemID2;

var SQLvalueToReplace1;
var a_SQLvalueToReplace1;

var SQLvalueToReplace2;
var a_SQLvalueToReplace2;

/* the identifier used to cancel the evaluation with the clearTimeout method. */
var timeoutId1 = -1;
var timeoutId2 = -1;

var debugMode = false;
/* the XMLHttp object(s) for communicating with the server */
var xmlHttpGetResults1 = createXmlHttpRequestObject();
var xmlHttpGetResults2 = createXmlHttpRequestObject();

// 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 prog 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) {}
    }
  }
  // return the created object or display an error message
  if (!xmlHttp)
    alert("Error creating the XMLHttpRequest object.");
  else 
    return xmlHttp;
} // createXmlHttpRequestObject()

/* transforms all the children of an xml node into an array */
function xmlToArray(resultsXml) {
  // initiate the resultsArray
  var resultsArray = new Array();  
  // loop through all the xml nodes retrieving the content  
  for(i=0;i<resultsXml.length;i++) {
    resultsArray[i] = new Array();
    for(j=0;j<resultsXml.item(i).childNodes.length;j++) {
      resultsArray[i][resultsXml.item(i).childNodes.item(j).tagName] = resultsXml.item(i).childNodes.item(j).firstChild.data;
    }
  }
  // return the node's content as an array
  return resultsArray;
} // xmlToArray

// getResults1
function getResults1(p_SQLquery, p_targetItemInputType, p_targetItemID, p_SQLvalueToReplace) {
  SQLquery1 = p_SQLquery.replace(/%replace%/, p_SQLvalueToReplace);
  
  targetItemInputType1 = p_targetItemInputType;
  targetItemID1        = p_targetItemID;
   
  SQLvalueToReplace1 = p_SQLvalueToReplace;
  
  if(xmlHttpGetResults1) { 
    try {
      // if the XMLHttpRequest object isn't busy with a previous request...
      if (xmlHttpGetResults1.readyState == 4 || xmlHttpGetResults1.readyState == 0) {    
          xmlHttpGetResults1.open("GET", getResultURL + encode(SQLquery1), true);
          xmlHttpGetResults1.onreadystatechange = handleGettingResults1; 
          xmlHttpGetResults1.send(null);
      }
      // if the XMLHttpRequest object is busy...
      else {      
        // clear any previous timeouts already set
        if(timeoutId1 != -1)
          clearTimeout(timeoutId1);          
        // try again in 0.6 seconds     
        timeoutId1 = setTimeout("getResults1('"+SQLquery1+"', '"+targetItemInputType1+"', '"+targetItemID1+"', '"+SQLvalueToReplace+"');", 600);
      }
    }
    catch(e) {
      displayError("Can't connect to server:\n" + e.toString());
    }
  }    
} // getResults1

// getResults2
function getResults2(p_SQLquery, p_targetItemInputType, p_targetItemID, p_SQLvalueToReplace, a_p_SQLquery, a_p_targetItemInputType, a_p_targetItemID, a_p_SQLvalueToReplace) {
  SQLquery2 = p_SQLquery.replace(/%replace%/, p_SQLvalueToReplace);
  a_SQLquery2 = a_p_SQLquery;
  
  targetItemInputType2 = p_targetItemInputType;
  targetItemID2        = p_targetItemID;
  
  a_targetItemInputType2 = a_p_targetItemInputType;
  a_targetItemID2        = a_p_targetItemID;
  
  SQLvalueToReplace2 = p_SQLvalueToReplace;
  a_SQLvalueToReplace2 = a_p_SQLvalueToReplace;
  if(xmlHttpGetResults2) { 
    try {
      // if the XMLHttpRequest object isn't busy with a previous request...
      if (xmlHttpGetResults2.readyState == 4 || xmlHttpGetResults2.readyState == 0) {    
          xmlHttpGetResults2.open("GET", getResultURL + encode(SQLquery2), true);
          xmlHttpGetResults2.onreadystatechange = handleGettingResults2; 
          xmlHttpGetResults2.send(null);
      }
      // if the XMLHttpRequest object is busy...
      else {      
        // clear any previous timeouts already set
        if(timeoutId2 != -1)
          clearTimeout(timeoutId2);          
        // try again in 0.6 seconds     
        timeoutId2 = setTimeout("getResults2('"+SQLquery2+"', '"+targetItemInputType2+"', '"+targetItemID2+"', '"+SQLvalueToReplace+"', '"+a_SQLquery2+"', '"+a_targetItemInputType2+"', '"+a_targetItemID2+"', '"+a_SQLvalueToReplace2+"');", 600);
      }
    }
    catch(e) {
      displayError("Can't connect to server:\n" + e.toString());
    }
  }    
} // getResults2

// handleGettingResults1
function handleGettingResults1() {
  //if the process is completed, decide what to do with the returned data
  if (xmlHttpGetResults1.readyState == 4) {
    // only if HTTP status is "OK"
    if (xmlHttpGetResults1.status == 200) { 
      try {
        // process the server's response
        updateResults1();
      }
      catch(e) {
        // display the error message
        displayError("handleGettingResults1: " + e.toString()); 
      }  
    } 
    else {
      displayError("getResults1: There was a problem retrieving the data:\n" + 
                   xmlHttpGetResults1.statusText);
    }       
  }
} // handleGettingResults1

// handleGettingResults2
function handleGettingResults2() {
  //if the process is completed, decide what to do with the returned data
  if (xmlHttpGetResults2.readyState == 4) {
    // only if HTTP status is "OK"
    if (xmlHttpGetResults2.status == 200) { 
      try {
        // process the server's response
        updateResults2();
      }
      catch(e) {
        // display the error message
        displayError("handleGettingResults2: " + e.toString()); 
      }  
    } 
    else {
      displayError("getResults: There was a problem retrieving the data:\n" + 
                   xmlHttpGetResults2.statusText);
    }       
  }
} // handleGettingResults2

// updateResults1
function updateResults1() {
  // retrieve the server's response 
  var response = xmlHttpGetResults1.responseText;
  // server error?
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0) {
    throw(response.length == 0 ? "Void server response." : response);
  }  
  // retrieve the document element
  response = xmlHttpGetResults1.responseXML.documentElement;
  // initialize the new array of functions' names
  var nameArray = new Array();
  // check to see if we have any results for the searched okres
 
  if(response.childNodes.length) {
    /* we retrieve the new functions' names from the document element as an array */
    nameArray = xmlToArray(response.getElementsByTagName("rslt"));       
  }
  // check to see if other okress are already being searched for
  returnResults1(nameArray);
} // updateResults1

// updateResults2
function updateResults2() {
  // retrieve the server's response 
  var response = xmlHttpGetResults2.responseText;
  // server error?
  if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0) {
    throw(response.length == 0 ? "Void server response." : response);
  }  
  // retrieve the document element
  response = xmlHttpGetResults2.responseXML.documentElement;
  // initialize the new array of functions' names
  var nameArray = new Array();
  // check to see if we have any results for the searched okres
 
  if(response.childNodes.length) {
    /* we retrieve the new functions' names from the document element as an array */
    nameArray = xmlToArray(response.getElementsByTagName("rslt"));       
  }
  // check to see if other okress are already being searched for
  returnResults2(nameArray);
} // updateResults1

function returnResults1(nameArray) {  
  if(targetItemInputType1 == 'text') {
    document.getElementById(targetItemID1).value = nameArray[0]['label'];
  } else if(targetItemInputType1 == 'select') {
    var selement = document.getElementById(targetItemID1);
    // clear selectbox
    selement.selected = null;
    for (c=0;c<selement.options.length;c++) {
      selement.options[c] = null;
    }    
    
    if(nameArray.length == 0) {
      selement.length++;
      selement.options[selement.options.length-1].value = 0;
      selement.options[selement.options.length-1].text = '- není na výběr -';
    } 
    /*
    else if(nameArray.length == 1) { 
      selement.length++;
  		  selement.options[selement.options.length-1].value = nameArray[0]['id'];
  		  selement.options[selement.options.length-1].text = nameArray[0]['label'];    
    }*/ 
    else {
      selement.length++;
      selement.options[selement.options.length-1].value = 0;
      selement.options[selement.options.length-1].text = '- vyberte -';
    
      for(i=0;i<nameArray.length;i++) {
  		  selement.length++;
  		  selement.options[selement.options.length-1].value = nameArray[i]['id'];
  		  selement.options[selement.options.length-1].text = nameArray[i]['label'];
  		  
		  }
    } 
  }
  
  SQLquery1 = "";
  a_SQLquery1 = "";

  targetItemInputType1 = "";
  targetItemID1 = "";
  a_targetItemInputType1 = "";
  a_targetItemID1 = "";
  
  SQLvalueToReplace1 = "";
  a_SQLvalueToReplace1 = "";  
}

function returnResults2(nameArray) {  
  if(targetItemInputType2 == 'text') {
    document.getElementById(targetItemID2).value = nameArray[0]['label'];
  } else if(targetItemInputType2 == 'select') {
    var selement = document.getElementById(targetItemID2);
    // clear selectbox
    selement.selected = null;
    for (c=0;c<selement.options.length;c++) {
      selement.options[c] = null;
    }    
    
    if(nameArray.length == 0) {
      selement.length++;
      selement.options[selement.options.length-1].value = 0;
      selement.options[selement.options.length-1].text = '- není na výběr -';
    } else {
      selement.length++;
      selement.options[selement.options.length-1].value = 0;
      selement.options[selement.options.length-1].text = '- vyberte -';
    
      for(i=0;i<nameArray.length;i++) {
  		  selement.length++;
  		  selement.options[selement.options.length-1].value = nameArray[i]['id'];
  		  selement.options[selement.options.length-1].text = nameArray[i]['label'];
  		  
		  }
    }    
  }
  
  SQLquery2 = "";
  a_SQLquery2 = "";

  targetItemInputType2 = "";
  targetItemID2 = "";
  a_targetItemInputType2 = "";
  a_targetItemID2 = "";
  
  SQLvalueToReplace2 = "";
  a_SQLvalueToReplace2 = "";     
}

/* function that escapes a string */
function encode(uri) {
  if (encodeURIComponent) {
    return encodeURIComponent(uri);
  }

  if (escape) {
    return escape(uri);
  }
} // encode

/* function that displays an error message */
function displayError(message)
{
  // display error message, with more technical details if debugMode is true
  alert("©patně zadaný údaj! "+
        (debugMode ? "\n" + message : ""));
}


function clear_selectbox(id) {
  // clear selectbox
  var e = getLayer(id);
  e.selected = null;
  for (c=0;c<e.options.length;c++) {
    e.options[c] = null;
  }    
  
  if(e.options.length != 0) {
    clear_selectbox(id);
  }
      
}