﻿var groupId;

var cat_Arr = [];
var mat_Arr = [];
var sel_Arr = [];
var country_Arr = [];
var xmlResponse;
var minPrice, maxPrice;
var priceStart, priceStop;
var fetchData = 1;

//variables used to make AJAX call when slider is moved.
//When full page has finished, this variable is set to TRUE
//so that AJAX call can be made when slider is moved.
var isSliderInitialized = false;
var displayPriceSliderFiter = false;

//this two variables are used to restore the state of page when 
//user is coming back from detail page
var minHandleMoveValue;
var maxHandleMoveValue;

//Sort order defines default sort order(acceding price order) to get data from server
var sortOrder = -1;

//this variables defines the no. of items to display in one page
var pageSize = 15;
var pageIndex = 0;

//Assign default values to some global variables.
minHandleMoveValue = 0;
maxHandleMoveValue = 0;
priceStart = 0;
priceStop = 0;

$(document).ready(function()
                {
                
                groupId = $("#hdGroup").attr("value");
                
                //restore page state from querystring
                restoreSession();
                
                //hide the user's filter section
                $("#dvUserFilter").hide();
                
                //hadle categories
                //find each category element displayed and handle its click event
                 $("#dvCategories li").each(function(n)
                                      {
                                            this.onclick = function()
                                                            {
                                                                //Check if clicked category is already in queue of selected categories
                                                                if(!checkCategoryExists(this))
                                                                {
                                                                   cat_Arr.push($(this).attr('id'));
                                                                   
                                                                   $(this).removeClass("li-unselect").addClass("li-select");
                                                                }
                                                                
                                                                pageIndex = 0; 
                                                                
                                                                minHandleMoveValue = 0;
                                                                maxHandleMoveValue = 0;
                                                                isSliderInitialized = false;
                                                                displayPriceSliderFiter = false;
                                                                
                                                                fetchData = 1;
                                                                
                                                                getProducts();
                                                            };
                                        }
                                    );
                
                //hadle materials
                //find each materials element displayed and handle its click event
                $("#dvMaterials li").each(function(n)
                                  {
                                        this.onclick = function()
                                                        {
                                                            //Check if clicked materials is already in queue of selected materials
                                                            if(!checkMaterialExists(this))
                                                            {
                                                               mat_Arr.push($(this).attr('id'));
                                                               
                                                               $(this).removeClass("li-unselect").addClass("li-select");
                                                            }
                                                            
                                                            pageIndex = 0; 
                                                            
                                                            minHandleMoveValue = 0;
                                                            maxHandleMoveValue = 0;
                                                            
                                                            isSliderInitialized = false;
                                                            displayPriceSliderFiter = false;
                                                            
                                                            fetchData = 1;
                                                            
                                                            getProducts();   
                                                        };
                                    }
                                );
                                
                //find each selections element displayed and handle its click event
                $("#dvSelection li").each(function(n)
                                  {
                                        this.onclick = function()
                                                        {
                                                            //Check if clicked selection(colours) is already in queue of selected selection(colours)
                                                            if(!checkSelectionExists(this))
                                                            {
                                                               sel_Arr.push($(this).attr('id'));
                                                               
                                                               $(this).removeClass("li-unselect").addClass("li-select");
                                                            }
                                                            
                                                            pageIndex = 0; 
                                                            
                                                            minHandleMoveValue = 0;
                                                            maxHandleMoveValue = 0;
                                                            
                                                            isSliderInitialized = false;
                                                            displayPriceSliderFiter = false;
                                                            
                                                            fetchData = 1;
                                                            getProducts();   
                                                        };
                                    }
                                );
                                
                //find each coutry element displayed and handle its click event
                $("#dvCountry li").each(function(n)
                                   {
                                        this.onclick = function()
                                                        {
                                                            //Check if clicked country is already in queue of selected country
                                                            if(!checkCountryExists(this))
                                                            {
                                                               country_Arr.push($(this).attr('id'));
                                                               
                                                               $(this).removeClass("li-unselect").addClass("li-select");
                                                            }
                                                            
                                                            pageIndex = 0; 
                                                            
                                                            minHandleMoveValue = 0;
                                                            maxHandleMoveValue = 0;
                                                            
                                                            isSliderInitialized = false;
                                                            displayPriceSliderFiter = false;
                                                            
                                                            fetchData = 1;
                                                            getProducts();   
                                                        };
                                    }
                                );
                //Handles change event of both "Sort by & page size" dropdown
                
                $(".pagesize li").each(function(n)
                                        {
                                            this.onclick = page_click;   
                                        });
                                            
                $('.dv-sort-by-price').each(function(n)
                                                {
                                                    this.onclick = sort_by_price_click;
                                                });
                $('.dv-sort-by-name').each(function(n)
                                                {
                                                    this.onclick = sort_by_name_click;
                                                });
                                            
                //format grid display
                initializeProductDisplayAndPrepareProductMenuForEachProductBox(); 
                
                //Intitialize price slider
                initPriceSlider();

                //Move slider position
                //if page is in "restore" mode then
                //it will move slider to position to the place it was in previous state.
                if(minHandleMoveValue != maxHandleMoveValue)
                {
                    $("#slider1").slider("moveTo",minHandleMoveValue,0);                    
                    $("#slider1").slider("moveTo",maxHandleMoveValue,1);
                }
                if(minHandleMoveValue == maxHandleMoveValue)
                {
                    $("#slider1").slider("disable");
                }
                
                //Set slider initialized flag
                isSliderInitialized = true;
                
                //Create pager
                createPager(); 
                
                //show user's filter if user's session is being restored
                showUserFilter();  
                
                //Apply animation effects on filter boxes
                applyEffectsOnFilterBoxes();
                
                if($("#ProductDivWrapper div.ProductDiv").length == 0)
                {
                    var noResultFoundMsg = "<div class='no-result-box' align='left'>";
                    if($("#hdsearchkeyword").val() != '')
                    {
                     noResultFoundMsg += "Désolé, nous n'avons pas trouvé de résultats pour votre recherche <span style=color:#990000;>" + $("#hdsearchkeyword").val() + "</span>";
                    }
                    else
                    {
                     noResultFoundMsg += "Désolé, nous n'avons pas trouvé de résultats pour votre recherche ";
                    }
                    noResultFoundMsg += "<br /><br />";
                    noResultFoundMsg += "Vous pouvez changer vos mots clés et lancer une nouvelle recherche ou changer la sélection des menus de gauche.<br /><br /></div>";
                    
                    $(noResultFoundMsg).appendTo("div#gridContent");
                        
                }
                
                });
                
