var shoppingcart;
var LANG;
/**************************************
 *	Create Shoppingcart
 **************************************/
window.addEvent('domready', function(){
	shoppingcart = new ShoppingCart({
		cart : $('shoppingcart')
	});
	
	LANG = $(document.body).className;
	
	//disable buttons
	$$('a.disabled').each(function(link, index){
		link.addEvent('click', function(e){
			new Event(e).stop();
		});	
	})	
	
	//add amount buttons
	$$('a.add').each(function(link, index){
		link.addEvent('click', function(e){
			new Event(e).stop();			
			shoppingcart.addAmount(link.rel);
		});	
	})
	
	//delete amount buttons
	$$('a.del').each(function(link, index){
		link.addEvent('click', function(e){
			new Event(e).stop();
			shoppingcart.delAmount(link.rel);
		});	
	})
	
	//delete shoppingcart buttons
	$$('a.prod_del').each(function(link, index){
		link.addEvent('click', function(e){
			new Event(e).stop();
			shoppingcart.deleteFromShoppingcart(link.rel);
		});	
	})
	
	//buy item button
	$$('a.buy').each(function(link, index){
		link.addEvent('click', function(e){
			new Event(e).stop();			
			shoppingcart.addToShoppingcart(link.rel);
		});	
	})
	
	//delivery method
	if ($('frm_delivery_method')) {
		$('frm_delivery_method').addEvent('change', function(e){
			new Event(e).stop();
			shoppingcart.changeDeliveryMethod(this.value);
		});
		
		shoppingcart.changeDeliveryMethod($('frm_delivery_method').value);
	}
	
	//force input fields to numeric
	$(document.body).getElements('input[name^=amount_]').each(function(input, index){
		input.addEvent('keypress', function(e){
			var val = input.value;

			if (val.length < 2) {
				switch (e.code) {
					case 224:
						input.value += '0';
						break;
					case 38:
						input.value += '1';
						break;
					case 233:
						input.value += '2';
						break;
					case 34:
						input.value += '3';
						break;
					case 39:
						input.value += '4';
						break;
					case 40:
						input.value += '5';
						break;
					case 167:
						input.value += '6';
						break;
					case 232:
						input.value += '7';
						break;
					case 33:
						input.value += '8';
						break;
					case 231:
						input.value += '9';
						break;
				}
			}
			
			if (e.code == 8 || (e.code >= 45 && e.code <= 57)) {
				//numeric 
			}
			else {				
				new Event(e).stop();
				e.preventDefault();			
			}

		});
	})
});


/**************************************
 *	Shoppingcart
 **************************************/
