/***************************************************************************
*   Shivas Wissen 1.2 - Literaturebased Knowledge Management
*   (C) 2002-2005 Daniel Wrana
*   http://www.wissen.selbstlernarchitekturen.info
*   Distributed under the terms of the GNU General Public License v2
****************************************************************************
*   Some Code from "drag demo":
*   Copyright 2001 by Mike Hall. http://www.brainjar.com
***************************************************************************/

// Determine browser and version.
// Global object to hold drag information.

var winObj = new Object();

function setResizeWin (event, id) {

  winObj.mainEl = document.getElementById(id + "_main");
  winObj.titleEl = document.getElementById(id + "_title");
  winObj.contentEl = document.getElementById(id + "_content");
  winObj.stateEl  = document.getElementById(id + "_state");
  winObj.iframeEl = document.getElementById(id + "_iframe");
  winObj.cursorStartX = getCursorPosX(event);
  winObj.cursorStartY = getCursorPosY(event);

  // Save starting positions
  winObj.mainStartWidth     = parseInt(winObj.mainEl.style.width, 10);
  winObj.mainStartHeight    = parseInt(winObj.mainEl.style.height,  10);
  winObj.titleStartWidth    = parseInt(winObj.titleEl.style.width, 10);
  winObj.contentStartWidth  = parseInt(winObj.contentEl.style.width, 10);
  winObj.contentStartHeight = parseInt(winObj.contentEl.style.height,  10);
  winObj.stateStartWidth    = parseInt(winObj.stateEl.style.width, 10);
  winObj.stateStartTop      = parseInt(winObj.stateEl.style.top,  10);
  winObj.mainCurrentHeight  = parseInt(winObj.mainEl.style.height,  10);

  setFocusWin (id);

  // Capture mousemove and mouseup events on the page.
  addEvent(document, "mousemove", resizeWin);
  addEvent(document, "mouseup", unsetMoveResize);
  stopEvent (event);
}

function resizeWin (event) {

  var x, y;
  x = getCursorPosX(event);
  y = getCursorPosY(event);

  // resize win by the same amount the cursor has moved.
  var mainWidth     = (winObj.mainStartWidth  + x - winObj.cursorStartX);
  var mainHeight    = (winObj.mainStartHeight + y - winObj.cursorStartY);
  if (winObj.iframeEl) {
    winObj.iframeEl.style.width = (mainWidth > 40) ? mainWidth + "px" : "40px";
    winObj.iframeEl.style.height  = (height > 20) ? height + "px" : "20px";
  }
  winObj.mainEl.style.width     = (mainWidth > 40) ? mainWidth + "px" : "40px";
  winObj.mainEl.style.height    = (mainHeight > 20) ? mainHeight + "px" : "20px";
  if (mainHeight > 20 && mainWidth > 40) {
    var width    = (winObj.titleStartWidth  + x - winObj.cursorStartX);
    winObj.titleEl.style.width    = (width > 40) ? width + "px" : "40px";
    var width  = (winObj.contentStartWidth  + x - winObj.cursorStartX);
    winObj.contentEl.style.width  = (width > 40) ? width + "px" : "40px";;
    var height = (winObj.contentStartHeight + y - winObj.cursorStartY);
    winObj.contentEl.style.height = (height > 20) ? height + "px" : "20px";
    var width    = (winObj.stateStartWidth  + x - winObj.cursorStartX);
    winObj.stateEl.style.width    = (width > 40) ? width + "px" : "40px";
    var top      = (winObj.stateStartTop + y - winObj.cursorStartY);
    winObj.stateEl.style.top      = (top > 0) ? top + "px" : "0px";
  }

  winObj.mainCurrentHeight      = parseInt(winObj.mainEl.style.height,  10);

  stopEvent (event);
}

function minimizeWin(id) {
  // Save starting positions
  winObj.mainCurrentHeight  = parseInt(winObj.mainEl.style.height,  10);
  winObj.minimized = true;

  iframeEl = document.getElementById(id + "_iframe");
  if (iframeEl) iframeEl.style.height = '23px';
  document.getElementById(id + "_main").style.height = '23px';
  document.getElementById(id + "_content").style.display='none';
  document.getElementById(id + "_state").style.display='none';
}

