// $Id: commun.js 1198 2005-10-07 12:26:39Z dkr $

//
// Fonction xWidget (ici pour l'instant).
//
function toggleWindow(win, state) {
	var className = 'toggled';

	win.style.width = win.childNodes[1].offsetWidth + 'px';

	if (!state) {
		state = removeClass(win, className) ? 'shown' : 'hidden';
	}
	if (state == 'hidden') {
		addClass(win, className);
		writeToCookie(win.id, 'hidden');
		setStatus(win, 'Cliquez sur le titre pour dérouler la fenêtre.');
	} else {
		setStatus(win, 'Cliquez sur le titre pour enrouler la fenêtre.');
		writeToCookie(win.id, 'shown');
	}
}

function setStatus(win, text) {
	var childs = win.childNodes;

	if (childs.length >= 2) {
		var sBar = childs[childs.length - 2];

		if (sBar.className == 'xStatus') {
			childs = sBar.childNodes;

			childs[childs.length - 2].innerHTML = text;
		}
	}
}

function initWindow(id) {
	var win = $(id);
	var state = readCookie(id);

	if (state) {
		toggleWindow(win, state);
	}
	if (win.childNodes[1].offsetWidth <= 0) {
		win.style.width = getStyle(win, 'width');
	}
}

//
// Propre.
//
function getStyle(el, prop) {
   if (window.getComputedStyle) {
      var y = window.getComputedStyle(el, null).getPropertyValue(prop);
   } else if (el.currentStyle) {
      // On transforme : font-size -> fontSize.
      var p = prop.replace(/\-(.)/, "' + '$1'.toUpperCase() + '");
      var y = eval('el.currentStyle.' + eval("'" + p + "'"));
   }
   return y;
};

function switchClass(el, classOver, classClick) {
	if(!el) {
		return false;
	}
	el.onmouseover = function() {
		addClass(el, classOver);
	}
	
	el.onmouseout = function() {
		removeClass(el, classOver);
	}
	
	el.onclick = function() {
		if (!removeClass(el, classClick)) {
			addClass(el, classClick);
			removeClass(el, classOver);
		} else {
			addClass(el, classOver);
			el.onmousemove = function() {
				removeClass(el, classOver);
				this.onmousemove = null;
			}
		}
	}
}

function toggleClass(id, newClass, oldClass) {
	removeClass($(id), oldClass);
	addClass($(id), newClass);
}

function removeClassID(id, className) {
	return removeClass($(id), className);
}

function removeClass(el, nomClass) {
	if (!el) {
		return false;
	}
	if (el.className.indexOf(nomClass) >= 0) {
		el.className = el.className.replace(new RegExp(nomClass), '');

		return true;
	}
	return false;
}

function addClassID(id, className) {
	return addClass(document.getElementById(id), className);
	//return addClass($(id), className);
}

function addClass(el, className) {
	if (!el) {
		return false;
	}
	if (el.className.indexOf(className) == -1){
		el.className += ' ' + className;

		return true;
	}
	return false;
}


//
// Sale.
//

// retourne le nombre de jours entre 2 dates de la forme jj-mm-aaaa
// si la date de début n'est pas précisé alors on prend par défaut la date du jour
// cette fonction ne fait pas d'approximation et vérifie si l'année est bissextile

erreur=0;
function calculduree(date_debut,date_fin) {
	// formatage de la date de début
	if (date_debut != '') {
		var splitdebut = date_debut.split("-");
		var jourdebut = splitdebut[0];
		var moisdebut = splitdebut[1];
		var anneedebut = splitdebut[2];
	} else {
		var today = new Date();
		var jourdebut = today.getDate();
		var moisdebut = today.getMonth()+1; //car le tableau des moins commence a 0 (= à janvier)
		var anneedebut = today.getFullYear();
	}
	// formatage de la date de fin
	var splitfin = date_fin.split("-");
	var jourfin = splitfin[0];
	var moisfin = splitfin[1];
	var anneefin = splitfin[2];

	function calcul_longueur_mois(annee) {
		//préconditions : annee est en entier
		//postconditions : retourne un tableau de 12 éléments d'entier qui indique le nombre de jours dans chaque mois
		var longueurmois=[31,28,31,30,31,30,31,31,30,30,30,31];
		if((!(annee % 4) && (annee % 100)) || !(annee % 400)) { //vérifie si l'année traitée est bissextile
			longueurmois=[31,28,31,30,31,30,31,31,30,30,30,31];		
		}
		return longueurmois;
	}

	var duree=0;
	for(i=anneedebut;i<anneefin;i++) {
		if((!(i % 4) && (i % 100)) || !(i % 400)) { //vérifie si l'année traitée est bissextile
			duree+=366;
		} else {
			duree+=365;
		}
	}
	var longueurmois=calcul_longueur_mois(anneedebut);
	for(i=0;i<moisdebut;i++) {
		if(i==moisdebut-1) {duree-=parseInt(jourdebut);}
		else {duree-=longueurmois[i];}
	}
	var longueurmois=calcul_longueur_mois(anneefin);
	for(i=0;i<moisfin;i++) {
		if(i==moisfin-1){duree+=parseInt(jourfin)}
		else{duree+=longueurmois[i]}
	}
	//alert("duree : "+duree);
	return duree;
}

