﻿//##### General functions ######

function createCookie(name, value, days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
		var expires = "; expires=" + date.toGMTString();
	}
	else var expires = "";
	document.cookie = name + "=" + value + expires + "; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for (var i = 0; i < ca.length; i++) {
		var c = ca[i];
		while (c.charAt(0) == ' ') c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name, "", -1);
}

//##### Products functions ######

var FilteredProducts = new Array();
var CurrentFilters = new Array();
var clearFilters = false;
var currentPage = 1;
var categoryId = 0;
var LimitPrice = -1;

var PriceMinId = '';
var PriceMaxId = '';

var totalFilteredProducts = 0;

function getSavedValues() {
    var savedSort = readCookie("sort_" + categoryId);
    if (savedSort != null && savedSort != 0) {
        lastSort = savedSort;

        var sortLi = $get("sortLi_" + savedSort);
        if (sortLi)
            sortLi.className = "selected";
    }
    else {
        $("#sortLi_Default").addClass("selected");
    }

	var savedFilters = readCookie("filters_" + categoryId);
	if (savedFilters != null)
		setFilters(Sys.Serialization.JavaScriptSerializer.deserialize(savedFilters));

	var readPrice = readCookie("price_" + categoryId);
	if (readPrice != null && readPrice > 0) {
		var sliderExt = $find('PriceExt');
		LimitPrice = readPrice;
		if (sliderExt)
			sliderExt.set_Value(readPrice);
	}

	var savedPage = readCookie("page_" + categoryId);
	if (savedPage != null && savedPage > 0) {
		currentPage = savedPage;
	}
}

function setFilters(filters) {
	CurrentFilters = filters;
}

function saveCookieValues() {
	createCookie("filters_" + categoryId, Sys.Serialization.JavaScriptSerializer.serialize(CurrentFilters), 1);
	createCookie("sort_" + categoryId, lastSort, 1);
	createCookie("price_" + categoryId, LimitPrice, 1);
}

function changeFilter(AttributeID, Value) {

	lastCurrentFilterAttID = null;
	lastCurrentFilterValue = null;

	modifyFilter(AttributeID, Value);

	// set total filtered products
	filterProducts();
	totalFilteredProducts = FilteredProducts.length;

	updateNumbers();

	sortResult(lastSort);
	printFilteredProducts();
	saveCookieValues();
	setToolTipOnDisabled();

	$get("ltlNumberOfProducts").innerHTML = FilteredProducts.length;
	
	// Added by Mattias 2009-11-27
	if (FilteredProducts.length == 1) {
		$("span#productsIn").html(ProductTranslate.ProductIn);
	}
	else {
		$("span#productsIn").html(ProductTranslate.ProductsIn);
	}
}

function clearAll() {
	CurrentFilters = new Array();
	currentPage = 1;
	lastCurrentFilterAttID = 0;

	filterProducts();
	clearFilters = true;
	updateNumbers();
	clearFilters = false;
	sortResult(lastSort);
	printFilteredProducts();
	clearToolTipDisabled();

	$get("ltlNumberOfProducts").innerHTML = FilteredProducts.length;

	eraseCookie("filters_" + categoryId);
	eraseCookie("sort_" + categoryId);

	eraseCookie("price_" + categoryId);
	eraseCookie("page_" + categoryId);
	eraseCookie("perPage_" + categoryId);
}

function clearSort() {
    lastSort = 0;
    sortResult(lastSort);
    eraseCookie("sort_" + categoryId);    
}

function modifyFilter(AttributeID, Value) {
	var exists = false;
	var CurrentFilter;
	var CurrentFilterIndex;

	for (var i = 0; i < CurrentFilters.length; i++) {
		if (CurrentFilters[i].AttributeID == AttributeID) {
			exists = true;
			CurrentFilter = CurrentFilters[i];
			CurrentFilterIndex = i;
			break;
		}
	}

	if (!exists) {
		CurrentFilter = CurrentFilters[CurrentFilters.length] = new Filter(AttributeID);
	}

	exists = false;
	for (var i = 0; i < CurrentFilter.Values.length; i++) {
		if (CurrentFilter.Values[i] == Value) {
			CurrentFilter.Values.splice(i, 1);
			if (CurrentFilter.Values.length == 0)
				CurrentFilters.splice(CurrentFilterIndex, 1);
			exists = true;
			break;
		}
	}

	if (!exists)
		CurrentFilter.Values[CurrentFilter.Values.length] = Value;
}

