// Determine browser type (Netscape 6.0/6.1+ or IE 5.5/6.0).

var isIE5   = (navigator.userAgent.indexOf("MSIE 5.0") > 0  | 
			   navigator.userAgent.indexOf("MSIE 5.5") > 0  |
               navigator.userAgent.indexOf("MSIE 6.0") > 0) ? 1 : 0;
var isNS6   = (navigator.userAgent.indexOf("Gecko")    > 0) ? 1 : 0;
var isNS6p0 = (navigator.userAgent.indexOf("6.0")      > 0) ? 1 : 0 & isNS6;

var BH = (isIE5) ? screen.Height : window.innerHeight;
BH = BH-20;
var BW = (isIE5) ? screen.Width : window.innerWidth;
BW = BW-20;

var defaultvalues = new Array();
var no_win=0

//=============================================================================
// Window Object
//=============================================================================

function Window(el) {

  var i, mapList, mapName;

  // Get window components.

  this.frame           = el;
  this.titleBar        = winFindByClassName(el, "titleBar");
  this.titleBarText    = winFindByClassName(el, "titleBarText");
  this.titleBarButtons = winFindByClassName(el, "titleBarButtons");
  this.clientArea      = winFindByClassName(el, "clientArea");

  // Find matching button image map.

  mapName = this.titleBarButtons.useMap.substr(1);
  mapList = document.getElementsByTagName("MAP");
  for (i = 0; i < mapList.length; i++)
    if (mapList[i].name == mapName)
      this.titleBarMap = mapList[i];

  // Save colors.

  this.activeFrameBackgroundColor  = this.frame.style.backgroundColor;
  this.activeFrameBorderColor      = this.frame.style.borderColor;
  this.activeTitleBarColor         = this.titleBar.style.backgroundColor;
  this.activeTitleTextColor        = this.titleBar.style.color;
  this.activeClientAreaBorderColor = this.clientArea.style.borderColor;
  if (isIE5)
    this.activeClientAreaScrollbarColor = this.clientArea.style.scrollbarBaseColor;

  // Save images.

  this.activeButtonsImage   = this.titleBarButtons.src;
  this.inactiveButtonsImage = this.titleBarButtons.lowsrc;

  // Set flags.

  this.isOpen      = false;
  this.isMinimized = false;
  this.isMaximized = false;



  // Set methods.

  this.open       = winOpen;
  this.close      = winClose;
  this.minimize   = winMinimize;
  this.maximize   = winMaximize;
  this.restore    = winRestore;
  this.makeActive = winMakeActive;

  // Set up event handling.

  this.frame.parentWindow = this;
  this.frame.onmousemove  = winResizeCursorSet;
  this.frame.onmouseout   = winResizeCursorRestore;
  this.frame.onmousedown  = winResizeDragStart;

  //Storing the default values
  if (el.className == "window")
  {
  no_win = no_win+1;
  defaultvalues[no_win] = new Array(4);
  defaultvalues[no_win][0] = this.frame.style.width;
  defaultvalues[no_win][1] = this.frame.style.top;
  defaultvalues[no_win][2] = this.frame.style.left;
  defaultvalues[no_win][3] = this.clientArea.style.height;
  }
  

  this.titleBar.parentWindow = this;
  this.titleBar.onmousedown  = winMoveDragStart;

  this.clientArea.parentWindow = this;
  this.clientArea.onclick      = winClientAreaClick;

  for (i = 0; i < this.titleBarMap.childNodes.length; i++)
    if (this.titleBarMap.childNodes[i].tagName == "AREA")
      this.titleBarMap.childNodes[i].parentWindow = this;

  // For IE, fix client area display by setting a width.

  if (isIE5)
    this.clientArea.style.width = "100%";

  // Open and minimize the window so resize limits can be found. Window is
  // immediately restored and closed afterwards.

  this.open();
  this.minimize();
  this.minimumWidth  = this.frame.offsetWidth;
  this.minimumHeight = 1;
  this.titleBarText.style.width = "";
  this.textLimit = this.frame.offsetWidth;
  this.restore();
  this.close();
}


