/*
Eggs, ©Copyright 2006 - bezumie.com, All Rights Reserved
Яйчица, ©Copyright 2006 - bezumie.com, Всички права запазени
*/
var soundVol = 50;

function SetCookie (name, value) {
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	document.cookie = name + "=" + escape (value) +
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
	((path == null) ? "" : ("; path=" + path)) +
	((domain == null) ? "" : ("; domain=" + domain)) +
	((secure == true) ? "; secure" : "");
}

function getCookieVal (offset) {
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)
	endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name, DefaultVal) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return getCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break; 
	}
	return DefaultVal;
}

var gameIsOver = true;
var gameIsPaused = false;
var eggs = new Array();
var maxTicks;
var nextEgg = 0;
var wolfPos;
var score = 0;
var errs = 0;
var gameTimeout;
var errTimeout;
var halfTimeout;
var duckTicks = 0;
var isDuck = false;
var keyLT = 'A';
var keyLB = 'Z';
var keyRT = 'K';
var keyRB = 'M';

 /* common functions */
function random(minValue, maxValue) {
	return Math.floor(Math.random() * (maxValue - minValue + 1) + minValue);
}

function randSlide() {
	switch (random(1,4)){
		case 1: return 'LT'; break;
		case 2: return 'LB'; break;
		case 3: return 'RT'; break;
		case 4: return 'RB'; break;
	}
}

function addEgg(){
	var slide = randSlide();
	for (var i=0; i<eggs.length; i++){
		// ако има яйце на началната позиция не се слага ново
		if ((eggs[i].slide == slide) && (eggs[i].pos == 1)) return false;		
	}
	var egg = new Object();
	egg.slide = slide;
	egg.pos = 1;
	egg.ticks = 0;
	eggs.push(egg);
	document.getElementById('egg'+egg.slide+'1').style.display = 'block';
	soundManager.setVolume(egg.slide, soundVol);
	soundManager.play(egg.slide);
	soundManager.setVolume(egg.slide, soundVol);
	return egg;
}

function loop(){
	if (gameIsOver) return;
	if (gameIsPaused) return;
	var i = 0;
	var n = eggs.length;
	var sound = '';
	while (i < n) {
		// проверка дали е дошло времето на яйчицето да се премести
		eggs[i].ticks++;
		if (eggs[i].ticks >= maxTicks) {
			eggs[i].ticks = 0;
			document.getElementById('egg'+eggs[i].slide+eggs[i].pos).style.display = 'none';
			eggs[i].pos ++;
			if (eggs[i].pos > 5) {
				// поемаме яйцето
				if (wolfPos == eggs[i].slide){
					soundManager.setVolume('catch', soundVol);
					soundManager.play('catch');
					soundManager.setVolume('catch', soundVol);
					
					score++;
					if (score % 95 == 0) maxTicks--;
					updateScore();
					if (((score == 200) || (score == 500)) && (errs > 0)){
						errs = errs - 2;
						if (errs < 0) errs = 0;
						if (errs < 4) document.getElementById('err2').style.display = 'none';
						if (errs < 2) document.getElementById('err1').style.display = 'none';
						halfErr();
					}					
					eggs.splice(i, 1);
					i--;
					n--;					
				}
				// изпускаме яйцето
				else {
					clearTimeout(gameTimeout);
					soundManager.setVolume('miss', soundVol);
					soundManager.play('miss');
					soundManager.setVolume('miss', soundVol);
					die(eggs[i].slide);
					return;
				}
			}
			else {
				document.getElementById('egg'+eggs[i].slide+eggs[i].pos).style.display = 'block';
				if (sound == '') sound = eggs[i].slide;
			}
		}
		i++;
	}
	
	if (sound != '') {
		soundManager.setVolume(sound, soundVol);
		soundManager.play(sound);
		soundManager.setVolume(sound, soundVol);
	}
	
	nextEgg--;
	if (nextEgg <= 0) {
		if (addEgg()) {
			if (score < 5) nextEgg = maxTicks * 5;
			else if (score < 10) nextEgg = random(20, 50);
			else if (score < 20) nextEgg = random(17, 40);
			else if (score < 40) nextEgg = random(16, 35);
			else if (score < 60) nextEgg = random(15, 30);
			else if (score < 100) nextEgg = random(14, 25);
			else if (score < 140) nextEgg = random(13, 25);
			else if (score < 180) nextEgg = random(8, 20);
			else if (score < 200) nextEgg = random(15, 20);
			else if (score < 220) nextEgg = random(12, 18);
			else if (score < 270) nextEgg = random(10, 18);
			else if (score < 320) nextEgg = random(9, 18);
			else if (score < 370) nextEgg = random(8, 17);
			else if (score < 430) nextEgg = random(7, 16);
			else if (score < 480) nextEgg = random(6, 15);
			else if (score < 520) nextEgg = random(5, 14);
			else if (score < 600) nextEgg = random(4, 13);
			else if (score < 700) nextEgg = random(3, 12);
			else nextEgg = random(2, 11);
		}
	}
	duckTicks--;
	if (duckTicks <= 0){
		var duck = document.getElementById('duck').style;
		if (!isDuck) {
			duck.display = 'block';
			duckTicks = maxTicks * random(5, 15);
			isDuck = true;
		}
		else{
			duck.display = 'none';
			duckTicks = maxTicks * random(16, 30);
			isDuck = false;
		}
	}
	if (!gameIsOver && !gameIsPaused)
		gameTimeout = setTimeout("loop()", 50);
}

