/****************************************************************************
*   framework.zwo 2.0
*   (C) 2002-2008 Daniel Wrana
*   http://www.tools.selbstlernarchitekturen.info
*   Distributed under the terms of the GNU General Public License v2 or later
*****************************************************************************/

// 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';
  try {
    document.getElementById(id + "_state").style.display='none';
  } catch (e) {};
}

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, response){
  if (typeof(response)!="undefined") {
    top.windowResponseValue = response;
  }
  top.document.getElementById(id + '_main').style.display = "none";
  iframeEl = top.document.getElementById(id + '_iframe');
  if (iframeEl) iframeEl.style.display = "none";
}
