/*//------------------------------------------------------------------------//
fonction pour ouvrir une seule fois un popup
//------------------------------------------------------------------------//*/
var open_window;
function open_win(target,url,width,height,top,left,menubar,toolbar,resizable,scrollbars)
{
var options='menubar='+menubar+',toolbar='+toolbar+',resizable='+resizable+',scrollbars='+scrollbars;//définition des options
open_window = window.open(url,target,"top="+top+",left="+left+",width="+width+",height="+height+","+options);//on ouvre la fenetre
open_window.focus();//on va sur la nouvelle fenetre
return false;
}

/*//------------------------------------------------------------------------//
function permettant de controler si tous les champs obligatoire 
ont été saisis.
//------------------------------------------------------------------------//*/
var champ;
var filter;
var msg;
function verif_form(form_name){
	nb_champs = document.forms[form_name].elements.length;//nombres d'élements dans le formulaire
	for(i=0;i<nb_champs;i++){
		document.forms[form_name].elements[i].style.borderColor = "#CCCCCC";
	}
	for(i=0;i<nb_champs;i++){
		obligatoire = document.forms[form_name].elements[i].alt;//recuperation de la valeur de alt
		champ		= document.forms[form_name].elements[i];//sélection de l'élement
		nom			= champ.name.substring(0,3);
		
		if(nom == "mai" || nom =="ema"){	// Test l'adresse Email
			filter	= /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/; // mail
			msg		= "Le format de l'adresse E-Mail est incorrect.";
		}else if(nom == "tel"){				// Test les numéros de téléphone au format suisse (032 365 03 36)
			filter = /^(([0-9]{3}[-. \/]?){2}([0-9]{2}[-. \/]?){2})?$/; // telephone
			msg		= "Le format du numéro de téléphone est incorrect.";
		}else if(nom == "npa"){				// Test le numéro postal
			filter = /^([0-9]{4})?$/; // npa
			msg		= "Le format du numéro postal est incorrect.";
		}else if(nom == "adr" || nom == "des" || (champ.name.substring(0,5) == "nom_g") || nom=="rs_" || nom == "id_"){	// Test certain champs qui nécessite pas de format
			filter = /^.*$/; // tout
			msg		= "Le format de ce champs est incorrect.";
		}else{	// Vérifie que le champs ne contient pas de caractère numérique
			filter = /^\D*$/; // tout
			msg		= "Le format de ce champs est incorrect. ";
		}

		if(!filter.test(champ.value) && champ.type=='text'){//si le format du champs est valide
			 alert(msg);
			 champ.focus();//focus sur le champ a remplire
			 champ.style.borderColor = "#FF0000";
			 return false;
		}
		if(champ.value == '' && obligatoire == 'obligatoire'){//si le champs est obliatoire et vide
			 alert('Veuiller remplire tous les champs correctement svp!');
			 champ.focus();//focus sur le champ a remplire
			 champ.style.borderColor = "#FF0000";
			 return false;
		}
	}
	return true;
}
/*//------------------------------------------------------------------------//
function permettant de debloquer un autre champs du formulaire selon une 
certaine valeur
//------------------------------------------------------------------------//*/
function hide_element(element_val,val2hide,element_hide){
	if(val2hide == element_val.value)
	{
		element_hide.disabled = true;
	}else{
		element_hide.disabled = false;
	}
}


