window.addEvent('domready', function() {
	// create the application message ....
	Message.create();
	
	if ($('search-for-editor'))
		$('search-for-editor').getElement('select').addEvent('change', function(event) {
			window.location.href = $(event.target).value;
		});
		
	// degrade gracefuly if javascript is disabled
	$$('.form-for-button').each(function(form) {
		var submit = form.getElement('input[type=submit].submit-button');
		var link = submit.getNext('a.button');
		var alertMessage = link.get('title');
		submit.setStyle('display', 'none');
		link.setStyle('display', 'inline');
		link.addEvent('click', function(event) { 
			new Event(event).stop();
			if (alertMessage != null) {
				if (confirm(alertMessage)) form.submit();
			} else
				form.submit();
		});
	});
	
	// clear input fields when focus
	$$('input[type=text].clear-it').each(function(input) {
		input.addEvent('click', function(event) { input.value = ''; });
	});
	
	// application message
	if ($('application-message')) Message.hide();
	
	// iframes
	$$('iframe').each(function(iframe) {
		iframe.addEvent('load', function(event) {
			var id = IframeTools.resize.periodical(500, IframeTools, iframe);
			IframeTools.intervalID = id;
			// var iFrameWindow = Browser.Engine.trident == true ? iframe.contentWindow : iframe;
			// var iFrameDocument = Browser.Engine.trident == true ? iFrameWindow.document : iFrameWindow.contentDocu
ment;
			// var iframeHeight = "100%";
			// 
			// // dom of the iframe must be accessible
			// while (iFrameDocument.body == null) { }
			// 
			// with (iFrameWindow)
			// 	iframeHeight = document.body.scrollHeight + 90;
			// 
			// iframe.setStyles({ 'height': iframeHeight + 'px', 'overflow-y': 'hidden' });
		});
	});
	
	// sub categories
	$$('div.sub-category-list ul.sub-sub').each(function(list) {
		var container = list.getParent('li');
		var fx = new Fx.Slide(list, { duration: 400 }).hide();

		container.addEvent('click', function(event) {
			var el = $(event.target);
			var afterFx = function() {
				container.getChildren('span.more').toggleClass('hidden');
				container.getChildren('span.less').toggleClass('hidden');
			}
			
			if (el.hasClass('more'))
				fx.slideIn().chain(afterFx);
			else 
				if (el.hasClass('less'))
					fx.slideOut().chain(afterFx);
		});
	});
	
	// tooltips
	new Tips($$('.tooltip'), {
		showDelay: 400,
		hideDelay: 400,
		fixed: true,
		className: 'tool-tip'
	});
});


IframeTools = {
	intervalID: null,
	
	isReady: function(iframe) {
		var iFrameWindow = Browser.Engine.trident == true ? iframe.contentWindow : iframe;
		if (iFrameWindow == null || iFrameWindow == undefined) return false;
		var iFrameDocument = Browser.Engine.trident == true ? iFrameWindow.document : iFrameWindow.contentDocument;
		return iFrameDocument.body != null;
	},
	
	resize: function(iframe) {
		if (this.isReady(iframe)) {
			var iFrameWindow = Browser.Engine.trident == true ? iframe.contentWindow : iframe;
			with (iFrameWindow)
				iframeHeight = document.body.offsetHeight;
			
			iframe.setStyles({ 'height': iframeHeight + 'px', 'overflow-y': 'hidden' });
			
			$clear(this.intervalID);
		}
	}
}

/* CAROUSEL */

SpecialOffersCarousel = new Class({
	initialize: function() {
		var _self = this;
		
		this.carousel = new iCarousel($('special-offers-content'), {
			idPrevious: 'special-offers-left-arrow',
			idNext: 'special-offers-right-arrow',
			idToggle: 'undefined',
			item: {
				klass: 'special-offer',
				size: 684
			},
			animation: {
				type: "scroll",
				duration: 1000,
				amount: 1
			},
			/*rotate: {
				type: "manual",		// auto || manual
				interval: 8000,	// if type = auto, set the interval (ms)
				onMouseOver: "proceed"
			},*/
			onPrevious: function() { _self.selectStep(this.atScreen % (this.aItems.length / 3) + 1); },
			onNext: function() { _self.selectStep(this.atScreen % (this.aItems.length / 3) + 1); }
		});

		$('special-offers-nav').addEvent('click', function(event) {
			event = new Event(event).stop();
			this._observe($(event.target));
			return false;
		}.bind(this));		
	},
	
	_observe: function(el) {
		if (el.nodeName == 'IMG' && $(el).getParent().hasClass('bullet'))
			this.selectStep($(el).getParent());
	},
	
	selectStep: function(el) {
		if (typeof(el) == 'number') {
			// deal with position instead
			var els = $('special-offers-nav').getElements('td.bullet');
			for (var i = 0; i < els.length; i++) {
				if (i + 1 == el) {
					el = els[i];
					break;
				}
			}
		} else {
			var index = parseInt(el.get('id').split('-').getLast());
			this.carousel.goTo(index - 1);
		}

		var current = $('special-offers-nav').getElement('td.bullet.on');
		this._toggleImageSrc(current.getElement('img'));
		current.removeClass('on');

		this._toggleImageSrc(el.getElement('img'));
		el.addClass('on');
	},
	
	_toggleImageSrc: function(img) {
		// ie6 hack because we are using pngfix.htc. How long are we going to support ie6 ? 
		var attr = (Browser.Engine.trident4) ? 'style' : 'src';					
		if (img.get(attr).indexOf('-on.') != -1)
			img.set(attr, img.get(attr).replace('-on.', '-off.'));
		else
			img.set(attr, img.get(attr).replace('-off.', '-on.'));
	} 
});


