﻿/// <reference path="jquery-1.5.1.min.js" />
/// <reference path="jquery.hoverIntent.minified.js" />
/// <reference path="jCarouselLite.js" />
/// <reference path="SnT.Utils.js" />

SnTUtils.RegisterNameSpace("SnTTab");

SnTTab = {
	Config: {

		Tabs: '#left-tabs li',
		Panes: '.snttabcontent',
		Current: 'current',
		Click: null,
		SelectedTabId: 0,
		SelectedTab: null,
		SelectedPan: null,
		Event: 'click',
		QueryStringKey: 'tabid',
		IgnoreQueryString: true,
		IdPrefix: 'tab_',
		OnTabLoaded: null,
		ParentsElement: 'LI',
		OnBeforeTabLoaded: null
	},
	Init: function (settings) {

		try {

			$.extend(this.Config, settings);
			this.Config.Tabs = $(this.Config.Tabs);
			this.Config.Panes = $(this.Config.Panes);

			if (this.Config.Tabs.length && this.Config.Panes.length) {

				this.SelectTab(this.Config.IgnoreQueryString);

				this.Config.Tabs.find("a").live(this.Config.Event, this.OnClick);
			}
		}
		catch (e) {

			SnTUtils.HandleException(e, "SnTTab.Init");
		}
	},
	SelectTab: function (ignoreQueryString) {

		if (!ignoreQueryString) {
			var selectedTab = SnTUtils.Parser.TryParseInt(SnTUtils.HttpContext.Request.QueryString(this.Config.QueryStringKey));

			if (selectedTab > 0) {

				this.Config.SelectedTabId = selectedTab;
			}
		}

		var tab = this.Config.Tabs.filter(String.Format("#{0}{1}", this.Config.IdPrefix, this.Config.SelectedTabId));

		if (!tab.length) {

			tab = this.Config.Tabs.eq(0);

			if (tab.length) {

				this.Config.SelectedTabId = this.ExtractId(tab);
			}
		}

		if (tab.length) {

			this.Config.Tabs.removeClass(this.Config.Current);
			this.Config.Panes.hide();

			this.Config.SelectedTab = tab;
			this.Config.SelectedPan = this.Config.Panes.eq(tab.index());

			tab.addClass(this.Config.Current);
			this.Config.SelectedPan.show();
		}

		if (SnTTab.Config.OnBeforeTabLoaded) {

			SnTTab.Config.OnBeforeTabLoaded({ Id: this.Config.SelectedTabId, Tab: tab, Tabs: this.Config.Tabs, Sender: this });
		}
		if (SnTTab.Config.OnTabLoaded) {

			SnTTab.Config.OnTabLoaded({ Id: this.Config.SelectedTabId, Sender: this });
		}
	},
	OnClick: function (event) {

		event.preventDefault();
		event.stopPropagation();

		var tab = $(this).parents(SnTTab.Config.ParentsElement + ":first");

		SnTTab.Config.SelectedTabId = SnTTab.ExtractId(tab);

		SnTTab.SelectTab(true);

		return false;
	},
	ExtractId: function (tab) {

		var id = 0;
		if (tab) {

			id = SnTUtils.Parser.TryParseInt(tab.attr("id").toLowerCase().replace(SnTTab.Config.IdPrefix.toLowerCase(), ""));
		}
		return id;
	}
};

