// gebruik eventlistener zoals in
//http://www.brainjar.com/dhtml/drag/demo.html
//http://www.brainjar.com/dhtml/drag/
// select tekst
//http://www.dynamicdrive.com/dynamicindex9/noselect.htm
var myId = "myPreviewDiv";
var myFrame = "myHiddenFrame";
var myLnkName = "myLink";
var myCntGlobal = 0;
var blIE = false;
// currently loading link - only one at the time
var waitingToLoad = null;


if (document.all)
{ // IE
  blIE = true;
}

function myMsg(s)
{
  alert(s);
  return;
}


var dragObj = null;

function getMouseXY(evt)
{
  var myE = blIE ? window.event : evt;
  var cX = cY = null;
  if (blIE)
  {
    cX = myE.clientX;
    cY = myE.clientY;
  }
  else
  {
    cX = myE.pageX;
    cY = myE.pageY;
  }
  if (myE) myE.cancelBubble = true;

  return [cX, cY];
}

function myPreviewDrag(evt)
{
  if (!dragObj) return;
  if (!dragObj.isMoving) return;

  c = getMouseXY(evt);

  diffX = dragObj.absDragBeginX - c[0];
  diffY = dragObj.absDragBeginY - c[1];

  absPosDiv = findAbsolutePosition(dragObj);

  dragObj.style.left = absPosDiv[0] - diffX + "px";
  dragObj.style.top = absPosDiv[1] - diffY + "px";

  dragObj.absDragBeginX = c[0];
  dragObj.absDragBeginY = c[1];

}

function myPreviewEndDrag(objTd)
{
  dragObj = null;
  if (blIE)
  {
    document.detachEvent("onmousemove", myPreviewDrag);
    document.detachEvent("onmouseup",   myPreviewEndDrag);
  }
  else
  {
    document.removeEventListener("mousemove", myPreviewDrag,   true);
    document.removeEventListener("mouseup",   myPreviewEndDrag, true);
  }
}

