﻿$(document).ready(function () {

	var AddonList = {
		Addons: $(".addon"),
		Features: $(".filterList").children(),
		SelectedFeatures: new Array(),

		init: function () {

			AddonList.Features.each(function (i, features) {
				$(this).click(function () {
					AddonList.FilterByFeature($(this));

					//animate to page top
					$("html, body").animate({ scrollTop: 0 }, 400);
				});
			});

			AddonList.UpdateCount();
			Tre.SetFilterListMouseEffects();
		},

		//Hides or shows the correct phones depending on feature
		FilterByFeature: function (feature) {
			_gaq.push(['_trackEvent', 'klick', 'filtrerat', location.href, 1]);

			var guid = AddonList.FetchMetadata(feature).guid;
			var isSelected = feature.hasClass("selected");

			if (isSelected) {
				AddonList.SelectedFeatures.splice($.inArray(guid, AddonList.SelectedFeatures), 1);
			} else {
				AddonList.SelectedFeatures.push(guid);
			}

			if (guid == undefined) {
				AddonList.SelectedFeatures = [];
				AddonList.Features.removeClass("selected");
			} else {
				AddonList.Features.first().removeClass("selected");
			}

			$(".addon").removeClass("rowBreak");
			var i = 0;
			AddonList.Addons.each(function () {
				var metadata = AddonList.FetchMetadata($(this));
				if (AddonList.IsFeaturesCompatible(metadata.features)) {
					$(this).show();
					if (i % 3 == 2) {
						$(this).addClass("rowBreak");
					}
					i++;
				} else {
					$(this).hide();
				}
			});


			feature.toggleClass("selected");
			AddonList.UpdateCount();
		},

		//Checks if the phoneFeatures are compatible with the current selected features
		IsFeaturesCompatible: function (phoneFeatures) {
			if (AddonList.SelectedFeatures.length == 0) {
				return true;
			}
			for (var i in AddonList.SelectedFeatures) {
				if ($.inArray(AddonList.SelectedFeatures[i], phoneFeatures) == -1) {
					return false;
				}
			}
			return true;
		},

		//Updates all numbers in features list
		UpdateCount: function () {
			AddonList.Features.each(function () {
				var metadata = AddonList.FetchMetadata($(this));
				var countSpan = $(this).find("span");

				var count = 0;
				var totalCount = 0;
				AddonList.Addons.each(function () {
					var addondata = AddonList.FetchMetadata($(this));

					if ($.inArray(metadata.guid, addondata.features) != -1 && metadata.guid != undefined) {
						if ($(this).is(":visible")) {
							count = count + 1;
						}
					} else if (metadata.guid == undefined) {

						count = count + 1;
					}
				});

				countSpan.text("(" + count + ")");
			});

		},

		FetchMetadata: function (element) {
			return element.metadata({ type: 'attr', name: 'data' });
		}
	}

	AddonList.init();
});
