dojo.provide("site.cart");
dojo.require("generic.jsonrpc");
dojo.require("dojo.cookie");
dojo.declare("site.cart", null, {
    confirmDuration: 4000,

    constructor: function() {
        // no need to over complicate things.
    },

    callRemote: function(method, args, cb, eb) {
        var self = this;
        var request = new generic.jsonrpc();
        var d = request.callRemote(method, args);

        if (!eb) {
            d.addBoth(function(resp) {
                cb(resp);
            });
        } else {
            d.addCallback(function(resp) {
                cb(resp);
            });

            d.addErrback(function(resp) {
                eb(resp);
            });
        }
    },
    
    add: function(args) {
        args.action = "add";        
        this.alter(args);  
    },
    
    remove: function(args) {
        args.action = "remove"; 
        this.alter(args);
    },
    
    qty: function(args) {
        args.action = "qty";
        this.alter(args);  
    },
    
    alter: function(args) {
        if (!args.action || !args.cart) { return; }

        var actions =[];
        var self = this;        
        var itemType = (args.type ? args.type : "sku");
        
        if (itemType === "giftcard") {
            // non-default skus (ex: giftcard passes "giftcard_id" field instead of sku path)
            var altPathField;
            if (itemType === "giftcard") {
                altPathField = "giftcard_id";
            }
            dojo.forEach(args.skus, function(item, idx) {
                actions[idx] = {
                    action: args.action,
                    cart: args.cart,
                    type: itemType
                };
                actions[idx][altPathField] = item;
            });
        }
        else {
        // default product skus
            dojo.forEach(args.skus, function(item, idx) {
                actions[idx] = {
                    action: args.action,
                    cart: args.cart,
                    type: itemType,
                    path: item
                };
                if (args.action === "qty" && args.qtys) {
                    actions[idx].qty = args.qtys[item];
                }
            });
        }

        var requestArgs = [{
            "actions": actions
        }];

        var callback = function(response) {
            args.callback(response); 
            var controlWindow = window.parent || window;            
            controlWindow.dojo.publish("/page/cart/alterCart", [{ action: args.action, cartType: args.cart, resp:response }]);
        };

        var errback = function(err) {
            args.errback(err);
            var controlWindow = window.parent || window;
            controlWindow.dojo.publish("/page/cart/alterCart", [{ action: args.action, cartType: args.cart, resp:err }]);
        };

        this.callRemote("Cart.alterCart", requestArgs, callback, errback);
    },

    alterCartActOnList: function(args) {
        // summary
        //      Add multiple skus to bag

        if (!args.action || !args.cart) { return; }

        var actions =[];
        var self = this;        
        var itemType = (args.type ? args.type : "sku");
        
        dojo.forEach(args.skus, function(sku, idx) {
            actions[idx] = {
                path: sku
            };
        });

        var requestArgs = [{
            "defaults": {
                "action": args.action,
                "cart": args.cart,
                "type": itemType
            },
            "actions": actions
        }];

        var callback = function(response) {
            args.callback(response); 
            var controlWindow = window.parent || window;
            controlWindow.dojo.publish("/page/cart/alterCart", [{resp:response}]);
        };

        var errback = function(err) {
            args.errback(err);
            var controlWindow = window.parent || window;
            controlWindow.dojo.publish("/page/cart/alterCart", [{resp:err}]);
        };

        this.callRemote("Cart.alterCartActOnList", requestArgs, callback, errback);
    },
    
    getContents: function(/* Function */callback) {
        var self = this;
        var requestArgs = [{
            "cart": "checkout",
            "params": {
                "item": ["qty","total"],
                "sku": [
                    "path", "sku_id", "price", "label", "hexValue", "product.shaded", "product.product_id", "product.name",
                    "product.subName", "product.tagline", "product.uri_spp", "product.image_url_medium", "product.image_url_small",
                    "category.category_id", "product.www_pcode", "product.short_desc"
                ]
            }
        }];

        var getContentsCallback = function(response) {
            callback(response);
        };

        var errback = getContentsCallback;

        this.callRemote("Cart.contents", requestArgs, getContentsCallback, errback);
    },
    
    getItemCount: function(type) {
        var t = (type === "favorites" ? type : "order"); // defaults to "order" type for cart count
        var itemCount = 0;
        var splitby = "cart." + t + ".tqty";
        var str = "";
		var num = "";
        var cookie = dojo.cookie("page_data");
        
        try {
            str = cookie.split(splitby)[1];
            num = str.split("&")[1];
            
            if (parseInt(num)) {
                itemCount = num;
            }
        }
        catch(err) {}
        //console.log("cookie = "+cookie+" itemCount = "+itemCount+" for type "+t);
        return itemCount;
    }

});
