// --- helpmaster.js
// --- by Josef Becker, Mediendidaktische Beratung
// --- http://www.helpmaster.com

// --- popupon and popupoff base on a script written by Andrew Castles bound
// --- to use with Dreamweaver 1.2
// ---- http://www.arrakis.es/~andrewc/downloads/archives/tooltipdemo.htm
var thisbrowser = "";

function whatbrowser()
{
    if (document.layers)
    {
        thisbrowser = "NN4";
    }
    else
    {
        if (navigator.userAgent.indexOf("Opera") != -1)
        {
            thisbrowser = "opera";
        }
        else
        {
            if (document.all)
            {
                thisbrowser = "ie";
            }
            else
            {
                if (!document.all && document.getElementById)
                {
                    thisbrowser = "NN6";
                }
            }
        }
    }
}

/**
 * Retrieve the absolute coordinates of an element.
 *
 * @param element
 * A DOM element.
 * @return
 * A hash containing keys 'x' and 'y'.
 */
function getAbsolutePosition(element)
{
    var r = { x: element.offsetLeft, y: element.offsetTop };

    if (element.offsetParent)
    {
	var tmp = getAbsolutePosition(element.offsetParent);
	r.x += tmp.x;
	r.y += tmp.y;
    }
    
    return r;
}; 

/**
   * Retrieve the coordinates of the given event relative to the center
   * of the widget.
   *
   * @param event
   *   A mouse-related DOM event.
   * @param reference
   *   A DOM element whose position we want to transform the mouse coordinates to.
   * @return
   *    A hash containing keys 'x' and 'y'.
   */
function getRelativeCoordinates(event, reference)
{
    var x, y;
    event = event || window.event;
    var el = event.target || event.srcElement;

    if (!window.opera && typeof event.offsetX != 'undefined')
    {
	// Use offset coordinates and find common offsetParent
	var pos = { x: event.offsetX, y: event.offsetY };

	// Send the coordinates upwards through the offsetParent chain.
	var e = el;
	while (e)
	{
	    e.mouseX = pos.x;
	    e.mouseY = pos.y;
	    pos.x += e.offsetLeft;
	    pos.y += e.offsetTop;
	    e = e.offsetParent;
	}

	// Look for the coordinates starting from the reference element.
	var e = reference;
	var offset = { x: 0, y: 0 }

	while (e)
	{
	    if (typeof e.mouseX != 'undefined')
	    {
		x = e.mouseX - offset.x;
		y = e.mouseY - offset.y;
		break;
	    }

	    offset.x += e.offsetLeft;
	    offset.y += e.offsetTop;
	    e = e.offsetParent;
	}

	// Reset stored coordinates
	e = el;

	while (e)
	{
	    e.mouseX = undefined;
	    e.mouseY = undefined;
	    e = e.offsetParent;
	}
    }
    else
    {
	// Use absolute coordinates
	var pos = getAbsolutePosition(reference);
	x = event.pageX  - pos.x;
	y = event.pageY - pos.y;
    }

    // Subtract distance to middle
    return { x: pos.x, y: pos.y };
}

