//========================================================
// LIGAEXPERTE STANDARD JS, copyright Ligaexperte.de
// v2.5
//========================================================

//--------------------------------------------------------
// Initializer
//--------------------------------------------------------
/*
 * Global Initializer
 * v1.0
 *
 */

var leGlobalInitializer = (function()
{
	var instance = null;

	function privateConstructor()
	{
		var functions = [];

		this.addFunction = function(name)
		{
			functions.push(name);
		};

		this.getFunctions = function()
		{
			return functions;
		};
	};

	return new function()
	{
		this.getInstance = function()
		{
			if (instance==null)
			{
				instance = new privateConstructor();
				instance.constructor = null;
			}
			return instance;
		};
	};
})();

function leGlobalInit()
{
	var gInit = leGlobalInitializer.getInstance();
	var arrFcts = gInit.getFunctions();
	var tmpFunc = null;

	for(var i=0; i < arrFcts.length; i++)
	{
		tmpFunc = new Function(arrFcts[i] + "();");
		tmpFunc();
	}
}
//--------------------------------------------------------


//--------------------------------------------------------
// Simple Mouseover Script
//--------------------------------------------------------
// this script's globals
var simpleMOverOutFlag = 1;
var zoomMOverOutFlag = 1;
var compareWidth;
//mouse over => move and show div
function stdMOver(e, data, img, showHead, xOffset)
{
	// xOffset : unused!!	------------------^
	var overdiv;
	if (!e)
	  e = window.event;

	//compose stringdata
	if (simpleMOverOutFlag==1)
	{
		fadeIn("stdToolTip");
		innerStr = composeHTML(data, img, showHead);
		simpleMOverOutFlag = 0;
	}
	if (document.getElementById)
	{
		overdiv = document.getElementById("stdToolTip");
		overdiv.innerHTML = innerStr;
	}

	stdShowElement ("stdToolTip", e);
}

//show a dom element by id & set best position to mouse coords
function stdShowElement (elementId, e)
{
	var x, y;
	var xOffset = 10;
	var yOffset = 20;
	var boxWidth, boxHeight;

	if (document.getElementById)
	{
		var element = document.getElementById(elementId);

		if (self.innerHeight) // all except Explorer
		{
			x = self.innerWidth;
			y = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientHeight) // Explorer 6 Strict Mode
		{
			x = document.documentElement.clientWidth;
			y = document.documentElement.clientHeight;
		}
		var tfw=false, tfh=false;
		boxWidth = element.offsetWidth; // get width of incoming box
		if (e.clientX + boxWidth + xOffset < x)
		{
			element.style.left = document.documentElement.scrollLeft + e.clientX + xOffset + 'px';
			tfw = true;
		}
		else
		{
			element.style.left = document.documentElement.scrollLeft + e.clientX - boxWidth + 'px' ;
		}

		boxHeight = element.offsetHeight; // get height of incoming box
		if (e.clientY + boxHeight + yOffset < y)
		{
			element.style.top = document.documentElement.scrollTop + e.clientY + yOffset + 'px';
			tfh = true;
		}
		else
		{
			element.style.top = document.documentElement.scrollTop + e.clientY - boxHeight + 'px' ;
		}

		//showDebugInfo ("element.style.left: " + element.style.left + "px<br />element.style.top: " + element.style.top + "px<br />	e.clientX("+e.clientX+") + boxWidth("+boxWidth+") + xOffset("+xOffset+") < x("+x+") <strong>"+ tfw +"</strong><br />e.clientY("+e.clientY+") + boxHeight("+boxHeight+") + yOffset("+yOffset+") < y("+y+") <strong>"+ tfh +"</strong><br />");

		element.style.visibility = "visible";
	}
}

//hide a dom element by id
function stdHideElement (elementId)
{
	var element;
	if (document.getElementById)
	{
		element = document.getElementById(elementId);
		if (elementId=="stdToolTip" || elementId=="subMenuToolTip") fadeOut(elementId);
		else element.style.visibility = "hidden";
	}
}

//fade in a div // v0.1 beta
var fadeCurrentValue=0;
var fadeCurrentMode;
function fadeIn (elem_id)
{
	fadeCurrentMode = "in";
	fade(elem_id, "in");
}

function fadeOut (elem_id)
{
	fadeCurrentMode = "out";
	fade(elem_id, "out");
}

