
var riddle;
var inputAllowed = false;

function req( url, rsf )
{
	var xmlHttp;

    try
    {
    	xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
    	try
    	{
    		xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    	}
    	catch (e)
    	{
    		try
    		{
    			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    		}
    		catch (e)
    		{
    			alert("Your browser does not support AJAX!");
    			return false;
    		}
    	}
    }

    xmlHttp.onreadystatechange =
    	function()
    	{
    		if ( xmlHttp.readyState == 4 )
    			rsf( xmlHttp );
    	}

    xmlHttp.open( 'GET', url );
    xmlHttp.send( null );
}

function stopDef(e) {
if (e &&e.preventDefault) e.preventDefault();
else if (window.event && window.event.returnValue)
window.eventReturnValue = false;
}

function setpage( page )
{
	document.getElementById( 'turn' ).style.display = ((page == 'turn') ? 'block' : 'none');
	document.getElementById( 'inst' ).style.display = ((page == 'inst') ? 'block' : 'none');
	document.getElementById( 'intro' ).style.display = ((page == 'intro') ? 'block' : 'none');
	document.getElementById( 'hiscore' ).style.display = ((page == 'hiscore') ? 'block' : 'none');
	document.getElementById( 'gameover' ).style.display = ((page == 'gameover') ? 'block' : 'none');
}

function setmode( mode )
{
	if ( mode == 'playing' )
	{
		document.getElementById( 'statusbar' ).style.display='block';
		document.getElementById( 'startbtn' ).style.display='none';
		document.getElementById( 'clearbtn' ).style.display='block';
	}
	else if ( mode == 'init' )
	{
		document.getElementById( 'field' ).value='';
		document.getElementById( 'statusbar' ).style.display='none';
		document.getElementById( 'startbtn' ).style.display='block';
		document.getElementById( 'clearbtn' ).style.display='none';
	}
}

function cf()
{
//	alert('clear');
	document.getElementById( 'field' ).value='';
}

function status( msg )
{
	document.getElementById( 'statusbar' ).innerHTML = msg;
}

function displayscore( msg )
{
	document.getElementById( 'score' ).innerHTML = msg;
}

function play()
{
	setmode( 'playing' );
   	score = 0;
   	displayscore( score );
	ridlen = 1;
	makeriddle();
}

function showProgress( show )
{
	document.getElementById('progress').style.display = show ? 'block' : 'none';
	document.getElementById( 'statusbar' ).style.display = show ? 'none' : 'block';
}

function progress( i )
{
	if ( i >= 0 && i <= 100 )
	{
		document.getElementById('progressperc').style.width = i+'%';
//		red = i > 50 ? 'f' : '0';
//		green = i > 80 ? '0' : 'f';
		red = (i < 50) ? Math.floor(i/3.125).toString(16) : 'f';
		green = ( i > 50 ) ? Math.floor((100-i)/3.125).toString(16) : 'f';
		color = '#' + red + green + '0';
//		document.getElementById('progressperc').innerHTML = document.getElementById('progressperc').style.width;
		document.getElementById('progressperc').style.backgroundColor = color;
	}
}

var progressval;
var score;

function makeriddle()
{
//   	riddle = '';
  // 	for ( i = 0; i < ridlen; i++)
   	//	riddle += Math.floor( Math.random() * 9 + 1 );
   	if ( ridlen == 1 )
   		riddle = '';
	riddle += Math.floor( Math.random() * 9 + 1 );

   	document.getElementById('field').value = riddle;
   	status( 'Memorize the Numbers Now' );
   	showProgress( false );
   	setTimeout( "waitinput();", ridlen * 1000 );
}

function waitinput()
{
   	document.getElementById( 'field' ).value = '';
   	status( 'input!' );
   	inputAllowed = true;
   	progressval = 0;
   	displayscore( score );
   	progress( 0 );
   	showProgress( true );
   	inputcycle();
}

function inputcycle()
{
   	progressval++;
   	progress( progressval );
   	if ( ( progressval == 100 ) || ( document.getElementById('field').value.length == ridlen ) )
   		check();
   	else
   		setTimeout( "inputcycle();", 100 );
}

function check()
{
   	showProgress( false );
   	inputAllowed = false;
   	if ( document.getElementById( 'field' ).value == riddle )
   	{
   		status( 'Well done' );
   		score += Math.round( ( (100 - progressval)/50 ) * ridlen * 100 );
	   	displayscore( score );
   		ridlen++;
   		setTimeout( 'makeriddle();', 1000 );
   	}
   	else
   	{
   		status( 'Sorry, You Missed the Order' );
   		setTimeout( "setpage('gameover');", 1000 );
   	}
}

function showhiscores()
{
	req( 'score.php',
		function(v)
		{
			document.getElementById('scoretbl').innerHTML = v.responseText;
			setpage('hiscore');
		} );
}

function putscore()
{
	name = document.getElementById('playername').value;
	if ( name == '' )
		alert('You must specify your name to save score');
	else
	{
		req( 'score.php?set='+score+'&name='+name,
			function(v)
			{
				document.getElementById('scoretbl').innerHTML = v.responseText;
				setpage('hiscore');
			} );
	}
}

function highlight( i, high )
{
	document.getElementById( 'btn'+i ).className = high ? 'btnhi' : 'btn';
}

function hlbig( e, high )
{
//	alert( 'Alerd!' );
	e.className = high ? 'btnbighi' : 'btnbig';
}

function over( e, inbound )
{
	var srcEl = e.srcElement ? e.srcElement : e.target;
	if ( srcEl.id.substr(0,3) == 'btn' )
	{
		highlight( srcEl.id.substr( 3, 1 ), inbound );
	}
	if ( srcEl.className == 'btnbig' || srcEl.className == 'btnbighi' )
		hlbig( srcEl, inbound );
//	alert( srcEl.className );
}

function kev( e, down )
{
//	if ( inputAllowed )
	{
		if ( e.keyCode >= 0x30 && e.keyCode <= 0x39 )
		{
			if ( down )
				document.getElementById('field').value += e.keyCode - 0x30;
			highlight( e.keyCode - 0x30, down );
			stopDef(e);
		}
		else if ( e.keyCode == 8 )
		{
			if ( down )
			{
				var s = document.getElementById('field').value;
				s = s.substr( 0, s.length - 1 );
				document.getElementById('field').value = s;
				stopDef(e);
			}
		}
	}
}

function c(e)
{
	if ( inputAllowed )
	{
		var srcEl = e.srcElement ? e.srcElement : e.target;
		if ( srcEl.id.substr(0,3) == 'btn' )
			document.getElementById('field').value += srcEl.innerHTML;
	}
}

function scrollprogress( i )
{
	if ( i > 7 ) i = 0;
	document.getElementById('progressperc').style.backgroundPosition = i+'px 0px';
	setTimeout( 'scrollprogress('+(i+1)+')', 50 );
}