function onclickmenu(text, eventObj)
{
    var pos = getRelativeCoordinates(eventObj, document.body);
    //-- Start Editable Area --
    borderColor = "#000000";
    bgColor = "#FFFDE8";
    border = 1;
    padding = 3;
    xOffset = 3;
    yOffset = 3;
    Font = "face=\"Verdana, Arial, Helvetica, sans-serif\" size=2 color=\"#4F2300\"";
    //-- End Editable Area --
 
    if (thisbrowser == "")
    {
        return;
    }

    var table = "";
    var bigTable = ""; // Workaround for Netscape

    if (thisbrowser == "ie")
    {
	// If IE
	if (document.getElementById)
	{
	    layer = document.getElementById("sitemenu");
	}
	else if (document.all)
	{
	    layer = document.all["sitemenu"];
	}

        table += "<table bgcolor=\"" + bgColor + "\" border=\"" + border + "\" cellpadding=\"" + padding + "\" cellspacing=\"0\">";
        table += "<tr><td>";
        table += "<table cellspacing=\"0\" cellpadding=\"" + padding + "\">";
        table += "<tr><td bgcolor=\"" + bgColor + "\"><font " + Font + ">" + text + "</font></td></tr>";
        table += "</table></td></tr></table>";
        layer.innerHTML = table;
	width = parseInt(layer.offsetWidth);
	height = parseInt(layer.offsetHeight);
        //layer.style.left = eventObj.x + xOffset + document.body.scrollLeft - width;
        //layer.style.top = eventObj.y + yOffset + document.body.scrollTop - height;
	layer.style.left = pos.x + xOffset - width;
	layer.style.top = pos.y + yOffset - height;
        layer.zIndex = 100;
        layer.style.visibility = "visible";
	//alert("eventObj.pageX is: "+parseInt(eventObj.x)+" eventObj.pageY is: "+parseInt(eventObj.y));
    }
    else
    {
        if (thisbrowser == "opera")
        {
            layer = document.getElementById("sitemenu");
            table += "<table bgcolor= " + bgColor + " border= " + border + " cellpadding= " + padding + " cellspacing=0>";
            table += "<tr><td>";
            table += "<table cellspacing=0 cellpadding=" + padding + ">";
            table += "<tr><td bgcolor= " + bgColor + "><font " + Font + ">" + text + "</font></td></tr>";
            table += "</table></td></tr></table>";
	    layer.innerHTML = table;
	    width = parseInt(layer.offsetWidth);
	    height = parseInt(layer.offsetHeight);
	    layer.style.left = eventObj.pageX + xOffset - width + "px";
	    layer.style.top = eventObj.pageY + yOffset - height + "px";
            layer.zIndex = 100;
            layer.style.visibility = "visible";
        }
        else
        {
            if (thisbrowser == "NN4") // If NN4+
            {
                layer = document.layers["sitemenu"];
                table += "<table cellpadding=" + padding + " border=" + border + " cellspacing=0 bordercolor=" + borderColor + ">";
                bigTable += "<table width=" + (document.width - xOffset - eventObj.layerX - 30) + "cellpadding=" + padding + " border=" + border + " cellspacing=0 bordercolor=" + borderColor + ">";
                table += "<tr><td bgcolor=" + bgColor + "><font " + Font + ">" + text + "</font></td></tr></table>";
                bigTable += "<tr><td bgcolor=" + bgColor + "><font " + Font + ">" + text + "</font></td></tr></table>";
                layer.document.open();
                layer.document.write(table);
                layer.document.close();

                if ((layer.document.width+xOffset+eventObj.layerX) > document.width)
                { // If the layer runs off the right hand side
                    layer.document.open();
                    layer.document.write(bigTable);
                    layer.document.close();
                }

                layer.left = eventObj.layerX + xOffset;
                layer.top = eventObj.layerY + yOffset;
		layer.left -= layer.document.width;
		layer.top -= layer.document.height;
                layer.zIndex = 100;
                layer.visibility = "visible";
            }
            else
            {
                layer = document.getElementById("sitemenu");
                table += "<table id=\"indexmenu\" bgcolor= " + bgColor + " border= " + border + " cellpadding= " + padding + " cellspacing=0>";
                table += "<tr><td>";
                table += "<table cellspacing=0 cellpadding=" + padding + ">";
                table += "<tr><td bgcolor= " + bgColor + "><font " + Font + ">" + text + "</font></td></tr>";
                table += "</table></td></tr></table>";
                layer.innerHTML = table;
		width = parseInt(layer.offsetWidth);
		height = parseInt(layer.offsetHeight);
                layer.style.left = eventObj.pageX + xOffset - width + "px";
                layer.style.top = eventObj.pageY + yOffset - height + "px";
                //layer.style.left = eventObj.pageX + xOffset + "px";
                //layer.style.top = eventObj.pageY + yOffset + "px";
		//alert("left: "+layer.style.left+" width: "+width);
                layer.zIndex = 100;
                layer.style.visibility = "visible";
            }
        }
    }
}

