<!-- begin

	var pegup = parseInt(0)
	var pegradius = parseInt(19)
	var difmupx = parseInt(0)
	var difmupy = parseInt(0)
	var holefrom =parseInt(0)
	var holes = new Array()
	var numpegs = 14
	var jumps = new Array()
	var moves = 0
	var tt = 50

function jump(a,b,c,d,e){
 this.peg = a
 this.holefrom = b
 this.holeto = c
 this.pegout = d
 this.jumpd = e
}

function hole(i){
	this.inb = eval("document.myform.in" + i )
	this.x = eval("document.myform.x" + i )
	this.y = eval("document.myform.y" + i )
	this.mv1 = eval("document.myform.mv1_" + i )
	this.mv2 = eval("document.myform.mv2_" + i )
	this.mv3 = eval("document.myform.mv3_" + i )
	this.mv4 = eval("document.myform.mv4_" + i )
}

function init() {
	document.onmousedown = mouseDown
	document.onmousemove = mouseMove
	document.onmouseup = mouseUp
	if (is.ns) document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP)
	for (i=1;i<16;i++){
	  holes[i] = new hole(i)
	}
	dynpeg = new Array()
	for (i=1;i<15;i++){
	 dynpeg[i] = new DynLayer("dpeg"+i)
	 dynpeg[i].slideInit()
	 dynpeg[i].slideTo(holes[i].x.value,holes[i].y.value)
	 holes[i].inb.value = i
	}
	holes[15].inb.value = 0
	numpegs = 14
	tt = 50
	
}

function mouseDown(e) {
	var mx = parseInt((is.ns)? e.pageX : event.x+document.body.scrollLeft)
	var my = parseInt((is.ns)? e.pageY : event.y+document.body.scrollTop)
	for (i=1;i<15;i++){
	if (dynpeg[i].slideActive == false){
	 difmx = parseInt(dynpeg[i].x) + pegradius - mx
	 difmy = parseInt(dynpeg[i].y) + pegradius - my
	 dist = Math.sqrt(difmx * difmx + difmy * difmy)
	 if (dist < pegradius) {
		for (j=1;j<16;j++){ 
		 if (holes[j].inb.value == i ) pegup = i
		}
		difmupx = difmx - pegradius
		difmupy = difmy - pegradius
		
		// move to top  - resort
	//		dynpeg[i].css.zIndex = 1
	//		for (var j=i;j<=dynpeg[i].array.length-2;j++) this.array[j] = this.array[j+1]
		//	this.array[this.array.length-1] = this.obj
	 }
	 }
	}
	// status = mx + " " + my + " pegx:" + dynpeg[1].x + " pegy:" + dynpeg[1].y + " pegup:" + pegup + " difx:" + difmx +" dy:" + difmy
	return true
}

function mouseMove(e) {
	var mx = (is.ns)? e.pageX : event.x+document.body.scrollLeft
	var my = (is.ns)? e.pageY : event.y+document.body.scrollTop
	if (pegup > 0 ) {
		dynpeg[pegup].slideTo(mx+difmupx,my+difmupy)
		 // status = "dx:" + difmupx + " dy:" + difmupy +  " pegup:" + pegup +" pegradius=" + pegradius
		}
	
	return false
}