function updateScore(){
	var sc = score.toString();
	var n = sc.length;
	for (var i=1; i<=n; i++){
		var obj = document.getElementById('score' + i);
		obj.style.backgroundImage = "url('img/" + sc.charAt(n-i) + ".gif')";
		if (obj.style.display = 'block');
	}
}

function scoreC(){
	for (var i=1; i<5; i++)
		document.getElementById('score' + i).style.display = 'none';
}

var dieLoopId;
function die(slide){
	if (slide=='LT' || slide=='LB') var side = 'L';
	else var side = 'R';
	document.getElementById('fall'+side).style.display = 'block';
	document.getElementById('fall'+side+'1').style.display = 'block';	
	eggs = new Array();
	eggC();
	if (isDuck){
		errs++;
		dieLoopId = 6;
	}
	else {
		errs++;
		halfErr();
		errs++;
		dieLoopId = 1;
	}
	errTimeout = setTimeout("dieLoop('"+side+"')", 600);
}

function dieLoop(side){
	dieLoopId--;
	if (dieLoopId <= 1){
		clearTimeout(errTimeout);
		if (errs >= 6) {
			soundManager.setVolume('gameover', soundVol);
			soundManager.play('gameover');
			soundManager.setVolume('gameover', soundVol);
			gameOver();
		}
		else {
			dieC();
			halfErr();
			gameTimeout = setTimeout("loop()", 300);
		}
	}
	else {
		document.getElementById('fall' + side + (6-dieLoopId)).style.display = 'none';
		if (dieLoopId > 1) document.getElementById('fall' + side + (6-dieLoopId+1)).style.display = 'block';
		errTimeout = setTimeout("dieLoop('" + side + "')", 500);
	}
}

function halfErr(){
	clearTimeout(halfTimeout);
	// ako imame polovin greshka
	if (errs % 2 == 1){
		var er = Math.floor((errs + 1)/2);
		var obj = document.getElementById('err' + er);
		if (obj.style.display == 'none') obj.style.display = 'block';
		else obj.style.display = 'none';
		halfTimeout = setTimeout("halfErr()", 700);
	}
	else {
		var er = errs/2;
		if (er > 0){
			var obj = document.getElementById('err' + er);
			obj.style.display = 'block';
		}
	}
}

function dieC(){
	document.getElementById('fallL').style.display = 'none';
	document.getElementById('fallR').style.display = 'none';
	for (var i=1; i<6; i++){
		document.getElementById('fallL'+i).style.display = 'none';
		document.getElementById('fallR'+i).style.display = 'none';
	}
}

function errC(){
	errs = 0;
	half = false;
	for (var i=1; i<4; i++)
		document.getElementById('err'+i).style.display = 'none';
}

function duckC(){
	document.getElementById('duck').style.display = 'none';
}

function initEvents(){
	// за да не се скролва OPERA (но се появява друг проблем)
	/*if (document.addEventListener) document.addEventListener("keypress", keyDown, true)
	else {
		if ((self.Event) && (self.Event.KEYPRESS)) document.captureEvents(Event.KEYPRESS);
		document.onkeypress = keyDown;
	}*/
	window.document.onkeydown = keyDown;
}

function newGame(){	
	keyLT = (GetCookie('Eggs_keyLT', keyLT)).charCodeAt(0);
	keyLB = (GetCookie('Eggs_keyLB', keyLB)).charCodeAt(0);
	keyRT = (GetCookie('Eggs_keyRT', keyRT)).charCodeAt(0);
	keyRB = (GetCookie('Eggs_keyRB', keyRB)).charCodeAt(0);
	document.getElementById('keyLT').innerHTML = String.fromCharCode(keyLT);
	document.getElementById('keyLB').innerHTML = String.fromCharCode(keyLB);
	document.getElementById('keyRT').innerHTML = String.fromCharCode(keyRT);
	document.getElementById('keyRB').innerHTML = String.fromCharCode(keyRB);
	
	soundVol = parseInt(GetCookie('Eggs_vol', soundVol));
	volume(0);
	
	soundManager.setVolume('catch', soundVol);
	soundManager.setVolume('over', soundVol);
	soundManager.setVolume('miss', soundVol);
	soundManager.setVolume('LT', soundVol);
	soundManager.setVolume('RT', soundVol);
	soundManager.setVolume('LB', soundVol);
	soundManager.setVolume('RB', soundVol);
	
	initEvents();
	dieC();
	eggC();
	scoreC();
	errC();
	duckC();
	score = 0;
	updateScore();
	gameIsOver = false;
	maxTicks = 10;
	LT();
	loop();
}