function isDateFuture(date,message) {
	var split = date.split('/');
	var Jour = split[0];
	var Mois = split[1] - 1;
	var Annee = split[2];
	var d = new Date();

	if (message != '') {
		var msg = message;
	} else {
		var msg = "La date doit être supérieure à la date du jour !";
	}

	if ( ((parseInt(Annee,10)*12*31)+(parseInt(Mois,10)*31)+(parseInt(Jour,10))) <= ((d.getFullYear()*12*31)+(d.getMonth()*31)+(d.getDate())) ) {
		alert(''+msg+'');
		return false;
	}
	return true;
}


/*
** Fonctions pour le controle des saisies sur un formulaire
*/

// met la valeur d'un champ a NULL
function erase_value(field,default_value) {
	if(field.value==default_value) {
		field.value = '';
		focus_and_select(field);
	}
}

// verifie si un CHAMP est vide et affiche une alerte
function is_field_not_empty(field,msg) {
	if(field.value=='') {
		alert(""+msg+"");
		if(field.type != "hidden") {
			focus_and_select(field);
		}
		return false;
	}
	return true;
}

// verifie si un SELECT est vide et affiche une alerte
function is_select_not_empty(field,msg) {
	if(field.value==0) {
		alert(""+msg+"");
		//focus_and_select(field);
		return false;
	}
	return true;
}

// verifie si un CHAMP est coché (bien sur: radio ou checkbox)
// ATTENTION !! Cette fonction fonctionne avec les IDS et non avec les noms !
function is_field_checked(formulaire,id,msg) {
	var i=0;
	len = formulaire.elements.length;
	while(i!=len) {
		if (formulaire.elements[i].id == id) {
			if (formulaire.elements[i].checked == true) {
				return true;
			}
		}
		i++;
	}
	if (msg != null) {
		alert(""+msg+"");
	}
	return false;
}

// verifie si un des boutons radios est coché
function is_radio_checked(formulaire, name, msg) {
	len = formulaire.elements.length;
	var i=0;
	while(i!=len) {
		if (formulaire.elements[i].type=='radio' && formulaire.elements[i].name==name) {
			if (formulaire.elements[i].checked == true) {
				return true;
			}
		}
		i++;
	}
	alert(""+msg+"");
	return false;
}

// selectionne un champ
function focus_and_select(field) {
	field.focus();
	field.select();
}

// gere le champ "autre" selon un select selon la valeur "autre"
function AdditionalField(field, selected_value, default_value, value) {
	if (value == null) {
		value = "autre";
	}

	if (selected_value == value) {
		field.disabled = false;
		field.className = null;
		if (field.value == default_value) {
			field.value = "";
		}

	} else {
		field.disabled = true;
		field.className = "disabled";
		if (field.value == "" || field.value == default_value) {
			field.value = default_value;
		}
	}
}


// verifie si un CODE POSTAL est valide
function is_valid_CodePostal(field,msg) {
	var regex = new RegExp('[0-9]{5}');
	var cp = field.value;
	if (!regex.test(cp)) {
		alert(""+msg+"");
		focus_and_select(field);
		return false;
	}
	return true;
}
// verifie si une adresse EMAIL est valide de la forme xxxx@xxxx.xxx
function is_valid_Email(field,msg) {
	var regex = new RegExp("^[a-zA-Z0-9]+[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]{2,}[.][a-zA-Z]{2,3}");
	var mail = field.value;
	if (!regex.test(mail)) {
		alert(""+msg+"");
		focus_and_select(field);
		return false;
	}
	return true;
}
// verifie si une NUMERO DE TELEPHONE (ou fax) est valide de la forme 0123456789
function is_valid_PhoneNumber(field,msg) {
	var regex = new RegExp("^0+[0-9]{9}");
	var number = field.value;
	if (!regex.test(number)) {
		alert(""+msg+"");
		focus_and_select(field);
		return false;
	}
	return true;
}


//Le code SIREN dont on veut vérifier la validité.
function is_valid_Siren(field,msg) {
	var isValid;
	var siren = field.value;
	if ( (siren.length != 9) || (isNaN(siren)) ) {
		isValid = false;
	} else {
		// Donc le SIREN est un numérique à 9 chiffres
		var somme = 0;
		var tmp;
		for (var cpt = 0; cpt<siren.length; cpt++) {
			if ((cpt % 2) == 1) { // Les positions paires : 2ème, 4ème, 6ème et 8ème chiffre
				tmp = siren.charAt(cpt) * 2; // On le multiplie par 2
				if (tmp > 9)
					tmp -= 9;  // Si le résultat est supérieur à 9, on lui soustrait 9
			} else
				tmp = siren.charAt(cpt);
			somme += parseInt(tmp);
		}
		if ((somme % 10) == 0) {
			isValid = true;  // Si la somme est un multiple de 10 alors le SIREN est valide
		} else {
			isValid = false;
		}
	}
	if (!isValid) {
		alert(""+msg+"");
		focus_and_select(field);
	}
	return isValid;
}

//Le code SIRET dont on veut vérifier la validité.
function is_valid_Siret(field, msg) {
	var isValid;
	var siret = field.value;
	if ( (siret.length != 14) || (isNaN(siret)) ) {
		isValid = false;
	} else {
		// Donc le SIRET est un numérique à 14 chiffres
		// Les 9 premiers chiffres sont ceux du SIREN (ou RCS), les 4 suivants
		// correspondent au numéro d'établissement
		// et enfin le dernier chiffre est une clef de LUHN.
		var somme = 0;
		var tmp;
		for (var cpt = 0; cpt<siret.length; cpt++) {
			if ((cpt % 2) == 0) { // Les positions impaires : 1er, 3è, 5è, etc...
				tmp = siret.charAt(cpt) * 2; // On le multiplie par 2
				if (tmp > 9)
					tmp -= 9;  // Si le résultat est supérieur à 9, on lui soustrait 9
			} else
				tmp = siret.charAt(cpt);
			somme += parseInt(tmp);
		}
		if ((somme % 10) == 0) {
			isValid = true; // Si la somme est un multiple de 10 alors le SIRET est valide
		} else {
			isValid = false;
		}
	}
	if (!isValid) {
		alert(""+msg+"");
		focus_and_select(field);
	}
	return isValid;
}


