
var g_queryParameters = new Array();

function menuStateQuery ()
{
  var queryString = window.location.search.substring(1);
  var queryParams = queryString.split('&');

  for( var ii=0; ii<queryParams.length; ii++ )
    {
      var begin = queryParams[ii].indexOf('=');
      if(begin > 0)
        {
          var key = queryParams[ii].substring(0,begin);
          var value = queryParams[ii].substring(begin+1);
          g_queryParameters[key] = value;
        }
    }
}

function menuStateFromQuery ()
{
  g_queryParameters['menu'] = null;
  g_queryParameters['submenu'] = null;
  g_queryParameters['page'] = null;
  g_queryParameters['hilight'] = null;

  menuStateQuery();

  if( g_queryParameters['menu'] )
    menuStateSet( g_queryParameters['menu'], g_queryParameters['submenu'], g_queryParameters['hilight'] );
  /* Sometimes people omit the menu, eg in teh Top 10, but we can guess for products */
  else if( g_queryParameters['page'] == 'product.php') {
    g_queryParameters['menu'] = 'menuProducts';
    menuStateSet( g_queryParameters['menu'], g_queryParameters['submenu'], g_queryParameters['hilight'] );
  }
  else
    menuStateSet( 'menuHome' );

  /*if( g_queryParameters['page'] )
    loadDiv( unescape(g_queryParameters['page']) );
  else
    loadDiv( './home2.php' );
   */
   
}


/**
   This allows the selection of a menu object via an associated link.
   When a link is associated with a menu object,
   the menu object adds a reference
   to itself with the associatedMenu property of the link
   
*/
function menu_selectNonMember()
{

  var selectedMenu = this.associatedMenu;
  selectedMenu.select();
  // menuStateSave();
  return true; //override default action?
}


var g_topLevelMenus = new Array();

function menu_deselect_all()
{
  for( var ii=0; ii < this.siblings.length; ii++)
    this.siblings[ii].deselect();
}

/**
   Deselect a menu object, hiding any submenus and switching the graphic used
   to indicate its unselected status
*/
function menu_deselect()
{
  for(var jj=0; jj < this.menuItems.length; jj++)
    {
      if( this.menuItems[jj].deselect )
	this.menuItems[jj].deselect();
      if( this.menuItems[jj].element && this.menuItems[jj].element.style )
	this.menuItems[jj].element.style.visibility = 'hidden';
      else if( this.menuItems[jj].style )
	this.menuItems[jj].style.visibility = 'hidden';
    }

  this.selected = false;
  
  this.element.className = 'menuButtonU';
  if( this.element.tBodies )
    for(var ii=0; ii<this.element.tBodies[0].rows.length; ii++)
      for( var jj=0; jj<this.element.tBodies[0].rows[ii].cells.length; jj++)
	{

	  var elementCell = this.element.tBodies[0].rows[ii].cells[jj];
	  if( elementCell.className == 'menuButtonD' )
	    elementCell.className = 'menuButtonU';
	  else if( elementCell.className == 'submenuButtonD' )
	    elementCell.className = 'submenuButtonU';
	}
}


/**
   Select a menu object. This deselects all its siblings, shows any submenu items
   (selecting the first item by default) and switches the graphic to indicate
   its selected state
*/
function menu_select()
{
  for( var ii=0; ii < this.siblings.length; ii++)
    if( this.siblings[ii].deselect )
      this.siblings[ii].deselect();

  this.selected = true;

  for(var jj=0; jj < this.menuItems.length; jj++)
    {
      if( this.menuItems[jj].element && this.menuItems[jj].element.style )
	this.menuItems[jj].element.style.visibility = 'visible';
      else if( this.menuItems[jj].style )
	this.menuItems[jj].style.visibility = 'visible';
    }

  if( this.onSelect )
    this.onSelect();
  

  if( this.menuItems.length >= 1 && this.menuItems[0] )
    this.menuItems[0].select();

  
  this.element.className = 'menuButtonD';
  if( this.element.tBodies )
    for(var ii=0; ii<this.element.tBodies[0].rows.length; ii++)
      for( var jj=0; jj<this.element.tBodies[0].rows[ii].cells.length; jj++)
	{
	  var elementCell = this.element.tBodies[0].rows[ii].cells[jj];
	  if( elementCell.className == 'menuButtonU' )
	    elementCell.className = 'menuButtonD';
	  else if( elementCell.className == 'submenuButtonU' )
	    elementCell.className = 'submenuButtonD';
	}
}

