isCheckAllCheckbox = false;
editor_timer = false;
validDelStrict = true; //Validation chaque éléments, sinon seulement les conteneur non vide
//cle = '';
page = '';
langue = '';
langue_admin = '';

innovaeditor = null;

/**
 * Recoit en parametre la référence au checkboxs.
 * ne pas mettre this mais plutôt le nom complet vers l'objet.
 */
function checkAllCheckbox(box){
   isCheckAllCheckbox = (isCheckAllCheckbox == false) ? true : false;
   if(typeof(box) != 'undefined'){
      if(typeof(box.length) != 'undefined'){
         for(i=0; i < box.length; i++){
            box[i].checked = isCheckAllCheckbox;
         }
      }
      else{ box.checked = isCheckAllCheckbox; }
   }
}

/**
 * Cette fonction est appelé lors de la suppresion d'un éléments dans la page index.cgi.
 * Il recoit en parametre, Une référence au formulaire, le nombre d'éléments que celui-ci contient, le nom du type de l'élément.
 * Retourne <code>true</code> si l'élément peut être supprimer, <code>false</code> sinon.
 */
function validDel(ihref, nbrElem, typeElem, langueAdmin){
   delall = false

   if(typeElem == 'Lien' || typeElem == 'Galerie')
      delall = true

   if(validDelStrict || nbrElem > 0){
      text = "L'élément va être supprimé !";
      if(langueAdmin == 'eng') { text = "The element will be deleted !"; };
      if(confirm(text)){
         text = "Les éléments contenus dans l'élément que vous supprimez vont être supprimés !";
         if(langueAdmin == 'eng') { text = "All the elements in the element that will be deleted will be deleted !"; };

         if(nbrElem > 0 && !delall && confirm(text))
            delall = true
         window.location.href = ihref + '&CMS_1delall=' + delall
      }
   }
   else
      window.location.href = ihref + '&CMS_1delall=' + delall
}

/**
 * GetCookie(name,[defaultValue])
 * retrieves the value  of a cookie (returns null if it doesn't exist)
 */
function GetCookie (name, d) {
	if (!d) var d = null;
	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) {
			var endstr = document.cookie.indexOf (";", j);
			if (endstr == -1) endstr = document.cookie.length;
			return unescape(document.cookie.substring(j, endstr));
 		}
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return d;
}

/**
 * SetCookie(name, value, [expires])
 * sets the cookie name with value
 * (takes optional argument expires which is the time in hours till it expires)
 */
function SetCookie (name, value, expires,dontEscape) {
	if (expires) {
		var exp = new Date();
		exp.setTime(exp.getTime() + (expires*60*60*1000));
		expires = exp;
	}
	var escapedValue = value;
	
	if (!dontEscape)
	  escapedValue = escape(escapedValue);
	  
	document.cookie = name + "=" + escapedValue + ((expires == null) ? "" : ("; expires=" + expires.toGMTString()));
}

/**
 * DeleteCookie(name)
 * removes the cookie "name"
 */
function DeleteCookie (name) {
	var exp = new Date();
	exp.setTime (exp.getTime() - 1000);
	var cval = GetCookie (name);
	document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}

/**
 * Effectue la validation des champs pour la référence au formulaire passé en parametre.
 * Il retourne <code>true</code> si le formulaire est valide, <code>false</code> sinon.
 * - iform, nom du formulaire a valider
 * - msgerr, le message d'erreur general a afficher avant le(s) message(s) particulier(s) ("" n'affiche pas de message general)
 * - maxmsg, le nombre de message maximum a afficher
 * - focus, si "1", set le focus sur le premier champs valide qui comporte une erreur
 * - Le select-multiple est maintenant supporté
       Dans le cas d'un SELECT multiple, la valeur testée sera le NOMBRE D'ITEMS SELECTIONNÉS ayant un VALUE non NULL 
       donc validés préférablement en type 'int'. On pourrait par exemple valider "Entre 1 et 5 valeurs sélectionnées"
 * @todo
 * - Si iform est undef, valider tout les formulaire de la page
 * - Faire la validation est éléments radio
 */ 
