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

// by phil:
function createWindow(title, source_file, width, height, alternate_link)
	{
	if (!browser.isIE && !browser.isNS) // does not work with opera, etc
		{
		alert('We can only currently support Firefox, Netscape, IE.  Go to google.com and get them.  Thanks.  If you want your browser to work, feel free to submit the code to make it work :P');
		location.href = 'http://google.com/';
		return 1;
		}
	var h_body_context = document.createElement('DIV');
	++win_create_i;
	var win_create_id = 'win' + win_create_i;
	var ie_extra = 0;
	if (browser.isIE) ie_extra = 50;
	var win_create_h = createWindowHandle(title, source_file, h_body_context, 
		win_create_id, false, 
		width + ie_extra, height + ie_extra);

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

	$(h_body_context).load(source_file);

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

	return false;
	}
function createWindowWithLoad(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, textbox_class, width, height)
	{

	/* 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', '/phil/interface/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
	if (textbox_class)
		{
		h_body_context.setAttribute('class', 'clientArea clientAreaTextbox');
		h_body_context.setAttribute('className', 'clientArea clientAreaTextbox');
		}
	else
		{
		h_body_context.setAttribute('class', 'clientArea');
		h_body_context.setAttribute('className', 'clientArea');
		}
	h_body_context.style.cssText = 'height: '+height+'px';
	h_body_context.style.height = height+'px';
//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:'+width+'px; 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     = "#324d78";
  winCtrl.inactiveFrameBorderColor         = "";
  winCtrl.inactiveTitleBarColor            = "#152642";
  winCtrl.inactiveTitleTextColor           = "#c0c0c0";
  winCtrl.inactiveClientAreaBorderColor    = "";
/*  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.
