/**
 * @author Andrew Stuart
 */
var clear_results;
function bit_count( b ){
    var n=0;
	if (!b) {
		return 0;
	}
    do { ++n; } while ( (b &= (b-1)) );
    return n;
}
function IsNumeric(strChar) {  //  check for valid numeric strings
	var strValidChars="123456";
	var blnResult=true;

	if (strChar.length === 0) {
		return false;
	}

	if (strValidChars.indexOf(strChar) == -1) {
		blnResult = false;
	}
	return blnResult;
}
function IsNumeric2(strChar) {  //  check for valid numeric strings
	var strValidChars="0123456";
	var blnResult=true;

	if (strChar.length === 0) {
		return false;
	}
	var n = parseInt(strChar);
	if( isNaN(n) ) { return false;}
	if (n<1 || n>45) { return false;}
	return true;
}
function IsNumericKenKen(strChar) {  //  check for valid numeric strings
	var strValidChars="0123456789+-x/";
	var blnResult=true;

	if (strChar.length === 0) {
		return false;
	}
	var n = parseInt(strChar);
	if( isNaN(n) ) { return false;}
	if (n<1) { return false;}
	return true;
}

function mask2str( m ) {
	var i,p=0,str='';
	for (i = 0; i < 6; i++) {
		if (m & (1 << i)) {
			if (p++) {
				str = str + '/';
			}
			str = str + abetx.charAt(i);
		}
	}
	return str;
}
function bit2int( m ) {
	switch( m ) {
	case 1   : return 0;
	case 2   : return 1;
	case 4   : return 2;
	case 8   : return 3;
	case 16  : return 4;
	case 32  : return 5;
	case 64  : return 6;
	case 128 : return 7;
	case 256 : return 8;
	}
	return 0;
}
function cordit(y,x){
	if (coordmode === 0) {
		return 'r' + abetx.charAt(y) + 'c' + abetx.charAt(x);
	}
	return abety.charAt(y) + abetx.charAt(x);
}
function strat_add( s ) {
	var doc;
	if (!document.ifrm) {
		doc = document.getElementById("ifrm").contentDocument;
	}
	else {
		doc = document.ifrm.document;
	}
	if( clear_results ) { // clear anything from server
		doc.body.innerHTML = s;
		clear_results = false;
	} else {
		doc.body.innerHTML = doc.body.innerHTML + s;
	}
}
function change_hints(){
	showhints=!showhints;
	for (var j = 0; j < 6; j++) {
		for (var i = 0; i < 6; i++) {
			if (g[j][i] === 0) {
				lable_square(j, i, 0);
			}
		}
	}
}
function convert_str2mask( astr )
{
	var c,n=0;
	for(var i=0;i<astr.length;i++)
	{
		c=parseInt(astr.charAt(i));
		if( IsNumeric(c) ) n |= (1 << (c-1));
	}
	return n;
}
function assign_clicks()
{
	var t,x,y;
	for(y=0;y<6;y++)
		for(x=0;x<6;x++)
		{
			t=document.getElementById("a"+y+x);
			t.onclick=color_same;
			if (t.captureEvents) t.captureEvents(Event.CLICK);
		}
}
function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}


sud_list = [                  "PPR","LBR",            "XWG","SCN","YWG","SFH","MXW","JFH","XCY","URT","HUR","XYZ","RPC","XYC","APE","BUG","COQ","MCO","GXC","FCN","ERT","FXW","FSF","GRD","ALS","AIC","AI2","AI3","DBL","POM","NIS","BBB"];
jig_list = [                  "PPR","LBR","LOL",      "XWG","SCN","YWG","SFH","MXW","JFH","XCY",            "XYZ","RPC","XYC",                  "MCO","GXC","FCN",                  "GRD","ALS","AIC","AI2","AI3","DBL","POM","NIS","BBB"];
sdx_list = [                  "PPR","LBR",            "XWG","SCN","YWG","SFH","MXW","JFH","XCY","URT","HUR","XYZ","RPC","XYC","APE","BUG","COQ","MCO","GXC","FCN",      "FXW","FSF","GRD","ALS","AIC","AI2","AI3","DBL","POM","NIS","BBB"];
kil_list = ["KL1","KIO","KCS","PPR","LBR",      "KL4","XWG","SCN","YWG","SFH","MXW","JFH","XCY", 	 		"XYZ","RPC","XYC","APE",      "COQ","MCO","GXC","FCN",      "FXW","FSF","GRD","ALS","AIC","AI2","AI3","DBL"];
kil6x6_list = ["KL1","KIO","KCS","PPR","LBR",      "KL4","XWG","SCN","YWG","SFH","MXW","JFH","XCY", 			 "XYZ","RPC","XYC","APE",      "COQ","MCO","GXC","FCN",     "ALS","DB"];
ken6x6_list = ["KL1","KIO","XWG","SCN","SFH","XCY","MXW",      "RPC","XYC","COQ","MCO","GXC","FCN","AIC","AI2","AI3","ALS","DBL"];
kdu6x6_list = ["KL1","KIO","PPR","LBR","XWG","SCN","YWG","SFH","MXW","XCY","XYZ","RPC","XYC","COQ","MCO","GXC","FCN","AIC","AI2","AI3","ALS","DBL"];

var jig=0;

function paint_yes_no( thelist, endstage )
{
	var i;
	var ycol = YESCOL;
	if( ycol == null ) ycol = '#00ff00';
	for(i=0;i<thelist.length;i++)
	{
		if( thelist[i] == endstage ) break;
		document.getElementById("R" + thelist[i]).innerHTML='<font color=#ff0000><b>No</b></font>';
	}
	if(endstage!="NO")
	{
		var d = document.getElementById("R" + endstage);
		if( d )
			d.innerHTML='<font color=' + ycol + '><b>Yes</b></font>';
		else
			alert('paint_yes_no: no row called ' + "R" + endstage);
	}
}
function reset_yes_no( thelist, amt )
{
	var i;
	for(i=1;i<=amt;i++)
		document.getElementById("R" + i).innerHTML='&nbsp;';
	for(i=0;i<thelist.length;i++)
	{
		var d=document.getElementById("R" + thelist[i])
		if(d) d.innerHTML='&nbsp;';
		else alert('reset_yes_no: no row called ' + "R" + thelist[i]);
	}
}
function backup_yes_no( thelist, stage, amt )
{
	var i,s;
	for(i=stage;i<=6;i++)
		document.getElementById("R" + i).innerHTML='&nbsp;';
	s = stage - amt;
	if( s < 0 ) s = 0;
	for(i=s;i<thelist.length;i++)
	{
		var d=document.getElementById("R" + thelist[i]);
		if( d ) d.innerHTML='&nbsp;';
		else alert('backup_yes_no: no row called ' + "R" + thelist[i]);
	}
}
function backup_yes_no6x6( thelist, stage, amt )
{
	var i,s;
	for(i=stage;i<=4;i++)
		document.getElementById("R" + i).innerHTML='&nbsp;';
	s = stage - amt;
	if( s < 0 ) s = 0;
	for(i=s;i<thelist.length;i++)
	{
		var d=document.getElementById("R" + thelist[i]);
		if( d ) d.innerHTML='&nbsp;';
		else alert('backup_yes_no6x6: no row called ' + "R" + thelist[i]);
	}
}
function padzero( a ) {
	if( !IsNumeric2(a) ) return '00';
	if( a < 10 ) return '0'+a;
	return a;
}
function get_stage( thelist, stratname )
{
	for(var i=0;i<thelist.length;i++)
		if( thelist[i] == stratname ) return 6+i;
	return 0;
}
