var win_create_i = 0;
var win_info = new Array();

// by phil:
function createWindow(title, ajax, paramlist)
	{
	var h_body_context = document.createElement('DIV');
	++win_create_i;
	var win_create_id = 'win' + win_create_i;
	var win_create_h = createWindowHandle(title, ajax, h_body_context, win_create_id);
//	win_create_h.innerHTML = win_create_h.innerHTML;
//	win_create_h.innerText = win_create_h.innerText;

	document.getElementById('winDesktop').appendChild(win_create_h);
	winList[win_create_id] = new Window(win_create_h); //Window(document.getElementById(win_create_id)); //, win_create_id);
	winList[win_create_id].open();

	h_body_context.appendChild(document.createTextNode('Loading '+ajax+'...'));
//	$(h_body_context.titlebar_pointer).text($(h_body_context.titlebar_pointer).data('original_title'));

	//$(h_body_context).load(ajax); //post(ajax, {param1: 'BLABLA' }, function(xml){alert($)});
/*	$(h_body_context).one("load", function(e)
		{
		alert('changed');
		}); */

/*	$.extend
		(
		temp_data,
		{ title: title, ajax : ajax }
		); */

	var win_server_location = document.location.href.split('/');
	win_server_location = win_server_location[3];

	var win_server_id = (new Date).getTime() + '_' + win_create_id;
	win_info[win_create_id] = new Array();
	win_info[win_create_id].push
		({
		win_server_location: win_server_location,
		win_server_id: win_server_id,
		h_body_context: h_body_context,
		paramlist: paramlist,
		title: title,
		ajax: ajax,
		timer1: new Date
		});

	$(h_body_context).data('win_create_id', win_create_id);

	gui_window_reload(false, false, win_create_id, true);

//	$(h_body_context).load('loader.php?p='+ajax+'&id='+win_server_id, paramlist, r3rpt_receive);

/*	$.post
		(
		ajax,
		{
		ajax: ajax,
		test: "test1"
		},
		function(data)
			{
			this.
			},
		"text"
		); */
//	$(h_body_context).load(ajax, paramlist);

	return false;
	}
