(function($) {
    $.extend({
        add2cart: function(source_id, target_id, sku, callback) {
            var source = $('#' + source_id);
            var target = $('#' + target_id);

            var shadow = $('#' + source_id + '_shadow');

            if (!shadow.attr('id')) {
                $('body').prepend('<div id="' + source.attr('id') + '_shadow" style="display: none; background-color: #ddd; border: solid 1px darkgray; position: static; top: 0px; z-index: 100000;">&nbsp;</div>');
                var shadow = $('#' + source.attr('id') + '_shadow');
            }

            if (!shadow) {
                alert('Cannot create the shadow div');
            }

            updateShoppingCar(sku,1);  //update shopping car
            
            shadow.width(source.css('width')).height(source.css('height')).css('top', source.offset().top).css('left', source.offset().left).css('opacity', 0.5).show();
            shadow.css('position', 'absolute');

            shadow.animate({ width: target.innerWidth(), height: target.innerHeight(), top: target.offset().top, left: target.offset().left }, { duration: 550 })
        .animate({ opacity: 0 }, { duration: 300, complete: callback });
        }
    });
})(jQuery);

$(document).ready(function() {
    $('#shoppingcart_num').text(getShoppingCarCount());
}); 

var shoppingCarOption ={expires: 15, path:'/', domain:'', secure: false};
function updateShoppingCar(sku, num) {
    if (sku != '' && sku != null && num > 0) {
        var shoppingCar = $.cookie('ws_shoppingcar');
        var shoppingCarNum = 0;
        if (shoppingCar != null && shoppingCar != '' && typeof(shoppingCar)!= 'undefined') {
            if (shoppingCar.indexOf('$') > -1) {
                var arr_carA = shoppingCar.split('$');
                var newShoppingCar = '';
                var isIndex = false;
                $.each(arr_carA, function(i, n) {
                    var arr_carB = n.split('|');
                    var c_b_sku = arr_carB[0];
                    var c_b_num = arr_carB[1];
                    if (sku == c_b_sku) {
                        c_b_num = Number(c_b_num) + Number(num);                        
                        isIndex = true;
                    }
                    newShoppingCar = newShoppingCar + c_b_sku + "|" + c_b_num + "$";                 
                    shoppingCarNum = Number(shoppingCarNum) + Number(c_b_num);
                });

                if (!isIndex) {
                    newShoppingCar = shoppingCar + "$" + sku + "|" + num;
                    shoppingCarNum = Number(shoppingCarNum) + Number(num)
                } else {
                    newShoppingCar = newShoppingCar.substring(0, newShoppingCar.length - 1);
                }
                $.cookie('ws_shoppingcar', newShoppingCar, shoppingCarOption);
            } else {
                if (shoppingCar.indexOf('|') > -1) {
                    var arr_car = shoppingCar.split('|');
                    var c_sku = arr_car[0];
                    var c_num = arr_car[1];
                    if (sku == c_sku) {
                        c_num = Number(c_num) + Number(num);
                        $.cookie('ws_shoppingcar', sku + '|' + c_num, shoppingCarOption);
                        shoppingCarNum = c_num;
                    } else {
                        $.cookie('ws_shoppingcar', c_sku + '|' + c_num + "$" + sku + "|" + num, shoppingCarOption);
                        shoppingCarNum = Number(c_num) + Number(num);
                    }
                }
            }
        } else {
            $.cookie('ws_shoppingcar', sku + '|' + num, shoppingCarOption);
            shoppingCarNum = num;
        }
        $('#shoppingcart_num').text(shoppingCarNum);
    }
}

function getShoppingCarCount() {
    var shoppingCar = $.cookie('ws_shoppingcar');
    var shoppingCarNum = 0;
    if (shoppingCar != null) {
        if (shoppingCar.indexOf('$') > -1) {
            var arr_carA = shoppingCar.split('$');
            $.each(arr_carA, function(i, n) {
                var arr_carB = n.split('|');
                shoppingCarNum = Number(shoppingCarNum) + Number(arr_carB[1]);
            });
        } else {
            var arr_car = shoppingCar.split('|');
            var c_num = arr_car[1];
            shoppingCarNum = c_num;
        }
    }
    return shoppingCarNum;
}

jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        var path = options.path ? '; path=' + options.path : '';
        var domain = options.domain ? '; domain=' + options.domain : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};