// ================================================
// rhum.js : fonctions Javascript pour R3.
//           (c) Denis Bourez + auteurs divers
// ================================================
var rhumJsVERSION = '01.04.2009/0840';
// ================================================

var clientPC = navigator.userAgent.toLowerCase();
var clientVer = parseInt(navigator.appVersion);

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_win	= ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac	= (clientPC.indexOf("mac")!=-1);

// gestion du masquage/affichage des éléments
// ==========================================

function changeVisibilite(cibleId) {
	if (document.getElementById) {
		var cible = document.getElementById(cibleId);
		if (cible.style.display == "none") {
			cible.style.display = "";
		} else {
			cible.style.display = "none";
		}
	}
} 

function VisOn(cibleId) {
	if (document.getElementById) {
		document.getElementById(cibleId).style.display = "";
	}
}

function VisOff(cibleId) {
	if (document.getElementById) {
		document.getElementById(cibleId).style.display = "none";
	}
}

// pour les champs de recherche
// ============================

function inputFocus (cibleId) {
	if (cibleId.value == "Recherche...") {
		cibleId.value = "";
	}
}

function inputBlur (cibleId) {
	if (cibleId.value == "") {
		cibleId.value = "Recherche...";
	}
}

// Fonctions diverses
// ===================
function contenu(cibleId, texte) { // place le texte dans le contenu de l'objet désigné
	if (document.getElementById) {
		document.getElementById(cibleId).innerHTML = texte;
	}
}

function retourneVersion(cibleId) {
	contenu(cibleId, rhumJsVERSION);
}

// pour les formulaires
// ====================

function formLongueurMinimum(input, longueur){
	if (input.value.length < longueur) {
		alert("Champ trop court. Veuillez corriger pour pouvoir valider.");
		input.select();
		return false;
	}
}

function formDateValide(input){
	// http://javascriptkit.com/script/script2/validatedate.shtml
	var retour = false;
	if (! input.value) { return true; }
	
	var dayfield=input.value.split(".")[0];
	var monthfield=input.value.split(".")[1];
	var yearfield=input.value.split(".")[2];
	var dayobj = new Date(yearfield, monthfield-1, dayfield);
	if ((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)) {
		alert("Date incorrecte. Veuillez corriger pour pouvoir valider.");
	} else {
		retour = true;
	}
	if (retour == false) {
		input.select();
	}
	return retour;
}


// boîtes de dialogue et fenêtres
// ==============================

function confirmation(message, url) {
	if (confirm(message)) {
		document.location = url;
	}
}

function alerte(message) {
	alert(message); 
}

function fenetre(mon_url, mon_titre, largeur, hauteur) {
	if (! largeur) { largeur = 640; }
	if (! hauteur) { hauteur = 500; }				
 	window.open(mon_url, mon_titre, 'height='+hauteur+', width='+largeur+', toolbar=no, menubar=no, location=no, resizable=yes, scrollbars=yes, status=no');
}

// ========================================================
// Boutons pour l'éditeur de contenus
// Origine : bbCode control - http://www.subBlue.com/
// ========================================================

var imageTag = false;
var bbcode = new Array();
var bbtags = new Array(
	'[b]','[/b]','[i]','[/i]','[u]','[/u]',
	'[quote]','[/quote]','[code]','[/code]',
	'[list]','[/list]','[list=]','[/list=]',
	'[img]','[/img]',
	'[url]','[/url]','[url=]','[/url]', 
	'[c]', '[/c]', 
	'[*]', '[*]',
	'[list=1]', '[/list=1]',
	'[color=#f00]', '[/color]',
	'\n== ', ' ==\n',
	'\n=== ', ' ===\n',
	'\n==== ', ' ====\n',
	'[rayé]', '[/rayé]',
	'[lettre]', '[/lettre]',
	'[[', ']]'
);

function getarraysize(thearray) {
	for (i = 0; i < thearray.length; i++) {
		if ((thearray[i] == "undefined") || (thearray[i] == "") || (thearray[i] == null))
			return i;
		}
	return thearray.length;
}

function arraypush(thearray,value) {
	thearray[ getarraysize(thearray) ] = value;
}

function arraypop(thearray) {
	thearraysize = getarraysize(thearray);
	retval = thearray[thearraysize - 1];
	delete thearray[thearraysize - 1];
	return retval;
}

function storeCaret(textEl) {
	if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
}

