var net = new Object();

net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;

net.ContentLoader = function(url, onload, onerror)
{
    this.url = url;
    this.req = null;
    this.onload = onload;
    this.onerror = (onerror) ? onerror : this.defaultError;
    this.loadXmlDoc(url);
}

net.ContentLoader.prototype =
{
    loadXmlDoc:function(url)
    {
        if (window.XMLHttpRequest) // Mozilla/Safari
        {
            this.req = new XMLHttpRequest();
        }
        else if (window.ActiveXObject) // IE
        {
            this.req = new ActiveXObject("Microsoft.XMLHTTP");
        }

        if (this.req)
        {
            try
            {
                var loader = this;
                this.req.onreadystatechange = function()
                {
                    loader.onReadyState.call(loader);
                }
                this.req.open('GET', url, true);
                this.req.send(null);
            }
            catch(err)
            {
                this.onerror.call(this);
            }
        }
    },

    onReadyState:function()
    {
        var req = this.req;
        var ready = req.readyState;

        if (ready == net.READY_STATE_COMPLETE)
        {
            var httpStatus = req.status;
            if (httpStatus == 200 || httpStatus == 0)
            {
                this.onload.call(this);
            }
            else
            {
                this.onerror.call(this);
            }
        }
    },

    defaultError:function()
    {
        alert("error fetching data!" + "\n\nreadyState: " +
              this.req.readyState + "\nstatus: " + this.req.status +
              "\nheaders: " + this.req.getAllResponseHeaders());
    }
}

/* Takes the returned data and displays it */
function parseData()
{
    var data =  this.req.responseText;
    var eventDesc = data.substr(data.indexOf(':') + 1);

    var descBoxObject = document.getElementById('descBox');
    var desc = "<b>Description</b>\n<p>" + eventDesc + "</p>";
    descBoxObject.innerHTML = desc;

    var buttonNode = document.createElement("span");
    buttonNode.innerHTML = "Close";
    buttonNode.className = "button";
    buttonNode.style.textAlign = "center";
    buttonNode.style.width = "25%";
    // buttonNode.setAttribute ("onclick", "hideObject('descBox')"); // not IE
    buttonNode["onclick"] = new Function("hideObject('descBox')");

    descBoxObject.appendChild(buttonNode);
    descBoxObject.style.display = 'block';
}

function hideObject(objId)
{
   var obj = document.getElementById(objId);
   obj.style.display = 'none';
}

/* Start event. */
function getDesc(event_id)
{
    var descBoxObj = document.getElementById('descBox');
    var eventObj = document.getElementById(event_id);
    descBoxObj.style.display = 'none';
    descBoxObj.style.left = findPosX(eventObj) + 0;
    descBoxObj.style.top = findPosY(eventObj) + 30;
    var loader = new net.ContentLoader('getEvent.php?event_id='+event_id, parseData);
}

function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
            curleft += obj.offsetLeft;
            if(!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
}

// by Peter-Paul Koch & Alex Tingle
function findPosY(obj)
{
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
            curtop += obj.offsetTop;
            if(!obj.offsetParent)
                break;
            obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
}