function page_click()
{
    pageSize = $(this).attr("id"); 
    
    var id = $(this).attr("id");
    $(".pagesize").each(function()
                        {
                            $(this).find('li#'+id).parent().find("li").removeClass("cur-page-size").end().end().addClass("cur-page-size");
                        });
    
    isSliderInitialized = false;
    displayPriceSliderFiter = false;
    
    pageIndex = 0;
    minHandleMoveValue = 0;
    maxHandleMoveValue = 0;
    
    getProducts();
}    
function sort_by_price_click()
{
    var element = $(this);
    
    var makeRequest = false;
    var source;
    
    isSliderInitialized = false;
    displayPriceSliderFiter = false;
    
    pageIndex = 0;
    minHandleMoveValue = 0;
    maxHandleMoveValue = 0;
    
    $(".dv-sort-by-price").each(function(n)
                                {
                                    if(element.hasClass('sort-by-price-blank'))
                                    {
                                        $(this).removeClass('sort-by-price-blank').addClass('sort-by-price-down');
                                        sortOrder = 0;
                                        makeRequest = true;
                                    }
                                    else
                                    {
                                        if(element.hasClass('sort-by-price-down'))
                                        {
                                            $(this).removeClass('sort-by-price-down').addClass('sort-by-price-up');
                                            sortOrder = 1;
                                            makeRequest = true;
                                        }
                                        else
                                        {
                                            $(this).removeClass('sort-by-price-up').addClass('sort-by-price-down');
                                            sortOrder = 0;
                                            makeRequest = true;
                                        }
                                    }

                                    $('.dv-sort-by-name').removeClass('sort-by-name-up').removeClass('sort-by-name-down').addClass('sort-by-name-blank'); 
                                });
    if(makeRequest)
    {
        getProducts();
    }
} 

