// JavaScript Document


//Nedenfor en række funktioner der går ud på at vise tooltips ved mouseover
//addLoadListener(initToolTips);  // tilføjer nedenstående initfunktion til det der udføres onload - funktionen er defineret i eventhandling.js
function initToolTips()
{
	var tips = getElementsByAttribute("class", "hastooltip"); // funktionen er defineret ovenfor - henter alle elementer med classen hastoottip 
	for (var i = 0; i < tips.length; i++)
	{
		attachEventListener(tips[i], "mouseover", showTip, false);	// tilføjer nedenstående funktion til eventhandleren mouse over på alle elementer med class hastooltip
		attachEventListener(tips[i], "mouseout", hideTip, false);  // do for mouse out
		attachEventListener(tips[i], "mousemove", moveTip, false);  // do for mouse move
	}
	return true;  // jeg ved egentlig ikke hvorfor den skal returnere true
}
// indtil nu har vi ikke gjort andet end at vi har defineret hvornår nedenstående to funktioner skal udføres

function showTip(event) 
{
	
	if (typeof event == "undefined")  // samme indledning som ved alle event handler funktioner
	{
		event = window.event;
	}
	//stopDefaultAction(event);  // af hensyn til Opera se JSA side 253 øverst, men det virker bedre i Opera uden
	var target = getEventTarget(event); // defineret i eventhandling.js - henter parentelement hvis textelement
	while (target.className == null || 
		   !/(^| )hastooltip( |$)/.test(target.className))
	// hvis der ikke er noget className defineret eller der heller ikke er et className som er hastooltip i begyndelsen eller efter en blank og før en blank eller slut
	{
		target = target.parentNode;  // så kravl et niveau op
	}		// se yderligere forklaring i eventhandling.js
	var content = target.getAttribute("title");  // men det er for at være sikker på at vi har fat i det element, hvorpå hastooltip er defineret. Det kan nemlig være at det element der overføres ved event fra browseren er et underliggende element
	var tip = document.createElement("div"); // en ny div til display af tippet
	target.toolproperty = tip;  // nu gemmes en kopi af det nye div-element som extended porperty på target
	target.setAttribute("title", "");  // og titlen nulstilles på elementet - det er for at undertrykke browserens egen tooltip - men det virker ikke i Opera se JSA side 253
	if (target.getAttribute("id") != "")   // hvis der er en id på elementet
	{
		tip.setAttribute("id", target.getAttribute("id") + "tooltip"); // der bliver sat en id på tip-div-en som består af id-en på elementet plus endelsen tooltip
	}
	tip.className = "tooltip";		// og så bliver der også sat en class på tip-div-en
	tip.appendChild(document.createTextNode(content));  // først her bliver indholdet sat på tip-div-en, men den er ikke skrevet endnu
	var scrollingPosition = getScrollingPosition(); // her bruges en funktion, der er defineret andet sted
	var cursorPosition = [0, 0];
	if (typeof event.pageX != "undefined" && typeof event.x != "undefined")  // hvis begge dele er defineret så
	{	// for alle andre browsere end IE - se JSA side 250 
		cursorPosition[0] = event.pageX;
		cursorPosition[1] = event.pageY;
	}
	else // IE har position relativ til winduet og ikke siden som de andre - derfor tillægges scrolling-position
	{
		cursorPosition[0] = event.clientX + scrollingPosition[0];
		cursorPosition[1] = event.clientY + scrollingPosition[1];
	}
	tip.style.position = "absolute";
	tip.style.left = cursorPosition[0] + 10 + "px";  // 10 pixels fra cursorpositionen 
	tip.style.top = cursorPosition[1] + 10 + "px";
	
	document.getElementsByTagName("body")[0].appendChild(tip); // først nu skrives tip-div-en - der er kun en body men det er nok fordi der som regel er flere tags af samme navn at den skal have at vide at det er det første af slagsen
	
	return true;
}
function hideTip(event)
{
	if (typeof event == "undefined")  // standard indledning
	{
		event = window.event;
	}
	var target = getEventTarget(event);  // samme som funktionen ovenfor
	while (target.className == null ||
		   !/(^| )hastooltip( |$)/.test(target.className))  // også det samme
	{
		target = target.parentNode;
	}
	if (target.toolproperty != null) // nu skal titlen sættes tilbage igen
	{
		target.setAttribute("title", target.toolproperty.childNodes[0].nodeValue);  // hele tip-div-en blev i forrige funktion gemt i target.toolproperty
		target.toolproperty.parentNode.removeChild(target.toolproperty); // fjerner sig selv
	}
	return false;
}
		   
	
function moveTip(event)
// denne har jeg så selv lavet
{
	if (typeof event == "undefined")  // standard indledning
	{
		event = window.event;
	}
	var target = getEventTarget(event);  // samme som funktionen ovenfor
	while (target.className == null ||
		   !/(^| )hastooltip( |$)/.test(target.className))  // også det samme
	{
		target = target.parentNode;
	}
	
	var scrollingPosition = getScrollingPosition(); // her bruges en funktion, der er defineret andet sted
	var cursorPosition = [0, 0];
	if (typeof event.pageX != "undefined" && typeof event.x != "undefined")  // hvis begge dele er defineret så
	{	// for alle andre browsere end IE - se JSA side 250 
		cursorPosition[0] = event.pageX;
		cursorPosition[1] = event.pageY;
	}
	else // IE har position relativ til winduet og ikke siden som de andre - derfor tillægges scrolling-position
	{
		cursorPosition[0] = event.clientX + scrollingPosition[0];
		cursorPosition[1] = event.clientY + scrollingPosition[1];
	}
	
	
	if (target.toolproperty != null) // har en aktiv tooltip kørende
	{
		target.toolproperty.style.left = cursorPosition[0] + 10 + "px";  // 10 pixels fra cursorpositionen 
		target.toolproperty.style.top = cursorPosition[1] + 10 + "px";
	}
// return true; ??
}
// Der kan tilføjes funktionalitet som skal sikre at den ikke går ud voer kanten. 
//Når jeg flytter ved move er det kun nødvendigt, hvis tippet er større end det felt, det beskriver
// Se i JSA for en sådan udvidelse på side 255
