/*
 *        mbTabset plug in
 * 				developed by Matteo Bicocchi on JQuery
 *        � 2002-2009 Open Lab srl, Matteo Bicocchi
 *			    www.open-lab.com - info@open-lab.com
 *       	version 1.8
 *       	tested on: 	Explorer, FireFox and Chrome for PC
 *                  	FireFox and Safari for Mac Os X
 *                  	FireFox for Linux
 *         MIT (MIT-LICENSE.txt) licenses.
 */



(function(jQuery) {

  jQuery.mbTabset={
    mbTabsetArray:[],
    options:{
      container:"",
      item:"a",
      axis:"x",
      sortable:true,
      position:"left",
      start:function(){},
      stop:function(){}
    },
    build: function(opt){
      this.each(function(){
        jQuery(this).addClass("mbTabset");
        var mbTabsetOptions = {};
        jQuery.extend (mbTabsetOptions, jQuery.mbTabset.options);
        var el={el: jQuery(this)};
        jQuery.extend (mbTabsetOptions, el);
        jQuery.extend (mbTabsetOptions, opt);
        jQuery(this).addClass(mbTabsetOptions.position);
        var tabsetContainerID=jQuery(this).attr("id")+"_container";

        jQuery(this).after("<div class='mbTabsetContainer' id='"+tabsetContainerID+"'></div>");
        var tabsetContainer=jQuery("#"+tabsetContainerID);
        var tabs= jQuery(this).find(mbTabsetOptions.item);
        this.opt=mbTabsetOptions;
        this.opt.tabsetContainer=tabsetContainer;
        this.opt.tabs=tabs;
        var hasSel= jQuery(tabs).is(".sel");
        if (!hasSel) jQuery(this).find(mbTabsetOptions.item+":first").addClass("sel");
        if (jQuery.metadata) jQuery.metadata.setType("class");
        jQuery(tabs).each(function(){
          jQuery(this).setAsMbTab(mbTabsetOptions);

        });
        if (mbTabsetOptions.sortable){
          jQuery(this).setSortableMbTabset(mbTabsetOptions);
        }
      });
    },
    setAsTab:function(opt){
      if (jQuery.metadata){
        jQuery.metadata.setType("class");
          if (jQuery(this).metadata().content) jQuery(this).attr("content",jQuery(this).metadata().content);
          if (jQuery(this).metadata().ajaxContent) jQuery(this).attr("ajaxContent",jQuery(this).metadata().ajaxContent);
          if (jQuery(this).metadata().ajaxData) jQuery(this).attr("ajaxData",jQuery(this).metadata().ajaxData);
      }
     if (jQuery(this).hasClass("sel")) jQuery(this).mb_drawAjaxMbTabContent(opt.tabsetContainer);
      jQuery(this).addClass("tab");
      jQuery(this).addClass("mbTab");
      jQuery(this).wrapInner("<span></span>");
      var myContainer=jQuery("#"+jQuery(this).attr("content"));
      myContainer.addClass("tabContent");
      opt.tabsetContainer.append(myContainer);
      myContainer.hide();
      if (jQuery(this).hasClass("sel")) myContainer.fadeIn();

      jQuery(this).bind("click",function(){
        jQuery(this).mb_drawAjaxMbTabContent(opt.tabsetContainer);
        if (jQuery(this).is(".disabled , .sel")) return;
        var choosenTab=jQuery(this);
        var actualCont="";
        jQuery(opt.tabs).each(function(){
          if (jQuery(this).is(".sel")){
            actualCont=jQuery(this).attr("content");
            jQuery(this).removeClass("sel");
          }
        });
        jQuery("#"+actualCont).fadeOut("fast",function(){
          choosenTab.addClass("sel");
          jQuery("#"+choosenTab.attr("content")).slideDown("fast");
        });
      });
    },
    addTab:function(taboptions){
      var opt = jQuery(this)[0].opt;
      var tabOpt={
        id:"tab_"+jQuery(this).find(opt.item).length+1,
        title:"newTab",
        ajaxContent:"newAjaxContent",
        ajaxData:""
      };
      jQuery.extend (tabOpt, taboptions);
      
      jQuery(this).append("<a id='"+tabOpt.id+"'>"+tabOpt.title+"</a>");
      var tab=jQuery(this).find("#"+tabOpt.id);
      tab.attr("ajaxContent", tabOpt.ajaxContent);
      tab.attr("content", "cont_"+tabOpt.id);
      tab.attr("ajaxData", tabOpt.ajaxData);
      opt.tabs= jQuery(this).find(opt.item);
      tab.setAsMbTab(opt);
      if (opt.sortable)
      jQuery(this).setSortableMbTabset(opt);
    },
    drawAjaxTabContent:function(tabsetContainer){
      if (jQuery(this).attr("ajaxContent")){
        if (jQuery("#"+jQuery(this).attr("content")).html()==null) {
          tabsetContainer.append("<div id='"+jQuery(this).attr("content")+"'> </div>");
        }
        var where=jQuery("#"+jQuery(this).attr("content"));
        jQuery.ajax({
          type: "POST",
          url: jQuery(this).attr("ajaxContent"),
          async: true,
          data: (!jQuery(this).attr("ajaxData"))?"":jQuery(this).attr("ajaxData"),
          success: function(html){
            where.html(html);
          }
        });
      }
    },
    setAjaxTabContent:function(contentUrl, contentData){
      jQuery(this).attr({ajaxContent:contentUrl, ajaxData:contentData});
    },
    toArray:function(el){
      return jQuery(el).sortable("toArray");
    },
    select: function(){
    },
    setSortable:function(opt){
      if (!opt) opt = jQuery(this)[0].opt;
      var tabs= jQuery(this).find(opt.item).not(".block");
      jQuery(tabs).each(function(){
        if(jQuery(this).find("i").size()==0){
        jQuery(this).find("span").prepend("<i>&nbsp;</i>").addClass("sortable");
        jQuery(this).find("i").bind("click",function(e){e.preventDefault();return false;});
        };
      });
      jQuery(this).sortable({
        item:opt.item,
        handle:"i",
        cursor:"move",
        revert:false,
        axis:opt.axis,
        opacity:.7,
        forcePlaceholderSize:true,
        start: function(){
          jQuery(this).find(".tab").addClass("floatEl");
          if (opt.start) opt.start();
        },
        stop: function(){
          jQuery(this).find(".tab").removeClass("floatEl");
          jQuery.mbTabset.mbTabsetArray= jQuery.mbTabset.toArray(jQuery(this));
          if (opt.stop) opt.stop();
        }
      });
    },
    clearSortable:function(opt){
      if (!opt) opt = jQuery(this)[0].opt;
      var tabs= jQuery(this).find(opt.item);
      jQuery(tabs).each(function(){
        jQuery(this).find("span").removeClass("sortable");
        jQuery(this).find("i").remove();
      });
      jQuery(this).sortable("destroy");
    },
    selectMbTab:function(){
      jQuery(this).click();
    }
  };
  jQuery.fn.setAsMbTab = jQuery.mbTabset.setAsTab;
  jQuery.fn.addMbTab = jQuery.mbTabset.addTab;
  jQuery.fn.setSortableMbTabset = jQuery.mbTabset.setSortable;
  jQuery.fn.mb_drawAjaxMbTabContent = jQuery.mbTabset.drawAjaxTabContent;
  jQuery.fn.mb_setAjaxMbTabContent = jQuery.mbTabset.setAjaxTabContent;
  jQuery.fn.clearSortableMbTabset = jQuery.mbTabset.clearSortable;
  jQuery.fn.buildMbTabset = jQuery.mbTabset.build;
  jQuery.fn.serializeMbTabset = jQuery.mbTabset.serialize;
  jQuery.fn.selectMbTab = jQuery.mbTabset.selectMbTab;
})(jQuery);