if (typeof(eCartManagerObject) == 'undefined')
{
    eCartManagerObject = function(ajaxEventVar, ajaxEventUID)
    {
        this.ajaxEventVar = ajaxEventVar;
        this.ajaxEventUID = ajaxEventUID;
        this.loader = new eAJAXLoaderObject();
    }
}
eCartManagerObject.prototype.addItem = function(variationId, quantity, attributes)
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'addToCart',
                       variationId: variationId,
                       quantity: quantity
    };
    postData[this.ajaxEventVar] = this.ajaxEventUID;

    for (i in attributes)
    {
       postData['attributes[' + i + ']'] = attributes[i];
    }

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.deleteRecently = function(id)
{
    var postData = { __callHandler: 'deleteRecentlyViewed',
                       id: id
    };
    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
    },
    'json');
}
eCartManagerObject.prototype.removeItem = function(id)
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'removeFromCart',
                       id: id
    };
    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetCartResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.removeCertificateItem = function(id)
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'removeCertificate',
                       id: id
    };
    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetCartResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.updateItems = function(item_quantities, certificate_quantities, item_number)
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'updateCart'
    };

    postData[this.ajaxEventVar] = this.ajaxEventUID;

    for (i in item_quantities)
    {
        if ( item_number==undefined )
        {
            postData[i] = item_quantities[i];
        }
            else if ( i=="item_quantity["+item_number+"]" )
        {
            postData[i] = item_quantities[i];
             break;
        }
    }

    for (i in certificate_quantities)
    {
       postData[i] = certificate_quantities[i];
    }

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetCartResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.clear = function()
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'clearCart' };

    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetCartResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.applyCoupon = function(code)
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'applyCoupon',
                     code: code };

    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetCartResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.cancelCoupon = function()
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'cancelCoupon'};

    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetCartResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.applyCertificate = function(code)
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'applyCertificate',
                     code: code };

    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetCartResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.cancelCertificate = function(id)
{
    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'cancelCertificate',
                     id: id };

    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetCartResponse(responseData);
    },
    'json');
}
eCartManagerObject.prototype.setInfoPanel = function(infoPanelObject)
{
    this.infoPanelObject = infoPanelObject;
}
eCartManagerObject.prototype.setCartPanel = function(cartPanelObject)
{
    this.cartPanelObject = cartPanelObject;
}
eCartManagerObject.prototype.updateInfoPanel = function()
{
    if (typeof(this.infoPanelObject) == 'object')
    {
        this.infoPanelObject.loadInfo();
    }
}
eCartManagerObject.prototype.updateCartPanel = function(content)
{
    if (typeof(this.cartPanelObject) == 'object')
    {
        this.cartPanelObject.loadInfo(content);
        this.cartPanelObject.init();
    }
}
eCartManagerObject.prototype.onGetResponse = function(responseData)
{
    this.loader.hide();

    if ((typeof(showAJAXDebugInfo) != 'undefined') && responseData.PHPAJAXDebug != null)
    {
        showAJAXDebugInfo(responseData.PHPAJAXDebug.Info, responseData.PHPAJAXDebug.Owner);
    }

    if (responseData.Response.Code != 0)
    {
        alert(responseData.Response.Message);
    }
    else
    {
        this.updateInfoPanel();
        this.loader.show('<p>The product has been added to your cart.</p><a href="javascript:$(\'#ajax_loader\').remove();void(0);">Continue shopping</a>&nbsp;<a href="/store/cart/">Go to cart</a>',7000);
    }
}
eCartManagerObject.prototype.onGetCartResponse = function(responseData)
{
    this.loader.hide();

    if ((typeof(showAJAXDebugInfo) != 'undefined') && responseData.PHPAJAXDebug != null)
    {
        showAJAXDebugInfo(responseData.PHPAJAXDebug.Info, responseData.PHPAJAXDebug.Owner);
    }

    if (responseData.Response.Code != 0)
    {
        alert(responseData.Response.Message);
    }
    else
    {
        this.updateCartPanel(responseData.Response.Message);
        this.updateInfoPanel();
    }
}
