var mc_menuExpandDelay = 0; 
mc_hideSelectElement = false;
var mc_shadowEnabled = false;
var mc_shadowColor = '#999999';
var mc_shadowOffest = 2;
// global variables
var mcExpandTimerId = 0;
var mcCollapseTimerId = 0;
var mcCollapseAllTimerId = 0;
var mcObjExpandArray = new Array();
var mcShadowArray = new Array();
var mcObjExpandCount = 0;
var mcCurExpandGroup = '';
var mcCurCollapseGroup = '';
var mcCurItem = '';
var mcRestoreGroup = '';
var mcCollapseAll = false;
var mcContextUp = false;

function clipSelect () {
	objSel = document.getElementsByTagName("SELECT");
	if(objSel != null)
		for( i = 0 ; i < objSel.length; i++ )
			objSel[i].style.visibility = 'hidden';
}
function unclipSelect () {
	objSel = document.getElementsByTagName("SELECT");
	if(objSel != null)
		for( i = 0 ; i < objSel.length; i++ )
			objSel[i].style.visibility = 'visible';
}

function mcMouseOverItem(item, subGroup, expandDirection, adjX, adjY, expandDelay, effect) 
{    
  var newLeft = 0; 
  var newTop = 0; 
  var oItem = document.getElementById(item);   
  var oSubGroup = document.getElementById(subGroup);       
  
  if (mcCurItem != item)
  {
    mcCurItem = item; 
  
    switch (expandDirection)
    {
      case 'belowleft': 
        newLeft = mcPageX(oItem); 
        if (newLeft + oSubGroup.offsetWidth > window.document.body.clientWidth)
          newLeft = mcPageX(oItem) + oItem.offsetWidth - oSubGroup.offsetWidth; 
        newTop = mcPageY(oItem) + oItem.offsetHeight; 
        break; 
      case 'belowright': 
        newLeft = mcPageX(oItem) + oItem.offsetWidth - oSubGroup.offsetWidth; 
        newTop =  mcPageY(oItem) + oItem.offsetHeight; 
        break; 
      case 'aboveleft': 
        newLeft = mcPageX(oItem); 
        newTop =  mcPageY(oItem) - oSubGroup.offsetHeight; 
        break; 
      case 'aboveright': 
        newLeft = mcPageX(oItem) + oItem.offsetWidth - oSubGroup.offsetWidth; 
        newTop =  mcPageY(oItem) - oSubGroup.offsetHeight; 
        break; 
      case 'rightdown': 
        newLeft = mcPageX(oItem) + oItem.offsetWidth; 
        if (newLeft + oSubGroup.offsetWidth > window.document.body.clientWidth)
          newLeft = mcPageX(oItem) - oSubGroup.offsetWidth; 
        newTop = mcPageY(oItem); 
        if (newTop + oSubGroup.offsetHeight > window.document.body.clientHeight)
          newTop = mcPageY(oItem) - oSubGroup.offsetHeight + oItem.offsetHeight; 
        break; 
      case 'rightup': 
        newLeft = mcPageX(oItem) + oItem.offsetWidth; 
        newTop = mcPageY(oItem) - oSubGroup.offsetHeight + oItem.offsetHeight; 
        break; 
      case 'leftdown': 
        newLeft = mcPageX(oItem) - oSubGroup.offsetWidth; 
        newTop = mcPageY(oItem); 
        break; 
      case 'leftup': 
        newLeft = mcPageX(oItem) - oSubGroup.offsetWidth; 
        newTop = mcPageY(oItem) - oSubGroup.offsetHeight + oItem.offsetHeight; 
        break; 
      default: 
        newLeft = mcPageX(oItem) + oItem.offsetWidth; 
        newTop = mcPageY(oItem); 
        break; 
    }  
    newLeft += adjX; 
    newTop += adjY; 
    if (newTop < 0) newTop = 0; 
    if (newLeft < 0) newLeft = 0;     
    oSubGroup.style.left = newLeft + 'px'; 
    oSubGroup.style.top = newTop + 'px';         
    mcExpandGroup(subGroup, effect);         
  }  
  //clipSelect();
}

