(function($) {
  $.fn.slideMenu = function(o) {
    o = $.extend({
      speed: 5,
      easing: null,
      onDemand: true
    }, o || {});
    
    return this.each(function() {
      var t = $(this);
      var ul = $('ul', t);
      var li = $('li', ul);
      var liw = [];
      var ulw = 0;
      li.each(function(){
        var w = $(this).outerWidth(true);
        liw.push(w);
        ulw += w + 0.5;
      });
      if (o.onDemand && t.width() >= ulw) return;
      
      var div = $('<div id="secondary-menu-wrapper">').addClass('slide-menu');
      var prev = $('<a herf="#">').text('<<').addClass('slide-menu prev').css({float: "left", padding: "0 5px", cursor: "pointer"});
      var next = $('<a herf="#">').text('>>').addClass('slide-menu next').css({float: "left", padding: "0 5px", cursor: "pointer"});
      
      ul.css({margin: "0", padding: "0", position: "relative", "list-style-type": "none", "z-index": "1"});
      li.css({overflow: "hidden", float: "left"});
      ul.before(prev);
      ul.after(next);
      
      var divw = t.width() - prev.outerWidth(true) - next.outerWidth(true) - 1;
      div.css({overflow: "hidden", float: "left", position: "relative", "z-index": "2", left: "0px"});
      div.css({width: divw+"px"});
      
      ul.css({width: ulw+"px"});
      ul.wrap(div);
      div = $('#secondary-menu-wrapper');
      
      var interval = false;
      prev.click(function() {
        go(o.speed*10);
      }).mouseover(function() {
        interval = setInterval(function() {
          go(o.speed);
        }, 20);
      }).mouseout(function() {
        clearInterval(interval);
        interval = false;
      });
      next.click(function() {
        go(-o.speed*10);
      }).mouseover(function() {
        interval = setInterval(function() {
          go(-o.speed);
        }, 20);
      }).mouseout(function() {
        clearInterval(interval);
        interval = false;
      });
      
      function go(offset) {
        if (divw >= ulw) return;
        var left = ul.offset().left;
        var divleft = div.offset().left;
        if (left+offset > divleft) 
          ul.offset({left: divleft});
        else if (left+ulw+offset < divleft+divw)
          ul.offset({left: divleft+divw-ulw});
        else
          ul.offset({left: left+offset});
      }
    });    
  };
})(jQuery);
