/* ©2011 Didier Berck */

var Slider = Class.create({
						  
	initialize: function() {
		this.current = 0;
		this.news = new Array();
		this.stopped = false;
		$$('#news_slider div.news').each(function(elt) {
			var c = this.news.length;
			this.news[c] = new Array();
			this.news[c]['title'] = elt.down('h3').innerHTML.strip();
			this.news[c]['text'] = elt.down('p').innerHTML.strip();
			this.news[c]['link'] = elt.down('a').innerHTML.strip();
			this.news[c]['href'] = elt.down('a').readAttribute('href');
			this.news[c]['img'] = elt.down('img').src;
			if(this.news.length > 1) {
				elt.remove();
			}
		}, this);
		$('header').setStyle({
			backgroundImage: 'url(' + this.news[0]['img'] + ')'
		});
	},
				  
	start: function() {
		if(this.news.length > 1) {
			$('header').insert({
				top: '<img src="' + this.news[0]['img'] + '" id="slide" />'
			});
			$('slide').hide();
			$('slide').wrap('div', {
				'id': 'slide_wrapper'
			});
			$('header').down('div.content').setStyle({
				position: 'absolute',
				left: '50%',
				marginLeft: '-490px'
			});
			this.pe = new PeriodicalExecuter(this.peSlideChange.bind(this), 4);
			Event.observe('news_list', 'mouseover', function(evt) {
				this.pe.stop();
			}.bindAsMouseEnter(this));
			Event.observe('news_list', 'mouseout', function(evt) {
				if(!this.stopped) {
					this.pe = new PeriodicalExecuter(this.peSlideChange.bind(this), 4);
				}
			}.bindAsMouseLeave(this));
			var n = 0;
			$$('#news_nav a').each(function(elt) {
				elt.addClassName('n' + n);
				n++;
				Event.observe(elt, 'click', this.userChange.bind(this));
			}, this);
		}
	},
				  
	userChange: function(evt) {
		evt.stop();
		this.pe.stop();
		this.stopped = true;
		this.clearQueue('qA');
		this.clearQueue('qP');
		var elt = Event.findElement(evt, 'a');
		var c = elt.className.sub(/n/, '');
		var e = $('news_nav').down('ul').childElements()[this.current].down('img');
		e.src = e.src.gsub(/-selected/, '');
		elt.down('img').src = elt.down('img').src.sub(/\.png/, '-selected.png');
		$('news_list').down('h3').innerHTML = this.news[c]['title'];
		$('news_list').down('p').innerHTML = this.news[c]['text'];
		$('news_list').down('a').innerHTML = this.news[c]['link'];
		$('news_list').down('a').href = this.news[c]['href'];
		$('news_list').down('div').setOpacity(1);
		$('news_nav').down('ul').setOpacity(1);
		$('slide').src = this.news[c]['img'];
		$('slide').show();
		$('slide').setOpacity(1);
		this.current = c;
	},
	
	peSlideChange: function(pe) {
		var e = $('news_nav').down('ul').childElements()[this.current].down('img');
		e.src = e.src.gsub(/-selected/, '');
		this.current += 1;
		if(this.current >= this.news.length) {
			this.current = 0;
		}
		$('slide').hide();
		$('slide').src = this.news[this.current]['img'];
		new Effect.Appear('slide', {
			duration: 1.6,
			queue: { 
				position: 'end', 
				scope: 'qA'
			},
			afterFinish: function(eff) {
				$('header').setStyle({
					backgroundImage: 'url(' + $('slide').readAttribute('src') + ')'
				});
			}
		});
		new Effect.Parallel([
			new Effect.Fade($('news_list').down('div'), { sync: true }), 
			new Effect.Fade($('news_nav').down('ul'), { sync: true }) 
		], { 
			duration: 0.8,
			queue: {
				position: 'end',
				scope: 'qP'
			},
			afterFinish: function(eff) {
				$('news_list').down('h3').innerHTML = this.news[this.current]['title'];
				$('news_list').down('p').innerHTML = this.news[this.current]['text'];
				$('news_list').down('a').innerHTML = this.news[this.current]['link'];
				$('news_list').down('a').href = this.news[this.current]['href'];
				new Effect.Parallel([
					new Effect.Appear($('news_list').down('div'), { sync: true }), 
					new Effect.Appear($('news_nav').down('ul'), { sync: true }) 
				], { 
					duration: 0.8,
					queue: {
						position: 'end',
						scope: 'qP'
					},
					afterFinish: function(eff) {
						var e = $('news_nav').down('ul').childElements()[this.current].down('img');
						e.src = e.src.gsub(/\.png/, '-selected.png');
					}.bind(this)
				});
			}.bind(this)
		});
	},
	
	clearQueue: function(queueName) {
		var queue = Effect.Queues.get(queueName);
		queue.each(function(effect) {
			effect.cancel();
		});
	}
});

Event.observe(document, 'dom:loaded', function(evt) {
	var slider = new Slider();
	Event.observe(window, 'load', function(evt) {
		slider.start();  
	}); 
});