/*//------------------------------------------------------------------------//
fonction trouvée sur http://actuel.fr.selfhtml.org/articles/javascript/bbcode/index.htm 
permettant de calculer la position du cusreur et d'inserer du texte à cet endroit
//------------------------------------------------------------------------//*/
function insertion(repdeb, repfin, champ, form) {
	var input = document.forms[form].elements[champ];
	input.focus();
	/* pour l'Explorer Internet */
	if(typeof document.selection != 'undefined'){
		/* Insertion du code de formatage */
		var range = document.selection.createRange();
		var insText = range.text;
		range.text = repdeb + insText + repfin;
		/* Ajustement de la position du curseur */
		range = document.selection.createRange();
		if (insText.length == 0) {
			range.move('character', -repfin.length);
		}else{
			range.moveStart('character', repdeb.length + insText.length + repfin.length);
		}
		range.select();
	}
	/* pour navigateurs plus récents basés sur Gecko*/
	else if(typeof input.selectionStart != 'undefined'){
		/* Insertion du code de formatage */
		var start = input.selectionStart;
		var end = input.selectionEnd;
		var insText = input.value.substring(start, end);
		input.value = input.value.substr(0, start) + repdeb + insText + repfin + input.value.substr(end);
		/* Ajustement de la position du curseur */
		var pos;
		if (insText.length == 0) {
			pos = start + repdeb.length;
		}else{
			pos = start + repdeb.length + insText.length + repfin.length;
		}
		input.selectionStart = pos;
		input.selectionEnd = pos;
	}else{/* pour les autres navigateurs */	
		/* requête de la position d'insertion */
		var pos;
		var re = new RegExp('^[0-9]{0,3}$');
		while(!re.test(pos)) {
			pos = prompt("Insertion à la position (0.." + input.value.length + "):", "0");
		}
		if(pos > input.value.length) {
			pos = input.value.length;
		}
		/* Insertion du code de formatage */
		var insText = prompt("Veuillez entrer le texte à formater:");
		input.value = input.value.substr(0, pos) + repdeb + insText + repfin + input.value.substr(pos);
	}
}

/*//------------------------------------------------------------------------//
function qui va aller chercher dans la db les contacts correspondant
au groupe que l'on a sélectionné
//------------------------------------------------------------------------//*/
function affich_ajax(param, page, div_result){
	if(document.all)
	{//Internet Explorer
		var http_object = new ActiveXObject("Microsoft.XMLHTTP") ;
	}else{//Firefox
		var http_object = new XMLHttpRequest();
	}	
	//div où l'on va afficher le resultat de la requête
	var result = document.getElementById(div_result);			
	http_object.open("POST", page);
	
	//Réponse
	http_object.onreadystatechange = function(){
		if (http_object.readyState == 4 && http_object.status == 200){
			result.innerHTML = http_object.responseText ;//resultat de la requête
		}
	}
	http_object.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	http_object.send(param);
}

function reset_form(){
	if(document.all)
	{//Internet Explorer
		var http_object = new ActiveXObject("Microsoft.XMLHTTP") ;
	}else{//Firefox
		var http_object = new XMLHttpRequest();
	}	
	//div où l'on va afficher le resultat de la requête
	var result1 = document.getElementById('div2');
	var result2 = document.getElementById('div3');
	var result3 = document.getElementById('div4');
	//Réponse
			result1.innerHTML = '';
			result2.innerHTML = '';
			result3.innerHTML = '';
}

