/***********************************
 *	Shoppingcart handler
 ***********************************/
 
/**
 *	Shop overlay
 */
function toggleShopOverlay(visible){
	var overlay 	= $('shopoverlay');
	var background	= overlay.getElement('div.background');
	
	// Fix background height
	background.setStyle('height', window.getScrollHeight());
	
	// Start transition
	var overlayFx	= new Fx.Style(background, 'opacity', {duration: 1000, transition: Fx.Transitions.quintOut});
	if(visible){;
		overlayFx.start(0,.7);
		overlay.setStyle('visibility', 'visible');
	}else{	
		overlayFx.start(.7,0)
		overlay.setStyle('visibility', 'hidden');
	}
};


/**
 *	Add-to-shoppingcart handler
 */
window.addEvent('domready', function(){	

	// Add item to shoppingcart in productdetails
	$$('a.buynow').each(function(addButton){
		
		addButton.onclick = function(){
			
			// Toggle shop overlay
			var overlay		= $('shopoverlay');
			var name		= $('product_name').value;
			var thumbnail	= $('product_thumbnail').value;
			
			overlay.getElement('h2').innerHTML	= name;
			overlay.getElement('img').src 		= thumbnail;
			toggleShopOverlay(true);
			
			// Perform request
			var id		= $('product_id').value;
			var device	= $('product_device').value;
			var count	= $('shoppingcart_count');
			var price	= $('shoppingcart_price');
			
			new Json.Remote('/shoppingcart/jsonplus/' + id + '/' + device, {
				onComplete: function(response){
					if(response.result){
						// Update itemcount
						count.innerHTML = parseInt(count.innerHTML) + 1;
						
						// Update price
						currentPrice	= parseFloat(price.innerHTML.replace(',', '.'));
						newPrice		= currentPrice + parseFloat(response.result.price);
						price.innerHTML = String(newPrice.toFixed(2)).replace('.', ',');
					}else{
						alert("Er is een fout opgetreden. Gelieve later nog eens te proberen");
					}
				}.bind(this)
			}).send({});
		}
	});
	
	
	// Add/Remove item to shoppingcart
	var inRequest = false;
	$$('td.amount a').each(function(button){
		button.onclick = function(){
			
			// Disable click when still requesting (not so A-jax after all :p)
			if(inRequest){
				return;	
			}else{
				inRequest = true;	
			}
			
			// Collect data + fields
			var id				= button.rel;
			var device			= $('row_'+button.rel).getElement('input[name=product_device]').value;
			var countField		= $('row_'+button.rel).getElement('input[name=amount]');
			var priceElement	= $('row_'+button.rel).getElement('td.price span');
			var totalElement	= $('total_price');			
			
			if(button.hasClass('add')){
				new Json.Remote('/shoppingcart/jsonplus/' + id + '/' + device, {
					onComplete: function(response){
						if(response.result){
							// Update itemcount
							countField.value = parseInt(countField.value) + 1;
							
							// Update price
							currentPrice	= parseFloat(priceElement.innerHTML.replace(',', '.'));
							newPrice		= currentPrice + parseFloat(response.result.price);
							priceElement.innerHTML = String(newPrice.toFixed(2)).replace('.', ',');
							
							// Update total price
							currentPrice	= parseFloat(totalElement.innerHTML.replace(',', '.'));
							newPrice		= currentPrice + parseFloat(response.result.price);
							totalElement.innerHTML = String(newPrice.toFixed(2)).replace('.', ',');
						}else{
							alert("Er is een fout opgetreden. Gelieve later nog eens te proberen");
						}
						inRequest = false;
					}.bind(this)
				}).send({});	
			}else if(parseInt(countField.value)){
				new Json.Remote('/shoppingcart/jsonmin/' + id + '/' + device, {
					onComplete: function(response){
						if(response.result){
							// Update itemcount
							countField.value = parseInt(countField.value) - 1;
							
							// Update price
							currentPrice	= parseFloat(priceElement.innerHTML.replace(',', '.'));
							newPrice		= currentPrice - parseFloat(response.result.price);
							priceElement.innerHTML = String(newPrice.toFixed(2)).replace('.', ',');
							
							// Update total price
							currentPrice	= parseFloat(totalElement.innerHTML.replace(',', '.'));
							newPrice		= currentPrice - parseFloat(response.result.price);
							totalElement.innerHTML = String(newPrice.toFixed(2)).replace('.', ',');
						}else{
							alert("Er is een fout opgetreden. Gelieve later nog eens te proberen");
						}
						inRequest = false;
					}.bind(this)
				}).send({});	
			}else{
				inRequest = false;	
			}
		}
	});
	
	// Remove row from shoppingcart
	$$('td.delete a').each(function(button){
		// Collect data + fields
		var id				= button.rel;
		var device			= $('row_'+button.rel).getElement('input[name=product_device]').value;
		var priceElement	= $('row_'+button.rel).getElement('td.price span');
		var totalElement	= $('total_price');			
		
		// Remove row
		button.onclick = function(){
			new Json.Remote('/shoppingcart/jsonremove/' + id + '/' + device, {
				onComplete: function(response){
					if(response.refresh){
						location = location;
						return;
					}else if(response.result){
						// Update total price
						itemPrice				= parseFloat(priceElement.innerHTML.replace(',', '.'));
						totalPrice				= parseFloat(totalElement.innerHTML.replace(',', '.'));
						newPrice				= totalPrice - itemPrice
						totalElement.innerHTML	= String(newPrice.toFixed(2)).replace('.', ',');
						
						// Remove tablerow in a fancy way
						var row = $('row_'+button.rel);
						flashFx = new Fx.Styles(row, {
							'duration': 300,
							'onComplete': function(){
								row.remove();
							}.bind(this)
						}).start({'opacity':[1,0]});
						
						// Hide shoppingcart table if empty
						if(newPrice == 0){
							$('shoppingcart').remove();
							$$('p.alert').setStyle('display', 'block');
						}
					}else{
						alert("Er is een fout opgetreden. Gelieve later nog eens te proberen");
					}
				}.bind(this)
			}).send({});
		}
	});
	
	
	// Change delivery method
	if(deliveryMethod = $('delivery_method')){
		
		// Update delivery method
		deliveryMethod.addEvent('change', function(){
		
			var totalElement	= $('total_price');	
			var currentDelivery	= $('current_delivery_price');
			
			new Json.Remote('/shoppingcart/jsonchangedelivery/' + deliveryMethod.value, {
				onComplete: function(response){
					if(response.result){
						// Update total price
						totalPrice				= parseFloat(totalElement.innerHTML.replace(',', '.'));
						currentDeliveryPrice	= parseFloat(currentDelivery.value);
						newDeliveryPrice		= parseFloat(response.result.price);
						newTotalPrice			= totalPrice - currentDeliveryPrice + newDeliveryPrice;
						totalElement.innerHTML	= String(newTotalPrice.toFixed(2)).replace('.', ',');
		
						// Update current deliveryprice
						currentDelivery.value = response.result.price;
						
					}else{
						alert("Er is een fout opgetreden. Gelieve later nog eens te proberen");
					}
				}.bind(this)
			}).send({});	
		});
	}
	
	// Show voucher fields
	var voucher = $('voucher');
	if(voucher){
		var link = voucher.getElement('a');
		if(link){
			link.addEvent('click', function(){
				var disallowedProducts = $$('tr.novoucher td h3');
				if(disallowedProducts.length){
					// Show "voucher not allowed" error message
					var message = 'Er zijn geen kortingscodes mogelijk voor de volgende producten: \n\n';
					disallowedProducts.each(function(disallowedProduct){
						message += '  • ' + disallowedProduct.innerHTML + '\n';
					});
					message += '\nGelieve deze producten in een aparte bestelling te plaatsen indien u toch gebruik wil maken van een kortingscode.';
					alert(message);
				}else{
					// Show voucher input field
					voucher.getElement('fieldset').removeClass('hidden');
					link.setStyle('display', 'none');
				}
			});
		}
	}
	
});
