var variant="train";//train or ship are valid variant

var imagedir="../gfx/train/";
var imageext='.png';
var rowlength=6;//for shipyard rowlength=7 see below
var rownumbers=8;
var maxgrouplength=5;
var lastx=0;
var lasty=0;

var fieldarray=new Array(5);//0 clear, 1 full
for (x=0;x<=rowlength+2;x++) { fieldarray[x]=new Array(rowlength+1);
 for (y=0;y<=rownumbers;y++)  fieldarray[x][y]=0;
}

//determines whether a mac - 
clientplatform = navigator.userAgent.toLowerCase();
mac=false;
if(clientplatform.indexOf("mac")!=-1) mac=true;
formname="playfield.";
if(mac)formname="";

function alerting(alertmsg)
{
window.document.playfield.alertbox.value=alertmsg
}

function randomise(maxim)
{
tmp=Math.floor(Math.random()*maxim+1);
return tmp;
}

function init_game() {
	for(y=1;y <= rownumbers;y++) for(x=0;x <= rowlength;x++) if(x>maxgrouplength) { fieldarray[x][y]=0; } else { fieldarray[x][y]=y*10+x; }
	completerandom();
	showall();
}

function mix(){
	var spacearrayx=new Array("0","6","7","6","7","6","7","6","7","6","7","6","7");
	var spacearrayy=new Array("0","1","1","2","2","3","3","4","4","5","5","6","6");
	var possiblepos=1;
	var possiblexpos=new Array();
	var possibleypos=new Array();
	count=0;
	while (possiblepos>0 && count < 60) {
		count++;
		possiblepos=0;
		//search loop
		for(y=1;y <= rownumbers;y++) for(x=1;x <=rowlength;x++) {
			curval=fieldarray[x][y];preval=fieldarray[x-1][y]
			if ((x==1 && (curval==11||curval==21||curval==31||curval==41||curval==51||curval==61 )) || (preval+1)==curval ) {
				possiblepos++;possiblexpos[possiblepos]=x;possibleypos[possiblepos]=y;
			}
		}
		
		spacearraypos=randomise(12);
		//target spacearrayx[spacearraypos] and spacearrayy[spacearraypos]
		sourcepos=randomise(possiblepos);
		//source possiblexpos[sourcepos] and possibleypos[sourcepos] 
		
		
		fieldarray[spacearrayx[spacearraypos]][spacearrayy[spacearraypos]]=fieldarray[possiblexpos[sourcepos]][possibleypos[sourcepos]];
		fieldarray[possiblexpos[sourcepos]][possibleypos[sourcepos]]=0;
		spacearrayx[spacearraypos]=possiblexpos[sourcepos];
		spacearrayy[spacearraypos]=possibleypos[sourcepos];
		
	} 
}

function completerandom() {
	var tempval=0;
	
	for(y=1;y <= rownumbers;y++) for(x=1;x <=rowlength;x++) {
		randomy=randomise(rownumbers);
		randomx=randomise(rowlength);
		tempval=fieldarray[x][y];
		fieldarray[x][y]=fieldarray[randomx][randomy];
		fieldarray[randomx][randomy]=tempval;
	}
}

function click_field(x,y) {
	alerting(" ");
	if (fieldarray[x][y] > 0) { lastx=x;lasty=y;return; }
	if (lastx==0 || lasty==0) return;
	curval=fieldarray[lastx][lasty];nextval=fieldarray[x+1][y];preval=fieldarray[x-1][y];
	
	if (!((x==1 && (curval % 10)==1 ) || ( curval+1==nextval && variant=="ship") ||  curval-1==preval )) { 
		alerting("Can not move there! ");
		return; 
	}
	
	//do move 
	fieldarray[x][y]=fieldarray[lastx][lasty];
	fieldarray[lastx][lasty]=0;
	showpiece(x,y);
	showpiece(lastx,lasty);
	lastx=0;lasty=0;
	if(!(moveleft())) {
		if (won()) {
			alerting("You won the game");
		}else {
			alerting("Sorry! No Move left!");
		}
	}
}

function remove_train(y) {
	firstpiece=fieldarray[1][y];
	if (!(firstpiece%10==1)) return;
	for (n=1;n<maxgrouplength;n++) if (!((firstpiece+n)==fieldarray[1+n][y])) return;
	for (x=1;x<=maxgrouplength;x++) {
		fieldarray[x][y]=0;
		showpiece(x,y) 
	}
}

function showall() {
 for(y=1;y<=rownumbers;y++)	for(x=1;x<=rowlength;x++) showpiece(x,y);
}

function showpiece(x,y) {
	if (variant=="ship") {
		eval("window.document."+formname+"r"+x+"r"+y+".src='"+imagedir+"truck"+fieldarray[x][y]+""+imageext+"'"); 
	} else {
		eval("window.document."+formname+"r"+x+"r"+y+".src='"+imagedir+"truck"+fieldarray[x][y]+""+imageext+"'"); 
	}
//	eval("window.document."+formname+"tr"+x+"r"+y+".value='"+fieldarray[x][y]+"'"); 
}

function moveleft() 
{
	for(y=1;y<=rownumbers;y++) {
		for(x=1;x<=rowlength;x++) {
			if (fieldarray[x][y]===0) {
				if(x==1) return true;//because you could place a start piece there
				if((fieldarray[x-1][y] % 10) < maxgrouplength && fieldarray[x-1][y] > 0 ) return true; //because you could place another piece here
				if(variant=="ship" && x<rowlength && (fieldarray[x+1][y] % 10) > 1) return true; //because in SHIPYARD you could place here a piece infront of the next
			}
		}
	}
	return false;
}

function won()
{
var rowgroup=0;
	for(y=1;y<=rownumbers;y++) {
		rowgroup=Math.floor(fieldarray[1][y]/10);
		for(x=1;x<=maxgrouplength;x++) {
			if ((fieldarray[x][y] % 10)!==x || rowgroup!==Math.floor(fieldarray[x][y]/10)) { return false; }
		}
	}
	return true;
}

function display_board() {
var imgname="truck";
if (variant=="ship") {
	imagedir="../gfx/train/";
	rowlength=7;
	imgname="ship";
}
document.write("<form name='playfield'><table border=0 cellpadding=0 cellspacing=0>");
for(y=1;y<=rownumbers;y++)
	{	
	document.write("<tr>");
	for(x=1;x<=rowlength;x++)
		{	
			document.write("<td width=20><a href='javascript:void(0);' onclick='click_field("+x+","+y+");' ><img src='"+imagedir+imgname+"0.gif' height=50 width=75 border=0 name='r"+x+"r"+y+"'></a></td>") ;
		}
	document.write("</tr>");
	}

document.write("</table><hr/>");
document.write("<input type='text' name='alertbox'  value=''/>");
document.write("<a href='javascript:init_game();'>start a new game</a></form>");
}