function fade (elem_id, mode)
{
	//--- settings ----------------
	var inTimeout = 25;
	var outTimeout = 14;
	var inEndValue = 10; // 0..10
	var outEndValue = 0; // 0..10
	var calculationFactor = 10; // 10 @ 0..10
	var step = 1;
	//-----------------------------

	var setTimeoutFlag = 1;
	var timeout, elem, value;

	value = fadeCurrentValue;

	elem = document.getElementById(elem_id);
	elem.style.opacity = value/calculationFactor;
	elem.style.filter = 'alpha(opacity=' + value*(100/calculationFactor) + ')';
	if (mode=="in")
	{
		if (value < inEndValue)
		{
			value = value + step;
			timeout = inTimeout;
		}
		else setTimeoutFlag = 0;
	}
	if (mode=="out")
	{
		if (value > outEndValue)
		{
			value = value - step;
			timeout = outTimeout;
		}
		else
		{
			setTimeoutFlag = 0;
			elem.style.visibility = "hidden";
		}
	}
	if (setTimeoutFlag && mode==fadeCurrentMode)
	{
		window.setTimeout("fade('" + elem_id + "', '" + mode + "')", timeout);
	}
	fadeCurrentValue = value;
}

//mouse over => show help
function helpMOver(e, data, strHead, opt_TTClass)
{
	if (!e)
	  e = window.event;
		if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) targ = targ.parentNode; // defeat Safari bug
	if (simpleMOverOutFlag==1) changeCursor(targ, 'help');
	if (!opt_TTClass) opt_TTClass = 'helpTT';
	var img = '/grafik/icons/help.png';
	data = '<div class="' + opt_TTClass + '">' + data + '</div>';
	var showHead = '<span class="nowrap">Hilfe: ' + strHead + '</span>';
	stdMOver(e, data, img, showHead);
}

function changeCursor(e, c)
{
	if (e!="") e.style.cursor = c;
	document.getElementsByTagName("body")[0].style.cursor = c;
}

function getDateTime()
{
	var date = new Date();
	var d = prependLeadingZero(date.getDate());
	var m = prependLeadingZero(date.getMonth() + 1);
	var y = prependLeadingZero(date.getFullYear());
	var h = prependLeadingZero(date.getHours());
	var mi = prependLeadingZero(date.getMinutes());
	var s = prependLeadingZero(date.getSeconds());
	return d + '.' + m +  '.' + y + ' ' + h + ':' + mi +  ':' + s;
}

function prependLeadingZero(s)
{
	return (s < 10) ? '0' + s : s;
}

function showDebugInfo(str)
{
	var debugInfo = "";

	var debugDiv = document.getElementById("debugInfo");
	debugDiv.style.display = "block";
	if (debugDiv.innerHTML=="") clearDebugInfo();

	debugDiv.innerHTML = debugInfo + debugDiv.innerHTML + getDateTime() + ' | ' + str + '<br />';
	debugDiv.style.top = document.documentElement.scrollTop + 10 + 'px';
}
function clearDebugInfo()
{
	document.getElementById("debugInfo").innerHTML = '<span class="strong">DebugInfo:</span> <img class="vatb cursorPointer" src="/grafik/icons/delete.png" alt="leeren" onclick="clearDebugInfo()" /><br /><br />';
}

//mouse over => show help
function allstarsMOver(e, data, strHead, opt_TTClass)
{
	if (!e)
	  e = window.event;
	if (!opt_TTClass) opt_TTClass = 'helpTT';
	var img = '';
	data = '<div class="' + opt_TTClass + '">' + data + '</div>';
	var showHead = '<span class="nowrap">' + strHead + '</span>';
	stdMOver(e, data, img, showHead);
}

// compose innerHTML
function composeHTML (data, img, showHead)
{
	var str = '';
	var divStyle = 'padding: 2px; overflow: hidden;';
	var divDataClass;
	var imgStyle;
	var imgFloat;
	if (showHead!=0 && showHead) str = '<h3>' + showHead + '</h3>';
	if (data=='')
	{
		imgFloat = '';
		imgStyle = 'padding: 0; margin: 0; float: left; overflow:hidden;';
		divStyle = 'padding: 0;';
	}
	else
	{
		if (data!='' && img!='') divDataClass = ' class="flleft"';
		else divDataClass = '';
		imgFloat = ' class="flleft"';
		imgStyle = 'padding:0px 4px 0px 0px;';
	}
	// catch <table> content. no padding for data beginning with <table>
	if (data.substr(0, 6)!="<table") divStyle = ' style="' + divStyle + '"';
	else divStyle = "";
	str = str + '<div' + divStyle + '>';
	if (img!="" && img!=0) str = str + '<div' + imgFloat + '><img style="' + imgStyle + '" class="vatb" src="' + img + '" /></div>';
	if (data!='') str = str + '<div' + divDataClass + '>' + data + '</div>';
	str = str + '</div>';
	return str;
}