function menu_hilight()
{
  for( var ii=0; ii < this.siblings.length; ii++)
    this.siblings[ii].deselect();

  this.selected = true;
  this.element.className = 'menuButtonD';
  for(var ii=0; ii<this.element.tBodies[0].rows.length; ii++)
    for( var jj=0; jj<this.element.tBodies[0].rows[ii].cells.length; jj++)
      {
        var elementCell = this.element.tBodies[0].rows[ii].cells[jj];
        if( elementCell.className == 'menuButtonU' )
          elementCell.className = 'menuButtonD';
        else if( elementCell.className == 'submenuButtonU' )
          elementCell.className = 'submenuButtonD';
      }
}

function menu_selectItem( itemToSelect )
{
  var elementToSelect = document_getElementById( itemToSelect );
  for( var ii=0; ii<this.menuItems.length; ii++)
    if( this.menuItems[ii].element == elementToSelect )
      {
        this.menuItems[ii].select();
        return;
      }
}

/**
   Adds a submenu item to the menu object, passing an associated link that may be null
*/
function menu_addItem( linkToAssociate )
{
  this.menuItems[ this.menuItems.length ] = new menu( this.menuItems, linkToAssociate );
  return this.menuItems[ this.menuItems.length - 1 ];
}

function menu_addGraphic( idOfGraphic )
{
  this.menuItems[this.menuItems.length] = document_getElementById(idOfGraphic);
  //alert( "Adding graphic: " + idOfGraphic );
}

/**
   Associates a menu object with a link. The link may be null,
   a link element (tested by the presence of the href property)
   or a string id.
*/
function menu_associateLink( linkToAssociate )
{
  if( linkToAssociate && linkToAssociate.href )
    this.link = linkToAssociate;
  else if( linkToAssociate )
    this.link = document_getElementById( linkToAssociate );

  if( !this.link )
    {
      var elementChildren = this.element.getElementsByTagName('a');
      if( elementChildren.length > 0 )
        this.link = elementChildren.item(0);
    }
  if( this.link )
    {
      this.link.associatedMenu = this;
      this.link.onclick = menu_selectNonMember;
    }
}


/**
   Constructs a menu object
*/
function menu( siblingArray, associatedElementId, associatedLink )
{
  //properties
  this.siblings = siblingArray;
  this.selected = false;
  this.menuItems = new Array(); //menuItemArray;
  this.element = document_getElementById( associatedElementId );


  //methods
  this.select = menu_select;
  this.deselect = menu_deselect;
  this.hilight = menu_hilight;
  this.addItem = menu_addItem;
  this.addGraphic = menu_addGraphic;
  this.associateLink = menu_associateLink;

  if( siblingArray )
    siblingArray[ siblingArray.length ] = this;

  //link properties setup
  this.associateLink( associatedLink );
}

var g_borderW = new Array();
var g_borderH = new Array();

g_borderW['back_tl'] = 320;
g_borderH['back_tl'] = 128;

g_borderW['back_tr'] = 464;
g_borderH['back_tr'] = 80;

g_borderW['back_bl'] = 64;
g_borderH['back_bl'] = 96;

g_borderW['back_br'] = 64;
g_borderH['back_br'] = 80;

g_borderH['back_t'] = 80;
g_borderH['back_b'] = 29;
g_borderW['back_l'] = 32;
g_borderW['back_r'] = 40;

var g_marginTop = 0;

