/* Drag&Drop-Bibliothek für hanno-stehling.de und besseres-webdesign.de *
 * Hanno Stehling 2007                                                  */

var dragDropElement = '';
var dragDropX = 0;
var dragDropY = 0;

function styloStyleTest() // prüft, ob das korrekte Stylesheet in Aktion ist
{
  var testelement = document.getElementById('nostyle');

  if(!testelement) return false; // Testelement nicht vorhanden
  if(document.defaultView && document.defaultView.getComputedStyle)
  {
    if(!document.defaultView.getComputedStyle(testelement, null)) return true; // Safari gibt bei getComputedStyle für Elemente mit display:none null zurück
    return (document.defaultView.getComputedStyle(testelement, null).getPropertyValue('display') == 'none'); // standardkonforme Browser
  }
  if(testelement.currentStyle) return(testelement.currentStyle.display == 'none'); // Extrawurst für IE

  return false; // im Zweifel lieber nein sagen -> Benutzer bekommt Seite ohne Drag&Drop //
}

function initDragDrop() // ändert den Mauscursor für die beweglichen Projekte
{
  if(styloStyleTest())
  {
    if(document.getElementById('dragdrop_m0')) document.getElementById('dragdrop_m0').style.cursor = 'move';
    if(document.getElementById('dragdrop_m1')) document.getElementById('dragdrop_m1').style.cursor = 'move';
  }
}

function starteDragDrop(p_event, p_element) // beginnt Dragging, wenn auf ein Element geklickt wurde
{
  if(styloStyleTest())
  {
    var mousex = document.all ? (window.event.x + document.body.scrollLeft - document.body.clientLeft) : (p_event.pageX); // IE : standardkonforme Browser
    var mousey = document.all ? (window.event.y + document.body.scrollTop - document.body.clientTop) : (p_event.pageY); // IE : standardkonforme Browser
    var obj = document.getElementById(p_element);
    var objx = 0;
    var objy = 0;
    if(obj.offsetParent) // IE
    {
      while(obj.offsetParent)
      {
	objx += obj.offsetLeft;
	objy += obj.offsetTop;
	obj = obj.offsetParent;
      }
    }
    else // standardkonforme Browser
    {
      if(obj.x) objx = obj.x;
      if(obj.y) objy = obj.y;
    }

    dragDropElement = p_element;
    dragDropX = mousex - objx;
    dragDropY = mousey - objy;
    document.onmousemove = verarbeiteDragDrop;
    document.onmouseup = stoppeDragDrop;
  }
}

function verarbeiteDragDrop(p_event) // Draggt das Element entlang der Mausbewegung
{
  var x = document.all ? (window.event.x + document.body.scrollLeft - document.body.clientLeft) : (p_event.pageX); // IE : standardkonforme Browser
  var y = document.all ? (window.event.y + document.body.scrollTop - document.body.clientTop) : (p_event.pageY); // IE : standardkonforme Browser
  if(dragDropElement)
  {
    document.getElementById(dragDropElement).style.left = x - dragDropX + 'px';
    document.getElementById(dragDropElement).style.top = y - dragDropY + 'px';
    if(window.getSelection)
    {
      var sel = window.getSelection();
      if(sel.removeAllRanges) sel.removeAllRanges(); // standardkonforme Browser
      if(sel.empty) sel.empty(); // Safari
    }
    else if(document.selection) document.selection.empty(); // IE
  }
}

function stoppeDragDrop() // beendet das Dragging
{
  document.onmousemove = null;
  document.onmouseup = null;
  dragDropElement = '';
}

