var enemies = [];
var enemyRowLimit = 4;
var enemyColumnLimit = 9;

var enemiesCreateY = 20;
var enemiesCreateMoveStepper = 30;


var enemyMoveStepper = enemiesCreateMoveStepper;
var enemyMoveStepperID = 0;
var enemyMoveStepX = 8;
var enemyMoveStepY = 10;
var enemiesX = 0;
var enemiesY = enemiesCreateY;
var enemiesWidth = 0;
var enemiesHeight = 0;
var enemyMarginX = 10;
var enemyMarginY = 5;
var enemyFrame = 3;

var enemiesWhichHaveBullets = [];
var enemiesAllDead = true;

function createAllEnemies() {
	for(i=0; i<enemyColumnLimit; i++) {
		enemies[i] = [];
		for(b=0; b<enemyRowLimit; b++) {
			var enemy = {};
			enemy.imageData = assets[3];
			enemy.width = enemy.imageData.width;
			enemy.height = enemy.imageData.height;
			enemy.rowID = b;
			enemy.columnID = i;
			enemy.dead = 0;
			enemy.deadID = 0;
			enemy.deadLimit = 20;
			if(b==0) {
				enemy.score = 40;
			}else{
				if(b==1) {
					enemy.score = 20;
				}else{
					enemy.score = 10;
				}
			}
			enemy.x = i*(enemy.width+enemyMarginX);
			enemy.y = b*(enemy.height+enemyMarginY);
			enemies[i][b] = enemy;
		}
	}
	enemiesWidth = enemyColumnLimit*(assets[3].width+enemyMarginX);
	enemiesHeight = enemyRowLimit*(assets[3].height+enemyMarginY);
	
	enemiesX = (width-enemiesWidth)*.5;
	enemiesY = 90+enemiesCreateY;
	
	enemiesX = (enemiesX+.5) | 0;
	enemiesY = (enemiesY+.5) | 0;
	
	findEnemiesWhichHaveBullets();
}
function resetEnemies() {
	for(i=0; i<enemyColumnLimit; i++) {
		for(b=0; b<enemyRowLimit; b++) {
			enemies[i][b].dead = 0;
			enemies[i][b].deadID = 0;
			enemies[i][b].deadLimit = 20;
			enemies[i][b].x = i*(enemies[i][b].width+enemyMarginX);
			enemies[i][b].y = b*(enemies[i][b].height+enemyMarginY);
		}
	}
	enemiesWidth = enemyColumnLimit*(assets[3].width+enemyMarginX);
	enemiesHeight = enemyRowLimit*(assets[3].height+enemyMarginY);
	
	enemiesX = (width-enemiesWidth)*.5;
	enemiesY = 90+enemiesCreateY;
	
	enemiesX = (enemiesX+.5) | 0;
	enemiesY = (enemiesY+.5) | 0;
	
	findEnemiesWhichHaveBullets();
}
function resetEnemiesY() {
	enemyMoveStepper = enemiesCreateMoveStepper;
}
function moveAndDrawEnemies() {
	if(!pause) {
		enemyMoveStepperID++;
		if(enemyMoveStepperID>enemyMoveStepper) {
			enemyMoveStepperID=0;
			enemiesX+=enemyMoveStepX;
			enemyFrame = enemyFrame==3?5:3;
			if(enemiesX+enemiesWidth+enemyMarginX>width || enemiesX<enemyMarginX) {
				enemyMoveStepX*=-1;
				enemiesY+=enemyMoveStepY;
				enemyMoveStepper-=2;
				if(enemyMoveStepper<5) {
					enemyMoveStepper = 5;
				}
			}
		}
	}
	enemiesAllDead = true;
	loopEnemies(checkEnemies);
	if(enemiesAllDead) {
		nextLevel();
	}
}
function checkEnemies(enemy) {
	if(enemy.dead == 1) {
		enemy.deadID++;
		if(enemy.deadID > enemy.deadLimit) {
			enemy.dead = 2;
		}
	}
	if(enemy.dead == 0) {
		enemy.imageData = assets[enemyFrame];
		enemiesAllDead = false;
	}
	if(enemy.dead == 1) {
		enemy.imageData = assets[2];
	}
	if(enemy.dead != 2) {
		context.drawImage(enemy.imageData,enemy.x+enemiesX,enemy.y+enemiesY,enemy.width,enemy.height);
	}
}
function loopEnemies(fnc) {
	for(i=0; i<enemyColumnLimit; i++) {
		for(b=0; b<enemyRowLimit; b++) {
			fnc(enemies[i][b]);
		}
	}
}
function checkEnemiesY() {
	for(i=0; i<enemyColumnLimit; i++) {
		for(b=0; b<enemyRowLimit; b++) {
			if(enemies[i][b].y + enemies[i][b].height + enemiesY>355 && enemies[i][b].dead == 0) {
				enemiesReachedToBlocks();
				b=enemyRowLimit;
				i=enemyColumnLimit;
			}
		}
	}
}
function findEnemiesWhichHaveBullets() {
	enemiesWhichHaveBullets = [];
	for(var j=0; j<enemyColumnLimit; j++) {
		for(var c=0; c<enemyRowLimit; c++) {
			if(enemies[j][enemyRowLimit-c-1].dead==0) {
				enemiesWhichHaveBullets.push(enemies[j][enemyRowLimit-c-1]);
				c=enemyRowLimit;
				continue;
			}
		}
	}
}
