﻿
var LaplaceService_Basket;

function GetRowElement(row, tag, idPrefix)
{   
    rowElements = row.getElementsByTagName(tag);
    var selectedElement;
    
    for (i=0;i<rowElements.length;i++)
    {   
        if (rowElements[i].id.indexOf(idPrefix) >= 0)
        {
           selectedElement = rowElements[i];
           break;   
        }
    }
    
    return selectedElement;   
}

function GetProductFromCategoryList(SKU) {

    for (ij = 0; ij < CategoryProductList.length; ij++) {
        
        if (CategoryProductList[ij].SKU == SKU) return CategoryProductList[ij];
    }
    
    return null;
}

function GetServiceBasketObject(serviceName) {

    if (LaplaceService_Basket == null) {
        RegisterServiceBasket();
        LaplaceService_Basket = $create(LaPlaceService.ServiceBasket, {}, {}, null, null);
        
        LaplaceService_Basket.Set_serviceName(serviceName);
    }

    return LaplaceService_Basket;
}

function GetSelectedItem(select) {

    for (var i = 0; i < select.options.length; i++)
        if (select.options[i].selected) return select.options[i].value;

    return null;
}

function BasketItem(sku, amount, menuItems) {
    
    this.SKU = sku.toLowerCase();
    this.Amount = amount * 1;
    this.MenuItems = menuItems;
}


function MenuItem(sku, numberOfPersons)
{
    this.SKU = sku.toLowerCase();
    this.numberOfPersons = numberOfPersons * 1;
}

