/* copyright Tomas Young 2009 */

var game_stag;

var item_ifiles = new Array;
var item_sfiles = new Array;
var num_items = 0;

var choice_stag;
var choice_itags = new Array;
var num_choices = 0;

var correct_pick = -1;
var game_picks = new Array;

var egg_x = 0;
var egg_x0 = 200;
var egg_dx = 10;
var egg_y = 0;
var egg_y0 = 100;
var egg_dy = 10;
var egg_ymax = 790;
var egg_dt = 200;

var bird_x = 0;
var bird_x0 = 200;
var bird_dx = 10;
var bird_y = 0;
var bird_y0 = 100;
var bird_dy = 10;

var egg_itag;
var egg_st = null;

var bird_itag;
var bird2_itag;
var bird_st = null;

var level_itag;
var level_small_itag;
var level = 0;
var total_saved = 0;
var total_dropped = 0;

var timeId;
var first_run = true;

function game_init() {
    first_run = true;
    level = 0;
    total_saved = 0;
    total_dropped = 0;
    num_items = 0;
    num_choices = 0;
    correct_pick = -1;
}

function game_add_item(ifile,sfile) {
    item_ifiles[num_items] = ifile;
    item_sfiles[num_items] = sfile;
    num_items++;
}

function game_add_choice(itag) {
    choice_itags[num_choices] = itag;
    num_choices++;
}

var saved_stat_itags = new Array;
var dropped_stat_itags = new Array;
var digits = new Array;
digits[0] = "falling-egg-game/digit0.bmp";
digits[1] = "falling-egg-game/digit1.bmp";
digits[2] = "falling-egg-game/digit2.bmp";
digits[3] = "falling-egg-game/digit3.bmp";
digits[4] = "falling-egg-game/digit4.bmp";
digits[5] = "falling-egg-game/digit5.bmp";
digits[6] = "falling-egg-game/digit6.bmp";
digits[7] = "falling-egg-game/digit7.bmp";
digits[8] = "falling-egg-game/digit8.bmp";
digits[9] = "falling-egg-game/digit9.bmp";

function update_stat() {
    y = 1000;
    z = total_saved;
    nonZeroFound = false;
    for(i = 0; i < 3; i++) {
	x = Math.floor(z / y);
	if(x > 0) {
	    nonZeroFound = true;
	}
	z %= y;
	y /= 10;
	if(nonZeroFound) {
	    Iin(saved_stat_itags[i],digits[x]);
	}
    }
    x = Math.floor(z / y);
    Iin(saved_stat_itags[3],digits[x]);

    y = 1000;
    z = total_dropped;
    nonZeroFound = false;
    for(i = 0; i < 3; i++) {
	x = Math.floor(z / y);
	if(x > 0) {
	    nonZeroFound = true;
	}
	z %= y;
	y /= 10;
	if(nonZeroFound) {
	    Iin(dropped_stat_itags[i],digits[x]);
	}
    }
    x = Math.floor(z / y);
    Iin(dropped_stat_itags[3],digits[x]);
}

function level_up() {
    Iin(egg_itag,"blank.gif");
    Iin(level_itag,"falling-egg-game/level"+(level+1)+".gif");
    setTimeout('game_run()',2000);
}

function game_run() {
    if(first_run) {
	first_run = false;
	Iin(level_small_itag,"falling-egg-game/level"+(level+1)+"b.bmp");
	level_up();
	update_stat();
    }
    else {
	if(correct_pick < 0) {
	    Iin(level_itag,"blank.gif");
	    Iin(bird2_itag,"blank.gif");
	    for(i = 0; i < num_choices; i++) {
		var already_used = false;
		var loopcnt = 0;
		do {
		    already_used = false;
		    n = (Math.floor(Math.random()*100)) % num_items;
		    for(j = 0; j < i; j++) {
			if(n == game_picks[j]) {
			    already_used = true;
			    break;
			}
		    }
		    loopcnt++;
		} while(already_used && loopcnt < 10);
		game_picks[i] = n;
		Iin(choice_itags[i],item_ifiles[n]);
	    }
	    correct_pick = (Math.floor(Math.random()*100)) % num_choices;
	    Sin(choice_stag,item_sfiles[game_picks[correct_pick]]);
	    egg_y = egg_y0;
	}
	if(egg_y == egg_y0) {
	    Iin(egg_itag,"falling-egg-game/egg.gif");
	}
	egg_st.style.top = egg_y;
	egg_y += egg_dy;
	if(egg_y > egg_ymax) {
	    correct_pick = -1;
	    total_dropped++;
	    update_stat();
	    Iin(egg_itag,"falling-egg-game/egg broke.gif");
	    Iin(bird2_itag,"falling-egg-game/bird jump.gif");
	    setTimeout('game_run()',2200);
	}
	else {
	    timerId = setTimeout('game_run()',egg_dt);
	}
    }
}

function drop_egg() {
    if(egg_y < egg_ymax) {
	egg_st.style.top = egg_y;
	egg_y += egg_dy;
    }
}

var fly_dir = 1;

function fly_bird() {
    bird_st.style.left = bird_x;
    bird_st.style.top = bird_y;
    bird_x -= (fly_dir * bird_dx);
    bird_y -= bird_dy;
    if(bird_x < 50 || bird_x > 350) {
	Iin(bird_itag,"blank.gif");
	bird_st.style.left = bird_x0;
	if(total_saved % 10 == 0 && egg_dt > 16) {
	    if(level < 8) {
		egg_dt = Math.floor(0.75 * egg_dt);
	    }
	    else {
		egg_dt = Math.floor(0.85 * egg_dt);
	    }
	    level++;
	    Iin(level_small_itag,"falling-egg-game/level"+(level+1)+"b.bmp");
	    setTimeout('level_up()',0);
	}
	else {
	    setTimeout('game_run()',0);
	}
    }
    else {
	drop_egg();
	setTimeout('fly_bird()',150);
    }
}

function game_pick(n) {
    if(n == correct_pick) {
	clearTimeout(timerId);
	correct_pick = -1;
	total_saved++;
	update_stat();
	bird_x = bird_x0;
	bird_y = egg_y - 50;
	if(screen.width < 1400) {
	    bird_y = egg_y - 20;
	}
	Iin(egg_itag,"falling-egg-game/egg broke.gif");
	if(fly_dir == 1) {
	    fly_dir = -1;
	    Iin(bird_itag,"falling-egg-game/bird fly R.gif");
	}
	else {
	    fly_dir = 1;
	    Iin(bird_itag,"falling-egg-game/bird fly L.gif");
	}
	fly_bird();
    }
}

