﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("WindowsSite");

WindowsSite.ExploreArticle = function(element) {
    WindowsSite.ExploreArticle.initializeBase(this, [element]);
}

WindowsSite.ExploreArticle.prototype = {
	ArticleMain: null,
	ToggleArticle: null,
	TabbedContent: null,
	RelatedArticles: null,
	CustomerArticles: null,
	RelatedArticlesTab: null,
	CustomerArticlesTab: null,
	Tabs: null,
	ExpandText: null,
	CollapseText: null,
	TabSelectedCssClass: "activeTab",
	ExpandClass: "expandArticle",
	CollapseClass: "collapseArticle",

	get_ArticleMain: function() { return this.ArticleMain; },
	set_ArticleMain: function(value) { this.ArticleMain = value; },

	get_ToggleArticle: function() { return this.ToggleArticle; },
	set_ToggleArticle: function(value) { this.ToggleArticle = value; },

	get_TabbedContent: function() { return this.TabbedContent; },
	set_TabbedContent: function(value) { this.TabbedContent = value; },

	get_RelatedArticles: function() { return this.RelatedArticles; },
	set_RelatedArticles: function(value) { this.RelatedArticles = value; },

	get_CustomerArticles: function() { return this.CustomerArticles; },
	set_CustomerArticles: function(value) { this.CustomerArticles = value; },

	get_RelatedArticlesTab: function() { return this.RelatedArticlesTab; },
	set_RelatedArticlesTab: function(value) { this.RelatedArticlesTab = value; },

	get_CustomerArticlesTab: function() { return this.CustomerArticlesTab; },
	set_CustomerArticlesTab: function(value) { this.CustomerArticlesTab = value; },

	get_ExpandText: function() { return this.ExpandText; },
	set_ExpandText: function(value) { this.ExpandText = value; },

	get_CollapseText: function() { return this.CollapseText; },
	set_CollapseText: function(value) { this.CollapseText = value; },

	get_IsExpandedOnPageLoad: function() { return this.IsExpandedOnPageLoad; },
	set_IsExpandedOnPageLoad: function(value) { this.IsExpandedOnPageLoad = value; },

	selectTab: function(tabIndex) {
		for (var i = 0; i < this.Tabs.length; i++) {
			var isSelected = i == tabIndex;
			this.setElementVisibility(this.Tabs[i].content, isSelected);
			this.setTabClassName(this.Tabs[i].tab.parentNode, isSelected);
		}
	},

	setArticleVisibility: function(visible) {
		this.setElementVisibility(this.ArticleMain, visible);
		this.setElementVisibility(this.TabbedContent, !visible);
		this.ToggleArticle.innerHTML = visible ? this.CollapseText : this.ExpandText;
		this.ToggleArticle.className = visible ? this.CollapseClass : this.ExpandClass;
	},
	setElementVisibility: function(element, visible) {
		element.style.display = visible ? 'block' : 'none';
	},

	setTabClassName: function(element, isSelected) {
		var classNames = element.className.split(' ');
		for (var j in classNames) {
			if (classNames[j] == this.TabSelectedCssClass) Array.removeAt(classNames, j);
		}
		if (isSelected) Array.add(classNames, this.TabSelectedCssClass);
		element.className = classNames.join(' ');
	},

	_onToggleArticleClick: function(args) {
		this.setArticleVisibility(this.ArticleMain.style.display == 'none');
	},
	_onArticleTabClick: function(args) {
		this.selectTab(0);
	},
	_onCustomerArticleTabClick: function(args) {
		this.selectTab(1);
	},

	initialize: function() {
		WindowsSite.ExploreArticle.callBaseMethod(this, 'initialize');

		this.Tabs = this.initializeTabs();
		this.initializeArticle();
		this.initializeRelatedArticles();

		this._toggleDelegate = Function.createDelegate(this, this._onToggleArticleClick);
		this._articleDelegate = Function.createDelegate(this, this._onArticleTabClick);
		this._customerArticleDelegate = Function.createDelegate(this, this._onCustomerArticleTabClick);
		$addHandler(this.ToggleArticle, 'click', this._toggleDelegate);
		$addHandler(this.RelatedArticlesTab, 'click', this._articleDelegate);
		$addHandler(this.CustomerArticlesTab, 'click', this._customerArticleDelegate);
	},
	dispose: function() {
		$removeHandler(this.ToggleArticle, 'click', this._toggleDelegate);
		$removeHandler(this.RelatedArticlesTab, 'click', this._articleDelegate);
		$removeHandler(this.CustomerArticlesTab, 'click', this._customerArticleDelegate);
		this._toggleDelegate = this._articleDelegate = this._customerArticleDelegate = null;
		this.ArticleMain = this.ToggleArticle = this.TabbedContent = this.RelatedArticles = this.CustomerArticles = this.RelatedArticlesTab =
			this.CustomerArticlesTab = this.Tabs = this.TabSelectedCssClass = this.ExpandText = this.CollapseText = null;

		WindowsSite.ExploreArticle.callBaseMethod(this, 'dispose');
	},
	initializeTabs: function() {
		return [{ tab: this.RelatedArticlesTab, content: this.RelatedArticles }, { tab: this.CustomerArticlesTab, content: this.CustomerArticles}];
	},
	initializeArticle: function() {
		this.setArticleVisibility(this.IsExpandedOnPageLoad);
	},
	initializeRelatedArticles: function() {
		this.selectTab(0);
	}
}
WindowsSite.ExploreArticle.registerClass('WindowsSite.ExploreArticle', Sys.UI.Behavior);

if (typeof(Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
