﻿// JScript File
// Developed and coded by
// Author: Sunhee Miller
//         copyright@2006
//
// This property is protected by the copyright.  Please do not download
// and/or use this for any personal/commercial use without author's 
// permission.  For permission, contact webadmin@smifzone.org.
// Thank you for your cooperation!
//

//
// global variables
//

var a = new Array(5);
var b = new Array(5);
var c = new Array(5);

var aTop = 1, bTop = 0, cTop = 0;
var aTInx = 4, bTInx =-1, cTInx = -1;
var Bar_Moved = 0;

var OrgVal = 0;
var OrgPos = 0;
var barClick = "";
var orgSrc = "";
var moveFrom = 0;
var legalMove = 0;
var barTotal = 5;
var chged = false;

var moveCompleted = false;
var autoInit = false;

a = [5, 4, 3, 2, 1];
b = [0, 0, 0, 0, 0];
c = [0, 0, 0, 0, 0];


function Init(){

var levelS = document.getElementById('levelSelect');
var level =  levelS.options[levelS.selectedIndex].text;
var n = Number(level);
var i, j, k, temp;

autoInit = false;

if (n == 3){
  a = [3, 2, 1];
  b = [0, 0, 0];
  c = [0, 0, 0];
  
  aTInx = 2;
}
else if (n == 4){
  a = [4, 3, 2, 1];
  b = [0, 0, 0, 0];
  c = [0, 0, 0, 0];
  
  aTInx = 3;
}
else {
  a = [5, 4, 3, 2, 1];
  b = [0, 0, 0, 0, 0];
  c = [0, 0, 0, 0, 0];

  aTInx = 4;
  n = 5;
}

barTotal = n;

aTop = 1;
bTop = 0;
cTop = 0;

bTInx = -1;
cTInx = -1;

Bar_Moved = 0;
OrgVal = 0;
OrgPos = 0;
barClick = "";
orgSrc = "";

moveFrom = 0;
legalMove = 0;

k = 153;
for(i=0;i<n;i++){
  temp = "a" + (i+1);
  document.getElementById(temp).style.width = k + "px";
  temp = "b" + (i+1);
  document.getElementById(temp).style.width = k + "px";
  temp = "c" + (i+1);
  document.getElementById(temp).style.width = k + "px";
  
  k = k - 25;
}


j = n;
for (i=0;i<n;i++){
  temp = "a" + (i+1);
  document.getElementById(temp).src = "../Images/bar" + j + ".png";
  temp = "b" + (i+1);
  document.getElementById(temp).src = "../Images/barC.png";
  temp = "c" + (i+1);
  document.getElementById(temp).src = "../Images/barC.png";
  j = j-1;
}

if (n == 3){
  document.getElementById('a4').src = "../Images/barC.png";
  document.getElementById('a5').src = "../Images/barC.png";
  document.getElementById('b4').src = "../Images/barC.png";
  document.getElementById('b5').src = "../Images/barC.png";
  document.getElementById('c4').src = "../Images/barC.png";
  document.getElementById('c5').src = "../Images/barC.png";
}

if (n == 4){
  document.getElementById('a5').src = "../Images/barC.png";
  document.getElementById('b5').src = "../Images/barC.png";
  document.getElementById('c5').src = "../Images/barC.png";
}


document.getElementById('hanoiResult1').innerHTML = "";
document.getElementById('hanoiResult2').innerHTML = "";
document.getElementById('hanoiResult3').innerHTML = "";

}

//
// see if the right bar is clicked
//
function Validate_Val(T, K){

var tempC = T;
var tempP = K;
var tempV = 0;

var i = 0;

if (tempC == "a"){
  if (a[tempP-1] >= aTop)
    tempV = a[tempP-1];
}
else if (tempC == "b"){
  if (b[tempP-1] >= bTop)
    tempV = b[tempP-1];
}
else if (tempC == "c"){
  if (c[tempP-1] >= cTop)
    tempV = c[tempP-1];
}
  
return tempV;
  
}


