// =============================================================
// Daily Mini Str8ts from Andrew Stuart
//
// Copyright Scanraid Ltd 2008
//
// This script is for distribution to any web site participating
// in the Andrew Stuart Daily Str8ts Feed
//
// Version 1.01 24-May-2009
// =============================================================

var g 		= [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]];
var jc 		= [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]];
var sol 	= [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]];
var clues	= [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]];
var mask	= [[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]];
var last_back_col = '';
var last_name = '';
var timerID = 0;
var tStart  = null;
var oneMinute = 60 * 1000  // milliseconds in a minute
var oneHour = oneMinute * 60
var oneDay = oneHour * 24
var monnames = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'];
var easymode = false;
var currentlevel = 2;

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 bit_count( b )
{
    var n = 0;
	if ( !b ) return 0;
    do { ++n; } while ( b &= (b-1) );
    return  n;
}
function vs_valid_number(item)
{
	var okay = true;
//	item.value = item.value.Trim();
	var num = "0123456";
	for (var intLoop = 0; intLoop < item.value.length; intLoop++) {
	    if (num.indexOf(item.value.charAt(intLoop)) == -1) okay = false;
	}
	if( !okay ) item.value = '';
	return okay;
}
function set_print_square( x, y, val )
{
	if( jc[y][x]==0 ) // White background
	{
		if( val == ' ' || val == '0' || val == 0 )
		{
			document.getElementById('C' + x + y).innerHTML = '&nbsp;';
			document.getElementById('C' + x + y).className = (clues[y][x]==true)?'InnerTClues':'InnerTDone';
		}
		else
		{
			document.getElementById('C' + x + y).innerHTML = val;
			document.getElementById('C' + x + y).className = (clues[y][x]==true)?'InnerTClues':'InnerTDone';
		}
	}
	else
	{
		if( val == ' ' || val == '0' || val == 0 )
			 document.getElementById('C' + x + y).innerHTML = '&nbsp;';
		else document.getElementById('C' + x + y).innerHTML = val;
		document.getElementById('C' + x + y).className = 'InnerBDone';
	}
}