function sort_by_name_click()
{
    var element = $(this);
    
    var makeRequest = false;
    
    var source;
    
    isSliderInitialized = false;
    displayPriceSliderFiter = false;
    
    pageIndex = 0;
    minHandleMoveValue = 0;
    maxHandleMoveValue = 0;
    
    $(".dv-sort-by-name").each(function(n)
                                {
                                    if($(element).hasClass('sort-by-name-blank'))
                                    {
                                        $(this).removeClass('sort-by-name-blank').addClass('sort-by-name-down');
                                        sortOrder = 2;
                                        makeRequest = true;
                                    }
                                    else
                                    {
                                        if($(element).hasClass('sort-by-name-down'))
                                        {
                                            sortOrder = 3;
                                            makeRequest = true; 
                                            $(this).removeClass('sort-by-name-down').addClass('sort-by-name-up');
                                        }
                                        else
                                        {
                                            sortOrder = 2;
                                            makeRequest = true; 
                                            $(this).removeClass('sort-by-name-up').addClass('sort-by-name-down');
                                        }
                                    }
                                    
                                    $('.dv-sort-by-price').removeClass('sort-by-price-up').removeClass('sort-by-price-down').addClass('sort-by-price-blank');
                                });

    if(makeRequest)
    {
        getProducts();
    }
}
                                                                  
function checkCategoryExists(cat)
{
    var xreturn = false;
    
    for(i=0;i<cat_Arr.length;i++)
    {
        if($(cat).attr('id') == cat_Arr[i])
        {
            xreturn = true;
            
            cat_Arr = $.grep(cat_Arr, function(value){ return value != $(cat).attr('id'); } );
            
            $(cat).removeClass("li-select").addClass("li-unselect");
        }
    }
    return xreturn;
}
function checkMaterialExists(mat)
{
    var xreturn = false;
    
    for(i=0;i<mat_Arr.length;i++)
    {
        if($(mat).attr('id') == mat_Arr[i])
        {
            xreturn = true;
            
            mat_Arr = $.grep(mat_Arr, function(value){ return value != $(mat).attr('id'); } );
            
            $(mat).removeClass("li-select").addClass("li-unselect");
        }
    }
    return xreturn;
}

function checkSelectionExists(sel)
{
    var xreturn = false;
    
    for(i=0;i<sel_Arr.length;i++)
    {
        if($(sel).attr('id') == sel_Arr[i])
        {
            xreturn = true;
            
            sel_Arr = $.grep(sel_Arr, function(value){ return value != $(sel).attr('id'); } );
            
            $(sel).removeClass("li-select").addClass("li-unselect");
        }
    }
    return xreturn;
}
function checkCountryExists(country)
{
    var xreturn = false;
    
    for(i=0;i<country_Arr.length;i++)
    {
        if($(country).attr('id') == country_Arr[i])
        {
            xreturn = true;
            
            country_Arr = $.grep(country_Arr, function(value){ return value != $(country).attr('id'); } );
            
            $(country).removeClass("li-select").addClass("li-unselect");
        }
    }
    return xreturn;
    
}