function restoredefault(){
  var rd = 0;
  elList = document.getElementsByTagName("DIV");
  for (var i = 0; i < elList.length; i++) {
	if (elList[i].className == "window"){
		rd= rd+1;
		if (!this.isOpen) winList[elList[i].id].open();
		winList[elList[i].id].frame.style.width = defaultvalues[rd][0] ;
		winList[elList[i].id].frame.style.top = defaultvalues[rd][1] ;
		winList[elList[i].id].frame.style.left = defaultvalues[rd][2] ;
		winList[elList[i].id].clientArea.style.height = defaultvalues[rd][3] ;
	}
  }
}
//=============================================================================
// Window Methods
//=============================================================================

function winOpen() {
  if (this.isOpen)
    return;
  this.makeActive();
  this.isOpen = true;  
  if (this.isMinimized)
    this.minimize();
    this.frame.style.visibility = "visible";
}

function winClose() {

  this.frame.style.visibility = "hidden";
  this.isOpen = false;
}

function winMinimize() {

   if (!this.isOpen)
   return;

   if (this.isMinimized)
    {
		this.makeActive();
		this.titleBarText.style.width = this.oldTextWidth;
		this.clientArea.style.display = "";
		this.frame.style.width = this.restoreWidth;
		this.isMinimized = false;
	}
	else
	{
		this.makeActive();
		// Save current frame and title text widths.
		this.restoreWidth  = this.frame.style.width;
		this.oldTextWidth  = this.titleBarText.style.width;
		// Hide client area and minimize window frame and title text widths.
		this.clientArea.style.display = "none";
		if (this.minimumWidth)
			this.frame.style.width = this.minimumWidth + "px";
		else
			this.frame.style.width = "";
		this.titleBarText.style.width = winCtrl.minimizedTextWidth + "px";
		this.isMinimized = true;
	}
}

function winMaximize() {

   if (!this.isOpen)
   return;

   if (this.isMaximized)
    {
		this.makeActive();
		this.titleBarText.style.width = this.oldTextWidth;
		this.clientArea.style.height = this.oldTextHeight;
		this.frame.style.top = this.oldTextTop;
		this.frame.style.left = this.oldTextLeft;
		this.clientArea.style.display = "";
		this.frame.style.width = this.restoreWidth;
		this.isMaximized = false;
	}
	else
	{
		this.makeActive();
		// Save current frame and title text widths.
		this.restoreWidth  = this.frame.style.width;
		this.oldTextTop = this.frame.style.top;
		this.oldTextLeft = this.frame.style.left;
		this.oldTextWidth  = this.titleBarText.style.width;
		this.oldTextHeight = this.clientArea.style.height;
		this.clientArea.style.display = "";
		// Hide client area and minimize window frame and title text widths.
		this.frame.style.top = "0px";
		this.frame.style.left = "0px";
		this.frame.style.width = BW+"px";
		this.clientArea.style.height =BH+"px";
		this.isMaximized = true;
	}
}

function winRestore() {

  if (!this.isOpen || !this.isMinimized)
    return;

  this.makeActive();

  this.titleBarText.style.width = this.oldTextWidth;
  this.clientArea.style.display = "";
  this.frame.style.width = this.restoreWidth;
  this.isMinimized = false;
}

