

function showall()
{
var returnedarray=new Array(3);	
//make sure that the position is correct and that the the displayed background iscorrect
//	$objResponse->addAssign("backgroundimage","style.background", $objcurrentstate->getbackgroundimage());//XXX later on assign values fronm currentstate

// show content of commandline
//	$objResponse->addAssign("commandline","innerHTML",$objcurrentstate->getCommandline());

//// show visible items
//	$objcurrentstate->getvisibleviewitems();


//get current directions itemsdirections 1 south 2 west 3 north 4east
if ( currentplayerdirection=="south"  ) adv_currentstate.currentdirection=1;
if ( currentplayerdirection=="west"  ) adv_currentstate.currentdirection=2;
if ( currentplayerdirection=="north"  ) adv_currentstate.currentdirection=3;
if ( currentplayerdirection=="east"  ) adv_currentstate.currentdirection=4;

if (adv_currentstate.currentlocationx!=currentplayerpositionx || adv_currentstate.currentlocationy!=currentplayerpositiony || adv_currentstate.currentlocationz!=currentplayerpositionz)
	 { adv_currentstate.currentitemid=0; adv_currentstate.currentitemid2=0; }
adv_currentstate.currentlocationx=currentplayerpositionx;
adv_currentstate.currentlocationy=currentplayerpositiony;
adv_currentstate.currentlocationz=currentplayerpositionz;



returnedarray[0]=0;
returnedarray[1]=0;
returnedarray[2]=0;
returnedarray=getvisibleviewitems();
//get all visible items and the 
//	//iterate over viewitem
//for each item get position and Image to display it 
	for (x=0;x<adv_currentstate.maxviewitems;x++){
		adv_viewdiv[x]=returnedarray[x];
		if (x==0) window.document.leftspace.src=imagedir+"left1"+imageext;
		//if (x==0) window.document.leftspace.src=imagedir+"left"+returnedarray[x]+imageext;
		if (x==1) window.document.forwardspace.src=imagedir+"forward"+returnedarray[x]+imageext;
		if (x==2) window.document.rightspace.src=imagedir+"right1"+imageext;
		//if (x==2) window.document.rightspace.src=imagedir+"right"+returnedarray[x]+imageext;
	
	
	}

	getvisibleinventoryitems();// stored in adv_inventorydiv right away
	//after getting visibile items into array iterate over it to display the images.	
	for (x=0;x<adv_currentstate.maxinvitems;x++){
		eval("window.document.inventoryitem"+x+".src=imagedir+'inv'+adv_inventorydiv[x]+imageext;");
	}
	
	
	// Display commandline and Textline after getting it with getCommandline & getTextline());
	//document.getElementById('commandline').innerHTML= getCommandline();
	//document.getElementById('textline').innerHTML= getTextline();
	window.document.storeform.commandline.value=getCommandline();
	window.document.storeform.textline.value=getTextline();
	return;
}

function submitcommand() 
{
executecommandline();
showall();
return;
}



function clickinventoryup()
{
decreaseinventoryposition();
showall();
return;

}

function clickinventorydown() 
{
increaseinventoryposition();
showall();
return;

}

function clickinventoryitem(selectedinventoryitem) 
{
	selectcurrentitem(adv_inventorydiv[selectedinventoryitem]);
	return;

}


function clickviewitem(selectedviewitem)
{
	selectcurrentitem(adv_viewdiv[selectedviewitem]);
	return;
}

function selectcurrentitem(selecteditemid)
{
	if (selecteditemid==adv_currentstate.currentitemid || selecteditemid==adv_currentstate.currentitemid2) 
		{ executecommandline();return;}
if (adv_currentstate.currentactionid==3 && adv_currentstate.currentitemid>0 && selecteditemid!=adv_currentstate.currentitemid) 
	{ adv_currentstate.currentitemid2=selecteditemid; } 
else {  
	adv_currentstate.currentitemid2=0;
	adv_currentstate.currentitemid=selecteditemid; 
}
showall();
return;

}

function continuetextline()
{
changetextlineidtonextid();
showall();
return;
}

function getCommandline()
{
	var returntext="";
	returntext=getstringbyid(adv_actions[adv_currentstate.currentactionid])+" ";
	// ATTENTION THE COMMANDS ARE NOT YET localized XXX
	
	returntext+=getstringbyid(adv_items[adv_currentstate.currentitemid].shortnamestringid);
	if (adv_currentstate.currentactionid==3 && adv_items[adv_currentstate.currentitemid].use_with_flag==1)
	{
		returntext+=getstringbyid(7);// string of 'with'
		returntext+=getstringbyid(adv_items[adv_currentstate.currentitemid2].shortnamestringid);
	}
	return returntext;
}

function getTextline()
{	
	return getstringbyid(adv_currentstate.currenttextlinestringid)
}

function getstringbyid(strid)
{
	if (adv_currentstate.languageid==1) return adv_strings[strid].stringcontentenglish;
	if (adv_currentstate.languageid==2) return adv_strings[strid].stringcontentgerman;
	return adv_strings[strid].stringcontentenglish;
}

