var Shop = Class.create();   
Shop.prototype = {
	initialize: function() {
		this.Cart = new Shop_Cart();
	}
}

var Cart_Timeout;

Shop_Cart = Class.create();
Shop_Cart.prototype = {
	idCartWindow: 'cartwindow', // div
	idCartItem: 'menuLiWinkelwagen', // li
	idCartLink: 'menuLiAWinkelwagen', // li > a
	
	initialize: function() {
		
	},
	
	show: function(event) {
		var element = event.element();
		
		// Clear timeout
		clearTimeout(Cart_Timeout);
		
		// Mouseover event:
		Event.stopObserving(this.idCartWindow, 	'mouseover', 	this.bindShow);
		
		// Mouseout event:
		Event.stopObserving(this.idCartWindow, 	'mouseout', 	this.bindHide);
		Event.stopObserving(this.idCartItem, 	'mouseout', 	this.bindHide);
		
		$(this.idCartWindow).show();
		$(this.idCartItem).addClassName('cart-hover');
		$(this.idCartLink).addClassName('cart-hover');
		
		// Mouseover event:
		Event.observe(this.idCartWindow, 	'mouseover', 	this.bindShow);
		Event.observe(this.idCartItem, 		'mouseover', 	this.bindShow);
		
		// Mouseout event:
		Event.observe(this.idCartWindow, 	'mouseout', 	this.bindHide);
		Event.observe(this.idCartItem, 		'mouseout', 	this.bindHide);
	},

	hide: function(event) {
		Cart_Timeout = setTimeout(function() {
			$(Shop.Cart.idCartWindow).hide();
			$(Shop.Cart.idCartItem).removeClassName('cart-hover');
			$(Shop.Cart.idCartLink).removeClassName('cart-hover');
			
			// Mouseover event:
			Event.stopObserving(Shop.Cart.idCartWindow, 'mouseover', 	this.bindShow);

			// Mouseout event:
			Event.stopObserving(Shop.Cart.idCartWindow, 'mouseout', 	this.bindHide);
			Event.stopObserving(Shop.Cart.idCartItem, 	'mouseout', 	this.bindHide);
		}, 400);
	},
	
	updateProductCount: function(count) {
		$(this.idCartLink).update($(this.idCartLink).innerHTML + '<span class=\"cart-product-count\">(' + count + ')</span>');
	}
}

Shop_Product = Class.create();
Shop_Product.prototype = {
	product_id: 0,
	
	element_price_old: '',
	element_price_new: '',
	
	price_old: 0,
	price_new: 0,
	price_tax: 0,
	
	price_total: 0,
	
	amount: 1,
	
	versions: [],
	version: 0,
	
	initialize: function(product_id) {
		this.product_id = product_id;
	},
	
	/* Setters */	
	setOldPrice: function(price) {
		this.price_old = price;
	},
	
	setNewPrice: function(price) {
		this.price_new = price;
		this.price_total = price;
	},

	setAmount: function(amount) {
		this.amount = amount;
		
		this.updatePrice();
	},
	
	setVersions: function(versions) {
		this.versions = versions;
	},
	
	setVersion: function(version) {
		this.version = version;
		
		this.price_new = this.versions[version];
		
		this.updatePrice();
	},
	
	setElementOldPrice: function(id) {
		this.element_price_old = id;
	},
	
	setElementNewPrice: function(id) {
		this.element_price_new = id;
	},
	
	/* Updaters */
	updatePrice: function() {
		this.price_total = this.amount * this.price_new;
		
		this.visualUpdatePrice();
	},
	
	/* Visual updaters */
	visualUpdatePrice: function() {
		if($(this.element_price_old))
		{
			$(this.element_price_old).hide();
		}
		
		if($(this.element_price_new))
		{
			$(this.element_price_new).update('&euro; ' + Shop_Utils.commaFormatted (Shop_Utils.currencyFormatted (this.price_total)));
		}
		
		console.log($(this.element_price_new));
	}
}

var Shop_Utils = {
	
	currencyFormatted: function(amount)	{
		var i = parseFloat(amount);
		if(isNaN(i)) { i = 0.00; }
		var minus = '';
		if(i < 0) { minus = '-'; }
		i = Math.abs(i);
		i = parseInt((i + .005) * 100);
		i = i / 100;
		s = new String(i);
		if(s.indexOf('.') < 0) { s += '.00'; }
		if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
		s = minus + s;
		return s;
	},

	commaFormatted: function(amount) {
		var delimiter = "."; // replace comma if desired
		var a = amount.split('.',2);
		var d = a[1];
		var i = parseInt(a[0]);
		if(isNaN(i)) { return ''; }
		var minus = '';
		if(i < 0) { minus = '-'; }
		i = Math.abs(i);
		var n = new String(i);
		var a = [];
		while(n.length > 3)
		{
			var nn = n.substr(n.length-3);
			a.unshift(nn);
			n = n.substr(0,n.length-3);
		}
		if(n.length > 0) { a.unshift(n); }
		n = a.join(delimiter);
		if(d.length < 1) { amount = n; }
		else { amount = n + ',' + d; }
		amount = minus + amount;
		return amount;
	}
	
}

function confirm_message(message, url)
{
	if (confirm(message)) document.location = url;
	
	return void(0);
}

Event.observe(window, 'load', function() {
	$$('input').each(function(element) {
		Event.observe(element, 'keydown', function(event) {
			if(event.keyCode == Event.KEY_RETURN) Event.element(event).form.submit();
		});
	});
	
	// Check if div#cartwindow exists:
	if($('cartwindow'))
	{
		Shop.Cart.bindShow = Shop.Cart.show.bindAsEventListener(Shop.Cart);
		Shop.Cart.bindHide = Shop.Cart.hide.bindAsEventListener(Shop.Cart);
	
		Event.observe(Shop.Cart.idCartItem, 'mouseover', Shop.Cart.bindShow);
	}
});