document.observe("dom:loaded", function() {
	menu = $("home-menu");
	skipMenu = $("skip-intro");
	musicControl = $("music-control");
	$("header-bg").hide();
	$("header-nav").hide();
	$("background").hide();
	menu.parentNode.removeChild(menu);
	skipMenu.parentNode.removeChild(skipMenu);
	musicControl.parentNode.removeChild(musicControl);
	realContent = $("content").innerHTML;
	$("content").update("Loading... <a href='#' onclick='finish(); return false;'>Skip Introduction</a>");
	
	if(window.location.hash == "#nointro")
	{
		finish();
	}
	else
	{
		$("wrapper").appendChild(menu);
		menu.style.left = "740px";
		menu.style.position = "absolute";
		menu.style.top = "390px";
		menu.style.zIndex = 6;
		menu.partOfIntro = true;
		menu.hide();
		$("wrapper").appendChild(skipMenu);
		$("wrapper").appendChild(musicControl);
		skipMenu.style.display = "block";
		skipMenu.style.zIndex = 6;
		skipMenu.partOfIntro = true;
		
		preloadImages(start, finish);
	}
});

soundManager.debugMode = false;
soundManager.url = "Scripts/soundmanager2.swf";
soundManager.onload = function() {
	if(skipIntro)
		return;
	var play = false;
	if(music)
		play = true;
	music = soundManager.createSound({
		id: 'intro-music',
		url: 'intro/music.mp3',
		volume: 100,
		onfinish: function() {
			this.play();
		}
	});
	if(play)
		music.play();
};

var music;
var menu, skipMenu;
var root = "intro/";
var skipIntro = false;
var realContent;

function preloadImages(callback, onerror) {
	var images = [
		'splash-bg-1.jpg',
		'splash-bg-2.jpg',
		'splash-bg-3.jpg',
		'splash-bg-4.jpg',
		'splash-text-1-1.jpg',
		'splash-text-1-2.jpg',
		'splash-text-1-3.jpg',
		'splash-text-1-4.jpg',
		'splash-text-2-1.jpg',
		'splash-text-2-2.jpg',
		'splash-text-2-3.jpg',
		'splash-text-3-1.jpg',
		'splash-text-3-2.jpg',
		'splash-text-3-3.jpg',
		'splash-text-4-1.jpg',
		'splash-text-4-2.jpg',
		'splash-text-4-3.jpg',
		'splash-home-cover.jpg',
		'../images/home-background.jpg'
	];
	var at = 0, num = images.length;
	
	function loadOne() {
		var mySrc = images.shift();
		if(!mySrc)
			return;
		
		var img = $(document.createElement("img"));
		img.style.height = "1px";
		img.style.left = "-1px";
		img.style.position = "absolute";
		img.style.top = "0";
		img.style.width = "1px";
		img.src = root + mySrc;
		document.body.appendChild(img);
		function got() {
			try {
				document.body.removeChild(img);
			}
			catch(e) {
			}
			at++;
			if(at >= num)
				callback.call();
			else
				loadOne();
		}
		img.observe("error", function() {
			onerror.call();
			onerror = function() { };
		});
		if(img.complete)
			got();
		else
			img.observe("load", got);
	}
	
	for(var parallel = 0; parallel < 6; parallel++)
		loadOne();
}