function mcMouseOutItem(E,item, group, subGroup)
{        
  if ((!(mcMouseOnObject(E,item))) && subGroup) {     
    if (!(mcMouseOnObject(E,subGroup)))
    {
      mcCurItem = '';       
      mcCollapseGroup(subGroup);
    }  
  }    
  //unclipSelect();
}

function mcMouseOverGroup(group)
{
  if (mcCollapseAll) mcRestoreGroup = group; 

  if (mcCurCollapseGroup == group) 
  {
    mcStopCollapseGroup(); 
    mcStopExpandGroup(); 
  }  
  //clipSelect();
}

function mcMouseOutGroup(E,group, parentItem, parentGroup)
{   
  if (!(mcMouseOnObject(E,group)))
  {    
    mcCurItem = ''; 

    var subGroup = mcObjExpandArray[mcObjExpandCount]; 
    if (subGroup == group) subGroup = null;     
    
    if (parentItem == null && parentGroup == null && !(mcMouseOnObject(E,group)))
      mcCollapseAllGroup();     
    else if (mcMouseOnObject(E,group) || mcMouseOnObject(E,subGroup) || mcMouseOnObject(E,parentItem))
      ; // do nothing 
    else if (mcMouseOnObject(E,parentGroup))
    {
      mcCollapseGroup(group); 
      mcCollapseGroup(subGroup); 
    }
    else
      mcCollapseAllGroup();           
  }  
  //unclipSelect();
}

function mcExpandGroup(group, effect)
{ 
  if (group == mcCurCollapseGroup) mcStopCollapseGroup(); 
  if (group != mcCurExpandGroup) mcStopExpandGroup();  
  
  mcRestoreGroup = group; 
  
  mcCurExpandGroup = group; 
  if(navigator.appName == "Netscape") {
     //if (group) group += '.id';
     if (effect) effect = "'" + effect + "'";          
     tmp = "mcDoExpand('" + group + "'," + effect + ")";     
     //tmp1 = "mcDoExpand('menugroup2',null)";
     //mcExpandTimerId = window.setTimeout(mcDoExpand(group,effect), mc_menuExpandDelay);     
     mcExpandTimerId = window.setTimeout(tmp, mc_menuExpandDelay);
  } else {     
     if (group) group += '.id'; 
     if (effect) effect = "'" + effect + "'";        
     tmp = 'mcDoExpand(' + group + ', ' + effect + ')';            
     mcExpandTimerId = window.setTimeout(tmp, mc_menuExpandDelay);
  }    	
}

function mcCollapseGroup(group)
{
  if (group == mcCurExpandGroup) mcStopExpandGroup(); 

  if (group) 
    if (document.getElementById(group).style.visibility == 'visible') 
    {
      if(navigator.appName == "Netscape") {
         mcCurCollapseGroup = group;          
         mcCollapseTimerId = window.setTimeout("mcDoCollapse('" + group + "')", mc_menuExpandDelay); 
      } else {
         mcCurCollapseGroup = group; 
         group += '.id';          
         tmp = 'mcDoCollapse(' + group + ')';
         mcCollapseTimerId = window.setTimeout('mcDoCollapse(' + group + ')', mc_menuExpandDelay);       	         
      }
    }  
}

function mcCollapseAllGroup()
{
  mcStopCollapseGroup(); 
  mcStopExpandGroup(); 
  mcStopCollapseAllGroup(); 

  mcCollapseAll = true; 
  mcCollapseAllTimerId = setTimeout("mcDoCollapseAll()", mc_menuExpandDelay); 
}

function mcStopExpandGroup()
{ 
  clearTimeout(mcExpandTimerId); 
  mcCurExpandGroup = ''; 
}

function mcStopCollapseGroup()
{ 
  clearTimeout(mcCollapseTimerId); 
  mcCurCollapseGroup = ''; 
}

function mcStopCollapseAllGroup()
{  
  clearTimeout(mcCollapseAllTimerId); 
  mcRestoreGroup = '';
}


