var slideWorking = 0;
var autoSlideWorking = 0;
var slides = new Array;
var slideNames = new Array;
var slidesDelay = 1000;

function nonTextChildNodes(node) {
	var nonTextChildren = new Array;
	for(var i = 0; i < node.childNodes.length; i ++) {
		if(node.childNodes[i].nodeType == 1) {
			nonTextChildren.push(node.childNodes[i]);
		}		
	}
	return nonTextChildren;
}

function startSlide(slideId, totalWidth, width, index) {
	this.rail = document.getElementById(slideId).getElementsByTagName('div')[0];
	slides[slideId] = new Array;
	slides[slideId].totalWidth = totalWidth;
	slides[slideId].slideWidth = width;
	slides[slideId].index 		= 0;
	slides[slideId].begin 		= 0;
	slides[slideId].end 			= 0;
	slides[slideId].position 	= 0;
	slides[slideId].on 				= false;
	slides[slideId].auto 			= false;
	slides[slideId].direction = 1;
	slides[slideId].count 		= nonTextChildNodes(this.rail).length;
	slides[slideId].rail 			= this.rail;
	this.rail.style.width 		= (width * slides[slideId].count) + 'px';
	slideNames.push(slideId);
	if(index > 0) {
		setSlide(slideId, index);	
	} else if(index == -1) {
		switchSlide(slideId, true);
	}
}

function selectSlide(slideId, index) {
	if(typeof(slides[slideId]) != undefined) {
		slides[slideId].auto = false;
		setSlide(slideId, index);
	}
}

function nextSlide(slideId) {
	if(typeof(slides[slideId]) != undefined) {
		slides[slideId].auto = false;
		if(slides[slideId].index < slides[slideId].count - 1) {
			setSlide(slideId, slides[slideId].index + 1);
		}
	}
}

function previousSlide(slideId) {
	if(typeof(slides[slideId]) != undefined) {
		slides[slideId].auto = false;
		if(slides[slideId].index) {
			setSlide(slideId, slides[slideId].index - 1);
		}
	}
}

function setSlide(slideId, index) {
	if(typeof(slides[slideId]) != undefined) {
		if(slides[slideId].index != index && !slides[slideId].on) {
			slides[slideId].begin 		= -slides[slideId].slideWidth * slides[slideId].index;
			slides[slideId].position 	= slides[slideId].begin;
			slides[slideId].end 			= -slides[slideId].slideWidth * index;
			slides[slideId].index 		= index;
			slides[slideId].on 				= true;
			slideWorking++;
			slideToGoal();
		}
	}
}

function switchSlide(slideId, mode) {
	if(slides[slideId].auto != mode) {
		if(!mode) {
			autoSlideWorking--;
			slides[slideId].auto = false;
		} else {
			autoSlideWorking++;
			slides[slideId].auto = true;
			if(autoSlideWorking == 1)
				setTimeout('slideWatcher()', slidesDelay);
		}
	}
}

function slideWatcher() {
	if(autoSlideWorking) {
		for(var i = 0; i < slideNames.length; i++) {
			var slide = slides[slideNames[i]];
			if(slide.auto) {
				if(slide.index == (slide.count - 1)) {
					slide.direction = -1;
				} else if(!slide.index) {
					slide.direction = 1;
				}
				setSlide(slideNames[i], slide.index + slide.direction);
			}
		}
		setTimeout('slideWatcher()', slidesDelay);
	}
}

function slideToGoal() {
	if(slideWorking) {
		var keepUp = false;
		for(var i = 0; i < slideNames.length; i++) {
			var slide = slides[slideNames[i]];
			if(slide.on && slide.position != slide.end) {
				var step = (slide.end - slide.begin) / 10;
				if(Math.abs(slide.position + step - slide.end) < step || slide.position + step == slide.end) {
					slide.position 	= slide.end;
					slide.on 				= false;
					slideWorking--;
				} else {
					slide.position += step;			
					keepUp = true;
				}
				slide.rail.style.left = slide.position + 'px';
			}
		}
		if(keepUp) {
			setTimeout('slideToGoal()', 50);
		}
	}
}
