YAHOO.namespace('Cazaux.Home.Effects');

////////////////////////////////////////////////////////////////////////
YAHOO.namespace('Cazaux.Home.Effects.Fade');
////////////////////////////////////////////////////////////////////////
YAHOO.Cazaux.Home.Effects.Fade.Out = function(id) {
	var elt = new YAHOO.util.Dom.get(id);
	var elt_attrs = {};
	YAHOO.util.Dom.setStyle(id, 'position', 'absolute');
	// YAHOO.util.Dom.setStyle(id, 'zIndex', 10);
	var anim = new YAHOO.util.Anim(id, {
		opacity: {to: 0}
	}, 1);
	anim.onComplete.subscribe(function(){ 
		for (var i in elt_attrs) {
			YAHOO.util.Dom.setStyle(id, i, elt_attrs[i]);
		};
		YAHOO.util.Dom.setStyle(id, 'opacity', '');
		// YAHOO.util.Dom.setStyle(id, 'zIndex', null);
		YAHOO.util.Dom.setStyle(id, 'display', 'none');
	});
	return anim;
}
YAHOO.Cazaux.Home.Effects.Fade.In = function(id) {
	var elt = new YAHOO.util.Dom.get(id);
	var elt_attrs = {};
	elt_attrs.display = YAHOO.util.Dom.getStyle(id, 'display');
	// elt_attrs.position = YAHOO.util.Dom.getStyle(id, 'position');
	YAHOO.util.Dom.setStyle(id, 'position', 'absolute');
	YAHOO.util.Dom.setStyle(id, 'opacity', 0);
	YAHOO.util.Dom.setStyle(id, 'display', '');
	// YAHOO.util.Dom.setStyle(id, 'zIndex', 9);
	
	// YAHOO.util.Dom.setStyle(id, 'position', 'absolute');
	var anim = new YAHOO.util.Anim(id, {
		opacity: {to: 1}
	}, 1);
	anim.onComplete.subscribe(function(){ 
		for (var i in elt_attrs) {
			YAHOO.util.Dom.setStyle(id, i, '');
		};
		// YAHOO.util.Dom.setStyle(id, 'opacity', '');
		YAHOO.util.Dom.setStyle(id, 'zIndex', '');
		
	})
	return anim;
}

////////////////////////////////////////////////////////////////////////
YAHOO.namespace('Cazaux.Home.Effects.Slide');
////////////////////////////////////////////////////////////////////////
YAHOO.Cazaux.Home.Effects.Slide.Out = function(id) {
	var el = new YAHOO.util.Element(id);
	el.setStyle('zIndex', 9);
	var parent = YAHOO.util.Dom.getAncestorByClassName(id, 'block');
	var parent = new YAHOO.util.Element(parent);
	// var overflow_value = parent.getStyle('overflow');
	// var position_value = parent.getStyle('position');
	parent.setStyle('overflow', 'hidden');
	parent.setStyle('position', 'relative');
	el.setStyle('position', 'absolute');
	// // var child = el.getElementsByTagName('img')[0];
	// var width = parent.getStyle('width');
	// if(width.lastIndexOf('px')!=-1) {
	// 	width = width.substring(0, width.length-2);
	// }
	var anim = new YAHOO.util.Anim(id, {
		// marginLeft: {to: -width}
	}, 1);
	anim.onComplete.subscribe(function () {
		el.setStyle('display', 'none');
		// parent.setStyle('position', null);
		parent.setStyle('overflow', '');
	// 	// el.setStyle('margin-left', null);
	// 	// el.setStyle('position', null)
		el.setStyle('zIndex', '');
	});
	return anim;
}
YAHOO.Cazaux.Home.Effects.Slide.In = function(id) {
	var el = new YAHOO.util.Element(id);
	var parent = YAHOO.util.Dom.getAncestorByClassName(id, 'block');
	var parent = new YAHOO.util.Element(parent);
	var overflow_value = parent.getStyle('overflow');
	var position_value = parent.getStyle('position');
	parent.setStyle('overflow', 'hidden');
	parent.setStyle('position', 'relative');
	el.setStyle('position', 'absolute');
	el.setStyle('zIndex', 10);
	// var child = el.getElementsByTagName('img')[0];
	var width = parent.getStyle('width');
	// if(width.lastIndexOf('px')!=-1) {
	// 		width = width.substring(0, width.length-2);
	// 	}
	el.setStyle('left', width);
	el.setStyle('display', '');
	var anim = new YAHOO.util.Anim(id, {
		left: {to: 0}
	}, 1);
	anim.onComplete.subscribe(function () {
		el.setStyle('left', '');
		// parent.setStyle('position', null);
		parent.setStyle('overflow', '');
		// el.setStyle('position', null);
		// el.setStyle('zIndex', null);
	});
	return anim;
}