//
// Is the bar to move onto the top position?
//
function Validate_Top(T, K){

var tempC = T;
var tempP = K;
var tempV = 0;
var Q = false;

if (tempC == "a"){
  tempV = a[tempP-1];
  if (tempV == aTop)
    Q = true;
}

if (tempC == "b"){
  tempV = b[tempP-1];
  if (tempV == bTop)
    Q = true;
}

if (tempC == "c"){
  tempV = c[tempP-1];
  if (tempV == cTop)
    Q = true;
}

//if ((Q == true) && (tempV > 0))
if (Q == true)

  return tempV;

}


function MoveThisG(Gold, Pos){

var tempG = Gold;
var tempP = Pos;
var tempV = 0;
var tempId = Gold + Pos;

if (autoInit == true)
  return;

if (Validate_Val(Gold, Pos) == 0)
  return;
  
tempV = Validate_Top(Gold, Pos);

if (tempV > 0){
  moveFrom = 1;
  OrgVal = tempV;
  OrgPos = Pos;
  OrgId = tempId;
  legalMove++;
  barClick = tempG;
  Bar_Moved = 0;
}

}


function ResolveTo(Dest){

var tempD = Dest;
var tempId = "";
var TempCIn = "";
var tempB = 0;
var moveG = 0;
var k;

if (autoInit == true)
  return;

if (legalMove == 0)
  return;
  
if ((tempD == "a") && (Bar_Moved == 0)){
  
  if (aTop == 0){
    tempId = "a1";
    moveG = 1;
  }
  
  if (aTop > OrgVal){
    tempId = "a" + (aTInx + 2);
    moveG = 1;
  }
  
  if (moveG ==1){
    document.getElementById(tempId).style.width = document.getElementById(OrgId).style.width;
    document.getElementById(tempId).style.height = document.getElementById(OrgId).style.height;
    document.getElementById(tempId).src = "../Images/bar" + OrgVal + ".png";
    //find the next top value    
    AddValue('a');
    tempB = 1;
  }
  
}

if ((tempD == "b") && (Bar_Moved == 0)){
  
  if (bTop == 0){
    tempId = "b1";
    moveG = 1;
  }
  
  if (bTop > OrgVal){
    tempId = "b" + (bTInx + 2);
    moveG = 1;
  }
  
  if (moveG == 1){
    document.getElementById(tempId).style.width = document.getElementById(OrgId).style.width;
    document.getElementById(tempId).style.height = document.getElementById(OrgId).style.height;
    document.getElementById(tempId).src = "../Images/bar" + OrgVal + ".png";
    //find the next top value    
    AddValue('b');
    tempB = 1;
  }
  
}


if ((tempD == "c") && (Bar_Moved == 0)){
  
  if (cTop == 0){
    tempId = "c1";
    moveG = 1;
  }
  
  if (cTop > OrgVal){
    tempId = "c" + (cTInx + 2);
    moveG = 1;
  }
  
  if (moveG ==1){
    document.getElementById(tempId).style.width = document.getElementById(OrgId).style.width;
    document.getElementById(tempId).style.height = document.getElementById(OrgId).style.height;
    document.getElementById(tempId).src = "../Images/bar" + OrgVal + ".png";
    //find the next top value    
    AddValue('c');
    tempB = 1;
  }
  
}


if (tempB == 1){
  RemoveG();
  Bar_Moved = 1;
  barClick = "";
}

if (IfCompleted() == true){
  k = Math.pow(2, barTotal) - 1;
  if (legalMove < k)
    return;
  else {
    document.getElementById('hanoiResult1').innerHTML = "Congratulations!";
    document.getElementById('hanoiResult2').innerHTML = "You made " + legalMove + " moves to move all golden rings \n"  +
          "from one to another tower!\n" +
          "  The Minimum Move for " + barTotal + " rings is " + k + " moves.\n";
    
    if (legalMove == k)
      document.getElementById('hanoiResult3').innerHTML = "\nYou did GREAT!\n";
  }
  
  legalMove = 0;
  return;

}


}