//mouse out => hide div, set flag
function stdMOut()
{
	stdHideElement ("stdToolTip");
	changeCursor("", 'auto');
	simpleMOverOutFlag = 1;
}
//--------------------------------------------------------

//--------------------------------------------------------
// Simple Form Tools
//--------------------------------------------------------
// this script's globals

// confirm and submit
function confirmSubmit(message)
{
	var confirmation = confirm(message);
	return confirmation;
}
function confirmTippspielWithdrawal(f)	// UNDER CONSTRUCTION
{
	/*if (!f) var f = "edit_tippspiele_form";
	f = document.getElementById(f);

	// check form

	if ()
	{

	}
	else return;*/
}
// submit (submits only, if one formvalue has changed)
function stdSubmit(form)
{
	for (var i=0; i < form.length; i++)
	{
		if (form[i].value)
		{
			window.location.href = composeFormAction(form);
			i = form.length;
		}
	}
}
// compose form action href
function composeFormAction(f)
{
	var strOut = '';
	for (var i=0; i < f.length; i++)
	{
		strOut += '/' + f[i].name + '/' + f[i].value + '/';
	}
	strOut = 'http://' + window.location.host + strOut;
	return strOut;
}
// (un)check all checkboxes of a form
function setCheckboxChecked(formId, mode)
{
	var i, tf;
	var form = document.getElementById(formId);
	if (mode=="check") tf = true;
	else tf = false;
	for (i=0; i<form.length; i++)
	{
		if (form.elements[i].type=="checkbox")
		{
			if ((mode=="uncheck" && form.elements[i].checked==true) || (mode=="check" && form.elements[i].checked==false) || mode=="invert")
			{
				// shake?
				shake(form.elements[i].id);
				// fire onchange
				form.elements[i].onclick();
			}
			// (un)check
			if (mode=="invert") form.elements[i].checked = !form.elements[i].checked;
			else form.elements[i].checked = tf;

		}
	}
}

// validate form value
function validateFormValue (testvalue, testmode)
{
	var valid = false;
	switch (testmode) {
  case 1: //1: numeric?
		if (!isNaN(Number(testvalue)) && testvalue!="")
		{
			valid = true;
		}
		break;
	}
	return valid;
}

function markFormErrors(formId, errorsFieldNames)
{
	var form, currentClass, markClassName, i, errType;
	var cSpacer="";
	var arrErr = new Array;
	errType = typeof(errorsFieldNames);
	if ((errType.toLowerCase())=="string") arrErr = errorsFieldNames.split(";");
	else arrErr = errorsFieldNames;

	markClassName = "highlight highlightBor";
	form = document.getElementById(formId);

	for (i=0; i < arrErr.length; i++)
	{
		currentClass = form[arrErr[i]].className;
		if (currentClass!="") cSpacer = " ";
		form[arrErr[i]].className = currentClass + cSpacer + markClassName;
	}
}

function removeMarkFromForm(formId, markClassNameRegExp)
{
	var currentClass, i=0, form;
	if(!markClassNameRegExp) markClassNameRegExp = /highlight highlightBor/g;

	form = document.getElementById(formId);

	while (form.elements[i])
	{
		currentClass = form.elements[i].className;
		currentClass = currentClass.replace(markClassNameRegExp, "");
		// remove whitespace at string end
		currentClass = currentClass.replace(/[.+\s]+$/, "");
		form.elements[i].className = currentClass;
		i++;
	}
}

function setFormValues (formId, arrFields, arrValues)
{
	var i=0, form;
	form = document.getElementById(formId);
	for (i=0; i < arrFields.length; i++)
	{
		form[arrFields[i]].value = arrValues[i];// ginge auch so: // document.forms[formId].elements[arrFields[i]].value = arrValues[i];
	}
}

//--------------------------------------------------------

