﻿// JScript File

var BasketClass = Class.create();
BasketClass.prototype = {
    initialize : function ()
        {
            this.__loader = null;
            this.__loaderCount = 0;
            this.__basket_timer = null;
            this.__basket_timer_count = 0;
            Event.observe(window, 'load', this.updateUI.bindAsEventListener(this), false);
        },
    updateUI : function ()
        {
            this.__updateUI("",false);
        },
    add : function (productId, quantity)
        {
            this.__updateUI(["addProductId=",productId,"&addQuantity=",quantity].join(""),true);
        },
    set : function (productId, quantity)
        {
            this.__updateUI(["setProductId=",productId,"&addQuantity=",quantity].join(""),true);
        },
    remove: function (productId)
        {
            this.__updateUI(["removeProductId=",productId].join(""),false);
        },
    __showLoader : function ()
        {
            if (this.__loader == null)
            {
                this.__loader = $("shoppingBasketLoader");
                this.__loaderCount = 0;
            }
            if (this.__loader)
            {
                ++this.__loaderCount;
                Element.show(this.__loader);
            }
        },
    __hideLoader: function ()
        {
            if (this.__loader && (0 == --this.__loaderCount))
            {
                Element.hide(this.__loader);
            }
        },
    __updateUI : function (qs,flash)
        {
            function handleSuccess(r)
            {
                var el = elemq.shift();
                qsq.shift();
            
                var re = new RegExp("<!--BASKET_FRAGMENT_BEGIN-->([\\s\\S]*)<!--BASKET_FRAGMENT_END-->");
                var m = re.exec(r.responseText);
                if ((m != null) && (m.length == 2))
                {
                    el.innerHTML = new String(m[1]);
                }
                queueInvoke.bind(this)();
            }
            function handleFailure(r)
            {
                elemq.shift().innerHTML = "Kundkorgen kunde inte laddas.";
                this.__hideLoader();
            }
            
            function queueInvoke()
            {
                if (elemq.length > 0)
                {
                    //"/odla/shop/ajax/getbasket.aspx",
                    var ajax = new Ajax.Request(
                        "/shop/ajax/getbasket.aspx",
                        {
                            asynchronous:true, 
                            method:"get",
                            parameters: qsq[0],
                            onSuccess:handleSuccess.bind(this), 
                            onFailure:handleFailure.bind(this)});
                }
                else
                {
                    if (flash && (this.__basket_timer == null))
                    {
                        this.__basket_timer_count = 0;
                        this.__basket_timer = setInterval(this.__flash.bind(this),100);
                    }
                    this.__hideLoader();
                }
            }
            
            var elemq = [];
            var qsq = [];
            
            var el = $("updateShoppingBasketPlaceholder");
            if (el && qs)
            {
                elemq.push(el);
                qsq.push(qs);
            }
            
            el = $("shoppingBasketPlaceholder");
            if (el)
            {
                elemq.push(el);
                //qsq.push(!qs ? "" : qs);
                qsq.push("");
            }
            
            var el = $("editShoppingBasketPlaceholder");
            if (el)
            {
                flash = false;
                elemq.push(el);
                qsq.push("options=-edit");
            }
            el = $("cashierShoppingBasketPlaceholder");
            if (el)
            {
                flash = false;
                elemq.push(el);
                qsq.push("options=-nologo-nocashier");
            }
            
            if (elemq.length == 0)
            {
                return;
            }

            this.__showLoader();
            
            queueInvoke.bind(this)();
        },
    __flash : function ()
        {
            if (++this.__basket_timer_count == 7)
            {
                $("shoppingBasketFlashImage").className = "";
                clearInterval(this.__basket_timer);
                this.__basket_timer = null;
                return;
            }
            if ((this.__basket_timer_count % 2) == 0)
            {
                $("shoppingBasketFlashImage").className = "";
            }
            else
            {
                $("shoppingBasketFlashImage").className = "shopping-basket-flash";
            }
        }
};

var Basket = new BasketClass();
