/*!
 * jQuery tab! - v1.0 - 6/8/2010
 * http://www.zhangjingwei.com/archives/jquery-tab-plugins/
 * 
 * Copyright (c) 2010  zhangjingwei
 * Dual licensed under the MIT and GPL licenses.
 */
(function($){
  $.tab = {};
	$.tab = {};
  $.tab.defaults = {
		tabname : "data-tab",
		classname : "data-onclass",
		ajaxname : 'data-ajax',
		typename : "data-type",
    hidden : "ui-tabs-hide",
    event : "mouseenter",
    ajax: false,
    ajaxOptions : null
  }

  $.fn.tab=function(options,fn){
    var options;
	if($.isFunction(options)){
		fn=options;
		options = $.extend({}, $.tab.defaults);
	}else{
		options = $.extend({}, $.tab.defaults, options);
	}
    return this.each(function(){
			var
				obj = $(this),
				tabName = options.tabname,
				ajaxName = options.ajaxname,
				className = options.classname,
				boxObj = obj.attr(tabName),
				tabType = obj.attr(options.typename),
				ajaxUrl = obj.attr(ajaxName),
				useAjax = !!obj.attr(ajaxName) || options.ajax,
				ajaxOptions = options.ajaxOptions,
				eventType = options.event,
				activeClass = obj.attr(className),
				hideClass = options.hidden
			;

			/**
			* 初始化
			*/
			// 一个类散列的结构，通过判断typename的值，将同类的组成数组压入对象属性中
			if(!!!$.tab[tabType]){
				$.tab[tabType] = [];
				$.tab[tabType].push([obj,boxObj]);
			}else{
				$.tab[tabType].push([obj,boxObj]);
			}
			// 如果使用了ajax且初始页无数据时载入数据
			if(obj.hasClass(activeClass) && useAjax && !!!$.trim($(boxObj).html())){
				getTabHtml();
			}
			
			/**
			* 绑定舌签
			*/
			obj.bind(eventType,function(){
				if(!obj.hasClass(activeClass)){
					$.each($.tab[tabType],function(i,n){
						n[0].removeClass(activeClass);
						$(n[1]).addClass(hideClass)
					})
					obj.addClass(activeClass);
					$(boxObj).removeClass(hideClass);
					if(useAjax){getTabHtml()}
					fn.call(document,obj,$(boxObj));
				}
			});

			/**
			* 切换过程
			*/
			function getTabHtml(){
					$.ajax($.extend({}, ajaxOptions, {
						url: ajaxUrl,
						success: function(data){
							$(boxObj).html(data);
						}
					}));
			}
    });
  }
})(jQuery);