/**
   Moves all screen elements to the appropriate place on resize
*/
function resizeHandler ()
{
  var width = document_getWidth();//  16;
  var height = document_getHeight();


  alignElement( 'back_tl',
                0, g_marginTop,
                g_borderW['back_tl'], g_borderH['back_tl'] );

  alignElement( 'back_tr',
                width-g_borderW['back_tr']-10, g_marginTop,
                g_borderW['back_tr'], g_borderH['back_tr'] );

  alignElement( 'back_bl',
                0, height-g_borderH['back_bl'],
                g_borderW['back_bl'], g_borderH['back_bl'] );

  alignElement( 'back_br',
                width-(g_borderW['back_br']), height-g_borderH['back_br'],
                g_borderW['back_br'], g_borderH['back_br'] );

  alignElement( 'back_t', g_borderW['back_tl'], g_marginTop,
                width-(g_borderW['back_tl']+g_borderW['back_tr']),
                g_borderH['back_t'] );

  alignElement( 'back_b', g_borderW['back_bl'], height-g_borderH['back_b'],
                width-(g_borderW['back_bl']+g_borderW['back_br']),
                g_borderH['back_b'] );

  alignElement( 'back_l', 0, g_borderH['back_tl']+g_marginTop,
                g_borderW['back_l'],
                height-(g_borderH['back_tl']+g_borderH['back_bl']+g_marginTop) );
  
  alignElement( 'pageFrame', 25, 88, width-35, height-(128) );
  alignElement( 'menuLayer', 20, height-28 );
  
  // alignElement( 'topologikaSmallLogo', width-134, height-64 );
  alignElement( 'col_logo', width-610, 4 );

  // DWilcox Nov 2008. Im not sure why we had this.
  // It gobbled up memory in stages, I think it is an unhealthy javascript loop, and
  // it *seems* to be unecessary. Time will tell.
  //setTimeout('resizeHandler()', 10);
}


function generateMenuLayer( idOfMenu, lableOfMenu, isSubmenuOf, urlToLoad, isSubSubmenuOf, isDropMenu )
{
  var writeString = '<!-- autogenerated -->\n';

  writeString += ( '<table id=\"' + idOfMenu + '\" class=' );

  if( isDropMenu )
    writeString += ( '\"dropmenuButton\" ');
  else if( isSubmenuOf )
    writeString += ( '\"submenuButtonU\" ' );
  else
    writeString += ( '\"menuButtonU\" ' );
  writeString += ( 'width=\"80\" height=\"32\" cellspacing=\"0\" border=\"0\">\n' );

  writeString += ( '  <tr height=\"32\">\n' );
  writeString += ( '    <td width=\"100%\" align=\"center\" class=' );

  if( isDropMenu )
    writeString += ( '\"dropmenuButton\">\n ');
  else if( isSubmenuOf )
    writeString += ( '\"submenuButtonU\">\n' );
  else
    writeString += ( '\"menuButtonU\">\n' );

  element = document_getElementById(idOfMenu);
  
  if( idOfMenu == 'menuProductsSubject' ||
	  idOfMenu == 'menuProductsAge' ||
	  idOfMenu == 'menuProductsPlatform'
	  )
     	writeString += ( '    <a href=\"# ' );
   else
	   writeString += ( '    <a href=\"./index.php' );

   if( isSubSubmenuOf && !isDropMenu )
	{
	  //writeString += '';
	  
	  writeString += '?menu=';
	  writeString += isSubSubmenuOf;
	  //writeString += '&submenu=';
	  //writeString += isSubmenuOf;
	  
	  if( urlToLoad )
	    {
	      writeString += '&page=';
	      //writeString += escape(urlToLoad);
	      writeString += urlToLoad;
	    }
	  else
	    {
	      //
	    }
	}
      else
	{
	  //writeString += ( '?menu=' );
	  if( isDropMenu )
	    {
	      writeString += ( '?menu=' );
	      writeString += ( isSubSubmenuOf );
	      writeString += ( '&hilight=' );
	      writeString += isSubmenuOf;
	    }
	  else if( isSubmenuOf )
	    {
	      writeString += ( '?menu=' );
	      writeString += ( isSubmenuOf );
	      writeString += '&submenu=';
	      writeString += idOfMenu;
	    }
	  else
	    {
	      writeString += ( '?menu=' );
	      writeString += idOfMenu;
	    }
	  if( urlToLoad    /*&& !isDropMenu*/)
	    {
	      writeString += '&page=';
	      //writeString += escape(urlToLoad);
	      writeString += urlToLoad;// + "\"";
	    }
	}
    

  writeString += '\" ';

  writeString += ( 'class=' );
  
  if( isSubmenuOf || isDropMenu )
    writeString += ( '\"submenuButtonULink\">\n' );
  else
    writeString += ( '\"menuButtonULink\">\n' );

  writeString += ( lableOfMenu );

  writeString += ( '\n    </a>\n    </td>\n  </tr>\n</table>' );

  //alert( writeString );

  //if( isDropMenu )
  // alert(writeString);

  document.write( writeString );

}

