/**
 * remplace le texte "r" par le texte "w" dans la chaine de caractères "s"
 */
function strReplace(s, r, w) {
	return s.split(r).join(w);
}

/**
 * fonction appellée quand on choisis un type de lieu (liste de radio buttons dans un pop-up)
 * va changer la valeur de certains éléments dans le formulaire de la page parent
 * @param typeBox		checkbox ou radio
 */
function submitChoixLieu(typeBox) {
	var myArray = new Array(); // Array(type_lieu, id_lieu, description)
	if (typeBox == 'checkbox') {
		var liste = window.opener.document.listForm.myList.value;
		if (liste != "") {
			myArray = eval(liste);
		}
	}
	type_lieu = document.selectForm.type_lieu.value;
	if (!document.selectForm.id_lieu.value) {
		for (i=0; i<document.selectForm.id_lieu.length; i++) {
			if (document.selectForm.id_lieu[i].checked) {
				myArray[myArray.length] = new Array(type_lieu, document.selectForm.id_lieu[i].value, document.selectForm.description[i].value);
				if (typeBox == 'radio') {
					break;
				}
			}
		}
	} else {
		if (document.selectForm.id_lieu.checked) {
			myArray[myArray.length] = new Array(type_lieu, document.selectForm.id_lieu.value, document.selectForm.description.value);
		}
	}
	
	window.opener.document.getElementById("myList").value = buildListLieux(myArray);
	window.opener.document.getElementById("description_lieu").innerHTML = renderListLieux(myArray, typeBox=='checkbox');
	window.close();
}

/**
 * retourne l'affichage html de la description d'une liste de lieux
 * @param myArray			liste de tableaux décrivant les lieux : Array(type_lieu, id_lieu, description)
 * @param checkbox			afficher une checkbox pour sélectionner le lieu ?
 */
function renderListLieux(myArray, checkbox) {
	var myDescription = '';
	for (i=0; i<myArray.length; i++) {
		myDescription += (i==0 ? '' : '<br>')
		+ (checkbox === true ? '<input type="checkbox" class="radio" name="'+myArray[i][0]+'_'+myArray[i][1]+'" value="1" checked> ' : '')
		+ '<img src="/images/promos/type_'+myArray[i][0]+'.gif" border="0" alt="'+myArray[i][0]+'" title="'+myArray[i][0]+'">'
		+ '&nbsp;'+myArray[i][2];
	}
	return myDescription;
}

/**
 * construit une variable texte contenant le texte javascript de définition d'un tableau liste de lieux (qui sera évalué)
 * @param myArray			liste de tableaux décrivant les lieux : Array(type_lieu, id_lieu, description)
 */
function buildListLieux(myArray) {
	var myList = '';
	for (i=0; i<myArray.length; i++) {
		myList += (i==0 ? "Array(" : ",") + "Array('"+myArray[i][0]+"', '"+myArray[i][1]+"', '"+strReplace(myArray[i][2], "'", "\\'")+"')" + (i==myArray.length-1 ? ")" : "");
	}
	return myList;
}

/**
 * fonction appelée quand on choisit un ou plusieurs projets / campagnes / clients pour les lister
 * va envoyer la page parent sur une page qui liste les utilisateurs de ce(s) projet(s) / campagne(s)
 * @param page_parent			nom de la page parent. != null => redirige la page parent vers cette page
 * @param variable_parent		nom de la variable à assigner, dans la page parent (si page_parent == null)
 * @param mytype				type : "projet" ou "campagne" ou "client"
 */
function submitChoixProjetCampagne(page_parent, variable_parent, mytype) {
	if (mytype != "projet" && mytype != "campagne" && mytype != "client" && mytype != "code") {
		mytype == "projet";
	}
	
	myList = "";
	for (i = 0; i < document.listForm.elements.length; i ++) {
		if (document.listForm.elements[i].name.indexOf(mytype+"Box") === 0) {
			if (document.listForm.elements[i].checked) {
				myList += (myList == "" ? "" : ",") + document.listForm.elements[i].value;
			}
		}
	}
	
	params = "";
	
	if (page_parent != null) {
		document.location.href=page_parent+"?"+mytype+"s="+myList+params;
	} else if (variable_parent != null) {
		window.opener.document.getElementById(variable_parent).value = myList+params;
		window.close();
	}
}

/**
 * fonction appelée quand on choisit un worker dans un pop-up
 * va envoyer les infos de cette personne à la page parent
 * @param page_parent			nom de la page parent
 */
