/**
 * HELP menu
 */

var helpRequest = null;
function showHelp( helpID, obj, event, sid, helpDelay )
{
  httpHelp = createRequestObject();
  if ( !httpHelp )  return;

  httpHelp.open( 'GET', 'index.php?action=requestHelpComponent&helpID=' + helpID + '&sid=' + sid + randomParam() );
  httpHelp.onreadystatechange = function()
  {
    if ( httpHelp.readyState != gReadyStateFinished ) return;

    dropdownmenu( obj, event, httpHelp.responseText, "300px", helpDelay );
  }
  httpHelp.send( null );
}


/**
 *  CATEGORY LIST menu
 */

var httpCategoryList = null;
function showCalendarList( categoryId, obj, event, sid, mode )
{

  httpCategoryList = createRequestObject();
  if ( !httpCategoryList )  return;

  httpCategoryList.open( 'GET', 'index.php?action=requestCalendarsInCategoryComponent&categoryId=' + categoryId + '&mode=' + mode + '&sid=' + sid + randomParam() );
  httpCategoryList.onreadystatechange = function()
  {
    if ( httpCategoryList.readyState != gReadyStateFinished ) return;

    // determine width from contents
    var width = "250";
    if ( httpCategoryList.responseText.match( /width:(\d+)/ ) )
    {
      width = RegExp.$1;
    }

    dropdownmenu( obj, event, httpCategoryList.responseText, width + "px" );
  }
  httpCategoryList.send( null );
}

/***********************************************
* AnyLink Vertical Menu- © Dynamic Drive (www.dynamicdrive.com)
* This notice MUST stay intact for legal use
* Visit http://www.dynamicdrive.com/ for full source code
***********************************************/
		
var disappeardelay = 250;

var offsetRight   = 2;
var offsetUpward  = 2;

var ie4 = ( document.all )? true : false;
var ns6 = ( document.getElementById && !document.all )? true : false;
var canShowMenu = ie4 || ns6;

var gTimeoutInstances = new Array();

if ( canShowMenu )
{
  document.write( '<div id="dropmenudiv" style="visibility:hidden;position:absolute;top:0;" onmouseover="clearhidemenu()" onmouseout="dynamicHide(event)"></div>' );
}

function getposOffset(what, offsettype)
{
  var totaloffset = 0;
  var curr = what;
  while ( curr != null )
  {
    totaloffset += ( offsettype == "left" )? curr.offsetLeft : curr.offsetTop;
    curr = curr.offsetParent;
  }
  return totaloffset;
}

function iecompattest()
{
  return ( document.compatMode && document.compatMode!="BackCompat" )? document.documentElement : document.body;
}

function clearRightEdge( obj )
{
  var edgeoffset = 0;
  var windowedge = ( ie4 && !window.opera )? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15;
  if ( ( windowedge - dropmenuobj.x - obj.offsetWidth ) < dropmenuobj.offsetWidth )
  {
    edgeoffset = dropmenuobj.offsetWidth + obj.offsetWidth;
  }
  return edgeoffset;
}

function clearBottomEdge( obj )
{
  var edgeoffset = 0;

  // move menu up?
  var windowedge = ( ie4 && !window.opera )? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18;
  if ( ( windowedge - dropmenuobj.y ) < dropmenuobj.offsetHeight )
  {
    edgeoffset = dropmenuobj.offsetHeight - obj.offsetHeight;

    // simply position at top of viewable window if going too far up
    var topedge = ( ie4 && !window.opera )? iecompattest().scrollTop : window.pageYOffset;
    if ( ( dropmenuobj.y - topedge ) < dropmenuobj.offsetHeight )
    {
      edgeoffset = dropmenuobj.y;
    }
  }
  return edgeoffset;
}

