/*
  Bottom Tab - jQuery extension
*/
(function($){

  $.fn.bottom_tab = function(settings) {
    var config = {
      child_class: 'tab',
      grandchild_class: 'inline_menu',
      clear_class: 'clearfix',
      tab_height: 80,
      handle_height:30,
      margin_right:35,
      menu_max_width:850,
      item_per_page: 5,
      item_width:170
    };
   
    var root = this;
    var tab_handles = new Array();
    var tab_menus = new Array();
    var current_tab  = undefined;
    var bt_prev;
    var bt_next;
    var on_animate = false;
    var auto_hide_timer = undefined;
    
    if (settings) $.extend(config, settings);
    
    /* Add class, change structure */
    this.each(
      function(){
        $(this).show();
                
        $(this).addClass('bottom_tab');
        $(this).find('>li>ul').addClass(config.clear_class).height(config.tab_height).css({position:'absolute'});

        $(this).find('>li').each(
          function(){
            tab_menus.push(this);
            $(this).addClass(config.child_class);
            // $(this).width(config.menu_max_width);
            $(this).height(config.tab_height);
            $(this).css('overflow','hidden');
          }
        );
        
        $(this).find('>li>ul').find('>li').each(
          function(idx){ 
            if($(this).parent().find('>li:first').get(0) == this){
              $(this).parent().width(0);
            }
            $(this).parent().width( $(this).width() + $(this).parent().width());
            $(this).parent().parent().width($(this).parent().width());
          }
        )
        
        // Set maximum width;
        $(this).find('>li').each(
          function(idx){
            if($(this).width() > config.menu_max_width){
              $(this).width(config.menu_max_width);
            }
            $(this).hover(
              function(){
                clearTimeout(auto_hide_timer);
              },
              function(){ 
                auto_hide_timer = setTimeout(function(){ $(tab_handles[idx]).trigger('click');},1000);
            }); 
          
          }

        );
        
        
        
        // Moves links (tab_handles) and prev / next button to the parent
        $(this).find('>li>a').each(function(idx){
        	// $(this).css({float:'right'});
          $(root).parent().append(this);  

          $(this).addClass('tab_handle');
          $(this).css({display:'block'});
          $(this).attr('href','#'); 

          tab_handles.push(this);

          this._idx = idx;
          $(this).hover(toggle_tab, handle_out);
          $(this).click(toggle_tab);

        });

        // prev / next button
        bt_prev = $(root).append('<a href="#" class="prev">Prev</a>').find('.prev').css('display','none').click(previous_click);
        bt_next = $(root).append('<a href="#" class="next">Next</a>').find('.next').css('display','none').click(next_click);
        
        bt_prev.hover(
          function(){
            clearTimeout(auto_hide_timer);
          }        
        )
        bt_next.hover(
          function(){
            clearTimeout(auto_hide_timer);
          }        
          
        )
          
        // Find the position when it floats
        var offset_page = $('#page').offset();
        for(var i = 0 ; i<tab_handles.length; i++){
          var offset = $(tab_handles[i]).offset();
          tab_handles[i]._offset_x = offset.left - (offset_page.left + config.margin_right);
        }
        // Change from float position to absolute
        for(var i = 0 ; i<tab_handles.length; i++){
          $(tab_handles[i]).css({
            position:"absolute",
            "z-index":90,
            left : tab_handles[i]._offset_x,
            bottom: -config.handle_height
          });
          
          // check if the menu size is shorter than the offset itself
          //  alert(tab_handles[i]._offset_x + ' - ' +  ($(tab_menus[i]).offset().left - offset_page.left) );
          /*                               
          if( (tab_handles[i]._offset_x + 30) <   ($(tab_menus[i]).offset().left -offset_page.left) ){
            var handle_padding = parseFloat($(tab_handles[i]).css('padding-left'))*2;
            var diff = ($(tab_menus[i]).width() - handle_padding - $(tab_handles[i]).width());
            $(tab_menus[i]).css('left',tab_handles[i]._offset_x - diff   );  
          }
          */

          var tm_left = tab_handles[i]._offset_x + $(tab_handles[i]).width() - $(tab_menus[i]).width() + ( parseFloat($(tab_handles[i]).css('padding-left'))*2);

          // IE6 deal
          /*
          if(BrowserDetect.version < 7 && BrowserDetect.browser=='Explorer'){
            tm_left += config.item_width;  
            tm_width = $(tab_menus[i]).width();
            $(tab_menus[i]).width(tm_width-config.item_width);
          }
          */
          
           if(tm_left< config.margin_right) tm_left = 'auto';

          $(tab_menus[i]).css('left',tm_left);
          
          if(tm_left =='auto'){
            // Double check the left offset
            offset = $(tab_menus[i]).offset();            
            if(offset.left > tab_handles[i]._offset_x){
              var offset_diff = offset.left  - tab_handles[i]._offset_x;
              tm_left = offset.left - offset_diff;
              if(tm_left + $(tab_menus[i]).width() < 1000){
                $(tab_menus[i]).css('left',tm_left);
              }
            }
          }
        }

        $(this).height(config.tab_height) ; // set the height
        $(this).width($(this).parent().width()) ; // set to parent width
        
        $(this).css({
          overflow:"hidden",
          display: "none", // hide it first
          position: "relative"
          }
        );
        
        // re-position the submenu containers
        $(this).find('>li').css('top', config.tab_height + config.handle_height );


      }
      
    )
    
    function handle_out(obj){
     // alert(on_animate);
      if(on_animate) return;
      if(current_tab == this){
        auto_hide_timer = setTimeout(function(){ $(current_tab).trigger('click');},1000);

      }
    }
        
    function toggle_tab(obj){
      if(on_animate){
        // return;
        if(current_tab!=this){
          $(current_tab).trigger('click');  
        }
      }        
      clearTimeout(auto_hide_timer);

      if(current_tab!=this){
        $(current_tab).trigger('click');
      }else{
        if(obj.type == 'mouseenter'){
          return;
        }
      }
      
     //  alert($(this).css('bottom').replace('px',''));
      if(!$(this).hasClass('selected')){
        // Up
        on_animate = true;
        if(root.css('display')=='none')root.show();
        $(this).animate({bottom: config.tab_height},{queue:false,complete:on_menu_up});  
        $(tab_menus[this._idx]).animate({top:0 },{queue:false, complete:function(){  on_animate = false} },'',function(){  on_animate = false});
        $(this).addClass('selected');
        current_tab = this;
      }else{
        // Down
        $(this).animate({bottom: -config.handle_height},{queue:false,complete:on_menu_down});  
        $(tab_menus[this._idx]).animate({top:config.handle_height + config.tab_height },{queue:false});
        $(this).removeClass('selected');
        bt_prev.hide();
        bt_next.hide();

        current_tab = undefined;
        
        setTimeout(function(){
            if(current_tab == undefined){
              root.hide();
            }
          }, 1200);
      }
       return false;
    }
   
    /* Event handlers */
    function on_menu_up(){
    // alert("HERE");
      refresh_nav();


    }
   
    function on_menu_down(){
      // alert(bt_prev);
    }

    function previous_click(){
      scroll(config.item_width * config.item_per_page);
      return false;
    }
   
    function next_click(){
      scroll(-config.item_width * config.item_per_page);
      return false;
    }
    
    function refresh_nav(new_left){
      
      var child_length =  $(tab_menus[current_tab._idx]).find('>ul>li').length;
      if(child_length > config.item_per_page){
        //bt_prev.fadeIn();
        bt_next.fadeIn();
      }else{
        bt_prev.hide();
        bt_next.hide();
        return;
      }
      
      //alert(new_left);
      var page      = $(tab_menus[current_tab._idx]).find('>.tab_menu');      
      var max_left  = page.width() - config.menu_max_width;      
      if(page.css('left')==undefined) return;
      // alert(page.css('left'));
      var page_left = parseFloat( page.css('left').replace('px',''));
      
      if(new_left!=undefined) page_left = new_left;
      
      if(Math.abs(page_left) == max_left){
        bt_next.hide();  
      }else{
        bt_next.show();  
      }
      
      if(page_left==0){
        bt_prev.hide();  
      }else{
        bt_prev.fadeIn();
        bt_prev.show();  
      }      
    }
    
    function scroll(offset){
      if(current_tab==undefined) return;
      var page = $(tab_menus[current_tab._idx]).find('>.tab_menu');
      var page_left = parseFloat( page.css('left').replace('px',''));


      //alert(page_left + amt);
      new_left = page_left + offset;
      if(new_left > 0) new_left = 0;
      
      if( Math.abs(new_left) + config.menu_max_width > page.width()){
        new_left = Math.abs(page.width() - config.menu_max_width)   * -1;
      }
              
      refresh_nav(new_left);
          
      
      var container_left = page.parent().offset().left;
      var container_right = page.parent().width() + container_left;
			var n =0;
			//alert(container_left + ' - ' + container_right);
      for (var i = 0; i< page.children().length; i++){
      	item_left = $(page.children()[i]).offset().left
      	if(item_left >= container_left && item_left < container_right){
      		n++;
      		hide_delay($(page.children()[i]), n * 100);
      	}
      }
      
      setTimeout(function(){
	      page.animate({opacity:0},'','', function(){
	        //alert("HERE");        
	        $(this).css('left', new_left);
	        // $(this).animate({opacity:1},'');  
	        
		      var container_left = $(this).parent().offset().left;
		      var container_right = $(this).parent().width() + container_left;
					var n =0;
					//alert(container_left + ' - ' + container_right);
		      for (var i = 0; i< $(this).children().length; i++){
		      	item_left = $($(this).children()[i]).offset().left
		      	if(item_left >= container_left && item_left < container_right){
		      		n++;
		      		$($(this).children()[i]).css({'opacity':1,'marginTop':'80px'});
		      		show_delay($($(this).children()[i]), n * 100);
		      	}
		      }                
	        
	        $(this).css('opacity',1);
	      })
      },600);
            
    }
   
   	function hide_delay(obj,sec){
   		setTimeout(function(){
   			$(obj).animate({opacity:1,marginTop:'80px'});
   			},sec);
   	}
   	function show_delay(obj,sec){
   	  var thumb = obj.find('.thumb');
   	  if(thumb.attr('bg')!='' ){
   	      thumb.css('background-image', 'url(' +  thumb.attr('bg') + ')' );
   	      thumb.attr('bg','');
   	  }
   	  var thumb_img = thumb.find('img');
   	  if(thumb_img.attr('url') !='' ){
   	    thumb_img.attr('src', thumb_img.attr('url'));
   	    thumb_img.attr('url','');  
   	  }
   	  
   	  
   	  
   		setTimeout(function(){
   			$(obj).animate({opacity:1,'marginTop':0});
   			},sec);
   	}
   
  }
})(jQuery);      
