/**
 * Cette fonction permet de completer une chaine de caractere sur la gauche
 * 
 * @param chaine string : la chaine a completer
 * @param caractere char : le caractere de completion
 * @param longueur int : la longueur de la chaine desiree
 */
function completerGauche(chaine, caractere, longueur) {
 var chaineRetour = chaine+'' ;
 while (chaineRetour.length < longueur)
	 { chaineRetour = caractere+chaineRetour; }
 return chaineRetour;
}

/**
 * Cette fonction permet de calculer l'age d'une personne
 * @param jour int : jour de naissance
 * @param mois int : mois de naissance
 * @param annee int : annee de naissance
 * @return int : age de la personne
 */
function getAge(jour,mois,annee) {
	var d = new Date();
	var age = d.getFullYear()-annee-1;
	if(d.getMonth()+1 > mois || d.getMonth()+1 == mois && d.getDate() >= jour) { age++; }
	return age;
}

/**
 * Cette fonction permet d'inserer du bbcode
 * 
 * @param bbdebut string : chaine a inserer avant la selection
 * @param bbfin string : chaine a inserer apres la selection
 * @param idInput string : id de l'input
 */
function insertBBCode(bbdebut, bbfin, idInput) {
	
	// Recuperer l'input et faire un focus dessus
	var input = document.getElementById(idInput);
	input.focus();
	
	if (typeof document.selection != 'undefined') { // Internet explorer
		var range = document.selection.createRange();
		var insText = range.text;
		range.text = bbdebut + insText + bbfin;
		range = document.selection.createRange();
		if (insText.length == 0) {
			range.move('character', -bbfin.length);
		} else {
			range.moveStart('character', bbdebut.length+insText.length+bbfin.length);
		}
		range.select();
	} else if (typeof input.selectionStart != 'undefined') { // Les autres ...
		var start = input.selectionStart;
		var end = input.selectionEnd;
		var insText = input.value.substring(start, end);
		input.value = input.value.substr(0, start) + bbdebut + insText + bbfin
				+ input.value.substr(end);
		var pos;
		if (insText.length == 0) {
			pos = start + bbdebut.length;
		} else {
			pos = start + bbdebut.length + insText.length + bbfin.length;
		}
		input.selectionStart = pos;
		input.selectionEnd = pos;
	}
}

/**
 * Cette fonction permet de faire defiler des elements
 * 
 * @param prefix string : prefixe 
 * @param num int : numero de l'element affiche actuellement
 * @param dep int : de combien de numero il faut avancer ou reculer
 * @param effect boolean : effet active?
 * 
 * Exemple :
 * 
 * <div id="liste_dossiers_0">
 *  div 0
 *  <a href="#" onclick="defiler('liste_dossiers_',0,1);return false;">Suivant</a>
 * </div>
 * <div id="liste_dossiers_1" style="display:none;">
 *  div 1 
 *  <a href="#" onclick="defiler('liste_dossiers_',1,-1);return false;">Precedant</a>
 *  <a href="#" onclick="defiler('liste_dossiers_',1,1);return false;">Suivant</a>
 * </div>
 * <div id="liste_dossiers_2" style="display:none;">
 *  div 2 
 *  <a href="#" onclick="defiler('liste_dossiers_',2,-1);return false;">Precedant</a>
 * </div>
 *
 */
function defiler(prefix,num,dep,effect) {
	// Recuperer l'element source et l'element destination
	elementSource = document.getElementById(prefix+num);
	elementDestination = document.getElementById(prefix+(num+dep));
	
	if(elementSource != null && elementDestination != null) { // Si les deux elements existent bien		
		// Cacher l'element source
		if(!effect) { elementSource.style.display = 'none'; }
		else { $(elementSource).slideUp('slow'); }
		
		// Afficher l'element destination
		if(!effect) { elementDestination.style.display = 'block'; }
		else { $(elementDestination).slideDown('slow'); }
	}
}

/**
 * Fonction qui limite le nombre de caracteres d'une chaine
 *
 * @param chaine string : chaine a traiter
 * @param longueur int : longueur maximale
 * @param strict booleen : defini si les espaces ne doivent pas etre pris en compte
 * 
 * @return string : chaine limitee
 */
function limite(chaine,longeur,strict) {
	if(chaine.length > longeur) { // Si la chaine doit etre raccourcie
		// On raccourcie la chaine
		chaine = chaine.substr(0,longeur-4);
		
		// On retire le dernier mot coupe
		var posDerEsp = chaine.lastIndexOf(' ');
		if(!strict && posDerEsp > 0) {
			chaine = chaine.substr(0, posDerEsp);
		}
		
		chaine = chaine+'...';
	}
	
	// Retourner la chaine
	return chaine;
}

/**
 * Cette fonction permet de recuperer le nom d'un fichier sans l'extension
 * 
 * @param nomFichier string : nom du fichier
 * 
 * @return string : le nom du fichier sans l'extension 
 */
function nomSansExtension(nomFichier) {
	var posDerPoint = nomFichier.lastIndexOf('.');
	if(posDerPoint > 0) {
		return nomFichier.substr(0,posDerPoint);
	}
	else {
		return nomFichier;
	}
}

/**
 * Cette fonction test si un email est valide
 */
function emailValide(email) {
	return email.match(/^([a-z0-9\._\-]{2,63})@([a-z0-9\._\-]{2,63})\.([a-z]{2,4})$/i);
}
