if (!navipartner) {
	var navipartner = new Object();
}
navipartner.dynamicCart = new Object();
navipartner.dynamicCart.url = '';

navipartner.dynamicCart.form = function(form) {
	form.action = '/dynamiccart/cart/add';
	var formValidator = new VarienForm(form.id);
	if (formValidator.validator.validate()) {
		$('loadingmask').show();
		var ajax = form.request({
			onComplete: function(transport) {
				$('loadingmask').hide();
				var	response = transport.responseText.evalJSON();
				if (response.status == 'error') {
					document.fire('dynamiccart:update', { message: response.message, status: 'error' });															
				} else {
					var cart = eval('new Object(' + transport.responseText + ')');
					document.fire('dynamiccart:update', { cart: cart, status: 'success' });																
				}

			}
		});
	} else { // Validation failed
		document.fire('dynamiccart:update', { cart: false, status: 'validation-error' });															
	}

}

navipartner.dynamicCart.link = function(a) {
	if (navipartner.dynamicCart.url.indexOf('checkout/cart/add') >= 0) {
		var productId = navipartner.dynamicCart.url.substring(
			navipartner.dynamicCart.url.indexOf('product/') + ('product/').length,
			navipartner.dynamicCart.url.indexOf('/', navipartner.dynamicCart.url.indexOf('product/') + ('product/').length)
		);
		var qty = 1;
		$('loadingmask').show();					
		var ajax = new Ajax.Request('/dynamiccart/cart/add', {
			parameters: 'qty='+qty+'&product='+productId,
			method: 'post',
			onComplete: function(transport) {
				var	response = transport.responseText.evalJSON();
				if (response.status == 'error') {
					document.fire('dynamiccart:update', { cart: false, status: 'error' });															
					eval(navipartner.dynamicCart.url);
					
				} else {
					var cart = eval('new Object(' + transport.responseText + ')');
					var update = cart.template.replace('%count%', cart.count);
					if (cart.count == 1) {
						update = update.replace('%item%', 'item');									
					} else {
						update = update.replace('%item%', 'items');																		
					}
					$$(cart.selectors).each(function(obj){
						
						obj.innerHTML = update;
					});
					document.fire('dynamiccart:update', { cart: cart, status: 'success' });	
				}
				$('loadingmask').hide();
			},
		});
	} else {
		eval(navipartner.dynamicCart.url);
	}
}

navipartner.dynamicCart.observer = function(obj) {
	if(obj.tagName.toLowerCase() == 'form') {
		navipartner.dynamicCart.form(obj);	
	} else if (obj.form) { // We're on a product page or something
		navipartner.dynamicCart.form(obj.form);
	} else { //Listing pages 
		navipartner.dynamicCart.link(obj);	
	}
}

navipartner.dynamicCart.initialise = function() {
	/*
	
	Example of catching the events thrown by the function
	-	success: 	Product was added successfully
	-	error:		Product could not be added. Data error
	-	failure:	Ajax request failed, try again.
	document.observe('dynamiccart:update', function(e) {
		alert(e.memo);
	});
	*/
	document.observe('dynamiccart:update', function(e){
		if (e.memo.status == 'success') {
			if ($$('.block.block-cart').length == 0) { return; }
			var ajax = new Ajax.Request('/dynamiccart/cart/sidebar/', {
				parameters: 'ajax=ajax',
				method: 'post',
				onSuccess: function(transport) {
					$$('.block.block-cart').each(function(obj){
						obj.replace(transport.responseText);
					});
				}
			});
		}
	});
	$$('#product_addtocart_form').each(function(obj){
	
		Event.observe(obj, 'submit', function(e) {
			Event.stop(e);		
			navipartner.dynamicCart.observer(this);		
		})
	});

	$$('.button.btn-cart').each(function(obj){
	
		if (obj.getAttribute('onclick').indexOf('addWItemToCart') < 0) {

			Event.observe(obj, 'mousedown', function(e){
				navipartner.dynamicCart.url = this.getAttribute('onclick');
				this.setAttribute('onclick', 'return false;');
			});
			Event.observe(obj, 'click', function(e){
				navipartner.dynamicCart.observer(this);
				this.setAttribute('onclick', navipartner.dynamicCart.url);					
			});

		
		
		}
	
	});
	
}

document.observe('dom:loaded', function(){
	navipartner.dynamicCart.initialise();
}); 