function loadFrame ( urlToLoad )
{
  frames['pageFrame'].location.href = urlToLoad;
  //alert( "Loading: " + frames['pageFrame'].location.href + " in page frame\nCalled with: " + urlToLoad );
}

function loadDiv ( urlToLoad )
{
  include_once (urlToLoad);
  document.getElementById('pageFrame').innerHTML = urlToLoad;
  //alert( "Loading: " + frames['pageFrame'].location.href + " in page frame\nCalled with: " + urlToLoad );
}

var g_cookieName = 'topologika_menuStateCookie';


function menuStateSave ()
{
  var mainMenuStateName, subMenuStateName;

  for(var ii=0; ii<g_topLevelMenus.length; ii++)
    {
      if( g_topLevelMenus[ii].selected )
        {
          var mainMenu = g_topLevelMenus[ii];
          mainMenuStateName = mainMenu.element.id;

          if(mainMenu.menuItems.length >= 1)
            subMenuStateName = mainMenu.menuItems[0].element.id;

          for(var jj=0; jj<mainMenu.menuItems.length; jj++)
            {
              // alert( mainMenu.menuItems[jj].element.id + ', ' + mainMenu.menuItems[jj].selected );
              if(mainMenu.menuItems[jj].selected)
                {
                  subMenuStateName = mainMenu.menuItems[jj].element.id;
                  break;
                }
            }

          var cookieString = mainMenuStateName + ',' + subMenuStateName;
          // alert( 'Cookie save: ' + cookieString);
          document_setCookie( g_cookieName, cookieString, 7 );
        }
    }
}

function menuStateSet( mainMenuStateName, subMenuStateName, hilightStateName )
{
  for(var ii=0; ii<g_topLevelMenus.length; ii++)
    {
      var mainMenu = g_topLevelMenus[ii];
      if( mainMenu.element.id == mainMenuStateName )
        {
          mainMenu.select();
          if( !subMenuStateName && !hilightStateName )
            return;
	  //alert( "Submenu: " + subMenuStateName + "\nHilight: " + hilightStateName );
          for(var jj=0; jj<mainMenu.menuItems.length; jj++)
            {
              // alert( mainMenu.menuItems[jj].element.id + '==' + subMenuStateName + '?' );
              if( mainMenu.menuItems[jj].element.id == subMenuStateName )
                {
                  mainMenu.menuItems[jj].select();
                  break;
                }
	      if( mainMenu.menuItems[jj].element.id == hilightStateName )
		{
		  mainMenu.menuItems[jj].hilight();
		  break;
		}
            }
          return;
        }
    }
}

function menuStateLoad ()
{
  var cookieString = document_getCookie( g_cookieName );
  // alert( 'Cookie load: ' + cookieString );
  var mainMenuStateName, subMenuStateName;

  var commaPos = cookieString.indexOf(',');

  if(commaPos < 0)
    {
      mainMenuStateName = cookieString;
    }
  else
    {
      mainMenuStateName = cookieString.substring(0,commaPos);
      subMenuStateName = cookieString.substring(commaPos+1,cookieString.length);
    }

  if( !mainMenuStateName || mainMenuStateName.length == 0 )
    return;

  menuStateSet( mainMenuStateName, subMenuStateName );

}