function continuetextline()
{
	
	adv_currentstate.currenttextlinestringid=adv_strings[adv_currentstate.currenttextlinestringid].nextstringid
	showall();
}

function getvisibleviewitems()
{
	var tmp_result=new Array(3);
		
	tmp_result[0]=0;
	tmp_result[1]=0;
	tmp_result[2]=0;
	mycurrenthorizdiretion=adv_currentstate.currentdirection;
	
	
	maxitems=adv_currentstate.maxitems;
	for (i=0;i<maxitems;i++) 
	{
		if (adv_currentitemstate[i]=='show' || adv_currentitemstate[i]=='both' ) {
			if (adv_currentstate.currentlocationx==locationpos[adv_items[i].locationid].locationcorrx && adv_currentstate.currentlocationy==locationpos[adv_items[i].locationid].locationcorry && adv_currentstate.currentlocationz==locationpos[adv_items[i].locationid].locationcorrz ) {
				if (locationpos[adv_items[i].locationid].directionid==mycurrenthorizdiretion-1) tmp_result[0]=i;
				if (locationpos[adv_items[i].locationid].directionid==mycurrenthorizdiretion) tmp_result[1]=i;
				if (locationpos[adv_items[i].locationid].directionid==mycurrenthorizdiretion+1) tmp_result[2]=i;
				if (locationpos[adv_items[i].locationid].directionid==1 && mycurrenthorizdiretion==4) tmp_result[2]=i;
				if (locationpos[adv_items[i].locationid].directionid==4 && mycurrenthorizdiretion==1) tmp_result[0]=i;
			}
		}
	}		
	return tmp_result;
}

function getvisibleinventoryitems()
{
	tmpinvpos=-1; 
	// in case that the inventory possition is move that offset has to be added to tmpinvpos
	for (i=0;i<adv_currentstate.maxinvitems;i++) adv_inventorydiv[i]=0;
	//fill adv_inventorydiv from 0-7
	for (i=0;i<maxitems;i++) {
		if (adv_currentitemstate[i]=='invt' || adv_currentitemstate[i]=='both' ) {
			tmpinvpos++;
			if (tmpinvpos>=0 && tmpinvpos<adv_currentstate.maxinvitems) adv_inventorydiv[tmpinvpos]=i;
		}
	}
		
}

function clickactionbutton(selectedactionbutton) 
{
	if (adv_currentstate.currentactionid==selectedactionbutton) executecommandline();
	adv_currentstate.currentactionid=selectedactionbutton;
	showall();
	return;
}




function executecommandline()
{ 
	actionscriptid=0;
	//get with itemids and actionid the right record and identify a ascript id 

	//adv_actionmapping contain the ui_actionid , ui_itemid, ui_itemid2, ui_actionscriptid
	maxnumberofmappings=adv_currentstate.maxnumberofmappings; //XXX could not it be read from the data itself?
	lines_found=0;
	for (iteratemap=1;iteratemap<maxnumberofmappings;iteratemap++) {
		if (adv_actionmappings[iteratemap][0]==adv_currentstate.currentactionid){
			if (adv_actionmappings[iteratemap][1]==adv_currentstate.currentitemid){
				if (adv_currentstate.currentactionid==3) {
					if (adv_actionmappings[iteratemap][2]==adv_currentstate.currentitemid2) {
						executeactionscript(adv_actionmappings[iteratemap][3]);
						lines_found++;
					}
				} else {						
					executeactionscript(adv_actionmappings[iteratemap][3]);
					lines_found++;
				}
			}
		}
	}
	if (lines_found==0) {
		if (adv_currentstate.currentactionid==1) showtext(8);
		if (adv_currentstate.currentactionid==2) showtext(9);
		if (adv_currentstate.currentactionid==3) showtext(10);
	} else {
		if (adv_currentstate.currentactionid==2 || adv_currentstate.currentactionid==3) {
			adv_currentstate.currentitemid=0;
			adv_currentstate.currentitemid2=0;
		}
	}
	showall();
	return ;
	
}

