﻿
var popupOpenTime_ = 40; //------- Millisekunden. Bei einem Wert von nahe 0 kann es beim IE mt dem PopUp zu Problemen kommen 
var popupCloseTime_ = 40; //------- Millisekunden

var MousePosX_, MousePosY_;
var openPopUps_ = new Array();//--- ID´s
var trigger_ = new Array();
var triggerClass_ = new Array();
var triggerPath_ = new Array();
var triggerImage_ = new Array();
var testImageTypes_= new Array("jpeg","jpg","png","gif");

document.onLoad = pageLoaded();


function pageLoaded()
{
	document.onmousemove = MousePosition;
}





for(var i=1;i<menues_; i++)
{
	//document.getElementById("menue"+menues_)

	eval("menue"+i+" = new Image();");
	eval("menue"+i+".src = '"+menuepfad_+"mo-menue"+i+".gif';");	
}


/* 	
Dies ist die elementare Funktion des Menüs.
Parameter:
	trigger: Auslöser als Objekt. Bei Grafiken wird davon ausgegengen das es eine mo-Grafik gibt. Damit beim ersten Auslöser das aktuelle Menü selektiert bleibt, wird bei Grafiken davon ausgegengen das diese eine Zahl am Ende hat (img='menue5'). Bei einem Div wird davon ausgegengen das dieses eine ID mit einer Zahl am Ende hat (id='menue5'').  
	target: die ID des anzuzeigenden Objektes
	padX: Versatz in X Richtung
	padY: Versatz in X Richtung
	direction: Je nach dem wo das Menü ersceinen soll muss einer der folgenden Parameter als String übergeben werden - topR, topL, bottomR, bottomL
	selClass: Diese Klasse bestimmt wie der sel-Effekt für den trigger aussehen soll. Wenn der Auslöser eine Grafik ist,  
*/

function showMenue(trigger,target,padX,padY,direction, selClass) //----- trigger wird als Objekt übergeben, target als Name.
{ 		

	testPopUps();
	
	var isImg=false;
	
	
	if(inArray(trigger, trigger_)>0)
		return;
	

	
	var imgName="";
	var pathName="";
	
	if(trigger.src>"")//--------- Auslöser könnte eine Grafik sein
	{
		
		var path=trigger.src;
		var l= testImageTypes_.length;
		var pathLen=path.length;
		var typeLen=0;
	
		for(var i=0; i<l; i++){
			typeLen=testImageTypes_[i].length;
			if(path.substr(pathLen-typeLen,typeLen)==testImageTypes_[i]){ //----- Auslöser ist eine Grafik!
				isImg=true;
			}
		}	
	}	



	if(isImg==false && isSelected(trigger.id) && trigger.id>"")
		return;

		



	// Wenn der Auslöser ein Bild ist und keine Klasse angegeben wurde wird eine "MO Grafik" eingesetzt. Ansosten wird der Effekt (weiter unten) durch die Klasse ausgelöst
	if(isImg && selClass=="")
	{
		var pos=path.lastIndexOf("/")
		imgName= path.substr(pos+1);
		pathName= path.substring(0,pos+1);
		
		if(isSelected(imgName)) //---------- Der aktuell gewählte Menüpunkt ist selektiert. Routine verlassen
			return

		
		if(imgName.substr(0,3)!="mo-"){//----- ist noch keinen MO Grafik
			trigger.src=pathName+"mo-"+imgName;		
		}
		else{
			imgName=imgName.substr(3);
		}
	}


	var l=openPopUps_.length;
	
	if(l>0){
		if(trigger.offsetParent.id==trigger_[l-1].offsetParent.id){ //---- Mutter des aktuellen Trigger ist identisch mit Mutter des letzten Triggers
			schreibeProtokoll("showMenue: Mutter identisch. Lösche Objekt "+openPopUps_[l-1].id+"<br>"+openPopUps_+"<br>"+trigger_);
			deleteEntry(l-1) 
		}
	}


	if(target>"")//----- Soll ein PopUp geöffnet werden?
	{
		//typeof(document.getElementById(target))
		
		if(document.getElementById(target)==null){	//----- gibt es das Ziel wirklich?
			target="";
		}
		else{
			var cords= objCords(trigger);//---- cords.x, cords.y, cords.x1, cords.y1
				
			
			switch (direction) //----------- Ausrichtung
			{	
				case "topR"://-- oben rechts
					var x=cords.x1
					var y=cords.y
				break;

				case "topL"://-- oben links
					var x=cords.x
					var y=cords.y
				break;

				case "bottomR"://-- unten rechts
					var x=cords.x1
					var y=cords.y1
				break;
				
				case "bottomL"://-- unten links
					var x=cords.x
					var y=cords.y1
				break;
				

				default:
					return;
				break
			}
							
			document.getElementById(target).style.left = (padX+x)+"px";
			document.getElementById(target).style.top = (padY+y)+"px"; 
			document.getElementById(target).style.position = "absolute";
					
			popupPause(popupOpenTime_);
			document.getElementById(target).style.display = "block";
	
		}
	
	}
	
	//------- Arrays schreiben (werden auf jeden Fall geschrieben)
	var l=0;


	if(openPopUps_.length>0)
		l= openPopUps_.length;

	openPopUps_[l]=target;
	trigger_[l]=trigger;
	triggerClass_[l]=trigger.className;	
	triggerImage_[l]=imgName;
	triggerPath_[l]=pathName;
		
	//---- "Sel Effekt"
	if(selClass>"")
		trigger.className= selClass;
		
}




