// ================================================================
// Routines JavaScript creees pour et par le site 'cruciverbia.com'
// ----------------------------------------------------------------
// La duplication et l'usage de ces routines sont strictement
// interdites.
// ================================================================

var Debug = false ;
var Fenetre ;

var DetailsGrille = 0 ;
var CompGrille = 0 ;

var Touche = '' ;

var FrameVide = '<html><body>Qui se couche avec le sang qui bout se r&eacute;veille avec le bout qui sent - Lao Tseu Tseu.</body></html>' ;

if (Debug)
{
	Fenetre = window.open('empty.html', 'Debug','scrollbars,resizable,width=250,height=300') ;
}

function tracerDebug(Chaine)
{
	if (Fenetre.document)
		Fenetre.document.write(Chaine + '<br/>') ;
}

function lireObjet(Objet)
{
	if (Debug)
		tracerDebug('getObject : ' + Objet) ;

	if (document.all)
		return document.all[Objet] ;
	else
		return document.getElementById(Objet);
}

function cld(Lettre)
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.cld(Lettre) ;
}

function clk(Lettre, evt)
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.clk(Lettre, evt) ;
}

function traiterKeyDown (evt)
{
var kCode ;

	if (DetailsGrille == 0)
		return ;

	if (! evt)
		var evt = window.event ;

	if (evt.keyCode)
		kCode = evt.keyCode ;
	else
		if (evt.which)
			kCode = evt.which ;

	if (evt.ctrlKey)
		Touche = '' ;
	else
		Touche = DetailsGrille.traiterClavier(kCode, evt.shiftKey) ;
	if (Touche != '')
	{
		evt.cancelBubble = true ;
		
		if (evt.preventDefault)
		{
			evt.preventDefault() ;
			evt.stopPropagation() ;
		}
		
		return (false) ;
	}
	else
		return (true) ;
}

function traiterKeyPress (evt)
{
	// Handler du KeyPress
	// Necessaire pour que les touches de curseur (entre autres)
	// ne soient pas traitees apres par le browser
	if (Touche != '')
	{
		if (! evt)
			var evt = window.event ;

		evt.cancelBubble = true ;
		
		if (evt.preventDefault)
		{
			evt.preventDefault() ;
			evt.stopPropagation() ;
		}

		return (false) ;
	}
	else
		return (true) ;
}

function traiterKeyUp (evt)
{
	// Handler du KeyUp
	// Necessaire pour que les touches de curseur (entre autres)
	// ne soient pas traitees apres par le browser
	if (Touche != '')
	{
		if (! evt)
			var evt = window.event ;

		evt.cancelBubble = true ;
		
		if (evt.preventDefault)
		{
			evt.preventDefault() ;
			evt.stopPropagation() ;
		}
		Touche = '' ;

		return (false) ;
	}
	else
		return (true) ;
}

function afficherAide()
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.afficherAide() ;
}

function suiteAide(Page)
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.suiteAide(Page) ;
}

function basculerErreurs()
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.basculerErreurs() ;
}

function montrerDefinitions()
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.montrerDefinitions()
}

function clavierVirtuel(Touche)
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.clavierVirtuel(Touche)
}

function montrerClavierVirtuel()
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.montrerClavierVirtuel()
}

function modeNormal()
{
	if (DetailsGrille == 0)
		return ;

	DetailsGrille.modeNormal()
}

function procedureTest()
{
	Objet = lireObjet('aidesaisie') ;
	sTest = '<br/><div class="aidesaisie">Pour commencer, si vous ne voyez pas ci-dessus une superbe grille vierge avec le premier mot marqu&eacute; en jaune et ' ;
	sTest += 'la premi&egrave;re case marqu&eacute;e en gris, c\'est que vous devez imp&eacute;rativement changer de navigateur.<br/><br/>' ;
	sTest += 'Pour tester ais&eacute;ment la compatibilit&eacute; de notre syst&egrave;me de saisie avec votre navigateur et votre syst&egrave;me d\'exploitation, c\'est tr&egrave;s simple.' ;
	sTest += '<ul><li>Utilisez plusieurs fois les touches de curseur horizontales <b>ET</b> verticales pour vous d&eacute;placer dans la grille.<br/>' ;
	sTest += 'Si la s&eacute;lection des mots (en jaune) et de la case courante (en gris) suit correctement vos d&eacute;placements et si la d&eacute;finition du mot en cours change correctement en bas &agrave; doite de la grille, vous n\'&ecirc;tes pas loin du nirvana.</li>' ;
	sTest += '<li>Tapez maintenant des lettres quelconques et voyez si elles s\'affichent bien dans la grille tout en provoquant le d&eacute;placement de la case courante.</li>' ;
	sTest += '<li>Enfin, cliquez sur le bouton d\'affichage des d&eacute;finitions. Vous devez voir appara&icirc;tre deux fen&ecirc;tres en partie superpos&eacute;es que vous devez pouvoir d&eacute;placer &agrave; volont&eacute;.</li></ul>' ;
	sTest += 'Si ces trois tests ont correctement fonctionn&eacute;, c\'est que votre navigateur est compatible. Merci alors de nous le faire savoir via notre <a href="question.php">formulaire</a>.<br/<br/>' ;
	sTest += '<b>Attention : dans certaines circonstances, il peut &ecirc;tre n&eacute;cessaire d\'avoir &agrave; cliquer d\'abord une fois dans la fen&ecirc;tre' ;
	sTest += ' &agrave; proximit&eacute; de la grille pour que les frappes du clavier soit prises en compte.</div>' ;
	Objet.innerHTML = sTest ;
}

