var theCurrentMenu = null;
var theCurrentMenu2 = null;
var ns6 = navigator.userAgent.indexOf('Netscape6') > -1;
var ie = document.all && navigator.userAgent.indexOf('Opera') == -1;
var hideme = 1;
function isMenuOpen()
{
  return theCurrentMenu != null && theCurrentMenu.style.display == 'block'
}
function hideContextMenu()
{
  if( isMenuOpen() )
  {
    theCurrentMenu.style.display = 'none';
    if( document.getElementById( 'DivShim' ) && ie )
    {
      var theiframe = document.getElementById( 'DivShim' );
      theiframe.style.display = 'none'
    }
  }
}
function showBox( menuID, showMenuButton, toponly )
{
  hideContextMenu();
  theCurrentMenu = document.getElementById(menuID);
  theCurrentMenu.stl = ns6 ? theCurrentMenu : theCurrentMenu.style;
  if ( !theCurrentMenu )
  {
    alert( 'showBox: can not find menu for: ' + menuID );
  }
  var button = document.getElementById( showMenuButton );
  if ( !button )
  {
    alert( 'showBox: can not find button for: ' + showMenuButton );
  }
  
  var element = button;
  var leftOffset = 0;
  var topOffset = 1;
  while( element )
  {
    leftOffset += element.offsetLeft;
    topOffset += element.offsetTop;
    //alert('element=' + element.tagName + ', id=' + element.id + ', class=' + element.className + ', added left ' + element.offsetLeft + ', top=' + element.offsetTop )
    element = element.offsetParent;
  }
  var rightedge = ie ? document.body.clientWidth - leftOffset : window.innerWidth - leftOffset;
  button.contentwidth = button.offsetWidth;
  theCurrentMenu.contentwidth = theCurrentMenu.offsetWidth;
  if( rightedge < theCurrentMenu.contentwidth && leftOffset > theCurrentMenu.contentwidth )
  {
    leftOffset -= theCurrentMenu.contentwidth - button.contentwidth;
  }
  if( !toponly )
  {
    theCurrentMenu.style.left = leftOffset + 'px';
  }
  theCurrentMenu.style.top = topOffset + button.offsetHeight + 'px';
  theCurrentMenu.style.left = leftOffset - 2 + 'px';
  theCurrentMenu.style.zIndex = 10;
  var p = (ie) ? 'filter' : 'MozOpacity';
  var v = (ie) ? 'alpha(opacity=0)' : 0;
  theCurrentMenu.style[p] = v;
  theCurrentMenu.stl.display = 'block';
  //new Effect.Opacity(theCurrentMenu, {duration:0.5, from:0.0, to:1.0});
  var newOpacity = new Effect.Opacity( theCurrentMenu, { duration:1.0, from:0.0, to:1.0} );
  if( ie )
  {
    /*
    //temporarily commented out because i can't figure any of this crap out
    new Effect.Opacity(theCurrentMenu, {duration:1.0, from:0.0, to:1.0});
    if( !document.getElementById( 'DivShim' ) )
    {
      var hideFrame = document.createElement('iframe');
      hideFrame.id = 'DivShim';
      hideFrame.className = 'hiddeniframe';
      document.body.appendChild(hideFrame);
    }
    else hideFrame = document.getElementById( 'DivShim' );
    hideFrame.style.width = theCurrentMenu.offsetWidth;
    hideFrame.style.height = theCurrentMenu.offsetHeight;
    hideFrame.style.top = theCurrentMenu.style.top;
    hideFrame.style.left = theCurrentMenu.style.left;
    hideFrame.style.zIndex = 9;
    hideFrame.style.display = 'block';
    */
  }
}
function showSubBox( menuID, showMenuButton, parentDiv, keyvar )
{
  hideSubContextMenu();
  theCurrentMenu2 = document.getElementById(menuID);
  theCurrentMenu2.stl = ns6 ? theCurrentMenu2 : theCurrentMenu2.style;
  var parDiv = document.getElementById(parentDiv);
  if( theCurrentMenu2 )
  {
    var button = document.getElementById(showMenuButton);
    var element = button;
    var leftOffset = 0;
    var topOffset = 0;
    while( element )
    {
      leftOffset += element.offsetLeft;
      topOffset += element.offsetTop;
      element = element.offsetParent;
    }
    if( parentDiv != 'bookmark' )
    {
      leftOffset -= parDiv.offsetLeft;
      topOffset -= parDiv.offsetTop;
    }
    else
    {
      topOffset += 2;
      leftOffset += 2;
    }
    var rightedge = ie ? document.body.clientWidth - leftOffset : window.innerWidth - leftOffset;
    button.contentwidth = button.offsetWidth;
    theCurrentMenu2.contentwidth = theCurrentMenu2.offsetWidth;
    if( rightedge < theCurrentMenu2.contentwidth && leftOffset > theCurrentMenu2.contentwidth )
    {
      leftOffset -= theCurrentMenu2.contentwidth - button.contentwidth;
    }
    theCurrentMenu2.style.left = leftOffset + 'px';
    theCurrentMenu2.style.top = topOffset + button.offsetHeight + 'px';
    var ie = (document.all) ? 1 : 0;
    var p = (ie) ? 'filter' : 'MozOpacity';
    var v = (ie) ? 'alpha(opacity=0)' : 0;
    theCurrentMenu2.style[p] = v;
    theCurrentMenu2.stl.display = 'block';
    var newOpac = new Effect.Opacity(theCurrentMenu2, {duration:0.5, from:0.0, to:1.0});
    if( ie )
    {
      /*
      //temporarily commented out because i can't figure any of this crap out
      var hideFrame;
      if( !document.getElementById( 'DivShim' ) )
      {
        hideFrame = document.createElement('iframe');
        hideFrame.id = 'DivShim';
        hideFrame.className = 'hiddeniframe';
        document.body.appendChild(hideFrame);
      }
      else
      {
        hideFrame = document.getElementById( 'DivShim' );
      }
      hideFrame.style.width = theCurrentMenu.offsetWidth;
      hideFrame.style.height = theCurrentMenu.offsetHeight;
      hideFrame.style.top = theCurrentMenu.style.top;
      hideFrame.style.left = theCurrentMenu.style.left;
      hideFrame.style.zIndex = 9;
      hideFrame.style.display = 'block';
      */
    }
  }
  else
  {
    alert('can not find menu for: ' + menuID);
  }
}
function clickHideContextMenu()
{
  if( theCurrentMenu != null && theCurrentMenu.style.display == 'block' && hideme == 1 )
  {
    theCurrentMenu.style.display = 'none';
    if( document.getElementById( 'DivShim' ) && ie )
    {
      var theiframe = document.getElementById( 'DivShim' );
      theiframe.style.display = 'none'
    }
  }
  hideme = 1;
}
function isSubMenuOpen()
{
  return theCurrentMenu2 != null && theCurrentMenu2.style.display == 'block'
}
function hideSubContextMenu()
{
  if( isSubMenuOpen() )
  {
    theCurrentMenu2.style.display = 'none';
    if( document.getElementById( 'DivShim' ) && ie )
    {
      var theiframe = document.getElementById( 'DivShim' );
      theiframe.style.display = 'none'
    }
  }
}
function delpal( divid )
{
  var paddiv = document.getElementById( divid );
  paddiv.parentNode.removeChild( paddiv );
}
function showLogin()
{
  document.getElementById( 'memberBut' ).style.display = 'none';
  var loginTable = document.getElementById( 'loginbox' );
  loginTable.style.opacity = 0.0;
  loginTable.style.display = 'block';
  var newwOpac = new Effect.Opacity( loginTable, {duration:1.0, from:0.0, to:1.0} );
}
function closeEditMode( bookmark_id )
{
  document.getElementById( bookmark_id + '_edit' ).style.display = 'none';
  document.getElementById( bookmark_id + '_read' ).style.display = 'block';
}
function showme( liid, linum )
{
  document.getElementById( liid + linum ).style.display = 'block';
  document.getElementById( liid + linum + 'link' ).style.display = 'none';
  var leftover = document.getElementById( 'criList' + linum ).getElementsByTagName( 'a' );
  var criItems = leftover.length;
  for( var i = 0; i <= leftover.length - 1; i++ )
  {
    if( leftover[i].style.display == 'none' )
    {
      criItems--;
    }
  }
  if( criItems == 0 )
  {
    document.getElementById( 'cri' + linum ).style.display = 'none';
  }
}
function removeAllChildren( node )
{
  while( node.hasChildNodes() )
  {
    node.removeChild( node.firstChild );
  }
}
function evalRunThisBlocks( indexValue )
{
  var runElements = document.getElementsByClassName( 'hiddenJsBlock' + indexValue );
  //alert( 'runElements = ' + runElements );
  //alert( 'runElements.len = ' + runElements.length );
  for( var i = 0; i < runElements.length; i++ )
  {
    //alert( 'eval-ing: <' + runElements[i].firstChild.data + '>' );
    eval( runElements[i].firstChild.data );
  }
}
function replacePlaceholders( copyNode, replaceValue )
{
  //check the current node's attributes for a #
  var curAttributes = copyNode.attributes;
  if( curAttributes != null )
  {
    for( var i = 0; i < curAttributes.length; i++ )
    {
      var curAttribute = curAttributes[i];
      if( curAttribute != undefined && curAttribute != null && curAttribute != 'null' && curAttribute != '' )
      {
        var curAttributeValue = curAttribute.value;
        if( curAttributeValue != undefined && curAttributeValue != null && curAttributeValue != 'null' )
        {
          var newValue = curAttributeValue.replace(/#/g, replaceValue);
          if( newValue != curAttributeValue )
          {
            curAttribute.value = newValue;
          }
        }
      }
    }
  }
  //for text nodes, replace any # in the text
  var curData = copyNode.data
  if( curData != undefined && curData != null && curData != 'null' )
  {
    var copyNodeData = copyNode.data;
    copyNodeData = copyNodeData.replace(/#/g, replaceValue);
    copyNode.data = copyNodeData;
  }
  var childNodes = copyNode.childNodes;
  if( childNodes != undefined && childNodes != null && childNodes != 'null' )
  {
    for( var childNode = 0; childNode < childNodes.length; childNode++ )
    {
      replacePlaceholders( childNodes[childNode], replaceValue);
    }
  }
}
function marshallParams( cur_form )
{
  var params = '';
  for( var i = 0; i < cur_form.elements.length; i++ )
  {
    var cur_element = cur_form.elements[i];
    //we support radio, text field, text area, and hidden
    if( (cur_element.type == 'radio' && cur_element.checked)
        || cur_element.type == 'hidden' 
        || cur_element.type == 'textarea'
        || cur_element.type == 'text')
    {
      if( !cur_element.disabled )
      {
        params = params + cur_element.name + '=' + encodeURIComponent( cur_element.value ) + '&';
      }
    }
    //also we now support single select boxen
    else if( cur_element.type == 'select-one' )
    {
      if( !cur_element.disabled )
      {
        var selectedValue = cur_element.options[ cur_element.selectedIndex ].value;
        params = params + cur_element.name + '=' + encodeURIComponent( selectedValue ) + '&';
      }
    }
  }
  return params;
}
function makeRandomString()
{
  var out = '';
  for( var i = 0; i < 10; i++ )
  {
    out = out + ( 'A' + Math.floor( Math.random() * 26 ) )
  }
  return out;
}