function winMakeActive() {

  if (winCtrl.active == this)
    return;

  // Inactivate the currently active window.

  if (winCtrl.active) {
    winCtrl.active.frame.style.backgroundColor    = winCtrl.inactiveFrameBackgroundColor;
    winCtrl.active.frame.style.borderColor        = winCtrl.inactiveFrameBorderColor;
    winCtrl.active.titleBar.style.backgroundColor = winCtrl.inactiveTitleBarColor;
    winCtrl.active.titleBar.style.color           = winCtrl.inactiveTitleTextColor;
    winCtrl.active.clientArea.style.borderColor   = winCtrl.inactiveClientAreaBorderColor;
    if (isIE5)
      winCtrl.active.clientArea.style.scrollbarBaseColor = winCtrl.inactiveClientAreaScrollbarColor;
    if (isNS6p0)
      winCtrl.active.clientArea.style.overflow = "hidden";
    if (winCtrl.active.inactiveButtonsImage)
      winCtrl.active.titleBarButtons.src = winCtrl.active.inactiveButtonsImage;
  }

  // Activate this window.

  this.frame.style.backgroundColor    = this.activeFrameBackgroundColor;
  this.frame.style.borderColor        = this.activeFrameBorderColor;
  this.titleBar.style.backgroundColor = this.activeTitleBarColor;
  this.titleBar.style.color           = this.activeTitleTextColor;
  this.clientArea.style.borderColor   = this.activeClientAreaBorderColor;
  if (isIE5)
    this.clientArea.style.scrollbarBaseColor = this.activeClientAreaScrollbarColor;
  if (isNS6p0)
    this.clientArea.style.overflow = "auto";
  if (this.inactiveButtonsImage)
    this.titleBarButtons.src = this.activeButtonsImage;
  this.frame.style.zIndex = ++winCtrl.maxzIndex;
  winCtrl.active = this;
}

//=============================================================================
// Event handlers.
//=============================================================================

function winClientAreaClick(event) {

  // Make this window the active one.

  this.parentWindow.makeActive();
}

//-----------------------------------------------------------------------------
// Window dragging.
//-----------------------------------------------------------------------------

function winMoveDragStart(event) {

  var target;
  var x, y;

  if (isIE5)
    target = window.event.srcElement.tagName;
  if (isNS6)
    target = event.target.tagName;

  if (target == "AREA")
    return;

  this.parentWindow.makeActive();

  // Get cursor offset from window frame.

  if (isIE5) {
    x = window.event.x;
    y = window.event.y;
  }
  if (isNS6) {
    x = event.pageX;
    y = event.pageY;
  }
  winCtrl.xOffset = winCtrl.active.frame.offsetLeft - x;
  winCtrl.yOffset = winCtrl.active.frame.offsetTop  - y;

  // Set document to capture mousemove and mouseup events.

  if (isIE5) {
    document.onmousemove = winMoveDragGo;
    document.onmouseup   = winMoveDragStop;
  }
  if (isNS6) {
    document.addEventListener("mousemove", winMoveDragGo,   true);
    document.addEventListener("mouseup",   winMoveDragStop, true);
    event.preventDefault();
  }

  winCtrl.inMoveDrag = true;
}