function getProducts()
{
    //Make a AJAX call to server passing all required paramters via querystring from predefined GLOBAL variables, and handle response.
    
    var div = '<div><img src="images/load2.gif"/></div>';
    $.facebox(div);
    
    $.get("extractproduct.aspx",{
                                group:groupId,
                                cat:cat_Arr, 
                                mat:mat_Arr, 
                                sel:sel_Arr,
                                country:country_Arr,
                                refresh:fetchData,
                                sort:sortOrder,
                                size:pageSize, 
                                page:pageIndex, 
                                priceStartValue:minHandleMoveValue, 
                                priceStopValue:maxHandleMoveValue, 
                                rand: Math.random()}, 
                                function(response) 
                                {
                                    $(document).trigger('close.facebox');
                                    
                                    displayResult(response);
                                    
                                    makeGAnalyticsFunctionCall();
                                    
                                    //format grid display
                                    initializeProductDisplayAndPrepareProductMenuForEachProductBox();   
                                    
                                    //display user's filters
                                    showUserFilter();
                                    
                                    //Intitialize price slider
                                    initPriceSlider();

                                    //Move slider position
                                    //if page is in "restore" mode then
                                    //it will move slider to the place it was in previous state.
                                    if(minHandleMoveValue != maxHandleMoveValue)
                                    {
                                        $("#slider1").slider("moveTo",minHandleMoveValue,0);                    
                                        $("#slider1").slider("moveTo",maxHandleMoveValue,1);
                                    }
                                    if(minHandleMoveValue == maxHandleMoveValue)
                                    {
                                        $("#slider1").slider("disable");

                                        $("#handle1display").html(parseFloat($("#priceRange span:first").html()));
                                        $("#handle2display").html(parseFloat($("#priceRange span:last").html()));
                                    }
                                    
                                    //Set slider initialized flag
                                    isSliderInitialized = true;
                                    
                                    //Create pager
                                    createPager();
                                });
}

function createPager()
{
    var curPage;
    
    if((!isNaN(pageIndex)))
        curPage = parseInt(pageIndex);
    
    var pCount = $("#pagination > span").html();
    
    //initPager();
    $("#pagerContent").pager({PageCount: pCount, currentPage: curPage});
    
    $("#pagerContent2").pager({PageCount: pCount, currentPage: curPage});
}

/*  
    Begin : State restoration Functions 
    Following functions are used to restore page to its previous state if a user is returning back
    from product detail page 
*/

function restoreSession()
{
    restoreCategories();
    restoreMaterials();
    restoreSelections();
    restoreCountry();
    restoreFetchStatus();
    restorePriceRange();
    restoreSortOrder();
    restorePageSize();
    restorePageInd();
}

function restoreCategories()
{
    var catArrToRestore = [];
    catArrToRestore = getRestorePointValueByFlag('b', true);//getQueryVariable("cat", true);
    
    if(catArrToRestore!=null)
    {
        cat_Arr = catArrToRestore;
        
        for(i=0;i<cat_Arr.length;i++)
        {
            $("#dvCategories li[id=" + catArrToRestore[i] + "]").removeClass("li-unselect").addClass("li-select");
        }
    }
}

function restoreMaterials()
{
    var matArrToRestore = [];
    matArrToRestore = getRestorePointValueByFlag('c', true);//getQueryVariable("mat", true);
    
    if(matArrToRestore!=null)
    {
        mat_Arr = matArrToRestore;
        
        for(i=0;i<matArrToRestore.length;i++)
        {
            $("#dvMaterials li[id=" + matArrToRestore[i] + "]").removeClass("li-unselect").addClass("li-select");
        }
    }
}

function restoreSelections()
{
    var selArrToRestore = [];
    selArrToRestore = getRestorePointValueByFlag('d', true);//getQueryVariable("sel", true);
    
    if(selArrToRestore!=null)
    {
        sel_Arr = selArrToRestore;
        
        for(i=0;i<selArrToRestore.length;i++)
        {
            $("#dvSelection li[id=" + selArrToRestore[i] + "]").removeClass("li-unselect").addClass("li-select");
        }
    }
}
function restoreCountry()
{
    var countryArrToRestore = [];
    countryArrToRestore = getRestorePointValueByFlag('e', true);//getQueryVariable("country", true);
    
    if(countryArrToRestore!=null)
    {
        country_Arr = countryArrToRestore;
        
        for(i=0;i<countryArrToRestore.length;i++)
        {
            $("#dvCountry li[id=" + countryArrToRestore[i] + "]").removeClass("li-unselect").addClass("li-select");
        }
    }
}