////////////////////////////////////////////////////////////////////////
YAHOO.namespace('Cazaux.Home.Effects.E3');
////////////////////////////////////////////////////////////////////////
YAHOO.Cazaux.Home.Effects.E3.Out = function(id) {
	var elt = new YAHOO.util.Element(id);
	// var height_value = elt.getStyle('height');
	// if(height_value.lastIndexOf('px')!=-1) {
	// 	height_value = height_value.substring(0, height_value.length-2);
	// }
	// var width_value = elt.getStyle('width');
	// if(width_value.lastIndexOf('px')!=-1) {
	// 	width_value = width_value.substring(0, height_value.length-2);
	// }
	var zIndex_value = elt.getStyle('z-index');
	elt.setStyle('z-index', -1);
	var anim = new YAHOO.util.Anim(id, {}, 1);
	anim.onComplete.subscribe(function(){ elt.setStyle('display', 'none'); elt.setStyle('z-index', ''); })
	return anim;
}
YAHOO.Cazaux.Home.Effects.E3.In = function(id) {
	var el = new YAHOO.util.Element(id);
	var parent = YAHOO.util.Dom.getAncestorByClassName(id, 'block');
	var parent = new YAHOO.util.Element(parent);
	var overflow_value = parent.getStyle('overflow');
	var position_value = parent.getStyle('position');
	parent.setStyle('overflow', 'hidden');
	parent.setStyle('position', 'relative');
	el.setStyle('position', 'absolute');
	el.setStyle('zIndex', 10);
	// var child = el.getElementsByTagName('img')[0];
	var width = parent.getStyle('width');
	var height = parent.getStyle('height');
	// if(width.lastIndexOf('px')!=-1) {
	// 		width = width.substring(0, width.length-2);
	// 	}
	el.setStyle('left', width);
	el.setStyle('top', "-"+height);	
	el.setStyle('display', '');
	var anim = new YAHOO.util.Anim(id, {
		left: {to: 0},
		top: {to: 0}
	}, 1);
	anim.onComplete.subscribe(function () {
		el.setStyle('left', '');
		// parent.setStyle('position', null);
		parent.setStyle('overflow', '');
		// el.setStyle('position', null);
		// el.setStyle('zIndex', null);
	});
	return anim;
}

////////////////////////////////////////////////////////////////////////
//			Blind Effect
////////////////////////////////////////////////////////////////////////
//Blind is buggy with floating elements
YAHOO.Cazaux.Home.Effects.Blind = function (in_elt, out_elt) {
	if(in_elt)
		YAHOO.Cazaux.Home.Effects.Blind.Out(out_elt);
	if(out_elt)
		YAHOO.Cazaux.Home.Effects.Blind.In(in_elt);
}
YAHOO.Cazaux.Home.Effects.Blind.Out = function(id) {
	var el = new YAHOO.util.Element(id);
	var overflow_value = el.getStyle('overflow');
	var position_value = el.getStyle('position');
	el.setStyle('overflow', 'hidden');
	el.setStyle('position', 'relative');
	var el_width = el.getStyle('width');
	if(el_width.lastIndexOf('px')!=-1) {
		el_width = el_width.substring(0, el_width.length-2);
	}
	var anim = new YAHOO.util.Anim(id, {
		width: {to: 0}
	}, 3);
	anim.onComplete.subscribe(function () {
		el.setStyle('overflow', overflow_value);
		el.setStyle('position', position_value);
	});
	return anim;
}
YAHOO.Cazaux.Home.Effects.Blind.In = function(id) {
	var el = new YAHOO.util.Element(id);
	var overflow_value = el.getStyle('overflow');
	var position_value = el.getStyle('position');
	el.setStyle('overflow', 'hidden');
	el.setStyle('position', 'relative');
	var el_width = el.getStyle('width');
	if(el_width.lastIndexOf('px')!=-1) {
		el_width = el_width.substring(0, el_width.length-2);
	}
	el.setStyle('width', '0px');
	// el.setStyle('margin-left', width);
	// var child = el.getElementsByTagName('img')[0];
	// var child = YAHOO.util.Selector.query('img', el.get('id'), true);
	// YAHOO.util.Dom.setStyle(child, 'margin-left', width+'px');
	var anim = new YAHOO.util.Anim(id, {
		width: {to: el_width}
	}, 3);
	anim.onComplete.subscribe(function () {
		el.setStyle('overflow', overflow_value);
		el.setStyle('position', position_value);
	});
	return anim;
}

