/****************************************************************************************
	File:  			functions.js
	Author: 		Wolfgang Teufl
	Date: 			01.08.2006
	Description:	Funktionssammlung für CDLAB
*****************************************************************************************/	

// ================================================ AJAX-Funktionen ===============================================
var gElementToReceiveAjaxData=null;
var gAjaxDataCache=Array();
var gAktCacheKey="";

function clearAJAXCache(pCacheKey)
{
	if (!pCacheKey) gAjaxDataCache=Array();
	else gAjaxDataCache[pCacheKey]="";
}

function loadDataInToolTip(pDataFormat,pUrl,pRequestMethod)
{
	if (!pRequestMethod) pRequestMethod="GET";
	loadDataInElement(pDataFormat,pUrl,"divTooltip",pRequestMethod,AJAXToolTip)
}

function loadDataInBox(pDataFormat,pUrl,pElement,pRequestMethod,pCallback,pCacheContent)
{
	// Wenn es das Element nicht gibt dann kannste den Rest knicken
	if (document.getElementById("box_"+pElement))
	{
		// Zu füllendes Element mit Status "lade..." versehen
		document.getElementById("box_"+pElement).style.display="block";
		document.getElementById("content_"+pElement).innerHTML="wird geladen ...";
		loadDataInElement(pDataFormat,pUrl,"content_"+pElement,pRequestMethod,pCallback,pCacheContent)
	}
}

function loadDataInElement(pDataFormat,pUrl,pElement,pRequestMethod,pCallback,pCacheContent)
{
	gAktCacheKey="";
	if (!pCacheContent) pCacheContent=false;
	else gAktCacheKey=escape(pUrl);
	
	// Daten aus Cache laden wenn Index vorhanden und nicht leer
	if (pCacheContent && gAjaxDataCache[gAktCacheKey])
	{
		if (gAjaxDataCache[gAktCacheKey]!="") 
		{
			document.getElementById(pElement).innerHTML=gAjaxDataCache[gAktCacheKey];
			return true;
		}
	}
	
	// Wenn es das Element nicht gibt dann kannste den Rest knicken
	if (document.getElementById(pElement))
	{
		// Parameter standardmäßig belegen
		if (!pRequestMethod) pRequestMethod="GET";
		if (!pCallback) pCallback=UpdateDataInElement;
		// Zu füllendes Element mit Status "lade..." versehen
		document.getElementById(pElement).innerHTML='wird geladen ...';
		// Random an Url dranhängen
		lUrl = pUrl +"&rnd="+Math.round((Math.random()*100000));
		// Datentyp dranhängen
		lUrl+="&format="+pDataFormat;
		// Element merken
		gElementToReceiveAjaxData=pElement;
		// Request absetzen
		sendXMLHttpRequest(pRequestMethod,lUrl,pCallback);
	}
}

function silentCall(pDataFormat,pUrl,pRequestMethod,pCallback)
{
	// Parameter standardmäßig belegen
	if (!pRequestMethod) pRequestMethod="GET";
	if (!pCallback) pCallback=UpdateDataInElement;
	// Random an Url dranhängen
	lUrl = pUrl +"&rnd="+Math.round((Math.random()*100000));
	// Datentyp dranhängen
	lUrl+="&format="+pDataFormat;
	// Request absetzen
	sendXMLHttpRequest(pRequestMethod,lUrl,pCallback);
}

function AJAXToolTip()
{
	var XMLResult = null;
		
	if (oXMLHttpRequest.readyState == 4)
	{
		if (oXMLHttpRequest.status == 200) 
		{
			showTooltip("divTooltip",oXMLHttpRequest.responseText,100);				
		}
	}
}

function UpdateDataInElement()
{
	var XMLResult = null;
		
	if (oXMLHttpRequest.readyState == 4)
	{
		if (oXMLHttpRequest.status == 200) 
		{
			if (document.getElementById(gElementToReceiveAjaxData))
			{
				// Anker anspringen
				//if (gElementToReceiveAjaxData.indexOf("box")>-1) window.location.hash=gElementToReceiveAjaxData.replace(/box/, "anchor");
				// In Cache speichern wenn gewünscht
				if (gAktCacheKey!="") gAjaxDataCache[gAktCacheKey]=oXMLHttpRequest.responseText;
				// Element aktualisieren
				document.getElementById(gElementToReceiveAjaxData).innerHTML=oXMLHttpRequest.responseText;
				document.getElementById(gElementToReceiveAjaxData).scrollIntoView("true");
			}	
		}
	}
}


