var a;
var offsetMem; // Speichert Abstand des Links, der das aktuelle Flyout ausgelöst hat (Verhinderung der erneuten Auslösung des Flyouts über demselben Links)
var srcidMem; //Speichert Id des Links, der das aktuelle Flyout ausgelöst hat (für Hover-Effekt hinzufügen bzw. entfernen)

/**
 * Funktionen zum Timeout-Handling für das Flyout
 * ms = Millisekunden für den Timeout
 */ 

var neuer_timeout;

function startTimeout(){
  //alert('start');
  //if (!neuer_timeout){ // wenn er nicht schon existiert
    neuer_timeout = window.setTimeout("deleteFlyout();", 500);
  //}
}

function endTimeout(){
  //alert('end');
  window.clearTimeout(neuer_timeout); 
}

/**
 * Flyouterstellung vorbereiten
 * 
 * (Bisheriges Flyout entfernen; Neuen AJAX-Request losschicken)
 * Bedingung: es wurde ein anderer Link in der secbavi gehovert   
 */ 
function setupFlyout(eventParameter) {
  // -----------------------------------
  // mögliche bestehende Timeouts stoppen
	if (typeof endTimeout == 'function') {
	  endTimeout();
  } 

  // -----------------------------------
  // Id des Links ermitteln, der mouseEvent auslöst
  if (window.event){ // IE
    src = window.event.srcElement;
    srcid = window.event.srcElement.id;
  }
  else{  // FF
    src = eventParameter.currentTarget;
    srcid = eventParameter.currentTarget.id;
  }
	
  //alert (offsetMem+' - '+get_offset_left(src));
  if (offsetMem != get_offset_left(src)){
    // -----------------------------------
    // Bisherige Flyouts [aus dem DOM] löschen (nicht über innerHTML, da dies den IE aufhängt)
    deleteFlyout();
  
    //alert('all_deleted');
		
		// bisherige Hover-Effekte entfernen wurde im deleteFlyout gemacht
		srcidMem = srcid;
		
		// ----------------------------------
	  //Hover-Effekt des übergeordneten Elementes der secnavi beibehalten, wenn in Flyout navigiert wird
	  src.style.background = 'url(pics/header/secnavi_hover.png) repeat-x';
		
    // -----------------------------------
    // AJAX-Request für Menü losschicken
    
    // ---
    // Sprachenflyout
    if (srcid == 'flag'){
      ajax_request('flyout_neu.php?flag=flag','insertFlyout');    
    }
    else{
      // xmlpara ist URL-String auf den verlinkt wird (Teil hinter dem ?)
      var xmlpara_array = src.href.split("/");
      var xmlpara = xmlpara_array[xmlpara_array.length-1];
      //alert (xmlpara);
      
      // ---
      // Produktbereich
      // srcid.substr(3,1) = 1. Zeichen der cat_wg der aktuellen Hauptkategorie (nur im Produktbereich anhängen !!)
      if (xmlpara.match(/cat=/i)){ // nicht p=2 verwenden, da auch bei p=0 der Produktbereich angezeigt werden kann
        ajax_request('flyout_neu.php?cat_wg='+srcid.substr(3,1),'insertFlyout');
      }
      // ---
      // Normale Seite
      else{
        // bei externen Links kein Flyout auslösen !!
        if (src.target != '_blank'){
          ajax_request('flyout_neu.php'+xmlpara,'insertFlyout');
        }
      }
    }
	}
	
	// -----------------------------------
  // Speichern des Links, der Flyout ausgelöst hat (über offset)
  offsetMem = get_offset_left(src);
}

/**
 * Flyout ins DOM einfügen
 * 
 * (HTML-Code aus XML-Objekt auslesen und per innerHTML ins DOM;
 *  mouseEvents erneut zuweisen)  
 */ 

