﻿var CategoryFilterArr = new Array();
var ColorFilterArr = new Array();
var SizeFilterArr = new Array();
var SearchString = "";
var FilteredProductsArr = new Array();
var FilterArr = new Array();

var AllProdXml;

var TotalProducts = -1;
var TotalPages = -1;
var CurrentPage = 0;

//var ProductsPerPage = 28;
var ProductsPerPage = 24;
var pagesOnPaging = 10;

var ImagesToLoad = 0;

var btnPrev, btnFirst, btnNext, btnLast;

//var ViewAllFlag = false;
var ViewAllFlag = true;

var autocomp;

$(document).ready(function() {
    LoadProdXmlString();

    autocomp = $('#search-box').autocomplete({
        onSelect: function(value, data) { SearchByString() },
        width: 400,
        maxHeight: 100,
        highlight: true,
        minChars: 0,
        delimiter: /(,|;)\s*/
    });

    GetProductsByFilters();
});

$(document).ready(function() {
    var sizes = $("#sizes ul");
    if (sizes.length > 0) {
        if (sizes[0].clientHeight < 40) {
            $("#btnMoreSizes").hide();
            $("#sizes").css("height", "auto");
        }
        else {
            $("#btnMoreSizes").show();
            $("#sizes").css("height", "33px");
        }
    }
});

function ProductImage(ProdId, ProdName, Path, CatName, DefaultSize, IsCustomizable, IsNew) {
    this.prodId = ProdId;
    this.prodName = ProdName;
    this.imgPath = Path;
    this.catName = CatName;
    this.defSize = DefaultSize;
    this.isCust = IsCustomizable;
    this.isNew = IsNew;
}

function SetCategoryParentFilter(ParentCatId, IsChecked) {
    arrObj = CategoryFilterArr;
    $(".parent_" + ParentCatId).each(function() {
        $(this).attr("checked", IsChecked);
        var val = $(this).attr("value");
        if ($(this).attr("checked") == true)
            addItem(arrObj, val);
        else
            removeItem(arrObj, val);

    });
    if (IsChecked == true)
        addItem(arrObj, ParentCatId);
    else
        removeItem(arrObj, ParentCatId);

    GetProductsByFilters();
}

function SetFilter(chbObj, arrType) {
    var arrObj;
    if (arrType == "color")
        arrObj = ColorFilterArr;
    else if (arrType == "size")
        arrObj = SizeFilterArr;
    else
        arrObj = CategoryFilterArr;

    var val = chbObj.value;
    if (chbObj.checked)
        addItem(arrObj, val);
    else
        removeItem(arrObj, val);

    //$('#search-box').attr("value", "");

    GetProductsByFilters();
}

function ResetFilters() {
    CategoryFilterArr = new Array();
    ColorFilterArr = new Array();
    SizeFilterArr = new Array();
    SearchString = "";
    FilteredProductsArr = new Array();
    $('#search-box').val("");
    GetProductsByFilters();
    $("input:checkbox").attr("checked", false);
}

function MoreSizes() {
    if ($("#btnMoreSizes").val() == "Show More") {
        $("#btnMoreSizes").val("Hide More");
        $("#sizes").css("height", "auto");
    }
    else {
        $("#btnMoreSizes").val("Show More");
        $("#sizes").css("height", "33px");
    }
}

function LoadProdXmlString() {
    try { //Internet Explorer
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = "false";
        xmlDoc.loadXML(allProdXml);
    } catch (e) { //Firefox et. all
        try {
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(allProdXml, "text/xml");
        } catch (e) {
            alert(e.message)
        }
    }
    AllProdXml = xmlDoc;
}