// ================================================ Allgemeine Funktionen ===============================================

// Trim - Leerzeichen am Anfang und am Ende des Strings pString wegschneiden
function trim(pString) 
{
	if (!pString) pString=" ";
	return pString.replace(/^\s*|\s*$/g,"");
}

function cleanText(pText)
{
	pText=trim(pText);
	pText=replace(/\n/," ");
	return pText;
}

function ts()
{
	var oDate = new Date();
	return oDate.getTime();
}

function preisFormat(preis, kommastellen)
{
	// Preis formatieren
	// 1000er Punkte und ',' als Komma
	var preis2=0;
	// runden
	preis2=Math.round(Math.pow(10,kommastellen)*preis) / Math.pow(10,kommastellen);
	// formatieren
	gesamtpreis = '' + preis2;
	splitPreis = gesamtpreis.split(".");
	// Wert vor dem Komma
	vorkomma = '';
	for (m=0;m<splitPreis[0].length;m++) {
		if(((m % 3) == 0) && (m != 0))  vorkomma = '.' + vorkomma;
		vorkomma = splitPreis[0].charAt(splitPreis[0].length-m-1) + vorkomma;
	}
	// Wert nach dem Komma
	nachkomma = '';
	if (splitPreis.length!=1) {
		nachkomma = splitPreis[1];
		nachkomma=nachkomma.substr(0,kommastellen)
	}
	// jetzt noch auffuellen auf ausreichen kommastellen
	var nk=nachkomma.length;
	if (nk<kommastellen) {
		for(m=nk;m<kommastellen;m++) 
			nachkomma = nachkomma + '0';
	}
	return vorkomma + "," + nachkomma;
}		

// ======================== Funktionen zum Positionieren von Layern abhängig von der Mausposition =======================

	oTooltip=null;		// Variable für den aktuellen Layer
	gHtml="";

	// Tooltip ausgeben
	function toolTip(pText)
	{
		showTooltip("divTooltip",pText,100);
	}
	
	
	// ToolTip abhängig zur Maus positionieren
	function event_TooltipMove(e) 
	{
		if (oTooltip == null) return false;
		try { 
			x = (document.all) ? window.event.x + getDocumentBody().scrollLeft : e.pageX;
			y = (document.all) ? window.event.y + getDocumentBody().scrollTop : e.pageY;
			// Groesse des Layers und Position berücksichtigen
			ldocWidth = document.all ? getDocumentBody().scrollLeft+getDocumentBody().clientWidth : pageXOffset+window.innerWidth-15;
			ldocHeight = document.all ? Math.min(getDocumentBody().scrollHeight, getDocumentBody().clientHeight) : Math.min(window.innerHeight);
			lTooltipWidth=oTooltip.offsetWidth;
			lTooltipHeight=oTooltip.offsetHeight;
			lScrollTop=getDocumentBody().scrollTop;
			lScrollLeft=getDocumentBody().scrollLeft;
			// wenn die Position jetzt zuweit rechts ist, dann links von der Maus
			if ((x+20+lTooltipWidth)>ldocWidth) x=x-lTooltipWidth-40;
			if ((y+20+lTooltipHeight-lScrollTop)>ldocHeight) y=lScrollTop+ldocHeight-40-lTooltipHeight;
			if (oTooltip == null) alert("Tooltip removed");
			oTooltip.style.left = (x + 20) + "px";
			oTooltip.style.top = (y + 20) + "px";
			return true;
		 } 
		catch (error) {  alert("Error:"+error.name+"\n"+error.message); error=null; }
	} // event_LayerMove		

	// Zeigt den Layer mit dem entsprechenden Inhalt (wenn gesetzt) an
	function showTooltip(pLayer, pHtml, pTimeout)
	{
		oTooltip=document.getElementById(pLayer);
		if (oTooltip == null) alert("Tooltip not created");

		if (pHtml!=null) oTooltip.innerHTML=pHtml;
		document.onmousemove=event_TooltipMove;
		if (pTimeout!=null) window.setTimeout("setTooltipVisible()",pTimeout);
		else setTooltipVisible();
	}
	
	function setTooltipVisible()
	{
		if (oTooltip == null) return false;
		oTooltip.style.visibility="visible";
	}

	// Blendet den Layer aus
	function hideTooltip()
	{
		if (oTooltip==null) return false;
		oTooltip.style.visibility="hidden";
		clearTimeout();
		oTooltip=null;
		document.onmousemove="";
	}
	 
	// Document-Object ermitteln (im Opera etwas anders)
	function getDocumentBody()
	{
		return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
	}	