function mcDoExpand(group, effect)
{ 
  if (document.getElementById(group).style.visibility != 'visible')
  {
    mcHideSelectElements(group); 
    if (effect) 
    {
      document.getElementById(group).style.filter = effect; 
      document.getElementById(group).filters[0].Apply(); 
    }  
    document.getElementById(group).style.visibility = 'visible'; 
    mcMakeDropShadow(group);     
    if (effect) document.getElementById(group).filters[0].Play(); 
    mcObjExpandCount++; 
    mcObjExpandArray[mcObjExpandCount] = group;   
  }  
}


function mcDoCollapse(group)
{
  if (group) 
  {
    if (document.getElementById(group).style.visibility != 'hidden')
    {
      document.getElementById(group).style.visibility = 'hidden';     
      mcObjExpandCount--; 
      mcClearDropShadow(group); 
    }      
  }
  if (!(mcContextUp) && mcObjExpandCount == 0) 
    mcShowSelectElements(); 
}

function mcDoCollapseAll()
{
  for (var i = mcObjExpandCount; i >= 1; i--)
  {
    if (mcObjExpandArray[i] == mcRestoreGroup) break; 

    document.getElementById(mcObjExpandArray[i]).style.visibility = 'hidden';
    mcClearDropShadow(mcObjExpandArray[i]); 
  }

  mcCollapseAll = false; 
  mcObjExpandCount = i;
  mcRestoreGroup = ''; 
  if (!(mcContextUp) && mcObjExpandCount == 0) 
    mcShowSelectElements(); 
}

function mcHideAllGroups()
{
  mcCurItem = ''; 
  mcRestoreGroup = ''; 
  mcDoCollapseAll();     
}

function mcRefreshItem(E,Element, NewClassName, LeftImage, LeftImageSrc, RightImage, RightImageSrc, direction)
{  
  if (direction == 'out' && mcMouseOnObject(E,Element))    
    ;   
  else  
  {    
    if (Element != null & NewClassName != '') document.getElementById(Element).className = NewClassName;
    if (LeftImage != null  && LeftImageSrc != '') document.images[LeftImage].src = LeftImageSrc;     
    if (RightImage != null && RightImageSrc != '') document.images[RightImage].src = RightImageSrc;   
  }
}

function mcMouseOnObject(E,objName)
{ 
  if (objName)
  {    
    var objLeft = mcPageX(document.getElementById(objName)) - window.document.body.scrollLeft + 1;     
    var objTop = mcPageY(document.getElementById(objName)) - window.document.body.scrollTop + 1;     
    var objRight = objLeft + document.getElementById(objName).offsetWidth - 1;     
    var objBottom = objTop + document.getElementById(objName).offsetHeight - 1;           
  
    if ((E.clientX > objLeft) && (E.clientX < objRight) && (E.clientY > objTop) && (E.clientY < objBottom))
        return true; 
    else  
        return false;          
  }
  else
    return false; 
}

function mcPageX(element)
{
  var x = 0;
  do 
  {
    if (element.style.position == 'absolute') 
    {
      return x + element.offsetLeft; 
    }
    else
    {
      x += element.offsetLeft;
      if (element.offsetParent) 
        if (element.offsetParent.tagName == 'TABLE') 
          if (parseInt(element.offsetParent.border) > 0)
          {
            x += 1; 
          }
    }
  }
  while ((element = element.offsetParent));
  return x; 
}

function mcPageY(element)
{
  var y = 0;
  do 
  {
    if (element.style.position == 'absolute') 
    {
      return y + element.offsetTop; 
    }
    else
    {
      y += element.offsetTop;
      if (element.offsetParent) 
        if (element.offsetParent.tagName == 'TABLE') 
          if (parseInt(element.offsetParent.border) > 0)
          {
            y += 1; 
          }
    }
  }
  while ((element = element.offsetParent));
  return y; 
}


function mcHideSelectElements(group)
{
  if (document.getElementsByTagName) 
  {
    var arrElements = document.getElementsByTagName('select'); 
    if (mc_hideSelectElement) 
    {
      for (var i = 0; i < arrElements.length; i++) 
        if (mcIsOverlap(document.getElementById(group), arrElements[i]))
          arrElements[i].style.visibility = 'hidden';          
    }
  }
  clipSelect();
}