function submitChoixWorker(page_parent) {
	if (document.listForm.workerBox.value) {
		if (document.listForm.workerBox.checked == true) {
			window.opener.document.listForm.id_worker.value = document.listForm.workerBox.value;
			window.close();
		}
	} else {
		for (i = 0; i < document.listForm.workerBox.length; i ++) {
			if (document.listForm.workerBox[i].checked == true) {
				window.opener.document.listForm.id_worker.value = document.listForm.workerBox[i].value;
				window.close();
				break;
			}
		}
	}
}

/**
 * affiche un pop-up contenant la fenêtre d'aide (légendes)
 */
function popUpHelp() {
	window.open('/promos/info.php','help','toolbar=0,location=0,directories=0,status=0,scrollbars=0,resizable=0,copyhistory=0,menuBar=0,width=800,height=130');
	return false;
}

/**
 * pour la page de compta, calcule le nombre de workers, salaires totaux et frais totaux, d'après les checkbox sélectionnées
 * @param list_elements			liste de tableaux (id, salaire, frais)
 */
function totalCompta() {
	workers  = 0;
	salaires = 0;
	frais    = 0;

	for (j = 0; j < document.exportForm.elements.length; j++) {
		if (document.exportForm.elements[j].name.indexOf("workerBox_") === 0) {
			if (document.exportForm.elements[j].checked == true) {
				id = document.exportForm.elements[j].value;
				workers ++;
				salaires += parseFloat(document.exportForm.elements["worker_salaire_"+id].value);
				frais += parseFloat(document.exportForm.elements["worker_frais_"+id].value);
			}
		}
	}
	document.getElementById("total_workers").innerHTML  = workers;
	document.getElementById("total_salaires").innerHTML = salaires.toFixed(2);
	document.getElementById("total_frais").innerHTML    = frais.toFixed(2);
}

/**
 * check toutes les checkbox d'un formulaire
 * @param formulaire		élément html : formulaire
 * @param elemName			nom de l'élément : checkbox
 * @param check				cocher ? (boolean)
 * @param onclik			activer la fonction onclick sur ces éléments ? (boolean)
 */
function checkAll(formulaire, elemName, check, onclick) {
	for (i = 0; i < formulaire.elements.length; i ++) {
		if (formulaire.elements[i].name.indexOf(elemName) === 0) {
			if (formulaire.elements[i].disabled == false) {
				formulaire.elements[i].checked = check;
			}
			if (formulaire.elements[i].onclick && onclick) {
				formulaire.elements[i].onclick();
			}
		}
	}
}

/**
 * envoie une liste de workers vers une page cible, en y envoyant la liste des utlisateurs cochés dans le formulaire
 * @param formulaire	objet formulaire contenant la liste des workers
 * @param cible			nom de la page cible
 * @param type			type d'informations : "workers" (défaut) ou "inscriptions" ou "adresse"
 * @param all			condition sur les éléments à sélectionner - sinon, seulement ceux qui sont cochés
 * @param code_projet	si code + numéro mentionnés, sélectionne le lieu de travail du worker pour ce projet
 * @param numero_projet	si code + numéro mentionnés, sélectionne le lieu de travail du worker pour ce projet
 */
function envoiListWorkers(formulaire, cible, type, all, code_projet, numero_projet) {
	myList = "";
	for (i = 0; i < formulaire.elements.length; i ++) {
		if (formulaire.elements[i].name.indexOf("workerBox_") === 0) {
			if (((all == undefined || all == null) && formulaire.elements[i].checked == true)
			 || (all == 'disabled' && formulaire.elements[i].disabled == true)) {
				myList += (myList == "" ? "" : ",") + formulaire.elements[i].value;
			}
		}
	}
	
	if (type == "inscriptions") {
	 	// liste d'inscriptions
		document.location.href = cible + "?inscriptions="+myList + (code_projet == undefined || numero_projet == undefined ? '' : '&code_projet='+code_projet+'&numero_projet='+numero_projet);;
	} else if (type == "adresse") {
		// liste d'inscriptions + info : utiliser l'adresse d'envoi de matériel précisée pour cette inscription
		document.location.href = cible + "?adresse=1&inscriptions="+myList + (code_projet == undefined || numero_projet == undefined ? '' : '&code_projet='+code_projet+'&numero_projet='+numero_projet);;
	} else if (type == "ilist"){
		document.location.href = cible + "?liste="+myList + (code_projet == undefined || numero_projet == undefined ? '' : '&code_projet='+code_projet+'&numero_projet='+numero_projet);
	} else {
		// liste d'étudiants
		document.location.href = cible + "?users=1&liste="+myList + (code_projet == undefined || numero_projet == undefined ? '' : '&code_projet='+code_projet+'&numero_projet='+numero_projet);
	}

}

