var xmlHttp;

function GetXmlHttpObject()
{

var objXMLHttp = null;

  if (window.XMLHttpRequest)
  {
  objXMLHttp = new XMLHttpRequest();
  }
  else if (window.ActiveXObject)
  {

    try
    {
    objXMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {

      try
      {
      objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
      alert('An error occured');
      return false;
      }

    }

  }

return objXMLHttp;

}



transfer_busy = false;

transfer_pending_list = [];

checking_transfer = false;



function check_transfer_list()
{

  if (!transfer_busy)
  {

    if (transfer_pending_list.length > 0)
    {

    formRequest(transfer_pending_list[0][0], transfer_pending_list[0][1], transfer_pending_list[0][2], transfer_pending_list[0][3], transfer_pending_list[0][4], transfer_pending_list[0][5]);

    transfer_pending_list.splice(0, 1);

      if (transfer_pending_list.length > 0)
      {
      setTimeout(function(){check_transfer_list();}, 10);
      }
      else
      {
      checking_transfer = false;
      }

    }
    else
    {
    checking_transfer = false;
    }

  }
  else
  {

    if (transfer_pending_list.length > 0)
    {
    setTimeout(function(){check_transfer_list();}, 10);
    }
    else
    {
    checking_transfer = false;
    }

  }

}



function makeRequest(url, parameters, method, submit_button, loading_icon_span, end_function, error_function)
{

  if (!transfer_busy && transfer_pending_list.length==0)
  {
  formRequest(url, parameters, method, submit_button, loading_icon_span, end_function, error_function);
  }
  else if (transfer_pending_list.length < 20) //only allow a maximum of 20 requests in the queue to prevent overflow
  {

  var variable_array = [];
  variable_array[0] = url;
  variable_array[1] = parameters;
  variable_array[2] = method;
  variable_array[3] = submit_button;
  variable_array[4] = loading_icon_span;
  variable_array[5] = end_function;
  variable_array[6] = error_function;

  transfer_pending_list.splice(transfer_pending_list.length, 0, variable_array);

    if (!checking_transfer)
    {
    checking_transfer = true;
    setTimeout(function(){check_transfer_list();}, 10);
    }

  }

}



function formRequest(url, parameters, method, submit_button, loading_icon_span, end_function, error_function)
{

  if (lightbox_content!="expired")
  {

  transfer_busy = true;

    if (end_function===undefined || end_function===null)
    {
    end_function = function(){};
    }

    if (error_function===undefined || error_function===null)
    {
    error_function = function(){};
    }

  xmlHttp = GetXmlHttpObject();

    if (xmlHttp==null)
    {

    alert("Browser does not support HTTP Request");

      if ((typeof submit_button).toLowerCase()=="object")
      {
      submit_button.disabled = false;
      }

      if ((typeof loading_icon_span).toLowerCase()=="object")
      {
      loading_icon_span.innerHTML = "";
      }

    error_function();

    transfer_busy = false;

    return;

    }

  xmlHttp.onreadystatechange = function(){stateChanged(xmlHttp, submit_button, loading_icon_span, end_function, error_function);};

    if (method=="post")
    {
    xmlHttp.open("POST", url, true);
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.setRequestHeader("Connection", "close");
    xmlHttp.send(parameters);
    }
    else
    {
    xmlHttp.open("GET", url + "?" + parameters, true);
    xmlHttp.send(null);
    }

  }

}



function stateChanged(xmlHttp, submit_button, loading_icon_span, end_function, error_function)
{

  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  {

    if (xmlHttp.status==200)
    {

    xmlDoc = xmlHttp.responseXML;

    //alert(xmlHttp.responseText);

      if ((getXMLdata(xmlDoc, "loggedin")=="no" && user_info_logged_in) || (getXMLdata(xmlDoc, "loggedin")=="yes" && getXMLdata(xmlDoc, "loginid")!=user_info_publickey && user_info_logged_in))
      {
//      window.location = "/?expired";
      lightbox_content = 'expired';
      Lightbox.showBoxByID('expired_box');
      }
      else
      {
      end_function(xmlDoc);
      }

    //document.getElementById(gotoel).innerHTML = getXMLdata(xmlDoc, "content");

    }
    else
    {

      if (!unloading)
      {
      alert("There was a problem with the connection. Please try again.");
      }

      if ((typeof submit_button).toLowerCase()=="object")
      {
      submit_button.disabled = false;
      }

      if ((typeof loading_icon_span).toLowerCase()=="object")
      {
      loading_icon_span.innerHTML = "";
      }

    error_function();

    }

  transfer_busy = false;

  }

}



function getXMLdata(xmlDoc, tagname)
{

  if (xmlDoc.getElementsByTagName(tagname)[0].childNodes[0]!=undefined && xmlDoc.getElementsByTagName(tagname)[0].childNodes[0]!=null)
  {
  return xmlDoc.getElementsByTagName(tagname)[0].childNodes[0].nodeValue;
  }
  else
  {
  return '';
  }

}



function encodeAJAX(string)
{

  if (isNaN(string)) //prevents all kinds of errors when string is a number and passed to htmlentities_encode()
  {
  return encodeURIComponent(htmlentities_encode(string));
  }
  else
  {
  return string;
  }

}



function escape_HTML(string)
{
return string.replace(/</g,"&lt;").replace(/>/g,"&gt;");
}



function HTML_prep(string)
{
return escape_HTML(htmlentities_decode(string.replace(/  /g, " &nbsp;")));
}



function htmlentities_decode(string)
{
var ta = document.createElement("textarea");
ta.innerHTML = string.replace(/</g,"&lt;").replace(/>/g,"&gt;");
return ta.value;
}



function htmlentities_encode(string) //to UTF-8
{

var tstr = string;
var bstr = '';

  for (var i = 0; i < tstr.length; i++)
  {

    if (tstr.charCodeAt(i) > 127)
    {
    bstr += '&#' + tstr.charCodeAt(i) + ';';
    }
    else
    {
    bstr += {'<':'&lt;','>':'&gt;','&':'&amp;','"':'&quot;'}[tstr.charAt(i)]||tstr.charAt(i);
    }

  }

return bstr;

}



function smoothslide_show(div, onfinish, speed, height, curheight, height_defined, started)
{

  if (started===undefined || started===null)
  {
  var started = false;
  }

//  if (started || (safe2change && !started))
//  {

//  safe2change = false;

    if (onfinish===undefined || onfinish===null)
    {
    var onfinish = function(){};
    }

    if (speed===undefined || speed===null)
    {
    var speed = 2;
    }

    if (height_defined===undefined || height_defined===null)
    {

      if (height===undefined || height===null)
      {
      var height_defined = false;
      }
      else
      {
      var height_defined = true;
      }

    }

    if (height===undefined || height===null)
    {
    var height = document.getElementById(div + '_innerdiv').offsetHeight;
    }

    if (curheight===undefined || curheight===null)
    {
    var curheight = document.getElementById(div).offsetHeight;
    }

  var new_height = curheight + ((height - curheight) * (speed/12));

    if (Math.ceil(new_height) <= height)
    {
    document.getElementById(div).style.height = Math.ceil(new_height) + "px";
    }

    if (Math.ceil(new_height) < height)
    {
    setTimeout(function(){smoothslide_show(div, onfinish, speed, height, new_height, height_defined, true);}, 15);
    }
    else
    {

      if (!height_defined)
      {
      document.getElementById(div).style.height = "";
      }
      else
      {
      document.getElementById(div).style.height = height + "px";
      }

//    safe2change = true;
    onfinish();

    }

//  }
//  else
//  {
//  setTimeout(function(){smoothslide_show(div, onfinish, speed, height);}, 10);
//  }

}



function smoothslide_hide(div, onfinish, speed, height, started)
{

  if (started===undefined || started===null)
  {
  var started = false;
  }

//  if (started || (safe2change && !started))
//  {

//  safe2change = false;

    if (onfinish===undefined || onfinish===null)
    {
    var onfinish = function(){};
    }

    if (speed===undefined || speed===null)
    {
    var speed = 2;
    }

    if (height===undefined || height===null)
    {
    var height = document.getElementById(div).offsetHeight;
    }

  var new_height = height / (1 + (speed/10));

    if (new_height >= 1)
    {
    document.getElementById(div).style.height = new_height + "px";
    }
    else
    {
    document.getElementById(div).style.height = "0px";
    }

    if (new_height >= 1)
    {
    setTimeout(function(){smoothslide_hide(div, onfinish, speed, new_height, true);}, 15);
    }
    else
    {
//    safe2change = true;
    onfinish();
    }

//  }
//  else
//  {
//  setTimeout(function(){smoothslide_hide(div, onfinish, speed, height);}, 10);
//  }

}



function insertElement(parentDiv, child)
{
var parent = document.getElementById(parentDiv);
parent.appendChild(child);
}

function insertElement_by_element(parentDiv, child)
{
parentDiv.appendChild(child);
}



function prependChild(parentDiv, child)
{
var parent = document.getElementById(parentDiv);
parent.insertBefore(child, parent.firstChild);
}



function insertAfter( referenceNode, newNode )
{
referenceNode.parentNode.insertBefore( newNode, referenceNode.nextSibling );
}



function removeElement(parentDiv, childDiv){
     if (childDiv == parentDiv) {
//          alert("The parent div cannot be removed.");
     }
     else if (document.getElementById(childDiv)) {
          var child = document.getElementById(childDiv);
          var parent = document.getElementById(parentDiv);
          parent.removeChild(child);
     }
     else {
//          alert("Child div has already been removed or does not exist.");
          return false;
     }
}



function trim(str)
{
return str.replace(/^\s+|\s+$/g,"");
}

function ltrim(str)
{
return str.replace(/^\s+/,"");
}

function rtrim(str)
{
return str.replace(/\s+$/,"");
}



function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
