// 1010 JavaScript functions


var pageWidth = 980;
var pageHeight = 240;


window.addEvent('domready', function() {	
	catchWheel();
	
	replaceWithFont(document, 'h1', 350, 28, 24, 'ff8a00', 'ffffff', 4);
	replaceWithFont(document, 'h2', 340, 20, 17, '', 'ffffff', 2);
	
	forceMenu = true;
	
	menuScroll('menu0', 66, 0);
	menuScroll('menu1', 66, 0);
	menuScroll('menu2', 66, 0);
	menuScroll('menu3', 66, 0);
	
	doMenu(gotoMenu);
	
	forceMenu = false;
	menuLocked = false;
	
	try
	{
		DetectBrowser.init();
		if(DetectBrowser.browser == 'Safari')
		{
			$('content').setStyle('margin-top', '20px');
		}
	}
	catch(err) {}
});

function replaceWithFont(base, element, width, height, size, color, bgcolor, offset)
{
	base = $(base);
	allElements = base.getElementsByTagName(element);

	for(var i=0; i < allElements.length; i++)
	{
		var text = allElements[i].innerHTML;
		allElements[i].innerHTML = '<img src="font.php?w='+width+'&h='+height+'&s='+size+'&c='+color+'&b='+bgcolor+'&o='+offset+'&t='+encodeURI(text)+'" alt="'+text+'" title="'+text+'">';
	}
}

function catchWheel()
{															
	document.addEvent('mousewheel', function(e) {
		e = new Event(e).stop();
		
		if(e.wheel > 0)
		{
			scrollUp();
		}
		else
		{
			scrollDown();
		}
	});
}


function showBigImage(src)
{
	bigsrc = src.replace('thumb-', '');
	openWindow(bigsrc, 500, 500);
}

var wnd;
	
function openWindow(file, width, height)
{
	if(wnd) { wnd.close(); }
	
	left = window.screen.width / 2 - (width / 2);
	top = window.screen.height / 2 - (height / 2);
	
	width = width + 20;
	height = height + 20;
	
	option = 'width='+width+',height='+height+',menubar=no,status=no,location=no,toolbar=no,left='+left+',top='+top+',screenX='+left+',screenY='+top;
	wnd = window.open(file, 'image', option);
	wnd.focus();
}


/* MENU FUNCTIONS */
var firstSlide = true;

var currentMenu = -1;

var menuLocked = false;
var forceMenu = false;
var menuQueue = Array();


function doMenu(index)
{
	if(menuLocked && !forceMenu)
	{
		menuQueue.push(index);
		return;
	}
	
	menuLocked = true;
	
	speed = 750;
	if(firstSlide) speed = 0;
	
	if(currentMenu > -1 && currentMenu < 4)
	{
		menuScroll('menu'+currentMenu, 66, speed);
	}
	
	if(index < 4)
	{
		menuScroll('menu'+index, 0, speed);
	}
	else
	{
		menuLocked = false;
	}
	
	scrollToPage(index+1, speed);
	
	firstSlide = false;
	currentMenu = index;
}

function menuScroll(menuItem, direction, speed)
{
	var menuFx = new Fx.Scroll(menuItem, {duration: speed, transition: Fx.Transitions.Quad.easeInOut, onComplete:function(){releaseMenu(this);}});
	menuFx.start(0, direction);
}

function releaseMenu(obj)
{
	if(obj.element != $('menu'+currentMenu)) return;
	
	menuLocked = false;
	
	if(menuQueue.length > 0)
	{
		index = menuQueue[0];
		menuQueue.splice(0, 1);
		
		doMenu(index);
	}
}

/* PAGE SCROLLING */
var pageScrollPos = 0;	// side scrolling for pages
var pageDownPos = 0;		// down scrolling for more text
var scrollLocked = false;

function scrollToPage(index, speed)
{
	scrollLocked = true;
	pageScrollPos = (index-1) * pageWidth;
	pageDownPos = 0;
	
	doScroll(speed);
}

function scrollDown()
{
	if(scrollLocked) return;
	
	pageDownPos += pageHeight;
	doScroll(1000);
}

function scrollUp()
{
	if(scrollLocked) return;
	
	pageDownPos -= pageHeight;
	pageDownPos = (pageDownPos > 0)?pageDownPos:0;
	
	doScroll(500);
}


function scrollBoth(pageIndex, downIndex)
{
	pageScrollPos = (index-1) * pageWidth;
	pageDownPos = index * pageHeight;
	
	doScroll();
}


var pageFx;
function doScroll(speed)
{
	var maxYScroll = $('body').scrollHeight;
	var maxXScroll = $('body').scrollWidth;
	
	pageDownPos = (pageDownPos > maxYScroll)?maxYScroll-pageHeight:pageDownPos;
	pageScrollPos = (pageScrollPos > maxXScroll)?maxXScroll-pageWidth:pageScrollPos;
	
	if(pageFx != undefined)
		pageFx.cancel();
	
	pageFx = new Fx.Scroll('body', {duration: speed, transition: Fx.Transitions.Quad.easeInOut, wheelStops:false, onComplete:releaseScroll});
	pageFx.start(pageScrollPos, pageDownPos);
}

function releaseScroll()
{
	scrollLocked = false;
}



/// overlay

var overlayFx;

function resizeWnd() {
	$("overlay").setStyles({top: window.getScrollTop(), height: window.getHeight()});
}

function showBox(title, height) {
	currentWnd = $(title);
	windowFx = new Fx.Tween(currentWnd, {property: "height", duration: 400}).set(0);
	windowFx.start(height);
	
	currentWnd.setStyle('display', 'block');
	currentWnd.setStyle('z-index', '999');

	if(overlayFx) {
		overlayFx.cancel();
	}

	overlayFx = new Fx.Tween($('overlay'), {property: "opacity", duration: 300}).set(0);
	$('overlay').setStyle('display', 'block');
	overlayFx.start(0.8);
	
	$(document.body).setStyle('overflow', 'hidden');

	fetchKeys(true);
	resizeWnd();
}

function closeCurrent() {
	if(currentWnd != undefined) {
		if(currentWnd == $('loginWnd')) return false;
		
		$(currentWnd).setStyle('display', 'none');
		
		fetchKeys(false);
		closeOverlay();
		
		$(document.body).setStyle('overflow', 'auto');
	}

	currentWnd = undefined;
}

function closeOverlay() {
	if(overlayFx) {
		overlayFx.cancel();

		var overlay = $('overlay');

		overlayFx = new Fx.Tween(overlay, {property: "opacity", duration: 250, onComplete: hideOverlay});
		overlayFx.start(0.0);
	}
}
function hideOverlay() {
	$('overlay').setStyle('display','none');
}

function newNote(){
	var frm = document.forms['note'];
	frm.reset();
	
	showBox('noteWnd', 190);
}

function newFile() {
	showBox('fileWnd', 160);
}

function showLogin(){
	showBox('loginWnd', 140);
}

function keyDown(event) {
	switch(event.code) {
		case 27:	// Esc
			closeCurrent();
			break;
	}
	// Prevent default keyboard action (like navigating inside the page)
}

function fetchKeys(state) {
	var fn = state ? "addEvent" : "removeEvent";
	document[fn]("keydown", keyDown);
}
