<!--
// Miner Macky game (javascript, html, and images) 
// Copyright 2002, Live Oak Games.  All Rights Reserved.

var unknown = 0;
var emptyspace = 0; // signifies empty space - no rope
var rope   = 1;
var dirt   = 2;
var rock   = 3;
var gold   = 5;
var boulder = 10;
var freeboulder = 11;

var rows = 10;
var columns = 10;
var numberofsquares = rows * columns;
var data = new Array(numberofsquares);
var revealed = new Array(numberofsquares);

// images 
var imagepath = "../graphics/digger/";
var vertborder = imagepath+"vertb.gif";
var horiborder = imagepath+"horib.gif";
var cornborder = imagepath+"cornb.gif";
var diggerimage   = new Image;  //"digger.gif";
var diggerlimage  = new Image;  //"diggerleft.gif";
var diggerrimage  = new Image;  //"diggerright.gif";
var diggerdimage  = new Image;  //"diggerdown.gif";
var diggeruimage  = new Image;  //"diggerup.gif";
var unknownimage  = "unknown.gif";
var dirtimage     = "dirt.gif"; 
var rockimage     = "rock.gif"; 
var dboulderimage = "boulderd.gif";
var boulderimage  = "boulder.gif";
var ladderimage   = "ladder.gif";
var goldimage     = "gold.gif";
var emptyimage    = "empty.gif";
var uparrowimage  = imagepath+"uparrow.gif";
var downarrowimage  = imagepath+"downarrow.gif";
var leftarrowimage  = imagepath+"leftarrow.gif";
var rightarrowimage = imagepath+"rightarrow.gif";
var diggerdirection = 1;

// variables to track action
var diggerpos;
var diggerlastplace;
var goldcount = 0;
var level = 0;

// preload the digger images!
diggerimage.src = imagepath+"digger.gif";
diggerlimage.src = imagepath+"diggerleft.gif";
diggerrimage.src = imagepath+"diggerright.gif";
diggerdimage.src = imagepath+"diggerdown.gif";
diggeruimage.src = imagepath+"diggerup.gif";

function msg(txt) 
 {
  status = txt;
  return true;
 }
function showMessage(txt)
{
 document.minerform.minermessage.value=txt;
}
function addthings(id,txt)
{
 var locs = new String(txt);
 var strt = 0;
 var loc = 0;
 var lngth = locs.length;
 while (strt+1 < lngth) {
   loc = parseInt(locs.substring(strt,strt+2),10);
   if ((loc > 0) && (loc < 100)) {data[loc]=id}
   strt=strt+2;
  }

}
function setupforlevel()
{
  data[0]=rope;
  switch (level) {  // sample first level
    case 1:	  
	  addthings(gold,"12233445565371736775");
	  addthings(boulder,"35657457");
	  addthings(emptyspace,"6676867787");
	  addthings(rock,"30313241");
	  break; 
	case 2:
	  addthings(gold,'34476165788893979899');
	  addthings(boulder,'244355');
	  addthings(emptyspace,'54566466747576848586');
	  break;
	case 3:
	  addthings(gold,'34464748667787949597');
	  addthings(boulder,'5682');
	  addthings(rock,'43455355575863687375767883848586889698');
	  break;
	case 4:
	  addthings(gold,'37485868869596979899');
	  addthings(boulder,'23');
	  addthings(emptyspace,'2434434453546364737475566683848587');
	  addthings(rock,'1314152552627282929476777888162636465767');
	  break;
	case 5: 
      addthings(gold,'45525557646566718182');
	  addthings(boulder,'14243459');
	  addthings(emptyspace,'33435363');
	  addthings(rock,'22252627283238414246485156616267687273747576');
	  break;
	case 6:
	  addthings(gold,'28295758596768808290');
	  addthings(boulder,'1825344554');
	  addthings(emptyspace,'2627364647484956667686967778798788896998999772718191');
	  addthings(rock,'091516373839606162637393');
	  break;
	case 7:
	  addthings(gold,'10114659768691949698');
	  addthings(boulder,'183444475561');
	  addthings(emptyspace,'1929394950566681');
	  addthings(rock,'08093536373840455865676871828587929597');
	  addthings(rope,'60708090');
	  break;
	case 8:
	  addthings(gold,'25456465668547950929');
	  addthings(boulder,'1524344454355526364656');
	  addthings(emptyspace,'7475767784868794969719');
	  addthings(rock,'788898');	
	  break;
	case 9:
	  addthings(gold,'40456075778587959799');
	  addthings(boulder,'152535303353');
	  addthings(emptyspace,'5055657989');
	  addthings(rock,'040506141624263436545674768486949688789851');	
	  break;
	case 10:
	  addthings(gold,'0342523734182489996879');
	  addthings(boulder,'0114263646474843336490');
	  addthings(emptyspace,'021012212263091929394978');
	  addthings(rope,'0919293949');
	  addthings(rock,'314151616213444569');		
  }; 
}

