// Barre de raccourcis
// derive du:
// bbCode control by subBlue design : www.subBlue.com

// Startup variables
var theSelection = false;

// Check for Browser & Platform for PC & IE specific bits
// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version
var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
 && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
 && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_moz = 0;
var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);


function barre_raccourci(debut,fin) {
	var txtarea = document.getElementById('textarea_1');
	txtarea.focus();
	donotinsert = false;
	theSelection = false;
	bblast = 0;

	if ((clientVer >= 4) && is_ie && is_win){
		theSelection = document.selection.createRange().text; // Get text selection
		if (theSelection) {
		while (theSelection.substring(theSelection.length-1, theSelection.length) == ' '){
				theSelection = theSelection.substring(0, theSelection.length-1);
				fin = fin + " ";
			}
			// Add tags around selection
			document.selection.createRange().text = debut + theSelection + fin;
			txtarea.focus();
			theSelection = '';
			return;
		}
	}
	else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0)){
		mozWrap(txtarea, debut, fin);
		return;
	}
}

function barre_demande(debut,milieu,fin,affich) {
	var txt = document.getElementById('textarea_1');
	var inserer = prompt(affich);
	if (inserer != null) {
		if (inserer == "") {inserer = "xxx"; }
		barre_raccourci(debut+inserer+milieu, fin, txt);
	}
}

function barre_inserer(text) {
	var txtarea = document.getElementById('textarea_1');
	if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
		txtarea.focus();
	} else {
		//txtarea.value  += text;
		//txtarea.focus();
		mozWrap(txtarea, '', text);
		return;
	}
}

function barre_inserer_photo(text) {
	var txtarea = document.getElementById('textarea_1');
	var tval1 = "Source des images : \n - liste d\'images séparées par une virgule \n - liste d\'images référencées par les uloads sur cet article : laisser le champ vide \n - répertoire utilisateur : taper le chemin";
	var tval2 = "Type de galerie : \n - sur place avec miniature : laisser le champ vide \n - en flash avec miniatures : taper 1 \n - sur Ajax avec fading : taper 2";
	if (txtarea.createTextRange && txtarea.caretPos) {
		var caretPos = txtarea.caretPos;
			var txt1 = prompt(tval1, text);
			var txt2 = prompt(tval2, "");
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + "["+txt1+":photo"+txt2+"]" + ' ' : caretPos.text + "["+txt1+":photo"+txt2+"]";
			if(txt1!=null && txt2!=null){
		txtarea.focus();
			}
	} else {
		//txtarea.value  += text;
		//txtarea.focus();
			var txt1 = prompt(tval1, text);
			var txt2 = prompt(tval2, "");
		if(txt1!=null && txt2!=null){
		mozWrap(txtarea, '', "["+txt1+":photo"+txt2+"]");
		return;
		}
	}
}


// D'apres Nicolas Hoizey 
function barre_tableau(champ){
	var txtarea = document.getElementById(champ);
	txtarea.focus();
	var cols = prompt("Nombre de colonnes du tableau :", "");
	var rows = prompt("Nombre de lignes du tableau :", "");
	if (cols != null && rows != null) {
		var tbl = '';
		var entete = '';
		for (i = 0; i < rows; i++) {
		var ligne = '';
		for(o = 0; o < cols; o++) {
			var val = prompt("valeur" + i + "_" + o + ":", "");
			ligne = ligne + val + '|';
		}
			tbl = tbl + ligne + '¬' + '\n';
		}
		/*
		if (confirm('Ajouter une ligne d\'en-tête ?')) {
		for(o = 0; o < cols; o++) {
			var val = prompt("colonne" + o + ":", "");
			entete = entete + '|';
		}
			tbl = entete + '¬' + '\n' + tbl;
		}*/
		//var tbl = (tbl.value).substring(0,-2);
		if ((clientVer >= 4) && is_ie && is_win) {
			var str = document.selection.createRange().text;
			var sel = document.selection.createRange();
			sel.text = str + '[' + tbl + ']\n';
		} else {
			mozWrap(txtarea, '', '[' + tbl + ']' + "\n");
		}
	}
	return;
}

function putincontext(content,txt){
	//alert(txt);
	//var txtarea = document.getElementById('textarea_1');
	var txtarea = content;
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	var selTop = txtarea.scrollTop;
	if (selEnd==1 || selEnd==2) selEnd=selLength;
	if (selEnd - selStart > 0 && (txtarea.value).substring(selEnd-1,selEnd) == ' ') selEnd = selEnd-1;
	var s1 = (txtarea.value).substring(0,selStart);
	//var s2 = (txtarea.value).substring(selStart, selEnd);
	var s3 = (txtarea.value).substring(selEnd, selLength);	
	var render = s1 + txt + s3;
	txtarea.innerHTML = render ; 
	//var selEnd = txt.textLength;
	//alert(selEnd);
	window.setSelectionRange(txtarea, selStart, selEnd);
	txtarea.scrollTop = selTop;	
	txtarea.focus();
	return;

}

