/*
	---------------------------------
	|				|
	|	Sapphire-Engine		|
	|				|
	---------------------------------

----------- Débuté le 09 août 2006 -----------


This file is part of Sapphire-Engine.

Sapphire-Engine is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.

Sapphire-Engine is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.


/themes/Sapphire/javascript/javascript.js

Dernière modification: 25 mars 2008, par Ejis


-------------------------
Mise en place des fonctions Javascript pour le contrôle des champs de texte
-------------------------
*/


// Fonction pour ajouter des balises selon le bouton pressé

function ajouter_balises(balise , fichier , adresse , taille)
{
	
	var champs = document.getElementById('champ-texte') ;
	
	if (document.selection)
	{
		champs.focus () ;
		var range = document.selection.createRange() ;
		var selection = range.text ;
	}
	else if (champs.selectionStart || champs.selectionStart == 0)
	{
		var debut_selection = champs.selectionStart ;
		var fin_selection = champs.selectionEnd ;
		var selection = champs.value.substring (debut_selection , fin_selection) ;
	}
	else
	{
		var debut_selection = 0 ;
		var fin_selection = 0 ;
		var selection = '' ;
	}


	if (selection == null)
	{
		var selection = '' ;
	}


	// Balises <html></html> : On les met simplement là où se trouve le curseur. Du code pourra y être ajouté.
	
	if (balise == 'html')
	{
		var balises = '<html>' + selection + '</html>' ;
	}
	
	// Lien : On fait apparaître deux fenêtres à la suite, l'une pour la cible du lien, et l'autre pour sa description.
	
	if (balise == 'lien')
	{
		
		var cible = prompt (LANGUE_CIBLE_LIEN , 'http://') ;
		
		if (selection == '')
		{
			var description = prompt (LANGUE_DESCRIPTION_LIEN) ;
		}
		else
		{
			var description = selection ;
		}
	
		if (cible == null)
		{
			var cible = '' ;
		}

		if (description == null)
		{
			var description = '' ;
		}
			
		var balises = '<a href="' + cible + '">' + description + '</a>' ;
		
	}
	
	
	// Adresse :  Comme le lien, celà demande l'adresse et la descripotion.
	
	if (balise == 'adresse')
	{
		
		var adresse = prompt (LANGUE_ADRESSE) ;
			
		if (selection == '')
		{
			var description = prompt (LANGUE_DESCRIPTION_ADRESSE) ;
		}
		else
		{
			var description = selection ;
		}
	
		if (adresse == null)
		{
			var adresse = '' ;
		}
		
		if (description == null)
		{
			var description = '' ;
		}
		
		var balises = '<a href="mailto:' + adresse + '">' + description + '</a>' ;
		
	}
	
	
	// Image : Comme pour le lien, on demande l'adresse de l'image et sa description.
	
	if (balise == 'image')
	{
		
		var adresse = prompt (LANGUE_ADRESSE_IMAGE , 'http://') ;
		
		if (selection == '')
		{
			var description = prompt (LANGUE_DESCRIPTION_IMAGE) ;
		}
		else
		{
			var description = selection ;
		}
	
		if (adresse == null)
		{
			var adresse = '' ;
		}
		
		if (description == null)
		{
			var description = '' ;
		}
		
		var balises = '<img src="' + adresse + '" alt="' + description + '" />' ;
		
	}
	
	
	// Liste : Plus compliqué, d'abord, on demande le titre de cette liste, puis on met les éléments de cette liste jusqu'à annulation de l'utilisateur.
	
	if (balise == 'liste')
	{
		
		var titre = prompt (LANGUE_TITRE_LISTE) ;
		
		var balises = "</p>\n\n" ;
		
		if (titre != null && titre != '')
		{
			var balises = balises + "<h4>" + titre + "</h4>\n\n" ;
		}
		
		var balises = balises + "<ul>\n" ;
		
		var elements = new Array() ;
		
		var liste_complete = false ;
		var compte = 0 ;
	
		// On effectue une boucle qui ne s'arrêtera que lorsque l'utilisateur aura saisi une valeur vide ou annulé.
		
		while (liste_complete == false)
		{
			
			if (compte == 0 && selection != '')
			{
				var element_1 = selection ;
			}
			else
			{
				var element_1 = '' ;
			}
			
			var element = prompt (LANGUE_ELEMENT_LISTE , element_1) ;
			
			if (element == null && compte < 1)
			{
				var liste_complete = true ;
				elements[compte] = '' ;
			}
			else if (element == null && compte >= 1)
			{
				var liste_complete = true ;
			}
			else
			{
				elements[compte] = element ;
			}
			
			compte++ ;
			
		}
			
		
		var compte_max = elements.length - 1 ;
		
		for (compte = 0 ; compte <= compte_max ; compte++)
		{
			var balises = balises + "\t<li>" + elements[compte] +  "</li>\n" ;
		}
		
		var balises = balises + "</ul>\n\n<p>" ;
		
	}
	
	
	// Tableau : Le but est de faire un tableau valide W3C: titre, colonnes dont le nombre dépendra de l'utilisateur (autant qu'il y aura de champs remplis), et lignes.
	// Les boucles fonctionnent comme pour les listes.
	
	if (balise == 'tableau')
	{
		
		var titre = prompt (LANGUE_TITRE_TABLEAU) ;
		
		if (titre == null)
		{
			var titre = '' ;
		}
		
		var balises = "</p>\n\n<table>" ;
		
		var balises = balises + "\n\n\t<caption>" + titre + "</caption>\n\n\t<thead>\n\t\t<tr>"
		
		var colonnes = new Array() ;
		var tete_termine = false ;
		var nombre_colonnes = 0 ;
		
		while (tete_termine == false)
		{
			
			var colonne = prompt (LANGUE_TITRE_COLONNE) ;
			
			if (colonne == null && nombre_colonnes < 1)
			{
				colonnes[nombre_colonnes] = '' ;
				var tete_termine = true ;
			}
			else if (colonne == null && nombre_colonnes >= 1)
			{
				var tete_termine = true ;
			}
			else
			{
				colonnes[nombre_colonnes] = colonne ;
			}
			
			nombre_colonnes += 1 ;
			
		}
		
		colonne_max = colonnes.length -1 ;
		
		for (colonne = 0 ; colonne <= colonne_max ; colonne++)
		{
			var balises = balises + "\n\t\t\t<th>" + colonnes[colonne] + '</th>' ;
		}
		
		var balises = balises + "\n\t\t</tr>\n\t</thead>\n\n\t<tbody>" ;
		
		
		var lignes_termine = false ;
		var numero_ligne = 1 ;
		
		while (lignes_termine == false)
		{
			
			var balises = balises + "\n\t\t<tr>" ;
			
			var ligne = new Array() ;
			
			for (colonne = 0 ; colonne <= colonne_max  ; colonne++)
			{
				
				var valeur = prompt (LANGUE_VALEUR_COLONNE + colonnes[colonne] + LANGUE_SUR_LA_LIGNE + numero_ligne) ;
				
				if (valeur == null)
				{
					var valeur = '' ;
				}
				
				var balises = balises + "\n\t\t\t<td>" + valeur + '</td>' ;
				
			}
			
			var balises = balises + "\n\t\t</tr>" ;
			
			var continuer = confirm (LANGUE_AJOUTER_LIGNE) ;
			
			if (continuer == false)
			{
				var lignes_termine = true ;
			}
			
			numero_ligne += 1 ;
			
		}
		
		balises = balises + "\n\t</tbody>\n\n</table>\n\n<p>" ;
		
	}
	
	
	// Texte en gras : Il y a juste à saisir le texte qu'on veut mettre en gras.
	
	if (balise == 'gras')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_GRAS) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<strong>' + texte + '</strong>' ;
		
	}
	
	
	// Souligné : Comme pour le gras, il y a juste u texte à saisir
	
	if (balise == 'souligne')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_SOULIGNE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span class="souligne">' + texte + '</span>' ;
		
	}
	
	
	// Italique : Pareil que pour le gras et le souligné.
	
	if (balise == 'italique')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_ITALIQUE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span class="italique">' + texte + '</span>' ;
		
	}
	
	
	// Barre : Pareil que pour le gras et le souligné.
	
	if (balise == 'barre')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_BARRE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span class="barre">' + texte + '</span>' ;
		
	}
	
	
	// Taille du texte
	
	if (balise == 'taille_texte')
	{
		
		var taille = prompt (LANGUE_TAILLE_PIXELS) ;
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_TAILLE_CHANGEE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (taille == null)
		{
			var taille = '12' ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span style="font-size: ' + taille + 'px">' + texte + '</span>' ;
		
	}
	
	
	// Couleur du texte
	
	if (balise == 'couleur_texte')
	{
		
		var couleur = prompt (LANGUE_NOM_COULEUR) ;
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_COULEUR_CHANGEE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (couleur == null)
		{
			var taille = '12' ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span style="color: ' + couleur + '">' + texte + '</span>' ;
		
	}
	
	
	// Nouvelle ligne : écrit le code HTML pour changer de ligne
	
	if (balise == 'nouvelle_ligne')
	{
		var balises = selection + '<br />\n' ;
	}
	
	
	// Nouveau paragraphe : écrit le code HTML pour changer de paragraphe
	
	if (balise == 'nouveau_paragraphe')
	{
		var balises = selection + '</p>\n\n<p>' ;
	}
	
	
	// Titre 1 : écrit le code HTML pour un titre de première importance
	
	if (balise == 'titre_1')
	{
		
		var balises = "</p>\n\n<h4" ;
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_CONTENU_TITRE) ;
		}
		else
		{
			var texte = selection ;
		}
		
		var id = prompt (LANGUE_ID_TITRE) ;
		
		if (texte == null)
		{
			var texte = '' ;
		}
		
		if (id != null && id != '')
		{
			var balises = balises + ' id="' + id + '"' ;
		}
		
		var balises = balises + '>' + texte + "</h4>\n\n<p>" ;
		
	}
	
	
	// Titre 2 : écrit le code HTML pour un titre de première importance
	
	if (balise == 'titre_2')
	{
		
		var balises = "</p>\n\n<h5" ;
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_CONTENU_TITRE) ;
		}
		else
		{
			var texte = selection ;
		}
		
		var id = prompt (LANGUE_ID_TITRE) ;
		
		if (texte == null)
		{
			var texte = '' ;
		}
		
		if (id != null && id != '')
		{
			var balises = balises + ' id="' + id + '"' ;
		}
		
		var balises = balises + '>' + texte + "</h5>\n\n<p>" ;
		
	}
	
	
	// Texte à gauche
	
	if (balise == 'texte_gauche')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_GAUCHE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span class="texte-gauche">' + texte + '</span>' ;
		
	}
	
	
	// Texte au centre
	
	if (balise == 'texte_centre')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_CENTRE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span class="texte-centre">' + texte + '</span>' ;
		
	}
	
	
	// Texte à droite
	
	if (balise == 'texte_droite')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_TEXTE_DROITE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span class="texte-droite">' + texte + '</span>' ;
		
	}
	
	
	// Flottement à gauche
	
	if (balise == 'flottement_gauche')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_CONTENU_FLOTTEMENT_GAUCHE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span class="flottement-gauche">' + texte + '</span>' ;
		
	}
	
	
	// Flottement à droite
	
	if (balise == 'flottement_droite')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_CONTENU_FLOTTEMENT_DROIT) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<span class="flottement-droite">' + texte + '</span>' ;
		
	}
	
	
	// Fichier
	
	if (balise == 'fichier')
	{
		
		if (selection != '')
		{
			var description = selection ;
		}
		else
		{
			var description = fichier ;
		}
		
		var texte = prompt (LANGUE_DESCRIPTION_FICHIER , description) ;
		
		if (texte == null)
		{
			var texte = fichier ;
		}
		
		var balises = '<a href="' + adresse + '/fichiers/' + fichier + '">' +  texte + '</a> (' + taille + ' Mo)' 
		
	}
	
	
	// Acronyme
	
	if (balise == 'acronyme')
	{
		
		if (selection == '')
		{
			var initiales = prompt (LANGUE_ACRONYME) ;
		}
		else
		{
			var initiales = selection ;
		}
			
		var nom_complet = prompt (LANGUE_NOM_COMPLET) ;
		
		if (initiales == null)
		{
			var initiales = '' ;
		}
	
		if (nom_complet == null)
		{
			var nom_complet = '' ;
		}
		
		var balises = '<acronym title="' + nom_complet + '">' + initiales + '</acronym>' ;
		
	}
	
	
	// Abréviation
	
	if (balise == 'abreviation')
	{
		
		if (selection == '')
		{
			var initiales = prompt (LANGUE_ABREVIATION) ;
		}
		else
		{
			var initiales = selection ;
		}
			
		var nom_complet = prompt (LANGUE_NOM_COMPLET) ;
		
		if (initiales == null)
		{
			var initiales = '' ;
		}
	
		if (nom_complet == null)
		{
			var nom_complet = '' ;
		}
		
		var balises = '<abbr title="' + nom_complet + '">' + initiales + '</abbr>' ;
		
	}
	
	
	// Citation courte
	
	if (balise == 'citation_courte')
	{
		
		var auteur = prompt (LANGUE_AUTEUR) ;
			
		if (selection == '')
		{
			var citation = prompt (LANGUE_CITATION) ;
		}
		else
		{
			var citation = selection ;
		}
	
		if (citation == null || citation == '')
		{
			var citation = '' ;
		}
		
		var balises = "<q>" + citation + "</q>" ;
	
		if (auteur != null && auteur != '')
		{
			var balises = balises + " (<cite>" + auteur + "</cite>)" ;
		}
		
	}
	
	
	// Citation
	
	if (balise == 'citation_longue')
	{
		
		var auteur = prompt (LANGUE_AUTEUR) ;
			
		if (selection == '')
		{
			var citation = prompt (LANGUE_CITATION) ;
		}
		else
		{
			var citation = selection ;
		}
	
		if (citation == null || citation == '')
		{
			var citation = '' ;
		}
		
		var balises = "</p>\n\n<h4>" + LANGUE_CITATION ;
	
		if (auteur != null && auteur != '')
		{
			var balises = balises + " (<cite>" + auteur + "</cite>)" ;
		}
		
		var balises = balises + " :</h4>\n\n<blockquote>\n<p>" + citation + "</p>\n</blockquote>\n\n<p>" ;
		
	}
	
	
	// Miniature : On affiche une image, mais avec des dimensions prédéfinies
	
	if (balise == 'miniature')
	{
		
		var adresse = prompt (LANGUE_ADRESSE_IMAGE) ;
		
		if (selection == '')
		{
			var description = prompt (LANGUE_DESCRIPTION_IMAGE) ;
		}
		else
		{
			var description = selection ;
		}
			
		var largeur = prompt (LANGUE_LARGEUR_PIXELS) ;
		var hauteur = prompt (LANGUE_HAUTEUR_PIXELS) ;
		
		if (adresse == null)
		{
			var adresse = '' ;
		}
		
		if (description == null)
		{
			var description = '' ;
		}
		
		if (largeur < 1)
		{
			var largeur = 1 ;
		}
		
		if (hauteur < 1)
		{
			var hauteur = 1 ;
		}
		
		var balises = '<a href="' + adresse + '"><img src="' + adresse + '" alt="' + description + '" style="width: ' + largeur + 'px ; height: ' + hauteur + 'px ;" /></a>' ;
		
	}
	
	
	// Exposant
	
	if (balise == 'exposant')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_EXPOSANT) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<sup>' + texte + '</sup>' ;
		
	}
	
	
	// Indice
	
	if (balise == 'indice')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_INDICE) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<sub>' + texte + '</sub>' ;
		
	}
	
	
	// Erratum
	
	if (balise == 'erratum')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_ERRATUM) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<del>' + texte + '</del>' ;
		
	}
	
	
	// Ajout
	
	if (balise == 'ajout')
	{
		
		if (selection == '')
		{
			var texte = prompt (LANGUE_AJOUT , selection) ;
		}
		else
		{
			var texte = selection ;
		}
	
		if (texte == null)
		{
			var texte = '' ;
		}
		
		var balises = '<ins>' + texte + '</ins>' ;
		
	}
	
		
	var ancien_scroll = champs.scrollTop ;
		
	// On ajoute les balises là où se trouve le curseur.
	
	// Internet Explorer:
	
	if (document.selection)
	{
		
		champs.focus () ;
		selection = document.selection.createRange () ;
		selection.text = balises ;
		
	}
	
	// Mozilla et Netscape:
	
	else if (champs.selectionStart || champs.selectionStart == 0)
	{
		
		champs.value = champs.value.substring (0 , debut_selection)
						+ balises
						+ champs.value.substring (fin_selection , champs.value.length) ;
		
		champs.focus () ;
		champs.selectionEnd = champs.selectionStart = debut_selection + balises.length ;
		
		document.getElementById('apercu').selectionEnd = champs.selectionEnd ;
		
	}
	
	// En cas d'échec des deux, on ajoute simplement à la fin.
	
	else
	{
		champs.value = champs.value + balises ;
		champs.focus() ;
	}
	
	champs.scrollTop = ancien_scroll ;
	
}


