/*
  $Author: dstaviss $
  $Revision: 1.1 $
  Protec Copyright 2005 All Rights Reserved
*/
var READY_STATE_UNINITIALIZED=0;
var READY_STATE_LOADING      =1;
var READY_STATE_LOADED       =2;
var READY_STATE_INTERACTIVE  =3;
var READY_STATE_COMPLETE     =4;

var disposeTimer   = null;
var currentItem    = null;
var currentTopItem = null;
var currentPopup   = null;
var currentReq     = null;
var popupName      = "";
var popupPixelTop  = 0;
var popupPixelLeft = 0;

var menus          = new Array();
var panes          = new Array();

function dummy()
{
}

function Menu()
{
	this.id = "";
	this.subMenus    = new Array();
	this.items       = new Array();
	this.hasChildren = false;
	this.isChild     = false;
	this.parentMenu  = null;
	this.parentItem  = null;
}
/*
 *
 *
 */
function Item()
{
	this.id         = "";
	this.hasMenu    = false;
	this.menu       = null;
	this.parentMenu = null;
}
/*
 *
 *
 */
function init ()
{
  initMenu();
  return true;
}
/*
 *
 *
 */

function getMenuContainer ()
{
   return document.getElementById ("menuContainer");
}

function initMenu()
{
    var container = getMenuContainer ();
    if (container != null)
    {
		container.setAttribute ("activeMenu", null);
		container.closeAll = closeAll;
		findMenus();
	}
}
/*
 *
 *
 */
function findMenus()
{
   var container = getMenuContainer ();
   if (container != null)
   {
	    var i;
		var cTag = container.childNodes;
		for(i=0; i < cTag.length; i++)
		{
			tcTag = cTag[i];
			if(tcTag.className == "menu")
			{
				var tMenu = findSubMenus (tcTag);
				menus [menus.length] = tMenu;
			}
		}

		for(i=0; i < menus.length; i++)
		{
			var tcTag = menus[i];
			menus[i] = setupMenu (tcTag);
		}
	}
}
/*
 *
 *
 */
function findSubMenus (menu)
{
	var cMenu = menu.childNodes;
	var tMenu = new Menu();
	tMenu.id = menu.id;

	for(var i=0; i < cMenu.length; i++)
	{
	    var nextItem = cMenu[i];
	    if (nextItem.className == "menuItem")
	    {
			var tcMenu = new Item();
			tcMenu.id = nextItem.id;
			tcMenu.div = nextItem;
	
			if(tcMenu.id.indexOf("subMenu") != -1)
			{
			    if (i < cMenu.length)
			    {
					++i;
					var subMenu = nextItem;
					tMenu.subMenus[tMenu.subMenus.length] = findSubMenus(subMenu)
					tMenu.subMenus[(tMenu.subMenus.length - 1)].isChild = true;
					tMenu.subMenus[(tMenu.subMenus.length - 1)].parentMenu = tMenu;
					tMenu.subMenus[(tMenu.subMenus.length - 1)].parentItem = tcMenu;
					tMenu.hasChildren = true;
					tcMenu.hasMenu = true;
					tcMenu.menu = tMenu.subMenus[(tMenu.subMenus.length - 1)];
				}
			}
			tcMenu.parentMenu = tMenu;
			tMenu.items[tMenu.items.length] = tcMenu;
		}
	}
	return tMenu;
}
/*
 *
 *
 */