function restoreFetchStatus()
{
    var fStatus;
    
    fStatus = getRestorePointValueByFlag('k', false);//getQueryVariable("refresh", false);

    if(fStatus != null)
    {
        if(fStatus==0)
            fetchData = 0;
        else
            fetchData = 1;
        //fetchData = fStatus;
    }
}
function restorePriceRange()
{
    var minPrice, maxPrice;
    
    minPrice = getRestorePointValueByFlag('i', false);//getQueryVariable("priceStartValue",false);
    
    if((minPrice != null) && (!isNaN(minPrice)))
    {
        minHandleMoveValue = minPrice;
    }
    
    maxPrice = getRestorePointValueByFlag('j', false);//getQueryVariable("priceStopValue",false);
    if((maxPrice != null) && (!isNaN(maxPrice)))
    {
        maxHandleMoveValue = maxPrice;
    }
}
function restoreSortOrder()
{
    var sort = getRestorePointValueByFlag('f', false);//getQueryVariable("sort",false);
    
    if(sort != null)
    {
        sortOrder = sort;
        
        if(sortOrder=="0")
        {
            $(".dv-sort-by-price").each(function(n)
                                    {
                                        $(this).removeClass('sort-by-price-blank').removeClass('sort-by-price-up').addClass('sort-by-price-down');
                                    });    
        }
        else if(sortOrder=="1")
        {
            $(".dv-sort-by-price").each(function(n)
                                    {
                                        $(this).removeClass('sort-by-price-blank').removeClass('sort-by-price-down').addClass('sort-by-price-up');
                                    });    
        }
        else if(sortOrder=="2")
        {
            $(".dv-sort-by-name").each(function(n)
                                    {
                                        $(this).removeClass('sort-by-name-blank').removeClass('sort-by-name-up').addClass('sort-by-name-down');
                                    });    
        }
        else if(sortOrder=="3")
        {
            $(".dv-sort-by-name").each(function(n)
                                    {
                                        $(this).removeClass('sort-by-name-blank').removeClass('sort-by-name-down').addClass('sort-by-name-up');
                                    });    
        }
    }
}
function restorePageSize()
{
    var pSize = getRestorePointValueByFlag('g', false);//getQueryVariable("size",false);
    
    if(pSize != null)
    {
       pageSize = pSize;
       
       $(".pagesize").each(function()
                            {
                                
                                if($(this).find("li#" + pSize).length > 0)
                                {
                                    $(this).find("li").removeClass("cur-page-size");
                                    $(this).find("li#" + pSize).addClass("cur-page-size");
                                }
                            });
    }
}
function restorePageInd()
{
    var pInd = getRestorePointValueByFlag('h', false);//getQueryVariable("page",false);
    
    if(pInd != null)
    {
       pageIndex = pInd; 
       //currentPage = pInd;
    }
}


/* End : State restoration Functions */


