var mayStart = false;
var xpos = new Array(19,193,360,112,277,10,186,366,92,290);
var ypos = new Array(26,15,27,154,160,291,309,294,447,450);
var multi1 = new Array(2,3,4,5,6,7,8,9,2,4,3,5,2,3,6,3,2,4,4,7,3,2,5,6,2,3,4,5,2,3,4,8,2,5,6,7);
var multi2 = new Array(2,3,4,5,6,7,8,9,8,9,7,6,3,5,7,9,6,5,6,8,4,9,8,9,5,6,8,9,7,8,7,9,4,7,8,9);
var numbers = new Array(8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,36);
var difficulty = new Array(0,0,0,0,5,10,0,5,10,0,10,20,5,15,30,5,20,40,10,25,50,20,40,60,25,50,75,30,60,100);
var multistatus = new Array("Björnen","Tigern","Pingvinen","Grodan","Snigeln","Fågeln","Anden","Delfinen","Masken","Utomjordingen","Biet","Fjärilen","Fladdermusen","Bart","Fisken","Astrounauten","Dribblaren","Kalkonen","Gamen","Gangstern","Häxan","Trollsländan","Tuppen","Pegasushästen","Cowboyen","Draken","Geparden","Rosa Pantern","Dinosaurien","Guldsjöstjärnan");

var level=0;
var currentdivs=0;
var maxdivs=10;
var progress=0;
var dragable = new Array();
var old_number=-1;
var number_sounds = 7;

var t1,t2,t3,t4;

var img_n = new Array();
var img_f = new Array();

function updateLevel() {
	document.getElementById('level').style.backgroundImage = "url(images/banners/banner"+(level+1)+".jpg)";
	document.getElementById('level').innerHTML = "Nivå "+(level+1);
	document.getElementById('multistatus').innerHTML = multistatus[level];
	document.getElementById('bravo').style.backgroundImage = "url(images/animations/level"+(level+1)+".gif)";
	document.getElementById('continue_button').value = "Fortsätt!";	
	var i;
	for( i=0; i<30; i++ ){
		if (i < level){
			document.getElementById('mark'+(i+1)).style.backgroundImage = "url(images/marks/"+(i+1)+".gif)";
		}
		else{
			document.getElementById('mark'+(i+1)).style.backgroundImage = "url(images/marks_s/"+(i+1)+".gif)";
		}
	}
}
function updateProgress() {
	var i;
	for( i=0; i<20; i++){
		var square = document.getElementById('p'+i);
		if( i<progress ){
			square.style.background = "#8f8";
			square.style.border = "1px solid #060";
		}
		else{
			square.style.background = "#99f";
			square.style.border = "1px solid #446";
		}
	}
}
function bringToFront(id)
{  
    if (!document.getElementById || !document.getElementsByTagName)
        return;  

    var obj = document.getElementById(id);  
    var max_index = 0;  
    var cur_index;  
  
    // Compute the maximal z-index of  
    // other absolute-positioned divs  
    for (i = 0; i < dragable.length; i++)  
    {  
        var item = dragable[i];  
        if (item == obj ||  
            item.style.zIndex == '')  
            continue;  
  
        cur_index = parseInt(item.style.zIndex);  
        if (max_index < cur_index)  
        {  
            max_index = cur_index;  
        }  
    }  
  
    obj.style.zIndex = max_index + 1;  
}
function fillDivs() {
	maxdivs = 10;
	while( currentdivs < maxdivs ){
		addDiv();
	}
}
function begin (element, x, y) {
	bringToFront(element.id);
}

function drag (element, x, y) {
}