//--------------------------------------------------------
// Simple Focus Tab
//--------------------------------------------------------
// this script's globals
var leDisplayNoneClassName = 'clleft nzs';
var leTabActiveClassName = 'tabActive';
var leTabInactiveClassName = 'tabInactive';
var leTabDataPostfix = 'Data';
var leTabTabPostfix = 'Tab';
// focus
function stdFocusTab(idNum, idPrefix, className)
{
	if (document.getElementById)
	{
		stdDefocusTabs(idPrefix);
		var elemData = document.getElementById(idPrefix + leTabDataPostfix + idNum);
		elemData.className = className;
		var elemTab = document.getElementById(idPrefix + leTabTabPostfix + idNum);
		elemTab.className = leTabActiveClassName;
		elemTab.firstChild.className = leTabActiveClassName + 'Link strong';
		//elemTab.firstChild.className = 'strong';
	}
}
// defocus
function stdDefocusTabs(idPrefix)
{
	if (document.getElementById)
	{
		var elemData;
		var container = document.getElementById('tabcontainer');
		for (var i=0; i < container.childNodes.length; i++)
		{
			if (document.getElementById(idPrefix + leTabDataPostfix + i))
			{
				elemData = document.getElementById(idPrefix + leTabDataPostfix + i);
				elemData.className = leDisplayNoneClassName;
				var elemTab = document.getElementById(idPrefix + leTabTabPostfix + i);
				elemTab.className = leTabInactiveClassName;
				//elemTab.firstChild.className = leTabInactiveClassName + 'Link';
				elemTab.firstChild.className = '';
			}
		}
	}
}
//--------------------------------------------------------

//--------------------------------------------------------
// Simple Toggle View
//--------------------------------------------------------
// this script's globals
var toggleViewCurrent = 1;

// by ID-Set
function toggleViewByIdSet(e, idBase, imgs)
{
	// preload img
	var image_off, image_on, noImg=0;
	var arrImgs = new Array();
	if (imgs==0)
	{
		image_on = preloadImg ("/grafik/icons/toggleView_add.png");
		image_off = preloadImg ("/grafik/icons/toggleView_remove.png");
	}
	else if (imgs=="none" || imgs=="no")
	{
		noImg = 1;
	}
	else
	{
		arrImgs = imgs.split(";");
		image_on = preloadImg ("/grafik/icons/" + arrImgs[0] + "");
		image_off = preloadImg ("/grafik/icons/" + arrImgs[1] + "");
	}
	// get target
	var i=0;
	var targ;
	var eType = typeof(e);
	if (eType.toLowerCase()=="object")
	{
		if (!e) var e = window.event;
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) targ = targ.parentNode; // defeat Safari bug
	}
	else
	{
		targ = document.getElementById(e);
	}
	if (noImg!=1)
	{
		// check and look for image in DOM
		var nodeName = targ.nodeName.toLowerCase();
		if (nodeName!="img")
		{
			targ = targ.previousSibling;
			if (targ.nodeType == 3) targ = targ.previousSibling;
		}
		// set required image
		if (toggleViewCurrent) targ.src = image_off.src;
		else targ.src = image_on.src;
	}
	toggleViewCurrent = 1 - toggleViewCurrent;
	// display or hide toggle set
	var toggleItem;
	// toggle
	// just one element
	if (document.getElementById(idBase))
	{
		toggleItem = document.getElementById(idBase);
		if (toggleViewCurrent) toggleItem.style.display = "none";
		else
		{
			if (toggleItem.className.toLowerCase().match(/block/)) toggleItem.style.display = "block";
			else toggleItem.style.display = "inline";
		}
	}

	// several elements
	while(document.getElementById((idBase + "" + i)))
	{
			toggleItem = document.getElementById((idBase + i));
			if (toggleViewCurrent) toggleItem.style.display = "none";
			else
			{
				if (toggleItem.className.toLowerCase().match(/block/)) toggleItem.style.display = "block";
				else toggleItem.style.display = "inline";
			}
			i++;
	}
}

// by tagname and classname
//  - tags: semicolon separated list of tags to search for ("div;span;img")
//  - class: affect tags with this classname
function toggleViewByTagAndClass(e, strTags, classname)
{
	// preload img
	var image_off = preloadImg ("/grafik/icons/toggleView_remove.png");
	var image_on = preloadImg ("/grafik/icons/toggleView_add.png");
	// get target
	var targ;
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3) targ = targ.parentNode; // defeat Safari bug
	// check and look for image in DOM
	var nodeName = targ.nodeName.toLowerCase();
	if (nodeName!="img")
	{
		targ = targ.previousSibling;
		if (targ.nodeType == 3) targ = targ.previousSibling;
	}
	// set required image
	if (toggleViewCurrent) targ.src = image_off.src;
	else targ.src = image_on.src;
	toggleViewCurrent = 1 - toggleViewCurrent;
	// display or hide toggle set
	var i, j, elements;
	var tags = strTags.split(";");
	for (i=0; i < tags.length; i++)
	{
		elements = document.getElementsByTagName(tags[i]);
		for (j=0; j < elements.length; j++)
		{
			if (elements[j].className.match(classname))
			{
				if (toggleViewCurrent) elements[j].style.display = "none";
				//else elements[j].style.display = "inline";
				else
				{
					if (elements[j].className.toLowerCase().match(/block/)) elements[j].style.display = "block";
					else elements[j].style.display = "inline";
				}
			}
		}
	}
}
//--------------------------------------------------------