ShoppingCart = new Class({
	
	options:	{
		cart:	false,
		items:	false				
	},
		
	
	/**
	 *	Initialize
	 */
	initialize: function(options){
		
		// Fetch options
		this.setOptions(options);			
		
		if(!this.options.cart) return false;					
	},
	
	addAmount : function(rel){
		var input = $(document.body).getElement('input[name='+rel+']');
		var value = parseInt(input.value);
		if ($type(value)  != 'number')value = 0;
		this._setAmount(input, value+1);
	},
	
	delAmount : function(rel){
		var input = $(document.body).getElement('input[name='+rel+']');
		var value = parseInt(input.value);
		if ($type(value)  != 'number')value = 0;
		this._setAmount(input, value-1);
	},
	
	changeDeliveryMethod : function(delivery_method){
		
		$('total').innerHTML = '<img src="/design/images/layout/loader-orange.gif" alt="" style="vertical-align:middle" />';
		$('delivery_price').innerHTML = '<img src="/design/images/layout/loader-blue.gif" alt="" style="vertical-align:middle" />';		
		
		var self = this;		
		var jsonRequestAdd = new Request.JSON({
			url: '/' + LANG + '/shoppingcart/deliverymethod', 
			method: 'post',
			data: {
				'delivery_method': delivery_method				
			},
			onSuccess: function(response){
				
				if (response.result) {
					var total = response.data.shoppingcart_price.toString().replace('.', ',');	
					var delivery_price = response.data.shoppingcart_delivery_price.toString().replace('.', ',');
					
					$('total').innerHTML = total;
					$('delivery_price').innerHTML = delivery_price;
				}		   
			}
		}).send();
	},
	
	addToShoppingcart : function(rel)
	{
		var input = $(document.body).getElement('input[name='+rel+']');
		
		var id = rel.replace('amount_', '');
		id = id.replace('d_', '');
		
		var amount = parseInt(input.value);
		if ($type(amount)  != 'number')amount = 0;
		
		if(amount == 0) return false;
		
		var self = this;		
		var jsonRequestAdd = new Request.JSON({
			url: '/' + LANG + '/shoppingcart/add', 
			method: 'post',
			data: {
				'product_id': id,
				'amount' : amount,
				'incart' : false
			},
			onSuccess: function(response){
				
				if (response.result) {
					var total = response.data.shoppingcart_price.toString().replace('.', ',');	

					input.value = 1;
					$('shoppingcart_count').innerHTML = response.data.shoppingcart_count;
					$('shoppingcart_price').innerHTML = total;						
					self.setOverlay(response.data);
				}		   
			}
		}).send();

	},
	
	updateShoppingcart : function(rel)
	{
		var input = $(document.body).getElement('input[name='+rel+']');
		
		var id = rel.replace('amount_', '');
		id = id.replace('d_', '');
		
		var amount = parseInt(input.value);
		if ($type(amount)  != 'number')amount = 0;
		
		if(amount == 0) return false;
					
		$('total').innerHTML = '<img src="/design/images/layout/loader-orange.gif" alt="" style="vertical-align:middle" />';
		$('sub_' + id).innerHTML = '<img src="/design/images/layout/loader-blue.gif" alt="" style="vertical-align:middle" />';		
		
		var self = this;		
		var jsonRequestUpdate = new Request.JSON({
			url: '/' + LANG + '/shoppingcart/add', 
			method: 'post',
			data: {
				'product_id': id,
				'amount' : amount,
				'incart' : true
			},
			onSuccess: function(response){
				if (response.result) {
					var total = response.data.shoppingcart_price.toString().replace('.', ',');	

					$('total').innerHTML = total;
					$('sub_' + id).innerHTML = response.data.product.subtotal.toString().replace('.', ',');											
				}		   
			}
		}).send();

	},
	
	deleteFromShoppingcart : function(rel){
		var input = $(document.body).getElement('input[name='+rel+']');
		
		var id = rel.replace('amount_', '');
		id = id.replace('d_', '');
				
		$('total').innerHTML = '<img src="/design/images/layout/loader-orange.gif" alt="" style="vertical-align:middle" />';
		
		var self = this;		
		var jsonRequest = new Request.JSON({
			url: '/' + LANG + '/shoppingcart/delete', 
			method: 'post',
			data: {
				'product_id': id				
			},
			onSuccess: function(response){
				if (response.result) {
					var total = response.data.shoppingcart_price.toString().replace('.', ',');					
					$('total').innerHTML = total;	
					
					$('row_' + id).fade('out');
					(function(){
						$('row_' + id).destroy()
					}).delay(500);
					
					var TRs = $(document.body).getElements('tr[id^=row_]');					
					if(TRs.length <= 1)
						window.location.reload(true);
				}		   
			}
		}).send();
	},
	
	setOverlay : function(data)
	{
		
		var product = data.product;
		
		var overlay = new Element('div', {'id' : 'sc_overlay'})		
		var background = new Element('div', {'id' : 'sc_bg'});
		var balloon = new Element('div', {'id' : 'sc_balloon'});
		var balloon_content = new Element('div', {'id' : 'sc_content'});
		
		background.setStyle('height', window.getScrollHeight());
		
		background.injectTop(overlay);		
		overlay.injectTop($(document.body));
		
		background.fade('hide');	
		background.fade(0.7);
		
		window.scrollTo(window.getScrollLeft(), 0);
		
		balloon.injectTop(overlay);
		balloon_content.injectTop(balloon);			
		
		balloon_content.innerHTML = '<div id="sc_text">' + data.shoppingcart_html +'</div>';
		
		var shopButton = new Element('a', {'id' : 'sc_shopbutton', 'href':'#', 'html' : '<span>'+ data.shoppingcart_shopbutton + '</span>', 'title' : data.shoppingcart_shopbutton});
		var payButton = new Element('a', {'id' : 'sc_paybutton','href':'/'+LANG+'/'+data.shoppingcart_quicklink+'/', 'html' : '<span>' + data.shoppingcart_paybutton + '</span>', 'title' : data.shoppingcart_paybutton});
		
		shopButton.injectBottom(balloon_content);
		
		shopButton.addEvent('click', function(e){
			new Event(e).stop();
			overlay.destroy();
		});	
				
		payButton.injectBottom(balloon_content);
						
	},	
	
	_setAmount: function(input, amount)
	{
		if (amount > 99) 
			amount = 99;
		if (amount < 1) 
			amount = 1;
		input.value = amount;
		
		var id = input.name.replace('amount_', '');
		if ($('sub_' + id)) {
			this.updateShoppingcart(input.name);			
		}
	
	}
});
ShoppingCart.implement(new Options);
