function trim (texte)
{
  return texte.replace (/^\s+/, "").replace (/\s+$/, "");
}

var IE4,NS4,NS6,VERSION4;
IE4 = (document.all) ? 1 : 0;
NS4 = (document.layers) ? 1 : 0;
NS6 = (document.getElementById) ? 1 : 0;
VERSION4 = (IE4 | NS4 | NS6) ? 1 : 0;

var cacheUrl = "";
var cacheMethod = "";
var cacheParams = "";
var cacheContent = "";

function add_scroll_position (url)
{
  if (url.indexOf ("?") == -1) url += "?";

  if (window && typeof (window.scrollX) !== "undefined")
    url = url + "&scrollX=" + window.scrollX + "&scrollY=" + window.scrollY;
  else if (document.documentElement && typeof (document.documentElement.scrollLeft) !== "undefined")
    url = url + "&scrollX=" + document.documentElement.scrollLeft + "&scrollY=" + document.documentElement.scrollTop;
  else if (document && typeof (document.body.scrollLeft) !== "undefined")
    url = url + "&scrollX=" + document.body.scrollLeft + "&scrollY=" + document.body.scrollTop;
  else
    url = url + "&scrollX=0&scrollY=0";
  
  url = url + "&REFERER=" + escape (document.location.href);
  
  return url;
}

function add_scroll_position_without_referer (url)
{
  if (url.indexOf ("?") == -1) url += "?";

  if (window && typeof (window.scrollX) !== "undefined")
    url = url + "&scrollX=" + window.scrollX + "&scrollY=" + window.scrollY;
  else if (document.documentElement && typeof (document.documentElement.scrollLeft) !== "undefined")
    url = url + "&scrollX=" + document.documentElement.scrollLeft + "&scrollY=" + document.documentElement.scrollTop;
  else if (document && typeof (document.body.scrollLeft) !== "undefined")
    url = url + "&scrollX=" + document.body.scrollLeft + "&scrollY=" + document.body.scrollTop;
  else
    url = url + "&scrollX=0&scrollY=0";

  return url;
}

function popup_open (url, name)
{
  url = add_scroll_position (url);
  window.open (url, 
	       name, 
	       'width=800,height=700,scrollbars=yes,resizable=yes,left=0,top=0,status=no');
}

function insert_link (url, text)
{
  text = text ? text : "Confirmez vous cet ajout ?";
  if (confirm (text))
    {
      window.location = add_scroll_position (url);
    }
  return false;
}

function append_link (url, text)
{
 return insert_link (url, text);
}

function delete_link (url, text)
{
  text = text ? text : "Confirmez vous cette suppression ?";
  if (confirm (text))
    {
      window.location = add_scroll_position (url);
    }
  return false;
}

function state_link (url, text)
{
  text = text ? text : "Confirmez vous cette modification ?";
  if (confirm (text))
    {
      window.location = add_scroll_position (url);
    }
  return false;
}

function event_link (url, text)
{
  if (!text || confirm (text))
    {
      window.location = add_scroll_position (url);
    }
  return false;
}

function select_link (url)
{
  window.location = add_scroll_position (url);
  return false;
}

function reload_opener ()
{
  window.opener.location.reload ();
}

function reload_opener_and_close ()
{
  reload_opener ();
  window.close ();
}

function scroll_page (x, y)
{
  self.scrollTo (x,y);
}

function popup_open_without_scroll (url, name)
{
  window.open (url, 
	       name, 
	       'width=700,height=700,scrollbars=yes,resizable=yes,left=0,top=0,status=no');
  return false;
}

function change_image (element, url)
{
 if (document.getElementById (element))
    {
      document.getElementById (element).src = url;
    }
}

function change_texte (element, texte)
{
 if (document.getElementById (element))
    {
      document.getElementById (element).innerHTML = texte;
    }
}

function set_class (element, className)
{
  if (document.getElementById (element))
    {
      document.getElementById (element).className = className;
    }
}

function set_class_all (prefix, className, max)
{
  max = max ? max : 100;
  for (i=0; i<max; i++)
    {
      if (document.getElementById (prefix+i))
        {
          document.getElementById (prefix+i).className = className;
        }
      else
        break;
    }
}

function show (element)
{
  if (document.getElementById (element))
    {
      document.getElementById (element).style.display = 'block';
    }
}

