
addEvent(window, 'load', initGoogleStat);
addEvent(window, 'load', initLayout);
addEvent(window, 'load', initAbout);
addEvent(window, 'load', initArrows);

addEvent(window, 'DOMMouseScroll', wheel);
addEvent(window, 'mousewheel', wheel);
addEvent(document, 'mousewheel', wheel);

addEvent(window, 'load', fixHeight);
addEvent(window, 'resize', fixHeight);

function initGoogleStat() {
	_uacct = "UA-1497625-1";
	urchinTracker();
}


function initArrows() {
	removeClass(document.getElementById('leftArrow'), 'invisible');
	removeClass(document.getElementById('rightArrow'), 'invisible');

	setOpacity(document.getElementById('leftArrow'), 0.5);
	setOpacity(document.getElementById('rightArrow'), 0.5);

	addEvent(document.getElementById('leftArrow'), 'mouseover', activateArrow);
	addEvent(document.getElementById('leftArrow'), 'mouseout', deactivateArrow);
	addEvent(document.getElementById('leftArrow'), 'click', previousFrame);

	addEvent(document.getElementById('rightArrow'), 'mouseover', activateArrow);
	addEvent(document.getElementById('rightArrow'), 'mouseout', deactivateArrow);
	addEvent(document.getElementById('rightArrow'), 'click', nextFrame);

	checkArrows();
	addEvent(scrollFrames.scroll, 'scroll', checkArrows);
	preload('/images/right-s.gif');
	preload('/images/left-s.gif');
}

function activateArrow(e) {
	arrow = getTarget(e);
	addClass(arrow, 'active');
}

function deactivateArrow(e) {
	arrow = getTarget(e);
	removeClass(arrow, 'active');
}

function nextFrame() {
	var key = findCurrentFrameKey();
	if (key && scrollFrames.frames[key+1]) scrollToFrame(scrollFrames.frames[key+1]);
}

function previousFrame() {
	var key = findCurrentFrameKey();
	if (key && scrollFrames.frames[key-1]) scrollToFrame(scrollFrames.frames[key-1]);
}

function scrollToFrame(frameObj) {
	scrollFrames.scrollTo = min(geometry(scrollFrames.container).width() - geometry(scrollFrames.scroll).width(), max(geometry(frameObj).left() - getWindowWidth()/2 + geometry(frameObj).width()/2, 0));
	doScroll();
}

function findCurrentFrameKey() {
	var center = scrollFrames.scroll.scrollLeft + getWindowWidth()/2;
	for (var i=0; i <= scrollFrames.frames.length; i++) {
		if (geometry(scrollFrames.frames[i]).left() < center && geometry(scrollFrames.frames[i]).right() >= center)
			return i;
	}
}

function checkArrows() {
//	alert(scrollFrames.scroll.scrollLeft);
	if (scrollFrames.scroll.scrollLeft < 50) {
		addClass(document.getElementById('leftArrow'), 'invisible');
		removeClass(document.getElementById('leftArrow'), 'active');
	} else {
		removeClass(document.getElementById('leftArrow'), 'invisible');
	}
	
	if (geometry(scrollFrames.container).width() - scrollFrames.scroll.scrollLeft - geometry(scrollFrames.scroll).width() < 50) {
		addClass(document.getElementById('rightArrow'), 'invisible');
		removeClass(document.getElementById('rightArrow'), 'active');
	} else {
		removeClass(document.getElementById('rightArrow'), 'invisible');
	}
}



function initAbout() {
	var about = getElementsByClass(document, 'about');
	for (var i=0; i < about.length; i++) {
		addEvent(about[i], 'mouseover', showAboutFull);
		addEvent(about[i], 'mouseout', hideAboutFull);
		setOpacity(about[i], 0.8);
	}
}

function showAboutFull(e) {
	var about = getTarget(e)
	while(about && !isClass(about, 'about')) about = about.parentNode;
	addClass(about, 'full');
}

function hideAboutFull(e) {
	var about = getTarget(e)
	while(about && !isClass(about, 'about')) about = about.parentNode;
	removeClass(about, 'full');
}

function initLayout() {
	if (document.getElementById) {
		scrollFrames = {};
		scrollFrames.container = getElementsByClass(document, 'frames')[0];
		scrollFrames.scroll = document.getElementById('scroll');
		scrollFrames.frames = getElementsByClass(scrollFrames.container, 'frame');
		var length = 0;
		for (var i=0; i < scrollFrames.frames.length; i++) {
			length += geometry(scrollFrames.frames[i]).width();
			addEvent(scrollFrames.frames[i], 'click', scrollToFrame);
		}
		scrollFrames.container.style.width = length + 'px';
		scrollFrames.frames.sort(function(a,b) { return geometry(a).left()>geometry(b).left() ? 1 : -1; });

		scrollFrames.measureHeight = document.getElementById('measureHeight');
		if (getScrollerWidth() == 0) {
			scrollFrames.measureHeight.style.position = 'absolute';
			scrollFrames.measureHeight.style.bottom = 0;
		} else {
			scrollFrames.measureHeight.style.display = 'none';
		}
	}
}

function fixHeight() {
	document.getElementById('leftArrow').style.height = getFramesHeight() + 'px';
	document.getElementById('rightArrow').style.height = getFramesHeight() + 'px';
	scrollFrames.container.style.height = getFramesHeight() + 'px';
}

function getFramesHeight() {
	if (getScrollerWidth() == 0) {
		return geometry(scrollFrames.measureHeight).bottom();
	} else {
		return getWindowHeight()-getScrollerWidth();
	}
}

function doScroll() {
	var STEP = 200;
	if (scrollFrames.scroll.scrollLeft < scrollFrames.scrollTo && scrollFrames.scrollTo - scrollFrames.scroll.scrollLeft > STEP) {
		scrollFrames.scroll.scrollLeft += STEP;
		setTimeout(doScroll, 50);
	}
	else if (scrollFrames.scroll.scrollLeft > scrollFrames.scrollTo && scrollFrames.scroll.scrollLeft - scrollFrames.scrollTo > STEP) {
		scrollFrames.scroll.scrollLeft -= STEP;
		setTimeout(doScroll, 50);
	}
	else {
		scrollFrames.scroll.scrollLeft = scrollFrames.scrollTo;
	}
}


function wheel(e){
	var delta = 0;
	if (e.wheelDelta) {
		delta = e.wheelDelta/120;
		if (window.opera) delta = -delta;
	} else if (e.detail) {
		delta = -e.detail/3;
	}
	if (delta) scrollFrames.scroll.scrollLeft -= delta*10;
	stopEvent(e);
}


// http://www.fleegix.org/articles/2006/05/30/getting-the-scrollbar-width-in-pixels
function getScrollerWidth() {
	var scr = document.createElement('div');
	scr.style.position = 'absolute';
	scr.style.top = '-1000px';
	scr.style.left = '-1000px';
	scr.style.width = '300px';
	scr.style.height = '100px';

	var inn = document.createElement('div');
	inn.style.width = '100%';
	inn.style.height = '90px';
	scr.appendChild(inn);
	document.body.appendChild(scr);

	var wNoScroll = scr.scrollWidth;

	scr.style.overflow = 'scroll';
	inn.style.height = '300px';
	var wScroll = scr.scrollWidth;

	document.body.removeChild(document.body.lastChild);

	return (wNoScroll - wScroll);
}