function rhumAutoQ(nform, ntxt) { // AutoQ de Rhum
	var txt = new String();
	if (window.getSelection) {
		var d = window.getSelection() + '';
		d = (d.length == 0) ? '' : d;
		txt = d.toString();
	} else if (document.getSelection) {
		txt = document.getSelection();
	} else if (document.selection) { // IE
		txt = document.selection.createRange().text;
	}

	if (txt.length > 0) {
		var zoneCible = document.getElementById(ntxt);
		txt = txt.replace(new RegExp('([\\f\\n\\r\\t\\v ])+', 'g')," ");
		zoneCible.value += '>' + txt + '\n\n';
		zoneCible.focus();
	} else {
		alert("Vous devez sélectionner du texte.");
	}
}

function bbpreview(rhum, nform, ntxt) { // preview du texte saisi dans un popup.
	var mon_url = rhum + "?action=prevtexte&amp;" + Form.serialize(nform) + "&amp;champ=" + ntxt + "&amp;popup=on";
	window.open(mon_url, 'Prévisualisation', 'height=500, width=640, toolbar=no, menubar=no, location=no, resizable=yes, scrollbars=yes, status=no');
}
	
function bbstyle(nform, ntxt, bbnumber) {

	var textarea = document.getElementById(ntxt);
	var donotinsert = false;
	var theSelection = false;
	var bblast = 0;

	if (bbnumber == -1) { // fermeture des tags ouverts
		while (bbcode[0]) {
			butnumber = arraypop(bbcode) - 1;
			textarea.value += bbtags[butnumber + 1];
		}
		imageTag = false; // All tags are closed including image tags :D
		textarea.focus();
		return;
	}

	if ((clientVer >= 4) && is_ie && is_win) {
		theSelection = document.selection.createRange().text;
		if (theSelection) {
			document.selection.createRange().text = bbtags[bbnumber] + theSelection + bbtags[bbnumber+1];
			textarea.focus();
			theSelection = '';
			return;
		}
	} else if (textarea.selectionStart || textarea.selectionStart == '0') {
		if (textarea.selectionEnd > textarea.selectionStart) {
	 		var startPos = textarea.selectionStart;
			var endPos = textarea.selectionEnd;
			var scrollTop = textarea.scrollTop;
			var myText = textarea.value.substring(startPos, endPos);

			if(myText.charAt(myText.length - 1) == " "){
				subst = bbtags[bbnumber] + myText.substring(0, (myText.length - 1)) + bbtags[bbnumber+1] + " ";
			} else {
				subst = bbtags[bbnumber] + myText + bbtags[bbnumber+1];
			}
			
			textarea.value = textarea.value.substring(0, startPos) + subst + textarea.value.substring(endPos, textarea.value.length);
			textarea.focus();

			var cPos = startPos + (bbtags[bbnumber].length + myText.length + bbtags[bbnumber+1].length);
			textarea.selectionStart = cPos;
			textarea.selectionEnd = cPos;
			return;
		}
	}
	
	// pas une sélection
	
	for (var i = 0; i < bbcode.length; i++) {
		if (bbcode[i] == bbnumber+1) {
			bblast = i;
			donotinsert = true;
		}
	}

	if (donotinsert) { // fermeture
		var scrollPos = textarea.scrollTop;
		while (bbcode[bblast]) {
			butnumber = arraypop(bbcode) - 1;

			if (is_ie) {
				textarea.value += bbtags[butnumber + 1];
			} else {
				var startPos = textarea.selectionStart;
				var subst = bbtags[bbnumber + 1];
				var cPos = startPos + subst.length;
				textarea.value = textarea.value.substring(0, startPos) + subst + textarea.value.substring(startPos, textarea.value.length);
				textarea.selectionStart = cPos;
				textarea.selectionEnd = cPos;
			}
			imageTag = false;
		}
		textarea.scrollTop = scrollPos;
		textarea.focus();
		return;
	} else { // insertion d'une ouverture de tag	
		var scrollPos = textarea.scrollTop;
		if (is_ie) {
			textarea.value += bbtags[bbnumber];
		} else {
			var startPos = textarea.selectionStart;
			var subst = bbtags[bbnumber];
			var cPos = startPos + subst.length;
			textarea.value = textarea.value.substring(0, startPos) + subst + textarea.value.substring(startPos, textarea.value.length);
			textarea.selectionStart = cPos;
			textarea.selectionEnd = cPos;
		}
		
		if ((bbnumber == 14) && (imageTag == false)) { imageTag = 1; }
		arraypush(bbcode, bbnumber+1);
		textarea.scrollTop = scrollPos;
		textarea.focus();
		return;
	}
	
	storeCaret(textarea);
}