function taofocus (element)
{
  if (document.getElementById (element))
    {
      document.getElementById (element).focus ();
    }
}

function hide (element)
{
  if (document.getElementById (element))
    {
      document.getElementById (element).style.display = 'none';
    }
}

function toggle_visibility (element)
{
  if (document.getElementById (element))
    {
      if (document.getElementById (element).style.display == 'none')
	{
	  show (element);
	  return 1;
	}
      else
	{
	  hide (element);
	  return 0;
	}
    }
}

function toggle_bool (element)
{
  if (document.getElementById (element))
    {
      if (document.getElementById (element).value == 0)
	{
	    document.getElementById (element).value = 1;
	}
      else
	{
	    document.getElementById (element).value = 0;
	}
    }
}
function hide_all (prefix, max)
{
  max = max ? max : 20;
  for (i=0; i < max; i++)
    {
      if (document.getElementById (prefix+i))
        {
          document.getElementById (prefix+i).style.display = 'none';
        }
      //      else        break;
    }
}

///////////////////////////
//        TinyMCE        //
///////////////////////////
/**
* Dés-active tous les éditeurs
*/
function desactiveEditor (context)
{
  $ ('textarea:tinymce', context).each (function ()
  {
	if ($ (this).tinymce)
      $ (this).tinymce ().remove ();
  });
}

/**
* Ré-active tous les éditeurs
*/
function reactiveEditor (context)
{
  $ ().ready (function ()
  {
    $ ('textarea.MCEEDITOR', context).each (function ()
    {
      $ (this).tinymce (tinymceConf);
    });
  });
}

function format_tel (champ)
{
  var obj = document.getElementById (champ);
  var NumTel = obj.value;
  NumTel = NumTel.replace (new RegExp ("[^0-9]", "g"), "");
  var Tel = "";
  var i = 0;
  
  for (i=0; i<NumTel.length; i++)
  {
    if ((i%2) == 0 && i != 0)
    {
      Tel += " " + NumTel.charAt(i);
    }
    else
    {
      Tel += NumTel.charAt(i);
    }
  }
  
  obj.value = Tel; 
  return;
}

///////////////////////////
//         PopIn         //
///////////////////////////
/**
 * Permet de masquer la popin
 */
function popin_hide (id)
{
  $.popin.close ();
}

/**
* Change le contenu d'une popin
* @param string texte le contenu de remplacement
* @param string id l'id de la popin
*/
function popin_change_contenu (texte, id, title)
{
  id = "taojquery-popin-contenu-message";
  title = title ? title : "";
  
  desactiveEditor ($ ('#' + id));
  
  $.popin (texte, title);
  
  taojquery_init ();
  reactiveEditor ();
}

/**
* Fait un appel distant asynchrone au serveur et affiche le resultat dans une PopIn
* @param string url la page distante à appeler
* @param string method [GET|POST] la méthode de transfert des données
* @param string params une chaine du type 'var1=val1&var2=val2' contenant les données à transmettre à la page 
*/
function popin_ajax_change_contenu (url, method, params, id, title)
{
  method = method ? method : "GET";
  params = params ? params : "";
  id = "taojquery-popin-contenu-message";
  title = title ? title : "";
  
  if ((cacheUrl == url) && (cacheMethod == method) && (cacheParams == params))
  {
	popin_change_contenu (cacheContent, id, title);
//    $ ('#taojquery-popin').fadeIn ();
//    $ ('#taojquery-popin-overlay').fadeIn ();
//    $.popin.repositionnement ();
  }
  else
  {
	cacheUrl = url;
    cacheMethod = method;
    cacheParams = params;
    
    popin_change_contenu ("Chargement en cours ...", id, title);
    
    var handler = function (msg)
    {
      popin_change_contenu (msg, id, title);
      cacheContent = msg;
    };
    ajax (url, method, params, handler);
  }
}

///////////////////////////
//         AJAX          //
///////////////////////////
/**
* Fait un appel distant asynchrone au serveur et affiche le resultat
* @param string element l'élément dans lequel s'affichera le résultat de l'appel
* @param string url la page distante à appeler
* @param string method [GET|POST] la méthode de transfert des données
* @param string params une chaine du type 'var1=val1&var2=val2' contenant les données à transmettre à la page 
*/
function ajax_change_texte (element, url, method, params)
{
  // On initialise les paramètres manquants
  method = method ? method : "GET";
  params = params ? params : null;
  
  $ ("#" + element).html ("Chargement en cours ...");

  // La fonction qui servira d'handler
  var handler = function (msg)
  {
    desactiveEditor ($ ('#' + element));
    $ ("#" + element).html (msg);
    taojquery_init ();
    reactiveEditor ();
  };
  
  // L'appel AJAX
  ajax (url, method, params, handler);
}