function createWindowHandle(title, ajax, h_body_context, win_create_id)
	{

	/* this will dynamically create a window client-side */
	
	// if (document.getElementById && document.createElement) { ; } else alert('Level 1 DOM not supported');

	// build context menu
	h_context_menu4 = document.createElement('A');
	h_context_menu4.setAttribute('className', 'menuItem');
	h_context_menu4.setAttribute('class', 'menuItem');
	h_context_menu4.setAttribute('href', '#');
	h_context_menu4.onclick = function(e){eval("gui_window_reload(e, this,'"+win_create_id+"')")};
	$(h_context_menu4).text('Reload');

	h_context_menu_sep = document.createElement('DIV');
	h_context_menu_sep.setAttribute('class', 'menuItemSep');
	h_context_menu_sep.setAttribute('className', 'menuItemSep');

	h_context_menu1 = document.createElement('A');
	h_context_menu1.setAttribute('className', 'menuItem');
	h_context_menu1.setAttribute('class', 'menuItem');
	h_context_menu1.setAttribute('href', '#');
	h_context_menu1.onclick = function(e){eval("gui_log_ajax(e, this,'"+win_create_id+"')")};
	$(h_context_menu1).text('AJAX log');

	h_context_menu2 = document.createElement('A');
	h_context_menu2.setAttribute('className', 'menuItem');
	h_context_menu2.setAttribute('class', 'menuItem');
	h_context_menu2.setAttribute('href', '#');
	h_context_menu2.onclick = function(e){eval("gui_log_sql(e, this,'"+win_create_id+"')")};
	$(h_context_menu2).text('SQL log');
	
	h_context_menu3 = document.createElement('A');
	h_context_menu3.setAttribute('className', 'menuItem');
	h_context_menu3.setAttribute('class', 'menuItem');
	h_context_menu3.setAttribute('href', '#');
	h_context_menu3.onclick = function(e){eval("gui_log_php(e, this,'"+win_create_id+"')")};
	$(h_context_menu3).text('PHP log');

	h_context_menu = document.createElement('DIV');
	h_context_menu.setAttribute('className', 'menu');
	h_context_menu.setAttribute('class', 'menu');
	h_context_menu.setAttribute('id', 'winContext'+win_create_i);
	//h_context_menu.setAttribute('visibility', 'hidden');
	h_context_menu.onmouseover = function(e){menuMouseover(e);}

	h_context_menu.appendChild(h_context_menu4);
	h_context_menu.appendChild(h_context_menu_sep);
	h_context_menu.appendChild(h_context_menu1);
	h_context_menu.appendChild(h_context_menu2);
	h_context_menu.appendChild(h_context_menu3);
	$(h_context_menu).data('win_create_id', win_create_id);
	document.getElementById('winDesktop').appendChild(h_context_menu);

	// build title bar
	h_titlebar_area4 = document.createElement('AREA');
	h_titlebar_area4.setAttribute('title', 'Info');
	h_titlebar_area4.setAttribute('coords'
//		, '0,0,15,13');
		, '0,0,0,0');
	h_titlebar_area4.setAttribute('shape', 'rect');
	h_titlebar_area4.setAttribute('href', '#');
	h_titlebar_area4.setAttribute('nohref', 'true');
	//h_titlebar_area4.setAttribute('onClick', 'this.parentWindow.minimize();return false;');
	//h_titlebar_area4.onclick = function(e){this.parentWindow.makeActive();buttonClick(e,'winContext'+win_create_i);return false;}
	h_titlebar_area1 = document.createElement('AREA');
	h_titlebar_area1.setAttribute('title', 'Minimize');
	h_titlebar_area1.setAttribute('coords', '16,0,31,13');
	h_titlebar_area1.setAttribute('shape', 'rect');
	h_titlebar_area1.setAttribute('href', '#');
	//h_titlebar_area1.setAttribute('onClick', 'this.parentWindow.minimize();return false;');
	h_titlebar_area1.onclick = function(){this.parentWindow.minimize();return false;}
	h_titlebar_area2 = document.createElement('AREA');
	h_titlebar_area2.setAttribute('title', 'Restore');
	h_titlebar_area2.setAttribute('coords', '32,0,47,13');
	h_titlebar_area2.setAttribute('shape', 'rect');
	h_titlebar_area2.setAttribute('href', '#');
	//h_titlebar_area2.setAttribute('onClick', 'this.parentWindow.restore();return false;');
	h_titlebar_area2.onclick = function(){this.parentWindow.restore();return false;}
	h_titlebar_area3 = document.createElement('AREA');
	h_titlebar_area3.setAttribute('title', 'Close');
	h_titlebar_area3.setAttribute('coords', '50,0,65,13');
	h_titlebar_area3.setAttribute('shape', 'rect');
	h_titlebar_area3.setAttribute('href', '#');
	//h_titlebar_area3.setAttribute('onClick', 'this.parentWindow.close();return false;');
	h_titlebar_area3.onclick = function(){this.parentWindow.close();return false;}

	h_titlebar_map = document.createElement('MAP');
	h_titlebar_map.setAttribute('name', 'winButtons'+win_create_i);
	h_titlebar_map.setAttribute('id', 'winButtons'+win_create_i);
	h_titlebar_map.appendChild(h_titlebar_area4);
	h_titlebar_map.appendChild(h_titlebar_area1);
	h_titlebar_map.appendChild(h_titlebar_area2);
	h_titlebar_map.appendChild(h_titlebar_area3);

	h_titlebar_buttons = document.createElement('IMG');
	h_titlebar_buttons.setAttribute('class', 'titleBarButtons');
	h_titlebar_buttons.setAttribute('className', 'titleBarButtons'); // gg MSIE
	h_titlebar_buttons.setAttribute('width', '66');
	h_titlebar_buttons.setAttribute('height', '14');
	h_titlebar_buttons.setAttribute('useMap', '#winButtons'+win_create_i);
	h_titlebar_buttons.setAttribute('src', 'graphics/buttons3.GIF');
	//h_titlebar_buttons.style.cssText = 'z-index:1';

//	h_titlebar_text = $('<span />');

	h_titlebar_text = document.createElement('SPAN');
	h_titlebar_text.setAttribute('class', 'titleBarText');
	h_titlebar_text.setAttribute('className', 'titleBarText');
	//h_titlebar_text.appendChild(document.createTextNode(title));
/*	$(h_titlebar_text).data('update_title', function(suf, pre){
		this.appendChild(document.createTextNode(suf+$(this).data('original_title')+pre));
		});
	$(h_titlebar_text).data('update_title')();
	*/
	$(h_titlebar_text).data('original_title', title);
	h_titlebar_text.setAttribute('class', 'titleBarText');
	h_titlebar_text.setAttribute('className', 'titleBarText');
	$(h_titlebar_text).text(title);

	h_body_context.titlebar_pointer = h_titlebar_text;

	h_titlebar = document.createElement('DIV');
	h_titlebar.setAttribute('class', 'titleBar');
	h_titlebar.setAttribute('className', 'titleBar');
	h_titlebar.appendChild(h_titlebar_text);
	h_titlebar.appendChild(h_titlebar_buttons);
	h_titlebar.appendChild(h_titlebar_map);

	// build body
	h_body_context.setAttribute('class', 'clientArea clientAreaTextbox');
	h_body_context.setAttribute('className', 'clientArea clientAreaTextbox');
	h_body_context.style.cssText = 'height: 300px';
	h_body_context.style.height = '300px';
//alert(h_body_context.style.height);

	h_body = document.createElement('DIV');
	h_body.appendChild(h_body_context);

	// build rest of window
	h = document.createElement('DIV');
	h.setAttribute('class', 'window');
	h.setAttribute('className', 'window');
	h.setAttribute('id', 'win'+win_create_i);

	/*
	if (browser.isIE)
		{
		h.style.setAttribute('cssText', 'left:25px; top:25px; z-index:1; width:480px; height:238px; visibility:visible;');
		h.style.width = "480px";
		h.style.height = "238px";
		}
	else
		h.setAttribute('style', 'left:25px; top:25px; z-index:1; width:480px; height:238px; visibility:visible;');
	*/
	//height:238px; 
	h.style.cssText = 'left:25px; top:25px; z-index:1; width:480px; visibility:visible;';

	h.appendChild(h_titlebar);
	h.appendChild(h_body);

	h.h_context_menu = h_context_menu;

	return h;
	}
