;(function($){

	 $.fn.gdTab = function(settings){
	 
	 	settings = $.extend({
	 		tabConteiner: ".conteiner",		/*nazwa obiektu ktory bedzie przetwarzany na pojedynczy tab */
	 		tabHeader: "h3",				/* nazwa obiektu ktory bedzie poszukiwany i wyświetlany na pasku z tabami */
			tabsNavName: "gdTab",			/*nazwa utworzonego obiektyu z tabami do przelaczania, kazda kolejna instancja bedzie dodawana miala numer*/
			tabsNavClass: "",				/*klasa dodawana do utworzonego obiektyu z tabami do przelaczania*/
			hideTabHeader : true,			/*czy ukrywac naglowki po przeksztalceniu */
			filtersClass : null	,	    	/*klasa z której brane sa filtry do wyświetlenia */
			extraTabsNavName : "extra",
			setNumber : false,
			tabsContainers : '',
			tabsNav : '' ,
			onTabClick : null
	 	}, settings)
	 	

		useFilter =( settings.filtersClass != null && settings.filtersClass != "") ? true :  false;
        clicked_tab = false;

		/*Przycisk zamykajacy do filtrow*/		
		if (useFilter) {
			$(this).find(".closeBtn").click(function(){
				$(this).parent().slideUp("slow");
			})
		}
		
		if (useFilter) 
		{
			$(this).find("."+settings.filtersClass).find("input").click(function(){
				container =  $(this).parents("." +settings.filtersClass).parent();
				toogleElements = $(this).attr("value");
				relations = $(this).attr("rel");

				if (relations != undefined && relations != "")
				{
					loadExternalData(this, relations,container); 
				}

				$(container).find("table").hide();
				$(container).find("table."+toogleElements).show(0);
			});
		}

		function loadExternalData(_this,relations,container)
		{
			$(_this).removeAttr("rel");

			loading(1,container);

			$.post(relations, function(data){
				
				$(container).append(data);
					endpage('box');
				$(container).find(".pagin_pagin span").removeAttr("id");
				loading(0);
			});
		}
		
	 	function clickTabs()
		{
			$(this).parent().parent().find("a").removeClass("active");
			$(this).parent().parent().parent().find(settings.tabConteiner).hide(0);

			$("#" + $(this).attr("href").split("#")[1]).show(0);
			$(this).addClass("active");

			newHash = $(this).attr("href").split("#")[1]
	
			$(this).parent().parent().parent().find(settings.tabConteiner).find("form").each(function() {
				oldHref = $(this).attr("action").split("#")[0];
				$(this).attr("action",newHref = oldHref + "#" + 'tab_' + newHash);
			})

			window.location.hash = 'tab_' + newHash;
			
			if ($(this).parent().parent().parent().find(settings.tabConteiner+":visible").find("."+settings.filtersClass).length > 0)
			{
				$(this).parent().parent().find("li."+settings.extraTabsNavName).show(0);
			}
// 			else
// 			{
// 				$(this).parent().parent().find("li."+settings.extraTabsNavName).hide(0);
// 			}

            clicked_tab = true;
			
			if(settings.onTabClick)
				settings.onTabClick();
			
            return false;
		}

		function filterClickTabs()
		{
			$(this).parent().parent().parent().find("."+settings.filtersClass).slideToggle("slow");
		}
		
		function triggerBrowserBack()
		{
            if(clicked_tab)
            {
                urlHashTrigger = window.location.hash;
                clicked_tab = false;
				return;
            }

            if (urlHashTrigger != window.location.hash)
			{
                urlHashTrigger = window.location.hash;
				$(settings.tabsNav).find("a").removeClass("active");
				$(settings.tabsContainers).hide();
                startUrl = window.location.hash.substr(5);

                if(startUrl.indexOf(settings.tabsNavName)==-1)
                {
                    top_nr = startUrl.replace(/.+([0-9]+)_.+/g, '$1');
                    if(parseInt(top_nr)==top_nr)
					{
						tab_nr = top_nr;
                    }
					else
					{
						tab_nr = 0;
					}
                }
				else
				{
					tab_nr = parseInt(startUrl.replace(/.+_([0-9])/g, '$1')) - 1;
				}
				
				if(isNaN(tab_nr))
				{
                    tab_nr = 0;
				}

                $(settings.tabsContainers).eq(tab_nr).show(0);
    			$(settings.tabsNav).find("a").eq(tab_nr).addClass("active");
			}
		}

        if(settings.setNumber)
	 	{
            var urlHashTrigger = window.location.hash;
	 	    window.setInterval(triggerBrowserBack, 1000);
        }

	 	return this.each(function(i) {
			index = (i == 0 ? "" : i);
	 		settings.tabsNav = $("<ul id="+ settings.tabsNavName+ index +">");
				
			if (settings.tabsNavClass != "")
			{
				$(settings.tabsNav).addClass(settings.tabsNavClass)
			};

			settings.tabsContainers = $(this).find(settings.tabConteiner);

			addExtra = false;
			$(settings.tabsContainers).each(function(ii) {
				tabHeader = $(this).find(settings.tabHeader);

				var extra_li_class='';
				if(ii==0)
				{
					extra_li_class=' class="li_first"';
				}
				else if(ii==$(settings.tabsContainers).length-1)
				{
					extra_li_class=' class="li_last"';
				}

				hashID = settings.tabsNavName + index + '_'+ ++ii;
				$(settings.tabsNav).append('<li'+extra_li_class+'><a href="'+ window.location.pathname + '#' + hashID  + '" title="' + $(tabHeader).text() + '">'+ $(tabHeader).html() +'<\/a><\/li>')

				if (settings.hideTabHeader)
				{
					$(tabHeader).remove();
				}

				$(this).attr("id",hashID).css("display","none");

				if (useFilter && $(this).find("." + settings.filtersClass).length > 0)
				{
					addExtra = true;
				}
			});

			$(this).prepend(settings.tabsNav);
			if (addExtra)
			{
				$(settings.tabsNav).append('<li class="'+ settings.extraTabsNavName +'"><a><\/a><\/li>');
			}

			/* EVENTS */
			$("#" + settings.tabsNavName + index ).find("li").not("." + settings.extraTabsNavName ).find("a").bind("click", clickTabs);	
			$("#" + settings.tabsNavName + index ).find("li." + settings.extraTabsNavName ).find("a").bind("click", filterClickTabs);	

			/* WARTOSCI POCZATKOWE */
			
            if(settings.setNumber)
            {
                startUrl = window.location.hash.substr(5);

                if(startUrl.indexOf(settings.tabsNavName)!=-1)
                {
                    if(startUrl==settings.tabsNavName+'_last') tab_nr = $(settings.tabsContainers).size() - 1;
                    else tab_nr = parseInt(startUrl.replace(/.+_([0-9])/g, '$1')) - 1;
                }
                else
                {
                    top_nr = startUrl.replace(/.+([0-9]+)_.+/g, '$1');
                    if(parseInt(top_nr)==top_nr) tab_nr = top_nr;
                    else tab_nr = 0;
                }
            }
            else
            {
                tab_nr = 0;
            }
            $(settings.tabsContainers).eq(tab_nr).show(0);
			$(settings.tabsNav).find("a").eq(tab_nr).addClass("active");
		})
	 }

})(jQuery);
