
/**
 * Menu Slider
 * 
 */
var menu = {
        
  busy:    		false,         // toggled to block multiple requests
  count:   		0,             // number of menu items
  current:    0,          // current menu item selected
  ul:   		  null,         
	items:   		new Array(),
	tempItem:   null,
	selected:   0,
   
  
	/**
	 * menu.init
	 * 
	 * Initalise the Menu object
	 */
  init: function ()
  {
    menu.items =  $$('.menuItem');
    menu.count =  menu.items.length;
		
		if( menu.count )
		{
	    menu.current = 0;  // reset the current menu item
	    menu.highlight();  // highlight the current menu item
		  menu.activate();   // activate event handlers
		}
		else
		{
      if( $('up')   ) $('up').innerHTML = '';
      if( $('down') ) $('down').innerHTML = '';
		}
		
		// apply custom styles
    $('menu').setStyle({ borderBottom: (nav.getSelected()=='contact' ? '#FFFFFF 0' : '#000000 1px solid') });
    //$('menu').setStyle({ height: (nav.getSelected()=='about' ? '115px' : '140px') });
  },
  
  
  
  /**
   * menu.highlight
   * 
   * highlight the current selected menu
   */
  highlight: function()
  {
    menu.items =  $$('.menuItem');
    
    for( var x=0; x<menu.items.length; x++ )
    {
      if(menu.items[x].childNodes.length==1 )
      {
        if( x==menu.current )
        {
          menu.items[x].childNodes[0].className = 'high';
        }
        else
        {
          menu.items[x].childNodes[0].className = '';
        }
      }
    }
  },
	
	
  
  /**
   * menu.getSelected
   * 
   * get the name of the current menu 
   */
  getSelected: function()
  {
    menu.items =  $$('.menuItem');
    menu.count =  menu.items.length;
    
    if( menu.count )
    {
      return menu.items[menu.current].childNodes[0].name;
    }
    return false;
  },
	
	
	
	/**
	 * menu.activate
	 * 
	 * activate the menu event handlers
	 * activate and display the up/down buttons if required
	 */
	activate: function ()
	{		
		menu.ul = menu.items[0].parentNode;
		
		for( var x=0; x<menu.count; x++)
		{
      if(menu.items[x].childNodes.length==1 )
      {
        Event.observe( menu.items[x].childNodes[0], 'click', menu.click, false );
      }
		}

		if( menu.count > 6 )
		{
      if( $('up') && !$('up').innerHTML )
			{
				$('up').innerHTML = '<img src="/images/up.gif" alt="" />';
        Event.observe( 'up', 'click', menu.up, false );
			}
			
			if( $('down') && !$('down').innerHTML )
			{
				$('down').innerHTML = '<img src="/images/down.gif" alt="" />';
				Event.observe( 'down', 'click', menu.down, false );
			}
		}
		else
		{
			$('up').innerHTML = '';
			$('down').innerHTML = '';
		}
	},
  
  
  
  /**
   * menu.down
   * 
   * slide the menu down except for the selected item
   */
  up: function()
  {   
    if( !menu.busy )
    {
      menu.busy = true;
      menu.tempItem = menu.items[0].innerHTML;
      
      $('menuul').childNodes[0].remove();

      var title = '<h1 id="fixed">'+menu.tempItem+'</h1>';
      $('menuInner').innerHTML = title+$('menuInner').innerHTML;
      $('menuul').setStyle({ position:'relative', top:'-1px' });
                  
      menu.slideUp();
    }
  },
	
	
	
	/**
	 * menu.down
	 * 
	 * slide the menu down except for the selected item
	 */
	down: function()
	{		
		if( !menu.busy )
		{
			menu.busy = true;
			menu.tempItem = menu.items[0].innerHTML;
			
			var title = '<h1 id="fixed">'+menu.tempItem+'</h1>';
		
			$('menuInner').innerHTML = title+$('menuInner').innerHTML;
			$('menuul').setStyle({ position:'relative', top:'-24px' });
      
      menu.slideDown();
		}
	},
  
  
  
  slideUp: function()
  {
    menu.items =  $$('.menuItem');
    menu.count =  menu.items.length;
    var last = menu.count-1;

    for( var x=last; x>last-5; x-- )
    {
      var newI = '<li class="menuItem">'+menu.items[x].innerHTML+'</li>';
      $('menuul').insert ({ 'top' : newI } );
    }  

    var top = (-23*5)-1;  
    $('menuul').setStyle({ top:top+'px' });

    var distance = -23*(5); 
    var duration = 0.2*(5); 
    var timeout = duration*1000;

    new Effect.Move( 'menuul', { x:0, y:-top, duration:duration, mode:'relative', afterFinish:menu.slideUpReturn } );
  },
  
  
  
  slideDown: function()
  {      
    menu.items =  $$('.menuItem');
    for( var x=1; x<6; x++ )
    {
      newI = new Element('li', {'class':'menuItem'}).update(menu.items[x].innerHTML);    
      $('menuul').insert ({ 'bottom' : newI } );
    }
    
    var distance = 23*(5);    
    var duration = 0.2*(x);
    var timeout = duration*1000;
    new Effect.Move( 'menuul', { x:0, y:-distance, duration:duration, mode:'relative', afterFinish:menu.slideDownReturn } );
  },
  
  
  
  /**
   * slideUpReturn
   * 
   * after sliding up we readjust the menu, removing the fixed selected title 
   */
  slideUpReturn: function()
  {   
    menu.items =  $$('.menuItem');
    for( var x=menu.items.length-1; x>menu.items.length-6; x-- )
    {   
      menu.items[x].remove();
    }
    $('menuul').setStyle({ position:'relative', top:'0px' });

    var newI = '<li class="menuItem">'+$('fixed').innerHTML+'</li>';      
    $('menuul').insert ({ 'top' : newI } );
    
    $('fixed').remove();
    
    menu.busy = false;
    menu.init();
  },
  
  
  
  /**
   * slideDownReturn
   * 
   * after sliding down we readjust the menu, removing the fixed selected title 
   */
  slideDownReturn: function()
  {   
    menu.items =  $$('.menuItem');
    for( var x=1; x<6; x++ )
    {   
      menu.items[x].remove();
    }
    $('menuul').setStyle({ position:'relative', top:'0px' });
    $('fixed').remove();
    
    menu.busy = false;
    menu.init();
  },
  
  
  
  /**
   * menu.returnToNorm
   * 
   * after sliding we readjust the menu, removing the fixed selected title 
   */
  returnToNorm: function()
  {   
    menu.items =  $$('.menuItem');
    for( var x=menu.items.length-1; x>menu.items.length-6; x-- )
    {   
      menu.items[x].remove();
    }
    $('menuul').setStyle({ position:'relative', top:'0px' });
    $('fixed').remove();
    
    menu.busy = false;
  },
	
	
	click: function(event)
	{
	  var element = $(Event.element(event));
		
		if( !menu.busy )
		{
			menu.busy=true;
			for( var x=0; x<menu.count; x++)
			{
				if( element == menu.items[x].childNodes[0] || element.parentNode == menu.items[x].childNodes[0] )
				{
				  menu.selected = x;
				  menu.update(1);
          if( BrowserDetect.browser=='Explorer' )
          {
            $('contentInner').setStyle({ display:'none' });
          }
          else
          {
            new Effect.Fade( 'contentInner', { duration:0.7 } );
          }
				}
			}
		}
		
		event.stop();
	},
	
	
	
	update: function(loadNext)
	{	  
		menu.current = menu.selected;
		menu.highlight();
		
		var y=0;
		if( !loadNext ) y=1;
		
		for( var x=y; x<menu.selected; x++ )
		{
			var newI = '<li class="menuItem">'+menu.items[x].innerHTML+'</li>';			
			$('menuul').insert ({ 'bottom' : newI } );
		}
		
		if( !loadNext ) x--;
		
		var distance = 23*(x);		
		var duration = 0.2*(x);
    var timeout = duration*1000;
		new Effect.Move( 'menuul', { x:0, y:-distance, duration:duration, mode:'relative' } );
		
		if( loadNext )
		{
			setTimeout( content.load, timeout);
	    setTimeout( menu.restore, timeout+400);
		}
		else
		{
      setTimeout( menu.init, timeout+200);
		}
	},
	
	
	
	restore: function()
	{
		for( var x=0; x<menu.current; x++ )
		{
			menu.items[x].remove();
		}
	  $('menuul').setStyle({ top:'0px' });

    menu.highlight();
		menu.init();
		menu.busy=false;
	},
  
  
  
  /**
   * menu.load
   * 
   * Load the corresponing menu for the nav link clicked (called by the nav object)
   */
  load: function()
  {
    var navName = nav.getSelected();    
    if( !navName ) return false;
        
    var path = '/menu/'+navName;

    new Ajax.Request(path,
    {
      method:'get',
      onComplete: function(transport)
      {
        var response = transport.responseText || "no response text";

        $('menuInner').innerHTML = response;
        
        if( BrowserDetect.browser =='Explorer' )
        {
          $('menuInner').setStyle({ display:'block' });
          content.preload();
        }
        else
        {
          $('menuInner').setStyle({ display:'none' });
          new Effect.Appear( 'menuInner', { duration:0.7, afterFinish:content.preload } );
        }
        menu.init();
      }
    });
  },
  
  
  
  /**
   * menu.load
   * 
   * Load the corresponing menu fromt he portfolio click on the homepage
   */
  jump: function()
  {
    if( $('homeImg') )
    {
      var navName = nav.getSelected();
      var menuName = $('homeImg').className;

      var path = '/menu/'+navName+'/'+menuName;

      new Ajax.Request(path,
      {
        method:'get',
        onComplete: function(transport)
        {
          var response = transport.responseText || "no response text";
          $('menuInner').setStyle({ display:'none' });
          $('menuInner').innerHTML = response;
          new Effect.Appear( 'menuInner', { duration:0.7, afterFinish:content.preload } );
          menu.init();
        }
      });
    }
    
    if( $('client_list') )
    {
      var navName = nav.getSelected();
      var menuName = $('client_list').className;

      var path = '/menu/'+navName+'/'+menuName;

      new Ajax.Request(path,
      {
        method:'get',
        onComplete: function(transport)
        {
          var response = transport.responseText || "no response text";
          $('menuInner').setStyle({ display:'none' });
          $('menuInner').innerHTML = response;
          new Effect.Appear( 'menuInner', { duration:0.7, afterFinish:content.preload } );
          menu.init();
        }
      });
    }
  }
	
}
  
document.observe("dom:loaded", menu.init );