﻿/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="jquery-1.2.6.pack.js" />

Type.registerNamespace('Nyas.ClassLibrary.Behaviors');

Nyas.ClassLibrary.Behaviors.EventListingFilter = function(element) {
	Nyas.ClassLibrary.Behaviors.EventListingFilter.initializeBase(this, [element]);
	this._moreArrowCss = null;
	this._moreArrowOverCss = null;
	this._mainTopicCss = null;
	this._subTopicCss = null;
	this._mainTopicClickDelegate = null;
	this._subTopicClickDelegate = null;
	this._selectedSubTopicCss = null;
	this._taxonomyNodes = null;
	this._subTopicContainerCss = null;
}

Nyas.ClassLibrary.Behaviors.EventListingFilter.prototype = {
	initialize: function() {
		Nyas.ClassLibrary.Behaviors.EventListingFilter.callBaseMethod(this, 'initialize');

		var subtopiccss = this._subTopicContainerCss;
		var morearrowcss = this._moreArrowCss;
		var morearrowovercss = this._moreArrowOverCss;

		$('[class^="' + morearrowcss + '"]').click(function() {
			var content = $(this).next().next().next();
			$('.' + subtopiccss).not(content).slideUp('fast');
			$('.' + morearrowcss).removeClass(morearrowcss).addClass(morearrowovercss);
			if (content.css("display") == "block") {
				$(this).removeClass(morearrowcss).addClass(morearrowovercss);
				content.slideUp('fast');
			}
			else {
				$(this).removeClass(morearrowovercss).addClass(morearrowcss);
				content.slideDown('fast');
			}
		});

		var taxonomyInputs = $("." + this._mainTopicCss);
		this._taxonomyNodes = [];
		for (var i = 0; i < taxonomyInputs.length; i++) {
			var key = this._getTaxonomyIdFromNode(taxonomyInputs[i]);
			this._taxonomyNodes[key] = taxonomyInputs[i];
		}
		this._mainTopicClickDelegate = Function.createDelegate(this, this._mainTopicClick);
		var mainTopics = this._getMainTopics();
		for (var i = 0; i < mainTopics.length; i++) {
			$addHandler(mainTopics[i], "click", this._mainTopicClickDelegate);
		}

		this._subTopicClickDelegate = Function.createDelegate(this, this._subTopicClick);
		var subTopics = this._getSubTopics();
		for (var i = 0; i < subTopics.length; i++) {
			$addHandler(subTopics[i], "click", this._subTopicClickDelegate);
		}

	},

	dispose: function() {
		if (this._mainTopicClickDelegate) {
			var mainTopics = this._getMainTopics();
			for (var i = 0; i < mainTopics.length; i++) {
				$removeHandler(mainTopics[i], "click", this._mainTopicClickDelegate);
			}
		}

		if (this._subTopicClickDelegate) {
			var subTopics = this._getSubTopics();
			for (var i = 0; i < subTopics.length; i++) {
				$removeHandler(subTopics[i], "click", this._subTopicClickDelegate);
			}
		}

		this._moreArrowCss = null;
		this._mainTopicCss = null;
		this._subTopicCss = null;
		this._selectedSubTopicCss = null;
		this._subTopicContainerCss = null;
		this._mainTopicClickDelegate = null;
		this._subTopicClickDelegate = null;
		this._taxonomyNodes = null;
		Nyas.ClassLibrary.Behaviors.EventListingFilter.callBaseMethod(this, 'dispose');
	},

	//states: "checked", "unchecked", "childChecked"
	_mainTopicClick: function(evt) {
		this._clearSelections();
		this._clearSubTopicSelections();
		var node = evt.target;
		if (node.className !== this._mainTopicCss) {
			node = node.parentNode
		}
		this._setSelection(node, "checked");
		var taxonomyId = this._getTaxonomyIdFromNode(node);
		this._hideSubTopicPanels();
		this._persistValue(taxonomyId);
		return true;
	},

	_subTopicClick: function(evt) {
		evt.stopPropagation();
		this._clearSelections();
		this._clearSubTopicSelections();
		var node = evt.target.parentNode;
		this._setSelection(node, "checked", "");
		var mainTopicNode = this._getMainTopicNode(evt.target);
		var subTopicName = this._getSubTopicName(evt.target);
		this._setSelection(mainTopicNode, "childChecked", subTopicName);
		this._hideSubTopicPanels();
		var taxonomyId = this._getTaxonomyIdFromNode(node);
		this._persistValue(taxonomyId);
		return false;
	},

	_persistValue: function(taxonomyId) {
		this.set_ClientState(taxonomyId);
	},

	_clearSelections: function() {
		var mainTopics = this._getMainTopics();
		for (var i = 0; i < mainTopics.length; i++) {
			this._setSelection(mainTopics[i], "unchecked", "");
		}
		$("." + this._selectedSubTopicCss).hide();
	},

	_clearSubTopicSelections: function() {
		$("." + this._subTopicCss + " input").attr("checked", false);
	},

	_hideSubTopicPanels: function() {
		$("." + this._subTopicContainerCss).slideUp("fast");
		$("." + this._moreArrowCss).removeClass(this._moreArrowCss).addClass(this._moreArrowOverCss);
	},

	_getMainTopicNode: function(elt) {
		var parent = $(elt).parents("." + this._subTopicContainerCss)[0];
		var taxonomyId = parent.TaxonomyId;
		var taxonomyNode = this._taxonomyNodes[taxonomyId];
		return taxonomyNode;
	},

	_getMainTopics: function() {
		return $("." + this._mainTopicCss);
	},

	_getSubTopic: function(nodeContainerElt) {
		return $(nodeContainerElt).find("." + this._subTopicCss)[0];
	},

	_getSubTopics: function() {
		return $("." + this._subTopicCss);
	},

	_setSelection: function(node, mainTopicState, subTopicText) {
		//set main topic state
		var input = $(node).find("input");
		if (mainTopicState == "unchecked") {
			input.attr("checked", false);
		} else if (mainTopicState == "childChecked") {
			input.attr("checked", true);
			if (subTopicText.length > 0) {
				$(node).next().next().next().show().html(subTopicText);
			}
		} else if (mainTopicState == "checked") {
			input.attr("checked", true);
		}
	},

	_getSubTopicName: function(elt) {
		var parent = elt.parentNode;
		var label = $(parent).children("label")[0];
		return label.innerHTML;
	},

	_getTaxonomyIdFromNode: function(elt) {
		var input = $(elt).children("input")[0];
		return input.TaxonomyId;
	},

	get_MoreArrowCss: function() {
		return this._moreArrowCss;
	},

	set_MoreArrowCss: function(val) {
		this._moreArrowCss = val;
	},

	get_MoreArrowOverCss: function() {
		return this._moreArrowOverCss;
	},

	set_MoreArrowOverCss: function(val) {
		this._moreArrowOverCss = val;
	},

	get_MainTopicCss: function() {
		return this._mainTopicCss;
	},

	set_MainTopicCss: function(val) {
		this._mainTopicCss = val;
	},

	get_SubTopicCss: function() {
		return this._subTopicCss;
	},

	set_SubTopicCss: function(val) {
		this._subTopicCss = val;
	},

	get_SelectedSubTopicCss: function() {
		return this._selectedSubTopicCss;
	},

	set_SelectedSubTopicCss: function(val) {
		this._selectedSubTopicCss = val;
	},

	get_SubTopicContainerCss: function() {
		return this._subTopicContainerCss;
	},

	set_SubTopicContainerCss: function(val) {
		this._subTopicContainerCss = val;
	}
}

Nyas.ClassLibrary.Behaviors.EventListingFilter.registerClass('Nyas.ClassLibrary.Behaviors.EventListingFilter', AjaxControlToolkit.BehaviorBase);
if (typeof (Sys) !== 'undefined') { Sys.Application.notifyScriptLoaded(); }
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();