////////////////////////////////////////////////////////////////////////
// YAHOO.namespace('Cazaux.Home.Anim');
////////////////////////////////////////////////////////////////////////
YAHOO.Cazaux.Home.Anim = function(args) {
	this.order = args.order;
	this.init(args.data);
	YAHOO.lang.later(1500, this, this.run);
	// this.run();
	// for (var j=0; j < this.aAnimData.length; j++) {
	// 	var set = this.aAnimData[j];
	// 	this.aAnimData[j] = new YAHOO.Cazaux.Home.Diaporama(this.aAnimData[j].data);
	// 	this.aAnimData[j].effect.onComplete.subscribe();
	// };
};
YAHOO.Cazaux.Home.Anim.prototype = {
	delay: 1500,
	order: [],
	index: 0,
	aAnimData : [],
	// _passes: 1,
	init: function(data) {
		for (var i=0; i < data.length; i++) {
			var elt_data = data[i];
			var result_set = YAHOO.Cazaux.Home.Diaporama(elt_data);
			this.aAnimData.push(result_set);
		}
	},
	run: function() {
		// if(--this._passes<0) { return false; };
		var current_index = this.order[this.index%this.order.length];
		this.aAnimData[current_index].effect.onComplete.subscribe(this._afterEffect, this, true);
		this.aAnimData[current_index].effect.animate();
	},
	_afterEffect: function() {
		// setTimeout...   Comment changer le scope d'une fonction anonyme avec YUI ?
		YAHOO.lang.later(this.delay, this, function() {
			++this.index;
			var previous_index = this.order[(this.index-1)%this.order.length];
			this.aAnimData[previous_index] = YAHOO.Cazaux.Home.Diaporama(this.aAnimData[previous_index].data);
			this.run();
		});
		// this.aAnimData[previous_index].effect.animate()
	}
};

// YAHOO.Cazaux.Home.Anim = function(data) {
// 	var aAnimData = [];
// 	for (var i=0; i < data.length; i++) {
// 		var elt_data = data[i];
// 		// if(i==0) //test
// 		var result_set = new YAHOO.Cazaux.Home.Diaporama(elt_data);
// 		aAnimData.push(result_set);
// 	};
// 	var j = 0;
// 	for (var i=0; i < aAnimData.length; i++) {
// 		var _i = i;
// 		aAnimData[i].effect.onComplete.subscribe(function(){
// 			var data = result_set.data;
// 			j++;
// 			aAnimData[_i] = new YAHOO.Cazaux.Home.Diaporama(data);
// 			setTimeout(function(){
// 				var index = (j%aAnimData.length);
// 				console.log(i);
// 				aAnimData[index].effect.animate();
// 			}, 1000);
// 			
// 		})
// 	};
// 	aAnimData[0].effect.animate();
// 	
// 	// var D1 = new YAHOO.Cazaux.Home.Diaporama('b1', YAHOO.Cazaux.Home.Effects.Fade, data.liveData['b1']);
// 	
// 	// var e1 = YAHOO.Cazaux.Home.Effects.Fade.Out('b1');
// 	// var e2 = YAHOO.Cazaux.Home.Effects.E3.In('b2');
// 	// var e3 = YAHOO.Cazaux.Home.Effects.Fade.Out('b3');
// 	// var e4 = YAHOO.Cazaux.Home.Effects.Fade.Out('b4');
// 	// var e5 = YAHOO.Cazaux.Home.Effects.Fade.Out('b5');
// 
// 	// e1.onComplete.subscribe(function(){ setTimeout(function(){e2.animate()}, 1000) });
// 	// e2.onComplete.subscribe(function(){ setTimeout(function(){e3.animate()}, 1000) });
// 	// e3.onComplete.subscribe(function(){ setTimeout(function(){e4.animate()}, 1000) });
// 	// e4.onComplete.subscribe(function(){ setTimeout(function(){e5.animate()}, 1000) });
// 	// e5.onComplete.subscribe(function(){ setTimeout(function(){e1.animate()}, 1000) });
// 	// e1.animate();
// }

YAHOO.Cazaux.Home.Diaporama = function(elt_data) { // elt_data <-> (pics, _index, effect)
	var id = elt_data.element;
	var _effect = elt_data.effect;
	var pics = elt_data.pics;
	var current = elt_data._index;
	var old_img = null;
	if(current==-1) { 	//1st pass
		var inn_HTML = "";
		for (var i=0; i < pics.length; i++) {
			inn_HTML= inn_HTML+ "<img style='display:none' src='"+pics[i]+"' />";
		};
		YAHOO.util.Dom.get(id).innerHTML = inn_HTML;
	}
	else {
			var img_nodes = YAHOO.util.Selector.query('img', id);
			var old_img = img_nodes[current];
	}
	var img_nodes = YAHOO.util.Selector.query('img', id);
	var next = (current+1)%(pics.length);
	var current_img = img_nodes[next];
	YAHOO.util.Dom.setStyle(current_img, 'display', 'none');
	var in_effect = null;
	if(old_img){
		in_effect = _effect.In(current_img);
		in_effect.onStart.subscribe(function(){ _effect.Out(old_img).animate(); });
	}
	else {
		next = (next+1)%pics.length;
		in_effect = _effect.In(img_nodes[next]);
		YAHOO.Cazaux.Home.Effects.Fade.In(current_img).animate();
	}
	var new_data = elt_data; new_data._index = next;
	return {"effect": in_effect, "data": new_data};
}

