var kHelpLevelCookie = 'sdhl';

function SD_FancifyText( t, c, space_c, id, bCenterTable )
{
	if (!t) {return '';}
	if (!id) { id=''; }
	if ( bCenterTable != true ) { bCenterTable = false; }
	var s = 'style="margin-left:' + (bCenterTable?'auto;"':'0px;"');
	var f = '<TABLE border=0 cellpadding=0 cellspacing=0  id="' + id + '" ' + s + '><TR>';
	var tlc = t.toLowerCase();
	for ( var i=0; i<t.length; ++i ) 
	{
		var val = t.charAt(i);
		f += '<TD><DIV class="' + c + (val==' '? ' ' + space_c:'') + '" style="position:relative;"><TABLE border=0 cellpadding=0 cellspacing=0 height="100%"><TR><TD style="vertical-align:middle;">' + (val==' '?'&nbsp;':val) + '</TD></TR></TABLE></DIV></TD>';
	}
	f += '</TR></TABLE>';
	return f;
}

Game.FancifyText = function( t, c, space_c, id, bCenterTable )
{
	return SD_FancifyText( t, c, space_c, id, bCenterTable );
};

Game.kTitleLetterClass = 'sd_title_letter';
Game.kLetterClassDisabled= 'sd_title_letter_disabled';
Game.kLetterClassOver 	= 'sd_title_letter_over';
Game.kLetterClassSel 	= 'sd_title_letter_sel';
Game.kLetterClass 		= 'sd_title_letter_link sd_title_letter';
Game.kLetterSpace 		= 'sd_title_letter_link_space';
Game.kTitleLetterSpace 	= 'sd_title_letter_space';
Game.kTitleLeterLinkEmbed='sd_title_letter_link_embeded';
Game.mGameName	= 'SUDOKU';

GameVariation.GetTypeName = function ( typeID )
{	
	if ( typeID === undefined ) { typeID = gType; }
	if ( typeID == SudokuVariation.eType_Classic ) 			{ return 'Classic'; }
//	if ( typeID == WordGameVariation.eType_Multiplayer ) 		{ return 'Multiplayer'; }
//	if ( typeID == WordGameVariation.eType_Arcade ) 			{ return 'Arcade'; }
//	if ( typeID == WordGameVariation.eType_ArcadeMultiplayer ) 	{ return 'Arcade Multiplayer'; }
};

SudokuVariation.eType_Classic = 1;

SudokuVariation.prototype = new GameVariation();
SudokuVariation.prototype.constructor = SudokuVariation;
function SudokuVariation() 
{
	GameVariation.call( this );

	this.mLobbyPage 	= 'sudoku-lobby.pl';
	this.mRoomPage 		= 'sudoku-room.pl';
	this.mGamePage 		= 'sudoku.pl';
	this.mRulesPage		= 'game-rules.pl';
	this.mScoresPage	= 'game-scores.pl';

	this.mID1		= undefined;
	this.mID2		= undefined;
	this.mID3		= undefined;
	
	this.mbTimeable = false;
}

SudokuVariation.prototype.GetPuzzleHREF = function( id )
{
	return this.GetGameHREF() + '&bid=' + id;
};

function ZE_SetupVariation( index, type, name, rulesDivID, id )
{
	if ( index < 0 ) { return; }
	if ( !GameVariation.mVariations ) 
	{ 
		ErrorOutput( 'No variations array setup' ); return; 
	}
	if ( !GameVariation.mVariations[index] ) 
	{ 
		GameVariation.mVariations[index] = new SudokuVariation(); 
	}
	var v = GameVariation.mVariations[index];

	v.mIndex 		= index;
	v.mType			= type;
	v.mName 		= name;
	v.mElementID	= 'sd_variation_' + name;

	v.mID 			= id;
		
	v.mRulesDivID	= rulesDivID;	
}


Game.kHelpLevel_None = 0;	// == no help but show total number of errors but not where (check button), 
Game.kHelpLevel_Some = 1;	// == allow incorrect but only show errors when button pressed (check button)
Game.kHelpLevel_Lots = 2;	// == allow incorrect but show errors in real time (no check button), 
Game.kHelpLevel_Tons = 3;	// == no incorrect numbers all-real time (and no check button)
Game.kHelpLevel_Default = Game.kHelpLevel_Tons;
Game.mHelpLevel = CookieGet( kHelpLevelCookie ); //alert( Game.mHelpLevel );
if ( Game.mHelpLevel === undefined || Game.mHelpLevel == '' )
{
	Game.mHelpLevel = Game.kHelpLevel_Default;
}
else
{
	Game.mHelpLevel = ConvertToInt( Game.mHelpLevel );
}

Game.mHelpList = [
{ name:'None', description:'Only show number of errors when \'Check\' button pressed' },
{ name:'Some', description:'Show errors on board when \'Check\' button pressed' },
{ name:'Lots', description:'Allow incorrect entries but show errors on board' },
{ name:'Tons', description:'Don\'t allow incorrect entries' }
];

Game.SetSavedPuzzleCookie = function( cookieStr, expiresStr )
{
	var g = Game.mSingleton;
	if ( !g ) return '';
	
	// expire the wrong one(s)
	var expire = new Date();
	expire.setTime( expire.getTime() - 24*3600*1000 );
	CookieSet( 'sdv' + g.mCurrentVariation.GetCurrentID(), '', expire.toGMTString() );
	CookieSet( 'sdv' + g.mCurrentVariation.GetCurrentID() + '0', '', expire.toGMTString() );
	
	CookieSet( 'sdv' + g.mCurrentVariation.GetCurrentID() + g.mUserID, cookieStr, expiresStr );
};

Game.GetSavedPuzzleCookie = function()
{
	var g = Game.mSingleton;
	if ( !g ) return '';
	var oldCookie = CookieGet( 'sdv' + g.mCurrentVariation.GetCurrentID() );
	if ( oldCookie )
	{
		return oldCookie;
	}
	return CookieGet( 'sdv' + g.mCurrentVariation.GetCurrentID() + g.mUserID );	
};