/*
* Fait un appel distant asynchrone au serveur et retourne l'objet XMLHttpRequest utilisé
* @param string url la page distante à appeler
* @param string method [GET|POST] la méthode de transfert des données
* @param string params une chaine du type 'var1=val1&var2=val2' contenant les données à transmettre à la page
* @param function hanler la function à exécuter en cas de succès
*/
function ajax (url, method, params, handler)
{
  // On initialise les paramètres manquants
  method = method ? method : "GET";
  params = params ? params : null;
  handler = handler ? handler : null;
  
  // On initialise les options AJAX
  var options = {};
  options.type = method;
  options.url = url;
  
  if (params)
    options.data = params;
  
  if (handler)
    options.success = handler;

  // L'appel AJAX
  $.ajax (options);
}


//////////////////////////////////
// Menus déroulant js simplifie //
/////////////////////////////////

// Michel Deboom septembre 2004 menu largeur auto,fleches txt // simplification taonix 
var delai,menu,dul,db;
var pause=1000;
var D=document;
var wul1=0;
var ie=D.all?1:0;op=window.opera?1:0;dtd=D.compatMode=="CSS1Compat"?1:0;
var lesTaoMenus = new Array ();
var taoMenuCount = 0;

// parametrage :
// fleches pour niveau horizontal, vertical ou vertical a droite
flc=ie?4:8 ;// espace pour la flÃ¨che

function taoInitMenu(id_menu)
{
  de=ie&!op&&dtd?D.documentElement:D.body; //exception IE6 dtd
  fx=ie&!op?de.clientWidth:innerWidth-20;  //l fenetre
  menu=D.getElementById(id_menu);
  if (!menu)
    return;
  wul=[]; // tableau des largeurs de sous-menus
  as=menu.getElementsByTagName('a');
  sousMenu=menu.getElementsByTagName('dl');
  
  //ajoute un id aux sous-menus
  for(j=0;j<sousMenu.length;j++)
    {
      // sousMenu[j].id="ul"+id_menu+j;
      sousMenu[j].id="dl"+j;
      wul[j]=0;
    }
  //construction du menu :
  for(i=0;i<as.length;i++)
    {
      var lien=as[i];
      wa=lien.offsetWidth;
      smenu=lien.parentNode.getElementsByTagName('dl')[0]?1:0;
      if (smenu) 
	wa+=flc;
      // 1er niveau horizontal 
 	if(lien.parentNode.parentNode.id==id_menu)
 	{
	}
      //autres niveaux verticaux
      else {
	n=eval(lien.parentNode.parentNode.id.substr(2,2));
	if(wa>wul[n]){wul[n]=wa;};
	// ajoute les fleches 
      }
      //ajoute les evenements.
      lien.onmouseover=lien.onfocus=function()
	{
	  ul_parent=this.parentNode.parentNode;
	  ul=this.parentNode.getElementsByTagName('dl')[0];
 	  eftoutsauf (id_menu);
	  taoef(ul_parent); // cache tout apres l'ul parent
	  if(ul){
	    ul.style.visibility="visible";// montre l'ul enfant
	    this.className+=" TAOSUIVI"; // marquage du suivi de lien 
	  }
	};
      lien.onmouseout=function(){delai=setTimeout('eftout()',pause);};
    }  
  lesTaoMenus [taoMenuCount] = id_menu;
  taoMenuCount++;
  taoancremenu(id_menu);
}

function taoancremenu(id_menu){
  ancre=D.getElementById('ancre_'+id_menu);
  if(ancre){
  ancre.appendChild(menu);
  }
}

function taoef(lemenu) 
{
  //cache les uls qui suivent cet ul.
  clearTimeout(delai);
  var ul;
  var dd=lemenu.getElementsByTagName('dd');
  for(i=0;i<dd.length;i++)
    {
      ul=dd[i].getElementsByTagName('dl')[0];
      if(ul)
	{
	  ul.style.visibility="hidden";
	  dd[i].firstChild.className = dd[i].firstChild.className.replace (" TAOSUIVI",""); //retabli le marquage initial
	}
    }
}