function mouseUp(e) {
if (pegup > 0) {
if (dynpeg[pegup].slideActive == false){
	var jump1hole = 0
	var pegout = 0
	var mx = parseInt((is.ns)? e.pageX : event.x+document.body.scrollLeft)
	var my = parseInt((is.ns)? e.pageY : event.y+document.body.scrollTop)
	
	cx = mx+difmupx
	cy = my+difmupy
	
	holefrom = 0
	holeto = 0
	for (i=1;i<16;i++){ 
	 if (holes[i].inb.value == pegup) {
	  holefrom = i
	  holeto = i
	  }
	}
	if (holefrom > 0) {
	maxmoves = 2
	if (holefrom == 4 || holefrom == 6 || holefrom == 13) maxmoves = 4
	for (i=1;i<maxmoves+1;i++) {
		switch (i){
		case 1: m = parseInt(holes[holefrom].mv1.value); break
		case 2: m = parseInt(holes[holefrom].mv2.value); break
		case 3: m = parseInt(holes[holefrom].mv3.value); break
		case 4: m = parseInt(holes[holefrom].mv4.value); break
		}
		dx = parseInt(holes[m].x.value) - cx
		dy = parseInt(holes[m].y.value) - cy
		dz = Math.sqrt(dx * dx + dy * dy)
		jumpd = Math.floor((m + holefrom) / 2 )
	 	if (holes[m].inb.value == 0 && dz <= pegradius && holes[jumpd].inb.value > 0){
 		 holeto = m
		 holes[holefrom].inb.value = 0
		 holes[holeto].inb.value = pegup
		 // remove jumped peg
		 pegout = holes[jumpd].inb.value
		 holes[jumpd].inb.value = 0
		 jump1hole = jumpd
	 	 numpegs = numpegs - 1
	 	 dynpeg[pegout].slideTo(325 + (pegout-(parseInt(pegout/5)*5))*pegradius*2,36 + (pegout-(parseInt(pegout/3)*3))*pegradius*2)
	 	}
	}
	} // end if holefrom is valid
	if (numpegs == 14 ) { // or || holefrom == 0
		for (i=1;i<16;i++){
			dx = parseInt(holes[i].x.value) - cx
			dy = parseInt(holes[i].y.value) - cy
			dz = Math.sqrt(dx * dx + dy * dy)
			if (dz <= pegradius && holes[i].inb.value == 0){
				holeto = i
			}
		} // end for i
		if (holefrom > 0) [holes[holefrom].inb.value = 0]
		else {numpegs = numpegs + 1; if (numpegs > 14) numpegs = 14}
		if (holeto >0) holes[holeto].inb.value = pegup
	}
	if (holeto > 0 && holefrom > 0) {
		moves = moves + 1
		jumps[moves] = new jump(pegup,holefrom,holeto,pegout,jump1hole)
	}
	
	dynpeg[pegup].slideTo(holes[holeto].x.value,holes[holeto].y.value)
	
	// status = "from:" + holefrom + " to:" + holeto + " pegup=" + pegup + " jumpd=" + jumpd + " #pegs=" + numpegs + " mvs:" + moves + " jump.." + jumps[moves].peg + ", " + jumps[moves].holefrom + ", " + jumps[moves].holeto
	pegup = 0
} //end if pegup at all
}
}

function moveback (fast) {
 if (moves > 0) {
	var peg = jumps[moves].peg
	holefrom = jumps[moves].holefrom
	holeto = jumps[moves].holeto
	pegout = jumps[moves].pegout
	jumpd = jumps[moves].jumpd
	holes[holefrom].inb.value = peg
	holes[holeto].inb.value = 0
	dynpeg[peg].slideTo(holes[holefrom].x.value,holes[holefrom].y.value)
	
	if (jumpd > 0) {
		holes[jumpd].inb.value = pegout
		numpegs = numpegs + 1; if (numpegs > 14) numpegs = 14;
		if (fast == 1) dynpeg[pegout].moveTo(holes[jumpd].x.value,holes[jumpd].y.value)
		else dynpeg[pegout].slideTo(holes[jumpd].x.value,holes[jumpd].y.value)
	}
	// status = "from:" + holefrom + " to:" + holeto + " peg=" + peg + " jumpd=" + jumpd + " mvs:" + moves
	moves = moves - 1
 }
}

function recurs2(){
 holestate = new Array()
 

}