function executeactionscript(actionscriptid)	{
	if (actionscriptid==0) return;
//adv_actionscripts contains ui_actionscriptid(=recordid), c_actionfunction, c_actionparameter, ui_nextactionscriptid, ui_otheractionscriptid
//adv_actionscripts[1]=['showtext',1,0,0 ]
	actionfunction=adv_actionscripts[actionscriptid][0];
	actionparameter=adv_actionscripts[actionscriptid][1];
	nextactionscriptid=adv_actionscripts[actionscriptid][2];
	nextactionscriptid2=adv_actionscripts[actionscriptid][3];
	if (actionfunction=="pickupitem") pickupitem(actionparameter);
	if (actionfunction=="hideiteminview") hideiteminview(actionparameter);
	if (actionfunction=="showiteminview") showiteminview(actionparameter);
	if (actionfunction=="showrandomisediteminviewinsteadof") showrandomisediteminviewinsteadof(actionparameter);
	if (actionfunction=="hideitemininventory") hideitemininventory(actionparameter);
	if (actionfunction=="showitemininventory") showitemininventory(actionparameter);
	if (actionfunction=="hideitemeverywhere") { hideitemininventory(actionparameter);hideiteminview(actionparameter); }
	//if (actionfunction=="changelocationto") changelocationto(actionparameter);
	if (actionfunction=="showtext") showtext(actionparameter);
	if (actionfunction=="setconditionflag") setconditionflag(actionparameter);
	if (actionfunction=="unsetconditionflag") unsetconditionflag(actionparameter);
	if (actionfunction=="getconditionflag") if (getconditionflag(actionparameter) ) nextactionscriptid=nextactionscriptid2;
	if (nextactionscriptid>actionscriptid || nextactionscriptid==0) {
		executeactionscript(nextactionscriptid);
	} else{
		alerting("Contact Game writer because of potential circular referemce because the nextactionscriptid ("+nextactionscriptid+") is not greater than current actionscriptid ("+actionscriptid+")");
	}
	
	
	
	return;
}

	
	
function showtext(ntlstringid){
	adv_currentstate.currenttextlinestringid=ntlstringid;
}

function showitemininventory(itemid){
	if (adv_currentitemstate[itemid]=='hide') adv_currentitemstate[itemid]='invt'
	if (adv_currentitemstate[itemid]=='show') adv_currentitemstate[itemid]='both'
}

function hideitemininventory(itemid){
	if (adv_currentitemstate[itemid]=='invt') adv_currentitemstate[itemid]='hide'
	if (adv_currentitemstate[itemid]=='both') adv_currentitemstate[itemid]='show'
}

function showiteminview(itemid){
	if (adv_currentitemstate[itemid]=='invt') adv_currentitemstate[itemid]='both'
	if (adv_currentitemstate[itemid]=='hide') adv_currentitemstate[itemid]='show'
}

function showrandomisediteminviewinsteadof(previousitemid){
	itemid=randompieces[adv_currentstate.currentrandompieceid];
	adv_items[itemid].locationid=adv_items[previousitemid].locationid;
	showiteminview(itemid);
	adv_currentstate.currentrandompieceid++;
}


function hideiteminview(itemid) {
	if (adv_currentitemstate[itemid]=='both') adv_currentitemstate[itemid]='invt'
	if (adv_currentitemstate[itemid]=='show') adv_currentitemstate[itemid]='hide'
	showallfields();//Link to advmaz.htm
}

function pickupitem(itemid)
{
	hideiteminview(itemid);
	showitemininventory(itemid);
}

function setconditionflag(flagname)
{
	
}
function unsetconditionflag(flagname)
{
	
}
function getconditionflag(flagname)
{
}


function adv_randomise(maxim)
{
//returns an integer between 1 and maxim.
tmp=Math.floor(Math.random()*maxim +1);
if (tmp>maxim) tmp=maxim;
return tmp;
}



function randomiseitemlocation() {
	firstlocationtorandomise=2;// the first location contains the exit that shall stay
	for (i=firstlocationtorandomise;i<adv_currentstate.maxnumberoflocations;i++)
	 {
	 	notunique=true;
	 	while (notunique) {
	 		locationpos[i].locationcorrx=adv_randomise(fieldsizex);
	 		locationpos[i].locationcorry=adv_randomise(fieldsizey);
	 		locationpos[i].locationcorrz=adv_randomise(fieldsizez);
	 		locationpos[i].locationcorrz=2;//XXX keeps items on level2
	 		locationpos[i].directionid=adv_randomise(4);
	 		locationpos[i].directionid=3;// XXXkeeps on the north side
	 		notunique=false;
	 		for (si=1;si<i;si++ ) 
	 			if (locationpos[i].locationcorrx==locationpos[si].locationcorrx )
	 			  if ( locationpos[i].locationcorry==locationpos[si].locationcorry )
	 			    if ( locationpos[i].locationcorrz==locationpos[si].locationcorrz )
	 			      if ( locationpos[i].directionid=locationpos[si].directionid)
	 		    		 notunique=true;
		} 
		
	 	;//find an empty locations
	}
	randomisefindingorder();
}

function clearfoundlocation() {
	
	for (xc=1;xc<=fieldsizex;xc++)
		for (yc=1;yc<=fieldsizey;yc++)
			for (zc=1;zc<=fieldsizez;zc++)
				foundlocation[xc][yc][zc]=false;
}

function randomisefindingorder() {
	//mix an array of randompieces
	maxnumberofrandompieces=adv_currentstate.maxrandomitems-1;//randompieces.length();
	// last  has to stay last as not to open exit to early
	for (i=0;i<maxnumberofrandompieces;i++) { ;
		swapwith=adv_randomise(maxnumberofrandompieces)-1
		tmppiece=randompieces[swapwith];
		randompieces[swapwith]=randompieces[i];
		randompieces[i]=tmppiece;
	}
}