/*
 JavaScript Document
 gestionnaire de conversion des balises html dans un textarea
 ne modifier que "var tabClasse" en fonction des boutons souhaités


	
	Mise en forme du texte dans un texte area
		

*/

/* contient pour chaque balise dite "Area" (qui est dans le texte area) l'équivalent en CSS (pas oublier le PHP si utilisé dans le php) 
	syntaxe : var tabClasse = [["balise de remplacement" , "libellé css"] , ...]; 
*/
var tabClasse = [["[g]" , "gras"] , ["[i]" , "italique"] ,["[s]" , "souligne"] /*, ["[lien]" , "lien"]*/ ];

// affiche dans <element> son texte selectionné entouré des balises <baliseArea> et et son équivalent en html grace à <classeHTML>
//============== Fonction à l'étude pour gérer sous IE et sous Firefox
function format(id_source, baliseArea , classeHTML ,id_source, id_cible , id_preview) {
	var elt = $(id_source);
	var origine = document.forms['form_info'].id_source;
	var baliseDebut = "["+ baliseArea + "]";
	var baliseFin = "[/" + baliseArea + "]";
	//pour IE
	if(typeof document.selection != 'undefined'){
 		//var str = document.selection.createRange().text;
  		var sel = document.selection.createRange();
  		var insText = sel.text;
  		sel.text = baliseDebut + insText + baliseFin;
  		if (insText.length == 0) {
      		sel.move('character', -baliseFin.length);
    	} else {
      		sel.moveStart('character', baliseDebut.length + insText.length + baliseFin.length);
    	}
    sel.select();
	}
	else {
		var sel = elt.value.substring(elt.selectionStart, elt.selectionEnd);
		var Debut = elt.value.substring( 0, elt.selectionStart );
		var Fin = elt.value.substring (elt.selectionEnd, elt.selectionEnd +1000);
		var milieu = "["+ baliseArea + "]" +  sel + "[/" + baliseArea + "]" ;
		if (milieu){
			elt.value = Debut + milieu + Fin;	
		}
		else{
			elt.value = Debut + "["+ baliseArea + "][/" + baliseArea + "]" + Fin; //nouvelle chaîne vide
		}
	} 

	identique(id_source , id_cible , id_preview)
}

// trouve l'equivalent du texte (du format Area en HTML)
function trouverEquivalent(texte){	
	var baliseTrouver= false; // indique si on a trouvé une balise
	var estDansBalise = false // indique si on est entre une balise ferment et ouvrant
	var baliseArea = "" // balise présente dans le textarea
	var baliseFermente = false // indique si c'est une balise fermente
	var new_text = texte 
	for ( var i = 0 ; i< texte.length ; i++ ){
		if (texte.charAt(i) == "[" && texte.charAt(i+1) != "/"  ){ // balise ouvrante
		
			baliseTrouver= true
			baliseFermente = false
		
		}
		if (texte.charAt(i) == "[" && texte.charAt(i+1) == "/"  ){ // balise fermente
			estDansBalise=  false
			baliseTrouver= true
			baliseFermente = true
		//	new_text = remplacer ( baliseArea , trouverHTML(baliseArea) , new_text)
		
		}
		if (estDansBalise){ // entre une ouvrante et une fermente
		
			milieuBalise+=texte.charAt(i)
			
		}
		if (baliseTrouver){ // milieu d'une balise 
			baliseArea+=texte.charAt(i);
		}
		if (baliseTrouver && texte.charAt(i) == "]"){ // fin de la balise
			if (baliseFermente){ // si elle est fermente
				if (baliseArea!='[/lien]') // si ce n'est pas un lien
			 	 new_text = new_text.replace( baliseArea  , "</span>")
				else{ // si c'est un lien
				 new_text = new_text = new_text.replace( '[lien]'  , '<a href="'+ milieuBalise + '" target="_blank" title="">')
				 new_text = new_text.replace( '[/lien]'  , "</a>")
				}
			}else{ // si c'est une balise ouvrante
				if (baliseArea !='[lien]') // et que ce n'est pas un lines
				new_text = new_text = new_text.replace( baliseArea , '<span class="'+ trouverHTML(baliseArea) +'">')
			}
			// on réinitialise les valeurs
			baliseArea = ""
			milieuBalise = ""
			baliseTrouver= false
			estDansBalise = true
			baliseFermente = false
			
		}
	}
	// creation des sauts de ligne
	var tempChaine = "";
		sautDeLigne = false
		for ( var i = 0 ; i< new_text.length ; i++ ){
			if (new_text.charCodeAt(i) == 10 ){
				tempChaine+='<br />';
			}else{
				tempChaine+=new_text.charAt(i);
			}
	}
	 return tempChaine // on renvoi le texte au format HTML

}

