 //-------------------------------------------------------------
 // Nom Document : GFCURSOR.JS
 // Auteur : G.Ferraz
 // Objet : Gestion du curseur dans TEXTAERA et INPUT...
 // Création : 18.09.2006
 //-------------------------------------------------------------
 // Mise à Jour : 20.11.2006
 // Objet : Vilain BUG avec le retour chariot sous IE (*)
 //-------------------------------------------------------------
 //-(*)------------------
 function Get_NbrCR(txt_){
	 var NbrCR = 0;
	 var Pos = txt_.indexOf("\r\n");
	 while( Pos > -1){
		 Pos = txt_.indexOf("\r\n", Pos+2);
		 NbrCR ++;
	 }
	 return( NbrCR);
 }
 //----------------------------------
 function Cursor_SetPos( where_, pos_){
	 //-- Recup l'Objet
	 var Obj = document.getElementById( where_);
	 if( Obj){
		 Obj.focus();
		 if( typeof Obj.selectionStart != "undefined"){
			Obj.setSelectionRange( pos_, pos_);
		 }
		 else{ // IE and consort
			 var Chaine = Obj.createTextRange();
			 Chaine.moveStart('character', pos_);
			 //-- Deplace le curseur
			 Chaine.collapse();
			 Chaine.select();
		 }
		 //-- Retour valeur Reelle placee
		 return( Cursor_GetPos( where_, pos_));
	 }
 }
 //----------------------------------
 function Cursor_GetPos( where_, pos_){
	 //-- Recup l'Objet
	 var Obj= document.getElementById(where_);
	 if( Obj){
		 //-- Focus sur Objet
		 Obj.focus();
		 if(typeof Obj.selectionStart != "undefined")
			return Obj.selectionStart;
		 else{ // IE and consort
			 var szMark = "~~";
			 var Chaine = Obj.value;
			 //-- Cree un double et insert la Mark ou est le curseur
			 var szTmp = document.selection.createRange();
			 szTmp.text = szMark;
			 //-- Recup. la position du curseur
			 var PosDeb = Obj.value.search(szMark);
			 //-(*)- Supprime les retours Chariot
			 var szAvant = Chaine.substring( 0 , PosDeb);
			 PosDeb -= Get_NbrCR( szAvant);
			 //-- Restaure valeur initiale
			 Obj.value = Chaine;
			 Chaine = Obj.createTextRange();
			 //-- Deplace le Debut de la chaine
			 Chaine.moveStart('character', PosDeb);
			 //-- Deplace le curseur
			 Chaine.collapse();
			 Chaine.select();
			 return( PosDeb);
		 }
	 }
 }
 //------------------------------------
 function Cursor_AddTexte(where_, txt_){
	 //-- Recup l'Objet
	 var Obj = document.getElementById( where_);
	 if( Obj){
		 //-- Focus sur Objet
		 Obj.focus();
		 if( typeof Obj.selectionStart != "undefined"){
			 //-- Position du curseur
			 var PosDeb = Obj.selectionStart;
			 var PosFin = Obj.selectionEnd;
			 //-- Recup. des Chaines
			 var Chaine = Obj.value;
			 var szAvant = Chaine.substring( 0 , PosDeb);
			 var szApres = Chaine.substring( PosFin, Obj.textLength );
			 //-- Recup. texte selectionne
			 var szSelect = Chaine.substring( PosDeb, PosFin);
			 //-- Insertion du texte
			 Obj.value = szAvant + txt_ + szApres;
			 //-- Replace le curseur
			 Obj.setSelectionRange( szAvant.length + txt_.length, szAvant.length + txt_.length );
			 //-- Replace le Focus
			 Obj.focus();
		 }
		 else{ // IE and consort
			 //-- Recup. de la selection
			 var szSelect = document.selection.createRange().text;
			 //-- Si du Texte est selectionne on le remplace
			 if( szSelect.length > 0){
				 var Chaine = document.selection.createRange();
				 Chaine.text = txt_ ;
				 Chaine.collapse();
				 Chaine.select();
			 }
			 else{
				 var Chaine = Obj.value;
				 var szMark ="~~";
				 //-- Cree un double et insert la Mark ou est le curseur
				 var szTmp = document.selection.createRange().duplicate();
				 szTmp.text = szMark;
				 //-- Recup. la position du curseur
				 var PosDeb = Obj.value.search(szMark);
				 //-- Recup. des Chaines
				 var szAvant = Chaine.substring( 0 , PosDeb);
				 var szApres = Chaine.substring( PosDeb, Obj.textLength );
				 //-- Insertion du texte
				 Obj.value = szAvant + txt_ + szSelect + szApres;
				 //-- Repositionne le curseur
				 PosDeb += txt_.length;
				 //-(*)- Supprime les retours Chariot
				 PosDeb -= Get_NbrCR( szAvant);
				 //-- Recup de la Chaine
				 Chaine = Obj.createTextRange();
				 //-- Deplace le Debut de la chaine
				 Chaine.moveStart('character', PosDeb);
				 //-- Deplace le curseur
				 Chaine.collapse();
				 Chaine.select();
			 }
		 }
	 }
 }