/*//------------------------------------------------------------------------//
fonction pour copier les adresse mail depuis la liste de contacts et séparer 
chaque adresse par une virgule
//------------------------------------------------------------------------//*/
function copymail(input,texte){
	var inputdest = document.getElementById(input);
	if(inputdest.value == ''){
		inputdest.value = texte;
	}else{
		inputdest.value = inputdest.value+','+texte;
	}
}
/*--------------------------------------------------------------------------//
Fonction pour la création d'une activité avec tout les contrôles
//---------------------------------------------------------------------------*/
function rec_modif_activite(mail){
	// si l'utilisateur n'a pas oublié de mettre un nom à la nouvelle activité
	if(form_activite.nom_activite.value != ''){
		// si l'utilisateur à bien sélectionné un groupe pour lequel l'activité est créée
		if(form_activite.groupe.value != ''){
			// si l'utilisateur à rempli tout les champs de la date de début de l'activité
			if(form_activite.date_debut.value != ''){
				if(mail=='1'){
					if(form_activite.envoi_email.checked == true){
						if(form_activite.text_mail.value == ''){
							alert('Veuillez inscrire le text du mail que vous voulez envoyer');
						}else{form_activite.submit();}
					}else{form_activite.submit();}
				}else{form_activite.submit();}
			}else{alert("Veuillez sélectionner une date de début de l\'activité en cliquant sur le calendrier");}
		}else{alert('Veuillez sélectionner un groupe pour lequel votre activité est prévue');}
	}else{alert('Veuillez donner un nom à votre activité');}
}
/*//------------------------------------------------------------------------//
fonction permettant de demander une confirmation avant d'envoyer un formulaire
//------------------------------------------------------------------------//*/
function confirm_form(msg) {
	if (confirm(msg)) { // Clic sur OK
		return true;
	}else{
		return false;
	}
}
/*//------------------------------------------------------------------------//
fonction permettant de confirmer ou non l'ouverture d'un lien
//------------------------------------------------------------------------//*/
function confirm_link(lien,msg) {
	if (confirm(msg)) { // Clic sur OK
		window.location.replace(lien);
	}else{
		return false;
	}
}
/*//------------------------------------------------------------------------//
fonction cachant un élement si une valeur est égale à rien
//------------------------------------------------------------------------//*/
function hide(form,liste,bouton,numero) {
	//alert(form+numero_form);
	if (liste!='') {
		document.forms[form+numero].elements[bouton].disabled=false;
	}else{
		document.forms[form+numero].elements[bouton].disabled=true;
	}
}
/*//------------------------------------------------------------------------//
fonction copie d'un texte dans une textbox
//------------------------------------------------------------------------//*/
function copy_txt(form,textbox,texte,numero) {
	document.forms[form+numero].elements[textbox].value=texte;
}
/*-------------------------------------------------------------------------//
fonction copy permettant de copier un texte depuis un point de départ
jusqu'à un point d'arrivée
//-------------------------------------------------------------------------*/
function copy(input,texte,div){
	var inputdest = document.getElementById(input);
		inputdest.value = texte;
	var divdest = document.getElementById(div);
	divdest.style.visibility = 'hidden';
}

/*-------------------------------------------------------------------------//
fonction toggle_div permettant d'afficher ou de cacher un div
//-------------------------------------------------------------------------*/
function toggle_div(div){
 var div_close = document.getElementById(div);
 if(div_close.style.display == ""){
	div_close.style.display = "none";
 }else{
	div_close.style.display = "";
 }
}

/*-------------------------------------------------------------------------//
fonction activbtn permettant d'activer un bouton
//-------------------------------------------------------------------------*/
function activbtn(change,input){
	var selected = document.getElementById(change);
	var btn = document.getElementById(input);
	if(selected.value == ''){
		btn.disabled = true;
	}else{
		btn.disabled = false;
	}
}
/*-------------------------------------------------------------------------//
fonction ts calendrier
//-------------------------------------------------------------------------*/
// if two digit year input dates after this year considered 20 century.
var NUM_CENTYEAR = 30;
// is time input control required by default
var BUL_TIMECOMPONENT = false;
// are year scrolling buttons required by default
var BUL_YEARSCROLL = true;

var calendars = [];
var RE_NUM = /^\-?\d+$/;

function calendar1(obj_target) {

	// assigning methods
	this.gen_date = cal_gen_date1;
	this.gen_time = cal_gen_time1;
	this.gen_tsmp = cal_gen_tsmp1;
	this.prs_date = cal_prs_date1;
	this.prs_time = cal_prs_time1;
	this.prs_tsmp = cal_prs_tsmp1;
	this.popup    = cal_popup1;
	// validate input parameters
	if (!obj_target)
		return cal_error("Error calling the calendar: no target control specified");
	if (obj_target.value == null)
		return cal_error("Error calling the calendar: parameter specified is not valid target control");
	this.target = obj_target;
	this.time_comp = BUL_TIMECOMPONENT;
	this.year_scroll = BUL_YEARSCROLL;
	
	// register in global collections
	this.id = calendars.length;
	calendars[this.id] = this;
}

