/**
 * 	GameApplication (GA)
 */


GameApp.prototype.initInitial=function(){
	this.GS.addScreen(this.GameStates["Initial"],"scrInitial");
	this.GS.addScreen(this.GameStates["Settings"],"scrSettings");
	this.GS.addScreen(this.GameStates["GameLevelStart"],"scrGameLevelStart");
	this.GS.addScreen(this.GameStates["GameLevelPlay"],"scrGameLevelPlay");
	this.GS.addScreen(this.GameStates["GameLevelPause"],"scrGameLevelPause");
	this.GS.addScreen(this.GameStates["GameLevelSucceed"],"scrGameLevelSucceed");
	this.GS.addScreen(this.GameStates["GameOver"],"scrGameOver");
	this.GS.addScreen(this.GameStates["GameOverSucceed"],"scrGameOverSucceed");
	this.GS.addScreen(this.GameStates["Help"],"scrHowToPlay");
}


GameApp.prototype.register=function(){
	GA.addBoardEl("gameboard1");
	GA.addBoardEl("gameboard2");
	
	GA.addContainer("lblLevel");
	GA.addContainer("lblMoves");
	GA.addContainer("lblGATime");
	
	GA.addContainer("imgPreview");
	GA.addContainer("copyRight");
	
	GA.addContainer("lblStartingLevel");
	
}

GameApp.prototype.checkOverCondition=function(){
	var ld= this.LD.getCurrent();
	if(!ld.maxtime || ld.maxtime>=this.timeElapsed){ 	// is over by level-timeout? 
		if(this.GB[ld.GBName].checkSucceed()){
			if(this.LD.setNext()){
				this.showState("GameLevelSucceed",true);
			}else{
				this.showState("GameOverSucceed",true);
				this.LD.reset();
			}
		}
	}else{
		this.LD.reset();
		this.showState("GameOver");
	}
}

GameApp.prototype.onGameOver=function(){
	this.LD.reset();
}

GameApp.prototype.onGameLoop=function(){
	if(this.timeElapsed%1000==0){
		this.dispTime();
	}
}

GameApp.prototype.isRunning=function(){
	return (this.GameState==this.GameStates["GameLevelPlay"]);
}

GameApp.prototype.dispTime=function(){
	this.Containers["lblGATime"].innerHTML=this.Trans[this.Lang]["scrGameLevelPlay"]["lblTimePrefix"] + ((this.LD.getCurrent().maxtime-this.timeElapsed)/1000);
}


GameApp.prototype.dispLevel=function(){
	this.Containers["lblLevel"].innerHTML=this.Trans[this.Lang]["scrGameLevelPlay"]["lblLevelPrefix"] +(this.LD.current+1);
	this.Containers["lblStartingLevel"].innerHTML=(this.LD.current+1);
}

GameApp.prototype.dispMoves=function(){
	this.Containers["lblMoves"].innerHTML=this.Trans[this.Lang]["scrGameLevelPlay"]["lblMovesPrefix"] +(this.GB[this.LD.getCurrent().GBName].Moves);
}


GameApp.prototype.dispPreview=function(){
	this.Containers["imgPreview"].innerHTML='<img src="'+this.LD.getCurrent().previewImg+'">';
	this.Containers["copyRight"].innerHTML=this.Trans[this.Lang]["scrGameLevelPlay"]["lblCopyrightPrefix"] +this.LD.getCurrent().copyRight;

}


GameApp.prototype.setGameDifficulty=function(lvl){
	if(this.GameState==this.GameStates["Settings"]){
		this.Difficulty=lvl;
		this.start();
	}
}


/**
 *	GAMEBOARD
 */
 
GameBoard.prototype.setFieldTiles=function(objLevel){
	//	randomly  distribute level-tiles on GB-fields:
	var occuNo=this.fields.length;
	var occu=new Array(occuNo);
	for(i=0;i<this.fields.length;i++){
		var fldNo=Math.floor(Math.random()*occuNo)+1;
		var found=0;
		var cur=-1;
		while(found<fldNo){
			cur++;
			if(occu[cur]!=true){
				found++;
			}
		}
		this.setFieldTile(i,objLevel.TilesData[cur]);
		occu[cur]=true;
		occuNo--;
	}
	for(s in this.fields ){
		this.fields[s]
	}

}

