/**
 * JavaScript-Datei fuer das Scrollen zu Ankern;
 * Sucht zunaechst Anker-Links und dann die dazugehoerigen Anker;
 * Sind beide bekannt, so startet nach einem Klick auf den Anker-Link der Scrollvorgang
 * 
 * (c) Sascha Seeger-Kunth, 2009
 */

// Ein a-Tag mit Anker-Link finden
function searchAnchor() {
	var allLinks = window.document.getElementsByTagName("a");
	for (var i = 0; i < allLinks.length; i++) {
		if (allLinks[i].href.indexOf("#") != -1 && (allLinks[i].href.substr(allLinks[i].href.indexOf("#") + 1) != "")) {
			var link = allLinks[i];
			var anchor = link.href.substr(link.href.indexOf("#") + 1);
			searchDiv(link, anchor);
		}
	}
}

// Den zum a-Tag dazugehoerigen div-Tag mit dem Anker finden
function searchDiv(link, anchor) {
	var allDivs = window.document.getElementsByTagName("div");
	for (var j = 0; j < allDivs.length; j++) {
		if (allDivs[j].id == anchor) {
			var div = allDivs[j];
			link.onclick = function(e) {
				scrollToAnchor(div, e);
			};
		}
	}
}

// Nach einem Klick auf den Anker-Link (a-Tag) wird zum Anker (div-Tag) gescrollt
function scrollToAnchor(div, e) {
	
	// Die urspruengliche Klick-Aktion des Browser abbrechen, damit JavaScript-Scrollen funktioniert
	if (window.event) {
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	}
	if (e && e.preventDefault && e.stopPropagation) {
		e.preventDefault();
		e.stopPropagation();
	}
	
	// Destination of the innerContent-box is the offsetTop of the anchor-div * (-1)
	var contentDest = div.offsetTop * (-1); 
	// The current position of the innerContent-box
	var contentPos = window.document.getElementById("innerContent").offsetTop; 
	// The current height of the innerContent-box
	var contentHeight = window.document.getElementById("innerContent").offsetHeight; 
	
	// If the place behind the anchor-div is smaller than 329px then the innerContent-box has to scroll less
	if (contentHeight - div.offsetTop < 329) {
		var lessToScroll = 329 - (contentHeight - div.offsetTop);
		contentDest += lessToScroll;
	}
	
	// Calculate scroll-distance and scroll-duration
	var distance = contentDest - contentPos;
	var duration = distance / 800; // 800px per second
	if (duration < 0) {
		duration *= -1;
	}
	duration = parseFloat(duration);
	
	// Do the scroll-tween depending on destination and duration
	scrollTween = new Effect.Move("innerContent", {
		y: contentDest,
		mode: "absolute",
		duration: duration,
		transition: Effect.Transitions.sinoidal,
		afterUpdate: checkTextArrows
	});
}