function cal_popup1 (str_datetime) {
	if (str_datetime) {
		this.dt_current = this.prs_tsmp(str_datetime);
		var chemin = './';
	}
	else {
		this.dt_current = this.prs_tsmp(this.target.value);
		this.dt_selected = this.dt_current;
		var chemin = './pages/activity/'
	}
	if (!this.dt_current) return;
	var obj_calwindow = window.open(
		chemin+'calendar.php?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id,
		'Calendar', 'width=200,height='+(this.time_comp ? 215 : 190)+
		',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'
	);
	obj_calwindow.opener = window;
	obj_calwindow.focus();
}
// timestamp generating function
function cal_gen_tsmp1 (dt_datetime) {
	return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));
}

// date generating function
function cal_gen_date1 (dt_datetime) {
	return (
		(dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "-"
		+ (dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "-"
		+ dt_datetime.getFullYear()
	);
}
// time generating function
function cal_gen_time1 (dt_datetime) {
	return (
		(dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"
		+ (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"
		+ (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())
	);
}

// timestamp parsing function
function cal_prs_tsmp1 (str_datetime) {
	// if no parameter specified return current timestamp
	if (!str_datetime)
		return (new Date());

	// if positive integer treat as milliseconds from epoch
	if (RE_NUM.exec(str_datetime))
		return new Date(str_datetime);
		
	// else treat as date in string format
	var arr_datetime = str_datetime.split(' ');
	return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
}

// date parsing function
function cal_prs_date1 (str_date) {

	var arr_date = str_date.split('-');

	if (arr_date.length != 3) return cal_error ("Format de la date invalide :'" + str_date + "'.");
	if (!arr_date[0]) return cal_error ("Format de la date invalide :'" + str_date + "'");
	if (!RE_NUM.exec(arr_date[0])) return cal_error ("Format de la date invalide :'" + arr_date[0] + "'.");
	if (!arr_date[1]) return cal_error ("Format de la date invalide :'" + str_date + "'.");
	if (!RE_NUM.exec(arr_date[1])) return cal_error ("Format de la date invalide :'" + arr_date[1] + "'.");
	if (!arr_date[2]) return cal_error ("Format de la date invalide :'" + str_date + "'..");
	if (!RE_NUM.exec(arr_date[2])) return cal_error ("Format de la date invalide :'" + arr_date[2] + "'.");

	var dt_date = new Date();
	dt_date.setDate(1);

	if (arr_date[1] < 1 || arr_date[1] > 12) return cal_error ("Format de la date invalide :'" + arr_date[1] + "'.\nVous ne pouvez entrer des chiffres de 01 à 12.");
	dt_date.setMonth(arr_date[1]-1);
	 
	if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
	dt_date.setFullYear(arr_date[2]);

	var dt_numdays = new Date(arr_date[2], arr_date[1], 0);
	dt_date.setDate(arr_date[0]);
	if (dt_date.getMonth() != (arr_date[1]-1)) return cal_error ("Format de la date invalide :'" + arr_date[0] + "'.\nVous ne pouvez entrer des chiffres de 01 à "+dt_numdays.getDate()+".");

	return (dt_date)
}

// time parsing function
function cal_prs_time1 (str_time, dt_date) {

	if (!dt_date) return null;
	var arr_time = String(str_time ? str_time : '').split(':');

	if (!arr_time[0]) dt_date.setHours(0);
	else if (RE_NUM.exec(arr_time[0]))
		if (arr_time[0] < 24) dt_date.setHours(arr_time[0]);
		else return cal_error ("Format de l'heure invalide :'" + arr_time[0] + "'.\nVous ne pouvez entrer que des chiffres de 01 à 23.");
	else return cal_error ("Format de l'heure invalide :'" + arr_time[0] + "'.\nVous ne pouvez entrer que des chiffres.");
	
	if (!arr_time[1]) dt_date.setMinutes(0);
	else if (RE_NUM.exec(arr_time[1]))
		if (arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);
		else return cal_error ("Format des minutes invalide :'" + arr_time[1] + "'.\nVous ne pouvez entrer que des chiffres de 01 à 23.");
	else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");

	if (!arr_time[2]) dt_date.setSeconds(0);
	else if (RE_NUM.exec(arr_time[2]))
		if (arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);
		else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
	else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");

	dt_date.setMilliseconds(0);
	return dt_date;
}

function cal_error (str_message) {
	alert (str_message);
	return null;
}