GameBoard.prototype.checkSucceed=function(){
	
	for(i=0;i<this.fields.length;i++){
		if(this.fields[i].tile.data[0]!=this.fields[i].idx){
			return false;
		}
	}
	return true;
}


GameBoard.prototype.initLevel=function(objLevel){
	this.firstField=null;
	this.Moves=0;
	this.parent.dispTime();
	this.parent.dispMoves();
	this.parent.dispLevel();
	this.parent.dispPreview();
	this.setFieldTiles(objLevel);

}



/**
 * 	GB-FIELDS (Containers for Tiles)
 */
 
GBField.prototype.setTile=function(tileObj){
	this.el.style.backgroundImage="url(imgs/"+this.tile.data[1]+")";
}

GBField.prototype.MouseDown=function(ev){
	if(this.parent.parent.isRunning()){
		dbWrite( "mouseDown: "+this.idx);
		
	}
	return false;
}

GBField.prototype.MouseUp=function(ev){
	if(this.parent.parent.isRunning()){
		if(this.parent.firstField==null){
			this.parent.firstField=this;
			switchStyleClass(this.el,"GB_EleContainerAktivSet");
		}else{
			if(this.parent.firstField!=this){
				this.parent.switchFieldTiles(this.parent.firstField,this);
				var tmp=this.parent.firstField;
				this.parent.firstField=null;
				tmp.MouseOut();
				this.parent.Moves++;
				this.parent.parent.dispMoves();
			}
			this.parent.firstField=null;
		}
	}
	return false;
}

GBField.prototype.MouseOver=function(ev){
	if(this.parent.parent.isRunning()){
		if(this.parent.firstField!=this)
			switchStyleClass(this.el,"GB_EleContainerAktiv");

			
	}
}

GBField.prototype.MouseOut=function(ev){
	if(this.parent.firstField!=this)
		switchStyleClass(this.el,"GB_EleContainer");

}


/**
 * 	LEVELDATa
 */
LevelData.prototype.initInitial=function(){
	this.current=(this.parent.Difficulty)*10;
	if(this.current>=this.Levels.length) this.current=this.Levels.length-1;
	if(this.current<0) this.current=0;
}


/**
 * 	LEVEL
 */
Level.prototype.setMaxTime=function(t){
	this.maxtime=t;
}


Level.prototype.setPreviewImg=function(imgSrc){
	this.previewImg=imgSrc;
}

Level.prototype.setCopyRight=function(cprText){
	this.copyRight=cprText;
}


/**
 * Game Konfiguration
 */


var GA=new GameApp(self,"GA");

/*
 * LEVEL CONFIGS:
 */
 
var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/01.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"01_5x5/01_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/02.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"02_5x5/02_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/3workers.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"3workers_5x5/3workers_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("DCI");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/bohrer.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"bohrer_5x5/3workers_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("DCI");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/tubes.gif");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"tubes_5x5/3workers_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("DCI");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/04.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"04_5x5/04_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/05.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"05_5x5/05_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/06.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"06_5x5/06_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/07.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"07_5x5/07_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(300000);
cl.setBoard("gameboard1",5,5);
cl.setPreviewImg("imgs/preview/08.jpg");
for(var i=0;i<25;i++){
	cl.addTile(new GBTile(new Array(i,"08_5x5/08_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

// DIFFICULT:

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/01.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"01_6x6/01_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/02.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"02_6x6/02_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/3workers.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"3workers_6x6/3workers_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("DCI");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/bohrer.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"bohrer_6x6/bohrer_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("DCI");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/tubes.gif");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"tubes_6x6/tubes_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("DCI");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/04.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"04_6x6/04_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/05.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"05_6x6/05_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/06.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"06_6x6/06_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/07.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"07_6x6/07_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");

var cl=GA.LD.addLevel(new Level());
cl.setMaxTime(500000);
cl.setBoard("gameboard2",6,6);
cl.setPreviewImg("imgs/preview/08.jpg");
for(var i=0;i<36;i++){
	cl.addTile(new GBTile(new Array(i,"08_6x6/08_"+((i+1<10) ? ("0"+(i+1)) : (i+1))+".jpg")));
}
cl.setCopyRight("Corbis");