/**
 * Album for mootools 1.2.1
 * @license MIT-style license
 * @author Anquetil Manuel <manuel.anquetil [at] baphira.com>
 * @copyright Baphira - http://www.baphira.com
 */
var Album = new Class({
	
	Implements: [Options],
	
	options: {
	},
	
	// div.gallery
	initialize: function(el, options){
		this.setOptions(options);
		this.album = $(el);
		this.images = this.album.getElements('dl');
		this.mainImage = this.images[0].getElement('img');
		this.preload = new Element('div',{'class':'preloader'}).inject(this.album);
		
		this.images.each(function(dl) {
			var img = dl.getElement('img');
			
			if (dl != this.images[0]) {
				//preload images
				this.setMainSrc(img.clone().removeProperty('width').removeProperty('height').setStyle('display', 'none').inject(this.preload));
				
				dl.addEvent('mouseenter', function(e){
					if (dl != this.images[0]) {
						this.setMainSrc(img.clone().removeEvents().inject(this.mainImage, 'after'));
						this.mainImage.setStyle('display', 'none');
					}
				}.bind(this));
				
				dl.addEvent('mouseleave', function(e){
					this.mainImage.setStyle('display', 'inline').getNext().destroy();
				}.bind(this));
			}
			
		}.bind(this));
		
		this.setMainSrc(this.mainImage);
		this.images[0].removeClass('gallery-item');
		this.images[0].addClass('gallery-main-item');
		
		this.timer = this.checkLoad.bind(this).periodical(200);
	},
	
	setMainSrc: function(img) {
		var array = img.getProperty('src').split('/');
		var filename = array.getLast().split(/-[0-9]{0,4}x[0-9]{0,4}/i);
		var newPath = '';
		for(var i = 0; i < array.length - 1; i++) {
			newPath += array[i] + '/';
		}
		img.setProperty('src', newPath + filename[0] + (filename.length > 1 ? filename[1] : ''));
	},
	
	checkLoad: function() {
		var complete = true;
		this.preload.getElements('img').each(function(el) {
			if(!el.complete) {
				complete = false;
			}
		});
		if(complete) {
			if(this.checkHeight());
			$clear(this.timer);
		}
	},
	
	checkHeight: function() {
		var maxHeight = 0;
		this.preload.getElements('img').each(function(el) {
			var size = el.setStyle('visibility', 'hidden').setStyle('display', 'inline').getSize().y;
			el.setStyle('visibility', 'visible').setStyle('display', 'none');
			if(maxHeight < size) {
				maxHeight = size;
			}
		});
		if(Browser.Engine.trident && Browser.Engine.version <= 4) {
			this.images[0].setStyle('height', maxHeight + 'px');			
		}
		this.images[0].setStyle('min-height', maxHeight + 'px');
	}
		
});