function won()
{ 
  for (var idx=0; idx < numberofsquares; idx++)  {
    if (data[idx]==gold) {
	  return 0;	
	}
  }
  showMessage("I've Got All the Gold Now!");
  if (diggerpos==0) {
    if (level==10) {
	  gamewon();
	 } else initializeBoard(level+1);
  }
}
function imagename(id)
{
  switch (id) {
   case emptyspace: return emptyimage; 
   case rope: return ladderimage; 
   case dirt: return dirtimage; 
   case rock: return rockimage;
   case gold: return goldimage; 
   case boulder: return dboulderimage; 
   case freeboulder: return boulderimage;
  }
  return emptyimage; // should never happen
}

function showspace(index)
{ var imagestr="";
  if (index==diggerpos) {
    var whichdigger=diggerdirection;    
	if ((data[index] != rope) && (whichdigger > 2)) { whichdigger=0;}
	if ((data[index] == rope) && (whichdigger < 3)) { whichdigger=3;}	
    switch (whichdigger) {
	  case 1: eval("document.space"+index+".src = diggerrimage.src;"); 
	          return;
	  case 2: eval("document.space"+index+".src = diggerlimage.src;"); 
	          return;
	  case 3: eval("document.space"+index+".src = diggeruimage.src;"); 	          
	          showMessage("Climbing...");
	          return;
	  case 4: eval("document.space"+index+".src = diggerdimage.src;"); 
	          return;
	}
	eval("document.space"+index+".src = diggerimage.src;"); 
    return;
  } else {
    if (revealed[index]==0) {imagestr=unknownimage}
    else { imagestr=imagename(data[index]) }
    eval("document.space"+index+".src = \""+imagepath+imagestr+"\";"); 
  }
}
function revealsquare(id)
{ var temp;
  temp = id-columns;
  while (temp <= id+columns ) {
    if ((temp >= 0) && (temp < numberofsquares)) { 
	  revealed[temp]=1; 
	  showspace(temp);
	}
	temp=temp+columns;
  }
 }
