// erwartet object DocumentElement mit Wert document.body oder document.documentElement 

function getPX(s)
{
	return isNaN(s) ? s : s+"px";
}

function getDiv(objID)
{
	if (document.getElementById)
	{
		return document.getElementById(objID)
	}
	else if (document.all)
	{
		return document.all[objID];
	}
	else if (document.layers)
	{
		return document.layers[objID];
	}
}

function resizeLayer(l,x,y)
{
	var o = getDiv(l);
	if (o != null) 
	{
		o.style["width"] = getPX(x);
		o.style["height"] = getPX(y);
	}
}

function toggleLayer(l) 
{
	var o = getDiv(l);
	if (o != null) 
	{
		if (o.style["display"] == 'none')
		{
			showLayer(l);
		}
		else
		{
			hideLayer(l);
		}
	}
}

function toggleLayerDisp(l) 
{
	var o = getDiv(l);
	if (o.style["display"] == 'none')
		o.style["display"] = '';
	else
		o.style["display"] = 'none';
}

function toggleLayerStatus(l, status) 
{
	var o = getDiv(l);
	if (o != null) 
	{
		if (status == 'none') 
		{ 
			status = '';
			showLayer(l); 
		}
		else 
		{ 
			status = 'none';
			hideLayer(l); 
		}
	}
	return status;
}

function showLayer(l) 
{
	var o = getDiv(l);
	if (o != null)
	{
		o.style.zIndex = 100;
		fade(o,'');
	}
}

function showLayerDisp(l) 
{
	var o = getDiv(l);
	if (o != null)
		o.style["display"] = '';
}

function hideLayer(l)
{
	var o = getDiv(l);
	if (o != null)
	{
		o.style.zIndex = -1;
		fade(o,'none');
	}
}

function hideLayerDisp(l) 
{
	var o = getDiv(l);
	if (o != null)
		o.style["display"] = 'none';
}

function centerObj(l) 
{
	var x,y;
	if (self.pageYOffset) // all except Explorer
	{
	  x = self.pageXOffset;
	  y = self.pageYOffset;
	}
	else 
	{
	  x = DocumentElement.scrollLeft;
	  y = DocumentElement.scrollTop;
	}

	var o = getDiv(l);
	if (o != null) 
	{
		o.style["left"] = getPX(x + (DocumentElement.clientWidth - parseInt(o.style["width"])) / 2);
		o.style["top"] = getPX(y + (DocumentElement.clientHeight - parseInt(o.style["height"])) / 2);
	}
}

function getDisplayStatus(l) 
{
	var o = getDiv(l);
	if (o != null) return o.style["display"];
}

function setDisplayStatus(l, status)
{
	var o = getDiv(l);
	if (o != null) 
	{
		if (status == 'none') { hideLayer(l); }
		else { showLayer(l); }
	}
}

function fade(o, status) 
{
	if (o.filters)
	{
		o.style["filter"] += "blendTrans(duration=0.5)";
		o.filters.blendTrans.apply();
	}

	o.style["visibility"] = (status=='none')?'hidden':'visible';
	if (o.style["visibility"] == 'visible') o.style["display"] = '';

	if (o.filters)
		o.filters.blendTrans.play();
	// FUNKTIONIERT NICHT KORREKT! if (o.style.visibility != 'visible') window.setTimeout("nodisplay('"+o.id+"','"+status+"')",2000);
}

function nodisplay(l, status) {
	var o = getDiv(l);
	o.style["display"] = status;
	if (status=='') centerObj(o.id);
}


// zr 2005-02-08

function getAbsPos(o, p)
{
/*  p = "Left" oder "Top"
	o = Auslöser-Element
	
	offsetLeft/offsetTop:
	Speichert den Abstand eines Elementes zum linken/oberen Rand des in der Eigenschaft  
	offsetParent gespeicherten Offset-Elternelementes.

	offsetParent
	Speichert dasjenige Elternelement eines Elements, von dessen Positionierung 
	die Positionierung des Elements abhängt. offsetParent ist dabei eine Art Zeiger 
	auf das übergeordnete Element. Hinter der Eigenschaft lassen sich wiederum alle 
	Eigenschaften und Methoden des all-Objekts notieren. Diese gelten dann für das Element, 
	auf das der Zeiger zeigt. Existiert kein Offset-Elternelement so hat die Eigenschaft 
	offsetParent den Wert null.
*/
	var i=0;
	var s = "";
	while(o!=null)
	{
		i+=o["offset"+p];
		//s+=o.id+" pos:"+o["offset"+p]+"\n";
		o=o.offsetParent;
	}
	return i;
}

