/**

@parameter string url
@parameter string div id
@throw

@desc
Execute url query via ajax and replace content of output_id div with result when 
query is finished. If 'if_' + output_id div exists make it visible. If
'cache_' + output_id div exists save ajax output there too.

*/
function lib_ajaxpage(url, output_id) {

  if (!url) {
    throw('Empty url');
  }

  var page_request = false

  if (window.XMLHttpRequest) {
    page_request = new XMLHttpRequest()

    if (page_request.overrideMimeType) {
      page_request.overrideMimeType('text/html;charset=iso-8859-1')
    }
  }
  else if (window.ActiveXObject) {
    try {
      page_request = new ActiveXObject("Msxml2.XMLHTTP")
    } 
    catch (e) {
      try {
        page_request = new ActiveXObject("Microsoft.XMLHTTP")
      }
      catch (e) {}
    }
  }
  else {
    throw("Couldn't create AJAX-Query");
  }

  var out = document.getElementById(output_id);

  if (output_id && !out) {
    throw('no tag with id [' + output_id + ']');
  }

  if (out && out._url && out._url == url) {
    // use cached output
    return;
  }

  page_request.onreadystatechange = function() {
    if (page_request.readyState == 4 && (page_request.status == 200 || 
        window.location.href.indexOf("http") == -1)) {

      var regex = new RegExp('\<\!\-\-@AJAX\:(.+)@\-\-\>');
      var qs = regex.exec(page_request.responseText);

      if (qs && qs[1].length > 0) {
        if (qs[1] == 'SHOW') {
          document.getElementById(output_id).innerHTML = page_request.responseText;
        }
        else if (qs[1] == 'JAVASCRIPT') {
          eval(page_request.responseText);
        }
      }
      else if (output_id) {
        document.getElementById(output_id).innerHTML = page_request.responseText;
      }

      var show_div = document.getElementById('if_' + output_id);
      if (show_div) {
        show_div.style.display = 'block';
      }

      var cache_div = document.getElementById('cache_' + output_id);
      if (cache_div) {
        cache_div.innerHTML = page_request.responseText;
      }
    }
  }

  page_request.open('GET', url, true)
  page_request.send(null)

  if (out) {
    out._url = url;
  }
}


/**

@parameter string key
@parameter string value
@parameter int minutes

@desc
Set cookie with minutes validity (60 * 24 * 365 = 1 Year). Use minutes = -1 to
delete cookie.

*/
function lib_set_cookie(key, value, minutes) {
  var a = new Date();

  if (minutes == -1) {
    a = new Date(a.getTime() - 1000 * 60 * 10);
  }
  else {
    a = new Date(a.getTime() + 1000 * 60 * minutes);
  }

  document.cookie = key + '=' + value + '; expires='+ a.toGMTString() +';';
}


/**

@parameter string key

@desc
Return cookie value or empty string if cookie doesn't exist.

*/
function lib_get_cookie(key) {
  var regex = new RegExp(key + '=(.+?);');
  var qs = regex.exec(document.cookie);

  if (qs && qs[1].length > 0) {
    return qs[1];
  }

  return '';
}

