  var last_loaded_url = "";
  var expired_interval = "";

  /*
   * Returns a new XMLHttpRequest object, or false if this browser
   * doesn't support it
   */
  function newXMLHttpRequest() {
    var xmlreq = false;
    if (window.XMLHttpRequest) {
      // Create XMLHttpRequest object in non-Microsoft browsers
      xmlreq = false;
      xmlreq = new XMLHttpRequest();
      if (xmlreq.overrideMimeType) {
        xmlreq.overrideMimeType('text/xml');
      }
    } else if (window.ActiveXObject) {
      // Create XMLHttpRequest via MS ActiveX
      try {
        // Try to create XMLHttpRequest in later versions
        // of Internet Explorer
        xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e1) {
        // Failed to create required ActiveXObject
        try {
          // Try version supported by older versions
          // of Internet Explorer
          xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e2) {
          // Unable to create an XMLHttpRequest with ActiveX
        }
      }
    }
    return xmlreq;
  }

  /*
   * Returns a function that waits for the specified XMLHttpRequest
   * to complete, then passes its XML response to the given handler function.
   * req - The XMLHttpRequest whose state is changing
   * responseXmlHandler - Function to pass the XML response to
   */
  function getReadyStateHandler(req, responseXmlHandler, num) {
    // Return an anonymous function that listens to the 
    // XMLHttpRequest instance
    return function () {
      // If the request's status is "complete"
      if (req.readyState == 4) {
        // Check that a successful server response was received
        if (req.status == 200) {
          // Pass the XML payload of the response to the 
          // handler function
          debugJS("End loading xml ("+last_loaded_url+")");
          data_loading = false;
          responseXmlHandler(req.responseXML, num);
        } else {
          // An HTTP problem has occurred
          alert("HTTP error: "+req.status);
        }
      }
    }
  }

  function loadData(urlObj) {
    if(window.startToWatchSession) {
      startToWatchSession();
    }
    if(urlObj && urlObj.url && urlObj.url!="" && urlObj.type!="none"){
      clearInterval(expired_interval);
      expired_interval = "";
      last_loaded_url = urlObj;
      if(expired_interval==""){
        expired_interval = setInterval("loadData()",1800000);
      }
    }
    if(urlObj && urlObj.type!="none"){
      resetPictLoading();
    }
    debugJS("Start loading xml ("+last_loaded_url.url+")");
    data_loading = true;
    var req = newXMLHttpRequest();
    if(urlObj && urlObj.type=="none"){
      var handlerFunction = getReadyStateHandler(req, eval(urlObj.handler));
      req.open("POST", urlObj.url, true);
      req.onreadystatechange = handlerFunction;
      req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      if(urlObj.send_params==null||urlObj.send_params.length==0)urlObj.send_params="dummy=1";
      req.setRequestHeader("Content-Length", urlObj.send_params.length);
      req.send(urlObj.send_params);
    } else {
      var handlerFunction = getReadyStateHandler(req, eval(last_loaded_url.handler));
      req.open("POST", last_loaded_url.url, true);
      req.onreadystatechange = handlerFunction;
      req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      if(last_loaded_url.send_params==null||last_loaded_url.send_params.length==0)last_loaded_url.send_params="dummy=1";
      req.setRequestHeader("Content-Length", last_loaded_url.send_params.length);
      req.send(last_loaded_url.send_params);
    }
  }

  function loadListingData(url, num) {
    data_loading = true;
    var req = newXMLHttpRequest();
    var handlerFunction = getReadyStateHandler(req, updateListingData, num);
    req.open("GET", url, true);
    req.onreadystatechange = handlerFunction;
    req.send(null);
  }

  function debugJS(value){
    if(document.getElementById("debug_block")){
      var cur_time = new Date();
      var ls = document.getElementById("debug_block");
      var cur_value = ls.innerHTML;
      ls.innerHTML = "";
      ls.innerHTML = "<b>"+cur_time.getHours()+":"+cur_time.getMinutes()+":"+cur_time.getSeconds()+"</b> - "+value+"<br>"+cur_value;
    }
  }

  function AJAXUrlClass() {
    this.url = null;
    this.send_params = null;
    this.handler = "updatelistingsXmlData";
    this.type = null;
  }

  AJAXUrlClass.prototype.set = function(url,send_params,handler,type){
    if(url){
      this.url = url;
    }
    if(send_params){
      this.send_params = send_params;
    }
    if(handler){
      this.handler = handler;
    }
    if(type){
      this.type = type;
    }
  }

  function get_node_value(xml_obj,node_name,empty_string){
    var user_agent = navigator.userAgent.toLowerCase();
    if(empty_string){
      result = "";
    } else {
      result = null;
    }
    if(xml_obj.getElementsByTagName(node_name).length > 0){
      if(xml_obj.getElementsByTagName(node_name).item(0).firstChild!=null){
        if ((user_agent.indexOf("safari") != -1 || user_agent.indexOf("firefox") != -1) && (xml_obj.getElementsByTagName(node_name).item(0).textContent!=undefined)) {
          result = xml_obj.getElementsByTagName(node_name).item(0).textContent;
        } else {
          result = xml_obj.getElementsByTagName(node_name).item(0).firstChild.data;
        }
      }
    }
    return result;
  }