function eftout()
{
  var lemenu;
  for (im=0;im<taoMenuCount;im++)
    {
      lemenu = D.getElementById (lesTaoMenus [im]);
      taoef(lemenu);
      lemenu.style.visibility="hidden";
      lemenu.style.visibility="visible";// bug ie
    }
}

function eftoutsauf(menuid)
{
  var lemenu;
  // menus dl dd
  for (im=0;im<taoMenuCount;im++)
    {
      if (menuid != lesTaoMenus [im])
	{
	  lemenu = D.getElementById (lesTaoMenus [im]);
 	  taoef(lemenu);
	  lemenu.style.visibility="hidden";
	  lemenu.style.visibility="visible";// bug ie
	}
    }
}

D.onclick=function () { eftout(); cacheAllMenu();}; // pour navigation clavier IE

//-->

/**
 * Enlève les espaces au début et à la fin d'une chaine
 * @param string str la chaine à traiter
 * @ return string la chaine sans ces espaces du début et de la fin
 */
function trim (str)
{
  return str.replace (/(^\s*)|(\s*$)/g, '');
}

/*
 * Returns true if the string is a valid credit card number.
 *
 * @return bool
 */
String.prototype.is_valid_card_number = function()
{

//  alert(this.value + 'xxx');

  // replace any white space in the card number
  var number = this.replace(/\s+/g, '') ;
  
  //replace if contains non-numbers
  if(number.match(/\D/)){
    return false ;
  }
  
  // convert to array and reverse the number
  number = number.split('').reverse().join('') ;

  // loop through the number one digit at a time
  // double the value of every second digit starting
  // from the right, and concatenate the new values 
  // with the unaffected digits
  var digits = '';
  for(var i = 0; i < number.length; i++){
    digits += '' + ((i%2) ?
		    number.charAt(i) * 2 :
		    number.charAt(i)) ;
  }
  
  // add all of the single digits together
  var sum = 0 ;
  for (var i = 0; i < digits.length; i++){
    sum += (digits.charAt(i) * 1) ;
  }
  // alert(sum) ;
  
  // valid card numbers will be transformed into
  // a multiple of 10
  return (sum % 10) ? false : true ;
};

String.prototype.is_valid_card_cryptogramme = function()
{

  // replace any white space in the card number
  var number = this.replace(/\s+/g, '') ;
  
  //replace if contains non-numbers
  if(number.match(/\D/)){
    return false ;
  }
  
  return number.length == 3;
};

 function hide_admin ()
 {
     document.getElementById('taobar').style.width='auto';
     document.getElementById('adminbutton').style.display='block';
     document.getElementById('adminbar').style.display='none';
     return false;
 }

function show_admin ()
{
    document.getElementById('taobar').style.width='100%';
    document.getElementById('adminbutton').style.display='none';
    document.getElementById('adminbar').style.display='block';
    return false;
}

/* pour tiny mce */
function removeHtmlComments(source)
{
    var html = source + ""; //Ensure source is a string
    var regX = /<(?:!(?:--[\s\S]*?--\s*)?(>)\s*|(?:script|style|SCRIPT|STYLE)[\s\S]*?<\/(?:script|style|SCRIPT|STYLE)>)/g;
    return html.replace(regX, function(m,$1){ return $1?'':m; });
}
function myCustomCleanup(type,value)
{
    var value = value + ""; //Ensure value is a string
    value = value.replace(/<(p|em|strong)(>|[^>]*>)(\s)*<\/\1>/ig,"");
    return removeHtmlComments(value);
}

/* pour taojquery */
function taojquery_init ()
{
  $ ('[bouton_menu]').bouton_menu ();
  $ ('[diaporama]').diaporama ();
  $ ('[fixed]').fixed ();
  $ ('[info_bulle]').info_bulle ();
  $ ('input:text[default], textarea[default], input:password[default]').input_text_default ();
  $ ('[onglet]').onglet ();
  $ ('img[src_over]').rollover ();
  $ ('[scroll]').scroll ();
  $ ('[slides_show]').slides_show ();
  $ ('[zoom_diaporama]').zoom_diaporama ();
  $ ('[zoom_popin]').zoom_popin ();
  $ ('[zoom_over]').zoom_over ();
  $ ('form[validator]').form_validator ();
  $ ('[coverflow]').coverflow ();
}