function keyDown(e) {
	var ch;
	var ctrl=false;
	if (e) { // Netscape/Firefox/Opera
		ch=e.which;
		ctrl=((e.ctrlKey) || (e.metaKey) || (e.altKey) || (e.modifiers));
	}
	else if (window.event) { // IE  
		ch=window.event.keyCode;
		ctrl= ((window.event.ctrlKey) || (window.event.altKey) || (window.event.metaKey));
	}
	else return true;
	if (ctrl) return true;
	
	if (gameIsOver) return;

	switch (ch) {
		case keyLT:
			if (!gameIsPaused) LT();
			break; 
		case keyLB:
			if (!gameIsPaused) LB(); 
			break; 
		case keyRT:
			if (!gameIsPaused) RT(); 
			break; 
		case keyRB:
			if (!gameIsPaused) RB(); 
			break; 
		case 19: // или Pause/Break
			pauseGame(); // pause/resume
			break; 
		default: return true;
	}

	if ((window.event) && (window.event.preventDefault)) window.event.preventDefault()
	else if ((e) && (e.preventDefault)) e.preventDefault();
	if ((window.event) && (window.event.stopPropagation)) window.event.stopPropagation()
	else if ((e) && (e.stopPropagation)) e.stopPropagation();
	if (window.event) window.event.cancelBubble = true;
	return false;
}

function eggC(){
	for (var i=1; i<6; i++){
		document.getElementById('eggLT'+i).style.display='none';
		document.getElementById('eggRT'+i).style.display='none';
		document.getElementById('eggLB'+i).style.display='none';
		document.getElementById('eggRB'+i).style.display='none';
	}
}

function C(){
	document.getElementById('wolfLT').style.display = 'none';
	document.getElementById('wolfLB').style.display = 'none';
	document.getElementById('wolfRT').style.display = 'none';
	document.getElementById('wolfRB').style.display = 'none';
}

function L(){
	document.getElementById('wolfL').style.display = 'block';
	document.getElementById('wolfR').style.display = 'none';
	C();
}

function R(){
	document.getElementById('wolfL').style.display = 'none';
	document.getElementById('wolfR').style.display = 'block';
	C();
}

function LT(){
	L();
	document.getElementById('wolfLT').style.display = 'block';
	wolfPos = 'LT';
}

function LB(){
	L();
	document.getElementById('wolfLB').style.display = 'block';
	wolfPos = 'LB';
}

function RT(){
	R();
	document.getElementById('wolfRT').style.display = 'block';
	wolfPos = 'RT';
}

function RB(){
	R();
	document.getElementById('wolfRB').style.display = 'block';
	wolfPos = 'RB';
}

function pauseGame(){
	gameIsPaused = !gameIsPaused;
	if (gameIsPaused) {
		clearTimeout(gameTimeout);
		document.getElementById('pauseGame').style.display = 'block';
	}
	else {
		document.getElementById('pauseGame').style.display = 'none';
		loop();
	}
}

function gameOver(){
	gameIsOver = true;
	document.getElementById('gameOver').style.display = 'block';
}

var oldKey;
var setDirection;

function getKey(direction){
	if (setDirection) setOldKey();
	var o = document.getElementById('key' + direction);
	oldKey = o.innerHTML;
	setDirection = direction;
	o.innerHTML='<input onkeyup="changeKey()" type="text" name="key" id="key" maxsize="1" size="1" value="" />'
	document.getElementById('key').focus();
}

function changeKey(){
	var key = document.getElementById('key').value;
	key = key.toUpperCase();
	var code = key.charCodeAt(0);
	if (!(code && (code > 64) && (code < 91))) {
		setOldKey();
		return;
	}
	key = String.fromCharCode(code);
	
	switch (setDirection) {
		case 'LT': 
			keyLT = code;
			break;
		case 'LB': 
			keyLB = code;
			break;
		case 'RT': 
			keyRT = code; 
			break;
		case 'RB': 
			keyRB = code; 
			break;
		default: setOldKey();
	}
	SetCookie('Eggs_key' + setDirection, key);
	document.getElementById('key' + setDirection).innerHTML = key;
	setDirection = '';
}

function setOldKey(){
	if (setDirection) document.getElementById('key' + setDirection).innerHTML = oldKey;
	setDirection = '';
	oldKey = '';
}

function volume(vol) {
	soundVol += parseInt(vol);
	if (soundVol < 0) soundVol = 0;
	else if (soundVol > 100) soundVol = 100;
	
	document.getElementById('volin').style.width = Math.floor(44 * soundVol / 100) + 'px';
	
	SetCookie('Eggs_vol', soundVol);
}