
//TABCONTROLLER - JEREMY DILL - DEC 2007
//SMOOTH SWITCH BETWEEN TAB LI SETS USING _SELECTED APPENDED TO CLASS CONVENTION.
// V .02 BETA 
// TO SELECT ANY TAB SPECIFICALLY, AFTER INSTANCIATING, JUST CALL THE CLICK EVENT FOR THAT TAB $('#TABID').click();
// TO DESELECT ALL SIMPLY CALL WITH SETTING OF DESELECT:TRUE
(function() { 
	jQuery.fn.tabController = function (settings) {
	settings = jQuery.extend({
		 debug : false,
		 init:true,
		 startHidden:true,
		 activeClass:"", // USE IF YOU WANT TO ADD AND REMOVE AN ACTIVE STATE CLASS, EITHER USE THIS METHOD OR USE THE selectAppend MODE
		 selectAppend:true, // USE IN CONJUNCTION WITH UNIQUE CLASSNAMES ON EACH HYPERLINK, APPENDED "_selected" FOR ACTIVE
		 crossFade:true, // CROSS FADE ONLY WORKS WITH ABSOLUTELY POSITIONED ELEMENTS..OTHERWISE DIVS STACK WHILE FADING.
  		 clickFunc : function(obj) {
  				var make=function(){$(obj).parent('li').each(function(){$("."+this.id).fadeIn()});}
			 	if(settings.crossFade){
					if(selectedItem) {$("."+selectedItem.id).fadeOut();}
					make();
				} else {
					if(selectedItem) {
						$("."+selectedItem.id).fadeOut(200,make);
					} else make()
				}
				return false;
			 },
		deselect:false,
		restart:false
	  }, settings);
		return this.each(function(){
				var thisObj=this;
				
				if (settings.deselect){
					if(settings.selectAppend) selectedLink=$(thisObj).find("a[@class$='_selected']")[0];
					 else selectedLink=$(thisObj).find("a."+settings.activeClass)[0];
				//SWITCH OUT CLASSES
					if(selectedLink){
						if (settings.selectAppend){
							var scl=$(selectedLink).attr('className');
							$(selectedLink).addClass(scl.replace(/_selected/,"")).removeClass(scl);
						} else {
							if(settings.activeClass!="") $(selectedLink).removeClass(settings.activeClass);
						}
					}
					settings.startHidden=true;
				}  else  {
					if (!settings.restart){
						//ADD CLICK EVENT FOR TABS
						$(this).find("a").click(function(){
							if(settings.selectAppend) selectedLink=$(thisObj).find("a[@class$='_selected']")[0];
					 			else selectedLink=$(thisObj).find("a."+settings.activeClass)[0];
							
							selectedItem=$(selectedLink).parent('li')[0];
							
							if (selectedLink!=this) {
								//SWITCH OUT CLASSES
								if(selectedLink){
									if (settings.selectAppend){
										var scl=$(selectedLink).attr('className');
										$(selectedLink).addClass(scl.replace(/_selected/,"")).removeClass(scl);
									} else {
										if(settings.activeClass!="") $(selectedLink).removeClass(settings.activeClass);
									}
								}
								if (settings.selectAppend){
									var cl=$(this).attr('className');
									$(this).addClass(cl+"_selected").removeClass(cl);
								} else {
									if(settings.activeClass!="") $(this).addClass(settings.activeClass);
								}
							} else {
								this.nochange=true;
							}
							// EXECUTE CLICK FUNCTION
							// DEFAULT BEHAVIOUR - SWITCH OUT DISPLAYED CONTENT
							settings.clickFunc(this);
				
							return false;
						});
					}
				}
				//HIDE ALL ITEMS OF CLASS MATCHING ID OF NON-SELECTED ROW
				if(settings.startHidden) $(this).find('li').each(function(){$("."+this.id).hide()});

				//PAGE LOAD INITIALIZE->ACTIVATE CLICK EVENT ON SELECTED	
				if(settings.init) {
					if(settings.selectAppend) $(this).find("a[@class$='_selected']").click();
						else $(this).find("a."+settings.activeClass).click();
				}
		});
   }
})(jQuery);