function CleanBoard(){

if ((aTop >  0) && ((bTop > 0) || (cTop > 0))){
  Init();
  return;
}
if ((bTop >  0) && ((aTop > 0) || (cTop > 0))){
  Init();
  return;
}
if ((cTop >  0) && ((aTop > 0) || (bTop > 0))){
  Init();
  return;
}

legalMove = 0;

document.getElementById('a5').style.width = "53px";
document.getElementById('a4').style.width = "78px";
document.getElementById('a3').style.width = "103px";
document.getElementById('a2').style.width = "128px";
document.getElementById('a1').style.width = "153px";


document.getElementById('b5').style.width = "53px";
document.getElementById('b4').style.width = "78px";
document.getElementById('b3').style.width = "103px";
document.getElementById('b2').style.width = "128px";
document.getElementById('b1').style.width = "153px";

document.getElementById('c5').style.width = "53px";
document.getElementById('c4').style.width = "78px";
document.getElementById('c3').style.width = "103px";
document.getElementById('c2').style.width = "128px";
document.getElementById('c1').style.width = "153px";

document.getElementById('hanoiResult1').innerHTML = "";
document.getElementById('hanoiResult2').innerHTML = "";
document.getElementById('hanoiResult3').innerHTML = "";

}


function RemoveG(){

var tempId = "";
var i = 0;
var count = 0;

tempId = barClick + OrgPos;
document.getElementById(tempId).src = "../Images/barC.png";

switch (barClick){
  case "a": a[aTInx] = 0;
            aTInx--;
            if (aTInx < 0)
              aTop = 0;
            else
              aTop = a[aTInx];
            break;
  case "b": b[bTInx] = 0;
            bTInx--;
            if (bTInx < 0)
              bTop = 0;
            else
              bTop = b[bTInx];
            break;  
  case "c": c[cTInx] = 0;
            cTInx--;
            if (cTInx < 0)
              cTop = 0;
            else
              cTop = c[cTInx];
            break; 
  default: break;
 
} 
               
}



function AddValue(Target_T){

var i = 0;
var count = 0;
var temp = Target_T;

switch (temp){
  case "a": aTInx++;
            a[aTInx] = OrgVal;
            aTop = OrgVal;
            break;
  case "b": bTInx++;
            b[bTInx] = OrgVal;
            bTop = OrgVal;
            break;
  case "c": cTInx++;
            c[cTInx] = OrgVal;
            cTop = OrgVal;
            break;
  default: break;
}

}


function IfCompleted(){

var ifwon = false;

if ((aTInx == (barTotal-1)) && (aTop == 1))
  ifwon = true;

if ((bTInx == (barTotal-1)) && (bTop == 1))
  ifwon = true;

if ((cTInx == (barTotal-1)) && (cTop == 1))
  ifwon = true;
  
return ifwon;

}



function ChgColor(B, Path){

var temp = B;
var w = Path;
var tempId = "";

chged = false;
  
if (autoInit == true)
  return;

if (orgSrc == "../Images/barC.png")
  return;

tempId = temp + w;
orgSrc = document.getElementById(tempId).src;
  
if (Validate_Val(B, Path)!= 0){
  document.getElementById(tempId).src = "../Images/barG.png";
  chged = true;
}

}


function OrgColor(B, Path){

var temp = B;
var w = Path;
var tempId = "";

if (autoInit == true)
  return;
    
if (orgSrc == "../Images/barC.png")
  return;
  
if (chged == false)
  return;

tempId = temp + w;

//if (document.getElementById(tempId).src == "../Images/barC.png")
//  return;
  
document.getElementById(tempId).src = orgSrc;


}