//----- The Selected color show in img_sel

var sel_color = 1;

//----- arrays for handling images and their colors

var u = new Array(); var u2 = new Array();
var f = new Array(); var f2 = new Array();
var r = new Array(); var r2 = new Array();
var b = new Array(); var b2 = new Array();
var l = new Array(); var l2 = new Array();
var d = new Array(); var d2 = new Array();

//----- t=temp image array

var t = new Array();

for (var i = 1; i <= 9; i++) {
 t[i] = new Image();
}


//-----------------------------------------------------------------


//----- gives values to variables when this function is called

function doVar(){

 for (var i = 1; i <= 9; i++) {
  u2[i] = "1";
  f2[i] = "2";
  r2[i] = "3";
  b2[i] = "4";
  l2[i] = "5";
  d2[i] = "6";
 }

 u[1] =this.document.u1; u[2] =this.document.u2; u[3] =this.document.u3;
 u[4] =this.document.u4; u[5] =this.document.u5; u[6] =this.document.u6;
 u[7] =this.document.u7; u[8] =this.document.u8; u[9] =this.document.u9;

 f[1] =this.document.f1; f[2] =this.document.f2; f[3] =this.document.f3;
 f[4] =this.document.f4; f[5] =this.document.f5; f[6] =this.document.f6;
 f[7] =this.document.f7; f[8] =this.document.f8; f[9] =this.document.f9;

 r[1] =this.document.r1; r[2] =this.document.r2; r[3] =this.document.r3;
 r[4] =this.document.r4; r[5] =this.document.r5; r[6] =this.document.r6;
 r[7] =this.document.r7; r[8] =this.document.r8; r[9] =this.document.r9;

 b[1] =this.document.b1; b[2] =this.document.b2; b[3] =this.document.b3;
 b[4] =this.document.b4; b[5] =this.document.b5; b[6] =this.document.b6;
 b[7] =this.document.b7; b[8] =this.document.b8; b[9] =this.document.b9;

 l[1] =this.document.l1; l[2] =this.document.l2; l[3] =this.document.l3;
 l[4] =this.document.l4; l[5] =this.document.l5; l[6] =this.document.l6;
 l[7] =this.document.l7; l[8] =this.document.l8; l[9] =this.document.l9;

 d[1] =this.document.d1; d[2] =this.document.d2; d[3] =this.document.d3;
 d[4] =this.document.d4; d[5] =this.document.d5; d[6] =this.document.d6;
 d[7] =this.document.d7; d[8] =this.document.d8; d[9] =this.document.d9;

}


//-----------------------------------------------------------------

//----- Mix the Cube-colors

// function check_color & set_color_variables are working
// together with mix_cube(). check_color compares one color
// in "what" imagebox to a imagebox in palette and returns
// a number. set_color_variables check all 6*9 imageboxes
// and puts the values in the variables needed for solution.

function check_color(what) {

	     if (what.src ==this.document.c1.src){ return(1); }
	else if (what.src ==this.document.c2.src){ return(2); }
	else if (what.src ==this.document.c3.src){ return(3); }
	else if (what.src ==this.document.c4.src){ return(4); }
	else if (what.src ==this.document.c5.src){ return(5); }
	else if (what.src ==this.document.c6.src){ return(6); }
}

function set_color_variables() {

	for (var i = 1; i <= 9; i++) {
	  u2[i] = check_color(u[i]);
	  f2[i] = check_color(f[i]);
	  r2[i] = check_color(r[i]);
	  b2[i] = check_color(b[i]);
	  l2[i] = check_color(l[i]);
	  d2[i] = check_color(d[i]);
	}
}

function mix_cube() {

	var number
	color_cube('111111111222222222333333333444444444555555555666666666');

	for (var i=1; i<=18 ;i++){

	   number = Math.random();
	   number = Math.round(number * 5) + 1;

	   switch (number) {
		 case 1: C(); break;
		 case 2: F(); break;
		 case 3: L(); break;
		 case 4: U(); break;
		 case 5: Y(); break;
		 case 6: X(); break;
	   }
	}
	set_color_variables();
}

