
time1=0;
time2=0;
nextblock=3;
downpas=0;
score=0;
life=0;

deathcount=0;

var unit_st=new makeArray(100);
var unit_co=new makeArray(100);
var unit_ty=new makeArray(100);
var unit_ob=new makeArray(100);

var blockdata=new makeArray(400);
var colorcode=new makeArray(100);

var retu=new makeArray(10);

var linechecker=new makeArray(15);
linecount=0;

now_block=0;
now_x=0;
now_y=0;
now_houkou=0;

pausecheck=0;

timewait=1500;
timecharge=0;

nextscore=0;

keycheck=0;
keycheck2=0;
gamemode=0;
gamemode2=0;
gamcount=0;

x3=0;
y3=0;
h3=0;
y3=0;

lifecount=0;

function gamestart()
{

	if(gamemode==2)
	{
	alert("GAME END");
	startbutton.value="START";
	gamemode=1;
	return;
	}

	if(gamemode!=1 || time1!=0 || time2!=0)return;
	
	for(z=0;z<60;z++)
	{
		unit_ty[z]=0;
		unit_co[z]=0;
		unit_st[z]=0;
		drawblock2(Math.floor(z/10),z%10,0,4);
	}
	retu[1]=0;
	retu[2]=0;
	retu[3]=0;
	retu[4]=0;
	
	for(z=1;z<=4;z++)
	{
		eval("document.all.retutag"+z+".innerHTML="+retu[z]);
	}
	startbutton.value="END";
	alert("GAME START!!!");
	comeblock();
	gamemode=2;
	timer();
	downtimer();
	score=0;
	life=2;
	nextscore=2000;
	timewait=1500;
	timeharge=0;
	document.all.scoretag.innerHTML="0";
	document.all.lifetag.innerHTML="x2";
	
	
}

function pauseon()
{
	if(gamemode!=2)return;
	if(pausecheck==0)
	{
		pausecheck=1;
	}
	else
	{
		if(time1==0 && time2==0)
		{pausecheck=0;timer();downtimer();}
	}
}

function keydownact()
{
	if(keycheck==1)return;
	if(gamemode!=2)return;
	if(gamemode2!=0)return;
	if(deathcount>0)return;
	if(pausecheck==1)return;
	keycheck=1;
	k=window.event.keyCode;
	bcheck=0;
	switch(k)
	{
		case 90:
		bcheck=checkblock(now_x-1,now_y,now_block,now_houkou);
		if(bcheck==0)
		{
			drawblock(now_x,now_y,now_block,now_houkou,0,4);
			now_x--;
			drawblock(now_x,now_y,now_block,now_houkou,now_block,4);
		}
		break;
		
		case 67:
		bcheck=checkblock(now_x+1,now_y,now_block,now_houkou);
		if(bcheck==0)
		{
			drawblock(now_x,now_y,now_block,now_houkou,0,4);
			now_x++;
			drawblock(now_x,now_y,now_block,now_houkou,now_block,4);
		}
		break;
		
		case 65:
		bcheck=checkblock(now_x,now_y,now_block,(now_houkou+3)%4);
		if(bcheck==0)
		{
			drawblock(now_x,now_y,now_block,now_houkou,0,4);
			now_houkou=(now_houkou+3)%4;
			drawblock(now_x,now_y,now_block,now_houkou,now_block,4);
		}
		break;
		
		case 68:
		bcheck=checkblock(now_x,now_y,now_block,(now_houkou+1)%4);
		if(bcheck==0)
		{
			drawblock(now_x,now_y,now_block,now_houkou,0,4);
			now_houkou=(now_houkou+1)%4;
			drawblock(now_x,now_y,now_block,now_houkou,now_block,4);
		}
		break;
		
		case 88:
		down();
		break;
		
		case 86:
		for(z=0;down()==0;z=z)
		{
			z=z;
		}
		break;
	}
}