function maximizeWin(id, height) {
  if (typeof(winObj.minimized) != "undefined" && winObj.minimized == false) return;
  winObj.minimized = false;
  if (winObj.mainCurrentHeight == "undefined") winObj.mainCurrentHeight = height;
  iframeEl = document.getElementById(id + "_iframe");
  if (iframeEl) iframeEl.style.height = winObj.mainCurrentHeight + 'px';
  document.getElementById(id + "_main").style.height = winObj.mainCurrentHeight + 'px';
  document.getElementById(id + "_content").style.display = 'block';
  document.getElementById(id + "_state").style.display = 'block';
}

function setMoveWin (event, id) {

  winObj.mainEl = document.getElementById(id + "_main");
  winObj.iframeEl = document.getElementById(id + "_iframe");

  // Save starting positions of cursor and element.
  winObj.cursorStartX = getCursorPosX(event);
  winObj.cursorStartY = getCursorPosY(event);
  winObj.elStartLeft  = parseInt(winObj.mainEl.style.left, 10);
  winObj.elStartTop   = parseInt(winObj.mainEl.style.top,  10);

  setFocusWin (id);

  // Capture mousemove and mouseup events on the page.
  addEvent(document, "mousemove", moveWin);
  addEvent(document, "mouseup", unsetMoveResize);
  stopEvent (event);
}

function moveWin (event) {

  var x, y;
  x = getCursorPosX(event);
  y = getCursorPosY(event);

  // Move drag element by the same amount the cursor has moved.
  winObj.mainEl.style.left = (winObj.elStartLeft + x - winObj.cursorStartX) + "px";
  winObj.mainEl.style.top  = (winObj.elStartTop  + y - winObj.cursorStartY) + "px";
  if (winObj.iframeEl) winObj.iframeEl.style.left = (winObj.elStartLeft + x - winObj.cursorStartX) + "px";
  if (winObj.iframeEl) winObj.iframeEl.style.top  = (winObj.elStartTop  + y - winObj.cursorStartY) + "px";

  stopEvent (event);
}

function unsetMoveResize (event) {
  removeEvent(document, "mousemove", moveWin);
  removeEvent(document, "mousemove", resizeWin);
  removeEvent(document, "mouseup",   unsetMoveResize);
}

function setFocusWin (id) {
  iframe = document.getElementById(id + "_iframe");

  winObj.mainEl = document.getElementById(id + "_main");
  if (iframe) winObj.iframeEl = document.getElementById(id + "_iframe");
  var titleNode = document.getElementById(id + "_title");
  var stateNode = document.getElementById(id + "_state");

  // Update element's z-index.
  windowTopIndex = windowTopIndex + 2;
  winObj.mainEl.style.zIndex = windowTopIndex;
  if (iframe) winObj.iframeEl.style.zIndex = windowTopIndex - 1;

  var divAnz = document.getElementsByTagName("div").length;
  for (var i = 0; i < divAnz; i++) {
     divTag = eval(document.getElementsByTagName("div")[i]);
     if (divTag.id.match(/_title$/)) removeClass(divTag, "winMainActive");
     if (divTag.id.match(/_state$/)) removeClass(divTag, "winStateActive");
  }
  addClass(titleNode, "winMainActive");
  addClass(stateNode, "winStateActive");
}

function closeWin(id){
    iframeEl = document.getElementById(id + "_iframe");
    if (iframeEl) iframeEl.style.display = 'none';
    document.getElementById(id + "_main").style.display = 'none';
}

function getCursorPosX (event) {
  return (!document.all) 
       ? event.clientX + window.scrollX
       : window.event.clientX + document.documentElement.scrollLeft + document.body.scrollLeft;
}

function getCursorPosY (event) {
  return (!document.all) 
       ? event.clientY + window.scrollY
       : window.event.clientY + document.documentElement.scrollTop + document.body.scrollTop;
}