/*
** fonctions générées par Macromedia Dreamweaver :
*/
function MM_preloadImages() { //v3.0
	var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
	var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
	if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
function MM_findObj(n, d) { //v4.01
	var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
		d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
	if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
	for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
	if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
	var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
	if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
	var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_openBrWindow(theURL,winName,features) { //v2.0
	window.open(theURL,winName,features);
}
function MM_goToURL() { //v3.0
	var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
	for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
}
function MM_popupMsg(msg) { //v1.0
	alert(msg);
}
function MM_callJS(jsStr) { //v2.0
	return eval(jsStr)
}

// fonction qui permet de selectioné/deselectioné des checkbox massivement
// action disponible : Aucun , Tous , Autre (qui inverse la selection)
function SelectCheckboxAction(action, monform){
	len = document[monform].elements.length;
	var i=0;
	while(i!=len) {
		if (document[monform].elements[i].type=='checkbox') {
			if (action =='Aucun') {
				document[monform].elements[i].checked = false;
			} else if (action =='Tous')	{
				document[monform].elements[i].checked = true;
			} else if (action =='Autre') {
				document[monform].elements[i].checked = !document[monform].elements[i].checked;
			}
		}
		i++;
	}
/*
	if (document[monform].select_all && action =='Aucun' || action =='Autre') {
		document[monform].select_all.value=0;
	} else if (document[monform].select_all && action =='Tous') {
		document[monform].select_all.value=1;
	}
*/
}

// fonction qui permet de selectioné/deselectioné des checkbox en masse
// l'action se fait sur le nom des checkbox dont les 5 premiers lettres commencent par la variable 'name'
function SelectCheckboxType(action, monform, name, nbe){
	len = document[monform].elements.length;
	var i=0;
	while(i!=len) {
		shortName = document[monform].elements[i].name.substring(0,nbe);
		if (document[monform].elements[i].type=='checkbox' && document[monform].elements[i].disabled==false && name==shortName) {
			if (action =='Aucun') {
				document[monform].elements[i].checked = false;
			} else if (action =='Tous')	{
				document[monform].elements[i].checked = true;
			} else if (action =='Autre') {
				document[monform].elements[i].checked = !document[monform].elements[i].checked;
			}
		}
		i++;
	}
}

// meme fonction qu'au-dessus sauf que l'action se fait par rapport a la VALEUR et non pas par le nom	
function SelectCheckboxByValue(action, monform, value, nbe){
	len = document[monform].elements.length;
	var i=0;
	while(i!=len) {
		shortValue = document[monform].elements[i].value.substring(0,nbe);
		if (document[monform].elements[i].type=='checkbox' && document[monform].elements[i].disabled==false && value==shortValue) {
			if (action =='Aucun') {
				document[monform].elements[i].checked = false;
			} else if (action =='Tous')	{
				document[monform].elements[i].checked = true;
			} else if (action =='Autre') {
				document[monform].elements[i].checked = !document[monform].elements[i].checked;
			}
		}
		i++;
	}
}

// redimensionne une fenetre a la taille d'une image
function resizeForImage() {
	if (document.images[0].complete) {
		window.resizeTo(document.images[0].width+100, document.images[0].height+250);
		window.focus();
	} else {
		setTimeout('resizeForImage()',550)
	}
}



function InfoMessage(message) {
  if(document.getElementById)
	var tab1 = "<table width=130 border=0 cellpadding=0 cellspacing=0 style=\"position:absolute; z-index:999; border: 1px solid #000000;\" bgcolor=#CCCCCC>";
	var tab2 = "<tr bgcolor=#FF6600><td width=130 height=10 valign=top class=lienentete ><font color=\"#FFFFFF\" size=\"1\" face=\"Verdana, Arial, Helvetica, sans-serif\"><strong>INFORMATION</strong></font></td></tr>";
	var tab3 = "<tr><td width=130 valign=top bgcolor=#FFFFFF class=txtbleu>";
	var tab4 = "</td>";
	var tab5 = "</tr>";
	var tab6 = "</table>";
	document.getElementById("information").innerHTML = tab1 + tab2 + tab3 + message +  tab4 + tab5 + tab6 ;
}
  
function InfoMessage_vide() {
  if(document.getElementById)
	document.getElementById("information").innerHTML = "" ;
}


function verif_date(date) {
	date_du_jour = new Date();
	jdj = date_du_jour.getDate();
	mdj = date_du_jour.getMonth();
	mdj++;
	year = date_du_jour.getUTCFullYear();

	var j = date.substring(0,2);
	var m = date.substring(3,5);
	var a = date.substring(6);

	if (a < year) {
		alert('La date saisie ne peut être inférieure à la date du jour.');
		return false;
	} else if ((a == year) && (m < mdj)) {
		alert('La date saisie ne peut être inférieure à la date du jour.');
		return false;
	} else if ((a == year) && (m == mdj) && (j < jdj)) {
		alert('La date saisie ne peut être inférieure à la date du jour.');
		return false;
	} else {
		return true;
	}
}

// Si aucune checkbox est cochée
function none_checked() {
	alert('Vous devez cocher une des cases !');
}

// Calcule le nombre de checkbox cochées
function number_checked(formulaire) {
	len = document[formulaire].elements.length;
	var i=0;
	var j=0;
	while(i!=len) {
		if (document[formulaire].elements[i].type=='checkbox') {
			if (document[formulaire].elements[i].checked == true) { j++; }
		}
		i++;
	}
	return j;
}


// Fonctions communes pour le mailing
function submit_lettres_ok() {
	document.lettre.submit();
	document.lettre.button_submit.value='Veuillez patientez...';
}

function lettres_check_envoi() {
	len = document.lettre.elements.length;
	var i=0;
	var j=0;
	while(i!=len) {
		shortName = document.lettre.elements[i].name.substring(0,6);
		if (document.lettre.elements[i].checked == true && shortName=='envoi_') {
			j++;
		}
		i++;
	}
	if (j==0) {
		alert("Vous devez choisir un mode d'envoi");
		return false;
	} else {
		return true;
	}
}




// ************************************************************************
// JavaScript destine a la partie ADMIN
// ************************************************************************

// *
// Mailing aux clients/prospects des franchises
// *
function open_popup_coordonnes(url) {
	window.open(''+url+'', 'coordonnees', 'width=400,height=500,resizable=yes,scrollbars=yes');
}

function submit_lettres_admin() {
	if (!lettres_check_envoi()) {
		return false;
	}
	if (document.lettre.envoi_mail.checked==true || document.lettre.envoi_prefere.checked==true) {
		if(document.lettre.mail_sujet.value=='') {
			alert("Vous devez préciser un sujet au mail.");
			return false;
		}
		if(document.lettre.fe_pay.checked==true) {
			if(document.lettre.nbe_pages.value=='') {
				alert("Vous devez préciser le nombre de pages du document, si vous désirez faire payer les franchisés.");
				return false;
			}
		}
		if(document.lettre.mail_texte.value=='') {
			res = confirm("Vous n'avez pas saisi de texte pour accompagner le mail\nVoulez-vous continuer ?");
			if (res) {
				submit_lettres_ok();
			} else {
				return false;
			}
		} else {
			submit_lettres_ok();
		}
	} else {
		submit_lettres_ok();
	}
}

function active_input_lettres(){
	if (document.lettre.fe_pay.checked == false) {
		document.lettre.nbe_pages.disabled = true;
	} else if (document.lettre.fe_pay.checked == true)	{
		document.lettre.nbe_pages.disabled = false;
	}
}



// ************************************************************************
// JavaScript destine a la partie FRANCHISE
// ************************************************************************


/*
* Partie REGLEMENT
*/

// validation du prélevement automatique
function valid_prelevement_automatique(url) {
	alert("Un mail vient d'etre envoyé au GIE !\n(Raison soc + nom comm + cob client ; signature + cob fe)");
	document.location.href = url; 
}

// ouverture du pop-up pour la saisie de coordonne d'une carte de paiement
function open_popup_carte_paiement(url) {
	window.open(''+url+'', 'cartepaiement', 'width=380, height=330, resizable=yes');
}

// confirme l'enregistrement du premier paiement d'un forfait
function submit_saisie_reglement(montant_initial, url_popup_cartepaiement) {
	var mode_rglt = document.reglement.mode_reglement.value;
	if (mode_rglt == 4)	{
		open_popup_carte_paiement(url_popup_cartepaiement); // on ouvre le popup de saisie des coordonnes de carte de paiement si ce mode est selectionne
	} else {
		var montant_saisi = document.reglement.montant.value;
		if (montant_saisi != montant_initial) {
			check = confirm('Attention! Le montant saisi ne correspond pas au montant du bon de réglement.\nEtes-vous certain de vouloir continuer ?');
		} else {
			check = true;
		}
		if (check == true)
			document.reglement.submit(); 
	}
}


// *
// Div du code couleurs des forfaits
// *
function ShowCodeCouleur() {
	var tableau = '<table border="0" cellpadding="0" cellspacing="0" class="fonblanc"><tr><td align="center" valign="top"><table width="100%" border="0" cellpadding="0" cellspacing="2" class="bordurebleufonce"><tr valign="middle" class="txtbleu"><td colspan="5" align="center" class="txtbleu_grandgras">Le code couleur des forfaits</td></tr><tr align="center" valign="middle"><td colspan="5" valign="top"><table width="100%" height="1" border="0" cellpadding="0" cellspacing="0"><tr><td align="center" valign="top" class="fonbleufonce"><img src="../../../images/invisible.gif" width="1" height="1"></td></tr></table></td></tr><tr valign="middle" class="fongrisClair"><td align="right" nowrap class="txtvert"><u>vert</u> --&gt;</td><td align="left" class="txtvert">forfait d\'<strong>essai</strong></td><td width="1" height="1" rowspan="6" align="center" valign="top" class="fonbleufonce"><img src="../../../images/invisible.gif" alt="" width="1" height="1"></td><td align="right" nowrap class="txtbleufonce"><u>bleu</u> --&gt;</td><td align="left" class="txtbleufonce">forfait <strong>actif</strong></td></tr><tr valign="middle" class="fongrisClair"><td align="right" nowrap class="txtvert"><u><strong>vert gras</strong></u> --&gt;</td><td align="left" class="txtvert">forfait d\'<strong>essai en attente de<br>validation</strong>(en forfait actif)</td><td align="right" nowrap class="txtbleufonce"><u><strong>bleu gras</strong></u> --&gt;</td><td align="left" class="txtbleufonce">forfait <strong>actif en attente de modification </strong>(avenant en attente)</td></tr><tr valign="middle" class="fongrisClair"><td align="right" nowrap class="txtvert"><u><strike>vert barr&eacute;</strike></u> --&gt;</td><td align="left" class="txtvert">forfait d\'<strong>essai r&eacute;sili&eacute;</strong></td><td align="right" nowrap class="txtbleufonce"><strike><u>bleu barr&eacute;</u></strike> --&gt;</td><td align="left" class="txtbleufonce">forfait <strong>actif r&eacute;sili&eacute;</strong></td></tr><tr valign="middle" class="fongrisClair"><td align="right" nowrap class="txtbleufonce"><span class="txtbleugras"><u>gras</u> --&gt;</span></td><td align="left" class="txtbleufonce"><span class="txtbleu">forfait <strong>suspendu</strong></span></td><td align="right" nowrap><span class="txtrouge"><u>rouge</u> --&gt;</span></td><td align="left"><span class="txtrouge">forfait en <strong>attente de validation</strong> (demande de souscription)</span></td></tr><tr valign="middle" class="fongrisClair"><td align="right" nowrap class="txtbleu"><u>normal</u> --&gt;</td><td align="left" class="txtbleu"><span class="txtbleu">forfait <strong>refus&eacute;</strong></span></td><td align="right" nowrap><span class="txtorange"><u>orange</u> --&gt;</span></td><td align="left"><span class="txtorange">forfait en <strong>attente de premier paiement</strong></span></td></tr><tr valign="middle" class="fongrisClair"><td align="right" nowrap class="txtbleu"><strike><u>barr&eacute;</u></strike> --&gt;</td><td align="left"><span class="txtbleu">forfait <strong>annul&eacute;</strong></span></td><td align="right" nowrap>&nbsp;</td><td align="left"><span class="txtbleu"></span></td></tr></table></td></tr></table>';
	document.getElementById("CodeCouleur").innerHTML = tableau;
	document.getElementById("CodeCouleur").style.visibility = "visible";
}
function UnshowCodeCouleur() {
	document.getElementById("CodeCouleur").style.visibility = "hidden";
}


// *
// Facturation
// *
function open_popup_recuperer_envoyer_facture(url) {
	window.open(''+url+'', '', 'width=380, height=300, resizable=yes');
}
function solder_facture(url) {
	var res;
	res = confirm('Etes vous sur de vouloir enregistrer le paiement de cette facture ?');
	if (res)
		document.location.href = url;
}


// *
// Messages
// *
function open_popup_visualisation_message(url) {
	window.open(''+url+'', 'visualisation_message', 'width=400,height=300,resizable=yes');
}
function open_popup_saisie_message(url) {
	window.open(''+url+'', 'saisie_message', 'width=400,height=380,resizable=yes');
}


// *
// Phases des ventes (ouvre le pop-up de la légende des phases des ventes)
// *
function open_popup_phase_vente(url) {
	window.open(url, 'phasevente', 'width=500, height=600, resizable=yes, scrollbars=yes');
}


// *
// Soumission de BUGS
// *
// ouvre le pop-up pour soumettre un bug
function open_popup_soumettre_bug(url) {
	window.open(url, 'bug', 'width=380, height=380, resizable=yes, scrollbars=no');
}
// verifie si le champ du message n'est pas vide avant de soumettre le formulaire de bug
function submit_bug() {
	if(document.form.message.value!='')
		document.form.submit();
	else
		alert("Vous n'avez pas saisi de texte !");
}


// *
// Activation de rappel sur un client
// *
// desactive une alerte sur un client
function desactive_rappel_client(url) {
	res = confirm('Etes-vous sûr de vouloir annuler ce rappel ?');
	if (res) {
		document.location.href = url;
	}
}
// verifie si le champ de date n'est pas vide avant de soumettre le formulaire de rappel
function active_rappel_client() {
	if(document.form.date_rappel.value!='') {
		document.form.submit();
		alert("Votre demande a bien été prise en compte.");
	} else {
		alert("Vous devez préciser une date !");
	}
}


// *
// Lettres (mailing)
// *
// verifie le formulaire de soumission de lettres aux prospects/clients
function submit_lettres() {
	if (!lettres_check_envoi()) {
		return false;
	}
	if(document.lettre.texte_mail.value=='') {
		res = confirm("Vous n'avez pas saisi de texte pour accompagner le mail\nVoulez-vous continuer ?");
		if (res) {
			submit_lettres_ok();
		} else {
			return false;
		}
	} else {
		submit_lettres_ok();
	}
}


// ouvre le pop-up pour saisir la raison de la resiliation d'un forfait
function open_popup_resilier_forfait(url) {
	window.open(''+url+'', '', 'width=380, height=350, resizable=yes, scrollbars=no');
}

// ouvre le pop-up pour l'envoi de document par mail ou fax
function open_popup_envoyer_document(url) {
	window.open(''+url+'', '', 'width=380, height=300, resizable=yes, scrollbars=no');
}

// confirmation de l'enregistrement du premier paiement d'un forfait
function check_enregistrement(url)  {
	check = confirm('Etes-vous certain de vouloir enregistrer le premier paiement concernant ce forfait ?');
	if (check == true)
		document.location.href = url; 
}

// ouvre le pop-up pour l'afichage d'un article de la revue de presse
function open_popup_article(url,img) {
	image = new Image();
	image.src = img;
	//alert(image.width + " x " + image.height + " Pixel");
	width = image.width + 100;
	height = image.height + 170;
	if (image.width < 200) {
		width = width + 150;
	}
	if (image.height < 100) {
		height = height + 50;
	}
	window.open(''+url+img+'', 'article', 'width='+width+',height='+height+'status=yes,resizable=yes,scrollbars=auto');
}

// ouvre le pop-up pour l'upload d'un document
function open_popup_uploader_document(url, datedeffet) {
	if (datedeffet=="datedeffet") {
		window.open(''+url+'', '', 'width=380, height=420, resizable=yes, scrollbars=no');
	} else {
		window.open(''+url+'', '', 'width=380, height=300, resizable=yes, scrollbars=no');
	} 
}


// GESTION DES COORDONNEES BANCAIRES

// ouverture du pop-up d'edition / d'enregistrement
function open_cob_popup(url) {
	window.open(''+url+'', '', 'width=430, height=450, resizable=yes, scrollbars=no, menubar=no, toolbar=no');
}

// ouverture du pop-up d'edition / de suppression d'une DAP attaché à un compte
function open_dap_popup(url) {
	window.open(''+url+'', '', 'width=430, height=380, resizable=yes, scrollbars=no, menubar=no, toolbar=no');
}

//
function open_google_map(url,event) {
	// pour eviter d'afficher la ligne comme cliquée
	if(event != undefined) {
		 Event.stop(event);
	}
	var gmap = window.open(url);gmap.focus();
}

// suppression d'une coordonnée banquaire
function supprimer_cob(url) {
	var res;
	res = confirm('Etes-vous sur de vouloir supprimer définitivement cette coordonnée ?');
	if (res)
		document.location.href = url;
}

// ************************************************************************
//****** MASTER OPERATEUR **********
// ************************************************************************

// fonction prévenant si un nouveau fichier d'annonces a été uploadé
function veille_annonces(url, confirmer) {
	if (confirmer==true)
		res = confirm("Il reste des annonces a valider\nVoulez-vous les voir maintenant?");
	if (confirmer==false)
		res = true;
	if (res) {
			window.open(''+url+'', 'veille', 'width=430, height=650, resizable=yes, scrollbars=auto, menubar=no, toolbar=no');
			//location.reload();
		}
}

function delayedGo(url,time){
	setInterval('window.location=\''+url+'\'',time);
}


function dateFrValid(field) {
	var regex = new RegExp("^[0-9]{2}/[0-9]{2}/[0-9]{4}$");
	var date = field.value;
	if (field.value != '' && !regex.test(date)) {
		alert('La date doit être au format jj/mm/aaaa');
		focus_and_select(field);
		return false;
	}
	return true;
}

function toggleElement(id, state) {
	if (id.tagName) {
		var el = id;
	} else {
		var el = document.getElementById(id);
	}
	if (state) {
		if (state  == 'show') {
			el.style.display = 'block';
		} else if (state == 'hide') {
			el.style.display = 'none';
		}
	} else {
		if (el.style.display != 'block') {
			toggleElement(id, 'show');
		} else {
			toggleElement(id, 'hide');
		}
	}
	return el.style.display;
}

function toggleElements(ids,state) {
	for(var i=0 ; i<ids.length; i++) {
		var id = ids[i];
		var el = document.getElementById(id);
		if (state) {
			if (state  == 'show') {
				el.style.display = 'block';
			} else if (state == 'hide') {
				el.style.display = 'none';
			}
		} else {
			if (el.style.display == 'none') {
				toggleElement(id, 'show');
			} else {
				toggleElement(id, 'hide');
			}
		}
	}
}

function toggleShadeElement(id,state) {
	var el = document.getElementById(id);

	if (!el.oldWidth) {
		el.oldWidth = getStyle(el, 'width');
	}
	if (!el.oldHeight) {
		el.oldHeight = getStyle(el, 'height');
	}
	if (state) {
		if (state  == 'show') {
			el.style.visibility = 'visible';
			el.style.width = el.oldWidth;
			el.style.height = el.oldHeight;
		} else if (state == 'hide') {
			el.style.visibility = 'hidden';
			el.style.height = '0px';
		}
	} else {
		if (el.style.visibility == 'hidden') {
			toggleShadeElement(id, 'show');
		} else {
			toggleShadeElement(id, 'hide');
		}
	}
}


/*function toggleElements(idOn, idOff) {
	on = document.getElementById(idOn);
	off = document.getElementById(idOff);
	on.style.display = 'block';
	off.style.display = 'none';
}*/

function toggleElementWithEffect(id,state) {
	el = document.getElementById(id);
	if(state) {
		if(state  == 'show') {
			new Effect.Appear(el)
		}else if(state == 'hide') {
			el.style.display = 'none';
			
		}
	}else{
		
		if(el.style.display == 'none') {
			new Effect.Appear(el);
		} else {
			el.style.display = 'none';
		}
	}
}

function toggleCheckbox(id) {
	el = document.getElementById(id);
	if(el.checked) {
		el.checked = false;
	} else {
		el.checked = true;
	}
	return false;
}

isIE = document.all ? true : false;

function $(name) {
	var obj;
	if (name!="") {
		if (document.getElementById) {
			obj = document.getElementById(name);
		} else if (document.all) {
			obj = document.all[name];
		} else if (document.layers) {
			obj = document.layers[name];
		}
		return obj;
	}
	return false;
}

function rolloverTable(id, classOver,classClick) {
	var trs = $(id).getElementsByTagName('tr');
	for (var i = 0; i < trs.length; i++){
		switchClass(trs[i],classOver,classClick);
	}
}

function checkboxArrayAction(master, formId){
	f = document.getElementById(formId);
	len = f.elements.length;
	var i=0;
	while(i!=len) {
		el = f.elements[i];
		if (el.type=='checkbox' && el.id.substring(0,2) == 'cb') {
			el.checked = master.checked;
		}
		i++;
	}
}


optionSelected = function (){
	select.style.display = 'none';
	tmp = document.getElementById('input' + spanId).value;
	span.innerHTML += '<img src="../../images/loading.gif"/>';
	input = document.getElementById('input' + spanId);
	
	val = select.options[select.selectedIndex].innerHTML;
	val = val.replace(/(.*)\((.*)\)/, '$2 $1');
	
	input.value = val;
	var mydata = 'rue_ug_id='+ select.options[select.selectedIndex].value;
	var ajax2 = new sack(urlSave);
	ajax2.runAJAX(mydata);
	ajax2.onEnd = function() {
		span.innerHTML = val;
		span.onclick = rueClicked;
		fadeIt(spanId, '#00FF00');
	}
};

rueChanged = function () {
	if(input.value.length >= 3) {
		var mydata = 'val='+input.value;
		ar = new Array();
		var ajax = new sack(urlFetch);
		ajax.execute = true;
		ajax.runAJAX(mydata);
		ajax.onEnd = function() {
			if(ar.length > 0) {
					
				tmp = document.getElementById('input' + spanId).value;
				if(!document.getElementById('select' + spanId)) {
					span.innerHTML += '<select id="select' + spanId + '" class="completionBox"></select>';
					select = document.getElementById('select' + spanId);
				}
				select.style.display = 'block';
				input = document.getElementById('input' + spanId);
				input.value = tmp;
				input.onchange = rueChanged;
				input.onkeypress = onKeyPressed;
				
				
				select.setAttribute('autocomplete', 'OFF');
				select.options.length = 0;
				for(var i=0;i < ar.length; i++) {
					ar[i].onclick = optionSelected;
					select.options[select.options.length] = ar[i];
				}
				select.selectedIndex = 0;
				if(select.options.length >= 10) {
					select.size = 10;
				} else {
					select.size = select.options.length;
				}
				
				select.focus();
				select.onkeypress = function (event) {
					if (!event) {
						event = window.event;
					}
					switch (event.keyCode) {
						case 13:
							select.style.display = 'none';
							optionSelected.call();
						break;
						case 27:
							select.style.display = 'none';
							input.focus();
							input.onchange = onKeyPressed;
						break;
					}
				};	
				
			} else {
				input.select();
				fadeIt('input' + spanId, '#FF0000');
				
			}
		};
			
	} else {
		fadeIt('input' + spanId, '#FF0000');
	}
};

onKeyPressed = function (event) {
	if (!event) {
		event = window.event;
	}
	switch (event.keyCode) {
		case 13:
			rueChanged.call();
		break;
		case 27:
			span.innerHTML = oldHtml;
			span.onclick = rueClicked;
		break;
	}
};	

rueClicked = function () {
	spanId = 'rueNom';
	span = document.getElementById(spanId);
	oldHtml = span.innerHTML;
	span.innerHTML = '<input class="editInPlace" type="text" id="input' + spanId + '" value="" size="' + oldHtml.length + '"/>';
	span.onclick = function(){};
	input = document.getElementById('input' + spanId);
	input.setAttribute('autocomplete','OFF');
	input.focus();
	input.onchange = rueChanged;	
	input.onkeypress = onKeyPressed;
}


function enableCompletion2(spanId, urlF, urlS) {
	urlFetch = urlF;
	urlSave = urlS;
	var span = document.getElementById(spanId);
	span.onclick = rueClicked;
	
}

function fadeIt(id, color) {
	if(color) {
		Fat.fade_element(id, 15, 1000, color);
	} else {
		Fat.fade_element(id, 15, 1000, "#ff6600");
	}
}

/* Gestion des cookies -- BEGIN */
function writeToCookie(name, value) {
	var argv = writeToCookie.arguments;
	var argc = writeToCookie.arguments.length;
	var expires = (argc > 2) ? argv[2] : null;
	var path = (argc > 3) ? argv[3] : null;
	var domain = (argc > 4) ? argv[4] : null;
	var secure = (argc > 5) ? argv[5] : false;
	document.cookie = name + "=" + escape(value) +
		((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
		((path == null) ? "" : ("; path=" + path)) +
		((domain == null) ? "" : ("; domain=" + domain)) +
		((secure == true) ? "; secure" : "");
}

function getCookieVal(offset) {
	var endstr=document.cookie.indexOf (";", offset);
	if (endstr == -1) {
		endstr = document.cookie.length;
	}
	return unescape(document.cookie.substring(offset, endstr));
}

function readCookie(name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {
		var j = i + alen;
		if (document.cookie.substring(i, j)==arg) {
			return getCookieVal(j);
		}
		i = document.cookie.indexOf(" ", i) + 1;
		if (i==0) {
			break;
		}
	}
	return null;
}
/* Gestion des cookies -- END */

function getStyle(el,prop) {
	if (window.getComputedStyle) {
		var y = window.getComputedStyle(el, null).getPropertyValue(prop);
	} else if (el.currentStyle) {
		// On transforme : font-size -> fontSize.
		var p = prop.replace(/\-(.)/, "' + '$1'.toUpperCase() + '");
		var y = eval('el.currentStyle.' + eval("'" + p + "'"));
	}
	return y;
}


function checkCheckboxes (id) {
	all = document.getElementsByName(id);
	ok = false;
	for(i=0;i< all.length; i++) {
		if(all[i].checked ){
			ok = true;
			break;
		}
	}
	return ok;
}



var lastShown;
function switchTo(id){
	//~ masque l'ancien onglet
	if($(lastShown)){
		Element.hide(lastShown);
		Element.removeClassName('li_'+lastShown,'selected');
	}
	//~ affiche l'onglet courrant
	if($(id)){
		Element.show(id);
		Element.addClassName('li_'+id,'selected');
		//~ garde une trace de l'element courant pour appel ulterieur
		lastShown = id;
	}
}

var lastShown2;
function switchTo2(containerId, id) {
	li = $(id);
	divId = id.replace(containerId + '_li_', '');
	el = $(divId);
	if(el) {
		if(lastShown2 == divId) {
			return;
		}
		el.style.display = 'block';
		addClass(li, 'selected');
		lastDiv2 = $(lastShown2);
		if(lastDiv2) {
			lastDiv2.style.display = 'none';
			li = $(containerId + '_li_' + lastShown2);
			removeClass(li, 'selected');
		}
		lastShown2 = divId;
	}
}

function pagesJaunesLink(pjId) {
	if(isNaN(pjId)){
		pjId = this.id
	}
	
	var rue_numero = '';
	if ($('rue_numero').innerHTML != 'n°') {
		rue_numero = $('rue_numero').innerHTML;
	}
	var nom_voie = '';
	if ($('typeRueNom').innerHTML != '-') {
		nom_voie += $('typeRueNom').innerHTML;
	}
	if ($('rueNom').innerHTML == 'nom de la rue') {
		alert('Nom de rue incorrect!');
		return;
	} else {
		nom_voie += '+' + $('rueNom').innerHTML;
	}
	nom_voie = nom_voie.replace(/ /g, '+').toUpperCase();
	var type = rue_numero ? 'f' : 's';
	var url = 'http://photos.pagesjaunes.fr/h/ad?type=' + type + ';ville=' + pjId + ';nomvoie=' + nom_voie + ';numero=' + rue_numero + ';templ=pjphoto_frame;templ_photo=pjphoto_photo;fwdto=/1/f/;interactif=1';
	window.open(url, '', 'width=800, height=600');
}

function relevantChildNode(el, index) {
	var ind = 0;
	for(var i=0; i<el.childNodes.length; i++) {
		if (el.childNodes[i].tagName) {
			if (ind == index) {
				return el.childNodes[i];
			}
			ind++;
		}
	}
	return false;
}


/**
* really reset a form even if there are default values
* @param form 				 js form object to reset
* @param skipped       list of elements names to skip separated by ',' 
* @param starton       name of the element from wich we start reset .
* @param endon         name of the element after wich we stop reseting. 
* @param evenhidden    put this t true if you want to reset hidden values too
* @param values        array of default values to reset elements to 
*/
function form_realreset(form,skipped,starton,endon,evenhidden,dflts){
	var undef;
	
	var started = (starton?false:true);
	// loop all form elements
	for(i=0;i<form.length;i++){
		var el = form.elements[i];
		// skip firsts elements if needed
		if(! started){
			if( el.name == starton )
				started = true;
			else
				continue;
		}
		//skip skipped elements 
		if( skipped && skipped.indexOf(el.name) > -1 )
			continue;
		
		//reset elements
		switch(el.type){
			case 'text':
			case 'file':
			case 'password':
			case 'textarea':
			case 'text':
				el.value = dflts[el.name]!=undef?dflts[el.name]:'';
				break;
			case 'radio':
			case 'checkbox':
				el.checked= el.defaultChecked?true:false;
				break;
			case 'select-one':
			case 'select-multiple':
				if(dflts[el.name] != undef){ //look for option with the same value
					for(x=0;x < el.length;x++){
						if(el.options[x].value == dflts[el.name]){
							el.selectedIndex = x;
							break;
						}
					}
				}else{ // set index to 0
					el.selectedIndex = 0;
				}
				break;
			case 'hidden':
				if(evenhidden) el.value = dflts[el.name]!=undef?dflts[el.name]:'';
				break;
		}
		//check for stop point
		if( endon && endon==el.name)
			break;
	}
}

/* FORMATAGE DES DONNEES*/
/*
	number_format as in PHP made by Mathias Bynens <http://mathiasbynens.be/> 
	@param float val number to format
	@param int   dec number of decimal 
	@param str   decPoint string to use a decimal separator
	@param str   thouPoint string to use a thousand separator
	@return string
*/
function number_format(val,dec, decPoint, thouPoint){
	val = Math.round(val * Math.pow(10, dec)) / Math.pow(10, dec);
	e = val + '';
	f = e.split('.');
	if(!f[0]) f[0] = '0';
	if(!f[1]) f[1] = '';
	if(f[1].length < dec){
		g = f[1];
		for(i = f[1].length + 1; i <= dec; i++) {
			g += '0';
		}
		f[1] = g;
	}
	if(thouPoint != '' && f[0].length > 3) {
		h = f[0];
		f[0] = '';
		for(j = 3; j < h.length; j += 3) {
			i = h.slice(h.length - j, h.length - j + 3);
			f[0] = thouPoint + i +  f[0] + '';
		}
		j = h.substr(0, (h.length % 3 == 0) ? 3 : (h.length % 3));
		f[0] = j + f[0];
	}
	decPoint = (dec <= 0) ? '': decPoint;
	return f[0] + decPoint + f[1];
}

function dateus2fr(d){
	if(! d) return '';
	d = d.split(d[4]);
	return d.reverse().join('/');
}