function GetCurrentFilter() {
	var str = "";

	for (var i = 0; i < CurrentFilters.length; i++) {
		str += "\n" + CurrentFilters[i].AttributeID + ":";
		for (var j = 0; j < CurrentFilters[i].Values.length; j++) {
			str += CurrentFilters[i].Values[j] + ",";
		}
	}

	return str;
}

function filterProducts() {
	FilteredProducts = new Array();

	for (var i = 0; i < Products.length; i++)
	    if (filterProduct(Products[i]))
	        FilteredProducts[FilteredProducts.length] = Products[i];
}

function filterProduct(Product) {
	var add = true;
	for (var j = 0; j < CurrentFilters.length; j++) {
		var hasAtt = false;
		for (var k = 0; k < CurrentFilters[j].Values.length; k++) {

			hasAtt = filterProductAttribute(Product, CurrentFilters[j].AttributeID, CurrentFilters[j].Values[k]);

			if (hasAtt)
				break;
		}
		if (!hasAtt) {
			add = false;
			break;
		}
	}
	if (add && (LimitPrice >= 0)) {
		add = (parseInt(Product.Price) <= parseInt(LimitPrice));
	}
	return add
}

function isFilterActive(AttributeID, Value) {
	var isActive = false;
	for (var j = 0; j < CurrentFilters.length; j++) {
		if (CurrentFilters[j].AttributeID == AttributeID) {
			for (var k = 0; k < CurrentFilters[j].Values.length; k++) {
				if (CurrentFilters[j].Values[k] == Value)
					isActive = true;
			}
		}
	}

	return isActive;
}

function filterProductAttribute(Product, AttributeID, Value) {
	for (var l = 0; l < Product.Attributes.length; l++) {
		if (Product.Attributes[l].Key == AttributeID) {
			if (Product.Attributes[l].Value == Value) {
				return true;
			}
		}
	}
	return false;
}

var lastCurrentFilterAttID = 0;
var lastCurrentFilterValue = {};
var initFilters = true;
function setResult(AttributeID, Value, DestID, UseFilterID) {

    if (initFilters) {
        if (isFilterActive(AttributeID, Value))
            $get(UseFilterID).checked = true;
        return;
    }

    if (clearFilters)
        $get(UseFilterID).checked = false;

    var filterChecked = $get(UseFilterID).checked;
    var groupChecked = false;
    if (lastCurrentFilterAttID == AttributeID)
        groupChecked = true;
    else
        for (var i = 0, l = CurrentFilters.length; i < l; i++) {
        if (CurrentFilters[i].AttributeID == AttributeID) {
            groupChecked = true;
            lastCurrentFilterAttID = AttributeID;
            lastCurrentFilterValue = CurrentFilters[i].Values;
            break;
        }
    }

    var num = 0;

    if (groupChecked) {
        modifyFilter(AttributeID, Value);
        for (var i = 0; i < Products.length; i++)
            if (filterProduct(Products[i]))
            num++;
        modifyFilter(AttributeID, Value);
    } else {
        modifyFilter(AttributeID, Value);
        for (var i = 0; i < FilteredProducts.length; i++)
            if (filterProduct(FilteredProducts[i]))
            num++;
        modifyFilter(AttributeID, Value);
    }

    var dest = $get(DestID);

    if (!filterChecked) {
        if (!groupChecked)
            dest.innerHTML = "(" + num + ")";
        else {
            dest.innerHTML = "(+" + (num - totalFilteredProducts) + ")";
            if (num - totalFilteredProducts == 0)
                num = 0;
        }
    }
    else
        dest.innerHTML = "";


    if (num == 0) {
        $get(UseFilterID).disabled = true;
        dest.innerHTML = "(0)";
    } else {
        $get(UseFilterID).disabled = false;
    }
}

function changePage(_currentPage) {
	if (_currentPage == 0) {
		productsPerPage = 0; // set to view all value
		currentPage = 1;
	}
	else {
		productsPerPage = 12; // set to default value	
		currentPage = _currentPage;
	}

	createCookie("page_" + categoryId, currentPage, 1);
	createCookie("perPage_" + categoryId, productsPerPage, 1);

	printFilteredProducts();
}