function popupon(text, eventObj)
{
    //-- Start Editable Area --
    borderColor = "#000000";
    bgColor = "#FFFDE8";
    border = 1;
    padding = 3;
    xOffset = 3;
    yOffset = 3;
    Font = "face=\"Verdana, Arial, Helvetica, sans-serif\" size=2 color=\"#4F2300\"";
    //-- End Editable Area --
 
    if (thisbrowser == "")
    {
        return;
    }

    var table = "";
    var bigTable = ""; // Workaround for Netscape

    if (thisbrowser == "ie")
    {
	// If IE
	if (document.getElementById)
	{
	    c = document.getElementById("tabletextarea");
	}
	else if (document.all)
	{
	    c = document.all["tabletextarea"];
	}

	var pos = getRelativeCoordinates(eventObj, c);

	if (document.getElementById)
	{
	    layer = document.getElementById("popup");
	}
	else if (document.all)
	{
	    layer = document.all["popup"];
	}

        table += "<table bgcolor=\"" + bgColor + "\" border=\"" + border + "\" cellpadding=\"" + padding + "\" cellspacing=\"0\">";
        table += "<tr><td>";
        table += "<table cellspacing=\"0\" cellpadding=\"" + padding + "\">";
        table += "<tr><td bgcolor=\"" + bgColor + "\"><font " + Font + ">" + text + "</font></td></tr>";
        table += "</table></td></tr></table>";
        layer.innerHTML = table;
        //layer.style.left = eventObj.x + xOffset + document.body.scrollLeft;
        //layer.style.top = eventObj.y + yOffset + document.body.scrollTop;
	layer.style.left = pos.x + xOffset;
	layer.style.top = (pos.y / 2) + yOffset + 125;
        layer.zIndex = 100;
        layer.style.visibility = "visible";
    }
    else
    {
        if (thisbrowser == "opera")
        {
            layer = document.getElementById("popup");
            table += "<table bgcolor= " + bgColor + " border= " + border + " cellpadding= " + padding + " cellspacing=0>";
            table += "<tr><td>";
            table += "<table cellspacing=0 cellpadding=" + padding + ">";
            table += "<tr><td bgcolor= " + bgColor + "><font " + Font + ">" + text + "</font></td></tr>";
            table += "</table></td></tr></table>";
	    layer.innerHTML = table;
            layer.style.left = eventObj.clientX + xOffset + "px";
            layer.style.top = eventObj.clientY + yOffset + "px";
            layer.zIndex = 100;
            layer.style.visibility = "visible";
        }
        else
        {
            if (thisbrowser == "NN4") // If NN4+
            {
                layer = document.layers["popup"];
                table += "<table cellpadding=" + padding + " border=" + border + " cellspacing=0 bordercolor=" + borderColor + ">";
                bigTable += "<table width=" + (document.width - xOffset - eventObj.layerX - 30) + "cellpadding=" + padding + " border=" + border + " cellspacing=0 bordercolor=" + borderColor + ">";
                table += "<tr><td bgcolor=" + bgColor + "><font " + Font + ">" + text + "</font></td></tr></table>";
                bigTable += "<tr><td bgcolor=" + bgColor + "><font " + Font + ">" + text + "</font></td></tr></table>";
                layer.document.open();
                layer.document.write(table);
                layer.document.close();

                if ((layer.document.width+xOffset+eventObj.layerX) > document.width)
                { // If the layer runs off the right hand side
                    layer.document.open();
                    layer.document.write(bigTable);
                    layer.document.close();
                }

                layer.left = eventObj.layerX + xOffset;
                layer.top = eventObj.layerY + yOffset;
                layer.zIndex = 100;
                layer.visibility = "visible";
            }
            else
            {
                layer = document.getElementById("popup");
                table += "<table bgcolor= " + bgColor + " border= " + border + " cellpadding= " + padding + " cellspacing=0>";
                table += "<tr><td>";
                table += "<table cellspacing=0 cellpadding=" + padding + ">";
                table += "<tr><td bgcolor= " + bgColor + "><font " + Font + ">" + text + "</font></td></tr>";
                table += "</table></td></tr></table>";
                layer.innerHTML = table;
                layer.style.left = eventObj.pageX + xOffset + "px";
                layer.style.top = eventObj.pageY + yOffset + "px";
                layer.zIndex = 100;
                layer.style.visibility = "visible";
            }
        }
    }
}

function sitemenuoff()
{
    if (thisbrowser == "")
    {
        return;
    }

    if (thisbrowser == "ie")
    {
        layer = document.all["sitemenu"];
        layer.style.visibility = "hidden";
    }
    else
    {
        if (thisbrowser == "NN4")
        {
            layer = document.layers["sitemenu"];
            layer.visibility = "hidden";
        }
        else
        {
			layer = document.getElementById("sitemenu");
            layer.style.visibility = "hidden";
        }
    }
}

function popupoff()
{
    if (thisbrowser == "")
    {
        return;
    }

    if (thisbrowser == "ie")
    {
        layer = document.all["popup"];
        layer.style.visibility = "hidden";
    }
    else
    {
        if (thisbrowser == "NN4")
        {
            layer = document.layers["popup"];
            layer.visibility = "hidden";
        }
        else
        {
			layer = document.getElementById("popup");
            layer.style.visibility = "hidden";
        }
    }
}

whatbrowser();
