/*
  Skript zum Bewegen eines divs im Portal
  
*/

  var objDrag = null;     // Element, über dem Maus bewegt wurde

  var mouseX   = 0;       // X-Koordinate der Maus
  var mouseY   = 0;       // Y-Koordinate der Maus

  var offX = 0;           // X-Offset der Maus zur linken oberen Ecke des Elements
  var offY = 0;           // Y-Offset der Maus zur linken oberen Ecke des Elements
  
  var dragbreite = 22;    // Breite des Dragbereichs
  
  var resettop = "47px";  // Reset Position 'top'
  var resetleft ="238px";  // Reset Position 'left'
  
  var tmpTop = -1;
  var tmpLeft = -1;

  // Browserweiche
  IE = document.all&&!window.opera;
  DOM = document.getElementById&&!IE;

  // Initialisierungs-Funktion
  function init(divid){
    // Initialisierung der Überwachung der Events
    document.onmouseup = stopDrag;  // beim Loslassen der Maustaste die Fkt. stopDrag aufrufen
    document.onmousemove = doDrag; 
    getPosCookie(divid);
  }

  // Wird aufgerufen, wenn die Maus über einer Box gedrückt wird
  function startDrag(objElem,ereignis) 
  {
    // Objekt der globalen Variabel zuweisen -> hierdurch wird Bewegung möglich
    objDrag = objElem;
    mouseX = (IE) ? (window.event.clientX) : ereignis.pageX;
    mouseY = (IE) ? (window.event.clientY + document.documentElement.scrollTop) : ereignis.pageY; 
    
    // Offsets im zu bewegenden Element ermitteln
    if (objDrag.offsetLeft == null)
      offsetLeft = 25;   // left - Wert der css - Klasse
    else      
      offsetLeft = objDrag.offsetLeft;            
      
    if (objDrag.offsetTop == null)
      offsetTop = 25;   // top - Wert der css - Klasse
    else
      offsetTop = objDrag.offsetTop;
    
    offX = mouseX - offsetLeft;
    offY = mouseY - offsetTop;
           
    if ((offY >= 0) && (offY <= dragbreite))
    {
      doDrag(ereignis); 
    }
    else
    {	
       stopDrag(ereignis);
    }
	return true;
  }
  

  // Wird ausgeführt, wenn die Maus bewegt wird
  function doDrag(ereignis) 
  {
    // Aktuelle Mauskoordinaten bei Mausbewegung ermitteln
    mouseX = (IE) ? window.event.clientX : ereignis.pageX;
    mouseY = (IE) ? (window.event.clientY + document.documentElement.scrollTop) : ereignis.pageY;

    // Wurde die Maus über einem Element gedrück, erfolgt eine Bewegung
    if (objDrag != null) 
    {
      if ((offY >= 0) && (offY <= dragbreite))
      {
         // Element neue Koordinaten zuweisen      
         objDrag.style.left = (mouseX - offX) + "px";
         objDrag.style.top = (mouseY - offY) + "px";
		 objDrag.style.cursor = "pointer";
      }
    }	
  }

  // Wird ausgeführt, wenn die Maustaste losgelassen wird
  function stopDrag(ereignis) 
  {
    // Objekt löschen -> beim Bewegen der Maus wird Element nicht mehr verschoben
    if (objDrag != null) 
    {
      objDrag = null;
    }
	return true;
  }
   
  // auf Startposition zurücksetzen
  function resetDrag(objElem,ereignis)
  {
    objDrag = objElem;
    if (objDrag != null) 
	{
       objDrag.style.left = resetleft;
       objDrag.style.top = resettop;
       stopDrag(ereignis);
    }
  }
  
  // Cookie mit Position des div's setzen, wird über 'onunload' getriggert
  function setPosCookie(id)
  {
     var hours=4;
     var expire = "";
     var name = "histposition"+id;
     var value;
	 var posleft;
	 var postop;

     // aktuelle Werte ermitteln
     aktdiv = document.getElementById(id);
	 
	 if (aktdiv != null)
	 {
		 posleft = aktdiv.style.left;
		 if ((posleft == null) || (posleft == ""))
		   posleft = resetleft;
		 
	     postop = aktdiv.style.top;
		 if ((postop == null) || (postop == ""))
		   postop = resettop;
		   
	     // Cookie setzen           
	     if(hours != null) 
		 {
	        expire = new Date((new Date()).getTime() + hours * 3600000);
	        expire = "; expires=" + expire.toGMTString();
	        value = posleft + "-" + postop;
	     }
	     document.cookie = name + "=" + escape(value) + expire+"; path=/";	
     }
  }
  
  // Position einlesen und setzen
  function getPosCookie (id)
  {
  	var cname = "histposition"+id;
  	if (document.cookie)
	{
	   var wertstart = document.cookie.indexOf(cname) + cname.length + 1;
	   var tmpstr = document.cookie.substring(wertstart);
	   var wertende = tmpstr.indexOf("px;");
	   var wertleft;
	   var werttop;
	   if (wertende == -1)
	   {
         wertende = document.cookie.length;
       }
       else
       {
         wertende = wertende + wertstart;
       }
       wert = document.cookie.substring(wertstart, wertende);

	   if ( wert.indexOf("px-") > 0)
	   {
	     wertende = wert.indexOf("px-") + 2;
	     wertleft = wert.substring(0, wertende );
	     werttop = wert.substring(wertende+1,wert.length);

	     tmpTop = werttop.indexOf("-");
	      
	     if ( tmpTop != -1)
	     {
	       werttop = resettop;
	     }
	     
	     tmpLeft = wertleft.indexOf("-");
	     
	     if ( tmpLeft != -1)
	     {
	       wertleft = resetleft;
	     }
	   }
	   else
	   {
	     wertleft = resetleft;
	     werttop  = resettop;
	   }
  	  	  
       aktdiv = document.getElementById(id);
	   if (aktdiv != null)
	   {
	   	 if (wertleft != "")
	   	 {
	       aktdiv.style.left = wertleft;
	     }
		 else
		 {
		   aktdiv.style.left = resetleft;
		 }
		 if (werttop != "")
		 {
	       aktdiv.style.top = werttop;
	     }
		 else
		 {
		    aktdiv.style.top = resettop;
		 }
	     aktdiv.style.visibility = "visible";
       }
	 }
  }
  
  
  function setmSamNavPosition()
  {
    if (document.getElementById('NaviSelect'))
    {
     nSelectPos = getOffsetPosition(document.getElementById('NaviSelect'));
     window.scrollBy(0, nSelectPos.y);
    }
  }
  
  function setNavPosition()
    {
     if (document.getElementById('oDiv'))
     {
      oDivPos = getOffsetPosition(document.getElementById('oDiv'));
      if (document.getElementById('NaviSelect'))
      {
       nSelectPos = getOffsetPosition(document.getElementById('NaviSelect'));
       document.getElementById('oDiv').scrollTop = nSelectPos.y-oDivPos.y;
      }
     }
    }

  function offPos(x,y)
  	{
  	this.x = x;
  	this.y = y;
  	}


  function getOffsetPosition(element)
    {//die Positionen sind immer relative zu dem OffestParent,
     //deshalb muss über alle OffestParents bis zum Body iteriert werden
     var elem=element,tagname="",x=0,y=0;
     while ((typeof(elem)=="object")&&(typeof(elem.tagName)!="undefined"))
     {
      y+=elem.offsetTop;
      x+=elem.offsetLeft;
      tagname=elem.tagName.toUpperCase();
      if (tagname=="BODY" || tagname=="HTML")
       elem=0;
      if (typeof(elem)=="object")
       if (typeof(elem.offsetParent)=="object")
        elem=elem.offsetParent;
     }
     position=new offPos(x,y);
     return position;
    }
  
