var PLAYER=1;
var GOVNO=2;
var HUI=4;
var SOLOMINKA=8;
var CANNABIS_G=16;
var METHADOSHKA=32;
var pause=false;
var i_ind;
var preload_src={grobik:"img/RIP.gif", roizman:"img/roizman.gif", hui:"img/hui.gif", govno:"img/shit.gif", muravei_m:"img/shag_m.gif", muravei:"img/shag.gif", cannabis_g:"img/conoplyashka.gif", methadoshka:"img/methadoshka.gif", solominka:"img/shit_dry.gif", hui:"img/muravei_h.gif", hui_m:"img/muravei_h_m.gif"}
var preloaded_sprites=new Array();
var sprites=new Array();
var gameField=new Array();
var govny=[{id:1, life:3, width:30, height:90, dl:35, dt:5, x:0, y:450, dx:0, dy:0, sprite:"", unkillable:false, flight:0, side:1}];
var keys={up:{val:32, state:false}, left:{val:65, state:false}, right:{val:68, state:false}, attack:{val:17, state:false}}
var mode=false;
var cannabis=0;
var meth=1;
var gameover=false;
function init()
{
for (var i=0; i<11; i++)
{tr=document.getElementById("debug_table").insertRow(document.getElementById("debug_table").rows.length);
	gameField[i]=new Array();
	for (var j=0; j<18; j++){
	gameField[i][j]=new Array();
td=tr.insertCell(tr.cells.length);
td.innerHTML=j+", "+i;
}
	}

show_info();
preload();
init_player();//init_govno();
hide("debug_table");
window.setInterval("init_govno()", 3000);
window.setInterval("govno_on_interval()", 100);
}
function show_info()
{
settext("life_count", govny[0].life);
settext("can_count", cannabis);
settext("meth_count", meth);
show("life_count");
show("can_count");
show("meth_count");
}
function translate_key(ev, mode)
{
if (!ev) ev=window.event;
var key = (ev.which)?ev.which:ev.keyCode;
for (ind in keys)
if (key==keys[ind].val) keys[ind].state=mode;
//move_player();
}
function set_mode_f()
{
mode=false;
var s=(govny[0].side==1)?"":"_m";
set_img(govny[0].sprite, preload_src["muravei"+s]);
}
function flight()
{
if (pause) return;
if (keys.attack.state)
if (meth>0 && !mode)
{
mode=true;
meth--;
var s=(govny[0].side==1)?"":"_m";
set_img(govny[0].sprite, preload_src["hui"+s]);
show_info();
window.setTimeout("set_mode_f()", 5000);
}

if (keys.up.state)
{
if (govny[0].flight==0) govny[0].flight=12;
}
if (keys.left.state)
{
govny[0].side=-1;
govny[0].dx=-25;
}
if (keys.right.state)
{
govny[0].side=1;
govny[0].dx=25;
}
if (govny[0].flight>0)
{
govny[0].flight--;
if (govny[0].flight>6) govny[0].dy=-25;
else govny[0].dy=(govny[0].y<450)?25:0;
}
else govny[0].dy=(govny[0].y<450)?25:0;

if (govny[0].y>=450) govny[0].y=450;
var spr=(mode)?"hui":"muravei";
var hm=(govny[0].side==1)?"":"_m";
document.getElementById(govny[0].sprite).src=preload_src[spr+hm];

move_player();
}
function move_player()
{
var xplus=0;
var yplus=0;
var ans=move_gameobject(govny[0], govny[0].dx, govny[0].dy);
for (a_ind in ans)
{
var s_ind=ans[a_ind];
var s=(s_ind>=0)?govny[s_ind]:{id:s_ind};
switch(s.id)
{
case -2:
{
if (govny[0].x+govny[0].dl+govny[0].width>=900) xplus-=25;
//if (govny[0].y+govny[0].dt<=0) yplus-=25;
//if (govny[0].y+govny[0].dt+govny[0].height>=00) yplus-=25;
break;
}
case -3:
{
if (govny[0].x+govny[0].dl<=0) xplus+=25;
break;
}
case GOVNO:
{
player_meets_govno(s_ind);
break;
}
case METHADOSHKA:
case CANNABIS_G:
{
if (s.id==METHADOSHKA)
meth++;
else
cannabis++;
show_info();

govny[s_ind].id=0;
delete_govno(s_ind, govny);
break;

}
case SOLOMINKA:
{

if (s.x<=govny[0].x)
 {
if (s.y<=govny[0].y)
 {

  if (Math.abs(s.x+s.width+s.dl-govny[0].x-govny[0].dl)<Math.abs(s.y+s.height+s.dt-govny[0].y-govny[0].dt))
	{xplus+=25;}
  else 
  	yplus+=25;
 }
 else  
 if (Math.abs(s.x+s.width+s.dl-govny[0].x-govny[0].dl)<Math.abs(govny[0].y+govny[0].height+govny[0].dt-s.y-s.dt-25))
	{xplus+=25; }
  else 
  	yplus-=25;
}
else
{
if (s.y<=govny[0].y)
 {
  if (Math.abs(govny[0].x+govny[0].width+govny[0].dl-s.x)<Math.abs(s.y+s.height+s.dt-govny[0].y-govny[0].dt))
	xplus-=25;
  else 
  	yplus+=25;
 }
 else  
 if (Math.abs(govny[0].x+govny[0].width+govny[0].dl-govny[0].x)<Math.abs(govny[0].y+govny[0].height+govny[0].dt-s.y-s.dt-25))
	xplus-=25;
  else 
  	yplus-=25;
	}

if (mode) player_meets_govno(s_ind);

break;
}
default:
{
if(govny[0].w!=(-govny[0].dx/25))
govny[0].w=0;
break;
}
}
}

xplus=Math.abs(xplus)>25?xplus/Math.abs(xplus)*25:xplus;
yplus=Math.abs(yplus)>25?yplus/Math.abs(yplus)*25:yplus;


if (xplus==govny[0].dx)
xplus=0;
if (xplus==-govny[0].dx)
xplus=xplus;
govny[0].x+=xplus;
govny[0].y+=yplus;
movesprite(govny[0].sprite, govny[0].x, govny[0].y);
govny[0].dx=0;
}