//--------------------------------------------------------
// Simple Preload Images
//--------------------------------------------------------
// this script's globals
function preloadImg (p)
{
	var img= new Image();
	img.src = p;
	return img;
}
//--------------------------------------------------------

//--------------------------------------------------------
// Simple Trend Fader
//--------------------------------------------------------
// this script's globals
var showTrendCurrentMode;
function showTrend (e, userliga_id, tippspiel_id, mode, userliga_gmode)
{
	var user_id, regex;
	var row, colspan = 0, dataTr, dataTd, dataImg, dataAttr;
	var icon_path_add = '/grafik/icons/platzierungsverlauf_add.png';
	var icon_path_del = '/grafik/icons/platzierungsverlauf_delete.png';


	if (!e)
	  e = window.event;
	if (!userliga_id) userliga_id = 0;

	if (e.target) targ = e.target; // W3C
	else if (e.srcElement) targ = e.srcElement;	// MS IE
	if (targ.nodeType==3) targ = targ.parentNode;	// defeat Safari bug / textNode
	user_id = targ.id.replace(/trend/, "");

	if (document.getElementById("active" + user_id))
	{
		regex = new RegExp(icon_path_del);
		if (targ.src.search(regex) > -1) targ.src = icon_path_add;
		showTrendCurrentMode = "out";
		stepHeight(user_id, 30, "out");
	}
	else
	{
		regex = new RegExp(icon_path_add);
		if (targ.src.search(regex) > -1) targ.src = icon_path_del;
		row = targ.parentNode;
		while(row.nodeName.toLowerCase()!='tr') row = row.parentNode;
		for (var i=0; i < row.childNodes.length; i++)
		{
			if (row.childNodes[i].nodeType!=3) colspan++;
		}

		dataTd = document.createElement("td");
		dataAttr = document.createAttribute("colspan");
		dataAttr.nodeValue = colspan;
		dataTd.setAttributeNode(dataAttr);
		dataAttr = document.createAttribute("class");
		dataAttr.nodeValue = "contData";
		dataTd.setAttributeNode(dataAttr);
		dataImg = document.createElement("img");
		dataAttr = document.createAttribute("src");
		dataAttr.nodeValue = "/include/rankingTrend.inc.php?m=" + mode + "&u=" + user_id + "&tg=" + tippspiel_id + "&ul=" + userliga_id + "&ulgm=" + userliga_gmode + "&gug=1&gul=1&gum=1&guma=1&guib=1&gpt=10&gpr=10&gpb=10&gpl=10&gw=630&gh=200&gth=2&gnhl=9";
		dataImg.setAttributeNode(dataAttr);
		dataAttr = document.createAttribute("style"); //IE BUG: wohl wegen style untereigenschaften.
		dataAttr.nodeValue = "height: 0px;";
		if (document.all) dataImg.style.height = "0px";  	// set style for IE
		else dataImg.setAttributeNode(dataAttr);					// set style for standard lovers
		dataAttr = document.createAttribute("id");
		dataAttr.nodeValue = "trendImg" + user_id;
		dataImg.setAttributeNode(dataAttr);

		dataTd.appendChild(dataImg);
		dataTr = document.createElement("tr");
		dataAttr = document.createAttribute("id");
		dataAttr.nodeValue = "active" + user_id;
		dataTr.setAttributeNode(dataAttr);
		dataTr.appendChild(dataTd);

		var beforeElem = row.nextSibling;

		while (beforeElem!=null && beforeElem.nodeType==3) beforeElem = beforeElem.nextSibling;
		if (beforeElem!=null) row.parentNode.insertBefore(dataTr, beforeElem);
		else row.parentNode.appendChild(dataTr);
		showTrendCurrentMode = "in";
		stepHeight(user_id, 15, "in");
	}
//	var debugStr2 = "<br/>NACHHER<br/> e: " + e + "<br /> user_id: " + user_id + "<br />mode: " +  showTrendCurrentMode + "<br />if?:" + document.getElementById("active" + user_id);
	//showDebugInfo (debugStr + debugStr2);
}
// fade in/out
function stepHeight(id, step, mode)
{
	if(document.getElementById("trendImg" + id))
	{
		var elem = document.getElementById("trendImg" + id);
		if (mode=="in")
		{
			if ((parseInt(elem.style.height) + step) > 200)	elem.style.height = "200px";
			else elem.style.height = (parseInt(elem.style.height) + step) + "px";
		}
		if (mode=="out")
		{
			if ((parseInt(elem.style.height) - step) < 0)
			{
				elem.style.height = "0px";
				document.getElementById("active" + id).parentNode.removeChild(document.getElementById("active" + id));
				return;
			}
			else elem.style.height = (parseInt(elem.style.height) - step) + "px";
		}
		if (parseInt(elem.style.height) >= 0 && parseInt(elem.style.height) < 200 && mode==showTrendCurrentMode)
		{
			window.setTimeout("stepHeight(" + id + ", " + step + ", '" + mode + "')", 20);
		}
	}
}
//--------------------------------------------------------

