/**
 * @requires jQuery
 * @class Module with tabbed content
 */

jQuery.fn.makeTabbedModule = function(options){
	var options = options || {};
	var tabs = [];
	var active_tab_suffix;
	var tabs_ul;
	/**
	 * Activates a given tab
	 * @param {Object} tab A tab from the this.tabs array
	 */
	function activateTab(tab){
		jQuery(tabs).each(function(){
			jQuery(this.link).removeClass("sel");
			jQuery(this.content).removeClass("active");
		});
		tabs_ul.attr("class", jQuery(tab.content).attr("id") + "-active m-tabs cf");
		jQuery(tab.link).append(active_tab_suffix);
		jQuery(tab.link).addClass("sel");
		jQuery(tab.content).addClass("active");
	}
	/**
	 * Creates the neccessary markup for all tabs
	 * @private
	 */
	function createTabs(that){
		active_tab_suffix = jQuery("<span></span>").attr("class", "structural").text(options.active_tab_suffix || " (visas nu)");
		tabs_ul = jQuery("<ul class=\"m-tabs cf\"></ul>").insertAfter(jQuery(".m-h",that));
		if (options.before_tabs) {
			jQuery("<p></p>").text(options.before_tabs).attr("class", "structural").insertBefore(tabs_ul);
		}
		jQuery(that).find(".m-c").each(function(){
			var tab	 = {};
			tab.content = this;
			tab.label   = jQuery(".tab-label", this).text();
			tab.link    = jQuery("<a href=\"#" + jQuery(tab.content).attr("id") + "\">" + tab.label +"</a>").addClass("tab-" + jQuery(tab.content).attr("id"));
			if(jQuery(tab.content).is(".active")){ tab.link.addClass("sel"); }
			tab.link.appendTo(tabs_ul).wrap("<li></li>");
			jQuery.each(['click'], function(i,e){
				tab.link[e](function(e){
					e.preventDefault();
					activateTab(tab);
				});
			});
			if ((document.location.hash == "#" + jQuery(tab.content).attr("id"))) {
				activateTab(tab);
			}
			tabs.push(tab);
		});
	}
	this.addClass("tabbed-module");
	createTabs(this);
};

/* Initiate the tabs, if any */
$(document).ready(function(){
	if (typeof $.fn.makeTabbedModule !== "undefined") {
		$('.m').each(function() {
			if ($(this).children('.m-c').length > 0) {
				$(this).makeTabbedModule();
			}
		});
	}
});