function end (element, x, y) {	
	var i;
	var x_width = parseInt(element.style.width);
	var y_height = parseInt(element.style.height);
	var inArea = -1;
	for( i=0; i<10; i++){
		if(element == dragable[i])
			continue;
		var xx = parseInt(dragable[i].style.left);
		var yy = parseInt(dragable[i].style.top);
		var xx_width = parseInt(dragable[i].style.width);
		var yy_height = parseInt(dragable[i].style.height);
		var dist = (xx+xx_width/2-x-x_width/2)*(xx+xx_width/2-x-x_width/2)+(yy+yy_height/2-y-y_height/2)*(yy+yy_height/2-y-y_height/2);
		if( dist < 10000 && dragable[i].current > -1){
			if( inArea > -1 ){
				if (parseInt(dragable[i].style.zIndex) > parseInt(dragable[inArea].style.zIndex)){
					inArea = i
				}
			}
			else{
				inArea = i;
			}
		}
	}
	if( inArea > -1 ){
		pairs = false;
		if( dragable[inArea].current < 36 && element.current >= 36 && multi1[dragable[inArea].current]*multi2[dragable[inArea].current] == multi1[element.current-36]*multi2[element.current-36] )
			pairs = true;
		if( dragable[inArea].current >= 36 && element.current < 36 && multi1[dragable[inArea].current-36]*multi2[dragable[inArea].current-36] == multi1[element.current]*multi2[element.current] )
			pairs = true;
    
		if( pairs ){
			
			xx = parseInt(dragable[inArea].style.left);
			yy = parseInt(dragable[inArea].style.top);
			xx_width = parseInt(dragable[inArea].style.width);
			yy_height = parseInt(dragable[inArea].style.height);
			
			old_number = dragable[inArea].current % 36;
			removeDiv(element);
			removeDiv(dragable[inArea]);
				
			progress = progress + 1
			maxdivs = maxdivs - 2;
							
			if( maxdivs < 8 && maxdivs+3 <= 21-progress && Math.floor(Math.random()*20) > maxdivs){
				maxdivs = maxdivs+3;
				t1 = setTimeout( "addDiv(); soundManager.play('new');", 1000);
				t2 = setTimeout( "addDiv(); soundManager.play('new');", 1800);
				t3 = setTimeout( "addDiv(); soundManager.play('new');", 2500);
			}
			else if( maxdivs < 9 && maxdivs+2 <= 21-progress && ((Math.floor(Math.random()*20) > maxdivs) || maxdivs < 5)){
				maxdivs = maxdivs+2;
				t1 = setTimeout( "addDiv(); soundManager.play('new');", 1000);
				t2 = setTimeout( "addDiv(); soundManager.play('new');", 1800);
			}
			else if(currentdivs > 0){
				maxdivs = maxdivs+1
				t1 = setTimeout( "addDiv(); soundManager.play('new');", 1000);
			}
			else if( level < 29){
				level = level + 1;
				progress = 0;
				initBravo();
				soundManager.play('finish');
				setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks/"+level+".gif)'", 200);
				setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks_s/"+level+".gif)'", 800);
				setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks/"+level+".gif)'", 1400);
				setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks_s/"+level+".gif)'", 2000);
				setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks/"+level+".gif)'", 2600);
				setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks_s/"+level+".gif)'", 3200);
				setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks/"+level+".gif)'", 3800);
    
				t4 = setTimeout( "initFortsatt();", 3000);
			}
			else{
				// All done
				window.location = "grattis.php";
			}
			
			updateProgress();
							
			var poof = document.getElementById("poof");
			poof.style.visibility = "visible";
			poof.style.backgroundImage = 'url("images/poof/poof1.gif")';
			poof.style.left = ((x+xx)/2+(x_width+xx_width)/4-64) + 'px';
			poof.style.top = ((y+yy)/2+(y_height+yy_height)/4-64) + 'px';
			
			soundManager.play('sound'+Math.floor(Math.random()*number_sounds));
			// Poof
			setTimeout( "document.getElementById('poof').style.backgroundImage = \"url('images/poof/poof2.gif')\"", 100 );
			setTimeout( "document.getElementById('poof').style.backgroundImage = \"url('images/poof/poof3.gif')\"", 200 );
			setTimeout( "document.getElementById('poof').style.backgroundImage = \"url('images/poof/poof4.gif')\"", 300 );
			setTimeout( "document.getElementById('poof').style.backgroundImage = \"url('images/poof/poof5.gif')\"", 400 );
			setTimeout( 'document.getElementById("poof").style.visibility = "hidden"', 500 );
		}
	}
}
function removeDiv( drag ){
	drag.current = -1;
	drag.style.visibility = "hidden";
	currentdivs = currentdivs-1;
}
function removeAll(){
	var i;
	for (i=0; i<10; i++)
	{
		if( dragable[i].current > -1 ){
			removeDiv( dragable[i] );
		}
	}
}
function jumpToNextLevel(){
	removeAll();
	level = level + 1;
	progress = 0;
	initBravo();
	soundManager.play('finish');
	setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks/"+level+".gif)'", 200);
	setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks_s/"+level+".gif)'", 800);
	setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks/"+level+".gif)'", 1400);
	setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks_s/"+level+".gif)'", 2000);
	setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks/"+level+".gif)'", 2600);
	setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks_s/"+level+".gif)'", 3200);
	setTimeout( "document.getElementById('mark'+level).style.backgroundImage = 'url(images/marks/"+level+".gif)'", 3800);
	
	setTimeout( "initFortsatt();", 3000);
}
function addDiv() {
	var q;
	var offSet = Math.floor(Math.random()*10);
	for (q=offSet; q<10+offSet; q++){
		var i = q % 10;
		if (dragable[i].current == -1){

			while( true ){
				dragable[i].current = Math.floor(Math.random()*numbers[level]);
				if( dragable[i].current == old_number ) continue;
				var type=Math.floor(Math.random()*2);
				dragable[i].current = dragable[i].current + type*36;
				
				// Check for duplicate
				var j;
				var dupe = false;
				for (j=0; j<10; j++){
					if( i == j )
						continue;
					if(dragable[i].current < 36 && dragable[j].current < 36 && multi1[dragable[i].current]*multi2[dragable[i].current] == multi1[dragable[j].current]*multi2[dragable[j].current] )
						dupe = true;
					if(dragable[i].current >= 36 && dragable[j].current >= 36 && multi1[dragable[i].current-36]*multi2[dragable[i].current-36] == multi1[dragable[j].current-36]*multi2[dragable[j].current-36] )
						dupe = true;
				}
				if( dupe )
					continue;

				// Check if no pair
				if (currentdivs == maxdivs-1){
					var p1, p2;
					var pairs = false;
					for (p1=0; p1<10 && pairs == false; p1++){
						for (p2=0; p2<10  && pairs == false; p2++){
							if( p1 == p2)
								continue;
							if( dragable[p1].current < 36 && dragable[p2].current >= 36 && multi1[dragable[p1].current]*multi2[dragable[p1].current] == multi1[dragable[p2].current-36]*multi2[dragable[p2].current-36] )
								pairs = true;
							if( dragable[p1].current >= 36 && dragable[p2].current < 36 && multi1[dragable[p1].current-36]*multi2[dragable[p1].current-36] == multi1[dragable[p2].current]*multi2[dragable[p2].current] )
								pairs = true;
						}
					}
					if( !pairs )
						continue;
				}

				break;
			}
			
			// Calculate chance of number
			var new_difficulty = 0;
			if( difficulty[level] > 0)
				new_difficulty = (difficulty[level]+100.0)/2.0-(100.0-difficulty[level])*(dragable[i].current % 36)/numbers[level];
			
			var category;
			if (Math.floor(Math.random()*100) >= new_difficulty){
				category = "figures";
				dragable[i].style.width = img_f[dragable[i].current].width+'px';
				dragable[i].style.height = img_f[dragable[i].current].height+'px';
			}
			else{
				category = "numbers";
				dragable[i].style.width = img_n[dragable[i].current].width+'px';
				dragable[i].style.height = img_n[dragable[i].current].height+'px';
			}
			
			if (dragable[i].current < 36){
				dragable[i].style.backgroundImage = "url(images/"+category+"/"+multi1[dragable[i].current]+"_"+multi2[dragable[i].current]+".gif)";
			}
			else{
				dragable[i].style.backgroundImage = "url(images/"+category+"/"+multi1[dragable[i].current-36]*multi2[dragable[i].current-36]+".gif)";
			}
			
			dragable[i].style.visibility = "visible";
			
			// Calculate best position to spawn div
			var t1,t2;
			var maxdist=0;
			var maxt=-1;
			for (t1=0; t1<10; t1++){		// Test position
				var mindist=100000;
				for (t2=0; t2<10; t2++){	// Actual position of div
					if (t2 == i || dragable[t2].current == -1 ){ continue; }
					var xx2 = parseInt(dragable[t2].style.left)+parseInt(dragable[t2].style.width)/2;
					var yy2 = parseInt(dragable[t2].style.top)+parseInt(dragable[t2].style.height)/2;
					var dist = (xpos[t1]+69-xx2)*(xpos[t1]+69-xx2)+(ypos[t1]+69-yy2)*(ypos[t1]+69-yy2);
					if (dist < mindist){ mindist = dist; }
				}
				if (mindist > maxdist){ maxdist = mindist; maxt=t1; }
			}
			dragable[i].style.left = parseInt(xpos[maxt]+(138-parseInt(dragable[i].style.width))/2)+'px';
			dragable[i].style.top = parseInt(ypos[maxt]+(138-parseInt(dragable[i].style.height))/2)+'px';
			
			break;
		}
	}
	currentdivs = currentdivs+1;

}