//--------------------------------------------------------
// Simple Element Shaker
//--------------------------------------------------------
// this script's globals
var shakeCount=0;
function shake (e)
{
	var elem = document.getElementById(e);
	var left;
	var shakeStep = 3;
	var maxSteps = 5;
	elem.style.position = "relative";
	left = elem.style.left;
	if (parseInt(left)=="NaN" || left=="") left=0;
	if (parseInt(left)>=0) left = parseInt(left) - shakeStep;
	else left = parseInt(left) + shakeStep;
	left = left + "px";
	elem.style.left = left;
	if (shakeCount < maxSteps)
	{
		shakeCount++;
		window.setTimeout("shake('"+e+"')", 20);
	}
	else
	{
		elem.style.left = 0;
		shakeCount = 0;
	}
}
//--------------------------------------------------------


//--------------------------------------------------------
// showSubMenu
//--------------------------------------------------------
// this script's globals
function showSubMenu (e, str, head)
{
	var innerStr;
	head = "<div class=\"ov\" style=\"width:100%;\"><div class=\"flleft\">" + head + "</div><div class=\"ar\"><img src=\"/grafik/icons/close.png\" class=\"vatb cursorPointer\" onclick=\"stdHideElement('subMenuToolTip')\" onmousemove=\"stdMOver(event, 'Fenster schlie&szlig;en', '', 0)\" onmouseout=\"stdMOut()\" /></div></div>";
	innerStr = composeHTML(str, '', head);
	//innerStr = str;
	//innerStr = "<div onmouseout=\"stdHideElement('subMenuToolTip')\" style=\"z-index: 2000;\">" + innerStr + "</div>";

	//showDebugInfo (innerStr);
	document.getElementById('subMenuToolTip').innerHTML = innerStr;
	fadeIn("subMenuToolTip");
	stdShowElement ('subMenuToolTip', e);

}

//--------------------------------------------------------


//--------------------------------------------------------
// highlight teams by match: highlight teams in table by focussed match in tipps.php
//--------------------------------------------------------
function highlightTeamsForTips (ids)
{
	highlightTeams (ids, "set");
}

function resetHighlightTeams (ids)
{
	highlightTeams (ids, "unset");
}

function highlightTeams (ids, mode)
{
	var i, elem, attr;
	var highlightColor = "#f1e7df";
	var arrTeamsIds = new Array();
	arrTeamsIds = ids.split(",");
	//setTablePosition();
	for (i=0; i < arrTeamsIds.length; i++)
	{
		if (document.getElementById("team" + arrTeamsIds[i]))
		{
			elem = document.getElementById("team" + arrTeamsIds[i]);
			if (mode=="set")
			{
				// highlight element
				elem.style.backgroundColor = highlightColor;
				elem.style.fontWeight = "bold";
				// insert history
				getTeamTrendForTable (arrTeamsIds[i]);
				//getTeamTrendForDiv (arrTeamsIds[i], "", "", "test"+i);
			}
			else
			{
				elem.removeAttribute("style");
				// remove history
				removeTeamTrendForTable (elem, arrTeamsIds[i]);
				//removeTeamTrendForDiv (elem, arrTeamsIds[i], "test"+i);
			}
		}
	}
}