/**
 * limite un textarea à une longueur maximale, et modifie un innerhtml affichant le nombre de caractères restants
 * @param leng			longueur maximale (en caractères)
 * @param area			élément textarea
 * @param txt			id de l'élément texte affichant la longueur maximale
 */
function areaMaxLength(leng, area, txt) {
	if (area.value.length > leng) {
		area.value = area.value.substr(0, leng);
	}
	document.getElementById(txt).innerHTML = leng - area.value.length;
}

/**
 * quand on click sur un radio-box, désactive les champs texte sms / mail si inutiles
 */
function disableSMSorMAIL(formulaire, nom, langue) {
	if (langue == "") {
		this_id = nom.substr("messageBox_".length, nom.length-1);
		langue = document.getElementById("workerLangue_"+this_id).value;
	}
	var sms_actif = false;
	var mail_actif = false;
	for (i = 0; i < formulaire.elements.length; i ++) {
		if (formulaire.elements[i].name.indexOf("messageBox_") === 0) {
			if (formulaire.elements[i].checked) {
				var id = formulaire.elements[i].name.substr("messageBox_".length, formulaire.elements[i].name.length-1);
				if (document.getElementById("workerLangue_"+id).value == langue)	{
					if (formulaire.elements[i].value == "sms") {
						sms_actif = true;
					} else
					if (formulaire.elements[i].value == "mail") {
						mail_actif = true;
					}
				}
			}
		}
	}
	document.getElementById("texte_sms_"+langue).disabled = !sms_actif;
	document.getElementById("texte_mail_"+langue).disabled = !mail_actif;
	if (sms_actif)
		document.getElementById("layer_sms_"+langue).style.visibility = "visible";
	else
		document.getElementById("layer_sms_"+langue).style.visibility = "hidden";
	if (mail_actif)
		document.getElementById("layer_mail_"+langue).style.visibility = "visible";
	else
		document.getElementById("layer_mail_"+langue).style.visibility = "hidden";
}

/**
 * lorsqu'on active / désactive la distribution d'une campagne sur une langue => afficher / cacher les textes
 * @param checked			la checkbox est-elle cochée (edit) ? / la langue existe-t-elle (view) ?
 * @param zone				l'élément à cacher
 */
function checkVisibility(c, zone) {
	var z1 = document.getElementById(zone+"_1");
	if (z1) {
		document.getElementById(zone+"_1").style.display = (c ? '' : 'none');
	}
	var z2 = document.getElementById(zone+"_2");
	if (z2) {
		document.getElementById(zone+"_2").style.display = (c ? '' : 'none');
	}
}


/**
 * Script affichant un menu au survol de la souris
 */
function positionInfobulle(e) {
	//On repère la position de la souris et on ajuste selon le scroll, de la façon adaptée au navigateur

	if (is_ie6up) {
	    x = event.x + document.documentElement.scrollLeft;
	    y = event.y + document.documentElement.scrollTop;
	} else {
	    x = e.clientX + document.documentElement.scrollLeft;
	    y = e.clientY + document.documentElement.scrollTop;
	}
	
	if (window.innerHeight) {
		wiw = window.innerWidth;
		wih = window.innerHeight;
	} else if (document.documentElement.clientWidth) {
		wiw = document.documentElement.clientWidth;
		wih = document.documentElement.clientHeight;
	} else {
		wiw = document.body.clientWidth;
		wih = document.body.clientHeight;
	}

	if ((e ? e.clientX : event.x) < wiw / 2) {
		x = x + 15;
	} else {
		x = x - document.getElementById('divinfo').offsetWidth - 15;
	}
	if ((e ? e.clientY : event.y) < wih / 2) {
		y = y + 15;
	} else {
		y = y - document.getElementById('divinfo').offsetHeight - 15;
	}

	document.getElementById('divinfo').style.left = x+"px";
	document.getElementById('divinfo').style.top = y+"px";
}

/**
 * affiche la photo de l'utilisateur
 */
function afficherPhoto(id, afficherdiv) {
	afficherDivInfo('<img src="/etudiant/profile_photo.php?id='+id+'" border="0" alt="'+id+'">', afficherdiv);
}

/**
 * afficher l'infobulle
 */