function init() {
	var i;
	for (i=0; i<10; i++)
	{
		dragable[i] = DragHandler.attach(document.getElementById('dragable'+i));
		dragable[i].dragBegin = begin;
		dragable[i].drag = drag;
		dragable[i].dragEnd = end;
		dragable[i].style.left = xpos[i]+'px';
		dragable[i].style.top = ypos[i]+'px';
		dragable[i].style.zIndex = 1+i;
		dragable[i].current = -1;
	}
	//while( currentdivs < maxdivs ){
	//	addDiv();
	//}
	//fillDivs();
	//updateLevel();
	//updateProgress();	
}

function initBravo() {
	document.getElementById('bravo').style.visibility = "visible";
}
function initFortsatt() {
	document.getElementById('fortsatt').style.visibility = "visible";	
}
function initLevel() {
	document.getElementById('bravo').style.visibility = "hidden";
	document.getElementById('fortsatt').style.visibility = "hidden";
	document.getElementById('startdiv').style.visibility = "hidden";
	document.getElementById('intro').style.visibility = "hidden";
	fillDivs();
	updateLevel();
	updateProgress();
}
function showLevelTable(){
	if (mayStart == true){
		clearTimeout(t1);
		clearTimeout(t2);
		clearTimeout(t3);
		clearTimeout(t4);
		removeAll();
		document.getElementById('bravo').style.visibility = "hidden";
		document.getElementById('fortsatt').style.visibility = "hidden";
		document.getElementById('startdiv').style.visibility = "hidden";
		document.getElementById('intro').style.visibility = "hidden";
		document.getElementById('level_table').style.visibility = "visible";
	}
}
function jumpToLevel(newLevel){
	document.getElementById('level_table').style.visibility = "hidden";
	level = newLevel;
	progress = 0;
	initLevel();
}