function getDivByAttrib(attrib, value)
{
	var myobj = document.getElementsByTagName("div");
	for (k=0; k<myobj.length; k++) 
	{
		if (myobj[k].getAttribute(attrib) == value)
			return myobj[k];
	}
}

function closeDivByAttrib(attrib, value)
{
	var myobj = document.getElementsByTagName("div")
	for (k=0; k<myobj.length; k++) 
	{
		if (myobj[k].getAttribute(attrib) == value)
			myobj[k].style["display"] = "none";
	}
}

function openDivByAttrib(attrib, value)
{
	myobj = document.getElementsByTagName("div")
	for (k=0; k<myobj.length; k++) 
	{
		if (myobj[k].getAttribute(attrib) == value)
			myobj[k].style["display"] = "block";
	}
}

function getEventXPos(evt)
{
	return window.event.x + DocumentElement.scrollLeft;
}

function getEventYPos(evt)
{
	return window.event.y + DocumentElement.scrollTop;
}

function closeDiv(o, evt)
{
	var myLeft = evt.pageX || (evt.clientX + DocumentElement.scrollLeft);
	var myTop  = evt.pageY || (evt.clientY + DocumentElement.scrollTop);

	if (((o.offsetLeft > (myLeft-2)) || ((o.offsetLeft+o.offsetWidth) < myLeft+1))
		||
		((o.offsetTop > (myTop-2)) || ((o.offsetTop+o.offsetHeight) < myTop+1)))
	{
		o.style["display"] = "none";
	}
	
	myLeft = evt.pageX || (evt.clientX + DocumentElement.scrollLeft);
	myTop  = evt.pageY || (evt.clientY + DocumentElement.scrollTop);
	if (((o.offsetLeft > (myLeft-2)) || ((o.offsetLeft+o.offsetWidth) < myLeft+1))
		||
		((o.offsetTop > (myTop-2)) || ((o.offsetTop+o.offsetHeight) < myTop+1)))
	{
		o.style["display"] = "none";
	}
	
	
}

// speziall fuer Shop - MedInfo
function MedinfoSelect(oBt)
{
	ShowPanel2Button(oBt, "panMedinfo");
}

function ShowPanel2Button(oBt, group)
{
	var o = getDivByAttrib("PanKey", oBt.getAttribute("ToDiv"))
	closeDivByAttrib("GrpName", group);
	if(o != null) 
	{
		o.style["left"] = getPX(getAbsPos(oBt,"Left"));
		o.style["top"] = getPX(getAbsPos(oBt,"Top"));
		o.style["display"] = "block";
	}
}



/* ### BEGINN Drag And Drop - Objekte verschieben ### 
	Diese Objekte werden unterstuetzt:
	1) style=position:absolute
	2) Attribut DragOk="irgendetwas" ist vorhanden  
*/
var selectedElement = null;
var offsetLeft = 0;
var offsetTop  = 0;
var savedZindex = 0;

function GetElement2Drag(o) {
	if (document.layers) {
		if (o.constructor == Document) {
      		for (var l = 0; l < document.layers.length; l++)
        		if (o == document.layers[l].document) return document.layers[l];
    	} else if (o.constructor == Image) {
      		for (var l = 0; l < document.layers.length; l++)
        		for (var i = 0; i < document.layers[l].document.images.length; i++)
          			if (o == document.layers[l].document.images[i]) 
						return document.layers[l];
    	}
    	return null; 
	} else if (document.all) {
    	do if (o.DragOk) return o; while (o = o.parentElement);
    	return null;
  	} else if (document.getElementById) {
    	do if (o.getAttribute && o.getAttribute("DragOk") > "") return o; while (o = o.parentNode);
    	return null;
  	}
}