function MousePosition(e) 
{
		
	if(typeof(window.event) == 'object'){
		xPos = window.event.clientX
		yPos = window.event.clientY;	
	}
	
	if(typeof(e) == 'object'){
	
		var xPos = e.pageX;
		var yPos = e.pageY; 
	}
	
	
	// Der IE benötigt noch die Scrollposition
	if (document.all && !document.captureEvents) { //---- Achtung!! Browser muss sich im standardkonform Modus befinden. http://de.selfhtml.org/css/formate/box_modell.htm#standardkonform
	    xPos += document.documentElement.scrollLeft;
	    yPos += document.documentElement.scrollTop;
	}
	
	MousePosX_=xPos;
	MousePosY_=yPos;
	
	
	if(typeof(MousePosX_)=="undefined")
	{
		var dummy=0;
	}
	else
	{
		testPopUps();
	}	
}





function testPopUps()//----- Arbeitet die Liste von hinten solange ab bis sich der Mauspfeil in einem PopUp oder dessen Trigger befindet.   
{
	var l=openPopUps_.length;
			
	for(var i=l-1; i>-1;i--){
		if(InObject(openPopUps_[i])==false && InObject(trigger_[i])==false){//--- Maus nicht im PopUp
			deleteEntry(i);
		}
		else{
			return;
		}
	}
}



function deleteEntry(pos) //------ Löscht einen Eintrag aus dem Array und setzt alle benötigten Parameter zurück
{

	if(triggerImage_[pos]>"")//------ Grafik evtl. zurücksetzen
	{
		if(isSelected(triggerImage_[pos])==false){//--- Menü nicht aktuelles Menü. Grafik kann getauscht werden.		
			trigger_[pos].src=triggerPath_[pos]+triggerImage_[pos];
		}
	}

	if(openPopUps_[pos]>""){
		popupPause(popupCloseTime_);
		document.getElementById(openPopUps_[pos]).style.display = "none";
	}

	trigger_[pos].className=triggerClass_[pos];
	
	openPopUps_.pop();//------ Letzte Elemente löschen
	trigger_.pop();
	triggerImage_.pop();
	triggerPath_.pop();
	
}






function InObject(id)
{		
	if(id=="" || id==null){
		return false;
	}
	else{

		if((typeof id)=="object")
		{
			targetDiv=id;
		}
		else
		{
			var targetDiv = document.getElementById(id);
		}
					
		var cords= objCords(targetDiv);
			
		var targetDivX = cords.x;
		var targetDivY = cords.y;
		var targetDivW = cords.x1;
		var targetDivH = cords.y1;
		
		
		if(!((MousePosX_ <= targetDivW) && (MousePosY_ <= targetDivH) && (MousePosX_ >= targetDivX) && (MousePosY_ >= targetDivY)) &&  MousePosX_ != -1 && MousePosY_ != -1)
		{
			schreibeProtokoll("InObject: Maus nicht in Objekt (id)"+targetDiv.id+". (obj) "+targetDiv+" <br>"+openPopUps_+"<br>"+trigger_);
			schreibeProtokoll("<br>ID="+id);
			return false;
		}
		else
		{
			schreibeProtokoll("InObject: Maus in Objekt "+targetDiv.id+". <br>"+openPopUps_+"<br>"+trigger_);
			return true;
		}
	}
}


function isSelected(name) //------- Überprüft anhand des übergebenen Names (z.B. Grafik "mo-menue5.gif" oder einer ID z.B. "menue10" ) ob diese Grafik oder die ID dem aktuell selektiertem Menü zugeordnet ist
{
	var stop=0;
	name.lastIndexOf(".")>0 ? stop=name.lastIndexOf("."): stop=name.length;
		
		
	var start= stop-1;
	var wert=name.substring(start, stop);
	
	while(isNaN(wert)==false)
	{
		number=wert;
		start--;
		wert=name.substring(start, stop);
	}
	

	if(number==akt_menue_){//--- Menü ist aktuelles Menü. 
		return true;
	}
	else{
		return false;
	}
}



function inArray(needle, haystack)
{
	var l=haystack.length;
	
	
	for(var i=0; i<l; i++)
	{
		if(haystack[i]==needle)
			return i+1;
	}
	
	return false;
}


function objCords(obj) {//------- Gib die Koordinaten x, y, x1, y1 eines Objektes in einem Objekt zurück
  var pos = { x:0, y:0, x1:0, y1:0 };
  
  
  var firstObj=obj;

  do {
    pos.x += obj.offsetLeft;
    pos.y += obj.offsetTop;
        
  } while (obj = obj.offsetParent);

   pos.x1 = pos.x + firstObj.offsetWidth;
   pos.y1 = pos.y + firstObj.offsetHeight;   
 
  return pos;
}


function getLeft(l)
{
  if (l.offsetParent) return (l.offsetLeft + getLeft(l.offsetParent));
  else return (l.offsetLeft);
}

function getTop(l)
{
  if (l.offsetParent) return (l.offsetTop + getTop(l.offsetParent));
  else return (l.offsetTop);
}

function popupPause(millis) 
{
	var date = new Date();
	var curDate = null;
	
	do { curDate = new Date(); } 
	while(curDate-date < millis);
} 


function schreibeProtokoll(wert)
{
	//document.getElementById("info").innerHTML=document.getElementById("info").innerHTML+"<br>"+wert;
}