function preload()
{
for (var i in preload_src)
{
img=new Image();
img.src=preload_src[i];
preloaded_sprites.push(img);
}
};

function  addsprite(name)
{
var img=document.createElement("img");
img.src=preload_src[name];
var i=Math.floor(Math.random()*10000);
while (document.getElementById(name+i))
i++;
img.id=name+i;
img.style.position="absolute";
document.getElementById("my_div").appendChild(img);
return img.id;
}
function deletesprite(sprite)
{if (document.getElementById(sprite)!=null)
document.getElementById("my_div").removeChild(document.getElementById(sprite));
}

function move_gameobject(obj, dx, dy)
{
obj.x+=dx;
obj.y+=dy;
var ans=collision(obj);

if (obj.sprite!=govny[0].sprite) kkk=-101; else kkk=0;

if (obj.x+obj.width+obj.dl+dx>gameField[0].length*50)
	ans.push(-2);
if (obj.x+obj.dl+dx<0)
	ans.push(-3);
if (obj.y+obj.height+obj.dt+dy>gameField.length*50)
	ans.push(-4);
if (obj.y+obj.dt+dy<kkk)
	ans.push(-5);

	
return 	ans;
}

/**************************************************************************************************************************************************************/

function collision(obj)
{
var ans=new Array;
for (ind in govny)
{
	if (govny[ind].sprite!=obj.sprite)
	{

		if (govny[ind].x<=obj.x && govny[ind].y<=obj.y)
			{
				if(govny[ind].x+govny[ind].dl+govny[ind].width>=obj.x+obj.dl && govny[ind].y+govny[ind].dt+govny[ind].height>=obj.y+obj.dt)
						{
						ans.push(ind);
						}
			}
		if (govny[ind].x>obj.x && govny[ind].y<=obj.y)
			{
				if(govny[ind].x+govny[ind].dl<=obj.x+obj.dl+obj.width && govny[ind].y+govny[ind].dt+govny[ind].height>=obj.y+obj.dt)
						{
						ans.push(ind);
						}
			}
		if (govny[ind].x>obj.x && govny[ind].y>obj.y)
			{
				if(govny[ind].x<=obj.x+obj.dl+obj.width && govny[ind].y+govny[ind].dt<=obj.y+obj.dt+obj.height)
						{
						ans.push(ind);
						}
			}
		if (govny[ind].x<=obj.x && govny[ind].y>obj.y)
			{
				if(govny[ind].x+govny[ind].dl+govny[ind].width>=obj.x+obj.dl && govny[ind].y+govny[ind].dt<=obj.y+obj.dt+obj.height)
						{
						ans.push(ind);
						}
			}
	}	
}
if (ans.length==0)
ans.push(-1);
return ans;
};
function movesprite(id, newx, newy)
{
if (document.getElementById(id)==null)
{}//console.log(id)
else
{
document.getElementById(id).style.left=(newx)+"px";
document.getElementById(id).style.top=(newy)+"px";
}
}