// renvoi le correspondant de la <baliseArea> en HTML
function trouverHTML(baliseArea){ 
	
	for ( var i = 0 ; i< tabClasse.length ; i++ )
		if ( tabClasse[i][0] == baliseArea)
			return tabClasse[i][1]
}


// renvoie la balise area de la balise HTML
function trouverArea(baliseHTML){ 
	
	for ( var i = 0 ; i< tabClasse.length ; i++ )
		if ( tabClasse[i][1] == baliseHTML)
			return tabClasse[i][0]
}

// permet de rendre deux elements identiques 
// utile pour une prévisualisation
// rend deux input identiques
function identique(id_source , id_cible , id_preview){
	if (document.getElementById(id_cible) && document.getElementById(id_source))
		document.getElementById(id_cible).value = trouverEquivalent(document.getElementById(id_source).value)
	if (document.getElementById(id_preview) && document.getElementById(id_source))
	  	document.getElementById(id_preview).innerHTML = trouverEquivalent(document.getElementById(id_source).value)
}

function htmlTOArea(texte){
	var baliseOuvrante = false
	var chaineARemplacer =""
	var classHTML =""
	var chaineClass =false
	var baliseFermente = false
	var chaineArea = texte
	var baliseArea = "";
	var baliseHTML = true
	while (baliseHTML){
		baliseHTML = false
		boucle_for:for ( var i = 0 ; i<texte.length ; i++){
			if (chaineArea.charAt(i) == '<' && chaineArea.charAt(i +1 )!='/'){
				baliseOuvrante = true
				chaineARemplacer = "";
				classHTML ="";
				baliseHTML = true

				
			}
			if (chaineArea.charAt(i) == '<' && chaineArea.charAt(i +1 )=='/'){
				baliseFermente = true
			}
			if (baliseFermente){
				if (chaineArea.charAt(i) == '>'){
					balsieFermente = false
					chaineClass =false
					baliseFermente = false
					baliseArea = trouverArea(classHTML)
					toBaliseFermente (baliseArea)
					chaineArea = chaineArea.replace(chaineARemplacer , trouverArea(classHTML))
					chaineArea = chaineArea.replace('</span>' , toBaliseFermente (baliseArea))
					i = chaineArea.length
					
				}
			}
			if (baliseOuvrante){
				if (chaineArea.charAt(i) == '>'){
					baliseOuvrante = false
					chaineARemplacer+=chaineArea.charAt(i)
				}else{
					chaineARemplacer+=chaineArea.charAt(i)
					if (chaineArea.charAt(i-1) == '"' &&  !chaineClass){
						chaineClass= true
					}
					if (chaineClass){
						if (chaineArea.charAt(i) == '"'){
							chaineClass = false
						
						}else{
						classHTML+=chaineArea.charAt(i)
						}
					}
				}
			
			}
		
		 }
	}
	return chaineArea;
}

// renvoie la balise fermente de baliseArea
function toBaliseFermente(baliseArea){
	var tempChaine = ""
	for (var i = 0 ; i<baliseArea.length ; i++){
		if (baliseArea.charAt(i) == "["){
		tempChaine +=baliseArea.charAt(i) + '/'; 
		}else{
			tempChaine +=baliseArea.charAt(i); 
		}
	}
	return tempChaine
}

// change la valeur des textArea 
function changerValeur(){
	elements = document.getElementsByTagName('textarea')
	for ( var i = 0 ; i<elements.length ; i++){
		elements.item(i).value = htmlTOArea(elements.item(i).value)
	}
}