function insertFlyout(){
	if (req.readyState==4){
		if (req.status==200){
			var xmldoc=req.responseXML;
			
			flyoutdata = xmldoc.getElementsByTagName('flyoutdaten')[0];
			//alert(get_xmltag_value('cat_wg',flyoutdata));

			// innerHTML nicht vom body, da sonst flash etc neu geladen wird und nicht so rechenintensiv
			//document.getElementsByTagName('body')[0].innerHTML = document.getElementsByTagName('body')[0].innerHTML+get_xmltag_value('html',flyoutdata);
			document.getElementById('headershadow').innerHTML = document.getElementById('headershadow').innerHTML+get_xmltag_value('html',flyoutdata);
			//createHTMLelement('ul', new Array('id','name', 'style'), new Array('test', 'fly'+get_xmltag_value('cat_wg',flyoutdata)+'out', 'border:1px solid red;'), 'body', 'sdhfjklsdhfhsdjk');
			 
			// eventLoader erneut durchführen, da sonst zugewiesene Events verloren gehen
			// ist auch so, wenn man nicht den innerHTML des bodys verwendet
			eventLoader();
			
			
			// Sprachenflyout
			if (get_xmltag_value('href',flyoutdata) == 'flag=flag'){
				positionFlyout('flag');
			} 
			// Normale Seite
			else if (get_xmltag_value('get-s',flyoutdata) != 'Nicht vorhanden.'){
				positionFlyout('sec'+get_xmltag_value('get-s',flyoutdata));
			}      
			// Produktbereich 
			else if (get_xmltag_value('cat_wg',flyoutdata) != 'Nicht vorhanden.'){ 
				positionFlyout('sec'+get_xmltag_value('cat_wg',flyoutdata));
			}
		}
	}
}

/**
 * Funktion zum Positionieren aller Flyout-Listen
 * id - Id des Links der secnavi, der mouseEvent auslöst 
 */ 
function positionFlyout(id){
  // -----------------------------------
  // Hauptliste positionieren (entspricht bisherigem Flyout)
  leftmargin = document.getElementById(id).offsetLeft; // get_offset_left(document.getElementById(id));

  // Sprachenflyout
  if (id == 'flag'){
	  leftmargin = get_offset_left(document.getElementById(id))-document.getElementById('main').offsetLeft;
		// main-Abstand abgezogen, da main ab sofort relativ positioniert
    getElementByClass('flyout','ul').style.marginLeft = (leftmargin-16)+"px";
    fadeinFlyout('flyout'); // Hauptliste einblenden
  }
  else{
      // query (URI-Teil hinter ?) = href des Links, der Flyout auslöst
      src = document.getElementById(id);
      uriparts = src.href.split("/");
      query = uriparts[uriparts.length-1];
      //alert (query);
      
    // Normale Seite
    if (!query.match(/cat=/i)){ // nicht window.location.search.match(/p=2/i) verwenden
      getElementByClass('flyout','ul').style.marginLeft = leftmargin+"px";
      fadeinFlyout('flyout'); // Hauptliste einblenden
    }
    // Produktbereich
    else{      
      //test = document.getElementsByName('fly'+id.substr(3,1)); //[0].style.marginLeft = leftmargin+"px";
			//alert(getElementByClass('flyout fly'+id.substr(3,1),'ul'));
      if (getElementByClass('flyout fly'+id.substr(3,1),'ul') != ''){ // Bedingung eingefügt am 01. April - Foto-Zubehör Flyout nicht vorhanden
			  getElementByClass('flyout fly'+id.substr(3,1),'ul').style.marginLeft = leftmargin+"px";
      
			
	      /*
	      leftmargin = document.getElementById(id).offsetLeft;
	      document.getElementById('fly'+id.substr(3,1)).style.marginLeft = leftmargin+"px";
	      */
	      
	      //alert(leftmargin);
	  
	      // -----------------------------------
	      // Alle weiteren erzeugten Listen positionieren
	      var uls = document.getElementsByTagName('ul');
	      
	      //_debug(uls);
	      for (i=0; i<uls.length; i++){
	        // uls ohne class="flyout ..." nicht berücksichtigen
	        // das glieche gilt für die Hauptliste, die oben bereits positioniert wurde
	        if (uls[i].className.substr(0,6) == 'flyout' && uls[i].className != 'flyout fly'+id.substr(3,1)){
	          //_debug(uls[i]);
	     
	          var parentId = uls[i].className.substring(7, uls[i].className.length); // parentId ist Id des aufrufenden Links in einer vorherigen Liste
	          //alert('-'+parentId+'-');
	          
	          var parent = document.getElementById(parentId); // var muss davor, damit der IE parent findet
	          //var src = document.getElementById(parentId);
						
						var src = document.getElementById(id);
						
	          //parent.style.fontSize = '20px';
	          //alert(parent.offsetTop);
	      
	          // var = explizit = global - in allen Funktionen verfügbar
	          
	          // in funktionen:
	          // var = explizit = lokal
	          // ohne var = implizit = global
	          
	          //_debug(parent);
	          var top = get_offset_top(parent);
	      
	          //alert(top);
	          //var left = get_offset_left(parent);
						var left = get_offset_left(parent)-document.getElementById('main').offsetLeft;
	          
	          var hoehe = parent.offsetHeight;
	          var breite = parent.parentNode.offsetWidth; // Breite des übergeordneten Listenelements
	          
	          // Flyout Liste mit zur Id des aufrufenden Links passenden class raussuchen
	          var list = getElementByClass('flyout '+parentId,'ul');
	          //_debug(list);
	          
	          
	          // ---
	          // wenn die Listen eine top-border haben, werden sie falsch positioniert - hier korrigiert
						// Korrekturen für Listen der 3. und 4. Ebene (browserabhängig)
						
						//alert(navigator.appName);
						//_debug(navigator)
						
						if (list.className.length == 12){
							if (list.style.borderTopWidth != '0px'){
								top -= 1;
							}
						}
						
						if (navigator.appName == 'Opera' && list.className.length == 13){
							top -= 1;
						}
						else if (navigator.appName == 'Microsoft Internet Explorer'){
						  top -= 1;
						}
						
						// Safari
						regexp = new RegExp('KHTML'); // RegExp-Objekt erstellen - Regulärer Ausdruck bzw. Suchbegriff wird übergeben
	          ergebnis = regexp.test(navigator.userAgent); // Regulären Ausdruck auf query anwenden
						if (ergebnis == true){
						  top -= 2;
						}

	          // ---
	          // Neue Angaben zuweisen
	          list.style.marginTop = top-hoehe-2+'px';
	          //alert(list.style.marginTop);
	          list.style.marginLeft = (left+breite-2)+'px'; 
	          // = '500px'; //list.style.marginTop + top;
	          
	          //alert(uls[i].className);
	        }
	      }
	      // -----------------------------------
	      // Hauptliste sichtbar machen
	      // und timeout zur Komplettentfernung starten (nur bei Hauptliste) (man muss Hauptiste hovern, um diesen zu stoppen)
	      fadeinFlyout('flyout fly'+id.substr(3,1));
			}
    }
  }
}

