﻿// JScript File

//  
// Author: Sunhee Miller
// copyright@2006
// Name: Latin Squares Puzzle
// gloval variables
//
var numT = new Array(25);
var imgFrom = 0, imgTo = 0;
var imgMoved = false;
var OrgBorderT = "", OrgBorderB = "", OrgBorderR = "", OrgBorderL = "";
var ColorOn = true;


function InitLatin(){

var i=0, j=0, k=0, t=0, h=0;
var temp = "";

ColorOn = true;
imgFrom = 0;
imgTo = 0;


for(i=0;i<5;i++){
  k = 0;
  for(j=0;j<5;j++){
    k++;
    h++;
    temp = "td" + h;
    document.getElementById(temp).src = "../Images/latin" + k + ".gif";
    document.getElementById(temp).style.border = "solid 2px white";
    
    numT[t] = k;
    t++;
  }
}

}


function ShuffleTable(){

var tempT = new Array(25);
var temp = new Array(25);
var tempH = new Array(5);
var i, j, count, tot, k, tempData;
var alreadyIn = false;

ColorOn = true;
imgFrom = 0;
imgTo = 0;


for(i=0;i<5;i++)
  tempH[i] = 0;

for(i=0;i<25;i++){
  tempT[i] = 0;
  temp[i] = 0;
}
   
tot = 0;   
for(i=0;i<5;i++){  
  count = 0;  
  while (count < 5){
    rdm = Math.floor(Math.random()*6);
    alreadyIn = false;

    for(j=0;j<5;j++){
      if (tempH[j] == rdm)
        alreadyIn = true;
    }
    if (alreadyIn == false){
      tempH[count] = rdm;
      count++;
    }
  }
  for(k=0;k<5;k++){
    tempT[tot] = tempH[k];
    tempH[k] = 0;
    tot++;
  }
  
}

//twist last

tempData = 13;
for(k=0;k<12;k++){
  temp[tempData] = tempT[k];
  tempData++;
}

temp[12] = tempT[12];

tempData = 0;
for(k=13;k<25;k++){
  temp[tempData] = tempT[k];
  tempData++;
}

tempT = temp;
ShuffleImage(tempT);

}


function ShuffleImage(newTbl){

var newImgT = new Array(25);
var i, j, n, k, t, h;

newImgT = newTbl;

k = 0;
t = 0;
for(i=0;i<5;i++){
  for(j=0;j<5;j++){
    n = newImgT[k];
    h = t + 1;
    temp = "td" + h;
    document.getElementById(temp).src = "../Images/latin" + n + ".gif";
    document.getElementById(temp).style.border = "solid 2px white";    
    numT[t] = n;
    t++;
    k++;
  }
}

}


//
// how to move images
//
function MoveImg(T){

var tempT = Number(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("Congratulations! You've successfully completed a Latin Square!");
    ColorLatin();
   // document.getElementById('how2').innerHTML = "Congratulations!" 
   // document.getElementById('how3').innerHTML= "Magical Squares have been completed!" 
    return;
  }
}
else {
  imgFrom = 0;
  imgTo = 0;
  return
}

}


function inBlock(){

var isB = false;

if (imgTo == (imgFrom - 1)){
  if ((imgFrom % 5) == 1)
    isB = false;
  else
    isB = true;
}

if (imgTo == (imgFrom + 1)){
  if ((imgTo % 5) == 1)
    isB = false;
  else 
    isB = true;
}

if (imgTo == (imgFrom + 5)){
  isB = true;
}

if (imgTo == (imgFrom - 5)){
  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 r1 = 0, r2 = 0, r3 = 0, r4 = 0; r5 = 0, c1 = 0, c2 = 0, c3 = 0, c4 = 0, c5 = 0;;
var rowDone = false, columnDone = false;
var i, j, tot;
var row1Done = false, row2Done = false, row3Done = false, row4Done = false, row5Done = false;
var col1Done = false, col2Done = false, col3Done = false, col4Done = false, col5Done = false;
var latinDone = false;

//evaluate rows
for(j=0;j<5;j++){
  for(i=j*5;i<(j+1)*5;i++) {
    if (numT[i] == 1)
      r1++;
    if (numT[i] == 2)
      r2++;
    if (numT[i] == 3)
      r3++;
    if (numT[i] == 4)
      r4++;
    if (numT[i] == 5)
      r5++;
  }
  if ((r1==1) && (r2==1) && (r3==1) && (r4==1) && (r5==1)){
    if (j == 0)
      row1Done = true;
    if (j == 1)
      row2Done = true;
    if (j == 2)
      row3Done = true;
    if (j == 3)
      row4Done = true;
    if (j == 4)
      row5Done = true;
  }
  
  r1 = 0;
  r2 = 0;
  r3 = 0;
  r4 = 0;
  r5 = 0;
  
}

if ((row1Done==true) && (row2Done==true) && (row3Done==true) && (row4Done==true) && (row5Done==true))
  rowDone = true;

//evaluate column

for(j=0;j<5;j++){
  for(i=j;i<(j+21);i=i+5) {
    if (numT[i] == 1)
      c1++;
    if (numT[i] == 2)
      c2++;
    if (numT[i] == 3)
      c3++;
    if (numT[i] == 4)
      c4++;
    if (numT[i] == 5)
      c5++;
  }
  if ((c1==1) && (c2==1) && (c3==1) && (c4==1) && (c5==1)){
    if (j == 0)
      col1Done = true;
    if (j == 1)
      col2Done = true;
    if (j == 2)
      col3Done = true;
    if (j == 3)
      col4Done = true;
    if (j == 4)
      col5Done = true;
  }
  
  c1 = 0;
  c2 = 0;
  c3 = 0;
  c4 = 0;
  c5 = 0;
  
}

if ((col1Done==true) && (col2Done==true) && (col3Done==true) && (col4Done==true) && (col5Done==true))
  columnDone = true;


if ((rowDone==true) && (columnDone==true)){
  latinDone = true;
  ColorOn = false;
}

  
return latinDone;
 
}



function ColorLatin(){

var i, temp;

for (i=1;i<=25;i++){
  temp = "td" + i;
  document.getElementById(temp).style.border = "solid thin  rgb(254, 235, 1)";
}

}


function ChgColor(T){

var tempT = T;
var temp = "";

temp = "td" + tempT;

if (ColorOn != false)
  document.getElementById(temp).style.border = "rgb(254, 235, 1) thin solid";

}


function BackToNorm(T){

var tempT = T;
var temp = "";

temp = "td" + tempT;

if (ColorOn != false)
  document.getElementById(temp).style.border = "solid 2px white";


}