function recursmov(nmovs,wichmov){
	tt = tt + 50
	wm1 = wichmov
	onmov = 0
 	for (k=1;k<16;k++){
		peg1 = holes[k].inb.value
		if (peg1 > 0) {
			maxmoves = 2
			if (k == 4 || k == 6 || k == 13) maxmoves = 4
			for (i=1;i<maxmoves+1;i++) {
			switch (i){
			case 1: m = parseInt(holes[k].mv1.value); break
			case 2: m = parseInt(holes[k].mv2.value); break
			case 3: m = parseInt(holes[k].mv3.value); break
			case 4: m = parseInt(holes[k].mv4.value); break
			}
			jumpd1 = Math.floor((m + k) / 2 )
	 		if (holes[m].inb.value == 0 && holes[jumpd1].inb.value > 0){
			 onmov = onmov + 1
			 if (onmov == wm1){
				 holes[k].inb.value = 0
				 holes[m].inb.value = peg1
				 // remove jumped peg
				 peg2 = holes[jumpd1].inb.value
				 holes[jumpd1].inb.value = 0
			 	 numpegs = numpegs - 1
				 if (numpegs == 1) solved = 1
				 moves = moves + 1
				 jumps[moves] = new jump(peg1,k,m,peg2,jumpd1)
				 wm1 = wm1 + 1
			 	 dynpeg[peg2].moveTo(325 + (peg2-(parseInt(peg2/5)*5))*pegradius*2,36 + (peg2-(parseInt(peg2/3)*3))*pegradius*2)
				 dynpeg[peg1].moveTo(holes[m].x.value,holes[m].y.value)
				 } // end onmov
		 	}
			}
		}
	} //end for k
	numoves = 0
	
	 for (k=1;k<16;k++){
		peg1 = holes[k].inb.value
		if (peg1 > 0) {
			maxmoves = 2
			if (k == 4 || k == 6 || k == 13) maxmoves = 4
			for (i=1;i<maxmoves+1;i++) {
			switch (i){
			case 1: m = parseInt(holes[k].mv1.value); break
			case 2: m = parseInt(holes[k].mv2.value); break
			case 3: m = parseInt(holes[k].mv3.value); break
			case 4: m = parseInt(holes[k].mv4.value); break
			}
			jumpd1 = Math.floor((m + k) / 2 )
	 		if (holes[m].inb.value == 0 && holes[jumpd1].inb.value > 0){
			 numoves = numoves + 1
		 	}
			}
		}
	} //end for k
	status = tt
	if (numoves > 0) { tt = tt + 50; setTimeout("recursmov(numoves,1)",tt) } // recursmov(numoves,1)
//	if (wm1 < nmovs) {setTimeout("moveback (1)",500)
//	setTimeout("recursmov(nmovs,wm1)",500); // recursmov(nm1,wm1)
//	}
	return false
}

function autosolve(){
 nummoves = 1
 solved = 1
// while (nummoves > 0){
 	numoves = 0
	for (k=1;k<16;k++){
		peg1 = holes[k].inb.value
		if (peg1 > 0) {
			maxmoves = 2
			if (k == 4 || k == 6 || k == 13) maxmoves = 4
			for (i=1;i<maxmoves+1;i++) {
			switch (i){
			case 1: m = parseInt(holes[k].mv1.value); break
			case 2: m = parseInt(holes[k].mv2.value); break
			case 3: m = parseInt(holes[k].mv3.value); break
			case 4: m = parseInt(holes[k].mv4.value); break
			}
			jumpd1 = Math.floor((m + k) / 2 )
	 		if (holes[m].inb.value == 0 && holes[jumpd1].inb.value > 0){
			 numoves = numoves + 1
		 	}
			}
		}
	} //end for k
	status = numoves
	if (numoves > 0) { tt = 50 ; recursmov(numoves,1)}
//	moved = 0
// 	for (k=1;k<16;k++){
//		peg1 = holes[k].inb.value
//		if (peg1 > 0 && moved == 0) {
//			maxmoves = 2
//			if (k == 4 || k == 6 || k == 13) maxmoves = 4
//			for (i=1;i<maxmoves+1;i++) {
//			switch (i){
//			case 1: m = parseInt(holes[k].mv1.value); break
//			case 2: m = parseInt(holes[k].mv2.value); break
//			case 3: m = parseInt(holes[k].mv3.value); break
//			case 4: m = parseInt(holes[k].mv4.value); break
//			}
//			jumpd1 = Math.floor((m + k) / 2 )
//	 		if (holes[m].inb.value == 0 && holes[jumpd1].inb.value > 0){
//			 moved = 1
//			 holes[k].inb.value = 0
//			 holes[m].inb.value = peg1
//			 // remove jumped peg
//			 peg2 = holes[jumpd1].inb.value
//			 holes[jumpd1].inb.value = 0
//		 	 numpegs = numpegs - 1
//			 if (numpegs == 1) solved = 1
//			 moves = moves + 1
//			jumps[moves] = new jump(peg1,k,m,peg2,jumpd1)
//		 	 dynpeg[peg2].slideTo(325 + (peg2-(parseInt(peg2/5)*5))*pegradius*2,36 + (peg2-(parseInt(peg2/3)*3))*pegradius*2)
//			 dynpeg[peg1].slideTo(holes[m].x.value,holes[m].y.value)
//		 	}
//			}
//		}
//	} //end for k
//	nummoves = nummoves -1
// } // end while
}

// End -->
