(function($)
{
	$.fn.extend({
		tcmsTabs: function(options)
		{
			var defaults = {
				wrapperClass:	"tcmsTabsWrapper",
				tabClass:	"tcmsTabsTab",
				headerClass:	"tcmsTabsHeader",
				bodyClass:	"tcmsTabsBody",
				tabNextPrevClass:	"tcmsTabsNextPrev",
				tabLinksID:	"",
				wrapperSelector:".tcmsTabsWrapper",
				headerSelector: ".tcmsTabsTab > .tcmsTabsHeader",
				bodySelector:	".tcmsTabsTab > .tcmsTabesBody",
				defaultTab:	0
			}
			
			var options = $.extend(defaults,options);
			return this.each(function() {
				var obj = $(this);
				var linksObj = null;
				
				var tabHeadings = $(options.headerSelector, obj);
				var tabBody = tabHeadings.next();
				
				tabHeadings.hide();
				tabBody.hide();
				
				tabBody.eq(options.defaultTab).show();
				
				if(options.tabLinksID != "") 
				{
					linksObj = $("#"+options.tabLinksID);
				}
				if(!linksObj) linksObj = obj;
				linksObj.prepend('<ul class="jqTabSelector"></ul>');
				tabHeadings.each(function() {
					var label = $(this).text();
					$("ul.jqTabSelector",linksObj).append("<li>" + label + "</li>");
				});
				
				var tabs = $("ul.jqTabSelector > li", linksObj);
				
				tabs.eq(options.defaultTab).addClass("jqTabSelected");
				
				var tabBodyLinks = $(".loadContentLink > a",obj);
				
				tabBodyLinks.each(function() {
					var contentURL = $(this).attr("href");
					//alert(contentURL);
					var parentDiv = $(this).parent();
					parentDiv.empty();
					parentDiv.load(contentURL);
				});
				
				var tabsNextPrev = $('.'+options.tabNextPrevClass,obj);
				tabsNextPrev.each(function(){
					$(this).append('<a class="jqTabsNextPrevButton jqTabsPrev">Last Page</a>');
					$(this).append('<a class="jqTabsNextPrevButton jqTabsNext">Next Page</a>');
				});
				if(options.defaultTab == 0) $('.jqTabsPrev').hide();
				else 
				{
					$('.jqTabsPrev').show();
					$('.jqTabsPrev').attr('activeTab',options.defaultTab-1);
				}
				
				if(options.defaultTab >= tabs.length-1) $('.jqTabsNext').hide();
				else 
				{
					$('.jqTabsNext').show();
					$('.jqTabsNext').attr('activeTab', options.defaultTab+1);
				}
				
				var nextPrevLinks = $('.jqTabsNextPrevButton',tabsNextPrev);
				
				nextPrevLinks.click(function() {
					var thisLink = $(this);
					var tabIndex = thisLink.attr('activeTab')
					tabs.removeClass("jqTabSelected");
					tabBody.hide();
					tabBody.eq(tabIndex).show();
					tabs.eq(tabIndex).addClass("jqTabSelected");
					
					if(tabIndex > 0)
					{
						$('.jqTabsPrev').show();
						$('.jqTabsPrev').removeAttr('activeTab');
						$('.jqTabsPrev').attr('activeTab',tabIndex-1);
					}
					else
					{
						$('.jqTabsPrev').hide();
						$('.jqTabsPrev').removeAttr('activeTab');
						$('.jqTabsPrev').attr('activeTab',0);
					}
					//alert(tabs.length+','+tabIndex);
					if(tabIndex < tabs.length-1)
					{
						$('.jqTabsNext').show();
						$('.jqTabsNext').removeAttr('activeTab');
						$('.jqTabsNext').attr('activeTab',tabIndex-(-1)); //HACK! tabIndex is a string, subtraction acts as if it were an int but addition acts as string concatination subtracting -1 works and saves looking it up again -_-;
					}
					else 
					{
						$('.jqTabsNext').hide();
						$('.jqTabsNext').removeAttr('activeTab');
						$('.jqTabsNext').attr('activeTab',0);
					}
					
				});
				
				tabs.click(function() {
					tabs.removeClass("jqTabSelected");
					tabBody.hide();
					$(this).addClass("jqTabSelected");
					
					var tabClicked = tabs.index($(this));
					tabBody.eq(tabClicked).show();
					
					if(tabClicked > 0)
					{
						$('.jqTabsPrev').show();
						$('.jqTabsPrev').removeAttr('activeTab');
						$('.jqTabsPrev').attr('activeTab',tabClicked-1);
					}
					else
					{
						$('.jqTabsPrev').hide();
						$('.jqTabsPrev').removeAttr('activeTab');
						$('.jqTabsPrev').attr('activeTab',0);
					}
					
					if(tabClicked < tabs.length-1)
					{
						$('.jqTabsNext').show();
						$('.jqTabsNext').removeAttr('activeTab');
						$('.jqTabsNext').attr('activeTab',tabClicked+1);
					}
					else 
					{
						$('.jqTabsNext').hide();
						$('.jqTabsNext').removeAttr('activeTab');
						$('.jqTabsNext').attr('activeTab',0);
					}
				});
			});
		}
	});
})(jQuery);