function preload(){
	// Preload poof
	var i,j;
	for( i=0; i<5; i++ ){
		var img = new Image();
		img.src = "images/poof/poof"+(i+1)+".gif";
	}

	// Preload images
	for( i=0; i<36; i++ ){
		img_f[i] = new Image();
		img_f[i+36] = new Image();
		img_f[i].src = "images/figures/"+multi1[i]+"_"+multi2[i]+".gif";		
		img_f[i+36].src = "images/figures/"+multi1[i]*multi2[i]+".gif";
	}
	for( i=0; i<36; i++ ){
		img_n[i] = new Image();
		img_n[i+36] = new Image();
		img_n[i].src = "images/numbers/"+multi1[i]+"_"+multi2[i]+".gif";		
		img_n[i+36].src = "images/numbers/"+multi1[i]*multi2[i]+".gif";
	}

	// Preload marks
	var i;
	for( i=0; i<30; i++ ){
		var img = new Image();
		img.src = "images/marks/"+(i+1)+".gif";
	}

	// Preload banners
	var i;
	for( i=0; i<30; i++ ){
		var img = new Image();
		img.src = "images/banners/banner"+(i+1)+".jpg";
	}
}
// Configure Sound
soundManager.url = 'soundmanager/'; // directory where SM2 .SWFs live
soundManager.debugMode = false;
soundManager.waitForWindowLoad = true;

soundManager.onload = function() {
	// SM2 has loaded - now you can create and play sounds!
	init();
	soundManager.debugMode = false;
	soundManager.createSound('new','sounds/new.mp3');
	soundManager.createSound('finish','sounds/finish.mp3');
	var i;
	for (i=0; i<number_sounds; i++)
	{
		soundManager.createSound('sound'+i,'sounds/sound'+i+'.mp3');
	}
	document.getElementById('loader').style.visibility = "hidden";	
	document.getElementById('intro').style.visibility = "visible";	
	document.getElementById('startdiv').style.visibility = "visible";	

	mayStart = true;	
}