function start() {
	if(skipIntro)
		return;
	$("content").update("");
	if(music)
		music.play();
	else
		music = true;
	
	var lineOffsets = {
		1: {
			1: [ 157, 455 ],
			2: [ 88, 487 ],
			3: [ 232, 512 ],
			4: [ 340, 536 ]
		},
		2: {
			1: [ 432, 25 ],
			2: [ 681, 50 ],
			3: [ 828, 76 ]
		},
		3: {
			1: [ 67, 494 ],
			2: [ 174, 516 ],
			3: [ 466, 547 ]
		},
		4: {
			1: [ 109, 475 ],
			2: [ 391, 498 ],
			3: [ 250, 526 ]
		},
		5: {
			1: [ 423, 127 ]
		}
	};
	
	var homecover = $(document.createElement("img"));
	homecover.partOfIntro = true;
	homecover.src = root + "splash-home-cover.jpg";
	homecover.style.display = "none";
	homecover.style.left = lineOffsets[5][1][0] + "px";
	homecover.style.position = "absolute";
	homecover.style.top = lineOffsets[5][1][1] + "px";
	$("wrapper").appendChild(homecover);
	
	var slidebg = [ ];
	var slidetext = [ 0, 4, 3, 3, 3 ];
	for(var i = 1; i <= 4; i++)
	{
		var bg = $(document.createElement("img"));
		bg.partOfIntro = true;
		bg.src = root + "splash-bg-" + i + ".jpg";
		bg.style.display = "none";
		bg.style.height = "600px";
		bg.style.left = "0";
		bg.style.position = "absolute";
		bg.style.top = "0";
		bg.style.width = "955px";
		bg.style.zIndex = i + 1;
		$("wrapper").appendChild(bg);
		slidebg[i] = bg;
		
		var textCount = slidetext[i];
		slidetext[i] = [ ];
		for(var j = 1; j <= textCount; j++) {
			var line = $(document.createElement("img"));
			line.partOfIntro = true;
			line.src = root + "splash-text-" + i + "-" + j + ".jpg";
			line.style.display = "none";
			line.style.left = lineOffsets[i][j][0] + "px";
			line.style.position = "absolute";
			line.style.top = lineOffsets[i][j][1] + "px";
			line.style.zIndex = i + 1;
			$("wrapper").appendChild(line);
			slidetext[i][j] = line;
		}
	}
	
	new Effect.Parallel([
		new Effect.Appear(slidebg[1]),
		new Effect.Appear(menu)
	], { queue: 'end' });
	new Effect.Appear(slidetext[1][1], { queue: 'end' });
	new Effect.Appear(slidetext[1][2], { queue: 'end' });
	new Effect.Appear(slidetext[1][3], { queue: 'end' });
	new Effect.Appear(slidetext[1][4], { queue: 'end' });
	new Effect.Appear(slidebg[2], { delay: 3, queue: 'end' });
	new Effect.Appear(slidetext[2][1], { queue: 'end' });
	new Effect.Appear(slidetext[2][2], { queue: 'end' });
	new Effect.Appear(slidetext[2][3], { queue: 'end' });
	new Effect.Appear(slidebg[3], { delay: 3, queue: 'end' });
	new Effect.Appear(slidetext[3][1], { queue: 'end' });
	new Effect.Appear(slidetext[3][2], { queue: 'end' });
	new Effect.Appear(slidetext[3][3], { queue: 'end' });
	new Effect.Appear(slidebg[4], { delay: 3, queue: 'end' });
	new Effect.Appear(slidetext[4][1], { queue: 'end' });
	new Effect.Appear(slidetext[4][2], { queue: 'end' });
	new Effect.Appear(slidetext[4][3], { queue: 'end',
		afterFinish: function() {
			slidebg[1].remove();
			slidebg[2].remove();
			slidebg[3].remove();
			slidetext[1][1].remove();
			slidetext[1][2].remove();
			slidetext[1][3].remove();
			slidetext[1][4].remove();
			slidetext[2][1].remove();
			slidetext[2][2].remove();
			slidetext[2][3].remove();
			slidetext[3][1].remove();
			slidetext[3][2].remove();
			slidetext[3][3].remove();
			homecover.show();
			$("header-bg").show();
			$("header-nav").show();
			$("background").show();
		}
	});
	new Effect.Parallel([
		new Effect.Fade(slidebg[4], { sync: true }),
		new Effect.Fade(slidetext[4][1], { sync: true }),
		new Effect.Fade(slidetext[4][2], { sync: true }),
		new Effect.Fade(slidetext[4][3], { sync: true }),
		new Effect.Fade(menu, { sync: true }),
		new Effect.Fade(skipMenu, { sync: true })
	], { delay: 3, queue: 'end',
		afterFinish: function() {
			slidebg[4].remove();
			slidetext[4][1].remove();
			slidetext[4][2].remove();
			slidetext[4][3].remove();
			menu.remove();
			skipMenu.remove();
		}
	});
	new Effect.Fade(homecover, { queue: 'end',
		afterFinish: function() {
			homecover.remove();
			finish();
		}
	});
}

function finish() {
	$("header-bg").show();
	$("header-nav").show();
	$("background").show();
	menu.show();
	$("content").update(realContent);
	window.location.hash = "#nointro";
	
	skipIntro = true;
	Effect.Queue.each(function(effect) { effect.cancel(); });
	
	$("wrapper").childElements().each(function(e) {
		if(e.partOfIntro) {
			if(e.visible()) {
				var o = e.style.opacity || 1;
				new Effect.Fade(e, { start: o, afterFinish: e.remove.bind(e) });
			}
			else
				e.remove();
		}
	});
}