function winMoveDragGo(event) {

  var x, y;

  if (!winCtrl.inMoveDrag)
    return;

  // Get cursor position.

  if (isIE5) {
    x = window.event.x;
    y = window.event.y;
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (isNS6) {
    x = event.pageX;
    y = event.pageY;
    event.preventDefault();
  }

  // Move window frame based on offset from cursor.

  winCtrl.active.frame.style.left = (x + winCtrl.xOffset) + "px";
  winCtrl.active.frame.style.top  = (y + winCtrl.yOffset) + "px";
}

function winMoveDragStop(event) {

  winCtrl.inMoveDrag = false;

  // Remove mousemove and mouseup event captures on document.

  if (isIE5) {
    document.onmousemove = null;
    document.onmouseup   = null;
  }
  if (isNS6) {
    document.removeEventListener("mousemove", winMoveDragGo,   true);
    document.removeEventListener("mouseup",   winMoveDragStop, true);
  }
}

//-----------------------------------------------------------------------------
// Window resizing.
//-----------------------------------------------------------------------------

function winResizeCursorSet(event) {

  var target;
  var xOff, yOff;

  if (this.parentWindow.isMinimized || winCtrl.inResizeDrag)
    return;

  // If not on window frame, restore cursor and exit.

  if (isIE5)
    target = window.event.srcElement;
  if (isNS6)
    target = event.target;
  if (target != this.parentWindow.frame)
    return;

  // Find resize direction.

  if (isIE5) {
    xOff = window.event.offsetX;
    yOff = window.event.offsetY;
  }
  if (isNS6) {
    xOff = event.layerX;
    yOff = event.layerY;
  }
  winCtrl.resizeDirection = ""
  if (yOff <= winCtrl.resizeCornerSize)
    winCtrl.resizeDirection += "n";
  else if (yOff >= this.parentWindow.frame.offsetHeight - winCtrl.resizeCornerSize)
    winCtrl.resizeDirection += "s";
  if (xOff <= winCtrl.resizeCornerSize)
    winCtrl.resizeDirection += "w";
  else if (xOff >= this.parentWindow.frame.offsetWidth - winCtrl.resizeCornerSize)
    winCtrl.resizeDirection += "e";

  // If not on window edge, restore cursor and exit.

  if (winCtrl.resizeDirection == "") {
    this.onmouseout(event);
    return;
  }

  // Change cursor.

  if (isIE5)
    document.body.style.cursor = winCtrl.resizeDirection + "-resize";
  if (isNS6)
    this.parentWindow.frame.style.cursor = winCtrl.resizeDirection + "-resize";
}

function winResizeCursorRestore(event) {

  if (winCtrl.inResizeDrag)
    return;

  // Restore cursor.

  if (isIE5)
    document.body.style.cursor = "";
  if (isNS6)
    this.parentWindow.frame.style.cursor = "";
}

function winResizeDragStart(event) {

  var target;

  // Make sure the event is on the window frame.

  if (isIE5)
    target = window.event.srcElement;
  if (isNS6)
    target = event.target;
  if (target != this.parentWindow.frame)
    return;

  this.parentWindow.makeActive();

  if (this.parentWindow.isMinimized)
    return;

  // Save cursor position.

  if (isIE5) {
    winCtrl.xPosition = window.event.x;
    winCtrl.yPosition = window.event.y;
  }
  if (isNS6) {
    winCtrl.xPosition = event.pageX;
    winCtrl.yPosition = event.pageY;
  }

  // Save window postion and size.

  winCtrl.oldLeft   = parseInt(this.parentWindow.frame.style.left, 10);
  winCtrl.oldTop    = parseInt(this.parentWindow.frame.style.top,  10);
  winCtrl.oldWidth  = parseInt(this.parentWindow.frame.style.width,  10);
  winCtrl.oldHeight = parseInt(this.parentWindow.clientArea.style.height, 10);

  // Set document to capture mousemove and mouseup events.

  if (isIE5) {
    document.onmousemove = winResizeDragGo;
    document.onmouseup   = winResizeDragStop;
  }
  if (isNS6) {
    document.addEventListener("mousemove", winResizeDragGo,   true);
    document.addEventListener("mouseup"  , winResizeDragStop, true);
    event.preventDefault();
  }

  winCtrl.inResizeDrag = true;
}

function winResizeDragGo(event) {

 var north, south, east, west;
 var dx, dy;
 var w, h;

  if (!winCtrl.inResizeDrag)
    return;

  // Set direction flags based on original resize direction.

  north = false;
  south = false;
  east  = false;
  west  = false;
  if (winCtrl.resizeDirection.charAt(0) == "n")
    north = true;
  if (winCtrl.resizeDirection.charAt(0) == "s")
    south = true;
  if (winCtrl.resizeDirection.charAt(0) == "e" || winCtrl.resizeDirection.charAt(1) == "e")
    east = true;
  if (winCtrl.resizeDirection.charAt(0) == "w" || winCtrl.resizeDirection.charAt(1) == "w")
    west = true;

  // Find change in cursor position.

  if (isIE5) {
    dx = window.event.x - winCtrl.xPosition;
    dy = window.event.y - winCtrl.yPosition;
  }
  if (isNS6) {
    dx = event.pageX - winCtrl.xPosition;
    dy = event.pageY - winCtrl.yPosition;
  }

  // If resizing north or west, reverse corresponding amount.

  if (west)
    dx = -dx;
  if (north)
    dy = -dy;

  // Check new size.

  w = winCtrl.oldWidth  + dx;
  h = winCtrl.oldHeight + dy;
  if (w <= winCtrl.active.minimumWidth) {
    w = winCtrl.active.minimumWidth;
    dx = w - winCtrl.oldWidth;
  }
  if (h <= winCtrl.active.minimumHeight) {
    h = winCtrl.active.minimumHeight;
    dy = h - winCtrl.oldHeight;
  }

  // Resize the window.

  if (east || west)
    winCtrl.active.frame.style.width  = w + "px";
  if (north || south)
    winCtrl.active.clientArea.style.height = h + "px";

  // Clip the title bar text, if necessary.

  if (east || west) {
    if (w <= winCtrl.active.textLimit)
      winCtrl.active.titleBarText.style.width = (winCtrl.minimizedTextWidth + w - winCtrl.active.minimumWidth) + "px";
    else
      winCtrl.active.titleBarText.style.width = "";
  }

  // For a north or west resize, move the window.

  if (west)
    winCtrl.active.frame.style.left = (winCtrl.oldLeft - dx) + "px";
  if (north)
    winCtrl.active.frame.style.top  = (winCtrl.oldTop  - dy) + "px";

  if (isIE5) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (isNS6)
    event.preventDefault();
}

function winResizeDragStop(event) {

  winCtrl.inResizeDrag = false;

  // Remove mousemove and mouseup event captures on document.

  if (isIE5) {
    document.onmousemove = null;
    document.onmouseup   = null;
  }
  if (isNS6) {
    document.removeEventListener("mousemove", winResizeDragGo,   true);
    document.removeEventListener("mouseup"  , winResizeDragStop, true);
  }
}

//=============================================================================
// Utility functions.
//=============================================================================

function winFindByClassName(el, className) {

  var i, tmp;

  if (el.className == className)
    return el;

  // Search for a descendant element assigned the given class.

  for (i = 0; i < el.childNodes.length; i++) {
    tmp = winFindByClassName(el.childNodes[i], className);
    if (tmp != null)
      return tmp;
  }

  return null;
}

//=============================================================================
// Initialization code.
//=============================================================================

var winList = new Array();
var winCtrl = new Object();

function winInit() {

  var elList;

  // Initialize window control object.

  winCtrl.maxzIndex                        =   0;
  winCtrl.resizeCornerSize                 =  16;
  winCtrl.minimizedTextWidth               = 100;
  winCtrl.inactiveFrameBackgroundColor     = "#E6E4D2";
  winCtrl.inactiveFrameBorderColor         = "#E6E4D2 #505050 #404040 #e0e0e0";
  winCtrl.inactiveTitleBarColor            = "#808080";
  winCtrl.inactiveTitleTextColor           = "#000000";
  winCtrl.inactiveClientAreaBorderColor    = "#404040 #e0e0e0 #E6E4D2 #505050";
  winCtrl.inactiveClientAreaScrollbarColor = "";
  winCtrl.inMoveDrag                       = false;
  winCtrl.inResizeDrag                     = false;

  // Initialize windows, build list and find starting maximum z-index.
 elList = document.getElementsByTagName("DIV");

  for (var i = 0; i < elList.length; i++) {

	if (elList[i].className == "window")
	{
		winList[elList[i].id] = new Window(elList[i]);
		winList[elList[i].id].open();
    }
	if (elList[i].className == "window1" )
	{
		winList[elList[i].id] = new Window(elList[i]);
	}

    if (elList[i].zIndex && elList[i].zIndex > winCtrl.maxzIndex)
	{
		winCtrl.maxzIndex = elList[i].zIndex;
	}
  }
}