/*<div id="winTemplate" class="window" style="left: 25px; top: 25px; z-index: 1; width: 480px; visibility: visible;">
<div class="titleBar">
<span class="titleBarText" style="">Template</span>
<img class="titleBarButtons" width="50" height="14" usemap="#winButtons1" src="graphics/buttons2.GIF" alt=""/>
<map name="winButtons1">
<area onclick="this.parentWindow.minimize();return false;" title="Minimize" alt="" href="#" coords="0,0,15,13" shape="rect"/>
<area onclick="this.parentWindow.restore();return false;" title="Restore" alt="" href="#" coords="16,0,31,13" shape="rect"/>
<area onclick="this.parentWindow.close();return false;" title="Close" alt="" href="#" coords="34,0,49,13" shape="rect"/>
</map>
</div>
<div class="winOptOpened" style="display: none;">opened</div>
<div class="clientArea clientAreaTextbox" style="height: 200px;">testing testing Fri, 20 Jun 2008 15:45:12 -0400</div>
</div>*/




//*****************************************************************************
// Do not remove this notice.
//
// Copyright 2001 by Mike Hall.
// See http://www.brainjar.com for terms of use.
//*****************************************************************************

// Determine browser and version.

function Browser() {

  var ua, s, i;

  this.isIE    = false;  // Internet Explorer
  this.isNS    = false;  // Netscape
  this.version = null;

  ua = navigator.userAgent;

  s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}