function set_square(x,y,val)
{
	if( jc[y][x]=='0' ) // White background
	{
		if( val == ' ' || val == '0' || val == 0 )
		{
			document.getElementById('A' + x + y).value = '';
			document.getElementById('A' + x + y).className = (clues[y][x]==true)?'SQWC':'SQW';
		}
		else
		{
			document.getElementById('A' + x + y).value = val;
			document.getElementById('A' + x + y).className = (clues[y][x]==true)?'SQWC':'SQW';
		}
		document.getElementById('C' + x + y).className = 'CellT';
		document.getElementById('A' + x + y).readOnly = false;
	}
	else
	{
		if( val == ' ' || val == '0' )
		{
			document.getElementById('A' + x + y).value = '';
			document.getElementById('A' + x + y).className = 'SQB';
		}
		else
		{
			document.getElementById('A' + x + y).value = val;
			document.getElementById('A' + x + y).className = 'SQB';
		}
		document.getElementById('A' + x + y).readOnly = true;
		document.getElementById('C' + x + y).className = 'CellB';
	}
}
function load_board(level)
{
	var i, j, c;
	var archive_date = location.search;
	var mySudoku, todayStr, todayTitle;

	if( level == '' ) currentlevel = 2;
	if( level != 0 ) {
		currentlevel = level;
	}
	var d = new Date();
	easymode = false;

	todayStr = "?d=0&lev=" + currentlevel;
	if( location.search.substring(0,3)=="?d=" )
	{
		todayStr = location.search;
		d.setDate(d.getDate()+Number(location.search.charAt(3)));
	}
	todayTitle = d.getDate() + '-' + (monnames[d.getMonth()]) + '-' + (d.getYear());

	if(window.ActiveXObject)
	{
		var xmlDoc = new ActiveXObject("Msxml2.XMLHTTP");
		xmlDoc.open("GET","http://www.str8ts.com/feed/fetchStr8ts6x6DAILY.asp" + todayStr + "&accid=9302", false);
		xmlDoc.send();
		mySudoku = xmlDoc.responseXML.xml;
		mySudoku = mySudoku.substring(24,mySudoku.length-2);
	}
	else if(document.implementation && document.implementation.createDocument)
	{
		xmlDoc = new XMLHttpRequest();
		xmlDoc.open("GET", "http://www.str8ts.com/feed/fetchStr8ts6x6DAILYtxt.asp" + todayStr + "&accid=9302", false);
		xmlDoc.send(null);
		mySudoku = xmlDoc.responseText;
	}
	if( mySudoku.indexOf('rror') > 0 )
	{
		alert(mySudoku.substring(6,mySudoku.length-8));
		return;
	}

	switch( mySudoku.charAt(0) ) {
	case 'g' :
		document.getElementById("star2").src = 'starfade.gif';
		document.getElementById("star3").src = 'starfade.gif';
		break;
	case 'm' :
		document.getElementById("star2").src = 'star.gif';
		document.getElementById("star3").src = 'starfade.gif';
		break;
	case 't' :
		document.getElementById("star2").src = 'star.gif';
		document.getElementById("star3").src = 'star.gif';
		break;
	}

	stage = 0;

	for(j=0;j<6;j++)
		for(i=0;i<6;i++)
		{
			var c = j*6+i+1;
			if( mySudoku.charAt(c)=='.' )
				g[j][i] = 0;
			else
				g[j][i] = mySudoku.charAt(c)*1;
			sol[j][i] = mySudoku.charAt(c+36)*1;
			jc[j][i] = mySudoku.charAt(c+72)*1;
			if( g[j][i] > 0 )
			{
				clues[j][i] = 1;
				set_square(i,j,g[j][i]);
			}
			else
			{
				clues[j][i] = 0;
				set_square(i,j,' ');
			}
		}
	SWStart();

	okdebug = true;
}

function load_print_board(levelstr)
{
	var i, j, c;
	var archive_date = location.search;
	var mySudoku, todayStr, todayTitle;

	var d = new Date();

	todayStr = levelstr;
	if( d.getYear() < 2000 ) {
		todayTitle = d.getDate() + '-' + (monnames[d.getMonth()]) + '-' + (d.getYear()+1900);
	} else {
		todayTitle = d.getDate() + '-' + (monnames[d.getMonth()]) + '-' + (d.getYear());
	}
	if(window.ActiveXObject)
	{
		var xmlDoc = new ActiveXObject("Msxml2.XMLHTTP");
		xmlDoc.open("GET","http://www.str8ts.com/feed/fetchStr8ts6x6DAILY.asp" + todayStr + "&accid=9302", false);
		xmlDoc.send();
		mySudoku = xmlDoc.responseXML.xml;
		mySudoku = mySudoku.substring(24,mySudoku.length-2);
	}
	else if(document.implementation && document.implementation.createDocument)
	{
		xmlDoc = new XMLHttpRequest();
		xmlDoc.open("GET", "http://www.str8ts.com/feed/fetchStr8ts6x6DAILYtxt.asp" + todayStr + "&accid=9302", false);
		xmlDoc.send(null);
		mySudoku = xmlDoc.responseText;
	}
	if( mySudoku.indexOf('rror') > 0 )
	{
		alert(mySudoku.substring(6,mySudoku.length-8));
		return;
	}

	switch( mySudoku.charAt(0) ) {
	case 'g' :
		document.getElementById("ptitle").innerHTML = "<font size=5>The Daily Mini Str8ts for " + todayTitle + " - Easy</font>";
		break;
	case 'm' :
		document.getElementById("ptitle").innerHTML = "<font size=5>The Daily Mini Str8ts for " + todayTitle + " - Moderate</font>";
		break;
	case 't' :
		document.getElementById("ptitle").innerHTML = "<font size=5>The Daily Mini Str8ts for " + todayTitle + " - Tough</font>";
		break;
	}

	stage = 0;

	for(j=0;j<6;j++)
		for(i=0;i<6;i++)
		{
			var c = j*6+i+1;
			if( mySudoku.charAt(c)=='.' )
				g[j][i] = 0;
			else
				g[j][i] = mySudoku.charAt(c)*1;
			sol[j][i] = mySudoku.charAt(c+36)*1;
			jc[j][i] = mySudoku.charAt(c+72)*1;
			set_print_square(i,j,g[j][i]);
		}
	okdebug = true;
}


