// $Id: checkpoint.js,v 1.1 2008/09/05 00:46:21 pwh Exp $

// Checkpoint object -----------------------------------------------------------

// Restore a checkpoint.
function chkptPop ( dsp )

{
  if ( dsp.checkpoints ) {

	var kpRow = dsp.kpRow
	var kpColumn = dsp.kpColumn

	dsp.checkpoints = this.previous

	for ( var r = 1; r < 10; r++ ) {

		dsp.kpRow = r

		for ( var c = 1; c < 10; c++ ) {

			dsp.kpColumn = c

			if ( ! dsp.isClue ( r, c ) ) {

				var digit
				var oldDigit = dsp.getDigit ( r, c )
				var markups = this.markup [r][c]

				for ( digit = 1; digit < 10; digit++ ) {

					if ( markups % 2 ) {

						markups -= 1
						dsp.setMarkup ( digit )

					} else dsp.clearMarkup ( digit )

					markups /= 2
				}

				digit = this.grid [r][c]

				if ( digit != oldDigit ) {

					if ( digit ) dsp.setDigit ( digit )
					else dsp.clearDigit ()
				}
			}
		}
	}

	dsp.kpRow = kpRow
	dsp.kpColumn = kpColumn
   }
}


// Checkpoint object.
function Checkpoint ( dsp )

{
   this.date = new Date()
   this.grid = new Array()
   this.markup = new Array()
   this.previous = dsp.checkpoints

   for ( var r = 1; r < 10; r++ ) {

	this.grid [r] = new Array()
	this.markup [r] = new Array()

	for ( var c = 1; c < 10; c++ ) {

		var markups = 0

		this.grid[r][c] = dsp.getDigit ( r, c )

		for ( var digit = 9; digit > 0; digit-- ) {

			markups += markups
			if ( dsp.markup [r][c][digit] ) markups += 1
		}

		this.markup[r][c] = markups
	}
   }

   this.pop = chkptPop
}
