
   var solution = sol;
   var puzzle = puz;
   var paused, solved;
   var hour, min, sec, t, s;
   var cls=0;
   var bNum = 0;
   // var sNum;
   var list = "123456789";
   playList = new Array('','Very easy','Easy','Intermediate','Hard','Expert','Nasty','No Way');

function oStop() {
   var v = document.getElementById("txt").href;
   var suf = "?id=" + bNum + "&cls=" + cls + "&hr=" + hour + "&min=" + min + "&sec=" + sec + "&paused=" + paused + "&done=" + ( solved || isSolved() ) + "&err=" + parseInt(nErrors(),10) + "&mrks=" + parseInt(nMarkups(),10) + "&blks=" + parseInt(nBlanks(),10) + "&level=" + playList[playLevel];
   if ( v.indexOf("?") < 0 ) document.getElementById("txt").href = v + suf;
      else document.getElementById("txt").href = v.substring(0,v.indexOf("?")) + suf;
   if ( !paused ) pause();
   }
function oFlip() {
   var i=1;
   bNum++;
   cls++;
   if ( bNum == i++ ) {
      document.getElementById("txt").innerHTML = "Musical Pacifiers";
      document.getElementById("txt").href = "/babygenius/";
      return;
      }
   if ( bNum == i++ ) {
      document.getElementById("txt").innerHTML = "Musical Pacifiers";
      document.getElementById("txt").href = "/babygenius/";
      return;
      }
   if ( bNum == i++ ) {
      document.getElementById("txt").innerHTML = "Try Rhapsody Free";
      document.getElementById("txt").href = "/music/rhapsody/";
      bNum = 0;
      }
   }
function fix(i) {
      var v = puzzle.charAt(i);
      if ( v == '*' ) return "disabled";
      else return "";
   }
function oMsg(s) {
   document.getElementById('msgs').value = s;
   }
function restartPuz() {
   var answer = confirm ("Are you sure you want to restart the puzzle?");
   if ( !answer ) return;
   initPuz();
   }
function initPuz() {



   solved = false;
   paused = false;
   initGrid();
   initTimer();


   var z;
   var nSel = Math.floor(Math.random()*3+1);
   for ( z = 0; z < nSel; z++ ) {
      oFlip();
      }
   cls=0;



   }
function initGrid() {



   paused = false;
   document.getElementById("pB").value="Pause";
   for ( i = 0; i < solution.length; i++) {
      var v = puzzle.charAt(i);
      if ( v == ' ' ) v = '';
      else v = solution.charAt(i);
      document.getElementById('c' + i).value = v;
      }
   oMsg(playList[playLevel] + " puzzle #" + sNum);
   }
function reEnter(cellId) {
   oFlip();
   if ( paused ) {
      pause();
      oMsg("The clock is running.");
      return;
      }
   if ( solved || isSolved() ) {
      solved = true;
      oMsg("Congratulations!");
      return;
      }
   else {
      var entry = document.getElementById(cellId).value;
      if ( entry.length == 1 ) document.getElementById(cellId).value = '';
      }
   oMsg("The clock is running.");
   }
function fixWidth() {
   for ( i = 0; i < solution.length; i++) {
      var entry = document.getElementById('c' + i).value;
      var v = entry.length*11+22;
      document.getElementById('c' + i).style.width=v+"px";
      }
      for ( i = 0; i < solution.length; i++) {
         var v = document.getElementById('c' + i).value;
         v = trimString(v);
         document.getElementById('c' + i).value = v;
         }
   }
function pause() {
   s = '                    ';
   if ( paused ) {
      paused = false;
      document.getElementById("pB").value="Pause";
      for ( i = 0; i < solution.length; i++) {
         var v = document.getElementById('c' + i).value;
         v = trimString(v);
         document.getElementById('c' + i).value = v;
         }

      if ( isSolved() ) {
         solved = true;
         oMsg("Congratulations!");
         }
      else {
         oMsg("The clock is running.");
         }
 
      }
   else {
      paused = true;
      document.getElementById("pB").value="Continue";
      for ( i = 0; i < solution.length; i++) {
         var v = document.getElementById('c' + i).value;
         v = s + v;
         document.getElementById('c' + i).value = v;
         }
      if ( !solved ) oMsg("Your puzzle is paused. Press Continue!");
      }
   }
function trimString(str) {
   str = this != window ? this : str;
   return str.replace( /\s/g, "" );
   }
function isDone() {
      if ( solved || isSolved() ) {
         solved = true;
         oMsg("Congratulations!");
         }
      else oMsg(nErrors() + ' ' + nMarkups() + ' ' + nBlanks());
   }
function isSolved() {
   for ( i = 0; i < solution.length; i++) {
      var cell = document.getElementById('c' + i).value;
      if ( cell !== solution.charAt(i) ) return false;
      }
   return true;
   }
function nErrors() {
   var nErrs = 0;
   for ( i = 0; i < solution.length; i++) {
      var cell = trimString(document.getElementById('c' + i).value);
      if ( ( cell.indexOf(solution.charAt(i)) < 0 ) && ( trimString(document.getElementById('c' + i).value) !== "" ) ) nErrs++;
      }
   s = "";
   if ( nErrs > 1 ) s = "s";
   if ( nErrs == 0 ) return "";
      else return (nErrs + ' error' + s + ' ');
   }
function nBlanks() {
   var nBlks = 0;
   for ( i = 0; i < solution.length; i++) {
      var cell = document.getElementById('c' + i).value;
      if ( trimString(cell) == "" ) nBlks++;
      }
   s = "";
   if ( nBlks > 1 ) s = "s";
   if ( nBlks == 0 ) return "";
      else return (nBlks + ' empty cell' + s);
   }
function nMarkups() {
   var nMks = 0;
   for ( i = 0; i < solution.length; i++) {
      var cell = document.getElementById('c' + i).value;
      var markup = trimString(cell);
      if ( markup.length > 1 ) nMks++;
      }
   if ( nMks == 0 ) return "";
      else return (nMks + ' marked ');
   }
function initTimer() {
   hour = "0";
   min = "00";
   sec = "0";
   clearTimeout(t);
   timer();
  }
function printButton() {
   window.print();
   }
function timer() {
   if ( paused ) {
      t = setTimeout("timer()", 1000);
      return;
      }

   if ( solved || isSolved() ) {
      solved = true;
      oMsg("Congratulations!");
      t = setTimeout("timer()", 1000);
      return;
      }

   if ((min < 10) && (min != "00")) dismin = "0" + min;
   else {
      dismin = min;
      }
   dissec = (sec < 10) ? sec = "0" + sec : sec;
   document.timer.counter.value = hour + ":" + dismin + ":" + dissec;
   if (sec < 59) sec++;
   else {
      sec = "0";
      min++;
      if (min > 59) {
         min = "00";
         hour++;
         }
      }
   t = setTimeout("timer()", 1000);
   }