function revealBoardAround(id)
{ if (id % columns > 0) { revealsquare(id-1); }
  revealsquare(id); 
  if (id % columns < columns-1)  { revealsquare(id+1); }
}
function showBoardAroundDigger()
{
  revealBoardAround(diggerpos);
  document.minerform.goldcounter.value=goldcount; // show gold
}
function initializeBoard(newlevel)
{ var index;
  diggerdirection=4;
  // start with board hidden
  for (index=0; index < numberofsquares; index++)  {
 //   revealed[index]=0;
	data[index]=dirt;
  }
 level=newlevel;
 setupforlevel();
 data[0]=rope;
 diggerpos=0;  
 // show the entire board
 for (index=0; index < numberofsquares; index++)  { showspace(index); }
 showBoardAroundDigger();
 showMessage("Ooohh-wee!  Look at all that gold!");
}
function restartGame()
{  goldcount=0;
   initializeBoard(1);
}
function restartLevel()
{  
  goldcount = goldcount -90 ;
  initializeBoard(level);
  showMessage("Dadblamed, confounded cave...");
}
function cellbelow(index)
{
  if (index+rows >= numberofsquares) { return 0}
  else {return index+rows}
}
function solidspace(index)
{
  if (data[index]==emptyspace) {return 0}
  if (data[index]==rope) {return 0}
  return 1;
}
function returnnewspot(fallingobject)
{ var index;
  var thing=fallingobject;
  var movingdigger;
  if (fallingobject==diggerpos) {  movingdigger=1 } 
  else { movingdigger=0 }
  do {
     index=cellbelow(thing);  
     if (index > 0) {
       if ((solidspace(index) == 0) && (index!=diggerpos)) {  // if not solid, then move thing and show space
	     while ((index < 90) && (solidspace(index) == 0) && (index != diggerpos)) {
		   index=cellbelow(index);
		 }
		 if ((solidspace(index)!=0) || (index==diggerpos)) {
		   index=index-rows;
		 } 
         thing=index;
		 if (movingdigger==1) {  
		   diggerpos=thing;
		   revealBoardAround(fallingobject);
		   showBoardAroundDigger(); 
		   showMessage("Ouch!");
		 }
       } else  { index=0 }          // if solid, stop falling
	 } 
    } while (index > 0);  
  return thing;
}
function activateboard()
{ var newspot;
  // move digger... 
  if (diggerpos >= numberofsquares) {diggerpos=numberofsquares}
  if (data[diggerpos]==emptyspace) { returnnewspot(diggerpos); }
  // move boulders
  for (var index=numberofsquares-1; index > 0; index--)  {
    if ((data[index]==boulder) || (data[index]==freeboulder)) {
	  newspot=returnnewspot(index)
	  if (newspot!=index) {
	    data[index]=emptyspace;
		data[newspot]=freeboulder;
		revealsquare(index);
		revealsquare(newspot);
      }
	}
  }
  if (diggerpos >= columns)  {
   if (data[diggerpos-columns] >= boulder) {
     showMessage("Ow!  Please get this boulder off my head!");
   }
  }
}
function movetonewspace(index)
{
  if (index >= numberofsquares) {return 0}
  if (index < 0) {return 0}  
  if (data[index] == emptyspace) {showMessage("");}  
  if (data[index] > freeboulder) {return 0} // undefined space on board - not traversable
  if (data[index] >= boulder)  {  
    switch (diggerdirection) {
	  case 1: if ((index % columns < columns-1) && (solidspace(index+1)==0)) {
	            data[index]=emptyspace;
				data[index+1]=freeboulder;
				showMessage("1..2..3...Heave!");
	          } else {
			    showMessage("Nope.  That's stuck, alright");
			    return 0
			  }
			  break;
	  case 2: if ((index % columns > 0) && (solidspace(index-1)==0)) {
	            data[index]=emptyspace;
				data[index-1]=freeboulder;
				showMessage("Tell me again why I'm pushing this?");
	          } else {
			    showMessage("Boulder...heavy...arms...giving out...");
			    return 0
			  }
			  break;
	  default: 
	         showMessage("Boulder in the way, boss");
	         return 0;
	}
  } 
  if (data[index]==rock) {
    showMessage("Daggone rock!");
    return 0;
  }     // or through rock
  if (data[index]==gold) { 
    goldcount=goldcount+10;	
	showMessage("YEEE-HAAAWW!!!");
  }
  if (data[index]==dirt) { showMessage("");}
  if (data[index]!=rope) { data[index]=emptyspace; }  
  if ((index==cellbelow(diggerpos)) && (solidspace(index)==0)) {
   if (data[index]!=rope) {
     showMessage("Look out below!");
	 goldcount=goldcount-1;
   }   
   data[diggerpos]=rope;
   data[index]=rope;	    
  }  
  return 1;
}
function moveleft()
{
  diggerdirection=2;
  if (diggerpos % columns > 0)  {
    if (movetonewspace(diggerpos-1)) {
	  diggerpos--;
      activateboard();     
	  showBoardAroundDigger(); // need faster way of doing this!
	}
    won(); 
  }
}
function moveup()
{ var targetspace;
  diggerdirection=3;
  if (diggerpos >= columns)  {
   targetspace=diggerpos-columns;
   if (data[targetspace]==rope) {
     if (movetonewspace(targetspace)) {
 	  diggerpos = targetspace;	
       activateboard();    
 	  showBoardAroundDigger(); // need faster way of doing this!
	 }
	 won();
   } else { showMessage("No Ladder!") }
  }
}
function moveright()
{
  diggerdirection=1;
  if (diggerpos % columns < columns-1)  {
    if (movetonewspace(diggerpos+1)) {
	  diggerpos++;
	  activateboard();    
	  showBoardAroundDigger(); // need faster way of doing this!
	}
	won();
  }
}

function movedown()
{ 
  diggerdirection=4;
  if (diggerpos < numberofsquares-columns)  {
    if (movetonewspace(diggerpos+columns)) {
	  diggerpos = diggerpos+columns;
	  activateboard();    
	  showBoardAroundDigger(); // need faster way of doing this!
	}
	won();
  }
}
function getKey(keyStroke) {
//   var key = (document.layers) ? keyStroke.which : event.keyCode;   
   var key = 
         document.layers ? keyStroke.which : 
	     document.all ? event.keyCode : 
         document.getElementById ? keyStroke.keyCode : 0; 
   
   switch (key) {
    case 37: moveleft(); break;
    case 38: moveup(); break;
    case 39: moveright(); break;
    case 40: movedown(); break;
   }
}

