
var AddToCart = {
    Version: '1.0.0',
    REQUIRED_PROTOTYPE: '1.6.0.3',
    PageElemID: "WholePage",
    AddedToCartElemID: "AddedToCart",
    AddedToCartIFrameElemID: "AddedToCartIFrame",
    AddedToCartBGElemID: "AddedToCartBG",
    CartQuantityElemID: "CartQuantity",
    AddedToCartResultsElemID: "AddedToCartResults",
    AddedToCartCloseElemID: "AddedToCartClose",
    CloseButtonPosition: 3, // 1=topleft, 2=topcenter, 3=topright
    Counter: 1,
    load: function() {
        // verify the prototype is load and right version
        function convertVersionString(versionString) {
            var v = versionString.replace(/_.*|\./g, '');
            v = parseInt(v + '0'.times(4 - v.length));
            return versionString.indexOf('_') > -1 ? v - 1 : v;
        }
        if ((typeof Prototype == 'undefined') || (typeof Element == 'undefined') || (typeof Element.Methods == 'undefined') || (convertVersionString(Prototype.Version) < convertVersionString(AddToCart.REQUIRED_PROTOTYPE))) {
            throw ("CommerceCM requires the Prototype JavaScript framework >= " + AddToCart.REQUIRED_PROTOTYPE);
        }
        /* Script not in head tag, in control right now
        // get parameters from javascript src query string
        var js = /scripts/cart\.js(\?.*)?$/;
        $$('head script[src]').findAll(function(s){
        return s.src.match(js);
        }).each(function(s){
        var path = s.src.replace(js, ''),
        includes = s.src.match(/\?.*params=([a-z,]*)/);
        var params = (includes ? includes[1] : 'CartQuantity').split(',');
        if(params.length >= 1){
        AddToCart.AddedToCartElemID = params[0];
        }
        if(params.length >= 2){
        AddToCart.AddedToCartBGElemID = params[1];
        }
        if(params.length >= 3){
        AddToCart.CartQuantityElemID = params[2];
        }
        });
        */
    },
    add: function(_productid, _quantityid, _attribute1id, _attribute2id, _attribute3id, _attribute4id, _return, _format, _suffix) {
        var params = {};
        // set session id
        var now = new Date();
        params.t = now.getTime();
        // set product id
        params.ProductID = (_productid - 0);
        // set quantity
        var qtyval = ($F(_quantityid) - 0);
        if (!isNaN(qtyval) && qtyval > 0) {
            params.Quantity = qtyval;
        } else {
            params.Quantity = 1;
        }
        // set attributes
        if (_attribute1id != '' && $(_attribute1id)) {
            var attr1val = $F(_attribute1id);
            params.Attribute1 = attr1val.escapeHTML();
        }
        if (_attribute2id != '' && $(_attribute2id)) {
            var attr2val = $F(_attribute2id);
            params.Attribute2 = attr2val.escapeHTML();
        }
        if (_attribute3id != '' && $(_attribute3id)) {
            var attr3val = $F(_attribute3id);
            params.Attribute3 = attr3val.escapeHTML();
        }
        if (_attribute4id != '' && $(_attribute4id)) {
            var attr4val = $F(_attribute4id);
            params.Attribute4 = attr4val.escapeHTML();
        }
        // set return - 1 = item count, 2 = item quantity count
        _return = (_return - 0);
        if (!isNaN(_return) && _return > 0) {
            params.Return = _return;
        } else {
            params.Return = 1;
        }
        // set format - 1 = string, 2 = json
        _format = (_format - 0);
        if (!isNaN(_format) && _format > 0) {
            params.Format = _return;
        } else {
            params.Format = 2; // json is the default
        }
        // use suffix - true | false
        // default to true
        if (typeof _suffix === 'undefined') {
            _suffix = true;
        }
        if (!_suffix) {
            params.Suffix = false;
        } else {
            params.Suffix = true;
        }
        // send add to cart request		
        new Ajax.Request('/AddToCart.aspx', {
            method: 'get',
            parameters: params,
            onSuccess: function(_transport) {
                var response = _transport.responseJSON || { Error: "NOT OK" }
                if (response.Error != "") {
                    alert(response.Error);
                    //alert("Error!\n\nCould not add the item to your basket. (Error Code: 1)");
                } else {
                    try {
                        AddToCart.formatAndDisplayResponse(response);
                    } catch (x) {
                        alert(x);
                        //alert("Error!\n\nCould not add the item to your basket.\n\n(Error Code: 2)");
                    }
                }
            },
            onFailure: function() {
                alert("Error!\n\nAn error occurred when attempting to add to the basket.\n\n(Error Code: 3)");
            }
        });
    },
    close: function() {
        $(this.AddedToCartElemID).setStyle({ top: -2000 + "px", left: -2000 + "px" });
        $(this.AddedToCartCloseElemID).setStyle({ top: -2000 + "px", left: -2000 + "px" });
        $(this.AddedToCartIFrameElemID).setStyle({ top: -2000 + "px", left: -2000 + "px" });
        $(this.AddedToCartBGElemID).setStyle({ top: -3000 + "px", left: -3000 + "px", height: 100 + "%" });
        return 0;
    },
    //_payload = {ProductImage: '<img>', ProductName: '<ProductName>', SKU: '<SKU>', Quantity: '#', ListPrice: '$#.##', OnSale: (true|false), SalePrice: '$#.##', TotalItems: '# item(s)|#', BasketSubTotal: '$#.##'}
    formatAndDisplayResponse: function(_payload) {

        // update the basket item quantity div, if exists
        var basketQuantity = $(AddToCart.CartQuantityElemID);
        if (basketQuantity) {
            basketQuantity.update(_payload.TotalItems);
        }

        if ($(this.AddedToCartResultsElemID)) {

            // replace variables
            var AddedToCart_Image = $("AddedToCart_Image");
            if (AddedToCart_Image) {
                AddedToCart_Image.src = _payload.ProductImage
            }
            var AddedToCart_ProductName = $("AddedToCart_ProductName");
            if (AddedToCart_ProductName) {
                AddedToCart_ProductName.update(_payload.ProductName);
            }
            var AddedToCart_SKU = $("AddedToCart_SKU");
            if (AddedToCart_SKU) {
                AddedToCart_SKU.update(_payload.SKU);
            }
            var AddedToCart_Quantity = $("AddedToCart_Quantity");
            if (AddedToCart_Quantity) {
                AddedToCart_Quantity.update(_payload.Quantity);
            }
            var AddedToCart_Price = $("AddedToCart_Price");
            if (AddedToCart_Price) {
                var price = "<span class='ListPrice'>" + _payload.ListPrice + "</span>"
                if (_payload.OnSale) {
                    AddedToCart_Price.addClassName("ProductOnSale");
                    price += "<span class='SalePrice'>" + _payload.SalePrice + "</span>";
                }
                AddedToCart_Price.update(price);
            }
            var AddedToCart_TotalItems = $("AddedToCart_TotalItems");
            if (AddedToCart_TotalItems) {
                AddedToCart_TotalItems.update(_payload.TotalItems);
            }
            var AddedToCart_BasketSubTotal = $("AddedToCart_BasketSubTotal");
            if (AddedToCart_BasketSubTotal) {
                AddedToCart_BasketSubTotal.update(_payload.BasketSubTotal);
            }
            // show added results
            this.centerAddedPopup();

        } else {
            alert("The item has been added to your cart.");
        }

    },
    centerAddedPopup: function() {
        // grayout background
        $(this.AddedToCartBGElemID).setStyle({ top: 0 + "px", left: 0 + "px" });
        // calculate where center is
        var popupCenterY = Math.round(this.getScrollAmount() + (this.getWindowHeight() / 2) - (this.getAddedPopupHeight() / 2));
        var popupCenterX = Math.round((this.getWindowWidth() / 2) - (this.getAddedPopupWidth() / 2));
        // position the added to cart message
        $(this.AddedToCartIFrameElemID).setStyle({ top: popupCenterY + "px", left: popupCenterX + "px" });
        $(this.AddedToCartElemID).setStyle({ top: popupCenterY + "px", left: popupCenterX + "px" });
        if (this.CloseButtonPosition == 3) {
            var closeX = popupCenterX + this.getAddedPopupWidth() - $(this.AddedToCartCloseElemID).getWidth();
            $(this.AddedToCartCloseElemID).setStyle({ top: (popupCenterY + $(this.AddedToCartCloseElemID).getHeight() / 4) + "px", left: closeX + "px" });
        }
        if ($(this.PageElemID)) {
            var pageHeight = $(this.PageElemID).getHeight();
            if (pageHeight > this.getWindowHeight()) {
                $(this.AddedToCartBGElemID).setStyle({ height: pageHeight + "px" });
            }
        }
        return true;
    },
    getWindowWidth: function(win) {
        var width;
        win = win ? win : window;
        width = win.innerWidth || (win.document.documentElement.clientWidth || win.document.body.clientWidth);
        return width;
    },
    getWindowHeight: function(win) {
        var height;
        win = win ? win : window;
        height = win.innerHeight || (win.document.documentElement.clientHeight || win.document.body.clientHeight);
        return height;
    },
    getAddedPopupWidth: function() {
        return $(this.AddedToCartElemID).getWidth();
    },
    getAddedPopupHeight: function() {
        return $(this.AddedToCartElemID).getHeight();
    },
    getScrollAmount: function() {
        if (typeof window.pageYOffset != "undefined") {
            var scroll = window.pageYOffset;
        } else if (typeof document.documentElement.scrollTop != "undefined") {
            var scroll = document.documentElement.scrollTop;
        } else {
            var scroll = document.body.scrollTop;
        }
        return scroll;
    }
};

function loadAddToCart(){
	AddToCart.load();
}

addPageLoad_Handler(loadAddToCart);

// add ajax creation/completion responders
/*Ajax.Responders.register({
	onCreate: function(){
		LABEL.displayAjaxLoader();
	}, 
	onComplete: function(){
		//alert('a request completed');
	}
});*/

