// enables/disables scrolling 
var scrolling	= false;
// scrolldirections
var GALLERY		= 1;
var HORIZONTAL	= 2;
var VERTICAL	= 3;
// maximum scrollspeed
var SCROLLSPEED	= 5;
// initial timeout
var INITTIMEOUT = 10;
// current scrollspeed
var speed		= SCROLLSPEED;
// timeout between scrollsteps
var timeout		= INITTIMEOUT;
// interval-resource for scrollTo-functions
var scrollToInterval;
var scrollInterval;

function galleryScroll(objID, scrollPane, factor) {
	var obj = document.getElementById(objID);
	
	obj.scrollLeft += (factor * speed);
	el = document.getElementById(scrollPane);
	if (el) {
		var scrollPaneWidth = el.scrollWidth;
		var scopeWidth = el.parentNode.offsetWidth;
		if (obj.scrollLeft >= scrollPaneWidth - scopeWidth + 2) {
//			obj.scrollLeft = scrollPaneWidth - scopeWidth;
			window.clearInterval(scrollInterval);
			return false;
		}
	}

	updateGalleryScrollButtons(obj);
}

function updateGalleryScrollButtons(obj) {
	// stop if no scrollpane exists
	if (!document.getElementById('tx-zmarubafe-thumbs-scrollpane')) return false;
	var scrollPaneWidth = document.getElementById('tx-zmarubafe-thumbs-scrollpane').scrollWidth;
	var scrollButtonLeft = document.getElementById('tx-zmarubafe-scroll-left');
	var scrollButtonRight = document.getElementById('tx-zmarubafe-scroll-right');
	var scrollButtonLeftOver = document.getElementById('tx-zmarubafe-scroll-left-over');
	var scrollButtonRightOver = document.getElementById('tx-zmarubafe-scroll-right-over');
	// stop if one of the buttons doesn't exist
	if (!scrollButtonLeft || !scrollButtonRight || !scrollButtonLeftOver || !scrollButtonRightOver) return false;
	
	var min = 0;
	var max = scrollPaneWidth - scopeWidth - 2;
	
	var leftOver = obj.scrollLeft <= min ? 'block' : 'none';
	var rightOver = obj.scrollLeft >= max ? 'block' : 'none';
	if (obj.scrollLeft >= max) {
		obj.scrollLeft = scrollPaneWidth - scopeWidth
	}
	scrollButtonLeftOver.style.display = leftOver;
	scrollButtonRightOver.style.display = rightOver;

	var left = obj.scrollLeft <= min ? '-inactive' : '';
	var right = obj.scrollLeft >= max ? '-inactive' : '';
	scrollButtonLeft.className = 'tx-zmarubafe-scrollbutton tx-zmarubafe-scroll-left' + left;
	scrollButtonRight.className = 'tx-zmarubafe-scrollbutton tx-zmarubafe-scroll-right' + right;
}

function scrollHorizontal(objID, factor) {
	var obj = document.getElementById(objID);
	obj.scrollLeft += (factor * speed);
}

function scrollVertical(objID, factor) {
	var obj = document.getElementById(objID);
	obj.scrollTop += (factor * speed);
}

function initScroll(dir, objID, scrollPane, factor) {
	var obj = document.getElementById(objID);
	// stop if the object doesn't exist
	if (!obj) return false;
	
	timeout = INITTIMEOUT;
	speed = SCROLLSPEED;
	if (dir == GALLERY) {
		scrollInterval = window.setInterval('galleryScroll(\'' + objID + '\', \'' + scrollPane + '\', ' + factor + ')', timeout);
	} else if (dir == HORIZONTAL) {
		scrollInterval = window.setInterval('scrollHorizontal(\'' + objID + '\', ' + factor + ')', timeout);
	} else if (dir == VERTICAL) {
		scrollInterval = window.setInterval('scrollVertical(\'' + objID + '\', ' + factor + ')', timeout);
	}
}

function scrollStop() {
	window.clearInterval(scrollInterval);
}

function galleryScrollTo(objID, pos, speed) {
	var obj = document.getElementById(objID);
	var factor = pos < obj.scrollLeft ? -1 : 1;
	var dist = Math.abs(pos - obj.scrollLeft);
	var offset = (dist / speed);
	if (dist <= speed) {
		offset = parseInt(Math.sqrt(dist));
		offset = offset <= 0 ? 1 : offset;
	}
	var scrollBefore = obj.scrollLeft;
	obj.scrollLeft += (factor * offset);
	if (obj.scrollLeft == pos || obj.scrollLeft == scrollBefore) {
		window.clearInterval(scrollToInterval);
		updateGalleryScrollButtons(obj);
	}
	if (document.getElementById('tx-zmarubafe-thumbs-scrollpane') &&
				document.getElementById('tx-zmarubafe-thumbs-scrollpane').style.width) {
		var scrollPaneWidth = document.getElementById('tx-zmarubafe-thumbs-scrollpane').scrollWidth;
		if (obj.scrollLeft >= scrollPaneWidth - scopeWidth) {
			obj.scrollLeft = scrollPaneWidth - scopeWidth;
			window.clearInterval(scrollToInterval);
			updateGalleryScrollButtons(obj);
		}
	}
}

function scrollTo(dir, objID, pos, speed) {
	var obj = document.getElementById(objID);
	// stop if the object doesn't exist
	if (!obj) return false;

	timeout = INITTIMEOUT;
	scrolling = false;
	if (dir == GALLERY) {
		scrollToInterval = window.setInterval('galleryScrollTo(\'' + objID + '\', ' + pos + ', ' + speed + ')', timeout);
	} else if (dir == HORIZONTAL) {
		scrollToInterval = window.setInterval('horizontalScrollTo(\'' + objID + '\', ' + pos + ', ' + speed + ')', timeout);
	} else if (dir == VERTICAL) {
		scrollToInterval = window.setInterval('verticalScrollTo(\'' + objID + '\', ' + pos + ', ' + speed + ')', timeout);
	}
}