function govno_on_interval()
{
if (pause) return;
for (i_ind=1; i_ind< govny.length; i_ind++)
if (govny[i_ind].interval)
{
var ans=move_gameobject(govny[i_ind], govny[i_ind].dx, govny[i_ind].dy);
for (a_ind in ans)
{
var s_ind=ans[a_ind];
var s=(s_ind>=0)?govny[s_ind]:{id:s_ind};
switch (s.id)
{
case -4:
case SOLOMINKA:
{
if (s.id>0)
{
govny[i_ind].x-=govny[i_ind].dx;
}
govny[i_ind].interval=false;
if (govny[i_ind].id==GOVNO)
window.setTimeout("transform_govno("+i_ind+")", 100);
break;
}
case -2:
case -3:
case -5:
{
govny[i_ind].id=0;
delete_govno(i_ind, govny);
break;
}

case GOVNO:
{
govny[i_ind].dx=-govny[i_ind].dx;
govny[i_ind].dy=-govny[i_ind].dy;
break;
}
case METHADOSHKA:
case CANNABIS_G:
{
govny[s_ind].id=0;
delete_govno(s_ind, govny);
if (i_ind>s_ind) i_ind--;
break;
}
case PLAYER:
{
player_meets_govno(i_ind);
break;
}
default:
{
break;
}
}
}
 
 movesprite(govny[i_ind].sprite, govny[i_ind].x, govny[i_ind].y);
}
}

function transform_govno(ind)
{ 
if (pause) return;
deletesprite(govny[ind].sprite);
ran=Math.floor(Math.random()*9);
if (ran<6)
{
govny[ind].dx=0;
govny[ind].dy=0;
govny[ind].sprite=addsprite("solominka");
govny[ind].id=SOLOMINKA;
}
else if (ran<=7)
{
govny[ind].dx=0;
govny[ind].dy=0;
govny[ind].y-=25;
govny[ind].height=50;
govny[ind].dt=50;
govny[ind].id=CANNABIS_G;
govny[ind].sprite=addsprite("cannabis_g");
} else if (ran==8)
{
govny[ind].dx=0;
govny[ind].dy=0;
govny[ind].id=METHADOSHKA;
govny[ind].sprite=addsprite("methadoshka");
} 
else
{
return;
}
movesprite(govny[ind].sprite, govny[ind].x, govny[ind].y);
}
function init_govno()
{
if (pause) return;
my_x=Math.floor(Math.random()*gameField[0].length)*50;
my_y=-100;
var sprt=addsprite("govno");
hide(sprt);
govny.push({id:2, width:48, height:98, x:my_x, y:my_y, dl:0, dt:0,  dx:0, dy:25, sprite:sprt, interval:true});
movesprite(sprt, my_x, my_y);
show(sprt);
}
function init_player()
{
govny[0].sprite=addsprite("muravei");
move_gameobject(govny[0], 0, 0);
movesprite(govny[0].sprite, govny[0].x, govny[0].y);
window.setInterval("flight()", 100);

}
function player_meets_govno(ind)
{
if (!mode)
{
if (!govny[0].unkillable)
{
govny[ind].dx=govny[0].dx;
govny[ind].dy=-govny[ind].dy;
govny[0].life--;
govny[0].unkillable=true;
window.setTimeout("govny[0].unkillable=false", 1500);
}
if (govny[0].life<0)
{govny[0].life=0;
pause=true;
window.setTimeout("game_over();", 100);
}
show_info();

}
else
{
if (!govny[0].unkillable)
{
govny[ind].dx=govny[0].dx;
govny[ind].dy=(govny[0].dy)<0?govny[0].dy:(-govny[ind].dy);
govny[0].unkillable=true;
window.setTimeout("govny[0].unkillable=false", 102);
if (govny[ind].interval==false)
govny[ind].interval=true;
}
}

govny[ind].x+=govny[ind].dx;
govny[ind].y+=govny[ind].dy;
};

function delete_govno(ind, govny)
{
deletesprite(govny[eval(ind)].sprite);
var govny=govny.slice(0, eval(ind)).concat(govny.slice(eval(ind)+1));
if (i_ind>ind) i_ind--;
}
/*function roizman_dance()
{
}*/

function init_roizman()
{
my_x=govny[0].x;//.floor(Math.random()*18)*50;
my_y=govny[0].y-100;//Math.floor(Math.random()*10)*50;
//dx=25*((Math.floor(Math.random()*2)>0)?1:0);
//dy=25*((Math.floor(Math.random()*2)>0)?1:0);

govny[1]={id:0, width:30, height:90, dl:35, dt:5, x:my_x, y:my_y, dx:0, dy:0, sprite:""};
govny[1].sprite=addsprite("roizman");
movesprite(govny[1].sprite, govny[1].x, govny[1].y);
//move_gameobject(govny[1], 0, 0);
//window.setInterval("roizman_dance()", 100);
}
function game_over()
{
gameover=true;
set_img(govny[0].sprite, preload_src.grobik);
for (var i=1; i<govny.length; i++)
delete_govno(i, govny);

init_roizman();
}