function nextPage() {
	currentPage++;

	createCookie("page_" + categoryId, currentPage, 1);
	createCookie("perPage_" + categoryId, productsPerPage, 1);

	printFilteredProducts();
}

function previousPage() {
	currentPage--;

	createCookie("page_" + categoryId, currentPage, 1);
	createCookie("perPage_" + categoryId, productsPerPage, 1);

	printFilteredProducts();
}

function printFilteredProducts() {
	totalFilteredProducts = FilteredProducts.length;

	var strs = new Array();
	var _productsPerPage = productsPerPage;

	if (_productsPerPage == 0)
		_productsPerPage = FilteredProducts.length;

	var lastPage = Math.ceil(FilteredProducts.length / _productsPerPage);
	var startProduct = 0;


	if (currentPage < 1) {
		currentPage = 1;
		setPaging(currentPage, lastPage);
		return;
	}

	if (currentPage > lastPage) {
	    currentPage--;
		setPaging(currentPage, lastPage);
		return;
	}

	setPaging(currentPage, lastPage);

	if (currentPage > 1)
		startProduct = _productsPerPage * (currentPage - 1);

	for (var i = 0, l = Products.length; i < l; i++) {
		$get(Products[i].ProductRow).style.display = "none";
	}

	var oTable = $get('ProductTable');

	var start = FilteredProducts.length;
	if (currentPage > 0)
		start = _productsPerPage * currentPage;

	if (start > FilteredProducts.length)
		start = FilteredProducts.length;


	if ($('.productListItemContainer').length > 0) {
	    //floorcare
	    $(".productListItemContainer .productListItems").each(function () {
	        $(this).parent().parent().css('display', 'none');
	        for (var i = start - 1; i >= startProduct; i--) {
	            var oTR = $get(FilteredProducts[i].ProductRow);
	            if ($(this).parent().children('.productdescription').text().indexOf(FilteredProducts[i].ModelDCom) > -1) {
	                oTR.style.display = '';
	                $(this).parent().parent().css('display', 'block');
	            }
	        }
	    });
	} else {
	    for (var i = start - 1; i >= startProduct; i--) {
	        var oTR = $get(FilteredProducts[i].ProductRow);
	        oTR.parentNode.removeChild(oTR);
	        if (oTable.childNodes.length <= 1) {
	    	    oTable.appendChild(oTR);
	        } else
	    	    oTable.insertBefore(oTR, oTable.childNodes[0]);
	        oTR.style.display = "";
	    }
	}
}

var lastSort = 0;
function sortResult(sortType) {
	filterProducts();

	lastSort = sortType;
	if (sortType != 0)
		FilteredProducts = FilteredProducts.sort(sortByAttribute);

	printFilteredProducts();
	saveCookieValues();
}

function sortByAttribute(a, b) {
	if (a.SortAttributes.length > 0) {
		for (var i = 0, l = a.SortAttributes.length; i < l; i++) {
			if (a.SortAttributes[i].Key == lastSort) {
				return sortInt(a.SortAttributes[i].Value, b.SortAttributes[i].Value);
			}
		}
	}

	return 0;
}

function sortInt(a, b) {
	if (parseInt(a) > parseInt(b)) return +1;
	if (parseInt(a) < parseInt(b)) return -1;
	return 0;
}

function Filter(AttributeID) {
	this.AttributeID = AttributeID;
	this.Values = new Array();
}