function Insert_Tag( where_, tagdeb_, tagfin_){
	var Obj = document.getElementById( where_);
	if( Obj){
		Obj.focus();
		if(typeof Obj.selectionStart != 'undefined'){
			 //-- Position du curseur
			var PosDeb = Obj.selectionStart;
			var PosFin = Obj.selectionEnd;
			//-- Recup. des Chaines
			var Chaine = Obj.value;
			var szAvant = Chaine.substring( 0 , PosDeb);
			var szApres = Chaine.substring( PosFin, Obj.textLength );
			//-- Recup. texte selectionne
			var szSelect = Chaine.substring( PosDeb, PosFin);
			//-- Insertion des tags
			Obj.value = szAvant + tagdeb_ + szSelect + tagfin_ + szApres;
			//-- Replace le curseur
			PosDeb = szAvant.length + tagdeb_.length +szSelect.length;
			PosFin = PosDeb;
			Obj.setSelectionRange( PosDeb, PosFin);
			//-- Replace le Focus
			Obj.focus();
		}
		else{ // IE and consort
			var Decal;
			//-- Recup. de la selection
			var Chaine = document.selection.createRange();
			var szSelect = Chaine.text;
			Chaine.text = tagdeb_ + szSelect + tagfin_;
			Chaine = document.selection.createRange();
			//-- Replace le curseur avant balise fin
			if( szSelect.length > 0){
				//-- Le curseur est en debut de chaine
				Decal = tagdeb_.length + szSelect.length;
				//-(*)- Supprime les retours Chariot
				Decal -= Get_NbrCR( szSelect);
			}
			else{
				//-- Le curseur est en fin de chaine
				Decal = -tagfin_.length;
			}
			//-- Deplace le curseur
			Chaine.move('character', Decal);
			Chaine.collapse();
		Chaine.select();
		}
	}
}

function insertBaliseDouble(szTag, textId, interne){
	if(interne == 1){
		infoIntern = prompt("Entrez le liens");
		tag_deb = "["+ szTag +"=" + infoIntern + "]";
	}else{
		tag_deb = "["+ szTag +"]";
	}
	Insert_Tag(textId, tag_deb, "[/"+ szTag +"]");
}

function insertBaliseSimple(szTag, textId){
	infoIntern = prompt("Entrez le liens");
	Insert_Tag(textId, "["+ szTag +"=" + infoIntern, "]");
}

function insertImageLocal(szTag, infoIntern, textId){
	Insert_Tag(textId, "["+ szTag +"=" + infoIntern, "]");
}
 //-- EOF ------------------------------------------------------ 