function down()
{
	if(checkblock(now_x,now_y+1,now_block,now_houkou)==0)
	{
			drawblock(now_x,now_y,now_block,now_houkou,0,4);
			now_y++;
			drawblock(now_x,now_y,now_block,now_houkou,now_block,4);
			return 0;
	}
	else
	{
		for(z=0;z<4;z++)
		{
		xxx=now_x+blockdata[now_block*10+now_houkou*100+z*2+1];
		yyy=now_y+blockdata[now_block*10+now_houkou*100+z*2+2];	
		if(yyy>=0)
		{
		unit_st[xxx*10+yyy]=1;
		unit_co[xxx*10+yyy]=0;
		unit_ty[xxx*10+yyy]=now_block;
		}
		}
		linecount=0;
		for(z=0;z<10;z++)
		{
			linechecker[z]=1;
			
			for(zz=0;zz<6;zz++)
			{
				if(unit_st[z+zz*10]==0)
				{
					zz=10;
					linechecker[z]=0;
				}
			}
			if(linechecker[z]==1)linecount++;
		}
		if(linecount==0)
		{
		comeblock();
		}
		else
		{
			gamemode2=1;
			gamecount=6;
			if(linecount>1){gamemode2=2;gamecount=5;}
			if(linecount>2){gamemode2=3;gamecount=15;}
			
		}
		return 1;
	}
}

function downtimer()
{
	if(gamemode!=2)
	{time2=0;return;}
	if(pausecheck==1)
	{time2=0;return;}	
	time2=1;
	if(gamemode2==0)
	{
		if(downpas==0)
		{down();}
		downpas=0;
	}
	timecharge+=timewait;
	if(timecharge>=6000)
	{
		timecharge-=6000;
		timewait-=10;
	}
	setTimeout("downtimer()",timewait);
}