function writescoreboard()
{
  document.write("<table width=\"100%\">");
/*  
  document.write("<tr>");
	document.write("<th valign=\"top\" align=\"left\"><A HREF=\"index.htm\" onClick=\"restartGame(); return false\">Restart Game</A></th>"); 
	document.write("<th valign=\"top\" align=\"left\"><A HREF=\"index.htm\" onClick=\"restartLevel(); return false\">Restart Mine</A></th>"); 
    document.write("<th valign = \"middle\" align=\"right\">");
    document.write("Gold <input readonly type = \"text\" size=\"5\" name = \"goldcounter\"></input>");
    document.write("</th>");
  document.write("</tr>");
*/  
  document.write("<tr><td colspan=\"2\" align=\"left\"><b>Macky Says: <input readonly type = \"text\" size=\"40\" name = \"minermessage\"></input></b></td></tr></table>");
}
function writeControls()
{
  document.write("<table BORDER=0 CELLSPACING=\"0\" CELLPADDING=\"0\" ALIGN=\"left\" VALIGN=\"bottom\">");  
  document.write("<tr><td colspan = \"2\" align=\"center\"><IMG SRC=\""+uparrowimage+"\" BORDER=0 alt=\"Up\" onClick=\"moveup(); return false;\"></td></tr>"); 
  document.write("<tr><td><IMG SRC=\""+leftarrowimage+"\" BORDER=0 width=40 height=40 alt=\"left\" onClick=\"moveleft(); return false;\"></td>"); 
    document.write("<td><IMG SRC=\""+rightarrowimage+"\" BORDER=0  width=40 height=40 alt=\"right\" onClick=\"moveright(); return false;\"></td></tr>"); 
  document.write("<tr><td colspan=\"2\" align=\"center\"><IMG SRC=\""+downarrowimage+"\"  width=40 height=40 BORDER=0 alt=\"Down\" onClick=\"movedown(); return false;\"></td></tr>"); 
  document.write("<tr><td colspan=\"2\" height=\"10\">&nbsp;</tr>"); 
  document.write("<tr><td colspan=\"2\" align=\"left\"><A HREF=\"index.htm\" onClick=\"restartGame(); return false;\">Restart Game</A></tr>"); 
  document.write("<tr><td colspan=\"2\" align=\"left\"><A HREF=\"index.htm\" onClick=\"restartLevel(); return false;\">Restart Mine</A></tr>"); 
  document.write("<tr><td colspan=\"2\" height=\"40\">&nbsp;</tr>"); 
  document.write("<tr><td colspan=\"2\"><b>Gold <input readonly type = \"text\" size=\"3\" name = \"goldcounter\"></input></b></td></tr>");
  document.write("</table>");
}
// createboard creates the game board
function createBoard() 
{ 
  var index=0;
  var x = 0;
  var y = 0;  
  document.write("<form name=\"minerform\">");
  document.write("<table BORDER=0 CELLSPACING=\"0\" CELLPADDING=\"0\" ALIGN=\"center\" VALIGN=\"top\">");
  document.write("<tr><th colspan=\"2\">");
  writescoreboard();
  document.write("</th></tr>");
 // document.write("<tr align=\"center\"><th>Guide Miner Macky to the Gold</th></tr>");
  document.write("<tr><td width=\"415\">");   
  for (y=0; y<rows; y++) {
    document.write("<IMG SRC=\""+vertborder+"\" BORDER=0 WIDTH=7 HEIGHT=40>");
    for (x=0; x<columns; x++)  {    
	  document.write("<IMG SRC=\""+imagepath+dirtimage+"\" BORDER=0 NAME=\"space"+index+"\" WIDTH=40 HEIGHT=40>");
	  index++;
	} 
	document.write("<IMG SRC=\""+vertborder+"\" BORDER=0 WIDTH=7 HEIGHT=40>");
	document.write("<BR>"); // move to next line  
  }
  document.write("<IMG SRC=\""+cornborder+"\" BORDER=0 WIDTH=7 HEIGHT=8>");
  for (x=0; x<columns;x++) {
   document.write("<IMG SRC=\""+horiborder+"\" BORDER=0 WIDTH=40 HEIGHT=8>");
  }
  document.write("<IMG SRC=\""+cornborder+"\" BORDER=0 WIDTH=7 HEIGHT=8>");
  document.write("</td><td valign=\"bottom\">");
  writeControls();
  document.write("</td></tr></table>")
  // start table at bottom
  document.write("</form>");
  showMessage("Howdy Partner!  Let's get me some gold");
  document.onkeydown = getKey; 
//  document.onKeyPress = getKey;
}
function successmessage()
{  
  if (goldcount>900) { 
   return "Incredible, you helped Miner Macky get over 56 pounds of gold! Now he can buy a house!" ;
  }; 
  if (goldcount>800) {
    return "Way to go!  You scored over 50 pounds of gold for gold old Macky. Now he can hire someone to push those boulders for him.";
  }
  if (goldcount>700) {
    return "You're amazing!  Macky has more than 40 pounds of gold. At last, he can take that vacation he's always wanted: spelunking in South Dakota!";
  }
  if (goldcount>600) {
    return "Yeehaw!  Mackey's out of the mines with more than 37 pounds of gold!  That'll show all those city slickers back east!";
  }
  if (goldcount>400) {
    return "Ahhh...how I love the sight of the sun - shining on my gold!";
  }
  if (goldcount>300) {
    return "Thankee fer yer help in gettin' outa them thar mines.  Now, if only I had some more gold..";
  }
  if (goldcount>250) {
    return "Whew! That was close.  Want to help me try again?  I just know there's more gold to be had!";  
  }
  if (goldcount>200) {
    return "Alive!  I'm Alive!  Yee-Haw!  For a while there, I thought you'd never get me out of those mines...";
  }
  return "Well, at least you managed to get Macky out alive..."  ;
}
function gamewon()
{ 
  var w = 480;
  var h = 340;
  if (document.all || document.layers) {
   w = screen.availWidth;
   h = screen.availHeight;
  }
  var popW = 300, popH = 300;
  if (w<popW) { w=popW; }
  if (h<popH) { h=popH; }
  var leftPos = (w-popW)/2;
  var topPos = (h-popH)/2;

  SuccessWindow=window.open("","Success","width=" + popW + ",height="+popH+",top="
                            +topPos+",left="+leftPos+",screenX="+leftPos+",screenY="+topPos);
  
  var successtext="<html><head><title>Digger Score</title></head>"
        +"<body leftmargin='0' topmargin='0' marginwidth='0' marginheight='0'>"
		+"<p align='center'><img src='../graphics/digger/digger.gif'><br>"
		+"Congratulations on Winning Digger!<br>"
		+"</p><p align='center'>"
		+"<b><i>Your score = "+goldcount+"</i></b><br>"
		+successmessage()+"</p></body></html>"; 
  SuccessWindow.document.clear();
  SuccessWindow.document.write(successtext);  
}
function showcredits(designer,artist,coder) {
  var w = 480;
  var h = 340;
  if (document.all || document.layers) {
   w = screen.availWidth;   
   h = screen.availHeight;
  }
  var popW = 300, popH = 300;
  if (w<popW) w = popW;
  if (h<popH) h = popH;
  var leftPos = (w-popW)/2;
  var topPos = (h-popH)/2;

  CreditWindow=window.open("","credits","width=" + popW + ",height="+popH+",top="
                            +topPos+",left="+leftPos+",screenX="+leftPos+",screenY="+topPos);
  
  var CreditText="<html><head><title>Digger Credits</title></head>"
        +"<body bgcolor='#FFFFFF' text='#000000' leftmargin='0' topmargin='0' marginwidth='0' marginheight='0'>"
		+"<p align='center'><img src='../graphics/digger/diggerdown.gif'><br>"
		+"Digger was designed exclusively for Live Oak Games.<br>"
		+"</p><p align='center'>"
		+"Game design: <b>Pat Matthews</b><br>"
		+"Graphics: <b>Billy Matter</b> and <b>Pat Matthews</b></p>"
		+"<p align='center'>And, as always, the coding was done by the multitalented Albino Toad! (that's me)</p>"
		+"<p align='center'>Copyright(c) 2002-2005 Live Oak Games.<br>All Rights Reserved.</p></body></html>"; 
  CreditWindow.document.clear();
  CreditWindow.document.write(CreditText);    
}

function playgame() {
  var w = 640;
  var h = 480;
  if (document.all || document.layers) {
   w = screen.availWidth;   
   h = screen.availHeight;
  }
  var popW = 610, popH = 470;
  if (w<popW) w = popW;
  if (h<popH) h = popH;
  var leftPos = (w-popW)/2;
  var topPos = (h-popH)/2;
  
  GameWindow=window.open("diggerpopup.htm","Digger","width=" + popW + ",height="+popH+",top="
                            +topPos+",left="+leftPos+",screenX="+leftPos+",screenY="+topPos);
//  GameWindow.document.clear(); 
//  GameWindow.document.write(gamecode);    
}

function MM_openBrWindow(theURL,winName,features) { 
   window.open(theURL,winName,features); 
}

//-->