var WdSlideshow = new Class
({
	Implements: [ Options ],

	options:
	{
		autoplay: false,
		autopause: false,
		autodots: false,
		browse:
		{
			previous: null,
			next: null
		},
		direction: 'left',
		delay: 4000,
		duration: 'normal'
	},

	initialize: function(el, options)
	{
		this.element = $(el);
		this.element.style.position = 'relative';
		this.element.store('slideshow', this);

		if (!options)
		{
			options = {};
		}

		if (this.element.hasClass('autoplay'))
		{
			options.autoplay = true;
		}

		if (this.element.hasClass('autopause'))
		{
			options.autopause = true;
		}

		if (this.element.hasClass('left'))
		{
			options.direction = 'left';
		}

		if (this.element.hasClass('right'))
		{
			options.direction = 'right';
		}

		if (this.element.hasClass('top'))
		{
			options.direction = 'top';
		}

		if (this.element.hasClass('bottom'))
		{
			options.direction = 'bottom';
		}

		this.slices = this.element.getChildren();

		if (this.slices.length < 2)
		{
			return;
		}

		this.setOptions(options);

		if (this.options.autodots)
		{
			var dots = new Element('ul', { 'class': 'dots '});

			for (var i = 0 ; i < this.slices.length ; i++)
			{
				dots.adopt(new Element('li'));
			}

			console.log('dots: %a', dots);

			this.element.adopt(dots);
		}

		var is_vertical = (this.options.direction == 'top' || this.options.direction == 'bottom');

		var tweenProperty = is_vertical ? 'top' : 'left';
		var el_size = this.element.getSize();

		this.el_size = el_size;

		var hidden = this.getHiddenPositions();
		var hidden_start = hidden.start;

		var tweens = [];
		var slices = this.slices;
		var slices_count = slices.length;

		for (var i = 0 ; i < slices_count ; i++)
		{
			var slice = slices[i];

			tweens[i] = new Fx.Tween(slice, { property: tweenProperty, link: 'chain', duration: this.options.duration });

			var styles =
			{
				position: 'absolute',
				top: is_vertical ? el_size.y * i : 0,
				left: is_vertical ? 0 : el_size.x * i
			};

			if (i > 0)
			{
				styles[tweenProperty] = hidden_start;
			}

			slice.setStyles(styles);
		}

		this.tweens = tweens;
		this.index = 0;

		//
		// browse
		//

		if (this.options.browse.previous)
		{
			this.options.browse.previous.addEvent
			(
				'click', function(ev)
				{
					ev.stop();

					this.previous();
				}
				.bind(this)
			);
		}

		if (this.options.browse.next)
		{
			this.options.browse.next.addEvent
			(
				'click', function(ev)
				{
					ev.stop();

					this.next();
				}
				.bind(this)
			);
		}

		//
		// autopause
		//

		if (this.options.autopause)
		{
			function leave(ev)
			{
				var c = this.element.getCoordinates();
				var x = ev.page.x;
				var y = ev.page.y;

				//console.log('leave: %a, %d <= %d <= %d, %d <= %d <= %d', ev, c.left, x, c.right, c.top, y, c.bottom);

				if (c.left <= x && c.right >= x && c.top <= y && c.bottom >= y)
				{
					return;
				}

				this.play();
			}

			this.element.addEvents
			({
				mouseenter: this.pause.bind(this),
				mouseleave: leave.bind(this)
			});
		}

		//
		// autoplay
		//

		if (this.options.autoplay)
		{
			this.play();
		}
	},

	play: function()
	{
		if (this.timer)
		{
			return;
		}

		this.timer = this.next.periodical(this.options.delay, this);
	},

	pause: function()
	{
		if (!this.timer)
		{
			return;
		}

		clearInterval(this.timer);

		this.timer = null;
	},

	setActive: function(i, direction, immediate)
	{
		var length = this.slices.length;
		var out_i = this.index % length;
		var in_i = i % length;

		this.index = in_i;

		if (out_i == in_i)
		{
			return;
		}

		var pos = this.getHiddenPositions(direction);

		if (immediate)
		{
			this.tweens[out_i].set(pos.finish);
			this.tweens[in_i].set(0);
		}
		else
		{
			this.tweens[out_i].start(0, pos.finish);
			this.tweens[in_i].start(pos.start, 0);
		}
	},

	next: function()
	{
		this.setActive(this.index + 1);
	},

	previous: function()
	{
		this.setActive(this.index + this.slices.length - 1, 'right');
	},

	getHiddenPositions: function(direction)
	{
		direction = direction || this.options.direction;

		var is_vertical = (direction == 'top' || direction == 'bottom');
		var size = this.el_size[is_vertical ? 'y' : 'x'];

		var start;
		var finish;

		switch (direction)
		{
			case 'bottom':
			case 'right':
			{
				start = -size - 1;
				finish = size;
			}
			break;

			case 'top':
			case 'left':
			{
				start = size;
				finish = -size - 1;
			}
			break;
		}

		return { start: start, finish: finish};
	}
});