//--------------------------------------------------------

//--------------------------------------------------------
// getTeamTrendForTable: inserts 5 last games into the table
//--------------------------------------------------------
//globals
var teamTrendForTableCache = new Object();
function getTeamTrendForTable (teamId, optNumGames, optTippspielId, optTargetId)
{
	var dataTd, dataTr, dataAttr, elem;
	// tippspiel_id
	if (!optTippspielId || optTippspielId=="") optTippspielId = document.forms["tipForm"].elements["tippspiel_id"].value;
	else optTippspielId = optTippspielId;
	// numGames
	if (!optNumGames || optNumGames=="") optNumGames = 5;
	// targetId
	if (!optTargetId) optTargetId = "team" + teamId + "_info";

	// insert tr,td into table
	if (!document.getElementById(optTargetId))
	{
		dataTr = document.createElement("tr");
		dataTd = document.createElement("td");
		dataAttr = document.createAttribute("colspan");
		dataAttr.nodeValue = 3;
		dataTd.setAttributeNode(dataAttr);
		dataAttr = document.createAttribute("id");
		dataAttr.nodeValue = optTargetId;
		dataTd.setAttributeNode(dataAttr);
		dataAttr = document.createAttribute("class");
		dataAttr.nodeValue = "nopad";
		dataTd.setAttributeNode(dataAttr);
		dataTr.appendChild(dataTd);

		elem = document.getElementById("team" + teamId);
		elem.parentNode.insertBefore(dataTr, elem.nextSibling);

		// call server?
		if (teamTrendForTableCache[teamId]!=null)
		{
			document.getElementById(optTargetId).innerHTML = teamTrendForTableCache[teamId];
		}
		else
		{
			new Ajax.Updater(optTargetId, '/xhrInterface.php', {
						parameters: {r: 'getTeamHistory', teamId: teamId, numGames: optNumGames, tippspiel_id: optTippspielId, targetId: optTargetId, drawHeader: false},
						onSuccess: function(response) {
							teamTrendForTableCache[teamId] = response.responseText;
						}
					});
		}
	}


	// reposition box - TODO seitenfooter wird erreicht; offset für alle browser kompatibel berechenen!!
	/*tabelle = document.getElementById("tabelleRechts").parentNode.parentNode;
	form = document.getElementById("tipForm");
	var pos = getPosition(form);

	tabelle.style.position = "absolute";
	tabelle.style.top = (pos[1] - 100) + "px";
	*/
	//showDebugInfo("tabelle.style.top: " + tabelle.style.top + "<br/>tipForm.offset: " + form.offsetTop + "<br/>" + getPosition(tabelle) + "<br/>" + getPosition(form));
}

function removeTeamTrendForTable(elem, teamId, optTargetId)
{
	// targetId
	if (!optTargetId) optTargetId = "team" + teamId + "_info";
	//elem.parentNode.removeChild(elem.nextSibling);	// remove history
	var td = document.getElementById(optTargetId);
	if (td) elem.parentNode.removeChild(td.parentNode);
}


/*DEPRECATED
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
function getTeamTrendForDiv (teamId, optNumGames, optTippspielId, optTargetId)
{
	var dataElem, dataAttr, elem;
	// tippspiel_id
	if (!optTippspielId || optTippspielId=="") optTippspielId = document.forms["tipForm"].elements["tippspiel_id"].value;
	else optTippspielId = optTippspielId;
	// numGames
	if (!optNumGames || optNumGames=="") optNumGames = 5;
	// targetId
	if (!optTargetId) optTargetId = "team" + teamId + "_info";

	// insert div into div
	if (!document.getElementById(optTargetId))
	{
		dataElem = document.createElement("div");
		dataAttr = document.createAttribute("id");
		dataAttr.nodeValue = optTargetId;
		dataElem.setAttributeNode(dataAttr);

		elem = document.getElementById(optTargetId);
		elem.appendChild(dataElem);
	}
		// call server?
		if (teamTrendForTableCache[teamId]) document.getElementById(optTargetId).innerHTML = teamTrendForTableCache[teamId];
		else
		{
			document.getElementById(optTargetId).innerHTML = '<img class="vatb" src="/grafik/waiting.gif" alt="waiting" />';
			xajax_getTeamHistory(teamId, optNumGames, optTippspielId, optTargetId, true);
		}
}

function removeTeamTrendForDiv(elem, teamId, optTargetId)
{
	// targetId
	if (!optTargetId) optTargetId = "team" + teamId + "_info";
	//elem.parentNode.removeChild(elem.nextSibling);	// remove history
	var td = document.getElementById(optTargetId);
	if (td) td.removeChild(td.firstChild);
}
*/

