
// the ECI_cloak Class for toggle-cloaks
var ECI_cloak = Class.create();
ECI_cloak.prototype = {
	initialize: function(customParams) {
		var defaultParams = {
			handlersContainerId: 'evenements-liste',
			handlersTagName: 'li',
			delay: 20,
			instanceName: 'eci_cloak',
			buttons: false,
			stopSlidingAt: 50
		};
		this.$ = $H(defaultParams).merge(customParams);
		this.$.delay *= 1000;
		this.countSliding = 0;
		this.timer = null;
		var controllers = this.$.buttons ?
			this.getTemplates().controllers :
			"<script>alert('buttons param undefined!')</script>";
		this.controllers = new Template(controllers);
		Event.observe(window, 'load', this.onDOMReady.bindAsEventListener(this));
	}, // initialize
	getAnchor: function(string) {
		return string.replace(/.*#(.+)$/,'$1');
	}, // getAnchor
	getIndexOfVisible: function() {
		return this.cloaks.indexOf(this.getVisible());
	}, // getIndexOfVisible
	getNext: function(random) {
		return random ?
			this.cloaks[Math.floor(Math.random()*this.cloaks.size())] :
			this.cloaks[this.getIndexOfVisible()+1] || this.cloaks.first();
	}, // getNext
	getPrevious: function() {
		return this.cloaks[this.getIndexOfVisible()-1] || this.cloaks.last();
	}, // getPrevious
	getTemplates: function() {
		var p = this.$.buttons.previous;
		var n = this.$.buttons.next;
		var c = this.$.buttons.continuer;
		var s = this.$.buttons.select;
		return $H({
			controllers: (
				'<div id="controllers" style="top:-25px;left:-120px;z-index:'+
						'5000;position:absolute;width:400px;">'+
					'<img title="'+p.label+'" alt="'+p.label+'" src="'+p.src+
						'" onclick="#{instance}.showPrevious(event)" />'+
					'<img id="slideshow-buttons-select" style="display:none" '+
						'title="'+s.label+'" alt="'+s.label+'" src="'+s.src+
						'" onclick="#{instance}.stopSlide(event)" />'+
					'<img id="slideshow-buttons-continuer" style="display:inline" '+
						'title="'+c.label+'" alt="'+c.label+'" src="'+c.src+
						'" onclick="#{instance}.startSlide(event)" />'+
					'<img title="'+n.label+'" alt="'+n.label+'" src="'+n.src+
						'" onclick="#{instance}.showNext(event)" />'+
				'</div>'+
			'')
		});
	}, // getTemplates
	getVisible: function() {
		return this.cloaks.find(function(cloak) {
			return cloak.visible();
		});
	}, // getVisible
	onDOMReady: function(event) {
		if (!this.setElements()) return;
		new Insertion.Top($('evenements'), this.controllers.evaluate({instance:this.$.instanceName}));
		!!this.showQueried() ? setTimeout('window.scrollTo(0,0)',200) : this.startSlide(false, true);
	}, // onDOMReady
	setElements: function() {
		this.cloaks = $A([]);
		this.cloaksHandlers = $(this.$.handlersContainerId).getElementsByTagName(this.$.handlersTagName);
		if (this.cloaksHandlers.length < 2) return false;
		for (var i = 0, len = this.cloaksHandlers.length; i < len; ++i) {
		    var cloakHandler = this.cloaksHandlers[i];
			cloakHandler.style.cursor = 'pointer';
			var handler = cloakHandler.getElementsByTagName('a')[0];
			var cloakId = this.getAnchor(handler.href);
			handler.removeAttribute('href');
			var cloak = $(cloakId);
			Event.observe(cloakHandler, 'click', this.show.bindAsEventListener(this, cloak));
			Event.observe(cloak, 'click', this.stopSlide.bindAsEventListener(this));
			Element.hide(cloak);
			this.cloaks.push(cloak);
		}
		return this.cloaks;
	}, // setElements
	showNext: function(event, random) {
		if (event || this.$.stopSlidingAt == ++this.countSliding) this.stopSlide();
		this.show(false, this.getNext(random));
	}, // showNext
	showPrevious: function(event) {
		if (event) this.stopSlide(event);
		this.show(false, this.getPrevious());
	}, // showPrevious
	showQueried: function() {
		var query = this.getAnchor(self.location.href);
		var queried = this.cloaks.find(function(cloak){
			return cloak.readAttribute('id') == query;
		});
		return this.show(false, queried);
	}, // showQueried
	startSlide: function(event, random) {
		this.stopSlide();
		this.showNext(false, random);
		if ($('slideshow-buttons-select')) $('slideshow-buttons-select').show();
		if ($('slideshow-buttons-continuer')) $('slideshow-buttons-continuer').hide();
		this.timer = setInterval(this.showNext.bind(this, false, false), this.$.delay);
	}, // startSlide
	stopSlide: function(event) {
		if ($('slideshow-buttons-select')) $('slideshow-buttons-select').hide();
		if ($('slideshow-buttons-continuer')) $('slideshow-buttons-continuer').show();
		clearInterval(this.timer);
		this.countSliding = 0;
	}, // stopSlide
	show: function(event, cloak) {
		if (!cloak) return false;
		if (event) this.stopSlide();
		if (this.getVisible()) {
			this.cloaksHandlers[this.getIndexOfVisible()].removeClassName('courant');
			Element.hide(this.getVisible());
		}
		Element.show(cloak);
		this.cloaksHandlers[this.getIndexOfVisible()].addClassName('courant');
		if (Scroller) setTimeout(Scroller.updateAll, 10);
		try { this.fixLayout(event, cloak) } catch(e) {}
		return cloak;
	}, // show
	fixLayout: function(event, cloak) {
		var ul = $(cloak.getElementsByTagName('ul')[0]);
		[ul, cloak].each(function(el) { // disable min-height to get real height
			el.style.minHeight = '0';
		});

		// if divImage getHeight
		var divImage = $$('#' + cloak.id + ' .image');
		divImageHeight = divImage.length == 1 ? $(divImage[0]).getHeight() : 0;

		var height = Math.max(cloak.getHeight(), ul.getHeight(), divImageHeight);
		// fix height of ul.meta-donnees to not be higher than div.evenement
		if (!cloak.fixed && height) {
			[ul, cloak].each(function(el) {
				el.style.height = height + 'px';
			});
			cloak.fixed = true;
		} else { // re-inherit min-height from style sheets
			[ul, cloak].each(function(el) {
				el.style.minHeight = '';
			});
		}
		// position div#legende link just under the last li of ul.meta-donnees
		if (height) { // if we were able to fix height...
			var lis = ul.getElementsByTagName('li');
			var lastLi = $(lis[lis.length-1]);
			$('legende').style.bottom = 'auto';
			$('legende').style.top = lastLi.getHeight() + Position.cumulativeOffset(lastLi)[1] + 'px';
		} else { // ...if not, revert to style sheets values
			$('legende').style.bottom = '0';
			$('legende').style.top = 'auto';
		}
		// hide the "more dates" layer if visible
		var moreLess = lastLi.getElementsByClassName('more-less');
		if (moreLess && moreLess[0]) {
			var span = lastLi.getElementsByTagName('span')[0];
			if (span.style.display != 'none') moreLess[0].onclick();
		}
	} // fixLayout
} // ECI_cloak.prototype

// toggle more dates
function moreLess(lien, id, txt) {
	// <a href="#" onclick="return moreLess(this, 'info-adm-suppl')"
	txt = txt || { more: 'Autres dates &gt;&gt;&gt;', less: '&lt;&lt;&lt; Cacher' }
	$(id).toggle();
	$(lien).update($(id).visible() ? txt.less : txt.more);
	if ($(lien).blur) { $(lien).blur(); }
	return false;
} // moreLess

// generic toggle function
function toggleDisplay(elements) {
	if (!(elements instanceof Array)) elements = [elements];
	for (var i = 0, len = elements.length; i < len; ++i) {
		var element = elements[i];
		var style = element.style || document.getElementById(element).style;
		with (style) {
			display = display == 'none' ? '' : 'none';
		}
	}
}
Event.observe(window, "load", function() {
	// coins ronds
	var imgs = $('evenements').getElementsByTagName('img');
	for (var i = 0, len = imgs.length; i < len; ++i) {
		var img = imgs[i];
		if (!$(img.parentNode).hasClassName('image')) continue;
		var src = img.src;
		var height = img.height;
		var parent = img.parentNode;
		img.style.display = 'none';
		new Insertion.Top(parent, '<div class="coins-ronds"><div class="src" style="background-image: url(\''+ src +'\'); height:'+ height +'px"><div style="height:'+ height +'px" class="milieu"><div style="height:'+ height +'px" class="haut"><div style="height:'+ height +'px" class="bas"></div></div></div></div></div>');
	}
	// slider
	var ul = $('evenements-liste'), div = $('evenements-liste-scroll');
	if (div.getHeight() > ul.getHeight()) return;
	div.style.overflow = 'hidden';
	$('menu-principal').style.left = '493px';
	$$('#menu-principal li').each(function(li) {
		li.style.width = '191px';
		if (li.hasClassName('pardate')) li.style.left = '3px';
	});
	if (Prototype.Browser.IE) ul.style.paddingLeft = '10px';
	Scroller.setAll();
	Event.observe(window, "resize", Scroller.updateAll);
});

