var offsetfromcursorX = 12 //Customize x offset of tooltip
var offsetfromcursorY = 10 //Customize y offset of tooltip

var offsetdivfrompointerX = 10 //Customize x offset of tooltip DIV relative to pointer image
var offsetdivfrompointerY = 14 //Customize y offset of tooltip DIV relative to pointer image. Tip: Set it to (height_of_pointer_image-1).

var fixed_tooltip = false;

if(document.getElementById('code_loc'))
{
        var code_loc = document.getElementById('code_loc').value;
}

document.write('<div id="dhtmltooltip" style="display: none;"><div id="dhtmltooltipheader" style="display: none;"></div><div id="dhtmltooltipbody" style="display: none;"></div></div>') //write out tooltip DIV
document.write('<img id="dhtmlpointer_top_left" class="dhtmlpointer" src="'+code_loc+'images/navigation/ttarrow.gif" alt="Tooltip Arrow" style="display: none;" />') //write out pointer image
document.write('<img id="dhtmlpointer_top_right" class="dhtmlpointer" src="'+code_loc+'images/navigation/ttarrow_top_right.gif" alt="Tooltip Arrow" style="display: none;" />') //write out pointer image
document.write('<img id="dhtmlpointer_bottom_left" class="dhtmlpointer" src="'+code_loc+'images/navigation/ttarrow_bottom_left.gif" alt="Tooltip Arrow" style="display: none;" />') //write out pointer image
document.write('<img id="dhtmlpointer_bottom_right" class="dhtmlpointer" src="'+code_loc+'images/navigation/ttarrow_bottom_right.gif" alt="Tooltip Arrow" style="display: none;" />') //write out pointer image

var ie=document.all
var ns6=document.getElementById && !document.all
var enabletip=false
var enabledisplay=false
if (ie||ns6)
var tipobj = document.all? document.all["dhtmltooltip"] : document.getElementById? document.getElementById("dhtmltooltip") : ""
var headerobj = document.all? document.all["dhtmltooltipheader"] : document.getElementById? document.getElementById("dhtmltooltipheader") : ""
var bodyobj = document.all? document.all["dhtmltooltipbody"] : document.getElementById? document.getElementById("dhtmltooltipbody") : ""

var pointerobj = document.all? document.all["dhtmlpointer_top_left"] : document.getElementById? document.getElementById("dhtmlpointer_top_left") : ""
var pointerobj_top_right = document.all? document.all["dhtmlpointer_top_right"] : document.getElementById? document.getElementById("dhtmlpointer_top_right") : ""
var pointerobj_bottom_left = document.all? document.all["dhtmlpointer_bottom_left"] : document.getElementById? document.getElementById("dhtmlpointer_bottom_left") : ""
var pointerobj_bottom_right = document.all? document.all["dhtmlpointer_bottom_right"] : document.getElementById? document.getElementById("dhtmlpointer_bottom_right") : ""

var selectElements = document.getElementsByTagName('select')

