"use strict";
(function (window, undefined) {
	var	jsApiRequest = System.jsApiRequest,

		levelData = {};

	/*
		Map-Aufbau:

		[SPACE] : Nichts
		0 / a / A: Ebene 1 (ohne Lampe / mit Lampe (aus) / mit Lampe (an))
		1 / b / B: Ebene 2 (ohne Lampe / mit Lampe (aus) / mit Lampe (an))
		2 / c / C: Ebene 3 (ohne Lampe / mit Lampe (aus) / mit Lampe (an))
		3 / d / D: Ebene 4 (ohne Lampe / mit Lampe (aus) / mit Lampe (an))
		
		dir:
		Y+
		|    0				        DIR_YP
		|    3 1			    DIR_XN  DIR_XP
		|      2			        DIR_YN
		+-------- X+
		
		Difficulty Levels:
		0 - Very Easy
		1 - Easy
		2 - Medium
		3 - Hard
		4 - Very Hard
		5 - Impossible?
		99 - Untested
	*/

	window['Level'] = {
		// Variables

		count:0,
		idx:-1,
		id:0,
		map:'',
		width:0,
		height:0,
		x:0,
		y:0,
		dir:0,
		difficult:99,
		title:undefined,
		author:undefined,
		
		// Functions

		setLevel:function (idx) {
			if (typeof(levelData[idx]) === 'undefined') {
				return false;
			}

			Level.idx = idx;
			Level.id = levelData[idx].id;
			Level.map = levelData[idx].map;
			Level.width = levelData[idx].width;
			Level.height = levelData[idx].height;
			Level.x = levelData[idx].x;
			Level.y = levelData[idx].y;
			Level.dir = levelData[idx].dir;
			Level.difficult = levelData[idx].difficult;
			Level.title = levelData[idx].title;
			Level.author = levelData[idx].author;

			return true;
		},

		getLevel:function (idx) {
			if (typeof(levelData[idx]) === 'undefined') {
				return false;
			}
			return levelData[idx];
		},

		setFloor:function (x, y, elem) {
			if (typeof(elem) !== 'string' || elem.length !== 1 || x < 0 || y < 0 || x >= Level.width || y >= Level.height) { return; }

			var i = ((Level.height - y - 1) * Level.width) + x;

			Level.map = Level.map.substr(0, i) + elem + Level.map.substr(i + 1);
		},

		getFloor:function (x, y) {
			return Level.map.charAt(((Level.height - y - 1) * Level.width) + x);
		},
		getFloorHeight:function (x, y) {
			switch (Level.getFloor(x, y)) {
				case '.': return 999;
				case '1': case 'b': case 'B': return 1;
				case '2': case 'c': case 'C': return 2;
				case '3': case 'd': case 'D': return 3;
				default: // case '0': case 'a': case 'A':
					return 0;
			}
		}
	};

	jsApiRequest('http://robotrace.de/db/get_levels.json', function (json) {
		if (typeof(json.error) !== 'undefined') {
			alert('Error: ' + json.error + '\n' + json.errmsg);
			return;
		}

		Level.count = json.found;
		levelData = json.level;
		Game.initialized('Level');
	});
})(window);