function initPriceSlider()
{
///slider related functions
minPrice = Math.floor(parseFloat($("#priceRange span:first").html()));
maxPrice = Math.ceil(parseFloat($("#priceRange span:last").html()));

if((minPrice != 0 && maxPrice != 0) && (minPrice == maxPrice))
{
    minPrice = minPrice - 2;
}
if(minHandleMoveValue == 0 && maxHandleMoveValue == 0)
{
    minHandleMoveValue = minPrice;
    maxHandleMoveValue = maxPrice;
}
else
{
    //check for valid price range passed in querystring parameter
    //passed parameters should be between the range of retrieved result set
    if(minHandleMoveValue >= minPrice && minHandleMoveValue <= maxPrice)   
    {
        displayPriceSliderFiter = true;
    }
    else
    {
        minHandleMoveValue = minPrice;
    }
    if(maxHandleMoveValue >= minPrice && maxHandleMoveValue <= maxPrice)   
    {
        displayPriceSliderFiter = true;
    }
    else
    {
        maxHandleMoveValue = maxPrice;
    }
}
                                
$("#slider1").slider("destroy");

    if(minPrice != maxPrice)
    {
        $("#slider1").slider({
                            min:minPrice, max:maxPrice, range:true,
                            start: function(e, ui)
                                    {
                                    },
                            slide: function(e, ui) 
                                    { 
                                        $("#handle1display").html($("#slider1").slider("value",0));
                                        $("#handle2display").html($("#slider1").slider("value",1));
                                    },
                             stop: function(e, ui)
                                    {
                                        priceStart = $("#slider1").slider("value",0);
                                        priceStop = $("#slider1").slider("value",1)
                                        
                                        fetchData = 0;
                                        if(isSliderInitialized)
                                        {
                                            //alert('its a call from slider');
                                            //Make AJAX request to display result
                                            
                                            pageIndex = 0;
                                            var div = '<div><img src="images/load2.gif"/></div>';
                                            $.facebox(div);
            
                                            $.get("extractproduct.aspx",{
                                            group:groupId,
                                            refresh:fetchData,
                                            sort:sortOrder, 
                                            size:pageSize, 
                                            page:pageIndex, 
                                            rand: Math.random(),
                                            priceStartValue:priceStart, 
                                            priceStopValue:priceStop }, 
                                            function(response) 
                                            {
                                                $(document).trigger('close.facebox');
                                                
                                                displayResult(response);
                                                
                                                makeGAnalyticsFunctionCall();
                                                
                                                initializeProductDisplayAndPrepareProductMenuForEachProductBox();
                                                
                                                //display user's filters
                                                displayPriceSliderFiter = true;
                                                
                                                showUserFilter();
                                                
                                                createPager();
                                                
                                            });
                                        }
                                        
                                    }
                            });
    }
    else
    {
        $("#slider1").hide();
    }
}






//Add a item to cart when it is clicked
function addtoCart(dv)
{
    if($.trim($('#' + dv.id).attr("class")) == "Cart-added")
    {
        location.href = 'mycart.aspx';
        return;
    }
    
    var cartItemId;
    cartItemId = parseInt(dv.id.split('-')[1]);
    
    //Make an "add to cart" AJAX request to server, and handle response.
    $.get("addto-cart.aspx",{
                            pid:cartItemId,
                            rand: Math.random()
                            },
                            function(response)
                            {
                                var statusCode = getStatusCodeFromResponse(response);
                                
                                if(statusCode == $.trim("SUCCESS"))
                                {
                                        $('#' + dv.id).addClass("Cart-added").removeClass("Cart").parent().parent().find('DIV.AddtoCart-flap').addClass('AddedtoCart-flap');
                                        
                                        //display cart summary in header.
                                        $("A.myCart SPAN").html(getCartSummaryFromResponse(response));
                                }
                                else if(statusCode == "CART FULL")
                                {
                                    showCartGrid(response);
                                }
                                else if(statusCode == "OUT STOCK")
                                {
                                    showCartGrid(response);
                                }
                            });
}
function getStatusCodeFromResponse(res)
{
    var statusCode = $(res).find('#status').html();
    
    return $.trim(statusCode);
}
function getCartSummaryFromResponse(res)
{
    var cartSummary = $(res).find('#cart-summary').html();
    
    return $.trim(cartSummary);
}
function showCartGrid(response)
{
    var carFull = "<div class='flora' id='popupDiv'>";
    carFull += "<div align='left'>";
    carFull += "<b><span id='msg'><span id='heading'>Votre panier est plein</span><br />";
    carFull += "<br />Vous avez plus de points dans le panier.<br />";
    carFull += "</span></b><br /><br /></div></div>";
    

    $(carFull).dialog({ modal: true, 
                        position: "center",
                        height:175,
                        overlay: { opacity: 0.1, 
                        background: "black" 
                        } 
                    });
}