function RegisterServiceBasket() {
    //namespace
    Type.registerNamespace("LaPlaceService");

    // constructor ServiceBasket
    LaPlaceService.ServiceBasket = function() {
        LaPlaceService.ServiceBasket.initializeBase(this);

        this._serviceName = "";
        this._serviceCookieName = "LaPlace__Service_Basket";
        this._ServiceCookieBasketNameTemplate = "LaPlace_[0]_Service_Basket";
    }
    
    //prototype
    LaPlaceService.ServiceBasket.prototype = {

        Save_basket: function(basket) {

            //saves basket to cookie
            var strItems = "";

            for (i = 0; i < basket.length; i++) {
                var aantal = basket[i].Amount;
                if (basket[i].MenuItems != null && basket[i].MenuItems.length > 0)
                {
                    var strMenuItems = "";
                    
                    for (k=0; k < basket[i].MenuItems.length; k++)
                    {                        
                        var menuItem = basket[i].MenuItems[k];
                        if (menuItem.numberOfPersons <= 0) continue; 
                        if (strMenuItems != "") strMenuItems += "-";
                        strMenuItems += menuItem.SKU + "]" + menuItem.numberOfPersons;
                    }
                    
                    aantal += "[" + strMenuItems;
                }
                
                var strItem = basket[i].SKU + " " + aantal;
                if (strItems != "") strItems += "_";
                strItems += strItem;
            }
            
            set_cookie(this._serviceCookieName, strItems, 14);

            var h = this.get_events().getHandler('Save_basket');
            if (h) h(this, basket);
        },
        
        //saveBasketHandler occurs when basket is saved
        add_saveBasketHandler: function(handler) {
            this.get_events().addHandler('Save_basket', handler);
        },

        //saveBasketHandler occurs when basket is saved
        remove_saveBasketHandler: function(handler) {
            this.get_events().removeHandler('Save_basket', handler);
        },

        Get_basket: function() {

            var basketItems = new Array();            
            
            var strItems = get_cookie(this._serviceCookieName);            
            
            if (strItems == "") return basketItems;

            var itemList = strItems.split('_');
            
            for (i = 0; i < itemList.length; i++) {
                
                var arrMenuItems = new Array();
                var strItem = itemList[i].split(' ');
                
                if (strItem.length < 2) continue;
                
                var strAantal = strItem[1];
                var menuItems = strAantal.split('[');
                if (menuItems.length > 1)
                {
                    strAantal = menuItems[0];
                    
                    menuItems = menuItems[1].split('-');
                    
                    for(l = 0; l < menuItems.length; l++)
                    {                    
                        strMenuItem = menuItems[l].split(']');
                        
                        if (strMenuItem.length < 2) continue;
                        
                        Array.add(arrMenuItems, new MenuItem(strMenuItem[0].toLowerCase(), strMenuItem[1]));
                    }                    
                }
                
                //Array.add(basketItems, new BasketItem(strItem[0].toLowerCase(), strItem[1]));
                
                Array.add(basketItems, new BasketItem(strItem[0].toLowerCase(), strAantal, arrMenuItems));
            }
            
            return basketItems;
        },

        Get_BasketTotalPrice: function() {

            var basket = this.Get_basket();
            var totalPrice = 0;

            for (i = 0; i < basket.length; i++) {

                var product = GetProductFromCategoryList(basket[i].SKU);
                if (product == null) continue;
                if (basket[i].MenuItems != null && basket[i].MenuItems.length > 0)
                {
                    if (product.NumberOfPersons > 0)
                        totalPrice += (basket[i].Amount/product.NumberOfPersons) * product.Price;
                }
                else
                {
                    totalPrice += basket[i].Amount * product.Price;
                }
            }
            
            return totalPrice;
        },

        Add_basketItem: function(basketItem) {

            if (basketItem == null) return;
            var basket = this.Get_basket();
            var itemExists = false;

            //check existing basketitem
            for (i = 0; i < basket.length; i++) {

                if (basket[i].SKU != basketItem.SKU) continue;
                basket[i].Amount += (basketItem.Amount * 1);
                itemExists = true;
                break;
            }

            if (!itemExists) Array.add(basket, basketItem);

            this.Save_basket(basket);
        },

        Set_basketItem: function(basketItem) {

            if (basketItem == null) return;

            var basket = this.Get_basket();
            var itemExists = false;
            var newAmount = basketItem.Amount;
            
            //check existing basketitem
            for (i = 0; i < basket.length; i++) {
                if (basket[i].SKU != basketItem.SKU) continue;

                basketItem = basket[i];
                itemExists = true;
                break;
            }
            
            basketItem.Amount = newAmount;
            if (!itemExists) Array.add(basket, basketItem);

            this.Save_basket(basket);
        },
        
        AddOrReplace_basketItem: function(basketItem) {

            if (basketItem == null) return;
            
            var basket = this.Get_basket();
            
            var itemIndex = -1;
            
            //check existing basketitem
            for (i = 0; i < basket.length; i++) {
                if (basket[i].SKU != basketItem.SKU) continue;
                itemIndex = i;
                break;
            }
            
            if (itemIndex >= 0) {
                basket[itemIndex] = basketItem;
            }            
            else
            {
                Array.add(basket, basketItem);
            }
            
            this.Save_basket(basket);
        },

        Delete_basketItem: function(sku) {
            
            
            var basket = this.Get_basket();
            
            var itemIndex = -1;

            //check existing basketitem
            for (i = 0; i < basket.length; i++) {
                if (basket[i].SKU != sku) continue;
                itemIndex = i;
                break;
            }
            
            if (itemIndex >= 0) {
                Array.removeAt(basket, itemIndex);

                this.Save_basket(basket);
            }
            
        },

        Set_serviceName: function(value) {
            this._serviceName = value;
            this._serviceCookieName = this._ServiceCookieBasketNameTemplate.replace("[0]", this._serviceName);
        },

        Get_serviceName: function() {
            return this._serviceName;
        },

        Get_serviceCookieName: function() {
            return this._serviceCookieName;
        },

        initialize: function() {

            LaPlaceService.ServiceBasket.callBaseMethod(this, 'initialize');
        },

        // Release resources before control is disposed.
        dispose: function() {
            LaPlaceService.ServiceBasket.callBaseMethod(this, 'dispose');
        }
    }

    // Register the class.
    LaPlaceService.ServiceBasket.registerClass('LaPlaceService.ServiceBasket', Sys.Component);

    // Notify the ScriptManager that this is the end of the script.
    if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
}