function transtext_wrap(val){/**/	
	var txtarea = document.getElementById('textarea_1');
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd==1 || selEnd==2) selEnd=selLength;
	if (selEnd - selStart > 0 && (txtarea.value).substring(selEnd-1,selEnd) == ' ') 
	selEnd = selEnd-1;
	//var s1 = (txtarea.value).substring(0,selStart);
	var s2 = (txtarea.value).substring(selStart, selEnd);
	//var s3 = (txtarea.value).substring(selEnd, selLength);
	if (selEnd - selStart == 0){
		var txt = escape(txtarea.value) ;
		var URL = 'progb/ajax.php?dir='+val+"_"+txt;
		var ajax = new AJAX(URL, "textarea_1");
		txtarea.focus();
	}
	else{
		var URL = 'progb/ajax.php?dir='+val+"_"+escape(s2);
		var ajax = new AJAXb(URL, "textarea_1");
	}
}
	
function transtext(val){
	var txt = escape(document.getElementById('textarea_1').value);
	var URL = 'progb/ajax.php?dir='+val+"_"+txt;
	var ajax = new AJAX(URL, "textarea_1");
}

// Shows the help messages in the helpline window
function helpline(help, champ) {
	champ.value = help;
}


function setCaretToEnd (input) {
  setSelectionRange(input, input.value.length, input.value.length);
}


function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

// From http://www.massless.org/mozedit/
function mozWrap(txtarea, open, close){
	var selLength = txtarea.textLength;
	var selStart = txtarea.selectionStart;
	var selEnd = txtarea.selectionEnd;
	if (selEnd == 1 || selEnd == 2)
		selEnd = selLength;
	var selTop = txtarea.scrollTop;
	// Raccourcir la selection par double-clic si dernier caractere est espace	
	if (selEnd - selStart > 0 && (txtarea.value).substring(selEnd-1,selEnd) == ' '){
		selEnd = selEnd-1;}
	var s1 = (txtarea.value).substring(0,selStart);
	var s2 = (txtarea.value).substring(selStart, selEnd)
	var s3 = (txtarea.value).substring(selEnd, selLength);
	txtarea.value = s1 + open + s2 + close + s3;
	selDeb = selStart;
	selFin = selEnd + close.length + open.length;
	window.setSelectionRange(txtarea, selDeb, selFin);
	txtarea.scrollTop = selTop;
	txtarea.focus();
	return;
}

// Insert at Claret position. Code from
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
     function storeCaret (textEl) {
       if (textEl.createTextRange) 
         textEl.caretPos = document.selection.createRange().duplicate();
     }


////////


function AJAXb(a_sURL, a_sDiv){
	if (a_sURL != undefined){this.m_sURL = a_sURL;}
	if (a_sDiv != undefined){this.m_sDiv = a_sDiv;}
	if (this.m_Request != undefined){this.m_Request.abort(); delete this.m_Request;}
  	this.m_Request = this.createReqestObject();
  	var m_This = this;
  	this.m_Request.onreadystatechange = function() {m_This.handleResponse()};
  	this.m_Request.open("GET", this.m_sURL, true);
  	this.m_Request.send(null);
}
  
AJAXb.prototype.m_sURL = undefined;
AJAXb.prototype.m_sDiv = undefined;
AJAXb.prototype.m_Request = undefined;
  
AJAXb.prototype.createReqestObject = function(){
  	var req;
  	try {
      // Mozilla, Firefox, Opera et le reste du monde.
      req = new XMLHttpRequest();}
    catch (error) {
      try   {
        // IE
        req = new ActiveXObject("Microsoft.XMLHTTP");}
      catch (error) {
        try {
          // IE
          req = new ActiveXObject("Msxml2.XMLHTTP");}
        catch (error) {
          req = false;}}}
  	return req;
}

  AJAXb.prototype.handleResponse = function(){
  	if (this.m_Request.readyState == 4){
  		// On regarde pour 0 à cause d'un bug dans Firefox.
  		if (this.m_Request.status == "200" || this.m_Request.status == "0"){
  			var content = getById(this.m_sDiv);
		var render = this.m_Request.responseText;
		//content.innerHTML = render ;
		putincontext(content,render);
  			if (this.onDraw != undefined){
  				this.onDraw();}}
  		else{	
  			if (this.onError != undefined){
  				this.onError({status:this.m_Request.status, statusText:this.m_Request.statusText});}}
  
  		delete this.m_Request;}
  	else{
		var content = getById(this.m_sDiv) ; 
		//content.innerHTML = 'Loading...';
		}}
  