(function()
{
	var news_view;
	var news_view_position;

	window.addEvent
	(
		'domready', function()
		{
			var title = $(document.body).getElement('#affichator h3');

			if (title)
			{
				var news_active = title.id.substr(5);
				var link = $('link-' + news_active);

				if (link)
				{
					link.addClass('active');

					var list = link.getParent('ul');

					news_view = list.getParent();
					news_view_position = news_view.getChildren().indexOf(list);
				}
			}

			//
			// news li click
			//

			var navigator = $('navigator');

			if (navigator)
			{
				navigator.addEvent
				(
					'click', function(ev)
					{
						var target = ev.target;

						if (target.tagName != 'LI')
						{
							return;
						}

						var link = target.getElement('a');

						window.location = link.href;
					}
				);
			}

			//
			// exclusive-fader
			//

			$$('#navigation ol.lv1,.exclusive-fader').each
			(
				function(parent)
				{
					var children = parent.getChildren();

					//console.log('duration: %s', parent.className.match(/duration:([^\s]+)/));

					var duration = 'normal';

					if (parent.getParent('#navigation'))
					{
						duration = 'short';
					}

					children.each
					(
						function(child)
						{
							child.set('tween', { property: 'opacity', duration: duration, link: 'cancel' });

							child.addEvents
							({
								mouseenter: function()
								{
									for (var i = 0 ; i < children.length ; i++)
									{
										var el = children[i];

										if (el == child)
										{
											//el.fade(1);
											el.get('tween').start(1);
										}
										else
										{
											//el.fade(.5);
											el.get('tween').start(.5);
										}
									}
								}
							});
						}
					);

					parent.addEvent
					(
						'mouseleave', function(ev)
						{
							for (var i = 0 ; i < children.length ; i++)
							{
								var el = children[i];

								el.get('tween').start(1);
							}
						}
					);
				}
			);

			//
			// hover-fader
			//

			$$('.hover-fader').each
			(
				function (el)
				{
					el.addEvents
					({
						mouseenter: function()
						{
							this.fade(.5);
						},

						mouseleave: function()
						{
							this.fade(1);
						}
					});
				}
			);
		}
	);

	window.addEvent
	(
		'load', function()
		{
			//
			// slides
			//

			$$('div.wd-view').each
			(
				function(view)
				{
					var browse = view.getNext().getElements('a[href$=previous],a[href$=next]');

					var slide = new WdSlideshow
					(
						view,
						{
							browse:
							{
								previous: browse[0],
								next: browse[1]
							}
						}
					);
				}
			);

			if (news_view_position)
			{
				news_view.retrieve('slideshow').setActive(news_view_position, null, true);
			}
		}
	);

}) ();

/**
 * Measure
 */

(function(){var a=function(d,c){var e=[];Object.each(c,function(f){Object.each(f,function(g){d.each(function(h){e.push(h+"-"+g+(h=="border"?"-width":""));
});});});return e;};var b=function(e,d){var c=0;Object.each(d,function(g,f){if(f.test(e)){c=c+g.toInt();}});return c;};Element.implement({measure:function(h){var d=function(j){return !!(!j||j.offsetHeight||j.offsetWidth);
};if(d(this)){return h.apply(this);}var g=this.getParent(),i=[],e=[];while(!d(g)&&g!=document.body){e.push(g.expose());g=g.getParent();}var f=this.expose();
var c=h.apply(this);f();e.each(function(j){j();});return c;},expose:function(){if(this.getStyle("display")!="none"){return function(){};}var c=this.style.cssText;
this.setStyles({display:"block",position:"absolute",visibility:"hidden"});return function(){this.style.cssText=c;}.bind(this);},getDimensions:function(c){c=Object.merge({computeSize:false},c);
var h={x:0,y:0};var g=function(i,e){return(e.computeSize)?i.getComputedSize(e):i.getSize();};var d=this.getParent("body");if(d&&this.getStyle("display")=="none"){h=this.measure(function(){return g(this,c);
});}else{if(d){try{h=g(this,c);}catch(f){}}}return Object.append(h,(h.x||h.x===0)?{width:h.x,height:h.y}:{x:h.width,y:h.height});},getComputedSize:function(c){c=Object.merge({styles:["padding","border"],planes:{height:["top","bottom"],width:["left","right"]},mode:"both"},c);
var e={},d={width:0,height:0};if(c.mode=="vertical"){delete d.width;delete c.planes.width;}else{if(c.mode=="horizontal"){delete d.height;delete c.planes.height;
}}a(c.styles,c.planes).each(function(f){e[f]=this.getStyle(f).toInt();},this);Object.each(c.planes,function(g,f){var h=f.capitalize();e[f]=this.getStyle(f).toInt();
d["total"+h]=e[f];g.each(function(j){var i=b(j,e);d["computed"+j.capitalize()]=i;d["total"+h]+=i;});},this);return Object.append(d,e);}});})();

/**
 * sliders and knobs
 */

