// Temp - debugging 
var echo = function(msg) {
	if($('outMsg') == null) {
		var out = new Element('div',{'id': 'outMsg','style': 'position:absolute; z-index:99999; padding:0 4px; background:#FFF; color:#000;'});
		out.inject($('container'),'top');
	}
	$('outMsg').appendText(msg);
	var br = new Element('br');
	$('outMsg').grab(br);
};
var echoLink = function(msg) {
	if($('outMsg') == null) {
		var out = new Element('div',{'id': 'outMsg','style': 'position:absolute; z-index:99999; padding:0 4px; background:#FFF; color:#000;'});
		out.inject($('container'),'top');
	}
	var html = $('outMsg').get('html');
	$('outMsg').set('html',html+'<a href="'+msg+'">'+msg+'</a>');
	var br = new Element('br');
	$('outMsg').grab(br);
};
var xjcHomeMozaic = new Class({
	Implements: Options,
	options: {
		maxImages: 6,
		visibleTime: 1500,
		transitionTime: 2500
	},
    initialize: function(imagesList, options) {
		this.setOptions(options);
		this.imagesListe = $A(imagesList.split(';'));
		if(this.imagesListe.length > 0) {
			this.container = $('homeMozaicContainer');
			this.intervalTime = Math.round((this.options.visibleTime+this.options.transitionTime*2)/this.options.maxImages);
			this.nbImagesIn = 0;
			this.nbImagesLoaded = 0;
			this.imagesArray = this.container.getElements('#imagesArray div.box');
			this.freeBox = new Hash();
			this.imagesArray.each(function(box,index) {
				this.freeBox.include(index,true);
			}.bind(this));
			this.mozaicImages = new Array();
			this.mozaicImagesUrl = new Array();
			this.currentImages = new Array();
			this.imgCounter = 0;
			this.downloadImages(10);
			/*
			this.imagesListe.each(function(image,index) {
				var assetImages = new Asset.image(image, {
					'onload': function(e) {
						var img = new Element('img', {'src':this.imagesListe[index]});
						this.mozaicImagesUrl.extend([this.imagesListe[index]]);
						this.mozaicImages.extend([img]);
						this.nbImagesLoaded++;
						if(this.counter == 2) {
							this.startInjection();
						}
						this.counter++;
					}.bind(this)
				});
			}.bind(this));
			var assetImages = new Asset.images(this.imagesListe, {
				'onProgress': function(counter,index) {
					var img = new Element('img', {'src':this.imagesListe[index]});
					this.mozaicImagesUrl.extend([this.imagesListe[index]]);
					this.mozaicImages.extend([img]);
					//echo(counter+'('+index+')');
					//echoLink(this.imagesListe[index]);
					this.nbImagesLoaded++;
					if(counter == 2) {
						this.startInjection();
					}
				/*}.bind(this),
				'onComplete': function() {* /
				}.bind(this)
			});
			*/
			this.time=0;
			this.test();
		}
	},
	downloadImages: function(nbImgs) {
		if(this.imgCounter < this.imagesListe.length) {
			var tabImgs = new Array();
			if(nbImgs <= 0 || nbImgs > (this.imagesListe.length-this.imgCounter)) {
				nbImgs = this.imagesListe.length-this.imgCounter;
			}
			for(var i=0; i<nbImgs; i++) {
				tabImgs.extend([this.imagesListe[this.imgCounter+i]]);
			}
			var assetImages = new Asset.images(tabImgs, {
				'onProgress': function(counter,index) {
					var img = new Element('img', {'src':tabImgs[index]});
					this.mozaicImagesUrl.extend([tabImgs[index]]);
					this.mozaicImages.extend([img]);
					//echo(counter+'('+index+')');
					//echoLink(this.imagesListe[index]);
					//this.nbImagesLoaded++;
				}.bind(this),
				'onComplete': function() {
					if(this.imgCounter == 0) {
						this.startInjection();
					}
					this.imgCounter=this.imgCounter+nbImgs;
					this.downloadImages(10);
				}.bind(this)
			});
		}
	},
	injectImages: function() {
		this.nbImagesIn++;
		this.addImage();
	},
	startInjection: function() {
		if(this.nbImagesIn < this.options.maxImages) {
			(function() {
				this.injectImages();
				this.startInjection();
			}).delay(this.intervalTime,this);
		}
	},
	addImage: function() {
		var boxIndex = this.getFreeBox();
		var imageIndex = this.getFreeImage();
		if(imageIndex == -1) {
			this.nbImagesIn--;
		} else {
			this.freeBox.set(boxIndex, false);
			this.currentImages.include(imageIndex);
			this.mozaicImages[imageIndex].inject(this.imagesArray[boxIndex]).get('tween', {'property':'opacity','duration':this.options.transitionTime}).set(0).start(1).chain(function() {
				(function() {
					this.removeImage(imageIndex,boxIndex);
				}).delay(this.options.visibleTime,this);
			}.bind(this));
			/*(function() {
				this.removeImage(imageIndex,boxIndex);
			}).delay(this.options.visibleTime,this);*/
		}
	},
	removeImage: function(imageIndex,boxIndex) {
		this.mozaicImages[imageIndex].get('tween', {'property':'opacity','duration':this.options.transitionTime}).start(0).chain(function() {
			this.mozaicImages[imageIndex].dispose();
			this.freeBox.set(boxIndex, true);
			this.currentImages.erase(imageIndex);
			/*(function() {
				this.addImage();
			}).delay(this.intervalTime,this);*/
			this.addImage();
			//this.nbImagesIn--;
			
		}.bind(this));
	},
	getFreeImage: function() {
		var urls = this.currentImages.map(function(value,index) {
			return this.mozaicImagesUrl[value];
		}.bind(this));
		var free = this.mozaicImagesUrl.map(function(value,index) {
			var ret = null;
			if(!urls.contains(value)) {
				ret = index;
			}
			return ret;
		});
		free = free.clean();
		var ret = -1;
		if(free.length > 0) {
			var rand = Math.floor(Math.random()*free.length);
			ret = free[rand];
		}
		//echo(ret);
		return ret;
	},
	getFreeBox: function() {
		var free = new Array();
		this.freeBox.each(function(value,key) {
			if(value) {
				free.include(key);
			}
		});
		var rand = Math.floor(Math.random()*free.length);
		return free[rand];
	},
	test: function() {
		/*(function() {
			this.time+=10;
			this.test();
		}).delay(10,this);*/
	}
});
function initGallery() {
	var divGallery = $('galleryContainer');
	if(divGallery == null) {
		return;
	}
	// Lien enlarge :
	var firstLink = divGallery.getElement('#imagesArray .box a');
	divGallery.getElement('.random a').addEvent('click', function(e) {
		e.stop();
		firstLink.fireEvent('click');
	});
	
	var liens = divGallery.getElements('#imagesArray .box a');
	var fxLiens = new Array();
	liens.each(function(lien,index) {
		var fxLien = new Fx.Tween(lien, {'property':'opacity','duration':500}).set(1);
		fxLiens.include(fxLien);
	});
	liens.each(function(lien,index) {
		lien.addEvent('mouseenter', function(e) {
			fxLiens.each(function(fx,i) {
				if(i==index) {
					fx.cancel();
					fx.start(1);
				} else {
					fx.cancel();
					fx.start(0.4);
				}
			});
		});
		lien.addEvent('mouseleave', function(e) {
			fxLiens.each(function(fx,i) {
				fx.cancel();
				fx.start(1);
			});
		});
	});
}
function initScroll() {
	if($('flexpress')) {
		if(Browser.Platform.ios || Browser.Platform.android) {
			var flexpress = $('flexpress');
			var flexpress_id = flexpress.getProperty('id');
			var flexpress_class = flexpress.getProperty('class');
			flexpress.setProperty('id','');
			var wrap = new Element('div', {'id':flexpress_id, 'class':flexpress_class});
			wrap.inject(flexpress.getParent());
			flexpress.inject(wrap);
			
			var myScroll;
			myScroll = new iScroll('flexpress');
			document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
		} else {
			var scrollBox1 = new MooScroll({'selector':'#flexpress','disabledOpacity':0});
		}
	}
}
function initTeam() {
	var flexteam = $$('.flexteam');
	flexteam.each(function(div,index) {
		var sign = div.getElement('.signature');
		var wrap = sign.getElement('.wrap');
		var margeBase = wrap.getStyle('margin-top').toInt();
		var fx = new Fx.Tween(wrap, {'property':'margin-top','duration':300});
		div.addEvent('mouseenter', function(e) {
			fx.cancel();
			fx.start(0);
			this.addClass('actif');
		});
		div.addEvent('mouseleave', function(e) {
			fx.cancel();
			fx.start(margeBase);
			this.removeClass('actif');
		});
	});
}
function getListe(liste) {
	var theXjcHome = new xjcHomeMozaic(liste);
}
function xjcInit() {
	var divMozaic = $('homeMozaicContainer');
	if(divMozaic != null) {
		tx_xjcimg_pi1_getHomeImages();
	}
	initGallery();
	initScroll();
	initTeam();
}
window.addEvent('domready',function() {
	xjcInit();
});