/**
 * Flyout sichtbar machen
 * class_name - Klasse des ul-Elements, das sichtbar gemacht werden soll
 * 
 * (Aufruf in positionFlyout)  
 */
function fadeinFlyout(class_name){
  getElementByClass(class_name,'ul').style.visibility = 'visible';
	
	// Nach links verschieben der SELECT-Boxen für Sortierung - nur im IE 6
	//alert(navigator.appVersion);
	if (navigator.appVersion.match(/MSIE 6.0/i)){
	  if (sort_vorhanden = document.getElementById('sortieren')){ // nur im Produktbereich ist dieses vorhanden  
			// nur beim Sprachenflyout entfernen, sonst nicht (andere haben längeren Klassennamen !!)
			if (getElementByClass(class_name,'ul').className == 'flyout'){
		    //sort_vorhanden.style.visibility = 'hidden';
				sort_vorhanden.style.marginRight = '17px'; // nur die Hälfte von 34px, da doubled float margin bug
				document.getElementById('sort_span').style.right = '189px'; // '159px';
			}
		}
	}
}
/**
 * Sichtbare Flyouts schnell ausblenden (ohne fader) - Unterflyouts
 * 
 * level - Unterebene, ab der Flyouts ausgeblendet werden sollen
 * 1 = Alle Flyouts werden ausgeblendet
 * 4 = nur Flyouts der untersten Ebene werden ausgeblendet
 */  
function undisplayFlyout(level){
  var uls_to_del = document.getElementsByTagName('ul');
  //alert(uls_to_del.length);
  for (a=uls_to_del.length-1; a>0; a--){ // Rückwärts-Schleife, da sich die Länge mit der Anzahl der ul-Elemente reduziert
    if (uls_to_del[a].className.substr(0,6) == 'flyout' && uls_to_del.id != 'phpsprachwahl'){ // Sprachauswahl aus normalen Fylouts entfernt
     
      // nur diejenigen Ebenen löschen, die angegebenen sind (über length)
      if (uls_to_del[a].className.length >= (10+level)){
        uls_to_del[a].style.visibility = 'hidden';
      }
    }
  }    
}

/**
 * Sichtbare Flyouts komplett aus DOM entfernen
 */
