var ShoppingCart = Class.create();
ShoppingCart.prototype = {
    initialize: function(){
        this.cartIcons = [];
        this.ajax = {};
    },
    setShoppingCart:function(cart, icons, static_mode) {
        try {
            this.cart = $(cart);
            try {
                //OuterCart is the cart area for 'Droppables'
                this.outerCart = $("outer_" + cart);
            } catch(e) {
                this.outerCart = $(cart);
            }
            if (icons.length > 0) {
                this.setCartItems(icons, static_mode);
            }
            if (this.outerCart != null) {
                 Droppables.add(this.outerCart, {
                    onDrop: function(icon_obj, dropon, event) {
                        this.addIconToShoppingCart(icon_obj, dropon, event);
                    }.bindAsEventListener(this)

                });
            }
        } catch(e) {
        }
       loader.mergeIcons(true, "icon", false);
       this.setRemoveAllListener();
    },

    setCartItems : function(items, static_mode) {
        this.cartIcons = items;
        this.cart.update('');
        for (var i = 0; i < this.cartIcons.length; i++) {
            var icon = this.cartIcons[i];
            loader.drawIcon(icon, this.cart, "sh_icon");
            loader.drawRemoveIconWidget(icon, "sh_icon", static_mode);
            loader.removeBuyIconWidget(icon, "sh_icon");
        }
    },
    setRemoveAllListener : function() {
        var removeAll = $("clearCart_button");
        if (removeAll == null) {
            return;
        }
        Event.observe(removeAll, 'click', function() {
            this.removeAllIconsFromShoppingCart("sh_icon", false);
        }.bindAsEventListener(this), this);
    },

    onCompleteRemoveIconFromShoppingCart: function(prefix, icon) {
        Effect.Fade($(prefix + icon.id));
        loader.mergeIcons(true, "icon", false);
    },

    removeIconFromShoppingCart : function(icon, prefix, static_mode) {
        if (static_mode) {
            document.location = "/cart_remove.jhtml?item=" + icon.id;
        } else {
            for (var i=0; i<this.cartIcons.length; i++) {
                if (this.cartIcons[i] != null) {
                    var packName;
                    if (searchedIconsArray.get(icon.id) != null){
                        packName = searchedIconsArray.get(icon.id);
                    } else {
                        packName = "0";
                    }
                    loader = this.getLoader(packName);
                    if (this.cartIcons[i].id == icon.id) {
                        this.cartIcons[i] = null;

                        loader.mergeIcons(true, "icon", true);
                        loader.ajax = new Ajax.Request("/cart_remove.jhtml", {
                            method: 'post',
                            parameters : "ajax=true&item=" + icon.id,
                            onComplete: function() {
                                cart.onCompleteRemoveIconFromShoppingCart(prefix, icon);
                                loader.messagesManager.hide();
                           }.bind(loader),
                           onCreate: function() {
                                loader.messagesManager.setText($(this.messages['loading']).innerHTML);
                                loader.messagesManager.show();
                           }.bind(loader)
                        });
                        break;
                    }
                }
            }
        }
    },
    getLoader:function(packName){
        var loader = iconLoader[packName];
        if (loader == null){
            loader = iconLoader["0"];
        }
        if (loader == null){
            for (var i=0; i<iconLoader.length; i++){
                if (iconLoader[i] != null){
                    loader =  iconLoader[i];
                    break;
                }
            }
        }
        return loader;
    },
    removeAllIconsFromShoppingCart : function(prefix, static_mode) {
        if (static_mode) {
            document.location = "/cart_remove_all.jhtml";
            return;
        }
        loader.mergeIcons(true, "icon", false);

        this.ajax = new Ajax.Request("/cart_remove_all.jhtml", {
            method: 'post',
            parameters : "ajax=true",
            onComplete: function() {
                this.onCompleteRemoveAllIconsFromShoppingCart(prefix);
                loader.messagesManager.hide();
            }.bind(this),
            onCreate: function() {
                  try {
                      loader.messagesManager.setText($(loader.messages['loading']).innerHTML);
                      loader.messagesManager.show();
                  } catch(e) {
                      //alert(e);
                  }
            }.bind(this)
        });
    },

    onCompleteRemoveAllIconsFromShoppingCart: function(prefix) {
        loader.mergeIcons(true, "icon", false);
        for (var i = 0; i< this.cartIcons.length; i++){
            var cartIcon = this.cartIcons[i];
            var packName = cartIcon.packName;
            loader = cart.getLoader(packName);
            loader.drawSearchedIcons();
        }
        try {
            for (i=0; i< this.cartIcons.length; i++) {
                if (this.cartIcons[i] != null && this.cartIcons[i].id != null) {
                    Effect.Fade($(prefix + this.cartIcons[i].id));
                    this.cartIcons[i] = null;
                }
            }
        } catch(e) {

        }
        loader.mergeIcons(true, "icon", false);
    },
    
    setCartEmpty:function(){
        try{
            var isCartEmpty = (cart.cartIcons.length == 0);
            $("empty_cart_note").setStyle({display: (isCartEmpty ? "" : "none"), overflow: (isCartEmpty ? "" : "hidden")});
            $("buyCart_link").href = isCartEmpty ? "#" : "/user_profile/buy_cart.jhtml";
        } catch(e){
        }
    },

    addIconToShoppingCart : function (icon_obj, dropon, event) {
        try {
            var id = $(icon_obj).id.replace(/([a-zA-Z_]+)/, '');
            var icon = {};
            var packName = null;
            if (searchedIconsArray != null){
                packName = searchedIconsArray.get(id);
            }
            if (packName != null){
                loader = cart.getLoader(packName);
            } else {
                loader = iconLoader["0"];
            }
            for (var i1 = 0; i1 < loader.searchedIcons.length; i1++) {
                if (loader.searchedIcons[i1].id == id) {
                    icon = loader.searchedIcons[i1];
                    break;
                }
            }
            var exist = false;
            for (var i2 = 0; i2 < this.cartIcons.length; i2++) {
                if (this.cartIcons[i2] != null) {
                    if (this.cartIcons[i2].id == icon.id) {
                        exist = true;
                        break;
                    }
                }
            }
            if (!exist) {
                this.ajax = new Ajax.Request("/cart_add.jhtml", {
                    parameters : "item=" + icon.id,
                    onComplete: function(transport) {
                        try {
                            var data = transport.responseText.evalJSON();
                            var errorMessage = data['error'];
                            if (undefined != errorMessage && void 0 != errorMessage) {
                                loader.messagesManager.setText($(this.messages[errorMessage]).innerHTML);
                                loader.messagesManager.show();
                                loader.messagesManager.hide(3);
                            } else {
                                
                                this.onCompleteAddIconToShoppingCart(data['icons'].evalJSON());
                                loader.messagesManager.hide();
                            }
                        } catch (e1) {
                        }
                    }.bind(this),
                    onCreate: function() {
                        loader.messagesManager.setText($(loader.messages['loading']).innerHTML);
                        loader.messagesManager.show();
                    }.bind(this)

                });
            } else {
                loader.messagesManager.setText($(loader.messages['existIcon']).innerHTML);
                loader.messagesManager.show();
                loader.messagesManager.hide(3);
            }
        } catch(e) {
        }
    },

    onCompleteAddIconToShoppingCart: function(icons) {
        try {
            this.setCartItems(icons, false);
            loader.mergeIcons(true, "icon", false);
        } catch(e) {

        }
    }
}