var Promos = new Class({
	initialize: function() {
		// Promos
		$each($(document.body).getElements('div.promos, div.billboard'), function(item, index) {
			// Get image original size
			item.sizex = item.getElement('img').get('width');
			item.sizey = item.getElement('img').get('height');
			
			// Paper-fold size
			item.paper = (item.getElement('img.fold').get('src').test('large') ? 'large' : 'small');
			
			// Mouse events
			item.fx = new Hash();
			item.addEvents({
				'mouseover': function() {
					// Billboard won't change while in over event
					if (item.hasClass('billboard')) promos.over = true;
					if (item.hasClass('promos') || item.hasClass('focus')) {
						// Show big image
						item.getElement('img').setStyle('visibility', 'visible');
						// Get image size
						var newSize = item.getElement('img').getSize();
						// Cancel previous fx if needed
						if ($defined(item.fx)) promos.cancelFx(item.fx);
						// Main picture
						item.fx[0] = new Fx.Morph(item.getElement('img'), {duration: 200}).start({
							'width': [newSize.x, item.sizex.toInt()+(item.paper=='large' ? 10 : 6)],
							'height': [newSize.y, item.sizey.toInt()+(item.paper=='large' ? 7 : 6)],
							'top': (item.paper=='large' ? -7 : -6),
							'left': (item.paper=='large' ? -5 : -3)
						});
						// Page folder
						if ($chk(item.getElement('img.fold')) && !(Browser.Engine.trident && Browser.Engine.version==4)) {
							item.fx[1] = new Fx.Morph(item.getElement('img.fold'), {duration: 200}).start({
								'top': (item.paper=='large' ? -7 : -6),
								'right': (item.paper=='large' ? -5 : -3)
							});
							item.fx[2] = new Fx.Morph(item.getElement('img.fold'), {duration: 400}).start({
								'width': (item.paper=='large' ? 106 : 53),
								'height': (item.paper=='large' ? 104 : 52)
							});
							item.fx[3] = new Fx.Morph(item.getElement('div.foldtext'), {duration: 200}).start({
								'top': (item.paper=='large' ? -7 : -6),
								'right': (item.paper=='large' ? -5 : -3)
							});
							item.fx[4] = new Fx.Morph(item.getElement('div.foldtext'), {duration: 400}).start({
								'width': (item.paper=='large' ? 66 : 32),
								'height': (item.paper=='large' ? 66 : 32)
							});
						}
						// Banner
						if ($chk(item.getElement('img[src*=subscribe.png]'))) {
							item.fx[5] = new Fx.Morph(item.getElement('img[src*=subscribe.png]'), {duration: 210}).start({
								'top': -9,
								'left': -6
							});
						}
					}
				},
				'mouseleave': function() {
					// Allow billboard to change
					promos.over = false;
					// Get image size
					newSize = item.getElement('img').getSize();
					// Cancel previous fx if needed
					if ($defined(item.fx)) promos.cancelFx(item.fx);
					// Banner
					if ($chk(item.getElement('img[src*=subscribe.png]')))
						item.fx[5] = new Fx.Morph(item.getElement('img[src*=subscribe.png]'), {duration: 200}).start({
							'top': -3,
							'left': -3
						});
					// Main picture
					item.fx[0] = new Fx.Morph(item.getElement('img'), {duration: 200, onComplete: function() {
						item.getElement('img').setStyle('visibility', 'hidden');
					}}).start({
						'width': [newSize.x, item.sizex],
						'height': [newSize.y, item.sizey],
						'top': 0,
						'left': 0
					});
					// Page folder
					if ($chk(item.getElement('img.fold')) && !(Browser.Engine.trident && Browser.Engine.version==4)) {
						item.fx[1] = new Fx.Morph(item.getElement('img.fold'), {duration: 200}).start({
							'width': 0,
							'height': 0,
							'top': 0,
							'right': 0
						});
						item.fx[2] = new Fx.Morph(item.getElement('div.foldtext'), {duration: 200}).start({
							'width': 0,
							'height': 0,
							'top': 0,
							'right': 0
						});
					}
				},
				// Stop click event for now (to be deceprecated)
				'click': function(e) {
					if (this.get('href')=='#') e.stop();
				}
				
			});
		});
	},
	
	// Cancel all Fx events sent
	cancelFx: function(item) { $each(item, function(fx) { fx.cancel(); }); }
});

var promos;
window.addEvent('domready', function() { promos = new Promos(); });