function mcShowSelectElements()
{
  if (document.getElementsByTagName) 
  {
    var arrElements = document.getElementsByTagName('select'); 
    if (mc_hideSelectElement) 
      for (var i = 0; i < arrElements.length; i++) 
        arrElements[i].style.visibility = 'visible'; 
  }
  unclipSelect();
}

function mcIsOverlap(obj1, obj2)
{
  var result = true; 
  var obj1Left = mcPageX(obj1) - window.document.body.scrollLeft; 
  var obj1Top = mcPageY(obj1) - window.document.body.scrollTop; 
  var obj1Right = obj1Left + obj1.offsetWidth; 
  var obj1Bottom = obj1Top + obj1.offsetHeight;
  var obj2Left = mcPageX(obj2) - window.document.body.scrollLeft; 
  var obj2Top = mcPageY(obj2) - window.document.body.scrollTop; 
  var obj2Right = obj2Left + obj2.offsetWidth; 
  var obj2Bottom = obj2Top + obj2.offsetHeight;
  
  if (obj1Right <= obj2Left || obj1Bottom <= obj2Top || 
      obj1Left >= obj2Right || obj1Top >= obj2Bottom) 
    result = false; 
  return result; 
}

function mcMakeDropShadow(objName)
{
  if (mc_shadowEnabled) 
  {
    mcShadowArray[objName] = new Array(); 
	  for (var i = mc_shadowOffest; i > 0; i--)
	  {
	    var obj = document.getElementById(objName); 
		  var rect = document.createElement('div');
		  var rs = rect.style
		  rs.position = 'absolute';
		  rs.left = (obj.style.posLeft + i) + 'px';
		  rs.top = (obj.style.posTop + i) + 'px';
		  rs.width = obj.offsetWidth + 'px';
		  rs.height = obj.offsetHeight + 'px';
		  rs.zIndex = obj.style.zIndex - i;
		  rs.backgroundColor = mc_shadowColor;
		  var opacity = 1 - i / (i + 1);
		  rs.filter = 'alpha(opacity=' + (100 * opacity) + ')';
		  obj.insertAdjacentElement('afterEnd', rect);
		  mcShadowArray[objName][mcShadowArray[objName].length] = rect; 
	  }
	}
}

function mcClearDropShadow(objName)
{
  if (mc_shadowEnabled) 
  {
    var curShadow; 
    for (var i = 0; i < mcShadowArray[objName].length; i++)
    {
      curShadow = mcShadowArray[objName][i]; 
      curShadow.style.filter = 'alpha(opacity=0)'; 
      curShadow.removeNode(true); 
    }
  }  
}

function mcPositionMenu(menu, alignment, offsetX, offsetY)
{
  var scrlLeft = 0; 
  var scrlTop = 0;
  var clientW = window.document.body.clientWidth; 
  var clientH = window.document.body.clientHeight; 
  var menuWidth = menu.offsetWidth; 
  var menuHeight = menu.offsetHeight; 
  var newLeft = 0; 
  var newTop = 0; 

  switch (alignment)
  {
    case 'topleft': 
      newLeft = scrlLeft;
      newTop = scrlTop;
      break; 
    case 'topmiddle': 
      newLeft = (clientW - menuWidth) / 2 + scrlLeft;
      newTop = scrlTop;
      break; 
    case 'topright': 
      newLeft = clientW + scrlLeft - menuWidth;
      newTop = scrlTop;
      break; 
    case 'bottomleft': 
      newLeft = scrlLeft;
      newTop = clientH + scrlTop - menuHeight;
      break; 
    case 'bottommiddle': 
      newLeft = (clientW - menuWidth) / 2 + scrlLeft;
      newTop = clientH + scrlTop - menuHeight;
      break; 
    case 'bottomright': 
      newLeft = clientW + scrlLeft - menuWidth;
      newTop = clientH + scrlTop - menuHeight;
      break; 
    default: 
      newLeft = clientW + scrlLeft;
      newTop = clientH + scrlTop;
      break; 
  }    
  
  newLeft += offsetX; 
  newTop += offsetY; 
  menu.style.left = newLeft; 
  menu.style.top = newTop; 
}