function setPaging(currentPage, lastPage) {

	var arrOut = new Array();
	var isViewAll = false;
	var strViewAll = "";
	if (currentPage == 1 && lastPage == 1) {
		isViewAll = true;
		lastPage = Math.ceil(FilteredProducts.length / 12);
	}
	for (var i = 1, l = lastPage; i <= l; i++) {
		if (i == currentPage && !isViewAll)
		    arrOut[i] = ' | <span>' + i + '</span>';
		else if (lastPage == 1) // only one page, no page link
		    arrOut[i] = ' | <span>' + i + '</span>';
		else
		    arrOut[i] = ' | <a class="linkTwo" href="javascript:void(0)" onclick="changePage(' + i + '); return false;">' + i + '</a>';
    }

	if (Products.length <= 60) {
		if (isViewAll)
			strViewAll = ' | <span>' + ProductTranslate.ViewAll + '</span>';
		else
			strViewAll = ' | <a class="linkTwo" href="javascript:void(0)" onclick="changePage(0); return false;">' + ProductTranslate.ViewAll + '</a>';
	}

	$get("pageHolder1").innerHTML = ProductTranslate.Page + arrOut.join("") + strViewAll;
	$get("pageHolder2").innerHTML = ProductTranslate.Page + arrOut.join("") + strViewAll;
	
	// Logic changed by Mattias 2009-11-27
	if (currentPage == 1 || isViewAll) {
		$("#prevPage1").addClass("linkArrowLeftDisabled");
		$("#prevPage2").addClass("linkArrowLeftDisabled");
		//$get("prevPage1").style.visibility = "hidden";
		//$get("prevPage2").style.visibility = "hidden";
	}
	else {
		$("#prevPage1").removeClass("linkArrowLeftDisabled");
		$("#prevPage2").removeClass("linkArrowLeftDisabled");
		//$get("prevPage1").style.visibility = "visible";
		//$get("prevPage2").style.visibility = "visible";
	}

	if (lastPage == currentPage || isViewAll) {
		$("#nextPage1").addClass("linkArrowRightDisabled");
		$("#nextPage2").addClass("linkArrowRightDisabled");
		//$get("nextPage1").style.visibility = "hidden";
		//$get("nextPage2").style.visibility = "hidden";
	}
	else {
		$("#nextPage1").removeClass("linkArrowRightDisabled");
		$("#nextPage2").removeClass("linkArrowRightDisabled");
		//$get("nextPage1").style.visibility = "visible";
		//$get("nextPage2").style.visibility = "visible";
	}
}

function setToolTipOnDisabled() {

    // Find all disabled checkboxes and remove class 'toolTipDisabled' and unbind mouse-events
    clearToolTipDisabled();
    
    // Find all disabled checkboxes and add class 'toolTipDisabled'
    $(".refineContent input:checkbox").each(function() {
    	if ($(this).attr("disabled")) {
    		var linkOne = $(this).siblings('.linkOne');
    		//var refinLinkWrapper = $(this).siblings('.refinLinkWrapper');
    		linkOne.addClass('toolTipDisabled');
    		linkOne.attr('title', tooltipDisabledText);
    	}
    });

    // ToolTip
    $(".toolTipDisabled").bind("mouseenter", function() {
    	$(".mp_toolTipLink .toolTipText").html($(this).attr('title'));
    	$(this).attr('title', '');
    	
    	var left = $(this).offset().left - $("#content").offset().left - $(".mp_toolTipLink").width() - 5;
    	
    	if (left < 0) {
    		left = $(this).offset().left - $("#content").offset().left + $(this).width() + $(this).siblings('span.lm2').width() + 35;
    		$(".mp_toolTipLink .TooltipArrow").addClass("TooltipArrowLeft");
    		$(".mp_toolTipLink .TooltipArrow").attr("src", "/Templates/Main/Images/common/modalPopupTooltipArrowLeft.gif");
    	}
    	else {
    		$(".mp_toolTipLink .TooltipArrow").removeClass("TooltipArrowLeft");
    		$(".mp_toolTipLink .TooltipArrow").attr("src", "/Templates/Main/Images/common/modalPopupTooltipArrow.gif");
    	}
    	
    	$(".mp_toolTipLink").css({ 'display': 'block', 'top': $(this).offset().top - 43, 'left': left });
    }).bind("mouseleave", function() {
    	$(this).attr('title', tooltipDisabledText);
    	$(".mp_toolTipLink").css({ 'display': 'none' });
    });
}

function clearToolTipDisabled() {
    // Find all disabled checkboxes and remove class 'toolTipDisabled'
	$(".refineContent .linkOne").removeClass("toolTipDisabled")
	$('.refineContent .linkOne').attr('title', '');

    // Unbind mouseover and mouseout
    $(".refineContent .linkOne").unbind("mouseenter").unbind("mouseleave");   
}
