if (typeof(eCartManagerObject) == 'undefined') 
{
    eCartManagerObject = function(ajaxEventVar, ajaxEventUID)
    {
    	this.ajaxEventVar = ajaxEventVar;
    	this.ajaxEventUID = ajaxEventUID;
	    this.loader = new eAJAXLoaderObject();
	    this.infoPanelObject = [];
    }
}
eCartManagerObject.prototype.addItem = function(productVariationId, quantity, attributes)
{    
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'addToCart', 
					 productVariationId: productVariationId,
	  		         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, calback)
{    
	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);
  		if (typeof calback == 'function') {calback();}
	},
	'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.push(infoPanelObject);
}
eCartManagerObject.prototype.setCartPanel = function(cartPanelObject)
{
    this.cartPanelObject = cartPanelObject;
}
eCartManagerObject.prototype.updateInfoPanel = function()
{
    if (this.infoPanelObject.length) {
    	var infoPanelObject = this.infoPanelObject.shift();
    	if (typeof(this.infoPanelObject) == 'object') {
    		infoPanelObject.loadInfo(this.updateInfoPanel());	
    	}
    }
}
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('<a href="javascript:$(\'#ajax_loader\').remove();void(0);" class="btn-close">close</a><p>The product has been added to your cart.</p><div class="btn-wrap clearfix"><a class="button" href="javascript:$(\'#ajax_loader\').remove();void(0);"><span>Continue shopping</span></a><a class="button" href="/store/cart/"><span>Checkout Now</span></a></div>',0);
	}
}
eCartManagerObject.prototype.onGetCartResponse = function(responseData)
{
	this.loader.hide();
	
    if ((typeof(showAJAXDebugInfo) != 'undefined') && responseData.PHPAJAXDebug != null) 
    {
        showAJAXDebugInfo(responseData.PHPAJAXDebug.Info, responseData.PHPAJAXDebug.Owner);
    }
	
    if (parseInt(responseData.Error.Code))
    {
    	alert(responseData.Error.Message);
    }
    else if (responseData.Response.Code != 0)
	{
		alert(responseData.Response.Message);
	}
	else
	{
        this.updateCartPanel(responseData.Response.Message);
        this.updateInfoPanel();
	}
}
eCartManagerObject.prototype.calculateShipping = function(zipCode, shippingOption)
{
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'calculateShipping', 
					zipCode: zipCode,
					shippingOption: shippingOption
	}; 
	
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.post(selfUrl, postData,	
	function(responseData) {
  		currentObject.onGetCartResponse(responseData); 
	},
	'json');
}