var Slider=new Class({Implements:[Events,Options],Binds:["clickedElement","draggedKnob","scrolledElement"],options:{onTick:function(a){if(this.options.snap){a=this.toPosition(this.step);
}this.knob.setStyle(this.property,a);},initialStep:0,snap:false,offset:0,range:false,wheel:false,steps:100,mode:"horizontal"},initialize:function(f,a,e){this.setOptions(e);
this.element=document.id(f);this.knob=document.id(a);this.previousChange=this.previousEnd=this.step=-1;var g,b={},d={x:false,y:false};switch(this.options.mode){case"vertical":this.axis="y";
this.property="top";g="offsetHeight";break;case"horizontal":this.axis="x";this.property="left";g="offsetWidth";}this.full=this.element.measure(function(){this.half=this.knob[g]/2;
return this.element[g]-this.knob[g]+(this.options.offset*2);}.bind(this));this.setRange(this.options.range);this.knob.setStyle("position","relative").setStyle(this.property,-this.options.offset);
d[this.axis]=this.property;b[this.axis]=[-this.options.offset,this.full-this.options.offset];var c={snap:0,limit:b,modifiers:d,onDrag:this.draggedKnob,onStart:this.draggedKnob,onBeforeStart:(function(){this.isDragging=true;
}).bind(this),onCancel:function(){this.isDragging=false;}.bind(this),onComplete:function(){this.isDragging=false;this.draggedKnob();this.end();}.bind(this)};
if(this.options.snap){c.grid=Math.ceil(this.stepWidth);c.limit[this.axis][1]=this.full;}this.drag=new Drag(this.knob,c);this.attach();if(this.options.initialStep!=null){this.set(this.options.initialStep);
}},attach:function(){this.element.addEvent("mousedown",this.clickedElement);if(this.options.wheel){this.element.addEvent("mousewheel",this.scrolledElement);
}this.drag.attach();return this;},detach:function(){this.element.removeEvent("mousedown",this.clickedElement);this.element.removeEvent("mousewheel",this.scrolledElement);
this.drag.detach();return this;},set:function(a){if(!((this.range>0)^(a<this.min))){a=this.min;}if(!((this.range>0)^(a>this.max))){a=this.max;}this.step=Math.round(a);
this.checkStep();this.fireEvent("tick",this.toPosition(this.step));this.end();return this;},setRange:function(a,b){this.min=Array.pick([a[0],0]);this.max=Array.pick([a[1],this.options.steps]);
this.range=this.max-this.min;this.steps=this.options.steps||this.full;this.stepSize=Math.abs(this.range)/this.steps;this.stepWidth=this.stepSize*this.full/Math.abs(this.range);
this.set(Array.pick([b,this.step]).floor(this.min).max(this.max));return this;},clickedElement:function(c){if(this.isDragging||c.target==this.knob){return;
}var b=this.range<0?-1:1;var a=c.page[this.axis]-this.element.getPosition()[this.axis]-this.half;a=a.limit(-this.options.offset,this.full-this.options.offset);
this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();this.fireEvent("tick",a);this.end();},scrolledElement:function(a){var b=(this.options.mode=="horizontal")?(a.wheel<0):(a.wheel>0);
this.set(b?this.step-this.stepSize:this.step+this.stepSize);a.stop();},draggedKnob:function(){var b=this.range<0?-1:1;var a=this.drag.value.now[this.axis];
a=a.limit(-this.options.offset,this.full-this.options.offset);this.step=Math.round(this.min+b*this.toStep(a));this.checkStep();},checkStep:function(){if(this.previousChange!=this.step){this.previousChange=this.step;
this.fireEvent("change",this.step);}},end:function(){if(this.previousEnd!==this.step){this.previousEnd=this.step;this.fireEvent("complete",this.step+"");
}},toStep:function(a){var b=(a+this.options.offset)*this.stepSize/this.full*this.steps;return this.options.steps?Math.round(b-=b%this.stepSize):b;},toPosition:function(a){return(this.full*Math.abs(this.min-a))/(this.steps*this.stepSize)-this.options.offset;
}});

window.addEvent
(
	'domready', function()
	{
		$$('div.wd-slider').each
		(
			function (el)
			{
				var container = el.getParent();
				var sliding = container.getElement('div.wd-sliding');

				var c_dim = container.getDimensions();
				var s_dim = sliding.getDimensions();
				var c_h = c_dim.height;
				var s_h = s_dim.height;

				var diff = s_h - c_h;

				var knob = el.getElement('.knob');
				var knob_h = Math.round((s_h / c_h) * diff);

				/*
				console.log('dim: %a, %a, diff: %d', c_dim, s_dim, diff);
				console.log('knob height: ', knob_h);
				*/

				knob.setStyle('height', knob_h);

				var slider = new Slider
				(
					el, knob,
					{
						steps: diff,
						mode: 'vertical',
						snap: true,
						onChange: function(value)
						{
							sliding.setStyle('margin-top', -value);
						}
					}
				);

				sliding.addEvent
				(
					'mousewheel', function(ev)
					{
						var target = ev.target;

						if (!target.getParent('div.wd-sliding'))
						{
							return;
						}

						ev.stop();

						slider.set(slider.step - ev.wheel * 8);
					}
				);
			}
		);
	}
);
