﻿/*
* Mini Cart
*/

$(function() {
    var miniCartServiceUrl = "Handler/ShopCartHandler.ashx?func=GetMiniCart";

    refreshMiniCart();

    function refreshMiniCart() { $.MiniCart({ dowhat: 'load' }); };

    $(function() {

        var button = $("#Cart");
        var object = $("#MyCart");
        object.css('z-index', 100).children().css('z-index', 100);
        var on = false;
        $("#Cart").hover(
		function() {
		    if (on) return;
		    button.addClass('o');
		    object.slideToggle(800, function() { on = true; });
		}, function() {
		    object.slideUp(1000, function() { button.removeClass('o'); on = false; })
		});

    })
});




$.MiniCart = function(config) {
    config = $.extend(
			{
			    handler: "../Handler/ProductHandler.ashx",
			    catNo: null,
			    country: null,
			    dowhat: null,
			    incNum: 0,
			    from: null, //from which page
			    isFree: -1, //>0 is free sample
			    callback: null,
			    refresh: false
			},
			config || {});

    if (config.refresh) {
        $.cookie('ptg_mini_cart_list', null, SYSTEM_CONFIG.CookieOpt);
        return;
    }

    var priceAttr = { catNo: config.catNo, name: null, country: null, price: null, currency: null, shipfee: null, size: null, num: 0 };

    //loading
    setLoading(true);
    switch (config.dowhat) {
        case "add":
            Add2Cart();
            break;
        case "del":
            Del4Cart();
            break;
        case "check":
            CheckOut();
            break;
        case "load":
            LoadCart();
            break;
        default: break;
    }

    //bind check out event
    $('#lnkCheckOut,#lnkCheckOut2,#lnkCheckOut3').click(CheckOut);

    setLoading(false);

    //Add to Cart
    function Add2Cart() {
        //free
        if (config.isFree == 0) { alert("Sorry,understock!"); return; }

        if (config.incNum == 0) config.incNum = 1;

        //read price
        $.getJSON("../Handler/ProductHandler.ashx?r=" + Math.random(),
        { func: 'GetProductPrice', param: 'catNo=' + config.catNo + '|cName=' + config.country },
        function(res) {
            priceAttr.name = res.table[1].rows[0].ProductName;
            priceAttr.country = config.country;
            priceAttr.price = config.isFree >= 0 ? 0 : Math.ceil(res.table[2].rows.length > 0 ? res.table[2].rows[0].Price : 0);
            priceAttr.currency = res.table[0].rows[0].Currency;
            priceAttr.shipfee = res.table[0].rows[0].ShippingFee;
            priceAttr.size = res.table[1].rows[0].Size;

            //exist
            if (hasInCookie(config.catNo)) {

                if (config.isFree >= 0) {
                    alert("Only one allowed!");
                    return;
                }

                //update cookie
                updateCookie(config.catNo, config.incNum);
                //update list
                UpdateCart(config.catNo);
            }
            //No exist
            else {
                priceAttr.num = 1;
                //insert a pro
                insertOne(priceAttr);
                //insert cookie
                insertCookie(priceAttr);
            }

            //discount
            priceAttr.discount = 0;

            //total
            setTotal();

            //goto
            if (config.from == 'pro')
                window.location = "../Shopping/ShoppingCart.aspx";

            setLoading(false);
        });
    }
    function insertOne(proObj, list) {
        if (!proObj || !proObj.catNo) return;
        if (!list) {
            list = $('#MyCart .MyCart_List');

            if (list.find('li').length <= 0) {
                list.find('.empty').replaceWith("<ul/>");
            }

            list = list.find('ul');
        }

        var str = new Array();
        str.push('<LI name="' + proObj.catNo + '"><DL>');
        str.push('<DD class="p_Name"><A href="/Products/' + proObj.catNo + '.htm">' + proObj.catNo + '&nbsp;&nbsp; ' + proObj.name + '</A></DD>');
        str.push('<DD class="p_Price"><b class="cur">' + ((!proObj.currency) ? '' : proObj.currency) + '</b>');
        str.push('<b class="prc">' + ((!proObj.price) ? '--' : parseFloat(proObj.price).format('#.00')) + '</b>');
        str.push('<font size=3> × </font><b class="num">' + proObj.num + '</b>');
        str.push('<BR /><A name="' + proObj.catNo + '" href="javascript:void(0)" class="del">Delete</A></DD>');
        str.push('</DL></LI>');

        list.append(str.join(''));

        bindDelEvent(list, proObj.catNo);
    }
    function Del4Cart() {
        if (config.incNum == 0) config.incNum = -1;
        updateCookie(config.catNo, config.incNum);
        //update list
        UpdateCart(config.catNo);
        //total
        setTotal();
        //var li = $('#MyCart .MyCart_List').find('li[name="' + catNo + '"]').remove();

        setLoading(false);
    }
    function UpdateCart(catNo, num) {
        var findit = false;
        var li = $('#MyCart .MyCart_List').find('li[name="' + catNo + '"]');
        var cArr = $.cookie('ptg_mini_cart_list');
        if (cArr != null) {
            var itms = eval('[' + cArr + ']');
            $.each(itms, function(i, t) {
                if (t.catNo == catNo) {
                    if (t.num > 0)
                        li.find('.num').html(t.num);
                    else
                        li.remove();

                    findit = true;
                    return;
                }
            });
        }

        if (!findit)
            li.remove();
    }
    function LoadCart() {
        var list = $('#MyCart .MyCart_List');
        try {
            var cArr = $.cookie('ptg_mini_cart_list');
            if (cArr && cArr != 'null') {
                var itms = eval('[' + cArr + ']');

                if (itms.length > 0) {
                    if (list.find('li').length <= 0) {
                        list.find('.empty').replaceWith("<ul/>");
                    }
                    list = list.find('ul');
                }

                $.each(itms, function(i, t) {
                    if (t.num > 0)
                        insertOne(t, list);
                });

                //total
                setTotal();
            }
            else {
                $.cookie('ptg_mini_cart_list', null, SYSTEM_CONFIG.CookieOpt);
                list.find('ul').remove().prepend('<span class="empty">No items in cart!</span>');
            }
        }
        catch (ex) {
            $.cookie('ptg_mini_cart_list', null, SYSTEM_CONFIG.CookieOpt);
            alert("Data's format is wrong!\r\nYour shop cart will be empty");
            window.location = window.location;
        }
    }

    function CheckOut() {
        //del quotation id
        var cArr = $.cookie('ptg_mini_cart_list');
        if (cArr && cArr != 'null')
            $.cookie('ptg_order_quotation_id', null, SYSTEM_CONFIG.CookieOpt);

    }

    function setTotal() {
        var cArr = $.cookie('ptg_mini_cart_list');
        var tNum = 0;
        var tPrice = 0;
        if (cArr != null && cArr != 'null') {
            var itms = eval('[' + cArr + ']');
            $.each(itms, function(i, t) {
                tNum = tNum + parseInt(t.num);
                tPrice = tPrice + t.price * parseInt(t.num);
            });
        }
        else {
            $.cookie('ptg_mini_cart_list', null, SYSTEM_CONFIG.CookieOpt);
        }
        var cur = $.cookie('ptg_user_currency_selected');
        if (!cur) cur = "";

        var list = $('#MyCart .MyCart_List');
        if (tNum > 0) {
            $('#CartBarProductNum').text(tNum);
            list.find('.items').html(tNum);
            list.find('.total').html(cur + ((!tPrice) ? '0.00' : tPrice.format('#.00')));
            list.find('.sum').show(); list.find('#lnkCheckOut').show();
        }
        else {
            $('#CartBarProductNum').text(0);
            list.find('.sum').hide();
            list.find('#lnkCheckOut').hide();
            list.find('ul').remove();
            if (list.find('.empty').length<=0)
                list.children().eq(0).after('<span class="empty">No items in cart!</span>');
        }

        if (config.callback)
            config.callback();
    }
    //About Cookie
    function hasInCookie(catNo) {
        var rtn = false;
        var cArr = $.cookie('ptg_mini_cart_list');
        if (cArr != 'null' && cArr != null) {
            var itms = eval('[' + cArr + ']');
            $.each(itms, function(i, t) {
                if (t.catNo == catNo) {
                    rtn = true;
                    return;
                }
            });
        }
        return rtn;
    }
    function insertCookie(proObj) {
        var cArr = $.cookie('ptg_mini_cart_list');
        if (cArr == null)
            cArr = new Array();
        else
            cArr = cArr.split(',');

        cArr[cArr.length] = $.toJSON(proObj);
        $.cookie('ptg_mini_cart_list', cArr.join(','), SYSTEM_CONFIG.CookieOpt);
    }
    function updateCookie(catNo, addNum) {
        var cArr = $.cookie('ptg_mini_cart_list');
        var jsStr = null;
        if (cArr != null) {
            var itms = eval('[' + cArr + ']');
            $.each(itms, function(i, t) {
                if (t.catNo == catNo) {
                    t.num = parseInt(t.num) + addNum;
                    if (t.num <= 0) {
                        t.num = 0;
                        jsStr = 'itms.splice(' + i + ', 1)';
                    }
                    return true;
                }

            });
            //Delete it
            eval(jsStr);
            //alert($.toJSON(itms).replace('[', "").replace(']', ""));
            $.cookie('ptg_mini_cart_list', $.toJSON(itms).replace('[', "").replace(']', ""), SYSTEM_CONFIG.CookieOpt);
        }
    }
    function deleteCookie(catNo) {
        var cArr = $.cookie('ptg_mini_cart_list');
        if (cArr != null) {
            var itms = eval('[' + cArr + ']');
            $.each(itms, function(i, t) {
                if (t.catNo == catNo) {
                    itms.splice(i, 1);
                    return true;
                }
            });
            //alert($.toJSON(itms).replace('[', "").replace(']', ""));
            $.cookie('ptg_mini_cart_list', $.toJSON(itms).replace('[', "").replace(']', ""), SYSTEM_CONFIG.CookieOpt);
        }
    }

    //Event
    function bindDelEvent(obj, catNo) {
        obj.find('A[name="' + catNo + '"]').click(function() {
            //update cookie
            updateCookie($(this).attr('name'), -1);
            //update list
            UpdateCart($(this).attr('name'), -1);
            //total
            setTotal();
        });
    }

};


