(function($){
  $.fn.tabslider = function(options) {

    var defaults = {
      area: "cont",
      trigger: "trigger",
      visibleTitles: false,
      easing: "",
      speed: 500,
      onComplete : function() { }
    };

    var options = $.extend(defaults, options);

    var $t = $(this);

    //setup 
    var positions = [];
    var areas = [];
    var contW = $("."+options.area).outerWidth(true);
    var titleW = $("."+options.area).find("."+options.trigger).outerWidth(true);

    $("."+options.area).each(function(e){
      positions.push(e*titleW);
      if (e > 0) {
        $(this).css({left: contW+((e-1)*titleW), top: $(this).offset.top, position: "absolute"});
        $(this).parent().css({position: "relative", overflow: "hidden"});
      } else {
        if (options.visibleTitles == false) $(this).find("."+options.trigger).css({display: "none"});
      }
      areas.push($(this).find("."+options.trigger).attr("href").substr(1));
    });

    //slide
    $("."+options.trigger).click(function(){
      var sThisArea = $(this).attr("href").substr(1);
      var thisArea = $("#"+options.area+"-"+sThisArea);
      if (options.visibleTitles == false) thisArea.find("."+options.trigger).fadeOut();
      if (options.visibleTitles == false) thisArea.siblings().find("."+options.trigger).fadeIn();
      for (i=0;i<areas.length;i++) {
        if (areas[i] == sThisArea) {
          var actIndex = i;
        }
      }
      if (actIndex == 0) {
        for (i=1; i < positions.length; i++) {
          $("."+options.area).eq(i).animate({
            left: contW + positions[i-1]
          },options.speed);
        }    
      }
      for (i=0; i < positions.length; i++) {
        if (i != 0 && i <= actIndex) {
          $("."+options.area).eq(i).animate({
            left: positions[i]
          },options.speed);
        }
        if (i != 0 && i > actIndex) {
          $("."+options.area).eq(i).animate({
            left: contW + positions[i-1]
          },options.speed);
        }
      }

      options.onComplete.call(this,$(this));
      return false;
    });    
  };
})(jQuery);