//-----------------------------------------------------------------


//----- changes the color on the img_Sel 

function color(col){
  sel_color = col;
  if (col==1)     this.document.img_sel.src = "white.gif";
  else if (col==2)this.document.img_sel.src = "green.gif";
  else if (col==3)this.document.img_sel.src = "red.gif";
  else if (col==4)this.document.img_sel.src = "blue.gif";
  else if (col==5)this.document.img_sel.src = "orange.gif";
  else if (col==6)this.document.img_sel.src = "yellow.gif";
}

//-----------------------------------------------------------------

//----- paints selected cell "(name, nr)" with the selected color "img_sel.src"

function paint(name, nr){
	  if (name == "u") { u[nr].src =this.document.img_sel.src; u2[nr]=sel_color; }
 else if (name == "f") { f[nr].src =this.document.img_sel.src; f2[nr]=sel_color; }
 else if (name == "r") { r[nr].src =this.document.img_sel.src; r2[nr]=sel_color; }
 else if (name == "b") { b[nr].src =this.document.img_sel.src; b2[nr]=sel_color; }
 else if (name == "l") { l[nr].src =this.document.img_sel.src; l2[nr]=sel_color; }
 else if (name == "d") { d[nr].src =this.document.img_sel.src; d2[nr]=sel_color; }
}

//-----------------------------------------------------------------

//----- draws cells ex: cells("b")

function cells(what){

 for (var i = 1; i <= 9; i++) {
 this.document.write("<a href=JavaScript:paint('" + what + "','" + i + "');><img src=" + what + ".gif name=" + what + i + " width=10 height=10 HSPACE=1 VSPACE=1 BORDER=1></a>");
  if ((i==3)||(i==6))this.document.write("<br>");
 }
 doVar();
}

//-----------------------------------------------------------------
//----- sends/ruturns all the information to/from the cube.asp

function go(){

 var colors = "";
 var all_u="", all_f="", all_r="", all_b="", all_l="", all_d="";

 for (var i = 1; i <= 9; i++) {
  all_u = all_u + u2[i];
  all_f = all_f + f2[i];
  all_r = all_r + r2[i];
  all_b = all_b + b2[i];
  all_l = all_l + l2[i];
  all_d = all_d + d2[i];
 }
 colors = all_u + all_f + all_r + all_b + all_l + all_d;
 check(colors);
}

//-----------------------------------------------------------------
//----- check the colors if they are too many or too few

function check(colors){

 var r=1;

 for (var i = 1; i <= 9; i++){
  r = r * u2[i];
  r = r * f2[i]; 
  r = r * r2[i]; 
  r = r * b2[i]; 
  r = r * l2[i]; 
  r = r * d2[i];
 }

 resultat = r[1] + r[2] + r[3] + r[4] + r[5] + r[6];

 if (r != 51998697814228992000000000) alert("Sorry... \n\nSome colors are wrong, \ncheck and try again !!!");
 else document.location = "pay.asp?colors=" + colors;
}

//-----------------------------------------------------------------

