function createPuzzle() {
    for (var i=0; i < 9; i++) {
        row [0] [i] = initRow[i];
        row[1][i] = initRow[ m( i + 3)];
        row[2][i] = initRow[ m( i + 6)];
        row[3][i] = initRow[ m( i + 1)];
        row[4][i] = initRow[ m( i + 4)];
        row[5][i] = initRow[ m( i + 7)];
        row[6][i] = initRow[ m( i + 2)];
        row[7][i] = initRow[ m( i + 5)];
        row[8][i] = initRow[ m( i + 8)];
    }
    // swap any two rows in a cube here
    var rowA = Math.floor(Math.random()*2);
    var rowB = 2;
    var junk = 0;
    for (var k = 0; k < 9; k++) { 
        junk = row[rowA][k];
        row[rowA][k] = row[rowB][k];
        row[rowB][k] = junk;
    }
    // swap any two columns in a cube here
    var colA = Math.floor(Math.random()*2)+6;
    var colB = 8;
    var junk = 0;
    for (var k = 0; k < 9; k++) { 
        junk = row[k][colA];
        row[k][colA] = row[k][colB];
        row[k][colB] = junk;
    }
        // swap any two rows in a cube here
    var rowA = 3;
    var rowB = Math.floor(Math.random()*2)+4;
    var junk = 0;
    for (var k = 0; k < 9; k++) { 
        junk = row[rowA][k];
        row[rowA][k] = row[rowB][k];
        row[rowB][k] = junk;
    }
        // swap any two columns in a cube here
    var colA = 3;
    var colB = Math.floor(Math.random()*2)+4;
    var junk = 0;
    for (var k = 0; k < 9; k++) { 
        junk = row[k][colA];
        row[k][colA] = row[k][colB];
        row[k][colB] = junk;
    }
    
            // swap any two rows in a cube here
    var rowA = 6;
    var rowB = Math.floor(Math.random()*2)+7;
    var junk = 0;
    for (var k = 0; k < 9; k++) { 
        junk = row[rowA][k];
        row[rowA][k] = row[rowB][k];
        row[rowB][k] = junk;
    }
        // swap any two columns in a cube here
    var colA = 0;
    var colB = Math.floor(Math.random()*2)+1;
    var junk = 0;
    for (var k = 0; k < 9; k++) { 
        junk = row[k][colA];
        row[k][colA] = row[k][colB];
        row[k][colB] = junk;
    }
}

function m(n) {
    if (n > 8) {
        n -= 9;
    }
    return n;
}

function generateNew() {
    var i = 0;
    while (i < 9) {
        var guess = Math.floor(Math.random() * 9)+1;
        var dupe = false;
        for (var j = 0; j < i; j++) {
            if (initRow[j] == guess ) {
                dupe = true;
            }
        }
        if (dupe == false) {
            initRow[i++] = guess;
        }
    }
}

function checkJunk(z, x, y) {
    var myForm = document.form1;
    var work;
    work = allow1thru9(z.value);
    if (work.length == 0) {
        z.value="";
        return;
    }
    var g = parseInt(work);
    if (g > 9) {return;}
    if (g != row [x][y]) {
        ++badGuesses;    
        if (myForm.showErrors.checked == true) {
            alert ("Bad Guess # " + badGuesses);
            z.value = "";
        }
    }    
    work = z.value;
    if (work.length == 1) {
        z.value = "     " + work;
    }       
}

function allow1thru9(work) {
    var result="";
    var chunk;
    for (var i=0;i<work.length;i++) {
        chunk = work.charAt(i);
        if (chunk > "0" && chunk < "@") {
            result += result + chunk;
        }
    }

   // alert ("result is " + result);
    return result;
}


function eraseErrors() {
    var box;
    var obj;
    var num;
    
    for (var i = 0; i < 9 ; i++) {
      for (var j=0; j < 9; j++) {
        num = i*10 + j;
        box = "box" + num.toString();
        //alert (box);
        obj = document.getElementById(box);
        //alert (obj);
        if (obj != null) {
            var m = obj.value;
            m = allow1thru9(m);
            if (m.length == 1) {
                if (row[i][j] != parseInt(m)) {
                    obj.value = "";
                }
            }
        }
     }   
   }
}


function startOver() {
    var box;
    var obj;
    var num;
    for (var i = 0; i < 9 ; i++) {
      for (var j=0; j < 9; j++) {
        num = i*10 + j;
        box = "box" + num.toString();
        obj = document.getElementById(box);
        if (obj != null) {
            obj.value = "";
         }
      }   
   }
   badGuesses = 0;
}

function showAnswer() {
    var myForm = document.form1;
    var obj = document.getElementById("solution");
    obj.style.visibility = "visible";
    obj = document.getElementById("show");
    obj.style.visibility = "hidden";
    obj = document.getElementById("hide");
    obj.style.visibility = "visible";    
}

function hideAnswer() {
    var myForm = document.form1;
    var obj = document.getElementById("solution");
    obj.style.visibility = "hidden";
    obj = document.getElementById("show");
    obj.style.visibility = "visible";
    obj = document.getElementById("hide");
    obj.style.visibility = "hidden";  
}

function launch(file,name,winwidth,winheight)
{
	var string = "width=" + winwidth
				+ ",height=" + winheight
				+ "toolbar=yes,directories=yes,menubar=yes,resizable=yes,dependent=no,scrollbars=yes";
	var hwnd = window.open(file,name,string);
	if (navigator.appName == "Netscape")
	{
		hwnd.focus();
	}
}

function myValidator() {
    return true;
}

function cube(x,y) {
    var r;
    var c;
    var clue = 0;
    document.writeln ("<td width='180'><table class='yadda' border='1' width='100%' >");
    for (var i=0; i < 3; i++) {
        document.write ("<tr height='50'>");
        for (var j = 0; j < 3; j++) {
            document.write ("<td width='50' align='center' >");
            r = x + i;
            c = y + j;
            junk = row [r] [c];
            junk2 = junk.toString();
            serial = (r*10)+c;
            junk = row [r] [c];
            junk2 = junk.toString();              
            if ( (Math.floor(Math.random() * 2) == 1) && (clue != 8) ) {
                document.write (junk2);
                clue++;
            } else {
                document.write ("<input type='text' class='tb' size='2' ");
                //document.write ("value='" + junk2 + "' " );
                document.write ("onchange='checkJunk(this," + r + "," + c + ")' ");
                document.write ("name='" + "box" + serial.toString() + "'");
                document.write (" />");
            }
        }    
        document.writeln ("</tr>");
    }
    document.write ("</table></td>");    
}  
    