function agrandirEcran()
{
}

function sauverGrille()
{
	DetailsGrille.sauverGrille() ;
}

function traiterFinGrille()
{
	DetailsGrille.traiterFinGrille() ;
}

function cacherFinGrille()
{
	DetailsGrille.cacherFinGrille() ;
}

function stopperChrono()
{
	DetailsGrille.stopperChrono() ;
}

function montrerStats()
{
	DetailsGrille.montrerStats() ;
}

function lireValeurTooltip(TipNom)
{
	switch(TipNom)
	{
	case 'btn_aide' :
		Texte = "Affiche/cache la page d'aide expliquant la saisie dans la grille." ;
		break ;
	
	case 'btn_erreur' :
		Texte = "Active/d&eacute;sactive le mode erreur dans lequel les lettres erronées sont affichées en rouge." ;
		break ;
	
	case 'btn_preferences' :
		Texte = "Affiche la page des réglages du fonctionnement." ;
		break ;
	
	case 'btn_agrandir' :
		Texte = "Agrandit la zone de travail de la grille, si votre fen&ecirc;tre est suffisamment grande (attention : si vous avez commenc&eacute; une grille, son contenu sera perdu !)." ;
		break ;
	
	case 'btn_definitions' :
		Texte = "Affiche/cache toutes les définitions de la grille." ;
		break ;
	
	case 'btn_casesnoires' :
		Texte = "Affiche les cases noires lorsqu'on a commencé à jouer en mode muet (réservé aux abonnés).<br/>Cette action n'est pas r&eacute;versible." ;
		break ;
	
	case 'btn_imprimer' :
		Texte = "Imprime la grille (et, éventuellement, la solution) pour la jouer sur papier." ;
		break ;
	
	case 'btn_enregistrer' :
		Texte = "Enregistre l'état d'avancement courant de la grille en vue d'une reprise ultérieure (réservé aux abonnés)." ;
		break ;
	
	case 'btn_clavier' :
		Texte = "Affiche/cache le clavier virtuel (clavier &agrave; utiliser lorsque les touches du clavier normal ne sont pas correctement prises en compte par votre navigateur ou lorsque vous pr&eacute;f&eacute;rez travailler avec la souris)." ;
		break ;
	
	case 'btn_dico' :
		Texte = "Lance la recherche des mots du dictionnaire qui pourraient &ecirc;tre des solutions du mot courant (r&eacute;serv&eacute; aux abonn&eacute;s)." ;
		break ;
	
	case 'btn_stats' :
		Texte = "Affiche les statistiques d'utilisation et les notes de la grille (informations r&eacute;serv&eacute;es aux abonn&eacute;s)." ;
		break ;
	
	default :
		Texte = "[Pas de texte d'aide associé à cet objet]" ;
		break ;
	}

	return (Texte) ;
}

function chercherDefinitions()
{
	CompGrille.chercherDefinitions() ;
}

function chercherDico()
{
	CompGrille.chercherDico() ;
}

function cacherInfoPlus()
{
	CompGrille.cacherInfoPlus() ;
}

function afficherSolutions(Debut)
{
	CompGrille.afficherSolutions(Debut) ;
}

function afficherDefinitions()
{
	CompGrille.afficherDefinitions() ;
}

function traiterMouseDown(e)
{
	if (Conteneur != '')
	{
		ob = getObject(Conteneur) ;
		if (! Browser.ie)
		{
			X = e.layerX ;
			Y = e.layerY ;
			return false ;
		}
		else
		{
			X = event.offsetX ;
			Y = event.offsetY ;
		}
	}
}

function traiterMouseMove(e)
{
	if (ob)
	{
		if (! Browser.ie)
		{
			ob.style.top = e.pageY - Y ;
			ob.style.left = e.pageX - X ;
		}
		else
		{
			ob.style.pixelLeft = event.clientX - X + document.body.scrollLeft ;
			ob.style.pixelTop = event.clientY - Y + document.body.scrollTop ;
			return false ;
		}
	}
}

function traiterMouseUp()
{
	if (ob)
	{
		if ((Abonne) && (getOption('positions')))
			// On doit sauvegarder la position de la fenetre
			savePosition(ob, getTop(ob), getLeft(ob)) ;
		ob = null ;
	}
}