//---- Skriver länkar för att testa alla commandon
function links(){
 var x = new Array();
 x[1] = 'u';
 x[2] = 'f';
 x[3] = 'c';
 x[4] = 'd';
 x[5] = 'r';
 x[6] = 'l';
 x[7] = 'x';
 x[8] = 'y';
 x[9] = 'z';
 x[10] = 'b';
 for (var i = 1; i <= 10; i++) {

	 
 //this.document.write("<a href=\"JavaScript: DoMove('" + x[i].toUpperCase() + "');\">["  + x[i].toUpperCase() + "]</a> ");
 //this.document.write("<a href=\"JavaScript: DoMove('-" + x[i].toUpperCase() + "');\">[-"  + x[i].toUpperCase() + "]</a> ");
 //this.document.write("<a href=\"JavaScript: DoMove('" + x[i].toUpperCase() + "2');\">["  + x[i].toUpperCase() + "2]</a> ");

this.document.write("<a href=JavaScript:img_3d('" + x[i] + "');>["  + x[i].toUpperCase() + "]</a> ");
this.document.write("<a href=JavaScript:img_3d('-" + x[i] + "');>[-" + x[i].toUpperCase() + "]</a> ");
this.document.write("<a href=JavaScript:img_3d('" + x[i] + "2');>[" + x[i].toUpperCase() + "2]</a> ");
  if (i<10)this.document.write("<span class=s> | </span>");
 }
}

//-----------------------------------------------------------------
//---- plays the next command again

function next(){

  if (last == code_nr-1){ 

		alert("C O N G R A T U L A T I O N S\n\nThank you for playing.");	
		document.location = "solve.asp?action=finished";
  }  

     DoMove(mov[last+1]);
	 last++;
	 img_3d(mov[last]);
	 this.document.frm_buttons.moves_nr.value = code_nr - last;
	 this.document.frm_buttons.this_move.value = mov[last];
	 if (last > 1) { this.document.frm_buttons.last_move.value = mov[last-1]; }
}

//---- plays the last command again

function back(){
	var tmp1 = mov[last];
	if (last >= 1){ 
	  if (tmp1.length == 1){ tmp1 = "-" + tmp1;}
	  else if (tmp1.indexOf("-") == 0){ tmp1 = tmp1.substring(1);}

	  UnDoMove(mov[last]);
	  last--;
	  img_3d(tmp1);

	  this.document.frm_buttons.moves_nr.value = code_nr - last;
	  
	  if (last < 1) { this.document.frm_buttons.this_move.value = ""; }
	  else { this.document.frm_buttons.this_move.value = mov[last]; }

	  if (last > 1) { this.document.frm_buttons.last_move.value = mov[last-1]; }
	  else { this.document.frm_buttons.last_move.value = ""; }
	}
}

//---- repeats the last command

function repeat(){
 if ((last > 0) && (par2.length > 0)) { img_3d(mov[last]); }
}

//-----------------------------------------------------------------

//---- shows the 3d image animation for the command what
function img_3d(what){
 this.document.img_3d.src = what.toLowerCase() + ".gif";
}

//-----------------------------------------------------------------

//---- funktioner Left & Right samma som i Visual Basic

function Left(what, nr){
 var txt;
 txt = what.substring(0,nr);
 return txt;
}

function Right(what, nr){
 var txt;
 txt = what.substring(what.length-nr ,what.length);
 return txt;
}

//-----------------------------------------------------------------

//---- tar ut parametrar ur adressfönstret, what = vilken parameter

function get_param(what){

 var param_code;
 var param_fnd;
 var param;

 param_code = window.location.toString();
 param_fnd = param_code.indexOf("?");
 param_code = param_code.substring(param_fnd+1);

 if (param_fnd <= 0) return "";

 for (var i = 1; i <= what; i++) {
  param_fnd = param_code.indexOf(",");
  if (param_fnd > 0){
    param = param_code.substring(0,param_fnd);
    param_code = param_code.substring(param_fnd+1);}
  else{param = param_code.substring(0);}
 }
 return param;
}

//-----------------------------------------------------------------

//-----Färgar 3d cuben ex: color_cube("111111111222222222333333333444444444555555555666666666");