function CheckElement2Drag(e) {
	offLeft = 0;
	offTop  = 0;
	// wegen 'Hänger' beim Klick auf die Scrollbalken:
	if (selectedElement) {DragOff(); return true;}
	ok = false;
   	if (document.layers) {
     	selectedElement = GetElement2Drag(e.target);
     	if (selectedElement) {
       		document.captureEvents(Event.MOUSEMOVE | Event.MOUSEUP);
       		ok = true;
    	}
   } else if (document.all) {
		selectedElement = GetElement2Drag(event.srcElement);
     	if (selectedElement 
		&& selectedElement.style 
		&& selectedElement.style.position=='absolute') {
			document.onselectstart = document.ondragstart = function () {return false;};
			savedZindex = selectedElement.style.zIndex;
			selectedElement.style.zIndex = 100;
			offsetLeft = getEventXPos() - getAbsPos(selectedElement,"Left");
			offsetTop = getEventYPos() - getAbsPos(selectedElement,"Top");
			ok = true;
     	}
   } else if (document.getElementById) {
		//alert(e.target.tagName);

		if (e.target.tagName.toUpperCase()=='DIV' || e.target.tagName.toUpperCase()=='A') selectedElement=null;
     	else selectedElement = GetElement2Drag(e.target);
     	if (selectedElement)
     	{
			ok = true;
			offsetLeft = e.clientX + self.pageXOffset - parseInt(selectedElement.style['left']);
			offsetTop = e.clientY + self.pageYOffset - parseInt(selectedElement.style['top']);
			savedZindex = selectedElement.style.zIndex;
			selectedElement.style.zIndex = 100;
		}

   }
   if (ok)
   {
		document.onmousemove = DragOn;
		document.onmouseup = DragOff;
    	document.onscroll = DragOff;
   }
}

function SetDragPos(s)
{
   	s.posLeft = event.clientX - offsetLeft + DocumentElement.scrollLeft;
   	s.posTop = event.clientY - offsetTop + DocumentElement.scrollTop;
}

function DragOn(e) {
	
	if (document.layers) {
		selectedElement.left = e.pageX;
		selectedElement.top = e.pageY;
	} else if (document.all) {
		if (selectedElement.style) {
			SetDragPos(selectedElement.style);
		}
	} else if (document.getElementById) {
		selectedElement.style['left'] = (e.clientX - offsetLeft + self.pageXOffset) + 'px';
		selectedElement.style['top'] = (e.clientY - offsetTop + self.pageYOffset) + 'px';
	}
}

function DragOff() {
	if (document.layers) {
		document.releaseEvents(Event.MOUSEMOVE | Event.MOUSEUP);
		document.onmousemove = null;
		document.onmouseup = null;
		selectedElement = null;
	}
	else if (document.all || document.getElementById) {
		if (document.all) {
			if (selectedElement && selectedElement.style) selectedElement.style.zIndex = savedZindex;
			document.onselectstart = document.ondragstart = function () {return true;};
		}
		document.onmousemove = null;
		document.onmouseup = null;
		selectedElement = null;
	}
}

if (document.layers) document.captureEvents(Event.MOUSEDOWN);
document.onmousedown = CheckElement2Drag;
/* ### ENDE Drag And Drop ### */
function Added2WK(artname)
{
	if (document.getElementById) 
	{
		var o = document.getElementById('lblAdded');
		if (o) 
		{ 
			o.innerHTML=artname;
			centerObj('divAdded');
			showLayer('divAdded');
		}
	}
}

/* ### SetCloseByDivs ### 
	An alle DIVS innerhalb von "o", die das Attribut "a" mit dem Inhalt "n" besitzen,
	wird ein "mouseout"-Eventhandler (SetCloseDivByMouseoutEvent( id )) angehängt. 
*/

function SetCloseByDivs( o, a, n )
	{
	var divs = o.getElementsByTagName("div");		
	for (k=0; k<divs.length; k++)
	{	
		if (divs[k].getAttribute(a, 0) == n) SetCloseDivByMouseoutEvent( divs[k].id )
	} 
}

function SetCloseDivByMouseoutEvent( id )
{
	o = document.getElementById(id);
	if (o != null) 
	{
		$addHandler(document.getElementById(id), 'mouseout', function(event) { closeDiv(document.getElementById(id), event ); } );
	}
}