function afficherDivInfo(contenu, afficherdiv) {
	if(afficherdiv == 1){
		if (navigator.appName.substring(0,3) == "Net"){
			addEventListener('MOUSEMOVE', afficherDivInfo, true);
		}
		document.onmousemove = positionInfobulle;
		document.getElementById('divinfo').innerHTML = contenu;
		document.getElementById('divinfo').style.display = '';
	} else {
		document.onmousemove = '';
		document.getElementById('divinfo').style.display = 'none';
	}
}

/**
 * quand on change le nombre de feedback d'un formulaire : si on en demande aucun, on désactive les champs delai_feedback et delai_cloture
 */
function changeNombreFeedbacks(value, form) {
	if (form.delai_feedback) {
		form.delai_feedback.disabled = isNaN(value) || value == 0;
	}
	if (form.delai_cloture) {
		form.delai_cloture.disabled = isNaN(value) || value == 0;
	}
}

/*
 * affiche progressivement une liste
 * @param id      : id de l'élement a afficher (div, table, tr, etc..)
 * @param fleche : id de l'image
 */
function deroulerListe(id, fleche) {
	if (document.getElementById(id).style.display == 'none') {
		document.getElementById(id).style.display=''; 
		if(fleche!=null){
			document.getElementById(fleche).src='/pictos/icones_9/tri_bas.gif';
		}
	}
	else{
		document.getElementById(id).style.display='none'; 
		if(fleche!=null){
			document.getElementById(fleche).src='/pictos/icones_9/tri_droite.gif';
		}
	}
}

/**
 * lorsqu'on clique sur le radio d'une liste de campagnes, quand on veut assigner un worker à une campagne
 * action 1 : afficher (ou pas) l'input delai_feedback
 * action 2 : changer le select-list selon campagne extended ou non
 *
 * @param boolean view				: afficher ou cacher ?
 * @param boolean extended			: est-ce que la campagne est étendue ?
 * @param textes					: liste des textes traduits pour les différents cas
 * @param selected					: valeur de l'élément sélectionné
 * @param delai_feedback			: date à mettre dans l'input, valeur par défaut
 */
function viewDelai(view, extended, textes, selected, delai_feedback) {
	if (view) {
		$('delai_feedback').value = delai_feedback;
		$('viewDelai').show();
	} else {
		$('viewDelai').hide();
	}
	$('status').length = 0;
	if (extended) {
		$('status')[0] = new Option(textes[0], "0", false, selected==0);
		$('status')[1] = new Option(textes[1], "1", false, selected==1);
		$('status')[2] = new Option(textes[2], "2", false, selected==2);
		$('status')[3] = new Option(textes[3], "3", false, selected==3||selected==4);
	} else {
		$('status')[0] = new Option(textes[0], "0", false, selected==0);
		$('status')[1] = new Option(textes[1], "1", false, selected==1||selected==2);
		$('status')[2] = new Option(textes[4], "4", false, selected==3||selected==4);
	}
}

/**
 * affiche ou cache un projet dans le listing / page d'accueil
 * @param code						: code du projet
 * @param numero					: numéro du projet
 * @param action					: -1 => hide, +1 => show
 */
function rjs_showProject(code, numero, action) {
	new Ajax.Request('/promos/rjs_showProject.php', {
		  asynchronous:true
		, evalScripts:true
		, parameters: {code : code, numero : numero, action : action}
	});
}

/**
 * sur workers_avs_in.php : actions quand on coche un radio
 */
function checkboxRadio(id_user, moi, date) {
	var autres = $$('.caisse_'+id_user);
	if (autres.length > 1) {
		for (i = 0; i < autres.length; i ++) {
			if (autres[i].value != moi) {
				autres[i].checked = false;
			}
		}
	}
	if ($('reception_'+id_user).value == "") {
		$('reception_'+id_user).value = date;
	}
	
	if ($('avs_'+id_user)) {
		$('avs_'+id_user).focus();
	}
}

// fonction insérant un text dans une iframe de tiny_mce
function insertHtmlTextIntoTheMceFrames(frameid, text){
	
	var testFrame = document.getElementById(frameid);
   var doc = testFrame.contentDocument;
   if (doc == undefined || doc == null)
       doc = testFrame.contentWindow.document;
   while(doc.body.childNodes.length > 0) doc.body.removeChild(doc.body.childNodes[0]);
   divElement = document.createElement("p");
   divText = document.createTextNode(text);
   
   divElement.appendChild(divText);
   
   doc.body.appendChild(divElement);
	
}
	
	
	