function setupMenu (menu)
{
	if(menu.hasChildren == true)
	{
		for(var i=0; i < menu.subMenus.length; i++)
		{
			setupMenu (menu.subMenus[i]);
		}
	}

	tMenu =  document.getElementById(menu.id);
	tMenu.hasChildren     = menu.hasChildren;
	tMenu.hasVisibleChild = false;
	tMenu.visibleChild    = null;
	tMenu.isChild         = menu.isChild;
	tMenu.onselectstart   = returnFalse;
	tMenu.onclick         = handleMenuClick;
	tMenu.myWidth         = 0;

	for(var i=0; i < menu.items.length; i++)
	{
		setupItem(menu.items[i]);
	}

    // setup the menu width	

    
    if (navigator.userAgent.toLowerCase().indexOf("msie 6.0") >= 0)
    {
	   tMenu.style.width      = (tMenu.myWidth)+"px";
	}
	else
	{
   	   tMenu.style.width      = (tMenu.myWidth+20)+"px";
	}
    
	for(var i=0; i < menu.items.length; i++)
	{
		tItem = document.getElementById (menu.items[i].id);
		
		tItem.style.width = tMenu.myWidth +"px";
		
		if(tItem.hasMenu == true) 
		{
		  tItem.more.style.left = (tMenu.offsetWidth - 17) +"px";
		}
	}

	if(menu.isChild == true)
	{
		tMenu.parentMenu = document.getElementById (menu.parentMenu.id);
		tMenu.parentItem = document.getElementById (menu.parentItem.id);
	}
    return tMenu;
}
/*
 *
 *
 */
function setupItem (item)
{
	tItem                 =  document.getElementById (item.id);
	tItem.highlight       = highlight;
	tItem.unhighlight     = unhighlight;
	tItem.onmouseover     = tItem.highlight;
	tItem.onmouseout      = tItem.unhighlight;
	tItem.parentMenu      = document.getElementById (item.parentMenu.id);
	tItem.hasMenu         = false;
	tItem.handleItemClick = handleItemClick;
	tItem.menu            = null;
	tItem.onclick         = tItem.handleItemClick;
	tItem.ondragstart     = returnFalse;

	if(item.hasMenu == true)
	{
		tItem.innerHTML += "<span id=\"" + item.id + "_more\" class=\"more\">4</span>";
		tItem.more = eval (item.id + "_more");
		tItem.menu = eval (item.menu.id);
		tItem.hasMenu = true;
	}

	tItem.parentMenu.myWidth = Math.max (tItem.parentMenu.myWidth, tItem.offsetWidth);	
	return tItem;
}

function highlight ()
{
    if (this.className == "menuItem")
    {
		this.className = "menuItemOver";

		currentItem = this;
	
		// dont open a menu thats already open
		if((this.hasMenu == true) && (this.parentMenu.hasVisibleChild == true) && (this.parentMenu.visibleChild == this.menu)) return;
	
		// if there is a menu open, close it
		if(this.parentMenu.hasChildVisible == true)
		{
			hideMenu(this.parentMenu.visibleChild);
		}
	
		// if this item has a menu, show it
		if(this.hasMenu)
		{
			showMenu(this.menu);
		}
	}
}

function unhighlight()
{
    if (this.className == "menuItemOver")
    {
	  this.className = "menuItem";
  	  currentItem = null;
	}
}
//
function positionMenu (menu, offset)
{
  var top = offset.offsetHeight;
  var left = 0;

  while (offset)
  {
    top  += offset.offsetTop;
    left += offset.offsetLeft;

    offset = offset.offsetParent;
  }
  menu.style.top  = top +"px";
  menu.style.left = left+"px";

}
//
function findMenu (id)
{
	for (var i=0; i < menus.length; i++)
	{
		if (menus [i].id == id)
		{
			return menus [i];
		}
	}
	return null;
}
//
function highlightTopItem (item)
{
   unhighlightTopItem ()
   currentTopItem = item;
   item.className = "topMenuOver";
   item.unhighlightTopItem = unhighlightTopItem;
   item.onmouseout         = item.unhighlightTopItem;
}
//
function unhighlightTopItem()
{
   if (this)
   {
	  this.className = "topMenuItem";
	  currentTopItem = null;
   }
}