function setTablePosition()
{
		// reposition box - TODO seitenfooter wird erreicht; offset für alle browser kompatibel berechenen!!
	var tabelle, tableHeight, tableHeight, form, tipForm_feedback, f_p, tf_f_p;
	tabelle = document.getElementById("tabelleRechts").parentNode;
	tableHeight = tabelle.offsetHeight;
	form = document.getElementById("tipForm");
	f_p = getPosition(form);

	if (document.getElementById("tipForm_feedback")) tipForm_feedback = document.getElementById("tipForm_feedback");
	tf_f_p = getPosition(tipForm_feedback);



	tabelle.style.position = "absolute";
	tabelle.style.top = (f_p[1]  - 100) + "px";

	//showDebugInfo("tabelle.style.top: " + tabelle.style.top + "<br/>tipForm.offset: " + form.offsetTop + "<br/>" + getPosition(tabelle) + "<br/>" + getPosition(form));
	showDebugInfo("tableHeight: " + tableHeight);
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/*DEPRECATED
function cacheTeamTrendForTable(teamId, optTargetId)
{
	showDebugInfo("teamId: "+teamId+", optTargetId: "+optTargetId);
	var elem;
	// targetId
	if (!optTargetId) optTargetId = "team" + teamId + "_info";
	elem = document.getElementById(optTargetId);
	if (elem) teamTrendForTableCache[teamId] = elem.innerHTML;
}*/

function getPosition(el)
{
	var l = t = 0;
	if (el.offsetParent)
	{
		do
		{
			l += el.offsetLeft;
			t += el.offsetTop;
		} while (el = el.offsetParent);
	}
	return [l,t];
}

//--------------------------------------------------------


//--------------------------------------------------------
//highlight teams by match: highlight teams in table by focussed match in tipps.php
//--------------------------------------------------------
function redirectTo (uri)
{
	window.location.href = uri;
}
//--------------------------------------------------------

//--------------------------------------------------------
//update notifications
//--------------------------------------------------------
var unbTimeout = 15;
var unbDecay   = 2;
function unbUpdateNotificationBox()
{

	new Ajax.PeriodicalUpdater('notifications', '/xhrInterface.php', 	{
				method: 'get',
				parameters: 'r=notificationBox',
				frequency: unbTimeout,
				decay: unbDecay,
				onSuccess: function() {
					$('notificationMeta').update('<span class="secondary" style="font-size: 10px;">Stand: ' + getDateTime() + '</span>');
				}
			});
}
//--------------------------------------------------------

//--------------------------------------------------------
// Move element to position of mouse pointer
//--------------------------------------------------------
function moveToPointer(event, element, xOffset, yOffset)
{
	if (!xOffset) xOffset = 0;
	if (!yOffset) yOffset = 0;
	$(element).setStyle({left: (Event.pointerX(event) + xOffset) + 'px', top: (Event.pointerY(event) + yOffset) + 'px'});
}
//--------------------------------------------------------

//--------------------------------------------------------
// Global XHR responder
//--------------------------------------------------------
function registerGlobalXhrResponder()
{
	Ajax.Responders.register({
		onCreate : displayXhrIndicator,
		onComplete : hideXhrIndicator
	});
}

var xhrIndicationHandler = {
		mtp: function(event) {
			var xOffset = 10;
			var yOffset = 20;
			moveToPointer(event, 'xhrIndicator', xOffset, yOffset);
		}
};

function displayXhrIndicator()
{
	var xOffset = 10;
	var yOffset = 20;
	//Event.observe(document, 'mousemove', function(event) {moveToPointer(event, 'xhrIndicator', xOffset, yOffset);});
	xhrIndicationHandler.bmtp = xhrIndicationHandler.mtp.bindAsEventListener(xhrIndicationHandler);
	Event.observe(document, 'mousemove', xhrIndicationHandler.bmtp);
	Element.show('xhrIndicator');
	//showDebugInfo(xhrIndicationHandler.bmtp);
}

function hideXhrIndicator()
{
	Element.hide('xhrIndicator');
	//Event.stopObserving(document, 'mousemove');
	Event.stopObserving(document, 'mousemove', xhrIndicationHandler.bmtp);
	//showDebugInfo("XHR completed ");
}

//========================================================
