(function($){
	$.fn.tab = function(option){
		var params = jQuery.extend({
			tabHolderClass   : 'tabMenu',
			tabUnitTag       : 'li',			
			tabSelectedClass : 'on',
			tabSelectedType  : 'auto',
			contClass        : 'cont',
			random           : false,
			setStartNum      : null,			
			interval         : 0,
			eventType        : 'click',
			docData          : null,
			docDataBindFunc  : null,
			ajaxCall         : false,
			ajaxBindFunc     : null
		},option);

		return $(this).each(function(){
			var $this        = $(this);
			var tabHolder    = params.tabHolderClass;
			var $tabUnit     = $this.find('.'+params.tabHolderClass+' '+params.tabUnitTag);
			var tabUnit      = params.tabUnitTag;
			var tabOn        = params.tabSelectedClass;
			var selectedType = params.tabSelectedType;
			var cont         = params.contClass;
			var $cont        = $this.find('.'+params.contClass);			
			var idx          = (params.random) ? Math.floor(Math.random()*$tabUnit.size()) :
							   (params.setStartNum != null) ? params.setStartNum : 0;
			var evt          = params.eventType;	
			var contData     = params.docData;
			var docDataFunc  = params.docDataBindFunc;			
			var isover       = false;
			var interval     = params.interval;
			var ajax         = params.ajaxCall; 
			var ajaxFunc     = params.ajaxBindFunc;
			
			
			$cont.hide();			
			
			if($tabUnit.size() == 0 && $this.find('.'+tabHolder).next().is('.'+cont)){
				var $newMenu = $('<ul class="'+tabHolder+'"/>');
				$this.find('.'+tabHolder).each(function(){
					$('<li>'+$(this).html()+'</li>').appendTo($newMenu);
					$(this).remove();
				});
				$newMenu.insertBefore($cont.eq(0));
				$tabUnit = $this.find('.'+params.tabHolderClass+' '+params.tabUnitTag);
				idx  = (params.random) ? Math.floor(Math.random()*$tabUnit.size()) :
					   (params.setStartNum != null) ? params.setStartNum : 0;
			}
			$tabUnit.each(function(i){$(this).attr('rel',i)});			
			$this.hover(function(){isover = true;},function(){isover = false;});
			$tabUnit.bind(evt,goTo);
			draw(idx);
			if(interval > 0) setInterval(function(){autoPlay()}, interval);			
			function autoPlay(){if(isover) return;next();}
			function goTo(e){var selIdx = $(this).attr('rel');draw(selIdx);e.stopPropagation();e.preventDefault()}
			function next(){idx++;draw()}					
			function draw(selIdx){	
				idx = (selIdx) ? selIdx : idx;				
				if(idx == $tabUnit.size() || selIdx == 0) idx = 0;				
				var $thisTab = $tabUnit.eq(idx);
				$thisTab.addClass(tabOn).siblings(tabUnit+'.'+tabOn).removeClass(tabOn);

				if($thisTab.find('img').size() > 0 /*&& selectedType !='auto'*/){
					var $thisImg = $thisTab.find('img');					
					if($thisImg.attr('src').indexOf('_on.gif') == -1 ){
						
						$thisImg.attr('src',$thisImg.attr('src').replace('.gif','_on.gif'));
					}
					var $prevSel = $tabUnit.find('img').not($thisImg);					
					$prevSel.each(function(){
						$(this).attr('src',this.src.replace('_on.gif','.gif'));
						
					});
				}

				if($cont.size() == 1 && contData != null){ 					
					docDataFunc(idx,contData,$cont);
					$cont.show();
				} else if($cont.size() == 1 && ajax){
					var callPage = $tabUnit.eq(idx).find('a').attr('href');
					ajaxFunc(idx,callPage,$cont);
					$cont.show();
				} else {
					$cont.eq(idx).show().siblings('.'+cont+':visible').hide();
				}					
			}			
		});
	}
})(jQuery);
