/*
// slider.js - (c) The Names | http://www.thenames.ru/
// V1.1
//
// FOR LEGEALTO.RU ONLY
//
// Requires: effects.js
// Requires: common.js
// Last updated: 2008-08-19
*/


// -----------------------------------------------------------------------------------
// Slider Functions.

var slidesElemName = 'slides';
var labelsElemName = 'sliderLabels';
var loaderElemName = 'loader';
var tabPrefix = 'tab';
var labelPrefix = 'label';
var tabClasses = ['smallQuad', 'smallQuadActive'];
var fadeStep = Browser.isSafari() ? 20 : 3;
var isSliderOff = (Browser.isFirefox() || (Browser.isIE() && Browser.versionMajor <= 6) ? true : false);

var slides = [];
var currentSlide = null;
var lastSlide, lastTab, slideTab, theScroll, position;
var slideScroller = new ScrollEffect('slideScroller');
var labelScroller = new ScrollEffect('labelScroller');

var index = 0;
var played = false;
var firstStop = false;
var slideshowInterval = 5000;
var slideshowTimer = null;

function InitSlides()
{
	var cumulate = isSliderOff ? false : true; // cumulative all sliders on a top level (works with IE7+ & Safari)
	var slidesElem = document.getElementById(slidesElemName);
	var loaderElem = document.getElementById(loaderElemName);
	if (!slidesElem) return;
	
	if (slidesElem.className == 'index') {
		for (var i = 0; i < slidesElem.childNodes.length; i++) {
			slides[i] = slidesElem.childNodes[i].getAttribute('id');
		}
		currentSlide = slides[0]; // set current slide
		StartSlideshow();
	} else {
		for (var i = 0; i < slidesElem.childNodes.length; i++) {
			slides[i] = slidesElem.childNodes[i].getAttribute('id');
			if (cumulate) {
				setIndex(slides[i], slidesElem.childNodes.length - i);
				setOpacity(0, slides[i]);
			}
		}
		currentSlide = slides[0]; // set current slide
		if (cumulate) {
			slidesElem.className = 'cumulate';
			fadeElementSetup(currentSlide, 0, 100, fadeStep); // show current slide
		}
	}
	
	// hide loader indicator
	loaderElem.style.display = 'none';
	slidesElem.style.display = 'block';
}

function SelectSlide(link, scrollArea)
{
	if (played) StopSlideshow();
	for (var i = 0; i < slides.length; i++) {
		if (link == slides[i]) {
			index = i;
			break;
		}
	}
	ScrollSlide(link, scrollArea);
}

// Scroll the page manually to the position of element "link", passed to us.

function ScrollSlide(link, scrollArea)
{
	if (currentSlide == link) return;
	
	toggleVars(link);

	theScroll = document.getElementById(scrollArea);
	position = document.getElementById(link).offsetTop;

	//slideScroller.scrollStart(theScroll, theScroll.scrollTop, position, 'vert', function () {
	//	ScrollLabel(link + labelPrefix, labelsElemName);
	//});
	slideScroller.scrollStart(theScroll, theScroll.scrollTop, position);
	ScrollLabel(link + labelPrefix, labelsElemName);
	return false;
}

// Fade label (on index).

function ScrollLabel(label, scrollArea)
{
	var scrollArea = document.getElementById(scrollArea);
	var offset = document.getElementById(label).offsetTop;
	labelScroller.scrollStart(scrollArea, scrollArea.scrollTop, offset);
}

// Fade slide.

function FadeSlide(link, scrollArea)
{
	if (isSliderOff) {
		ToggleSlide(link, scrollArea);
		return;
	}
	if (currentSlide == link) return;
	toggleVars(link);
	toggleSlides(lastSlide, currentSlide);
	return false;
}

function ToggleSlide(link, scrollArea)
{
	if (currentSlide == link) return;
	toggleVars(link);
	
	theScroll = document.getElementById(scrollArea);
	position = document.getElementById(link).offsetTop;
	theScroll.scrollTop = position;
	return false;
}

// Utils:

function toggleVars(link)
{
	lastSlide = currentSlide;
	currentSlide = link;

	slideTab = currentSlide + tabPrefix;
	document.getElementById(slideTab).className = tabClasses[1];

	if (lastSlide) {
		lastTab = lastSlide + tabPrefix;
		document.getElementById(lastTab).className = tabClasses[0];
	}
}

function toggleVisible(link) {
	var linkObject = document.getElementById(link);
	linkObject.style.display = (linkObject.style.display == 'block' ? 'none' : 'block');
}

function setIndex(link, value) {
	var linkObject = document.getElementById(link);
	linkObject.style.zIndex = value;
}

function toggleSlides(slide2hide, slide2show) {
	fadeElementSetup(slide2hide, 100, 0, fadeStep);
	fadeElementSetup(slide2show, 0, 100, fadeStep);
}


// -----------------------------------------------------------------------------------
// Animated Scroll Functions.
// Scrolls are asynchronous.

function ScrollEffect(name)
{
	this.name = name;
	eval(this.name + '=this');
	this.params = {time: 0, begin: 0, change: 0.0, duration: 0.0, element: null, timer: null, after: null};
	this.move = 0;
}

ScrollEffect.prototype.scrollStart = function (elem, start, end, direction, doAfter)
{
	if (this.params.timer != null) {
		clearInterval(this.params.timer);
		this.params.timer = null;
	}
	this.params.time = 0;
	this.params.begin = start;
	this.params.change = end - start;
	this.params.duration = 25;
	this.params.element = elem;
	this.params.after = doAfter;
	
	if (direction == 'horiz')
		this.params.timer = setInterval(this.name + '.scrollHorizAnim()', 15);
	else
		this.params.timer = setInterval(this.name + '.scrollVertAnim()', 15);
}

ScrollEffect.prototype.scrollVertAnim = function ()
{
	if (this.params.time > this.params.duration) {
		clearInterval(this.params.timer);
		this.params.timer = null;
		this.move = 0;
		if (this.params.after) this.params.after();
	} else {
		this.move = sineInOut(this.params.time, this.params.begin, this.params.change, this.params.duration);
		this.params.element.scrollTop = this.move; 
		this.params.time++;
	}
}

ScrollEffect.prototype.scrollHorizAnim = function ()
{
	if (this.params.time > this.params.duration) {
		clearInterval(this.params.timer);
		this.params.timer = null;
		this.move = 0;
		if (this.params.after) this.params.after();
	} else {
		this.move = sineInOut(this.params.time, this.params.begin, this.params.change, this.params.duration);
		this.params.element.scrollLeft = this.move;
		this.params.time++;
	}
}


// -----------------------------------------------------------------------------------
// Slideshow Functions.

function StartSlideshow()
{
	if (played) return;
	slideshowTimer = setInterval('NextSlide();', slideshowInterval);
	if (firstStop) NextSlide();
	played = true;
	//toggleSlideshowButtons();
}

function NextSlide()
{
	index = (index == slides.length - 1 ? 0 : index + 1);
	ScrollSlide(slides[index], slidesElemName);
}

function StopSlideshow()
{
	if (!played) return;
	played = false;
	clearInterval(slideshowTimer);
	//toggleSlideshowButtons();
	if (!firstStop) firstStop = true;
}

function toggleSlideshowButtons() {
	var states = [];
	if (played) states = ['none', 'block'];
	else states = ['block', 'none'];
	document.getElementById('ctrlPlay').style.display = states[0];
	document.getElementById('ctrlPause').style.display = states[1];
}


// Initialize Slider
RegisterEventHandler(window, 'load', InitSlides);