function myPreviewBeginDrag(objTd, evt)
{
  // look for the preview div
  var objDiv = objTd;

  while (objDiv.id.indexOf(myId) != 0)
  {
    // niveau hoger gaan kijken - voor preview div
    objDiv = objDiv.parentNode;
  }

  dragObj = objDiv;
  dragObj.isMoving = true;

  c = getMouseXY(evt);
  dragObj.absDragBeginX = c[0];
  dragObj.absDragBeginY = c[1];

  if (blIE)
  {
    document.attachEvent("onmousemove", myPreviewDrag);
    document.attachEvent("onmouseup",   myPreviewEndDrag);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  else
  {
    document.addEventListener("mousemove", myPreviewDrag,   true);
    document.addEventListener("mouseup",   myPreviewEndDrag, true);
    event.preventDefault();
  }

}

function myPreviewClose(objDiv)
{
  while (objDiv.id.indexOf(myId) != 0)
  {
    // niveau hoger gaan kijken - voor preview div
    objDiv = objDiv.parentNode;
  }
  objDivParent = objDiv.parentNode;


  lnkIdName = objDiv.id.replace(myId, myLnkName);
  lnkObj = document.getElementById(lnkIdName)
  if(lnkObj)
  {
    // link attribuut weer terug zetten
    lnkObj.myShowPrev = false;
  }

  // DIV verbergen
  objDiv.style.display = 'none';
}

function myCatchMMove(objLnk, strNr, evt)
{
  if (waitingToLoad)
  {
    return;
  }

  if (objLnk.myShowPrev)
  {
    // bestaat al en is zichtbaar
    objLnk.style.cursor = "pointer";
    // detection method needed for event in mozilla
    var myE = blIE ? window.event : evt;

    myE.cancelBubble = true;
    return;
  }

  document.body.style.cursor = "wait";
  objLnk.style.cursor = "wait";
  waitingToLoad = setTimeout(function(){myShowPreviewLnk(objLnk, strNr, evt)},1000);
}

function myCatchMOut(objLnk, strNr, evt)
{
  if (!waitingToLoad)
  {
    return;
  }

  clearTimeout(waitingToLoad);
  document.body.style.cursor = "default";
  objLnk.style.cursor = "default";
  waitingToLoad = null;
}

function writeFrame(strNr, myTel)
{
  // iframe toevoegen om pagina's te laden
  var oNewFrame = document.createElement("IFRAME");
  oNewFrame.id = myFrame + strNr + myTel;
  oNewFrame.style.display = "none";
  oNewFrame.strNr = strNr;
  oNewFrame.myCnt = myTel;
  document.body.appendChild(oNewFrame);
}

function cpyFrame2Div(evt)
{
  // detection method needed for event in mozilla
  var myE = blIE ? window.event : evt;

  if (blIE)
    objParent = myE["srcElement"];
  else
    objParent = myE["target"];

  strNr = objParent["strNr"];
  myTel = objParent["myCnt"];

  var s = document.getElementById(myFrame + strNr + myTel).contentWindow.document.body.innerHTML;

  sRound = "<div class=blur>" +
      "<div class=shadow>" +
      "<div class=content>" +
      s +
      "</div>" +
      "</div>" +
      "</div>";

  document.getElementById(myId + strNr + myTel).innerHTML = sRound;

  // div laten zien
  document.getElementById(myId + strNr + myTel).style.display = "";

  // cursor weer terug zetten
  document.body.style.cursor = 'default';
}

function myShowPreviewLnk(objLnk, strNr, evt)
{
  // OnMouseMove - because OnMouseEnter does not work

  // detection method needed for event in mozilla
  var myE = (blIE) ? window.event : evt;
  // now evt is used instead

  // Zichtbaar maken en stoppen wanneer de DIV al bestaat
  if (chkState(objLnk, strNr))
  {
    // bestaat al en is nu zichtbaar gemaakt.
    if (myE) myE.cancelBubble = true;
    return;
  }

  // nieuwe link
  // alles opnieuw aanmaken
  myCntGlobal += 1;

  objLnk.myShowPrev = false;
  objLnk.myCnt = myCntGlobal;
  objLnk.id = myLnkName + strNr + myCntGlobal;

  // alleen wegschrijven wanneer deze nog niet bestaat
  if (!document.getElementById(myFrame + strNr + myCntGlobal)) writeFrame(strNr, myCntGlobal);

  var oNewDiv = document.createElement("DIV");

  // Pagina ophalen via iframe door pagina te laten laden
  oFrame = document.getElementById(myFrame + strNr + myCntGlobal);

  if (blIE)
  { // IE
  	oFrame.attachEvent('onload', cpyFrame2Div);
    oFrame.myflag = strNr;
  }
  else
  { // Mozilla, Netscape, Firefox
    oFrame.addEventListener('load', cpyFrame2Div, false);
    oFrame.myflag = strNr;
  }

  document.getElementById(myFrame + strNr + myCntGlobal).src =  "preview.asp?num=" + strNr + "&print=no";

  intPreviewDivWidth = 500;
  // find the current absolute position
  myAbsPos = findAbsolutePosition(objLnk)
  if (myAbsPos[0] + intPreviewDivWidth > document.documentElement.scrollWidth)
  {
    // correct position - move to left to keep it within the screen
    myAbsPos[0] = document.documentElement.scrollWidth - intPreviewDivWidth - 40
  }

  oNewDiv.id = myId + strNr + myCntGlobal;
  oNewDiv.strNr = strNr;
  oNewDiv.myCnt = myCntGlobal;
  oNewDiv.style.position = "absolute";

  oNewDiv.style.left = myAbsPos[0] + "px";
  oNewDiv.style.top = myAbsPos[1] + "px";
  oNewDiv.style.zIndex = "20";

  oNewDiv.style.width = intPreviewDivWidth + "px";


  oNewDiv.style.display = "none";

  // voeg de div toe
  if (objLnk.parentNode.childNodes.length == 1)
  {
    // maar een childnode
    objLnk.parentNode.appendChild(oNewDiv);
  }
  else
  {
    // meerdere childnodes - objLnk.nextSibling is nu niet null
    objLnk.parentNode.insertBefore(oNewDiv, objLnk.nextSibling);
  }

  objLnk.myShowPrev = true;

  // afsluiten
  waitingToLoad = null;
  document.body.style.cursor = "default";
  objLnk.style.cursor = "default";
}

function findAbsolutePosition(obj)
{
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}

function chkState(objLnk, strNr)
{
  divObj = document.getElementById(myId + strNr + objLnk.myCnt)
  if(divObj)
  {
    // bestaat en maak zichtbaar
    divObj.style.display = "";
    return true;
  }

  return false;
}

function rmDiv(objLnk, strNr, evt)
{
  var len = objLnk.parentNode.childNodes.length;

  for(var i = 0; i < len; i++)
  {
    if(objLnk.childNodes[i].id == myId + strNr)
    {
      objLnk.removeChild(objLnk.childNodes[i]);
    }
  }
}

function myHidePreviewLnk(objLnk, strNr, evt)
{
  rmDiv(objLnk, strNr, evt);
}