// Fonction pour changer l'aperçu direct

function changer_apercu()
{
	
	if (document.getElementById('apercu') != null)
	{
		
		var champs = ' ' + document.getElementById('champ-texte').value ;
		
		// Découpage de la valeur du champ à chaque ouverture et fermeture des balises HTML. À la boucle, on regarde chaque partie découpée.
		
		exp = new RegExp("</?html>" , "g") ;
		var balises_html = champs.match(exp) ;
		var parties = champs.split(exp) ;
		
		var texte = '' ;
		var html = false ;
		var html_precedent = false ;
		
		if (parties != null)
		{
			
			for (var compte = 0 ; compte < parties.length ; compte++)
			{
				
				var partie = parties[compte] ;
					
				var fermeture_html = false ;
				
				if (html == true && balises_html != null && compte > 0)
				{
					
					for (var compte_balises = compte ; compte_balises < balises_html.length ; compte_balises++)
					{
						
						if (balises_html[compte_balises] == '</html>')
						{
							var fermeture_html = true ;
							break ;
						}
						
					}
					
				}
				else
				{
					var fermeture_html = 'inutile' ;
				}
				
				if (fermeture_html == false)
				{
					var partie = '&lt;html&gt;' + partie ;
					var html = false ;
				}
			
				if (html == false)
				{
					var partie = partie.replace(/</g , "&lt;") ;
					var partie = partie.replace(/>/g , "&gt;") ;
					var partie = partie.replace(/\n/g , "<br />") ;
				}
				else
				{
					var partie = partie.replace(/<\?/g , "&lt;?") ;
					var partie = partie.replace(/\?>/g , "?&gt;") ;
					exp = new RegExp("<object(.*)>(.*)</object>" , "g") ;
					var partie = partie.replace(exp , " <strong>Objet</strong> ") ;
				}
			
				if (html == false && balises_html != null && balises_html[compte] != null && balises_html[compte] == '</html>')
				{
					partie = partie + '&lt;/html&gt;' ;
				}
			
				if (balises_html != null && balises_html[compte] != null)
				{
					
					if (balises_html[compte] == '<html>')
					{
						html = true ;
					}
					else
					{
						html = false ;
					}
					
				}
				
				
				var texte = texte + partie ;
				
				var html_precedent = html ;
				
			}
			
		}
		
		document.getElementById('apercu').innerHTML = '<p>' + texte + '</p>' ;
		
	}
	
}


// Renouvellement de l'aperçu toutes les 500ms

setInterval('changer_apercu()' , 500) ;