function dropdownmenu(obj, e, menucontents, menuwidth, menudelay, menudown)
{
  if ( !menudown )
  {
    menudown = 0;
  }
  clearAllTimeoutInstances();
  if ( !canShowMenu ) return;

  clearhidemenu();
  dropmenuobj = ( document.getElementById )? document.getElementById( "dropmenudiv" ) : dropmenudiv;
  setVisibilityNuisanceSelectFields( false );
  dropmenuobj.style.visibility = "hidden";
  dropmenuobj.innerHTML   = menucontents;
  dropmenuobj.style.width = menuwidth;

  // start it out of the way
  dropmenuobj.style.left  = "-1000px";
  dropmenuobj.style.top   = "-1000px";
  dropmenuobj.x = getposOffset( obj, "left" );
  dropmenuobj.y = getposOffset( obj, "top" );

  dropmenuobj.style.left  = ( dropmenuobj.x - clearRightEdge( obj, "rightedge" ) + obj.offsetWidth + offsetRight ) + "px";
  dropmenuobj.style.top   = ( dropmenuobj.y - clearBottomEdge( obj, "bottomedge" ) + menudown - offsetUpward ) + "px";
  
  if ( !menudelay )
  {
    menudelay = 0;
  }
  var setDropdownMenuVisibleInstance = setTimeout( "setDropdownMenuVisible();", menudelay );
  gTimeoutInstances[ gTimeoutInstances.length ] = setDropdownMenuVisibleInstance;
}

function setDropdownMenuVisible()
{
  dropmenuobj = ( document.getElementById )? document.getElementById( "dropmenudiv" ) : dropmenudiv;
  dropmenuobj.style.visibility = "visible";
  setVisibilityNuisanceSelectFields( true );
}

// hides select fields that may show through the menu (due to IE bug)
function setVisibilityNuisanceSelectFields( hideField )
{
  if ( !ie4 ) return;

  dropmenuobj = ( document.getElementById )? document.getElementById( "dropmenudiv" ) : dropmenudiv;
  if ( !dropmenuobj ) return;
  var menuTop     = getposOffset( dropmenuobj, "top" );
  var menuBottom  = menuTop + dropmenuobj.offsetHeight;
  var menuLeft    = getposOffset( dropmenuobj, "left" );
  var menuRight   = menuLeft + dropmenuobj.offsetWidth;
  
	var selects = document.getElementsByTagName( "select" );
	var combobox = null;

	for ( var comboIx = 0; comboIx < selects.length; comboIx++ )
	{
		combobox = selects[ comboIx ];
	  if ( hideField )
	  {
	    var comboTop      = getposOffset( combobox, "top" );
  		var comboBottom   = comboTop + combobox.offsetHeight;
  		var comboLeft     = getposOffset( combobox, "left" );
  		var comboRight    = comboLeft + combobox.offsetWidth;

		  var topOverlap    = ( comboTop >= menuTop       && comboTop <= menuBottom );
		  var bottomOverlap = ( comboBottom <= menuBottom && comboBottom >= menuTop );
		  var leftOverlap   = ( comboLeft >= menuLeft     && comboLeft <= menuRight );
		  var rightOverlap  = ( comboRight <= menuRight   && comboRight >= menuLeft );
		  var isOverlap     = ( topOverlap || bottomOverlap ) && ( leftOverlap || rightOverlap );
		  if ( isOverlap )
		  {
		    combobox.style.visibility = "hidden";
		  }
	  }
	  else
	  {
	    combobox.style.visibility = "visible";
	  }
	}
}

function contains_ns6(container, element)
{
  var curr = element;  
  while ( curr.parentNode )
  {
    curr = curr.parentNode;
    if ( curr == container ) return true;
  }
  return false;
}

function dynamicHide(e)
{
  if ( ie4 && !dropmenuobj.contains( e.toElement ) )                                                    return delayhidemenu();
  if ( ns6 && e.currentTarget != e.relatedTarget && !contains_ns6( e.currentTarget, e.relatedTarget ) ) return delayhidemenu();
}

function hidemenu(e)
{
  if ( !canShowMenu ) return;
  if ( typeof dropmenuobj == "undefined" ) return;
  dropmenuobj.style.visibility = "hidden";

  setVisibilityNuisanceSelectFields( false );
  clearAllTimeoutInstances();
}

function clearAllTimeoutInstances()
{
  for ( instanceIx in gTimeoutInstances )
  {
    if ( parseInt( instanceIx ) == instanceIx )
    {
      clearTimeout( gTimeoutInstances[ instanceIx ] );
    }
  }
  gTimeoutInstances = new Array();
}

function delayhidemenu()
{
  if ( !canShowMenu ) return;
  delayhide = setTimeout( "hidemenu()", disappeardelay );
}

function clearhidemenu()
{
  if ( typeof delayhide == "undefined" ) return;
  clearTimeout( delayhide );
}