function deleteFlyout(){
  var uls_to_del = document.getElementsByTagName('ul');
  //alert(uls_to_del.length);
  for (a=uls_to_del.length-1; a>0; a--){ // Rückwärts-Schleife, da sich die Länge mit der Anzahl der ul-Elemente reduziert
		if (uls_to_del[a].className.substr(0,6) == 'flyout' && uls_to_del[a].id != 'phpsprachwahl'){ // Sprachauswahl aus normalen Fylouts entfernt)
      //document.getElementsByTagName('body')[0].removeChild(uls_to_del[a]);
      document.getElementById('headershadow').removeChild(uls_to_del[a]);
    }
  }
  // offsetMem zurücksetzen (damit gleiches Flyout erneut aufgerufen werden kann)
  offsetMem = -1;
  
  // last_hovered_el und _arr zurücksetzen, da er diese nicht mehr im DOM existieren
  last_hovered_el = ''; // Id des letzten gehoverten Elementes
  last_hovered_arr = new Array();
	
	// VerschobeneSELECT-Box für Sortierung wieder zurück - nur im IE 6
	//alert(navigator.appVersion);
	if (navigator.appVersion.match(/MSIE 6.0/i)){
	  if (sort_vorhanden = document.getElementById('sortieren')){ // nur im Produktbereich ist dieses vorhanden  
			// nur beim Sprachenflyout entfernen, sonst nicht (andere haben längeren Klassennamen !!)
			document.getElementById('sortieren').style.marginRight = '0';
			document.getElementById('sort_span').style.right = '155px'; //'125px';
		}
	} 
	
	// ----------------------------------
	//Hover-Effekt des bisher aktiven übergeordneten Elementes der secnavi wieder entfernen
	if (srcidMem){
		document.getElementById(srcidMem).style.background = '';
	}
}


/*function fadeoutFlyout(class_name){
  getElementByClass(class_name,'ul').style.visibility = 'hidden';
}*/

/**
 * MouseEvents des Flyout-Menüs
 * srcid - id des auslösenden Links (onmouseover und -out sind direkt im HTML-Code) 
 */
var last_hovered_el = ''; // Id des letzten gehoverten Elementes
var last_hovered_arr = new Array(); // Ids des zuletzt gehoverten Elemente 
var lh = 0; 
 
function hover2(srcid){
  // -------------------------
  // Unhovering der bisher gehoverten Elemente
  if (last_hovered_el != ''){
    if (srcid.length >= last_hovered_el.length){
      if(srcid.substring(0,srcid.length-1) != last_hovered_el){
        unhover3(last_hovered_el);
      }
    }
    else{ // srcid.length < last_hovered_el.length
      unhover3(last_hovered_el);
      // Alle Einträge (von hinten beginnend) im Array löschen bis auf diejenigen, die über der aktuellen Ebene liegen
      for (lh=last_hovered_arr.length; lh>0; lh--){ 
        if (last_hovered_arr[lh-1].length >= srcid.length){          
          unhover3(last_hovered_arr.pop());
        }         
      }
    }
  }
  last_hovered_el = srcid;
  last_hovered_arr.push(srcid);
	
  // -------------------------
  // Hovering des aktuellen Elementes (a-tag)
  document.getElementById(srcid).parentNode.style.backgroundImage = 'url(pics/flyout/active.png)';
  document.getElementById(srcid).style.backgroundImage = 'url(pics/flyout/listengrafik_active.png)';
  //document.getElementById(srcid).style.backgroundImage = 'none';
  document.getElementById(srcid).style.color = '#E6002F';
}

function unhover3(srcid){
  document.getElementById(srcid).parentNode.style.backgroundImage = 'url(pics/flyout/inactive.png)';
  document.getElementById(srcid).style.backgroundImage = 'url(pics/flyout/listengrafik.png)';
  document.getElementById(srcid).style.color = '#4D4D4D';
}

        

/**
 * Funktionen zum Handling des Sprachen-Flyouts
 */ 

function displayLangFlyout(){
	document.getElementById("phpsprachwahl").style.visibility = "visible";
}
 
var lang_timeout;

function startLangTimeout(){
  lang_timeout = window.setTimeout("deleteLangFlyout();", 500);
}

function endLangTimeout(){
  window.clearTimeout(lang_timeout); 
}

function deleteLangFlyout(){
  document.getElementById('phpsprachwahl').style.visibility = "hidden";
}