﻿RegisterNamespace("VP.ArticleList");

VP.ArticleList = function(moduleId, element) {
	this._moduleId = moduleId;
	this._element = "#" + element;
	var that = this;

	$("#lnkShowAllCategories", this._element).addClass("hidden");
	$("#lnkShowAllVendors", this._element).addClass("hidden");
	$("div.categoryLinkList", this._element).hide();
	$("div.vendorLinkList", this._element).hide();

	$("#lnkShowAllCategories", this._element).click(function() {
		if ($("#lnkShowAllCategories.hidden", that._element).length > 0) {
			$("#lnkShowAllCategories", that._element).removeClass("hidden");
			$("div.categoryLinkList", that._element).show("slow");
			$("#lnkShowAllCategories", that._element).text("Hide All");
		}
		else {
			$("#lnkShowAllCategories", that._element).addClass("hidden");
			$("div.categoryLinkList", that._element).hide("slow");
			$("#lnkShowAllCategories", that._element).text("Show All");
		}
	});

	$("#lnkShowAllVendors", this._element).click(function() {
		if ($("#lnkShowAllVendors.hidden", that._element).length > 0) {
			$("#lnkShowAllVendors", that._element).removeClass("hidden");
			$("div.vendorLinkList", that._element).show("slow");
			$("#lnkShowAllVendors", that._element).text("Hide All");
		}
		else {
			$("#lnkShowAllVendors", that._element).addClass("hidden");
			$("div.vendorLinkList", that._element).hide("slow");
			$("#lnkShowAllVendors", that._element).text("Show All");
		}
	});

	this.BindCustomPropertyShowHideLinks();

	$("#btnFilter", this._element).click(function() {
		document.location =
				that.GetFilterUrl(document.location, $(".vendors select", that._element).val(),
				 $(".categories select", that._element).val(), false);
	});
	$("#btnReset", this._element).click(function() {
		document.location = that.GetFilterUrl(document.location, "-1", "-1", true);
	});
	$("#filterHeader", this._element).click(function() {
		if ($("#filterHeader.hidden", that._element).length > 0) {
			$("#filterHeader", that._element).removeClass("hidden");
			$("#filterBody", that._element).show("slow");
			$("#filterHeader", that._element).text("Hide Filter");
		}
		else {
			$("#filterHeader", that._element).addClass("hidden");
			$("#filterBody", that._element).hide("slow");
			$("#filterHeader", that._element).text("Show Filter");
		}
	});
};

VP.ArticleList.prototype.GetFilterUrl = function(Url, vendorId, categoryId, reset) {
	var urlParts = Url.href.split("?");
	var urlWithoutQueryStrings = urlParts[0] + "?";
	var hasFilter = false;
	var index = 0;
	var pagerParameterIndex = -1;

	var queryStringArray = [];
	if (urlParts.length == 2) {
		var urlQueryStrings = urlParts[1].split("#")[0];
		queryStringArray = urlQueryStrings.split("&");
		for (index = 0; index < queryStringArray.length; index++) {
			if (queryStringArray[index].indexOf("afcid_" + this._moduleId) >= 0) {
				if (reset) {
					queryStringArray.splice(index, 1);
					index--;
					pagerParameterIndex--;
				}
				else {
					queryStringArray[index] = "afcid_" + this._moduleId + "=" + categoryId;
				}

				hasFilter = true;
			}
			else if (queryStringArray[index].indexOf("afvid_" + this._moduleId) >= 0) {
				if (reset) {
					queryStringArray.splice(index, 1);
					index--;
					pagerParameterIndex--;
				}
				else {
					queryStringArray[index] = "afvid_" + this._moduleId + "=" + vendorId;
				}

				hasFilter = true;
			}
			else if (queryStringArray[index].indexOf("alpi_" + this._moduleId) >= 0) {
				if (reset) {
					pagerParameterIndex = index;
				}
			}
		}
	}

	if (!hasFilter && !reset) {
		queryStringArray.push("afvid_" + this._moduleId + "=" + vendorId);
		queryStringArray.push("afcid_" + this._moduleId + "=" + categoryId);
	}

	pagerParameterIndex = this.SetCustomPropertyFilter(reset, queryStringArray, pagerParameterIndex);

	if (reset && pagerParameterIndex >= 0) {
		queryStringArray.splice(pagerParameterIndex, 1);
	}

	var queryString = "";
	index = 0;
	for (index in queryStringArray) {
		if (!queryString) {
			queryString = queryStringArray[index];
		}
		else {
			queryString += "&" + queryStringArray[index];
		}
	}

	var currentUrl = urlWithoutQueryStrings + queryString;
	currentUrl = currentUrl + "#al" + this._moduleId;
	return currentUrl;
};

VP.ArticleList.prototype.SetCustomPropertyFilter = function(reset, queryStringArray, pagerParameterIndex) {
	var customProperties = [];
	var customPropertyDropdownClass = ".ddlCustomProperty_" + this._moduleId;
	var customPropertyDropdown = $(customPropertyDropdownClass, this._element);
	var index = 0;
	for (index = 0; index < customPropertyDropdown.length; index++) {
		var dropdownId = customPropertyDropdown[index].id;
		var selectedVal;

		if (reset === false) {
			selectedVal = $("#" + customPropertyDropdown[index].id, this._element).val();
		}
		else {
			selectedVal = "-1";
		}

		var queryStringParam = dropdownId.split("CustomProperty");
		customProperties["cpf" + queryStringParam[1]] = encodeURIComponent(selectedVal);
	}

	var cpIndex = 0;
	for (cpIndex in customProperties) {
		var hasFilter = false;
		for (index = 0; index < queryStringArray.length; index++) {
			if (queryStringArray[index].indexOf(cpIndex) >= 0) {
				if (reset) {
					queryStringArray.splice(index, 1);
					index--;
					pagerParameterIndex--;
				}
				else {
					queryStringArray[index] = cpIndex + "=" + customProperties[cpIndex];
				}

				hasFilter = true;
			}
		}

		if (!hasFilter && !reset) {
			queryStringArray.push(cpIndex + "=" + customProperties[cpIndex]);
		}
	}

	return pagerParameterIndex;
};

VP.ArticleList.prototype.BindCustomPropertyShowHideLinks = function() {
	var showHideLinkClass = ".lnkShowAll_" + this._moduleId;
	var showHideLinks = $(showHideLinkClass, this._element);
	var idx = 0;
	for (idx = 0; idx < showHideLinks.length; idx++) {
		var linkId = showHideLinks[idx].id;
		var link = $("#" + linkId, this._element);
		link.addClass("hidden");

		link.click(function() {
			var divIdSfx = this.id.split("lnkShowAll");
			var divId = "#divLinks" + divIdSfx[1];
			var div = $(divId, this._element);
			var slink = $("#" + this.id);

			if ($("#" + this.id + ".hidden", this._element).length > 0) {
				slink.removeClass("hidden");
				div.show("slow");
				slink.text("Hide All");
			}
			else {
				slink.addClass("hidden");
				div.hide("slow");
				slink.text("Show All");
			}
		});
	}
};