function validForm(iform,msgerr,maxmsg,focus){

   if(typeof(msgerr) != 'undefined'){ errBase = msgerr; }
   else{ 

    var langueAdmin;
    var cookieAdmin = GetCookie('admin');

    if (!cookieAdmin)
    {
        if (iform.langue)
            langueAdmin = iform.langue.value;
        else
            langueAdmin = 'fra';
    }
    else
    {
        langueAdmin = cookieAdmin.substring(cookieAdmin.length - 3);
    }
    
    if (langueAdmin == 'eng')
        errBase = 'An error prevents submitting the form.\n\n';
    else
        errBase = 'Une erreur empêche de soumettre le formulaire.\n\n';
   };

   var err = '';
   var iregx = new RegExp();
   var nbrerr = 0;
   var fieldfocus = '';

   for(i=0; i < iform.length; i++){
      iregx.compile('^V_.*$','');
      //si le nom du champ match une validation
      //c'est qu'une validation doit être effectué.
      if(iregx.test(iform.elements[i].name)){
         vername = new String(iform.elements[i].name);
         ver = new String(iform.elements[i].value);
         ver = ver.split('|',5);
         valname = vername.substr(2, vername.length - 2);
         valref = iform.elements[valname];
				 val = undefined;
				 
         switch(valref.type){
            case 'text' : case 'hidden' : case 'file' : case 'textarea' : case 'password' :
               val = valref.value;
               break;
               
            case 'checkbox' : case 'radio' :
							 if (valref.checked)
							 {
								 val = valref.value;
							 }
               break;
               
            case 'select-one' :
               val = valref.options[valref.selectedIndex].value;
               break;

            case 'select-multiple' :
	            tmp = new Array();
	            for(var j = 0; j < valref.options.length; j++)
	            {
	              if(valref.options[j].selected && valref.options[j].value != '')
	              {
	                tmp.push(valref.options[j].value);
	              }
	            }
	            val = tmp.join();
           		break;

            default : 
            	if (typeof(valref.length) != "undefined")
               for (var j = 0; j < valref.length; j++)
               {
								 if (valref[j].type == "radio" && valref[j].checked)
								 {
									 val = valref[j].value;
								 }
               }
               break;
         }

         if(typeof(val) == 'undefined') val = '';

         if(ver[1] == 1 || val.length > 0){
            //Effectuer la validation sur le champs selon les parametres
            switch(ver[0]){
               case 'char' :
                  if((ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){ 
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  };
                  break;
               case 'date' :
                  iregx.compile('^[0-9]{2}-[0-9]{2}-[0-9]{4}$','');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  else {
                     var day = val.substr(0,2);
                     var month = val.substr(3,2);
                     var year = val.substr(6,4);
                     var leap = 0;

                     if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
                        leap = 1;
                     };

                     if( (year <= 0) || ((month < 1) || (month > 12)) || (day < 1) ||
                         ((month == 2) && (leap == 1) && (day > 29)) || ((month == 2) && (leap != 1) && (day > 28)) ||
                         ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) ||
                         ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11")))
                        ) {
                        if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                        nbrerr += 1;
                        if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                     };
                  };
                  break;
               case 'date2' :
                  iregx.compile('^[0-9]{4}(-|\/)[0-9]{2}(-|\/)[0-9]{2}$','');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  else {
                     var day = val.substr(8,2);
                     var month = val.substr(5,2);
                     var year = val.substr(0,4);
                     var leap = 0;

                     if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
                        leap = 1;
                     };

                     if( (year <= 0) || ((month < 1) || (month > 12)) || (day < 1) ||
                         ((month == 2) && (leap == 1) && (day > 29)) || ((month == 2) && (leap != 1) && (day > 28)) ||
                         ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) ||
                         ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11")))
                        ) {
                        if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                        nbrerr += 1;
                        if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                     };
                  };
                  break;
               case 'doc' :
                  iregx.compile('^[a-z0-9\-_/.]+\.(doc|zip|pdf|xls|txt|pps|ppt|avi|wmv|wma)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'domain' :
                  iregx.compile('^[a-z|0-9|-]*$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'email' :
                  iregx.compile('^[a-z0-9]+[a-z0-9._-]+@[a-z0-9._-]+[.][a-z]{2,6}$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'hexa' :
                  iregx.compile('^(#?[0-9|a-f]{0,6})?$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'hour' :
                  iregx.compile('^[0-9]{1,2}:[0-5][0-9]$','');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  else {
                     if(val.length == 4) { val = '0' + val; }
                     var hour = val.substr(0,2);
                     var min = val.substr(3,2);
                     if( (hour < 0 || hour > 24) || (min < 0 || min >59) ) {
                        if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                        nbrerr += 1;
                        if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                     };
                  }
                  break;
               case 'img' :
                  iregx.compile('^[a-z0-9\-_/.]+\.(gif|jpg|jpeg|png)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'int' :
                  iregx.compile('^[0-9]+$','');
                  if(!iregx.test(val) || (parseInt(ver[2]) > 0 && parseInt(val) < parseInt(ver[2])) || (parseInt(ver[3]) > 0 && parseInt(val) > parseInt(ver[3]))){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'multi' :
                  iregx.compile('^[a-z0-9\-_/.]+\.(swf|rm|ram|mp3|mpg|mpeg|avi|wmv|mov|wma)$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'passwd' :
                  eval('val_confirm = iform.' + valname + '_confirmation.value;');
                  if(val != val_confirm || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'pct' :
                  iregx.compile('%$','');
                  if( iregx.test(val) ) {
                     val = val.substr(0,val.length-1);
                     ver[3] = 100;
                  };
                  iregx.compile('^[0-9]*$','');
                  if(!iregx.test(val) || (parseInt(ver[2]) > 0 && parseInt(val) < parseInt(ver[2])) || (parseInt(ver[3]) > 0 && parseInt(val) > parseInt(ver[3]))){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               case 'regexp' :
                  iregx.compile(ver[2],'');
                  if(!iregx.test(val)){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  };
                  break;
               case 'user' :
                  iregx.compile('^[a-z|0-9|_|.|-]*$','i');
                  if(!iregx.test(val) || (ver[2] > 0 && val.length < ver[2]) || (ver[3] > 0 && val.length > ver[3])){
                     if( ! /^\d+$/.test(maxmsg) || nbrerr < maxmsg ) { err += ver[4] + '\n'; };
                     nbrerr += 1;
                     if( fieldfocus == '' && focus ) { fieldfocus = valname; };
                  }
                  break;
               default : break;
            }
         }
      }
   }

   if(err == ''){ return true; }
   else{
      alert(errBase + err + '\n\n'); 
      if( fieldfocus != '' && focus ) { i = ''; if (typeof(iform.elements[fieldfocus].length) != "undefined") i = "[0]"; eval('document.' + iform.name + '.elements["' + fieldfocus + '"]'+i+'.focus();'); };
      return false;
   }
}


var mlstimeout = 300
var timeoutpopup = null   //NE DOIT PAS ETRE GLOBAL !!!
var collerOff = '<span class="mnu_option_off">Coller</span>'

function Mnu(id){
   this.id = id
   this.bd_id = null
   this.page = null
   this.idc = null
   this.ordre = null
   this.type = null
   this.typeMsg = null
   this.imgSrc = null
   this.nbrc = null
   this.section = null
   this.langue = null
   this.langueAdmin = null

   var txt = new Array('Édition','Ajouter','Modifier','Supprimer','Copier','Couper','Coller');

   this.getMnu = function(){
     if(this.langueAdmin == 'eng') { txt = new Array('Edit','Add','Modify','Delete','Copy','Cut','Paste'); };

      var out = ''
      priv = arguments
            
      //Permet de restraindre les types d'éléments d'ajout/modif pour les Menu et Images de Galeries
      if (this.type == 'Menu' || this.type == 'GalerieImg') addType = this.type;
      else addType = '';
			
      var btn = new Array(
         new Array(
            new Array(txt[0],'#','return false;'),
            new Array(txt[1],'element_modify.cgi?CMS_1page=' + this.page + '&CMS_1idc=' + this.idc + '&CMS_1ordre=' + this.ordre + '&CMS_1aed=a&CMS_1section=' + this.section + '&CMS_1langue=' + this.langue + '&CMS_1type=' + addType,''),
            new Array(txt[2],'element_modify.cgi?CMS_1page=' + this.page + '&CMS_1idc=' + this.idc + '&CMS_1ordre=' + this.ordre + '&CMS_1type=' + this.type + '&CMS_1aed=e&CMS_1section=' + this.section + '&CMS_1langue=' + this.langue,''),
          	new Array(txt[3],'#','if(GetCookie(\'ec\') == ' + this.ordre + '){SetCookie(\'ec\',\'\')}; validDel(\'element_aed.cgi?CMS_1page=' + this.page + '&CMS_1idc=' + this.idc + '&CMS_1ordre=' + this.ordre + '&CMS_1type=' + this.type + '&CMS_1aed=d&CMS_1section=' + this.section + '&CMS_1langue=' + this.langue + '&CMS_1nbrc=' + this.nbrc + '\', ' + this.nbrc + ', \'' + this.type + '\', \'' + this.langueAdmin + '\');return false;')
         ),
         new Array(
            new Array(txt[4],'#','SetCookie(\'ecargs\',\'0\');SetCookie(\'ecpage\',\'' + this.page + '\');SetCookie(\'ec\',\'' + this.bd_id + '\');showHide(\'mnu_' + this.id + '\',\'hidden\');return false;'),
            new Array(txt[5],'#','SetCookie(\'ecargs\',\'1&'+this.idc+'&'+this.nbrc+'&'+this.type+'\',undefined,1);SetCookie(\'ecpage\',\'' + this.page + '\');SetCookie(\'ec\',\'' + this.bd_id + '\');showHide(\'mnu_' + this.id + '\',\'hidden\');return false;'),
            new Array(txt[6],'element_copy.cgi?ppage=' + this.page + '&idc=' + this.idc + '&paste=' + this.ordre + '&section=' + this.section + '&langue=' + this.langue,'' )
         )
      )

      var mnuid = 'mnu_' + this.id

      if(priv.length > 0){
         out += '<table id="' + mnuid + '" class="mnu">'
         if(this.typeMsg != ''){ out += '<tr><td class="mnu_title" onmouseover="overCell(\'' + mnuid + '\',this);" onmouseout="outCell(\'' + mnuid + '\',this);">' + this.typeMsg + '</td></tr>'; }
         for(i=0;i<priv.length;i++){
            got = 0
            for(j=0;j<priv[i].length;j++){
               if(priv[i][j]){
                  out += '<tr><td id="' + mnuid + '_' + btn[i][j][0] + '" class="mnu_option" onmouseover="this.className=\'mnu_option_over\';overCell(\'' + mnuid + '\',this);" onmouseout="this.className=\'mnu_option\';outCell(\'' + mnuid + '\',this);"><a href="' + btn[i][j][1] + '" onclick="' + btn[i][j][2] + '">' + btn[i][j][0] + '</a></td></tr>'
                  got = 1
               }
            }
            if(i!=priv.length-1 && got) out += '<tr><td class="mnu_separateur"></td></tr>'
         }
         out += '</table>'

      }

      return out
   }

   return this
}

//L'objet par défaut est créer.
mnu = new Mnu();


function showHide(mnuid,visibility){
		// quand le mode Édition est actif, le menu n'apparait pas
		if (visibility == 'visible' && editor) return;
   eval('clearTimeout(timeoutpopup' + mnuid + ')')
   eval('timeoutpopup' + mnuid + ' = setTimeout(\'document.all.' + mnuid + '.style.visibility = "' + visibility + '"\', mlstimeout)')
}

function overCell(mnuid, cell){
   eval('clearTimeout(timeoutpopup' + mnuid + ')')
}

function outCell(mnuid, cell){
   eval('timeoutpopup' + mnuid + ' = setTimeout("showHide(\'' + mnuid + '\',\'hidden\')", mlstimeout)')
}

function disableElems()
{
	var tags = new Array('A', 'INPUT');
	
	for (var j = 0; j < tags.length; j++)
	{
		var elems = document.getElementsByTagName(tags[j]);
		
		for (i = 0; i < elems.length; i++)
		{
			elems[i].onclick = function () { if (langue_admin == 'fra') { alert('Vous êtes actuellement en mode édition.\n\nVeuillez sauvegarder vos modifications ou annuler pour retourner en mode normal.'); } else { alert('You are currently in the editing mode.\n\nPlease save your changes or cancel to go back in normal mode.'); } return false; };
		}
	}
}

function getEditorForJS(page, idc, ordre, section, langue, content)
{
	var elem = 
	'<input type=\\"hidden\\" name=\\"CMS_1page\\" value=\\"' + page + '\\" />' +
	'<input type=\\"hidden\\" name=\\"CMS_1idc\\" value=\\"' + idc + '\\" />' +
	'<input type=\\"hidden\\" name=\\"CMS_1ordre\\" value=\\"' + ordre + '\\" />' +
	'<input type=\\"hidden\\" name=\\"CMS_1aed\\" value=\\"a\\" />' +
	'<input type=\\"hidden\\" name=\\"CMS_1section\\" value=\\"' + section + '\\" />' +
	'<input type=\\"hidden\\" name=\\"CMS_1langue\\" value=\\"' + langue + '\\" />' +
	'<input type=\\"hidden\\" name=\\"CMS_1type\\" value=\\"TinyMCE\\" />' +
	'<input type=\\"hidden\\" name=\\"CMS_1p1\\" value=\\"\\" />';

	var out = '<form action=\\"element_aed.cgi\\" method=\\"post\\" id=\\"edit\\" name=\\"edit\\" style=\\"margin:0px;padding:0px;\\">' + elem + '<textarea id=\\"editor\\" name=\\"editor\\" rows=\\"40\\" cols=\\"75\\" textarea_trigger=\\"true\\">' + content + '</textarea></form>';  
	return out;
}

function getEditorForHTML(page, idc, ordre, section, langue, content,rows)
{
	if (!rows) rows = 30;
	
	var elem = 
	'<input type="hidden" name="CMS_1page" value="' + page + '" />' +
	'<input type="hidden" name="CMS_1idc" value="' + idc + '" />' +
	'<input type="hidden" name="CMS_1ordre" value="' + ordre + '" />' +
	'<input type="hidden" name="CMS_1aed" value="e" />' +
	'<input type="hidden" name="CMS_1section" value="' + section + '" />' +
	'<input type="hidden" name="CMS_1langue" value="' + langue + '" />' +
	'<input type="hidden" name="CMS_1type" value="TinyMCE" />' +
	'<input type="hidden" name="CMS_1p1" value="" />';

	var out = '<form action="element_aed.cgi" method="post" id="edit" name="edit" style="margin:0px;padding:0px;">' + elem + '<textarea id="editor" name="editor" rows="40" cols="75" textarea_trigger="true">' + replaceElem(unescape(content)) + '</textarea></form>';
	return out;
}

function moveToolbar2() {
	var toolbar = document.getElementById('toolbar');
	var ns6 = document.getElementById && !document.all;
  var ie4 = document.all;
  
	if (ie4) toolbar.style.pixelTop=document.body.scrollTop;
	else if (ns6) toolbar.style.top = window.pageYOffset;
	else eval(toolbar.top=eval(window.pageYOffset));
	
	with (toolbar.style)
	{
		position = 'absolute';
		left = '0px';
		width = '995px';
		height = '70px';
	}
	
	if (ie4 || ns6 || document.layers) eval('editor_timer = setTimeout(function(){ moveToolbar2() },0)');
}

function initEditor()
{
  document.body.style.marginTop='97px';
  tinyMCE.idCounter = 0;
	tinyMCE.addMCEControl(document.getElementById('editor'),'editor');
	editor = 1
	
	moveToolbar2();
	resizeEditor();
}

function initEditor2()
{
	document.body.style.marginTop='52px';
	innovaeditor = 1;
	
	document.getElementById('toolbar').style.width = document.body.clientWidth;
	moveToolbar();
	window.onscroll = function() { moveToolbar(); }
	window.onresize = function() { document.getElementById('toolbar').style.width = document.body.clientWidth; }
}

function moveToolbar() {
	var ns6 = document.getElementById && !document.all;
  var ie4 = document.all;
	
	var ary26 = new Array('previewoEdit1', 'tableoEdit1', 'tablecreateoEdit1', 'formoEdit1');
	var btn26 = new Array('btnPreviewoEdit1', 'btnTableEditoEdit1', 'btnTableoEdit1', 'btnFormoEdit1');
	var ary52 = new Array('styleoEdit1', 'paragraphoEdit1', 'fontnameoEdit1', 'fontsizeoEdit1', 'customtagoEdit1', 'coloroColor1oEdit1', 'coloroColor2oEdit1');
	var btn52 = new Array('btnStyleAndFormatoEdit1', 'btnParagraphoEdit1', 'btnFontNameoEdit1', 'btnFontSizeoEdit1', 'btnCustomTagoEdit1', 'btnForeColoroEdit1', 'btnBackColoroEdit1');
  
  var toolbar = document.getElementById('toolbar');
	if (ie4) { toolbar.style.pixelTop=document.body.scrollTop; }
	else if (ns6) { toolbar.style.top = window.pageYOffset; }
	else { eval(toolbar.top=eval(window.pageYOffset)); }

	for (var i = 0; i < ary26.length; i++)
	{
		var ary = document.getElementById(ary26[i]);
		if (ary && ary.childNodes[0].style.display != "none")
		{
			ary.style.left = document.getElementById(btn26[i]).offsetParent.offsetLeft;
			
			if (ie4) { ary.style.pixelTop=document.body.scrollTop+26; }
			else if (ns6) { ary.style.top = window.pageYOffset+26; }
			else { eval(ary.top=eval(window.pageYOffset+26)); }
		}
	}

	for (var i = 0; i < ary52.length; i++)
	{
		var ary = document.getElementById(ary52[i]);
		if (ary && ary.childNodes[0].style.display != "none")
		{
			ary.style.left = document.getElementById(btn52[i]).offsetParent.offsetLeft;
			
			if (ie4) { ary.style.pixelTop=document.body.scrollTop+52; }
			else if (ns6) { ary.style.top = window.pageYOffset+52; }
			else { eval(ary.top=eval(window.pageYOffset+52)); }
		}
	}
}

function resizeEditor()
{
	//cleanForm();
	//document.getElementById('mce_editor_0').style.height = document.getElementById('editor').rows*22;
}

function countLines(strtocount, cols) {
    var hard_lines = 1;
    var last = 0;
    while ( true ) {
        last = strtocount.indexOf("\n", last+1);
        hard_lines ++;
        if ( last == -1 ) break;
    }
    var soft_lines = Math.round(strtocount.length / (cols-1));
    var hard = eval("hard_lines  " + unescape("%3e") + "soft_lines;");
    if ( hard ) soft_lines = hard_lines;
    return soft_lines;
}
function cleanForm() {
    var the_form = document.getElementById('edit');
    for ( var x in the_form ) {
        if ( ! the_form[x] ) continue;
        if( typeof the_form[x].rows != "number" ) continue;
        the_form[x].rows = countLines(the_form[x].value,the_form[x].cols) +1;
    }
    //setTimeout("cleanForm();", 300);
}

function removeEditor(editor)
{
  document.body.style.marginTop='0px';

  var content;
	
	if (document.getElementById('text_'+edit_section+'.000'))
		content = document.getElementById('text_'+edit_section+'.000');
	else
		content = document.getElementById('text_central');
		
	content.innerHTML = last_text;

  modif_section = '';
  edit_section = null;
	editor = null;
}

function remove(str, tok)
{
	var i = str.indexOf(tok), result = "";

	if (i == -1) 
		return str;
		
	result += str.substring(0, i) + this.remove(str.substring(i + tok.length), tok);
	
	return result;
}

function customSave(id, content)
{	
	var ary = null;
	var doc = tinyMCE.selectedInstance.getDoc();
	var out = "";
	var skip = new Object();

	content = content.replace(/<br([^>]*)\/>/ig, '<!-- CMS:BR -->');
	doc.body.innerHTML = '<pre>'+content+'</pre>';
	var base = document.location.protocol + "//" + document.location.hostname;

	var Links = doc.getElementsByTagName('A');
	for (var a = 0; a < Links.length; a++)
		if (Links[a].href.indexOf(base) != -1)
			Links[a].href = remove(Links[a].href, base + "/cgi-bin/admin/");

	var Links = doc.getElementsByTagName('IMG');
	for (var a = 0; a < Links.length; a++)
		if (Links[a].src.indexOf(base) != -1)
			Links[a].src = remove(Links[a].src, base);

	for (var i = 0; i < doc.forms.length; i++)
	{
		var len = doc.forms[i].elements.length;
		
		for (var j = 0; j < len; j++)
		{
			if (doc.forms[i].elements[j].nodeName.match(/^(fieldset|legend)$/i))
				continue;
				
			if (!skip[doc.forms[i].elements[j].name] && (doc.forms[i].elements[j].type.match(/^(text|password|radio|checkbox|file)$/i) || doc.forms[i].elements[j].nodeName.match(/^(select|textarea)$/i)))
			{
				var input = doc.createElement("input");
				
				input.type = "hidden";
				input.name = "V_" + doc.forms[i].elements[j].name;
				input.value = doc.forms[i].elements[j].alt;
				skip[doc.forms[i].elements[j].name] = true;

				doc.forms[i].appendChild(input);
			}
		}
	}

	document.edit.CMS_1p1.value = doc.body.innerHTML;

	tinyMCE.switchClass('mce_editor_0_save', 'mceButtonDisabled');
	tinyMCE.switchClass('mce_editor_0_cancel', 'mceButtonDisabled');
}

function customCancel()
{
	eval('clearTimeout(editor_timer)');
	
	tinyMCE.removeMCEControl('editor');
	removeEditor('edit');
	window.location.reload(true);
}

function customInit(editor_id, body, doc)
{
	var base = document.location.protocol + "//" + document.location.hostname;

	var Links = doc.getElementsByTagName('A');
	for (var a = 0; a < Links.length; a++)
		if (Links[a].href.indexOf(base) != -1)
			Links[a].href = remove(Links[a].href, base + "/cgi-bin/admin/");
		
	var Links = doc.getElementsByTagName('IMG');
	for (var a = 0; a < Links.length; a++)
		if (Links[a].src.indexOf(base) != -1)
			Links[a].src = remove(Links[a].src, base);
}

function convertWord(type, content) {
	switch (type) {
		// Gets executed before the built in logic performes it's cleanups
		case "before":
			content = content.replace(/<\/?span[^>]*>/gi, "");
			content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3");
			break;

		// Gets executed after the built in logic performes it's cleanups
		case "after":
			content = content.replace(/<\/?span[^>]*>/gi, "");
			content = content.replace(new RegExp('<(\\w[^>]*) style="([^"]*)"([^>]*)', 'gi'), "<$1$3");
			break;
	}

	return content;
}

var browseWindow = null;
var browse_input_name = null;
var browse_type = null;

function fileBrowserCallBack(field_name, url, type, win) {
	// This is where you insert your custom filebrowser logic
  browseWindow = win;
  browse_input_name = field_name;
  browse_type = type;

  var path = '/';

  if (browse_type == 'file')
    path = '/doc';

  if (browse_type == 'flash')
    path = '/doc';

  else if (browse_type == 'image')
    path = '/img';


  window.open('/cgi-bin/admin/utils_browse.cgi?form=formAjout&input=CMS_1p1&path='+path,'Browse','scrollbars=0,menubar=0,toolbar=0,location=0,directories=0,status=1,resizable=1,width=650,height=350,top=100,left=100');
}

function fileBrowserChooseFile(myfile)
{
  var prefixe_filename='';
  switch(browse_type)
  {
    case 'image':
    prefixe_filename='/web/img/'
    break;
    
    case 'file':
    prefixe_filename='/cgi-bin/doc.cgi?doc='
    myfile += '&langue='+langue_admin; //'&confirm='+MD5(myfile + cle);
    break;
    
    case 'flash':
    prefixe_filename='/web/doc/'
    break;

  }

  browseWindow.document.forms[0].elements[browse_input_name].value = prefixe_filename+myfile;
  var elm = browseWindow.document.getElementById('prev');
  var elm2 = browseWindow.document.getElementById('font-preview');

  if (elm)
  {
    var src = prefixe_filename+myfile;
    src = src == "" ? src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src);

  	if (src == "")
  		elm.innerHTML = "";
  	else
  		elm.innerHTML = '<img src="' + src + '" border="0" />'
  }
  else if (elm2)
  {
    var src = prefixe_filename+myfile;
    src = src == "" ? src : tinyMCE.convertRelativeToAbsoluteURL(tinyMCE.settings['base_href'], src);

  	if (src == "")
  		elm2.innerHTML = "";
  	else
  		elm2.innerHTML = '<img src="' + src + '" border="0" />'
  }
  
	var formObj = browseWindow.document.forms[0];

	if (formObj.href.value.match(/^\/cgi-bin\/doc\.cgi/))
	{	
		with (formObj)
		{
			ispopup.checked = 1;
			popupwidth.value = 415;
			popupheight.value = 300;
			popupurl.value = formObj.href.value;
		}
	
		if (!formObj.ispopup.checked) {
			formObj.onclick.value = "";
			return;
		}
	
		var onclick = "window.open('";
		var url = formObj.popupurl.value;
	
		if (tinyMCE.getParam('convert_urls'))
			url = convertURL(url, null, true);
	
		onclick += url + "','";
		onclick += formObj.popupname.value + "','";
	
		if (formObj.popuplocation.checked)
			onclick += "location=yes,";
	
		if (formObj.popupscrollbars.checked)
			onclick += "scrollbars=yes,";
	
		if (formObj.popupmenubar.checked)
			onclick += "menubar=yes,";
	
		if (formObj.popupresizable.checked)
			onclick += "resizable=yes,";
	
		if (formObj.popuptoolbar.checked)
			onclick += "toolbar=yes,";
	
		if (formObj.popupstatus.checked)
			onclick += "status=yes,";
	
		if (formObj.popupdependent.checked)
			onclick += "dependent=yes,";
	
		if (formObj.popupwidth.value != "")
			onclick += "width=" + formObj.popupwidth.value + ",";
	
		if (formObj.popupheight.value != "")
			onclick += "height=" + formObj.popupheight.value + ",";
	
		if (formObj.popupleft.value != "") {
			if (formObj.popupleft.value != "c")
				onclick += "left=" + formObj.popupleft.value + ",";
			else
				onclick += "left='+(screen.availWidth/2-" + (formObj.popupwidth.value/2) + ")+',";
		}
	
		if (formObj.popuptop.value != "") {
			if (formObj.popuptop.value != "c")
				onclick += "top=" + formObj.popuptop.value + ",";
			else
				onclick += "top='+(screen.availHeight/2-" + (formObj.popupheight.value/2) + ")+',";
		}
	
		if (onclick.charAt(onclick.length-1) == ',')
			onclick = onclick.substring(0, onclick.length-1);
	
		onclick += "');";
	
		if (formObj.popupreturn.checked)
			onclick += "return false;";
	
		// tinyMCE.debug(onclick);
	
		formObj.onclick.value = onclick;
	
		if (formObj.href.value == "")
			formObj.href.value = url;
	}
}

function editSectionWithTinyMCE(nom_fichier,section_name,section_langue,regex_exception)
{
	var re = new RegExp(regex_exception, 'i');
	
	if (!re.test(nom_fichier+':'+section_name))
	{
		location.href='index.cgi?page='+nom_fichier+'&langue='+section_langue+'&edit='+section_name;
		return;
	}
	
  if (!modifier)
  {
    edit_idc='';
    modif_section = section_name;
    edit_ordre = section_name;
    modifier = true;
    edit_section = section_name;
    last_text = document.getElementById('text_'+section_name+'.000').innerHTML;

    var codeEditor = getEditorForHTML(section_name, '', '120.000', nom_fichier, section_langue, last_text,25);
    if (editor) return false;
    disableElems();

    document.getElementById('text_'+section_name+'.000').innerHTML=unescape(codeEditor);
    initEditor();
  }
  return false;
}

/* TinyMCE Editor */

var editor = null;
var modifier = false;
var last_text = '';
var edit_ordre = null;
var edit_idc = null;
var edit_section = null;

function loadTinyMCEEditor(langue_admin, current_page, current_lang, style_db)
{
	//this.cle = cle;
	page = current_page;
	langue = current_lang;
	this.langue_admin = (langue_admin == 'en' ? langue_admin+'g' : langue_admin+'a');
	var page_suffix = page.replace(/[0-9_]+/ig, "");
	
	tinyMCE.init({
		width : "100%",
		language : langue_admin,
		mode : "specific_textareas",
		theme : "advanced",
		save_callback : "customSave",
		setupcontent_callback : "customInit",
		saving : false,
		plugins : "html,style,table,save,advimage,advhr,advlink,script,periode,modifyperiode,searchreplace,contextmenu,paste,insertdiv,modifydiv,modifypara,marquee,forum,sondage,newline,form,flash",
		theme_advanced_buttons1_add_before : "save,cancel,newdocument,separator",
		theme_advanced_buttons1_add : "forecolor,backcolor,separator,sub,sup,charmap,separator,fontselect,fontsizeselect,separator,newline,separator,removeformat,visualaid,separator,help",
		theme_advanced_buttons2_add : "separator,search,replace,separator,script,html,flash,periode,modifyperiode,marquee,forum,sondage,advhr,separator,code",
		theme_advanced_buttons2_add_before: "cut,copy,paste,pastetext,pasteword,separator",
		theme_advanced_buttons3_add : "separator,insertdiv,modifydiv,deletediv,separator,modifypara,separator,formcontrols",												
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",
		valid_elements : "*[*]",
		extended_valid_elements : "*[*]",
		content_css : "/js/tinymce/jscripts/tiny_mce/word.css,/css/style_tinymce.css,/css/style_custom.css,/css/"+style_db+".css",
		file_browser_callback : "fileBrowserCallBack",
		paste_use_dialog : false,
		theme_advanced_resizing : true,
		theme_advanced_resize_horizontal : false,
		paste_auto_cleanup_on_paste : false, 
		paste_convert_headers_to_strong : false,
		paste_strip_class_attributes : "mso",
		relative_urls : true,
		remove_script_host : true,
		convert_urls : false,
		paste_remove_spans : false,
		paste_remove_styles : false,
		nbHtml : 0,
		aryHtml : new Array(),
		current_page : current_page,
		force_p_newlines : false, //tinyMCE.isMSIE,
		force_br_newlines : true, //!tinyMCE.isMSIE,
		cleanup : true,
		apply_source_formatting : true,
		convert_fonts_to_spans : false,
		auto_resize : true
	});
}

//paste_auto_cleanup_on_paste = true faisait bugger lorsque on faisait copier-coller d'élément multimedia

function nl2br(text){	var re_nlchar; text = escape(text);	if(text.indexOf('%0D%0A') > -1){		re_nlchar = /%0D%0A/g ;	}else if(text.indexOf('%0A') > -1){		re_nlchar = /%0A/g ;	}else if(text.indexOf('%0D') > -1){		re_nlchar = /%0D/g ;	}	return unescape( text.replace(re_nlchar, "") );}

function replaceElem(content)
{
	/* */
	if (!tinyMCE.isMSIE)
	{
		content = nl2br(content);
		//content = content.replace(/<\/p><p([^>]*)>/ig, " <br />");
		//content = content.replace(/<\/p>/ig, " <br />");
		//content = content.replace(/[^>]<p([^>]*)>/ig, " <br />");
		//content = content.replace(/<p([^>]*)>/ig, " ");
		//content = content.replace(/<p([^>]*)>(.*?)<\/p>/ig, " $2<br />");
		//content = content.replace(/<p([^>]*)>(.*?)<\/p>/ig, "$2<br />");
	}
	else
	{
		content = nl2br(content);
		//content = content.replace(/>([^<>]*)<br(\s\/)?>/ig, "><p>$1</p>");
		//content = content.replace(/<\/p>([^<>]*)<br(\s\/)?>/ig, "</p><p>$1</p>");
		//content = content.replace(/<br(\s\/)?>/ig, " <p>&nbsp;</p>");
	}
	/* */

	//content = content.replace(/\t/g, "");
	content = content.replace(/<span class="?mce(Script|Forum|Sondage|Flash)"?[^>]*><img[^>]*><!-- CMS:(SCRIPT|FORUM|SONDAGE|FLASH) (.*?) \/CMS:(SCRIPT|FORUM|SONDAGE|FLASH) --><\/span>/ig, "<!-- CMS:$2 $3 \/CMS:$4 -->");
	content = content.replace(/<span class="?mce(Html)"?>.*?<!-- CMS:HTML/gi, "<!-- CMS:HTML");
	content = content.replace(/\/CMS:HTML -->.*?<\/span>/ig, "/CMS:HTML -->");

	content = content.replace(/<\/textarea>/ig, "&lt;/textarea&gt;");
	//content = content.replace(/<span><\/span>/ig, "");
	 
	return content;
}

function loadCalcom(month, year)
{
var xmlhttp = false; 
try { 
	xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} 
catch (e) {
	try {
		xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	catch (e) {
	}
}
if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
	xmlhttp = new XMLHttpRequest();
}
//if (document.getElementById('tile'))
//document.getElementById('tile').innerHTML = 'Chargement du calendrier...';
var url="/cgi-bin/calcom.php?month="+(month ? month : "")+"&year="+(year ? year : "")+"&nocache="+Math.random();
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function() {
	if (xmlhttp.readyState == 4)
		if (xmlhttp.responseText != '')
			document.getElementById('calcom').innerHTML = xmlhttp.responseText;
}
xmlhttp.send(null);
}

	function adjustIFrameSize(iframeWindow, iframeId) {
		if (iframeWindow.document.height)
		{
			var iframeElement = document.getElementById(iframeId);
			iframeElement.style.height = iframeWindow.document.height + 'px';
			iframeElement.style.width = iframeWindow.document.width + 'px';
		} 
		else if (document.all)
		{
			var iframeElement = document.all[iframeId];
			if (iframeWindow.document.compatMode && iframeWindow.document.compatMode != 'BackCompat')
			{
				iframeElement.style.height = iframeWindow.document.documentElement.scrollHeight + 'px';
				iframeElement.style.width = iframeWindow.document.documentElement.scrollWidth + 'px';
			}
			else {
				iframeElement.style.height = iframeWindow.document.body.scrollHeight + 'px';
				iframeElement.style.width = iframeWindow.document.body.scrollWidth + 'px';
			}
		}
	} 

function isInToolbar(node)
{
	do {
		if (node.id == 'toolbar' || node.name == 'innovaeditor')
			return true;
	}
	while (node = node.parentNode);
	
	return false; 
}

function disableElems2(langue_admin)
{
	var tags = new Array('A', 'INPUT');

	for (var j = 0; j < tags.length; j++)
	{
		var elems = document.getElementsByTagName(tags[j]);
		
		for (i = 0; i < elems.length; i++)
		{
			if (!isInToolbar(elems[i]))
			{
				elems[i].href = '#';
				elems[i].onclick = function () { if (langue_admin == 'fra') { alert('Vous êtes actuellement en mode édition.\n\nVeuillez sauvegarder vos modifications ou annuler pour retourner en mode normal.'); } else { alert('You are currently in the editing mode.\n\nPlease save your changes or cancel to go back in normal mode.'); } return false; };
			}
		}
	}
}

function ouvrirCalendrier(debut, entree)
{
	var mois;
	var annee;
	
	var ary = debut.value.split("-");
	mois = (parseInt(ary[1])-1).toString();
	annee = ary[0].toString();

	if (!mois.match(/^(0?[1-9]|1[012])$/))
		mois = '';

	if (!annee.match(/^(19|20)\d\d$/))
		annee = '';
	
	show_calendar(entree,'',mois,annee,'YYYY-MM-DD');
}