function color_cube(what){
 var i, tmp1 = what;
 for (i = 1; i <= 9; i++) { color(tmp1.substr(i-1,1).toString()); paint("u", i); }
     tmp1 = Right(tmp1,tmp1.length-9);
 for (i = 1; i <= 9; i++) { color(tmp1.substr(i-1,1).toString()); paint("f", i); }
     tmp1 = Right(tmp1,tmp1.length-9);
 for (i = 1; i <= 9; i++) { color(tmp1.substr(i-1,1).toString()); paint("r", i); }
     tmp1 = Right(tmp1,tmp1.length-9);
 for (i = 1; i <= 9; i++) { color(tmp1.substr(i-1,1).toString()); paint("b", i); }
     tmp1 = Right(tmp1,tmp1.length-9);
 for (i = 1; i <= 9; i++) { color(tmp1.substr(i-1,1).toString()); paint("l", i); }
     tmp1 = Right(tmp1,tmp1.length-9);
 for (i = 1; i <= 9; i++) { color(tmp1.substr(i-1,1).toString()); paint("d", i); }
}

//-----------------------------------------------------------------
//  all code below translated from Visual Basic
//-----------------------------------------------------------------

function C(){ 		//---> C = Center

 for (var i = 4; i <= 6; i++) {
   t[1].src = f[i].src
   t[2].src = r[i].src
   t[3].src = b[i].src
   t[4].src = l[i].src

   f[i].src = t[4].src
   r[i].src = t[1].src
   b[i].src = t[2].src
   l[i].src = t[3].src
 }
}

//-----------------------------------------------------------------

function F() { //f = front

t[1].src = u[7].src;
t[2].src = r[1].src;
t[3].src = d[3].src;
t[4].src = l[9].src;

u[7].src = t[4].src;
r[1].src = t[1].src;
d[3].src = t[2].src;
l[9].src = t[3].src;

t[1].src = u[8].src;
t[2].src = r[4].src;
t[3].src = d[2].src;
t[4].src = l[6].src;

u[8].src = t[4].src;
r[4].src = t[1].src;
d[2].src = t[2].src;
l[6].src = t[3].src;

t[1].src = u[9].src;
t[2].src = r[7].src;
t[3].src = d[1].src;
t[4].src = l[3].src;

u[9].src = t[4].src;
r[7].src = t[1].src;
d[1].src = t[2].src;
l[3].src = t[3].src;

t[1].src = f[1].src;
t[2].src = f[3].src;
t[3].src = f[9].src;
t[4].src = f[7].src;

f[1].src = t[4].src;
f[3].src = t[1].src;
f[9].src = t[2].src;
f[7].src = t[3].src;

t[1].src = f[2].src;
t[2].src = f[6].src;
t[3].src = f[8].src;
t[4].src = f[4].src;

f[2].src = t[4].src;
f[6].src = t[1].src;
f[8].src = t[2].src;
f[4].src = t[3].src;

}


//-----------------------------------------------------------------

function L() { //-- L = left

t[1].src = u[1].src;
t[2].src = f[1].src;
t[3].src = d[1].src;
t[4].src = b[9].src;

u[1].src = t[4].src;
f[1].src = t[1].src;
d[1].src = t[2].src;
b[9].src = t[3].src;

t[1].src = u[4].src;
t[2].src = f[4].src;
t[3].src = d[4].src;
t[4].src = b[6].src;

u[4].src = t[4].src;
f[4].src = t[1].src;
d[4].src = t[2].src;
b[6].src = t[3].src;

t[1].src = u[7].src;
t[2].src = f[7].src;
t[3].src = d[7].src;
t[4].src = b[3].src;

u[7].src = t[4].src;
f[7].src = t[1].src;
d[7].src = t[2].src;
b[3].src = t[3].src;

t[1].src = l[1].src;
t[2].src = l[3].src;
t[3].src = l[9].src;
t[4].src = l[7].src;

l[1].src = t[4].src;
l[3].src = t[1].src;
l[9].src = t[2].src;
l[7].src = t[3].src;

t[1].src = l[2].src;
t[2].src = l[6].src;
t[3].src = l[8].src;
t[4].src = l[4].src;

l[2].src = t[4].src;
l[6].src = t[1].src;
l[8].src = t[2].src;
l[4].src = t[3].src;

}