function ietruebody()
{
        return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function getInternetExplorerVersion()
{
    var rv = -1; // Return value assumes failure.
    if (navigator.appName == 'Microsoft Internet Explorer')
    {
        var ua = navigator.userAgent;
        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (re.exec(ua) != null)
            rv = parseFloat(RegExp.$1);
    }
    return rv;
}

var tooltip_timer
var from_delay = false;
var tipobj_current_width = 150;
var curX, curY, winwidth, winheight, rightedge, bottomedge, leftedge
var delay_header, delay_text, delay_width

function delay_tooltip(i_theheader, i_thetext, i_thewidth)
{
        clearTimeout(tooltip_timer);
        delay_header = perform_markup(i_theheader); // = i_theheader;
        delay_text = perform_markup(i_thetext); // = i_thetext;
        delay_width = i_thewidth;
        tooltip_timer = setTimeout("tooltip('from_delay','from_delay','from_delay')",500);
        
        enabletip = true;
        enabledisplay = false;
        from_delay = true;
        
        tipobj_current_width = parseInt(i_thewidth);
}

function tooltip(theheader, thetext, thewidth, fixed_tip)
{
        fixed_tooltip = false;
        if(fixed_tip)
        {
                fixed_tooltip = true;
                last_tipobj_left = null;
                last_tipobj_top = null;
                recalculate_top_pos = true;
        }

        if (ns6||ie)
        {
                if(theheader == 'from_delay' && thetext == 'from_delay' && thewidth == 'from_delay')
                {
                        theheader = delay_header;
                        thetext = delay_text;
                        thewidth = delay_width;
                }
                else
                {
                        theheader = perform_markup(theheader);
                        thetext = perform_markup(thetext);
                }
                thewidth = parseInt(thewidth);
                tipobj_current_width = thewidth;
                
                tipobj.style.width = thewidth + "px";
                headerobj.innerHTML = theheader;
                bodyobj.innerHTML = thetext;
                
                enabletip = true
                enabledisplay = true
                
                if (ie)
                {
                        if(from_delay)
                        {
                                tipobj.style.left = tipobj_left;
                                tipobj.style.top = tipobj_top;
                        }
                        else
                        {
                                curX = (ns6) ? e.pageX : event.x + ietruebody().scrollLeft;
                                curY = (ns6) ? e.pageY : event.y + ietruebody().scrollTop;
                                
                                //Find out how close the mouse is to the corner of the window
                                winwidth = ie && !window.opera ? ietruebody().clientWidth : window.innerWidth - 20
                                winheight = ie && !window.opera ? ietruebody().clientHeight : window.innerHeight - 20
                
                                rightedge = ie && !window.opera ? winwidth - event.clientX - offsetfromcursorX : winwidth - e.clientX - offsetfromcursorX
                                bottomedge = ie && !window.opera ? winheight - event.clientY - offsetfromcursorY : winheight - e.clientY - offsetfromcursorY
        
                                leftedge = (offsetfromcursorX < 0 ) ? offsetfromcursorX * (-1) : -1000
                                
                                calculate_tooltip_pos();
                                
                                tipobj.style.left = tipobj_left;
                                tipobj.style.top = tipobj_top;
                        }
                }

                if(from_delay && enabledisplay)
                {
                        display_tooltip();
                }
                
                from_delay = false;                
                
                return false
        }
}

var tipobj_left, tipobj_top, last_tipobj_left, last_tipobj_top
var pointerobj_left, pointerobj_top 
var pointer_pos_left = true;
var pointer_pos_top = true;

var ieversion = getInternetExplorerVersion();

function positiontip(e)
{
        if (enabletip)
        {
                curX = (ns6) ? e.pageX : event.x + ietruebody().scrollLeft;

                if (ieversion == 8.0) curY = (ns6) ? e.pageY : event.y;
                else curY = (ns6) ? e.pageY : event.y + ietruebody().scrollTop;
                
                
                //Find out how close the mouse is to the corner of the window
                winwidth = ie && !window.opera ? ietruebody().clientWidth : window.innerWidth - 20
                winheight = ie && !window.opera ? ietruebody().clientHeight : window.innerHeight - 20

                rightedge = ie && !window.opera ? winwidth - event.clientX - offsetfromcursorX : winwidth - e.clientX - offsetfromcursorX
                bottomedge = ie && !window.opera ? winheight - event.clientY - offsetfromcursorY : winheight - e.clientY - offsetfromcursorY

                leftedge = (offsetfromcursorX < 0) ? offsetfromcursorX * (-1) : -1000

                calculate_tooltip_pos();
                
                if(enabledisplay)
                {
                        display_tooltip();
                }
        }
}

function calculate_tooltip_pos()
{
        if(!fixed_tooltip || (last_tipobj_left == null && last_tipobj_top == null))
        {
                //if the horizontal distance isn't enough to accomodate the width of the context menu
                if (rightedge < tipobj_current_width)
                {
                        //move the horizontal position of the menu to the left by it's width
                        tipobj_left = curX - tipobj_current_width + "px";
                        pointerobj_left = curX - offsetfromcursorX - 10 + "px";
                        pointer_pos_left = false;
                }
                else if (curX < leftedge)
                {
                        tipobj_left = "5px";
                        pointer_pos_left = true;
                }
                else
                {
                        //position the horizontal position of the menu where the mouse is positioned
                        tipobj_left = curX + offsetfromcursorX - offsetdivfrompointerX + "px";
                        pointerobj_left = curX + offsetfromcursorX + "px";
                        pointer_pos_left = true;
                }

                var tooltip_height = tipobj.offsetHeight;
                if(tooltip_height == 0)
                {
                        tooltip_height = 50;
                        recalculate_top_pos = true;
                }
                else recalculate_top_pos = false;

                //same concept with the vertical position
                if (bottomedge < tooltip_height)
                {
                        tipobj_top = curY - tooltip_height - offsetfromcursorY + "px";
                        if(ie) pointerobj_top = curY - offsetfromcursorY - 9 + "px";
                        else pointerobj_top = curY - offsetfromcursorY - 1 + "px";
                        pointer_pos_top = false;
                }
                else
                {
                        tipobj_top = curY + offsetfromcursorY + offsetdivfrompointerY + "px";
                        pointerobj_top = curY + offsetfromcursorY + "px";
                        pointer_pos_top = true;
                }

                last_tipobj_left = tipobj_left;
                last_tipobj_top = tipobj_top;

                if(fixed_tooltip)
                {
                        recalculate_top_pos = true;
                }
        }
        else
        {
                tipobj_left = last_tipobj_left;
                tipobj_top = last_tipobj_top;

                recalculate_top_pos = false;
        }
}

var recalculate_top_pos = false;

function display_tooltip()
{
        tipobj.style.left = tipobj_left;
        tipobj.style.top = tipobj_top;
        
        if(headerobj.innerHTML == '' && bodyobj.innerHTML == '') return;
        
        if(headerobj.innerHTML == '')
        {
                headerobj.innerHTML = 'Event Details (Click for more)';
        }

        headerobj.style.display = "";
        bodyobj.style.display = "";
        tipobj.style.display = "";
        
        if(recalculate_top_pos)
        {
                var tooltip_height = tipobj.offsetHeight;
                if(tooltip_height != 0)
                {
                        if (bottomedge < tooltip_height)
                        {
                                tipobj_top = curY - tooltip_height - offsetfromcursorY + "px";
                                if(ie) pointerobj_top = curY - offsetfromcursorY - 9 + "px";
                                else pointerobj_top = curY - offsetfromcursorY - 1 + "px";
                                pointer_pos_top = false;
                        }
                        else
                        {
                                tipobj_top = curY + offsetfromcursorY + offsetdivfrompointerY + "px";
                                pointerobj_top = curY + offsetfromcursorY + "px";
                                pointer_pos_top = true;
                        }
                        
                        tipobj.style.top = tipobj_top;
                }
        }
        
        if(pointer_pos_top)
        {
                pointerobj_bottom_left.style.display = "none";
                pointerobj_bottom_right.style.display = "none";
                
                if(pointer_pos_left)
                {
                        show_hide_pointer(pointerobj,pointerobj_top_right);
                }
                else
                {
                        show_hide_pointer(pointerobj_top_right,pointerobj);
                }
        }
        else
        {
                pointerobj.style.display = "none";
                pointerobj_top_right.style.display = "none";
                
                if(pointer_pos_left)
                {
                        show_hide_pointer(pointerobj_bottom_left,pointerobj_bottom_right);
                }
                else
                {
                        show_hide_pointer(pointerobj_bottom_right,pointerobj_bottom_left);
                }
        }
        
        if (ie)
        {
                var objectOffsets = getOffsets(tipobj);
                
                for (var i = 0; i < selectElements.length; i++)
                {
                        var selectOffsets = getOffsets(selectElements[i]);
            
                        var center2centerDistance = Math.sqrt(Math.pow(selectOffsets.get('leftCenter') - objectOffsets.get('leftCenter'), 2) + Math.pow(selectOffsets.get('topCenter') - objectOffsets.get('topCenter'), 2));
                        var radiusSum = selectOffsets.get('radius') + objectOffsets.get('radius');
            
                        // the encompassing circles are overlapping, get in for a closer look
                        if (center2centerDistance < radiusSum)
                        {
                                // tip is left of select
                                if ((objectOffsets.get('leftCenter') <= selectOffsets.get('leftCenter') && objectOffsets.get('right') < selectOffsets.get('left')) ||
                                // tip is right of select
                                (objectOffsets.get('leftCenter') > selectOffsets.get('leftCenter') && objectOffsets.get('left') > selectOffsets.get('right')) ||
                                // tip is above select
                                (objectOffsets.get('topCenter') <= selectOffsets.get('topCenter') && objectOffsets.get('bottom') < selectOffsets.get('top')) ||
                                // tip is below select
                                (objectOffsets.get('topCenter') > selectOffsets.get('topCenter') && objectOffsets.get('top') > selectOffsets.get('bottom')))
                                {
                                        //selectElements[i].style.display = "";
                                }
                                else
                                {
                                        selectElements[i].style.display = "none";
                                }
                        }
                }
        }
}

function show_hide_pointer(show_pointer_obj,hide_pointer_obj)
{
        hide_pointer_obj.style.display = "none";
        
        if(pointerobj_left) show_pointer_obj.style.left = pointerobj_left;
        if(pointerobj_top) show_pointer_obj.style.top = pointerobj_top;
        
        show_pointer_obj.style.display = "";
}

function hidetooltip()
{
        if (ns6||ie)
        {
                clearTimeout(tooltip_timer);
                from_delay = false;
                                
                enabletip = false;
                enabledisplay = false;
                
                headerobj.style.display = "none";
                bodyobj.style.display = "none";
                tipobj.style.display = "none";
                pointerobj.style.display = "none";
                pointerobj_top_right.style.display = "none";
                pointerobj_bottom_left.style.display = "none";
                pointerobj_bottom_right.style.display = "none";
                
                //tipobj.style.left = "-1000px";
                //tipobj.style.backgroundColor = '';
                //tipobj.style.width = '';

                if (ie)
                {
                        for (var i = 0; i < selectElements.length; i++)
                        {
                                selectElements[i].style.display = "";
                        }
                }
        }
        fixed_tooltip = false;
}

function Hash()
{
        this.length = 0;
        this.numericLength = 0;
        this.elementData = [];
        for (var i = 0; i < arguments.length; i += 2)
        {
                if (typeof(arguments[i + 1]) != 'undefined')
                {
                        this.elementData[arguments[i]] = arguments[i + 1];
                        this.length++;
                        if (arguments[i] == parseInt(arguments[i]))
                        {
                                this.numericLength++;
                        }
                }
        }
}

Hash.prototype.get = function(in_key)
{
    return this.elementData[in_key];
}

function getOffsets(in_object)
{
        var originalObject = in_object;
        var originalWidth = in_object.offsetWidth;
        var originalHeight = in_object.offsetHeight;
        var offsetLeft = 0;
        var offsetTop = 0;

        while (in_object)
        {
                offsetLeft += in_object.offsetLeft;
                offsetTop += in_object.offsetTop;
                in_object = in_object.offsetParent;
        }

        return new Hash(
                'left',                 offsetLeft,
                'top',                  offsetTop,
                'right',                offsetLeft + originalWidth,
                'bottom',               offsetTop + originalHeight,
                'leftCenter',           offsetLeft + originalWidth/2,
                'topCenter',            offsetTop + originalHeight/2,
                'radius',               Math.max(originalWidth, originalHeight)
        );
}

function perform_markup(string_in)
{
        string_in = string_in.replace(/\|strong\|/gi, "<strong>");
        string_in = string_in.replace(/\|\/strong\|/gi, "</strong>");
        string_in = string_in.replace(/\|br\|/gi, "<br />");
        string_in = string_in.replace(/\|br \/\|/gi, "<br />");
        
        return string_in;
}

document.onmousemove=positiontip
document.onclick=positiontip




/*onerror=handleErr
var txt=""

function handleErr(msg,url,l)
{
txt="There was an error on this page.\n\n"
txt+="Error: " + msg + "\n"
txt+="URL: " + url + "\n"
txt+="Line: " + l + "\n\n"
txt+="Click OK to continue.\n\n"
alert(txt)
return true
}*/

