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.addItemVariation = function(productId, quantity, variation)
{    
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'addToCart', 
	  		         productId: productId,
	  		         quantity: quantity,
	  		         variation: variation
	}; 
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.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);
        currentObject.renderCartPanel([]);
	},
	'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();
        //console.log(responseData)
        this.renderCartPanel(responseData.Response.items);
        this.alert.show('<a class="close_link_01" href="#" onclick="$(\'#' + this.alert.alertId +'\').remove(); return false;">X</a><br /><p>This item has been added to your shopping cart<p><br /><div class="clearfix"><a class="btn_continue01" href="#" onclick="$(\'#' + this.alert.alertId +'\').remove(); return false;" style="margin-right:10px;">Continue Shopping</a>&nbsp;&nbsp;&nbsp;&nbsp;<a class="btn_proceed01" href="' + rootUrl + 'cart/">Proceed to Checkout</a></div>');
        //document.location.href = rootUrl + 'cart/';
	}
}

eCartManagerObject.prototype.renderCartPanel = function(data)
{
    $('.cart_side tr:not(:first)').remove();

    var itemCount = 0;
    for (i in data)
    {
        if (data[i].error)
            alert(data[i].name + ': ' + data[i].error)
        
        var item$ = $('<tr/>')
                
        item$.html('<td><table class="img"><tr><td><img src="'+ data[i].img +'" alt="'+ data[i].name +'" width="41" height="41"/></td></tr></table></td>')
        item$.append($('<td/>').append(data[i].name))
        item$.append($('<td/>').append('$' + data[i].price))
        item$.append($('<td/>').append(data[i].quantity))

        $('.cart_side table:first').append(item$);

        itemCount += parseInt(data[i].quantity);
    }

    if ($(".cart_side").css('display') == 'none')
        $("#clickElem").click();

    $('span.title_cart strong').text('('+itemCount+')');
    if (itemCount > 1)
        $('span.title_cart span').text('s');
}

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.renderCartPanel(responseData.Response.items)
        this.updateCartPanel(responseData.Response.Message);
        this.updateInfoPanel();
	}
}

// --- Additional functionality from crazy marketing team --- //

/**
 * Save item for later
 */
eCartManagerObject.prototype.saveItem = function(id)
{
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'saveItem', 
	  		         id: id
	}; 
	
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.post(selfUrl, postData,	
	function(responseData) { 
  		currentObject.onGetCartResponse(responseData); 
	},
	'json');
}

/**
 * Save certificzte for later
 */
eCartManagerObject.prototype.saveCertificate = function(id)
{
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'saveCertificate', 
	  		         id: id
	}; 
	
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.post(selfUrl, postData,	
	function(responseData) { 
  		currentObject.onGetCartResponse(responseData); 
	},
	'json');
}

/**
 * Remove saved item
 */
eCartManagerObject.prototype.removeSaved = function(id)
{
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'removeSaved', 
	  		         id: id
	}; 
	
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.post(selfUrl, postData,	
	function(responseData) { 
  		currentObject.onGetCartResponse(responseData); 
	},
	'json');
}

/**
 * Move saved item
 */
eCartManagerObject.prototype.moveItem = function(id)
{
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'moveItem', 
	  		         id: id
	}; 
	
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.post(selfUrl, postData,	
	function(responseData) { 
  		currentObject.onGetCartResponse(responseData); 
	},
	'json');
}

/**
 * Move saved item
 */
eCartManagerObject.prototype.moveCertificate = function(id)
{
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'moveCertificate', 
	  		         id: id
	}; 
	
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.post(selfUrl, postData,	
	function(responseData) { 
  		currentObject.onGetCartResponse(responseData); 
	},
	'json');
}

/**
 * Gooogle Checkout
 */
eCartManagerObject.prototype.googleCheckout = function()
{
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'googleCheckout' }; 
	
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.post(selfUrl, postData,	
	function(responseData) { 
    	if (responseData.Response.Code != 0)
    	{
    		alert(responseData.Response.Message);
    	}
    	else
    	{
    	    document.location.href = responseData.Response.Message;
    	}	    
	},
	'json');
}
// --- Google Checkout section --- //

/**
 * PayPal Checkout
 */
eCartManagerObject.prototype.paypalCheckout = function()
{
	this.loader.show('Please wait ...');
	
	var currentObject = this;
		
	var postData = { __callHandler: 'paypalCheckout' }; 
	
	postData[this.ajaxEventVar] = this.ajaxEventUID;
	
	$.post(selfUrl, postData,	
	function(responseData) {
    	if (responseData.Response.Code != 0)
    	{
    		alert(responseData.Response.Message);
    	}
    	else
    	{
    	    document.location.href = responseData.Response.Message;
    	}	    
	},
	'json');
}
// --- Google Checkout section --- //

// --- Additional functionality from crazy marketing team --- //