//-----------------------------------------------------------------


function U() { //-- U = Upper

for (var i = 1; i <= 3; i++) {
   t[1].src = f[i].src;
   t[2].src = l[i].src;
   t[3].src = b[i].src;
   t[4].src = r[i].src;

   l[i].src = t[1].src;
   b[i].src = t[2].src;
   r[i].src = t[3].src;
   f[i].src = t[4].src;
}

   t[1].src = u[4].src;
   t[2].src = u[2].src;
   t[3].src = u[6].src;
   t[4].src = u[8].src;

   u[4].src = t[4].src;
   u[2].src = t[1].src;
   u[6].src = t[2].src;
   u[8].src = t[3].src;

   t[1].src = u[7].src;
   t[2].src = u[1].src;
   t[3].src = u[3].src;
   t[4].src = u[9].src;

   u[7].src = t[4].src;
   u[1].src = t[1].src;
   u[3].src = t[2].src;
   u[9].src = t[3].src;

}


//-----------------------------------------------------------------

function Y() { //--Y axel

for (var i = 1; i <= 9; i++) { t[i].src = f[i].src; }
for (var i = 1; i <= 9; i++) { f[i].src = l[i].src; }
for (var i = 1; i <= 9; i++) { l[i].src = b[i].src; }
for (var i = 1; i <= 9; i++) { b[i].src = r[i].src; }
for (var i = 1; i <= 9; i++) { r[i].src = t[i].src; }

   t[1].src = u[2].src;
   t[2].src = u[4].src;
   t[3].src = u[8].src;
   t[4].src = u[6].src;

   u[2].src = t[4].src;
   u[4].src = t[1].src;
   u[8].src = t[2].src;
   u[6].src = t[3].src;

   t[1].src = u[1].src;
   t[2].src = u[7].src;
   t[3].src = u[9].src;
   t[4].src = u[3].src;

   u[1].src = t[4].src;
   u[7].src = t[1].src;
   u[9].src = t[2].src;
   u[3].src = t[3].src;

   t[1].src = d[4].src;
   t[2].src = d[2].src;
   t[3].src = d[6].src;
   t[4].src = d[8].src;

   d[4].src = t[4].src;
   d[2].src = t[1].src;
   d[6].src = t[2].src;
   d[8].src = t[3].src;

   t[1].src = d[7].src;
   t[2].src = d[1].src;
   t[3].src = d[3].src;
   t[4].src = d[9].src;

   d[7].src = t[4].src;
   d[1].src = t[1].src;
   d[3].src = t[2].src;
   d[9].src = t[3].src;

}

//-----------------------------------------------------------------

function X() { //--X axel

for (var i = 1; i <= 9; i++) { t[i].src = f[i].src; }
for (var i = 1; i <= 9; i++) { f[i].src = d[i].src; }
for (var i = 1; i <= 9; i++) { d[i].src = b[9 + 1 - i].src; }
for (var i = 1; i <= 9; i++) { b[i].src = u[9 + 1 - i].src; }
for (var i = 1; i <= 9; i++) { u[i].src = t[i].src; }

t[1].src = l[3].src;
t[2].src = l[1].src;
t[3].src = l[7].src;
t[4].src = l[9].src;

l[3].src = t[4].src;
l[1].src = t[1].src;
l[7].src = t[2].src;
l[9].src = t[3].src;

t[1].src = l[6].src;
t[2].src = l[2].src;
t[3].src = l[4].src;
t[4].src = l[8].src;

l[6].src = t[4].src;
l[2].src = t[1].src;
l[4].src = t[2].src;
l[8].src = t[3].src;


t[1].src = r[1].src;
t[2].src = r[3].src;
t[3].src = r[9].src;
t[4].src = r[7].src;

r[1].src = t[4].src;
r[3].src = t[1].src;
r[9].src = t[2].src;
r[7].src = t[3].src;

t[1].src = r[2].src;
t[2].src = r[6].src;
t[3].src = r[8].src;
t[4].src = r[4].src;

r[2].src = t[4].src;
r[6].src = t[1].src;
r[8].src = t[2].src;
r[4].src = t[3].src;

}