var browser = new Browser();

//=============================================================================
// Window Object
//=============================================================================

function Window(el, clone_id) {

  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");

	if (clone_id)
		{
//		alert(this.titleBarButtons.id);
//		alert(this.titleBarButtons.name);
		}
	else
		{
		  // 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 (browser.isIE)
    this.activeClientAreaScrollbarColor = this.clientArea.style.scrollbarBaseColor;

  // Save images.

  this.activeButtonsImage   = this.titleBarButtons.src;
  this.inactiveButtonsImage = this.titleBarButtons.longDesc;

  // Set flags.

  this.isOpen      = false;
  this.isMinimized = false;

  // Set methods.

  this.open       = winOpen;
  this.close      = winClose;
  this.minimize   = winMinimize;
  this.restore    = winRestore;
  this.makeActive = winMakeActive;

  // Set up event handling.

  this.frame.parentWindow = this;
  if (!winFindByClassName(el, "winOptFixedsize"))
	{
	this.frame.onmousemove  = winResizeCursorSet;
	this.frame.onmouseout   = winResizeCursorRestore;
	this.frame.onmousedown  = winResizeDragStart;
	}

  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;

  // Calculate the minimum width and height values for resizing
  // and fix any initial display problems.

  var initLt, initWd, w, dw;

  // Save the inital frame width and position, then reposition
  // the window.

  initLt = this.frame.style.left;
  initWd = parseInt(this.frame.style.width);
  this.frame.style.left = -this.titleBarText.offsetWidth + "px";

  // For IE, start calculating the value to use when setting
  // the client area width based on the frame width.
  if (browser.isIE) {
    this.titleBarText.style.display = "none";
    w = this.clientArea.offsetWidth;
    this.widthDiff = this.frame.offsetWidth - w;
    this.clientArea.style.width = w + "px";
    dw = this.clientArea.offsetWidth - w;
    w -= dw;     
    this.widthDiff += dw;
    this.titleBarText.style.display = "";
  }

  // Find the difference between the frame's style and offset
  // widths. For IE, adjust the client area/frame width
  // difference accordingly.

  w = this.frame.offsetWidth;
  this.frame.style.width = w + "px";
  dw = this.frame.offsetWidth - w;
  w -= dw;     
  this.frame.style.width = w + "px";
  if (browser.isIE)
    this.widthDiff -= dw;

  // Find the minimum width for resize.

  this.isOpen = true;  // Flag as open so minimize call will work.
  this.minimize();
  // Get the minimum width.
  if (browser.isNS && browser.version >= 1.2)
    // For later versions of Gecko.
    this.minimumWidth = this.frame.offsetWidth;
  else
    // For all others.
    this.minimumWidth = this.frame.offsetWidth - dw;

  // Find the frame width at which or below the title bar text will
  // need to be clipped.

  this.titleBarText.style.width = "";
  this.clipTextMinimumWidth = this.frame.offsetWidth - dw;

  // Set the minimum height.

  this.minimumHeight = 1;

  // Restore window. For IE, set client area width.

  this.restore();
  this.isOpen = false;  // Reset flag.
  initWd = Math.max(initWd, this.minimumWidth);
  this.frame.style.width = initWd + "px";
  if (browser.isIE)
    this.clientArea.style.width = (initWd - this.widthDiff) + "px";

  // Clip the title bar text if needed.

  if (this.clipTextMinimumWidth >= this.minimumWidth)
    this.titleBarText.style.width = (winCtrl.minimizedTextWidth + initWd - this.minimumWidth) + "px";

  // Restore the window to its original position.

  this.frame.style.left = initLt;

if (winFindByClassName(el, "winOptOpened"))
	this.open();

}

//=============================================================================
// Window Methods
//=============================================================================

var winOpenX = 0;
var winOpenY = 0;

function winOpen() {

  if (this.isOpen)
    return;

	winOpenX += 25;
	winOpenY += 25;
	this.frame.style.left = winOpenX + "px";
	this.frame.style.top = winOpenY + "px";
	winOpenX %= 250;
	winOpenY %= 250;

  // Restore the window and make it visible.

  this.makeActive();
  this.isOpen = true;
  if (this.isMinimized)
    this.restore();
  this.frame.style.visibility = "visible";
}

function winClose() {

  // Hide the window.

  this.frame.style.visibility = "hidden";
  this.isOpen = false;
  document.getElementById('winDesktop').removeChild(this.frame.h_context_menu);
  document.getElementById('winDesktop').removeChild(this.frame);
}

function winMinimize() {
  if (!this.isOpen || this.isMinimized)
    return;

  this.makeActive();

  // Save current frame and title bar text widths.

  this.restoreFrameWidth = this.frame.style.width;
  this.restoreTextWidth = this.titleBarText.style.width;

  // Disable client area display.

  this.clientArea.style.display = "none";

  // Minimize frame and title bar text widths.

  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 winRestore() {

  if (!this.isOpen || !this.isMinimized)
    return;

  this.makeActive();

  // Enable client area display.

  this.clientArea.style.display = "";

  // Restore frame and title bar text widths.

  this.frame.style.width = this.restoreFrameWidth;
  this.titleBarText.style.width = this.restoreTextWidth;

  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 (browser.isIE)
      winCtrl.active.clientArea.style.scrollbarBaseColor = winCtrl.inactiveClientAreaScrollbarColor;
    if (browser.isNS && browser.version < 6.1)
      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 (browser.isIE)
    this.clientArea.style.scrollbarBaseColor = this.activeClientAreaScrollbarColor;
  if (browser.isNS && browser.version < 6.1)
    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 (browser.isIE)
    target = window.event.srcElement.tagName;
  if (browser.isNS)
    target = event.target.tagName;

  if (target == "AREA")
    return;

  this.parentWindow.makeActive();

  // Get cursor offset from window frame.

  if (browser.isIE) {
    x = window.event.x;
    y = window.event.y;
  }
  if (browser.isNS) {
    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 (browser.isIE) {
    document.onmousemove = winMoveDragGo;
    document.onmouseup   = winMoveDragStop;
  }
  if (browser.isNS) {
    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 (browser.isIE) {
    x = window.event.x;
    y = window.event.y;
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    x = event.pageX;
    y = event.pageY;
    event.preventDefault();
  }

  // Move window frame based on offset from cursor.
  if ((x + winCtrl.xOffset) > 0)
	winCtrl.active.frame.style.left = (x + winCtrl.xOffset) + "px";
  if ((y + winCtrl.yOffset) > 0) // > 24 for menubar
	winCtrl.active.frame.style.top  = (y + winCtrl.yOffset) + "px";
}

function winMoveDragStop(event) {

  winCtrl.inMoveDrag = false;

  // Remove mousemove and mouseup event captures on document.

  if (browser.isIE) {
    document.onmousemove = null;
    document.onmouseup   = null;
  }
  if (browser.isNS) {
    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 (browser.isIE)
    target = window.event.srcElement;
  if (browser.isNS)
    target = event.target;
  if (target != this.parentWindow.frame)
    return;

  // Find resize direction.

  if (browser.isIE) {
    xOff = window.event.offsetX;
    yOff = window.event.offsetY;
  }
  if (browser.isNS) {
    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 (browser.isIE)
    document.body.style.cursor = winCtrl.resizeDirection + "-resize";
  if (browser.isNS)
    this.parentWindow.frame.style.cursor = winCtrl.resizeDirection + "-resize";
}

function winResizeCursorRestore(event) {

  if (winCtrl.inResizeDrag)
    return;

  // Restore cursor.

  if (browser.isIE)
    document.body.style.cursor = "";
  if (browser.isNS)
    this.parentWindow.frame.style.cursor = "";
}

function winResizeDragStart(event) {

  var target;

  // Make sure the event is on the window frame.

  if (browser.isIE)
    target = window.event.srcElement;
  if (browser.isNS)
    target = event.target;
  if (target != this.parentWindow.frame)
    return;

  this.parentWindow.makeActive();

  if (this.parentWindow.isMinimized)
    return;

  // Save cursor position.

  if (browser.isIE) {
    winCtrl.xPosition = window.event.x;
    winCtrl.yPosition = window.event.y;
  }
  if (browser.isNS) {
    winCtrl.xPosition = event.pageX;
    winCtrl.yPosition = event.pageY;
  }

  // Save window frame position and current window 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 (browser.isIE) {
    document.onmousemove = winResizeDragGo;
    document.onmouseup   = winResizeDragStop;
  }
  if (browser.isNS) {
    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 (browser.isIE) {
    dx = window.event.x - winCtrl.xPosition;
    dy = window.event.y - winCtrl.yPosition;
  }
  if (browser.isNS) {
    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. For IE, keep client area and frame widths in synch.

  if (east || west) {
    winCtrl.active.frame.style.width = w + "px";
    if (browser.isIE)
      winCtrl.active.clientArea.style.width = (w - winCtrl.active.widthDiff) + "px";
  }
//alert(winCtrl.active.clientArea.style.height + ":" + h+"\n"+winCtrl.active.clientArea.style.width + ":" + w);

  if (north || south)
    winCtrl.active.clientArea.style.height = h + "px";

  // Clip the title bar text, if necessary.

  if (east || west) {
    if (w < winCtrl.active.clipTextMinimumWidth)
      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)
    if ((winCtrl.oldLeft - dx) > 0)
    winCtrl.active.frame.style.left = (winCtrl.oldLeft - dx) + "px";
  if (north)
    if ((winCtrl.oldTop - dy) > 0) // > 24 for menubar
    winCtrl.active.frame.style.top  = (winCtrl.oldTop  - dy) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}

function winResizeDragStop(event) {

  winCtrl.inResizeDrag = false;

  // Remove mousemove and mouseup event captures on document.

  if (browser.isIE) {
    document.onmousemove = null;
    document.onmouseup   = null;
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", winResizeDragGo,   true);
    document.removeEventListener("mouseup"  , winResizeDragStop, true);
  }
}

//=============================================================================
// Utility functions.
//=============================================================================

function winFindByClassName(el, className) {
//if (className == 'titleBar') alert (el.className);
/*
if (el.className && className == 'titleBar') alert("is " + el.className +"="+ className);
if (className == 'titleBar')
	{
	var eh = "";
	for (i in this)
		{
		//if (i != 'onload') eh += i + ":" + this[i] + "\n";
		eh = eh + i + "\n";
		}
	alert(eh);
	}
*/
  var i, tmp;

  if (className.length && el.className && el.className.substr(0, className.length) == className) /* phil -- allow for multiple classes */
    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     = "#c0c0c0";
  winCtrl.inactiveFrameBorderColor         = "#f0f0f0 #505050 #404040 #e0e0e0";
  winCtrl.inactiveTitleBarColor            = "#808080";
  winCtrl.inactiveTitleTextColor           = "#c0c0c0";
  winCtrl.inactiveClientAreaBorderColor    = "#404040 #e0e0e0 #f0f0f0 #505050";
  winCtrl.inactiveClientAreaScrollbarColor = "";
  winCtrl.inMoveDrag                       = false;
  winCtrl.inResizeDrag                     = false;

  // Initialize windows and build list.

  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]);
}

window.onload = winInit;  // run initialization code after page loads.