function initTopMenu (topMenu)
{
   if (topMenu.tagName == "TABLE" && topMenu.onmouseover != null)
   {
        topMenu.onmouseover = null;
		for(var i=0; i < topMenu.rows.length; i++)
		{
		   var row = topMenu.rows [i];
			for(var j=0; j < row.cells.length; j++)
			{
			   var cell = row.cells [j];
			   if (cell.menuId != null)
			   {
			     cell.onmouseover = showMenuId;
			   }
			}
		}
	}
    return true;
}
//
function showMenuId (item)
{
    var source = item;

    if (source == null) return false;

    closeTimer();

    highlightTopItem (source);
    
    var menuId = source.getAttribute ("menuId");
    if (menuId != null)
    {
		var menu = findMenu (menuId);
	
		if (menu)
		{
		   var container = getMenuContainer ();
		   if (container != null)
		   {
		        var activeMenu = container.activeMenu;
		   		if (activeMenu != menu)
				{
			        hideMenu     (activeMenu);
					positionMenu (menu, source);
					menu.className           = "visibleMenu";
					container.activeMenu = menu;
				}
			}
		}
	}
	return true;
}
//
function showMenu (menu)
{
	if (menu)
	{
		if(menu.isChild == true)
		{
			var top  = menu.parentItem.offsetTop + menu.parentMenu.offsetTop + 4;
			var left = menu.parentMenu.offsetLeft + menu.parentMenu.offsetWidth - 4;
			menu.style.top = top+"px";
			menu.style.left= left+"px";
			
			menu.parentMenu.hasChildVisible = true;
			menu.parentMenu.visibleChild = menu;
			menu.style.zIndex = menu.parentMenu.style.zIndex + 1;
 		    menu.className = "visibleMenu";
		}
	}
	return false;
}


function hideMenu(menu)
{
	// to handle the careless child menu hiding down below
	if(menu == null) return false;
	//event.cancelBubble = true;

	// i do this kind of carelessly.  i was having trouble otherwise
	hideMenu (menu.visibleChild);

	if(menu.isChild == true)
	{
		menu.parentMenu.hasChildVisible = false;
		menu.parentMenu.visibleChild = null;
	}
	else
	{
		document.onclick = "";
		getMenuContainer ().activeMenu = null;
	}
	menu.className = "menu";
	return true;
}

function closeAll()
{
  var activeMenu = getMenuContainer ().activeMenu;
  if (activeMenu)
  {
	hideMenu (activeMenu);
  }
}

// simple function to return false
function returnFalse()
{
	return false;
}

function closeTimer()
{
   if(disposeTimer)
   {
      clearTimeout(disposeTimer);
   	  if (currentItem == null && currentTopItem == null)
	  {
	     closeAll ();
	  }
   }
   disposeTimer = setTimeout("closeTimer()", 1500);
}
// function to be used for later functionality
// for now it just keeps the menu open when it receives a click;
function handleMenuClick()
{
	return true;
}

// just like the function above, only it closes the menu
function handleItemClick()
{
	getMenuContainer ().closeAll();
	return true;
}

// Object Menu

function selectObjectMenuItem (row)
{
  row.id = "Selected";
}

function deselectObjectMenuItem (row)
{
  row.id = null;
}

//
//  Value Pick
//

function setValue (attrName, value)
{
  var field = document.getElementById (attrName);
  if (field != null)
  {
    field.value = value;
  }
  closePopup ();
  return false;
}
////
///   Popups
///

function movePopup ()
{
	if (event.button == 1)
	{
		currentPopup = eval("maildiv");
		currentPopup.relativeX  = currentPopup.style.posLeft - event.clientX;
		currentPopup.relativeY  = currentPopup.style.posTop - event.clientY;
		document.onmousemove = mouseMove;
	}
}

function mouseMove(e)
{
    var ev = event | e;
	if (ev.button==1)
	{
		currentPopup.style.left      = ev.clientX + currentPopup.relativeX+"px";
		currentPopup.style.top       = ev.clientY + currentPopup.relativeY+"px";
		return false;
	}
	return true;
}