function convert_str2mask( astr )
{
	var n = 0;
	for(var i=0;i<astr.length;i++)
		n |= (1 << (parseInt(astr.charAt(i))-1));
	return n;3
}
function convert_mask2str( val )
{
	var s= '';
	for(i=1;i<=6;i++)
		if( val & (1 << i-1) )
			s = s + i;
	return s;
}
function Sudoku1( afield )
{
	var x,y,i,j,done,correct;
	if( vs_valid_number(afield) )
	{
		x = afield.id.charAt(1);
		y = afield.id.charAt(2);
		if( afield.value == 0 )
		{
			afield.value = '';
			g[y][x] = 0;
			mask[y][x] = 0;
			set_square( x,y, g[y][x] );
		}
		if( afield.value.length > 1 )
		{
			mask[y][x] = convert_str2mask( afield.value )
			g[y][x] = 0;
			afield.value = convert_mask2str( mask[y][x] );
			if( bit_count(mask[y][x] ) == 1 )
			{
				g[y][x] = bit2int(mask[y][x])+1;
				mask[y][x] = 0;
				set_square( x,y, g[y][x] );
			}
			else
			{
				afield.className = (afield.className == 'SQ1' || afield.className == 'SQ2') ? "notes2" : "notes1";
			}
		}
		else
		{
			mask[y][x] = 0;
			g[y][x] = afield.value;
			set_square( x,y, g[y][x] );
		}

		correct = done = 0;
		for(i=0;i<6;i++)
			for(j=0;j<6;j++)
			{
				if( g[j][i] > 0 || jc[j][i]==1 ) done++;
				if( g[j][i] == sol[j][i] ) correct++;
			}
		if( correct == 36 )
			alert('Congratulations! You have completed the Str8ts Puzzle!');
		if( done == 36 && correct < 36 )
			alert('Oops! There are ' + (done-correct) + ' cells which are wrong.' );
	}
}
function focyell( afield )
{
	if( last_name.length > 0 )
		document.getElementById(last_name).style.backgroundColor = last_back_col;
	last_name = '';

	if( afield.readOnly == false )
	{
		last_name = afield.id;
		last_back_col = afield.style.backgroundColor;
		afield.style.backgroundColor = '#ffff00';
	}
}
function color_same(x,y)
{
	var t, i, j, nt;
	var inputbox;

	inputbox = '<input type="text" value="" size=2 maxlength=2 name="ibox" id="ibox" onchange="javascript:Sudoku1(';
	inputbox = inputbox + "'" + 'A' +  x + y + "'" + ',this.value);">';

	document.getElementById('A'+x+y).innerHTML = inputbox;

}
function print_todays_board()
{
	var x,y,done=0;
//	var board = 'ad="bd=';
//	for(y=0;y<6;y++)
//		for(x=0;x<6;x++)
//			board = board + g[y][x];
	SGW = window.open('Str8ts6x6Printable.htm?lev=' + currentlevel,'_blank','resizable=yes,menubar=1,toolbar=1,scrollbars=yes,left=100,top=10,screenX=100,screenY=10,width=660,height=660');
	if (!SGW.opener) SGW.opener = self;
}
function print_board(archive_date)
{
	var x,y,done=0;
//	var board = 'ad="bd=';
//	for(y=0;y<6;y++)
//		for(x=0;x<6;x++)
//			board = board + g[y][x];

	SGW = window.open('Str8tsPrintable.htm?ad=' + archive_date,'_blank','resizable=yes,toolbar=1,scrollbars=yes,left=100,top=10,screenX=100,screenY=10,width=660,height=660');
	if (!SGW.opener) SGW.opener = self;
}
function show_help()
{
	SGW = window.open('http://www.str8ts.com/Str8ts_Strategies','_help','resizable=yes,toolbar=1,scrollbars=yes,left=100,top=10,screenX=100,screenY=10');
	if (!SGW.opener) SGW.opener = self;
}
function print_yesterdays_solution()
{
	var yesterday = new Date();
	var yesterdayStr, yesterdayDate;
	var today = new Date();

	yesterdayDate = today.getDate() -1 ;
	yesterday.setDate( yesterdayDate );

	if( yesterday.getYear() < 200 )
		yesterdayStr = yesterday.getDate()  + '/' + (1+yesterday.getMonth()) + '/' + (1900 + yesterday.getYear());
	else yesterdayStr = yesterday.getDate()  + '/' + (1+yesterday.getMonth()) + '/' + yesterday.getYear();

	SGW = window.open('/Print_Daily_Str8ts.asp?solution=please&day=' + yesterdayStr,'_blank','resizable=yes,toolbar=1,scrollbars=yes,left=100,top=10,screenX=100,screenY=10,width=660,height=660');
//	SGW = window.open('/Print_Daily_Str8ts.asp?solution=please','_blank','resizable=yes,toolbar=1,scrollbars=yes,left=100,top=10,screenX=100,screenY=10,width=660,height=700');
	if (!SGW.opener) SGW.opener = self;
}
function print_solution(archive_date)
{
	SGW = window.open('ASSolution.htm?ad=' + archive_date,'_blank','resizable=yes,toolbar=1,scrollbars=yes,left=100,top=10,screenX=100,screenY=10,width=660,height=660');
	if (!SGW.opener) SGW.opener = self;
}
function SWUpdateTimer()
{
	if(timerID) {
	  clearTimeout(timerID);
	  clockID  = 0;
	}

	if(!tStart)
	  tStart   = new Date();

	var hours, mins, secs;
	var   tDate = new Date();
	var   tDiff = tDate.getTime() - tStart.getTime();

	tDate.setTime(tDiff);

	hours = tDate.getHours();
	if( hours >= 15 ) hours = 0;
	mins = tDate.getMinutes();
	secs = tDate.getSeconds();
	if( mins < 10 ) mins = '0' + mins
	if( secs < 10 ) secs = '0' + secs
	document.getElementById('theTimer').value = "" + hours + ":" + mins + ":" + secs;

	timerID = setTimeout("SWUpdateTimer()", 1000);
}
function SWStart()
{
	tStart   = new Date();

	document.getElementById('theTimer').value = "0:00:00";

	timerID  = setTimeout("SWUpdateTimer()", 1000);
}
function SWStop()
{
   if(timerID) {
      clearTimeout(timerID);
      timerID  = 0;
   }

   tStart = null;
}
function SWReset()
{
	tStart = null;

	document.getElementById('theTimer').value = "0:00:00";
}
function openAWindow( pageToLoad, winName, width, height, center)
{
	xposition=0; yposition=0;
	if ((parseInt(navigator.appVersion) >= 4 ) && (center)){
		xposition = (screen.width - width) / 2;
		yposition = (screen.height - height) / 2;
	}
	args = "width=" + width + ","
	+ "height=" + height + ","
	+ "location=0,"
	+ "menubar=0,"
	+ "resizable=1,"
	+ "scrollbars=1,"
	+ "status=0,"
	+ "titlebar=1,"
	+ "toolbar=1,"
	+ "hotkeys=0,"
	+ "screenx=" + xposition + ","  //NN Only
	+ "screeny=" + yposition + ","  //NN Only
	+ "left=" + xposition + ","     //IE Only
	+ "top=" + yposition;           //IE Only
	window.open( pageToLoad,winName,args );
}

