(function($) {
    $.fn.extend({
        pmArticleTab: function(options) {
			
			var defaults = {
                contentContainer: ".article-content",
				tabContainer: ".article-tab-container",
                tabHeadingLevel: "h3",
				selectedTabClass: "selected"
            };

            var options = $.extend(defaults, options);
			
			return this.each(function(e) {
				var oArticle = $(this);
				var oArticleContent = oArticle.find(options.contentContainer);
				var oArticleTabWrapper = oArticle.siblings(options.tabContainer);
				var ArticleIndex = e;	
				
				if (oArticleContent && oArticleContent.find("h3").length >= 2) {
					//	Prepare HTML before handling tabs
					var strArticleContent = $.trim(oArticleContent.html());
					
					var regEx1 = "/<" + options.tabHeadingLevel + "/gi";
					var regEx2 = "/\/div><div><" + options.tabHeadingLevel + "/i";
					
					strArticleContent = strArticleContent.replace(eval(regEx1), "</div><div><" + options.tabHeadingLevel);
					strArticleContent = strArticleContent.replace(eval(regEx2), "div><" + options.tabHeadingLevel);
					
					oArticleContent.html("<div>" + strArticleContent + "</div>");
					
					//	Create tabs
					var oTabs = $("<ul/>");
					
					oArticleContent.find(options.tabHeadingLevel).each(function(e){
						var oTitle = $(this);
						var oTab = $("<li/>");
						var HeadingIndex = e;
						var HeadingId = "Article" + ArticleIndex + "Heading" + HeadingIndex;
						
						oTitle.parent().attr("id", HeadingId);
						
						if (HeadingIndex > 0) {
							oTitle.parent().hide();
						} else {
							oTab.addClass("selected");		
						}
						
						//	Handle tab events
						oLink = $("<a/>").attr("href", "#" + HeadingId).html("<span>" + oTitle.text() + "</span>").click(function(event){
							event.preventDefault();
							showHideArticleTabs($(this).attr("href"));
						});
						
						oTab.append(oLink);
						
						oTabs.append(oTab);
					});
					
					//	Add tabs to tabs wrapper
					oArticleTabWrapper.append(oTabs);
				}
				
				function showHideArticleTabs(tabId){
					//	show/hide tabs
					oArticleContent.children("div").hide();
					$(tabId).show();
					
					// select/unselect tabs
					oArticleTabWrapper.find("li").removeClass(options.selectedTabClass);
					oArticleTabWrapper.find("a[href=" + tabId + "]").parent().addClass(options.selectedTabClass);
				}
				
			});
		}
    });
})(jQuery);