//-----------------------------------------------------------------

function DoMove(code) {

switch (code) {

  //--Change side Horizontalt

  case "X":  X(); break;
  case "-X": X(); X(); X();  break;
  case "X2": X(); X(); break;

  //--Change side Vertikalt

  case "Y":  Y(); break;
  case "-Y": Y(); Y(); Y();break;
  case "Y2": Y(); Y();break;

  //--Rotate Whole Cube

  case "-Z":  X(); X(); X(); Y();Y();Y();X();break;
  case "Z": X();Y();Y();Y();X();X();X();break;
  case "Z2": X();X();X();Y();Y();Y();X();X();X();X();Y();Y();Y();X();break;

  //--Rotate Upper Side

  case "U":  U();break;
  case "-U": U();U();U();break;
  case "U2": U();U();break;

  //--Rotate Front Side

  case "F":  F();break;
  case "-F": F();F();F();break;
  case "F2": F();F();break;

  //--Rotate Left Side

  case "L":  L();break;
  case "-L": L();L();L();break;
  case "L2": L();L();break;
  case "C":  C();break;
  case "-C": C();C();C();break;
  case "C2": C();C();break;

  //--Rotate Right Side

  case "R":  Y();Y();L();Y();Y();break;
  case "-R": Y();Y();L();L();L();Y();Y();break;
  case "R2": Y();Y();L();L();Y();Y();break;

  //--Rotate Down Side

  case "D":  X();F();X();X();X();break;
  case "-D": X();F();F();F();X();X();X();break;
  case "D2": X();F();F();X();X();X();break;

  //--Rotate Back Side

  case "B":  X();X();F();X();X();break;
  case "-B": X();X();F();F();F();X();X();break;
  case "B2": X();X();F();F();X();X();break;
  }
}

//-----------------------------------------------------------------

function UnDoMove(code) {

switch (code) {

  //--Change side Horizontalt

  case "-X":  X(); break;
  case "X": X(); X(); X();  break;
  case "X2": X(); X(); break;

  //--Change side Vertikalt

  case "-Y":  Y(); break;
  case "Y": Y(); Y(); Y();break;
  case "Y2": Y(); Y();break;

  //--Rotate Whole Cube

  case "Z":  X(); X(); X(); Y();Y();Y();X();break;
  case "-Z": X();Y();Y();Y();X();X();X();break;
  case "Z2": X();X();X();Y();Y();Y();X();X();X();X();Y();Y();Y();X();break;

  //--Rotate Upper Side

  case "-U":  U();break;
  case "U": U();U();U();break;
  case "U2": U();U();break;

  //--Rotate Front Side

  case "-F":  F();break;
  case "F": F();F();F();break;
  case "F2": F();F();break;

  //--Rotate Left Side

  case "-L":  L();break;
  case "L": L();L();L();break;
  case "L2": L();L();break;
  case "-C":  C();break;
  case "C": C();C();C();break;
  case "C2": C();C();break;

  //--Rotate Right Side

  case "-R":  Y();Y();L();Y();Y();break;
  case "R": Y();Y();L();L();L();Y();Y();break;
  case "R2": Y();Y();L();L();Y();Y();break;

  //--Rotate Down Side

  case "-D":  X();F();X();X();X();break;
  case "D": X();F();F();F();X();X();X();break;
  case "D2": X();F();F();X();X();X();break;

  //--Rotate Back Side

  case "-B":  X();X();F();X();X();break;
  case "B": X();X();F();F();F();X();X();break;
  case "B2": X();X();F();F();X();X();break;
  }
}


//-----------------------------------------------------------------


