﻿// JScript File

//  
// Author: Sunhee Miller
// copyright@2006
// Name: Magic Squares Puzzle
// gloval variables
//
var numT = new Array(16);
var imgFrom = 0, imgTo = 0;
var imgMoved = false;
var OrgBorderT = "", OrgBorderB = "", OrgBorderR = "", OrgBorderL = "";
var ColorOn = true;


function InitMagic2(){

var i=0, j=0, k=0, t=0;
var temp = "";

ColorOn = true;
imgFrom = 0;
imgTo = 0;

for(i=0;i<4;i++){
  for(j=0;j<4;j++){
    k++;
    temp = "td" + k;
    document.getElementById(temp).src = "../Images/num" + k + ".gif";
    document.getElementById(temp).style.border = "solid 2px white";    
    numT[t] = k;
    t++;
  }
}

}


function ShuffleTable(){

var tempT = new Array(16);
var i, j, count;
var alreadyIn = false;

ColorOn = true;
imgFrom = 0;
imgTo = 0;


for(i=0;i<16;i++)
  tempT[i] = 0;
  
count = 0;  
while (count < 16){
  rdm = Math.floor(Math.random()*17);
  alreadyIn = false;
  for(j=0;j<16;j++){
    if (tempT[j] == rdm)
      alreadyIn = true;
  }
  if (alreadyIn == false){
    tempT[count] = rdm;
    count++;
  }
}

ShuffleImage(tempT);

}


function ShuffleImage(newTbl){

var newImgT = new Array(16);
var i, j, n, k, t;

newImgT = newTbl;


k = 0;
t = 0;
for(i=0;i<4;i++){
  for(j=0;j<4;j++){
    n = newImgT[k];
    temp = "td" + (t+1);
    document.getElementById(temp).src = "../Images/num" + n + ".gif";
    document.getElementById(temp).style.border = "solid 2px white";    
    numT[t] = n;
    t++;
    k++;
  }
}

}


//
// how to move images
//
function MoveImg(T){

var tempT = T;
var i = 0, j = 0, t = 0;
var temp1 = "", temp2 = "";

if (ColorOn == false)
  return;

if (imgFrom == 0){
  imgFrom = tempT;
  if (imgTo == 0)
    return;
}
else
  imgTo = tempT;

if (inBlock() == true) {
  SwapImg();
  if (EvaluateTbl() == true) {
    ColorOn = false;
    alert("Congratuations! You've successfully completed 4x4 Magic Squares!");
    ColorMagic();
    return;
  }
}
else {
  imgFrom = 0;
  imgTo = 0;
  return
}

}


function inBlock(){

var isB = false;

if (imgTo == (imgFrom - 1)){
  if ((imgFrom % 4) == 1)
    isB = false;
  else
    isB = true;
}

if (imgTo == (imgFrom + 1)){
  if ((imgTo % 4) == 1)
    isB = false;
  else 
    isB = true;
}

if (imgTo == (imgFrom + 4)){
  isB = true;
}

if (imgTo == (imgFrom - 4)){
  isB = true;
}

return isB;

}



function SwapImg() {

var temp1 = "", temp2 = "", temp = "";
var i = 0;

// swap images
temp1 = "td" + imgFrom;
temp2 = "td" + imgTo;
temp = document.getElementById(temp1).src;
document.getElementById(temp1).src = document.getElementById(temp2).src;
document.getElementById(temp2).src = temp;

// swap table values
i = numT[imgFrom-1];
numT[imgFrom-1] = numT[imgTo-1];
numT[imgTo-1] = i;

imgFrom = 0;
imgTo = 0;

}


function EvaluateTbl() {

var i = 0, r1 = 0, r2 = 0, r3 = 0, r4 = 0, c1 = 0, c2 = 0, c3 = 0, c4 = 0, d1 = 0, d2 = 0;
var magicDone = false;

//evaluate rows
for(i=0;i<4;i++){
  r1 = numT[i] + r1;
}

for(i=4;i<8;i++){
  r2 = numT[i] + r2;
}

for(i=8;i<12;i++){
  r3 = numT[i] + r3;
}

for(i=12;i<16;i++){
  r4 = numT[i] + r4;
}


//column 1
for(i=0;i<16;i=i+4)
  c1 = numT[i] + c1;

//column 2
for(i=1;i<16;i=i+4)
  c2 = numT[i] + c2;
  
//column 3
for(i=2;i<16;i=i+4)
  c3 = numT[i] + c3;

//column 4
for(i=3;i<16;i=i+4)
  c4 = numT[i] + c4;

//diagonal 1
for(i=0;i<16;i=i+5)
  d1 = numT[i] + d1;

//diagnal 2
for(i=3;i<13;i=i+3)
  d2 = numT[i] + d2;


if ((r1==34) && (r2==34) && (r3==34) && (r4==34) && (c1==34) && (c2==34) && (c3==34) && (c4==34) && (d1==34) && (d2==34)){
  magicDone = true;
  ColorOn = false;
  ColorMagic();
}
  
return magicDone;
 
}


function ColorMagic(){

var i, temp;

  for (i=1;i<17;i++){
    temp = "td" + i;
    document.getElementById(temp).style.border = "solid 2px  rgb(255, 255, 0)";
  }

}



function ChgColor(T){

var tempT = T;
var temp = "";

temp = "td" + tempT;

OrgBorderT = document.getElementById(temp).style.border;

if (ColorOn != false)
  document.getElementById(temp).style.border = "rgb(255, 255, 0) 2px solid";

}


function BackToNorm(T){

var tempT = T;
var temp = "";

temp = "td" + tempT;

if (ColorOn != false)
  document.getElementById(temp).style.border = OrgBorderT;


}