function timer()
{
if(gamemode!=2)
{time1=0;return;}
if(pausecheck==1)
{time1=0;return;}
time1=1;
if(deathcount>0)
{
	deathcount--;
	switch(deathcount)
	{
	case 0:
	document.all.gameback.bgColor="#000000";
	break;
	
	case 1:
	document.all.gameback.bgColor="#330000";
	break;
	
	case 2:
	document.all.gameback.bgColor="#660000";
	break;
	
	case 3:
	document.all.gameback.bgColor="#990000";
	break;
	
	case 4:
	document.all.gameback.bgColor="#cc0000";
	break;
	
	case 5:
	document.all.gameback.bgColor="#ff0000";
	break;
	}
	if(life<0)
	{
		if(deathcount<=0)
		{
		startbutton.value="START";
		alert("GAME OVER");
		alert("LAST SCORE : "+score);
		gamemode=1;
		gamemode2=0;
		time1=0;
		return;
		}
		else
	{
		setTimeout("timer()",75);
		return;
	}
	
	}

}

if(lifecount>0)
{
	lifecount--;
	switch(lifecount)
	{
	case 0:
	document.all.gameback.bgColor="#000000";
	break;
	
	case 1:
	document.all.gameback.bgColor="#224422";
	break;
	
	case 2:
	document.all.gameback.bgColor="#448844";
	break;
	
	case 3:
	document.all.gameback.bgColor="#66aa66";
	break;
	
	case 4:
	document.all.gameback.bgColor="#448844";
	break;
	
	case 5:
	document.all.gameback.bgColor="#224422";
	break;
	}
}


if(gamemode2==3)
{
	gamecount--;
	for(y=0;y<10;y++)
	{
		for(x=0;x<6;x++)
		{
			if(gamecount-4<=y && y<=gamecount)
			{
				drawblock2(x,y,unit_ty[x*10+y],gamecount-y+4);
			}
			else
			{
				drawblock2(x,y,unit_ty[x*10+y],4);
			}
		}
	}
	if(gamecount<=0)
	{
		gamecount=5;
		gamemode2=2;
	}
	setTimeout("timer()",33);
	return;
	
}

if(gamemode2==2)
{
gamecount--;
for(y4=0;y4<10;y4++)
{
	if(linechecker[y4]==1)
	{
		for(x4=0;x4<6;x4++)
		{
	
	if(gamecount==4 || gamecount==2)
	{
		drawblock2(x4,y4,unit_ty[x4*10+y4],0);
	}
	else
	{
		drawblock2(x4,y4,unit_ty[x4*10+y4],4);
	}
		}
	}
}

if(gamecount<=1)
{
	gamemode2=1;
	gamecount=6;
}
setTimeout("timer()",75);
return;
}

if(gamemode2==1)
{
gamecount--;
if(gamecount>=0)
{
for(y4=0;y4<10;y4++)
{
	if(linechecker[y4]==1)
	{
		for(x4=0;x4<6;x4++)
		{
			if(unit_st[x4*10+y4]!=0)
			{
			drawblock2(x4,y4,unit_ty[x4*10+y4],gamecount);
			}
		}
	}
}
}

if(gamecount<0)
{
	for(y=9;y>=0;y--)
	{
		if(linechecker[y]==1)
		{
			for(yy=y;yy>=0;yy--)
			{
			for(x=0;x<6;x++)
			{
				if(yy>0)
				{
				unit_st[x*10+yy]=unit_st[x*10+yy-1];
				unit_co[x*10+yy]=unit_co[x*10+yy-1];
				unit_ty[x*10+yy]=unit_ty[x*10+yy-1];
				}
				else
				{
				unit_st[x*10+yy]=0;
				unit_co[x*10+yy]=0;
				unit_ty[x*10+yy]=0;
				}
			}
			if(yy>0)
			{
			linechecker[yy]=linechecker[yy-1];
			}
			else
			{
			linechecker[yy]=0;
			}
			}
			y++;
		}
	}
	
	for(z=0;z<60;z++)
	{
		if(unit_st!=0)
		{drawblock2(Math.floor(z/10),z%10,unit_ty[z],4);}
		else
		{drawblock2(Math.floor(z/10),z%10,0,4);}
	}
	
	score+=(linecount*(linecount+1)*50);
	if(linecount>0)
	{
	retu[linecount]++;
	eval("document.all.retutag"+linecount+".innerHTML="+retu[linecount]);
	}
	document.all.scoretag.innerHTML=score;
	if(score>=nextscore)
	{
		nextscore+=2000;
		life++;
		lifecount=6;
		document.all.lifetag.innerHTML="x"+life;
	}
	gamemode2=0;
	comeblock();
}
setTimeout("timer()",75);
return;
}

for(z=0;z<60;z++)
{
	if(unit_st[z]==1)
	{
		unit_co[z]--;
		if(unit_co[z]<=0)unit_co[z]=14;
		
		if(unit_co[z]>9)
		{
			drawblock2(Math.floor(z/10),z%10,unit_ty[z],unit_co[z]-6);
		}
	}
}


	setTimeout("timer()",75);
}

function keyupact()
{
	keycheck=0;
	keycheck2=0;
}