function GetProductsByFilters() {

    //$("#ulProductList").hide();
    CurrentPage = 0;

    FilteredProductsArr = new Array();

    SearchString = $('#search-box').attr("value").toLowerCase();
    if (IsFirstFocus) SearchString = "";

    var SearchStringArr = TrimString(SearchString).split(' ');
    var s1 = "";
    var s2 = "";
    var s3 = "";
    s1 = SearchStringArr[0];
    if (SearchStringArr.length > 1)
        s2 = SearchStringArr[1];
    if (SearchStringArr.length > 2)
        s3 = SearchStringArr[2];

    $(AllProdXml).find("ProductStruct").each(function () {
        var pid = $(this).find("Pid").text();
        var catid = $(this).find("Cid").text();
        var catName = $(this).find("CtN").text();
        var colid = $(this).find("Clr").text();
        var pName = $(this).find("N").text();
        var dSz = $(this).find("Dsz").text();
        var imgPath = $(this).find("ImgPath").text();
        var dc = $(this).find("DC").text();
        var prodCats = $(this).find("allCat").text().split(",");
        var newp = $(this).find("NewP").text();

        if (
            ((CategoryFilterArr.length == 0) || (detectArrayItem(CategoryFilterArr, prodCats)))
            &&
            ((ColorFilterArr.length == 0) || (detectItem(ColorFilterArr, colid)))
            &&
            ((s1.length == 0) || (pName.toLowerCase().indexOf(s1) > -1))
            &&
            ((s2.length == 0) || (pName.toLowerCase().indexOf(s2) > -1))
            &&
            ((s3.length == 0) || (pName.toLowerCase().indexOf(s3) > -1))
        ) {
            if (SizeFilterArr.length > 0) {
                var sizesArr = new Array();
                $(this).find("int").each(function () {
                    var size = $(this).text();
                    if (detectItem(SizeFilterArr, size)) {
                        addItem(FilteredProductsArr, new ProductImage(pid, pName, imgPath, catName, dSz, dc, newp));
                        return false;
                    }
                });
            }
            else {
                addItem(FilteredProductsArr, new ProductImage(pid, pName, imgPath, catName, dSz, dc, newp));
            }
            //            alert(pName);
        }
    });

    autocomp.setOptions({ lookup: FilteredProductsArr });

    TotalProducts = FilteredProductsArr.length;
    document.getElementById('txtTotal').innerHTML = TotalProducts;
    if (TotalProducts > 0) {
        TotalPages = parseInt(TotalProducts / ProductsPerPage) + (TotalProducts % ProductsPerPage > 0 ? 1 : 0);

        NextPage();
    }
    else {
        document.getElementById("ulProductList").innerHTML = "There are no Products to view in this section";
       $(document.getElementById("paging")).css('display','none');
    }
}

function NextPage() {
    GotoPage(++CurrentPage);
}

function LastPage() {
    GotoPage(TotalPages);
}

function PreviousPage() {
    GotoPage(--CurrentPage);
}

function FirstPage() {
    GotoPage(1);
}

function GotoPage(PageToShow) {
    skipVal = (PageToShow - 1) * ProductsPerPage;
    CurrentPage = PageToShow;

    BindProducts();
    BuildPaging();
   

}

function ViewAll() {
    ViewAllFlag = true;
    GotoPage(1);
}

function ShowLoadingAnimation(DisplayStile) {
    return false;
    if (DisplayStile.toLowerCase() == "block")
        $('#productsList').block({ message: null });
    else
        $('#productsList').unblock();
    document.getElementById("productsLoading").style.display = DisplayStile;
}

function initImage(imageId) {
    try {
        //document.getElementById("img" + imageId).style.display = 'block';
        $("#img" + imageId).css('display', 'block');
    } catch (e) { }
    //document.getElementById("img" + imageId).style.display = 'block';
}

function BindProducts() {

    $("#ulProductList").html("");

    var ItemHTML = "<li id='<$sortid$>'><div class='photoOverlay'><a href='<$href$>'><span class='prodimagespan' <$overlaySrc$>></span><img id='img<$id$>' catname='<$catname$>' sizeid='<$sizeid$>' class='prodimage' src='<$src$>' alt='<$alt$>' title='<$title$>' isdc='<$isdc$>'></a></div></li>";

    ImagesToLoad = 0;
    var AllItemsHTML = "";
    var tmpHtml;

    var productsPerPage;
    if (ViewAllFlag) {
        productsPerPage = FilteredProductsArr.length;
        ImagesToLoad = FilteredProductsArr.length;
        //ViewAllFlag = false;
        document.getElementById("paging").style.display = 'none';
        document.getElementById("backToTop").style.display = 'block';
    }
    else {
        productsPerPage = ProductsPerPage;
        document.getElementById("paging").style.display = 'block';
        document.getElementById("backToTop").style.display = 'none';
    }

    ImagesToLoad = productsPerPage;
    if (skipVal + productsPerPage > FilteredProductsArr.length)
        ImagesToLoad = FilteredProductsArr.length - skipVal;

    var preloadImg = new Array();

    try {
        for (var i = skipVal; i < FilteredProductsArr.length && i < skipVal + productsPerPage; i++) {
            var img = FilteredProductsArr[i];

            var img = FilteredProductsArr[i];

            tmpHtml = ItemHTML;
            tmpHtml = tmpHtml.replace("<$href$>", "/products/Product/" + img.prodId + "/" + UrlNameReplace(img.prodName));

            tmpHtml = tmpHtml.replace("<$src$>", img.imgPath);
            tmpHtml = tmpHtml.replace("<$alt$>", img.prodName);
            tmpHtml = tmpHtml.replace("<$title$>", img.prodName);
            tmpHtml = tmpHtml.replace("<$sizeid$>", img.defSize);
            tmpHtml = tmpHtml.replace("<$catname$>", img.catName);
            tmpHtml = tmpHtml.replace("<$id$>", img.prodId);
            tmpHtml = tmpHtml.replace("<$id$>", img.prodId);
            tmpHtml = tmpHtml.replace("<$id$>", img.prodId);
            tmpHtml = tmpHtml.replace("<$isdc$>", img.isCust);
            tmpHtml = tmpHtml.replace("<$sortid$>", i);
            if (img.isNew=="true")
                tmpHtml = tmpHtml.replace("<$overlaySrc$>", "style='background: url(/Images/newBannerOverlay.png) no-repeat; width: 66px; height: 66px;'");
            else
                tmpHtml = tmpHtml.replace("<$overlaySrc$>", "");

            preloadImg[i] = new Image();
            preloadImg[i].title = tmpHtml;

            preloadImg[i].onload = preloadImg[i].onerror = function() { InsertImage(this.title); onImageLoadDone(); };           //FilterArr.splice(i,0,this.title);
            preloadImg[i].src = img.imgPath;
        }
    }
    catch (ex) { alert(ex); }
}

