Cart = (function(){
	
	this.mode = 'short';
	this.hd = 'Your Cart';
	var cfcRemoteFacade = rootPath + '/remote/remotefacade.cfc'
	var cfcRturnFormat = 'json'

	function baseCallback(data,textStatus){
		if(data['status']){
			Cart.hideLoader();
			Cart.load();
		}else{
			Cart.hideLoader();
			jAlert(data['text'],'Warning');
		}		
	}

	function loadCallback(data,textStatus){
		if(data['status']) {
			Cart.hideLoader();
			$('#cartBd').html(data['text']);
			Cart.recalculate();
		}else{
			Cart.hideLoader();
			jAlert(data['text'],'Warning');
		}
	}
	
	function ajaxError(XMLHttpRequest, textStatus, errorThrown){
		var msg = XMLHttpRequest.statusText;
		if(msg == 'OK'){
			msg = 'An unknown error occurred. \n If the error persist please contact the system administrator.'
		}
		jAlert(msg,'Warning');
		Cart.hideLoader();
	}
	
	return {
	
		ajax: function(params,success,error){
			params['returnFormat'] = 'json';
			$.ajax({
				url : cfcRemoteFacade,
				cache:false,
				dataType:'json',
				data:params,
				beforeSend:Cart.showLoader,
				success : success,
				error : error
			});
		},
		
		add: function(node){
			var params = $(node).metadata();
			params['method'] = 'addToCart';
			Cart.ajax(params,baseCallback,ajaxError);
		},

		remove: function(node){
			var params = $(node).metadata();
			params['method'] = 'removeFromCart';
			jConfirm('Confirm to remove item from cart.','Remove Item',function(r){
				if(r){
					Cart.ajax(params,baseCallback,ajaxError);							
				}
			})
		},
		
		load : function(){
			var params = {
				method : 'loadCart',
				mode : this.mode
			}
			Cart.ajax(params,loadCallback,ajaxError);
		},

		reset : function(){
			var params = {
				method : 'resetCart'
			}
			jConfirm('Are you sure do you wan to empty your cart?','Warning',function(r){
				if(r){
					Cart.ajax(params,baseCallback,ajaxError);			
				}
			});
		},
		
		addQuantity : function(node){
			var params = $(node).metadata();
			if(params['type'] != 5){
				jAlert('Only one item can be bought for this article!','Info');
			}else{
				params['method'] = 'addQuantity';
				Cart.ajax(params,baseCallback,ajaxError);
			}	
		},

		reduceQuantity : function(node){
			var params = $(node).metadata();
			if(parseInt($(node).text()) <= 1){
				remove(node);
			}else{
				params['method'] = 'reduceQuantity';
				Cart.ajax(params,baseCallback,ajaxError);
			}	
		},
		
		recalculate : function(){
			var elems = $('#cartBd .rate');
			var total = 0;
			$.each(elems,function(i,val){
				var us = $(val).text();
				us = us.replace('$','');
				total = total + parseInt(us);
			})
			total = total.toFixed(2);			
			$('div#cartContainer .total').html(total);
			$("input[name='amount']").val(total);
		},
		
		showLoader : function(){
			$('div#cartContainer #cartHd').html('Loading....');
		},
		hideLoader : function(){
			$('div#cartContainer #cartHd').html(hd);
		} 	
	}	
		
})();

$(document).ready(function(){
	$('.addToCart').live('click',function(){
		Cart.add($(this));
	});
	$('div##cartContainer .removeFromCart').live('click',function(){
		Cart.remove($(this));
	});
	$('div##cartContainer .more').live('click',function(){
		Cart.addQuantity($(this));
	});
	$('div##cartContainer .less').live('click',function(){
		Cart.reduceQuantity($(this));
	});		
	$('div##cartContainer .reloadCart').live('click',function(){
		Cart.load();
	});	
	$('div##cartContainer .resetCart').live('click',function(){
		Cart.reset();
	});		
});	