function loadup()
{

	for(z=0;z<100;z++)
	{
		blockdata[z]=0;
	}
	
	blockdata[11]=-1;blockdata[12]=0;
	blockdata[13]=0;blockdata[14]=0;
	blockdata[15]=1;blockdata[16]=0;
	blockdata[17]=2;blockdata[18]=0;

	blockdata[21]=0;blockdata[22]=1;
	blockdata[23]=0;blockdata[24]=0;
	blockdata[25]=1;blockdata[26]=1;
	blockdata[27]=1;blockdata[28]=0;
	
	blockdata[31]=0;blockdata[32]=1;
	blockdata[33]=-1;blockdata[34]=0;
	blockdata[35]=0;blockdata[36]=0;
	blockdata[37]=1;blockdata[38]=0;

	blockdata[41]=0;blockdata[42]=0;
	blockdata[43]=1;blockdata[44]=0;
	blockdata[45]=0;blockdata[46]=1;
	blockdata[47]=-1;blockdata[48]=1;
	
	blockdata[51]=0;blockdata[52]=0;
	blockdata[53]=0;blockdata[54]=1;
	blockdata[55]=-1;blockdata[56]=0;
	blockdata[57]=1;blockdata[58]=1;
	
	blockdata[61]=1;blockdata[62]=1;
	blockdata[63]=1;blockdata[64]=0;
	blockdata[65]=0;blockdata[66]=0;
	blockdata[67]=-1;blockdata[68]=0;
	
	blockdata[71]=-1;blockdata[72]=1;
	blockdata[73]=-1;blockdata[74]=0;
	blockdata[75]=0;blockdata[76]=0;
	blockdata[77]=1;blockdata[78]=0;

	colorcode[0]="'#000000'";
	colorcode[1]="'#080808'";
	colorcode[2]="'#101010'";
	colorcode[3]="'#181818'";
	colorcode[4]="'#202020'";
	colorcode[5]="'#282828'";
	colorcode[6]="'#303030'";
	colorcode[7]="'#383838'";
	colorcode[8]="'#444444'";

	colorcode[10]="'#222222'";
	colorcode[11]="'#550000'";
	colorcode[12]="'#880000'";
	colorcode[13]="'#cc0000'";
	colorcode[14]="'#ff0000'";
	colorcode[15]="'#ff4444'";
	colorcode[16]="'#ff8888'";
	colorcode[17]="'#ffcccc'";
	colorcode[18]="'#ffffff'";
	
	colorcode[50]="'#222222'";
	colorcode[51]="'#005500'";
	colorcode[52]="'#008800'";
	colorcode[53]="'#00cc00'";
	colorcode[54]="'#00ff00'";
	colorcode[55]="'#44ff44'";
	colorcode[56]="'#88ff88'";
	colorcode[57]="'#ccffcc'";
	colorcode[58]="'#ffffff'";
	
	colorcode[30]="'#222222'";
	colorcode[31]="'#000055'";
	colorcode[32]="'#000088'";
	colorcode[33]="'#0000cc'";
	colorcode[34]="'#0000ff'";
	colorcode[35]="'#4444ff'";
	colorcode[36]="'#8888ff'";
	colorcode[37]="'#ccccff'";
	colorcode[38]="'#ffffff'";
	
	colorcode[40]="'#222222'";
	colorcode[41]="'#553300'";
	colorcode[42]="'#884400'";
	colorcode[43]="'#cc7700'";
	colorcode[44]="'#ff8800'";
	colorcode[45]="'#ffbb44'";
	colorcode[46]="'#ffcc88'";
	colorcode[47]="'#ffeecc'";
	colorcode[48]="'#ffffff'";
	
	colorcode[20]="'#222222'";
	colorcode[21]="'#555500'";
	colorcode[22]="'#888800'";
	colorcode[23]="'#cccc00'";
	colorcode[24]="'#ffff00'";
	colorcode[25]="'#ffff44'";
	colorcode[26]="'#ffff88'";
	colorcode[27]="'#ffffcc'";
	colorcode[28]="'#ffffff'";
	
	colorcode[60]="'#222222'";
	colorcode[61]="'#005555'";
	colorcode[62]="'#008888'";
	colorcode[63]="'#00cccc'";
	colorcode[64]="'#00ffff'";
	colorcode[65]="'#44ffff'";
	colorcode[66]="'#88ffff'";
	colorcode[67]="'#ccffff'";
	colorcode[68]="'#ffffff'";
	
	colorcode[70]="'#222222'";
	colorcode[71]="'#550055'";
	colorcode[72]="'#880088'";
	colorcode[73]="'#cc00cc'";
	colorcode[74]="'#ff00ff'";
	colorcode[75]="'#ff44ff'";
	colorcode[76]="'#ff88ff'";
	colorcode[77]="'#ffccff'";
	colorcode[78]="'#ffffff'";

for(z=1;z<81;z+=2)
{
	blockdata[z+100]=blockdata[z+1]*(-1);
	blockdata[z+101]=blockdata[z];
	
	blockdata[z+200]=blockdata[z]*(-1);
	blockdata[z+201]=blockdata[z+1]*(-1);

	blockdata[z+300]=blockdata[z+1];
	blockdata[z+301]=blockdata[z]*(-1);
	switch(Math.floor(z/10))
	{
		case 1:
		case 4:
		case 5:
		blockdata[z+200]=blockdata[z];
		blockdata[z+201]=blockdata[z+1];
		blockdata[z+300]=blockdata[z+100];
		blockdata[z+301]=blockdata[z+101];		
		break;
		
		case 2:
		blockdata[z+100]=blockdata[z];
		blockdata[z+101]=blockdata[z+1];		
		blockdata[z+200]=blockdata[z];
		blockdata[z+201]=blockdata[z+1];
		blockdata[z+300]=blockdata[z];
		blockdata[z+301]=blockdata[z+1];
		break;
	}
}

	ttt="";
	for(y=0;y<=9;y++)
	{
		for(x=0;x<=5;x++)
		{
			ttt=ttt+"<font id='unit"+x+y+"' color='#222222'>¡</font>";
			
			unit_ob[y+x*10]="document.all.unit"+x+y+".color=";
		}
		ttt=ttt+"<br>";
	}
	document.all.gamefirld.innerHTML=ttt;
	
	gamemode=1;
	startbutton.value="START";
	
}

