if (typeof(eCartManagerObject) == 'undefined') 
{
    eCartManagerObject = function(ajaxEventVar, ajaxEventUID)
    {
    	this.ajaxEventVar = ajaxEventVar;
    	this.ajaxEventUID = ajaxEventUID;
	    this.loader = new eAJAXLoaderObject();
	    this.alert  = new alertObject();
    }
}
eCartManagerObject.prototype.addItem = function(productId, quantity, attributes)
{    
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'addToCart', 
	  		         productId: productId,
	  		         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.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)
{    
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'updateCart'
	}; 

	postData[this.ajaxEventVar] = this.ajaxEventUID;

	for (i in item_quantities)
	{
	   postData[i] = item_quantities[i];   
	}
	
	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();
        if(typeof(productLoader) != 'undefined') productLoader.hide();
        this.alert.show('This item has been added to your shopping cart<br/><br/><a href="javascript: void(0);" onclick="if(typeof(productLoader) != \'undefined\') productLoader.show(); addbutton.cartManager.alert.hide();">Continue Shopping</a>&nbsp;&nbsp;&nbsp;&nbsp;<a href="' + rootUrl + 'checkout/cart/">Proceed to Checkout</a>');
	}
}
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();
	}
}