// ajax
function HTTP_Request(url, id)
{
	var http_request = CreateHttpObject();
	if (http_request)
	{
		http_request.onreadystatechange = function() { HTTP_Response(http_request, id) };
		http_request.open("GET", url, true);
		http_request.send(null);
	}
	else
	{
	    alert("Unable to create object");
	}
}

function HTTP_Response(http_request, id)
{
	if(http_request)
	{
	    if (http_request.readyState == 4)
	    {
		    if (http_request.status == 200)
		    {
		        //document.getElementById(id).charset = "iso-8859-1";
		        var el = document.getElementById(id);
		        el.innerHTML = http_request.responseText;
		        //eval(el.innerHTML);
		        //for(var i = 0, e = el.getElementsByTagName("script"); i < e.length; ++i)
			    //    eval(e[i].innerHTML);
		    }
	    }
    }
}

function CreateHttpObject()
{
	var http_request = false;
	if (window.ActiveXObject)// code for IE
	{
		try
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e)
		{
			try
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)
			{}
		}
	}
    else if (window.XMLHttpRequest)	// if Mozilla, Safari etc
	{
		http_request=new XMLHttpRequest();
		try
		{
		
        // firefuck extensions as they are obtuse to challenge w3c
        Element.prototype.selectNodes = function (sXPath)
        {
            var oEvaluator = new XPathEvaluator();
            var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);    
            var aNodes = new Array;

            if (oResult)
            {
                var oElement = oResult.iterateNext();
                while(oElement)
                {
                    aNodes.push(oElement);
                    oElement = oResult.iterateNext();
                }
            }
            return aNodes;
        };
        
        Element.prototype.selectSingleNode = function (sXPath)
        {
            var oEvaluator = new XPathEvaluator();
            var oResult = oEvaluator.evaluate(sXPath, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
	        if (oResult)
                return oResult.singleNodeValue;
            else
                return null;
        }
			}
			catch (e)
			{}

	}
	return http_request;
}

function HTTP_RequestDOM(url, callback, param)
{
	var http_request = CreateHttpObject();
	if (http_request)
	{
	    http_request.onreadystatechange = function() { HTTP_ResponseDOM(http_request, callback, param) };
		http_request.open("GET", url, true);
		http_request.send(null);
	}
	else
	{
	    alert("Unable to create object");
	}
}

function HTTP_ResponseDOM(http_request, callback, param)
{
	if(http_request)
	{
	    if (http_request.readyState == 4)
	    {
		    if (http_request.status == 200)
		    {
		        //alert(http_request.responseXML);
		        if(callback)
		            return callback(http_request, param);
		        else
		            return "";
		    }
	    }
    }
    return null;
}

// Copyright (c) by Matthias Hertel, http://www.mathertel.de
var AJAXPopUpBehaviour = {
    // get the absolute position of a html object
    _absolutePosition: function(obj)
    {
        var pos = null;

        if(obj != null)
        {
          pos = new Object();
          pos.top = obj.offsetTop;
          pos.left = obj.offsetLeft;
          pos.width = obj.offsetWidth;
          pos.height= obj.offsetHeight;

          obj = obj.offsetParent;
          while(obj != null)
          {
            if(obj.currentStyle.position == 'absolute')
            {
                return(pos);
            }
            else
            {
                pos.top += obj.offsetTop;
                pos.left += obj.offsetLeft;
                obj = obj.offsetParent;
            }
          }
        }
        return(pos);
    }
}