function makeArray(n) {
        this.length = n;
        for (i = 0; i < n; i++) {
		this[i] = null
	}
}

function comeblock()
{
	
	now_block=nextblock;
	nextblock=Math.floor(Math.random()*7+1);
	
	for(x=0;x<=2;x++)
	{
		for(y=0;y<=3;y++)
		{
			eval("document.all.next"+x+y+".color='#222222'");
		}
	}
	
	for(z=1;z<=7;z+=2)
	{
		eval("document.all.next"+(1+blockdata[100+nextblock*10+z])+(1+blockdata[101+nextblock*10+z])+".color="+colorcode[nextblock*10+4]);
	}
	now_houkou=0;
	now_x=2;
	now_y=0;
	if(checkblock(now_x,now_y,now_block,now_houkou)==0)
	{
	drawblock(now_x,now_y,now_block,0,now_block,4);downpas=1;
	}
	else
	{
	life--;
	gamemode2=1;
	deathcount=6;
	if(life>=0)
	{
		document.all.lifetag.innerHTML="x"+life;
		for(z=0;z<10;z++)
		{
			linechecker[z]=z%2;
		}
		gamemode2=1;
		gamecount=6;
		linecount=0;
	}

	}
}

function drawblock(x1,y1,b1,h1,c1,f1)
{
	for(z=0;z<4;z++)
	{
		drawblock2(x1+blockdata[b1*10+h1*100+z*2+1],y1+blockdata[b1*10+h1*100+z*2+2],c1,f1);
	}

}

function drawblock2(x2,y2,c2,f2)
{
	if(y2<0)return;
	eval(unit_ob[x2*10+y2]+colorcode[c2*10+f2]);
}

function checkblock(x3,y3,b3,h3)
{
	r_check=0;
	for(z3=0;z3<4;z3++)
	{
		xxx=0;
		yyy=0;
		xxx=x3+blockdata[b3*10+h3*100+z3*2+1];
		yyy=y3+blockdata[b3*10+h3*100+z3*2+2];
		
		if(xxx>=0 && xxx<6 && yyy<10)
		{
			if(yyy>=0)
			{
			if(unit_st[xxx*10+yyy]!=0)
			{
				
				r_check=1;
				z3=10;
			}
			}
		}
		else
		{
			r_check=1;
			z3=10;
		}
	}
	
	return r_check;
}