var lockInsertImage = false;
function InsertImage(itemLi) {
    if (lockInsertImage) {
        setTimeout('InsertImage("' + itemLi + '");', 10);
    }
    lockInsertImage = true;
    var tmpId = parseInt(itemLi.substr(8));
    var tmpTitle = itemLi;
    var tmpFind = false;
    $("#ulProductList li").each(function() {
        if (parseInt(this.id) > tmpId) {
            $(this).before(tmpTitle);
            tmpFind = true;
            return false;
        }
    });
    if (!tmpFind) {
        $("#ulProductList").append(itemLi);
    }
    lockInsertImage = false;
}

function BuildPaging() {
    var pagingDiv = document.getElementById("paging");
    var viewAllDiv = document.getElementById("backToTop");
    var toHide = viewAllDiv.style.display == 'block' ? true : false;
    if (TotalPages == 1 || TotalProducts < ProductsPerPage || toHide) {
        pagingDiv.style.display = 'none';
        return;
    }
    else
        pagingDiv.style.display = 'block';

    var pagingStr = "";
    var tmpStr;
    var FromPage;
    var ToPage;

    if (btnPrev == null) btnPrev = document.getElementById("btnPrev")
    if (btnFirst == null) btnFirst = document.getElementById("btnFirst")
    if (btnNext == null) btnNext = document.getElementById("btnNext")
    if (btnLast == null) btnLast = document.getElementById("btnLast")

    btnPrev.disabled = btnFirst.disabled = (CurrentPage == 1);
    btnNext.disabled = btnLast.disabled = (CurrentPage >= TotalPages);
    btnFirst.style.display = btnLast.style.display = (TotalPages > pagesOnPaging ? "block" : "none");

    FromPage = CurrentPage - parseInt(pagesOnPaging / 2);
    FromPage = (FromPage < 1 ? 1 : FromPage);

    ToPage = FromPage + pagesOnPaging;
    if (ToPage > TotalPages) {
        ToPage = TotalPages;
        FromPage = ToPage - pagesOnPaging;
        FromPage = (FromPage < 1 ? 1 : FromPage);
    }

    document.getElementById('txtFrom').innerHTML = (CurrentPage - 1) * ProductsPerPage + 1;
    var txtTo = CurrentPage * ProductsPerPage;
    document.getElementById('txtTo').innerHTML = (txtTo > TotalProducts ? TotalProducts : txtTo);

    for (i = FromPage; i <= ToPage; i++) {
        if (i == CurrentPage)
            tmpStr = "<li><strong>" + i + "</strong></li>";
        else
            tmpStr = "<li><a href='javascript:void(0)' onclick='javascript:GotoPage(" + i + ");'>" + i + "</a></li>";

        pagingStr += tmpStr;
    }


    document.getElementById("spanPaging").innerHTML = pagingStr;
}

function onImageLoadDone() {
    ImagesToLoad = ImagesToLoad - 1;
    if (ImagesToLoad == 0) {
        BindProductImagesContextMenu();
    }
}

function CheckKeyPress(e) {
    var key;
    if (window.event)
        key = window.event.keyCode;     //IE
    else
        key = e.which;     //firefox
    if (key == 13) {
        SearchByString();
        return false;
    }
    else
        return true;
}

function SearchByString() {
    var tmpFilteredProductsArr = FilteredProductsArr;
    GetProductsByFilters();
    FilteredProductsArr = tmpFilteredProductsArr;
    autocomp.setOptions({ lookup: FilteredProductsArr });
}

function UrlNameReplace(str) {
    str = replaceAll(str, '&', 'And');
    str = replaceAll(str, ' ', '-');
    str = replaceAll(str, '/', '-Or-');
    return str;
}

function replaceAll(text, strA, strB) {
    return text.replace(new RegExp(strA, "g"), strB);
}

function RunSearch() {
    var searchString = document.getElementById("search-box").value;
    if (IsFirstFocus) searchString = "";
    document.location.href = "/Search/" + searchString;
}

var IsFirstFocus = true;
function SearchBoxOnFocus(obj) {
    if (IsFirstFocus) {
        IsFirstFocus = false;
        obj.value = "";
    }
}

function GetRandomInt(max) {
    var rand_no = Math.random();
    rand_no = rand_no * max;
    rand_no = Math.ceil(rand_no);
    return rand_no;
}