function RegisterLastSeenList() {
    
    //namespace
    Type.registerNamespace("LaPlaceService");

    // constructor LastSeenList
    LaPlaceService.LastSeenList = function() {
        LaPlaceService.LastSeenList.initializeBase(this);

        this._serviceName = "";
        this._maxItems = 10;
        this._serviceLastSeenCookieName = "LaPlace__Service_LastSeen";
        this._ServiceCookieLastSeenNameTemplate = "LaPlace_[0]_Service_LastSeen";

    }
    
    //prototype
    LaPlaceService.LastSeenList.prototype = {

        Get_list: function() {

            var listItems = new Array();
            var strItems = get_cookie(this._serviceLastSeenCookieName);

            if (strItems == "") return listItems;

            var itemList = strItems.split(' ');

            for (i = 0; i < itemList.length; i++) {
                
                if (i >= this._maxItems) break;
                if (itemList[i] == null || itemList[i] == '') continue;
                Array.add(listItems, itemList[i]);
            }
            
            return listItems;
        },
        
        Delete_list: function() {
            set_cookie(this._serviceLastSeenCookieName, '', 1);

            var h = this.get_events().getHandler('Save_list');
            if (h) h(this, '');
        },

        //saveListHandler occurs when list is deleted
        add_saveListHandler: function(handler) {
            this.get_events().addHandler('Save_list', handler);
        },

        //saveListHandler occurs when list is deleted
        remove_saveListHandler: function(handler) {
            this.get_events().removeHandler('Save_list', handler);
        },

        Set_serviceName: function(value) {
            this._serviceName = value;
            this._serviceCookieName = this._ServiceCookieBasketNameTemplate.replace("[0]", this._serviceName);
        },

        Get_serviceName: function() {
            return this._serviceName;
        },

        Get_serviceCookieName: function() {
            return this._serviceCookieName;
        },

        initialize: function() {

            LaPlaceService.LastSeenList.callBaseMethod(this, 'initialize');
        },

        // Release resources before control is disposed.
        dispose: function() {
            LaPlaceService.LastSeenList.callBaseMethod(this, 'dispose');
        }
    }

    // Register the class.
    LaPlaceService.LastSeenList.registerClass('LaPlaceService.LastSeenList', Sys.Component);

    // Notify the ScriptManager that this is the end of the script.
    if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
}

function set_cookie(c_name, value, expiredays) {
    exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" + escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString()) + "; path=/";
}

function get_cookie(c_name) {
    if (document.cookie.length > 0) {
        c_start = document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length + 1;

            c_end = document.cookie.indexOf(";", c_start);

            if (c_end == -1) c_end = document.cookie.length;

            return unescape(document.cookie.substring(c_start, c_end));
        }
    }
    
    return "";
}

function GetSelectedProductAmount(element)
{
    var hidAmount = element.parentNode.getElementsByTagName("input")[0];
    
    var ddLabel = element.parentNode.parentNode.parentNode.getElementsByTagName('div')[0];
    var amountLabel = ddLabel.getElementsByTagName('div')[0];
    
    hidAmount.value = amountLabel.innerHTML = element.innerHTML;
    ddLabel.className = 'AmountLabelSelected' + hidAmount.className;
    
    return hidAmount.value;
}

function SelectProductAmount(element, sku) {
    
    var selectProductAmount = GetSelectedProductAmount(element);
    
    if (sku != null && sku != '') SetBasketItemAmount(sku, selectProductAmount);
}

function AddBasketItem(sku, comboBoxId) {
     
    var comboBox = $get(comboBoxId);
    
    if (sku == null || sku == "" || comboBox == null || comboBox.value == '0') return;

    var service = GetServiceBasketObject(ServiceName);
    var basketItem = new BasketItem(sku, comboBox.value, null);

    service.Add_basketItem(basketItem);
}

function SetBasketItemAmount(sku, amount) {

    var service = GetServiceBasketObject(ServiceName);
    var basketItem = new BasketItem(sku, (amount * 1), null);

    service.Set_basketItem(basketItem);
}

function DeleteBasketItem(sku) {

    var service = GetServiceBasketObject(ServiceName);

    service.Delete_basketItem(sku);
}