function openPopup (name, inside, left, top)
{
	currentPopup = eval ("maildiv.style");

	currentPopup.left = left+"px";
	currentPopup.top  = top+"px";

	currentPopup.visibility = "visible";

	output = "";
	output += "<table class=popup-window>";
	output +=   "<tr>";
	output +=     "<td class=popup-decoration height='10'>";
	output +=       "<table>";
	output +=         "<tr>";
	output +=           "<td class=popup-title  onmousedown='movePopup();' onmouseup='JavaScript:document.onmousemove=\"\" '>";
	output +=              name;
	output +=           "</td>";
	output +=           "<td class=popup-ctrl>";
	output +=             "<a onclick='closePopup();'><img alt='Close' src='iconShow?iconName=Fault'></a>";
	output +=           "</td>";
	output +=         "</tr>";
	output +=       "</table>";
	output +=     "</td>";
	output +=   "</tr>";
	output +=   "<tr>";
	output +=     "<td class=popup-body>";
	output +=         inside;
	output +=      "</td>";
	output +=   "</tr>";
	output += "</table>";
	maildiv.innerHTML = output;
}

function closePopup ()
{
   if (currentPopup)
   {
     currentPopup.visibility="hidden";
     currentPopup = null;
   }
}
//
// Create XMLHttpRequest
//
function getXMLHTTPRequest()
{
  var xRequest=null;
  if (window.XMLHttpRequest)
  {
    xRequest=new XMLHttpRequest();
  }
  else if (typeof ActiveXObject != "undefined")
  {
    xRequest=new ActiveXObject ("Microsoft.XMLHTTP");
  }
  return xRequest;
}

function onPopuReady ()
{
  if (currentReq.readyState == READY_STATE_COMPLETE)
  {
    openPopup (popupName, currentReq.responseText, popupPixelLeft, popupPixelTop);
  }
}
//
// Send XMLRequest
//
function sendPopupRequest (url)
{
  currentReq = getXMLHTTPRequest();
  var index      = url.indexOf("?");
  var urlOnly    = url;
  var paramsOnly = "";

  if (index > 0)
  {
     urlOnly    = url.substring (0, index);
     paramsOnly = url.substring (index+1);
  }

  if (currentReq)
  {
    currentReq.onreadystatechange=onPopuReady;
    currentReq.open ("GET", urlOnly, true);
    currentReq.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
    currentReq.send (paramsOnly);
    return false; // actuall means success - do not use other sumission methods
  }
  return true; // means this one has failed - use regular submission method
}
/*
 *
 */
function popupUrl (name, url)
{
  var source = event.srcElement;

  if (!source) return true;

  var obj       = source;
  var pixelTop  = obj.offsetHeight;
  var pixelLeft = 0;

  while (obj)
  {
    pixelTop  += obj.offsetTop;
    pixelLeft += obj.offsetLeft;
    // sometimes offsetParent is not enough
    if (obj.offsetParent == null)
    {
      obj = obj.parentElement;
    }
    else
    {
      obj = obj.offsetParent;
    }
  }
  popupName      = name;
  popupPixelTop  = pixelTop;
  popupPixelLeft = pixelLeft;

  return sendPopupRequest (url);
}
//
//  Use as onSubmit script for Forms to diplay the results in a popup window
//
function submitFormToPopup (form, title)
{
  var url = form.action;
  var isFirst = true;
  
  for(var i=0; i < form.elements.length; i++)
  {
    field = form.elements [i];
    if ("object-form-attribute-field"	== field.className)
    {
		   if (field.isMandatory && field.value== "")
			 {
			    // mandatory field
					field.focus();
					defaultStatus = "field "+field.name + " is Mandatory!";
					return false;
			 }
			 
       if (field.type == "hidden" || field.isChanged)
       {
          value = field.value;
          if (field.type=="checkbox")
          {
             value = field.checked;
          }
					if (isFirst)
					{
					  url = url+"?";
					  isFirst = false;
					}
					else
					{
					  url = url+"&";
					}
          url = url+field.name+"="+value;
       }
    }
	}
  return popupUrl (title, url);
}
//
// use for Form Fields with onChange() 
//
function setChanged (field)
{
  field.isChanged=true;
  return true;
}
//
//  go BACK
//
function closeDialog ()
{
  history.go(-1);
  return true;
}