/* CART */

Cart = new Class({
	initialize: function() {
		// edit mode
		if (this.form = $('cart-form')) {
			this.checkbox = this.form.getElement('input[type=checkbox]');
			// this.selectArray = this.form.getElements('select');
			this.qtyTextArray = this.form.getElements('td.quantity input');
			this.linkToRemoveArray = this.form.getElements('tr.line-item td.action a');

			this.qtyTextArray.each(function(input) { input.store('previousValue', input.value); });

			this.form.getElements('tr.update td').setStyle('padding-bottom', '0px');
			this.form.getElement('input[name=refresh]').setStyle('display', 'none');
		
			this.addFormEvents();
		} else {
			this.referenceForms = $(document.body).getElements('table.references td.buy-it form');
			this.addReferencesEvents();
		}
	},
	
	addFormEvents: function() {
		// cdrom backup checkbox
		if (this.checkbox)
			this.checkbox.addEvent('click', function(event) { this.refresh(); }.bind(this));
		// quantity text boxes
		this.update.periodical(1000, this);
		// remove links
		this.linkToRemoveArray.each(function(link) {
			link.addEvent('click', function(event) { new Event(event).stop(); this.remove(link); }.bind(this));
		}.bind(this));
	},
	
	addReferencesEvents: function() {
		this.referenceForms.each(function(form) {
			form.submit = function() { this.add(form); }.bind(this);
		}.bind(this));
	},
	
	/* add sku */
	add: function(form) {
		Logger.debug('Add sku to cart');
		new Request.FRONT({
			url: form.get('action'),
			data: form.toQueryString(),
			onSuccess: this.onAddComplete.bind(this)
		}).send();		
	},
	
	onAddComplete: function(cart) {
		if (!cart.error) {
			$('cart').replaceHTML(cart.html);
			(function() { $('cart').highlight(); }).delay(3000);
		}
	},
	
	/* update sku qty */
	update: function() {
		var modified = false;
		this.qtyTextArray.each(function(input) {
			if (input.retrieve('previousValue') != input.value) modified = true;
			input.store('previousValue', input.value);
		});		
		if (modified) this.refresh();
	},
	
	/* remove sku */
	remove: function(link) {
		Logger.debug('Remove sku from cart');
		new Request.FRONT({
			url: link.get('href'),
			method: 'get',
			onSuccess: this.onRemoveComplete.bind(this)
		}).send();
	},
	
	onRemoveComplete: function(cart) {
		if (!cart.error) {
			if (cart.size == 0) {
			location.reload(true); // refresh the page
				return ;
			}
			
			// remove line item
			this.form.getElement('tr#sku-' + cart.sku_id).dispose();
			// Sub total
			this.form.getElement('tr.sub-total td.price').set('html', this._numberToEuro(cart.sub_total));
		}
	},
	
	/* refresh */
	refresh: function() {
		Logger.debug('Refresh cart');
		new Request.FRONT({
			url: this.form.get('action'),
			data: this.form.toQueryString(),
			onSuccess: this.onRefreshComplete.bind(this)
		}).send();
	},
	
	onRefreshComplete: function(cart) { 
		if (!cart.error) {
			// Line items
			for (var i = 0; i < cart.line_items.length; i++) {
				var l = cart.line_items[i];
				var el = this.form.getElement('tr#sku-' + l.sku_id + ' td.total');
				el.set('html', this._numberToEuro(l.total));
				el = this.form.getElement('tr#sku-' + l.sku_id + ' td.quantity input');
				el.set('value', l.quantity);
			}
			
			// Cdrom backup
			var el = this.form.getElement('tr#cdrom-backup');
			if (el)
				if (cart.cdrom_backup) {
					el.getElement('span.fees').setStyle('display', 'none');
					el.getElement('td.total').set('html', this._numberToEuro(cart.cdrom_backup_fees));
				} else {
					el.getElement('span.fees').setStyle('display', 'inline');
					el.getElement('td.total').set('html', "&nbsp;");
				}			
			
			// Sub total
			this.form.getElement('tr.sub-total td.price').set('html', this._numberToEuro(cart.sub_total));
		}
	},
	
	_numberToEuro: function(number) {
		return numberToCurrency(number, { unit: "&euro;", format: "{n} {u}", separator: ',', delimiter: '' });
	}
	
});
