//Coche toutes les sous-checkboxs d'une checkbox
//  ch   : état de la checkbox 
//  name : nom du group des checkboxs
//  form : formulaire contenant les checkboxs
function checkChildrens(ch,name,form)
{
 if(form.elements[name].length==null)
 {
  form.elements[name].checked=ch;
 }
 else
 {
  var i=0;
  while (i<form.elements[name].length)
  {
   form.elements[name][i].checked=ch;
   if(window.onChildrenChecked)
   {
	onChildrenChecked(form.elements[name][i]);   
   }
   i++;
  }
 }
}
//Coche le parent d'un groupe de checkbox
//  ch         : état de la checkbox cochée
//  name       : nom du groupe des checkbox
//  nameParent : nom du checkbox parent
//  form       : formulaire contenant les checkboxs
function checkParent(ch,name,nameParent,form)
{
 if(form.elements[name].length==null)
 {
  form.elements[nameParent].checked=ch;
 }
 else
 {
  var cpt=0;
  var i=0;
  while (i<form.elements[name].length)
  {
   if (form.elements[name][i].checked==true)
   {
	  cpt++;
   }
   i++;
  }
  
  if (cpt==form.elements[name].length)
  {
   form.elements[nameParent].checked=true;
  }
  else
  {
   form.elements[nameParent].checked=false;
  }
 }
}
//Remets à 0 les éléments d'un formulaire
function cleanForm()
{
 var inputs=document.getElementsByTagName('input');
 for (var i=0;i<inputs.length;i++)
 { 
  if(inputs[i].getAttribute('type')=='checkbox')
  {
   inputs[i].checked=false;
  }
  if(inputs[i].getAttribute('type')=='text')
  {
   inputs[i].value='';
  }
 }
 
 var inputs=document.getElementsByTagName('select');
 for (var i=0;i<inputs.length;i++)
 { 
  inputs[i].selectedIndex=0;
 } 
}
//Coche une checkbox sur base de son id
function check(id)
{
 document.getElementById(id).checked=true;	
}
//Decoche une checkbox sur base de son id
function uncheck(id)
{
 document.getElementById(id).checked=false;	
}
//Effet rollover sur un bouton
function mouseOverButton(button)
{
 button.className='btnSelected';
}
function mouseOutButton(button)
{
 button.className='btnUnSelected';
}
//Cache ou affiche un div
// id : id du div a cacher/montrer
// emptyForm : si le div contient des champs à compléter, on les remets à blanc
oldDiv=null;
function swapDiv(id,emptyForm)
{
 if(oldDiv!=null)
 {
 	oldDiv.style.display='none';
 }
 if(document.getElementById(id)!=oldDiv)
 {
  document.getElementById(id).style.display='';
  oldDiv=document.getElementById(id);
 }
 else
 {
 	document.getElementById(id).style.display='none';
  oldDiv=null;
  //Vide le formulaire contenu dans le champ caché
  if(emptyForm)
  {
   var inputElems=document.getElementById(id).getElementsByTagName('input');
   for(var i=0;i<inputElems.length;i++)
   {
    switch(inputElems[i].type)
    {
     case 'text': inputElems[i].value='';
     case 'checkbox': inputElems[i].checked='false';
    }	
   }
   
   var selectElems=document.getElementById(id).getElementsByTagName('select');
   for(var i=0;i<selectElems.length;i++)
   {
    selectElems[i].options.selectedIndex=0	
   }
   
   var textareaElems=document.getElementById(id).getElementsByTagName('textarea');
   for(var i=0;i<textareaElems.length;i++)
   {
    textareaElems[i].value='';
   }
  }
 }
}
//Vérifier que les champs requis d'un formulaire sont complétés
// A implémenter
function checkRequiredInputs(div)
{
 var elems=div.getElementsByTagName('input');
 for(i=0;i<elems.length;i++)
 {  
  if(elems[i].name.indexOf('*')!=-1)
  {
   if(elems[i].value=='')
   {
	return(false);   
   }  
  }
 }
 
 var elems=div.getElementsByTagName('select');
 for(i=0;i<elems.length;i++)
 {  
  if(elems[i].name.indexOf('*')!=-1)
  {
   if(elems[i].value=='')
   {
	return(false);   
   }  
  }
 }
 
 var elems=div.getElementsByTagName('textarea');
 for(i=0;i<elems.length;i++)
 {  
  if(elems[i].name.indexOf('*')!=-1)
  {
   if(elems[i].value=='')
   {
	return(false);   
   }  
  }
 }
 
 return(true);	
}
//Ajouter un élément à liste CSV (on vérifie que l'élément n'est pas déjà dans la liste)
// item : élément à ajouter
// csv : liste csv
// removeIfExists : si = 1 --> retire l'élément de la liste si il s'y trouve déjà
function addToCSV(item,csv,removeIfExists)
{
 var tab=csv.split(',');
 for(i=0;i<tab.length;i++)
 {
  var found=false;
  if(item==tab[i])
  {
   found=true;
   if(removeIfExists)
   {
    tab.splice(i,1);	 
   }
   break;	
  }   
 }
 if(!found)
 {
  if(csv=='')
  {
   tab[0]=item;
  }
  else
  {
   tab[tab.length]=item;  
  }
 }
 return(tab.join(',')); 	
}
function removeFromCSV(item,csv)
{
 var tmpVals=csv.split(',');
 var newVals=new Array();
 for (var n = 0; n < tmpVals.length; n++) 
 {
  if (tmpVals[n]!=item)
  {
   newVals[newVals.length]=tmpVals[n];
  }
 }
 return(newVals.join(","));		
}
function isInCSVList(item,csv)
{
 csv=csv.split(',');
 for(i=0;i<csv.length;i++)
 {  
  if(item==csv[i])
  {
   return(true);	
  }   
 }
 return(false);
}
//Ajouter des fonctions au onload de la page sans écraser les éventuels onload existants
// func : fonction à ajouter
// target : objet dont le onload doit être modifié (par défaut on prend window)
function addLoadEvent(func,target)
{
   var target=(target) ? target : window;
   
   var oldonload = target.onload;
   if(typeof target.onload != 'function')
   {
    target.onload = func;
   }
   else
   {
    target.onload = function()
    {     
     oldonload();
     func();  
    }
   }
}
function addBeforeUnload(func,target)
{
   var target=(target) ? target : window;
   
   var oldBeforeUnload = target.onbeforeunload;
   if(typeof target.onbeforeunload != 'function')
   {
    target.onbeforeunload = func;
   }
   else
   {
    target.onbeforeunload = function()
    {     
     oldBeforeUnload();
     func();  
    }
   }
}
function addResizeEvent(func,target)
{
   var target=(target) ? target : window;
   
   var oldonresize = target.onresize;
   if(typeof target.onresize != 'function')
   {
    target.onresize = func;
   }
   else
   {
    target.onresize = function()
    {     
     oldonresize();
     func();  
    }
   }
}
//Récupérer un élément de la page (cross-browsing)
// aID : id de l'élément
function getElement(aID)
{
 return (document.getElementById) ? document.getElementById(aID) : document.all[aID];
}
//Récupérer l'objet document contenu dans une iframe
// aID : id de l'iframe 
function getIFrameDocument(aID)
{ 
 var rv = null; 
 var frame=getElement(aID);
 // if contentDocument exists, W3C compliant (e.g. Mozilla) 
 if (frame.contentDocument)
 { 
  rv = frame.contentDocument;
 }
 else 
 { 
  rv = document.frames[aID].document;
 }
 return rv;
}
//Supprimer une sous-chaine d'une chaine
// s : chaine
// t : sous-chaine à supprimer
function removeToken(s, t)
{
  i = s.indexOf(t);
  r = "";
  if (i == -1) return s;
  r += s.substring(0,i) + removeToken(s.substring(i + t.length), t);
  return r;
}
// renvoie un tableau avec tous les éléments de la classe demandée
// peut filtrer sur le type de tag à renvoyer (ex. div )
// peut être limité sur un container 
function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}
//Ajuste la taille d'une iframe en fonction de son contenu
//Retourne la taille de la frame
function setFrameHeight(frame)
{
 var frameDoc = getIFrameDocument(frame.id);
 var height=frameDoc.body.scrollHeight;
 var width=frameDoc.body.scrollWidth;
 frame.style.height=height;
 frame.style.width=width;
 var size=new Object()
 size.Width=width;
 size.Height=height;
 return(size);	
}
function onlyNumber(champ)
{
	reg = new RegExp('[^0-9]+', 'g');
	valeur = champ.value;
	if(reg.test(valeur))
	{
		champ.value=champ.value.replace(/[^0-9]+/, '');
	}
	else
	{
		return true;
	}
}
//Changement onglet
function swap(element,doc)
{ 
 if(doc==null){doc=document}
 var num=element.id.substr(1,1)
 for (var i=1;;i++)
 {
  if(doc.getElementById('t'+i)==null){break;}
  
  if (i==num)
  {
   doc.getElementById('t'+i).className = "ongletFocus";
   doc.getElementById('sep-t'+i).className = "ongletSepFocus";
   doc.getElementById('div'+i).className = "elfocus";				
  }			
  else
  {
   doc.getElementById('t'+i).className = "ongletUnfocus";
   doc.getElementById('sep-t'+i).className = "ongletSepUnfocus";
   doc.getElementById('div'+i).className = "elunfocus";				
  }
 }
}
//Fin de chargement de la page
// --> cache l'image d'attente de chargement et affiche le div 'contenu'
function zapLoadWait()
 {
  if(document.getElementById('LoadWait'))
  {
   document.getElementById('LoadWait').style.display ='none';
  }
  if(document.getElementById('contenu'))
  {
   document.getElementById('contenu').style.display ='';
  }	
 }
 
//Ajoute un nb de jour à une date (format JJ/MM/AAAA)
// dStart : date
// days   : nb de jours
function addDayToDate(dStart,days)
{
 dStart=dStart.split('/');
 var date=new Date(dStart[2],dStart[1]-1,dStart[0],0,0,0,0);
 var dEnd=new Date(date.getTime() + (1000 * 60 * 60 * 24 * days));
 var day=(dEnd.getDate()<10) ? '0'+dEnd.getDate() : dEnd.getDate();
 var month=dEnd.getMonth()+1;
 var month=(month<10) ? '0'+month : month;
 return(day+'/'+month+'/'+dEnd.getYear())	
}
//Calcule le nb de jours entre deux date (format JJ/MM/AAAA)
// dEnd   : date la plus 'grande'
// dStart : date la plus 'petite'
function dateDiff(dEnd,dStart)
{
 dStart=dStart.split('/');
 dStart=new Date(dStart[2],dStart[1]-1,dStart[0]);
 dEnd=dEnd.split('/');
 dEnd=new Date(dEnd[2],dEnd[1]-1,dEnd[0]);
 var jourSep=dEnd.getTime()-dStart.getTime();
 return(parseInt(jourSep/86400000));	
}
function dateEuropeanToODBC(date,showHours)
{
 dateTmp=date.split(' ');
 date=dateTmp[0].split('/');
 if(Boolean(showHours))
 {
  return(date[2]+'-'+date[1]+'-'+date[0]+' 00:00:00');	
 }
 else
 {
  return(date[2]+'-'+date[1]+'-'+date[0]);	 
 }
}
function dateODBCToEuropean(date,showHours)
{
 dateTmp=date.split(' ');
 date=dateTmp[0].split('-');
 if(Boolean(showHours))
 {
  return(date[2]+'/'+date[1]+'/'+date[0]+' 00:00:00');	
 }
 else
 {
  return(date[2]+'/'+date[1]+'/'+date[0]);	 
 }
}
//Cacher le message
function hideMessageTimeOut()
{
 setTimeout(hideMessage,2000);	
}
function hideMessage()
{
 if(parseFloat($('enteteMessage').getOpacity())>0)
 {
  $('enteteMessage').setOpacity(parseFloat($('enteteMessage').getOpacity())-0.1);
  setTimeout(hideMessage,50);
 }
 else
 {
  $('enteteMessage').hide();
  resizeContainers();	
  if(window.onHideMessage)
  {
   onHideMessage()  
  }	
 }
}
/// Ajout d'un delta de temps (en minute) Ã  une date
function addDelta(date, deltaTime)
{
  date=date.split(' ');
  hours=date[1].split(':');
  date=date[0].split('-');
  
  date=new Date(date[0],date[1],date[2],hours[0],hours[1],hours[2]);  
  date.setTime(date.getTime()+parseFloat(deltaTime)*60*1000);   
  var month=(date.getMonth()<10) ? '0'+date.getMonth() : date.getMonth();
  var day=(date.getDate()<10) ? '0'+date.getDate() : date.getDate();
  var hours=(date.getHours()<10) ? '0'+date.getHours() : date.getHours();
  var minutes=(date.getMinutes()<10) ? '0'+date.getMinutes() : date.getMinutes();
  
  date=date.getFullYear()+'-'+month+'-'+day+' '+hours+':'+minutes+':00'
  return(date);
}
function hightlightRow(cell,color)
{
 var row=$(cell).up();
 var childrens=row.childElements();
 
 if(color==null){color='green';}
 
 if(childrens.size()==1)
 {
  childrens.first().addClassName('oneCellHightligthed_'+color);	 
 }
 else
 { 
  childrens.each(function(p)
                 {
                  if(p==childrens.first())
                  {
                 	p.addClassName('firstCellHightligthed_'+color);
                 	
                  }
                  else if(p==childrens.last())
                  {
                  	p.addClassName('lastCellHightligthed_'+color);
                  }
                  else
                  {
                   	p.addClassName('cellHightligthed_'+color);	
                  }         
                });
 }               
}
function lowlightRow(cell,color)
{
 var row=$(cell).up();
 var childrens=row.childElements();
 
 if(color==null){color='green';}
 
 if(childrens.size()==1)
 {
  childrens.first().removeClassName('oneCellHightligthed_'+color);	 
 }
 else
 {
  childrens.each(function(p)
                 {
                  if(p==childrens.first())
                  {
                 	p.removeClassName('firstCellHightligthed_'+color);
                  }
                  else if(p==childrens.last())
                  {
                  	p.removeClassName('lastCellHightligthed_'+color);
                  }
                  else
                  {
                 	p.removeClassName('cellHightligthed');	
                  }         
                });
 }
}
//Lance un event quand l'iframe est complŠtement charg‚e.
//Placer ce code dans le onload de la page pour capturer l'‚vŠnement
//L'id de la frame qui a g‚n‚r‚ l'event est disponible via event.memo.frameId
//document.observe(eventName,function(event)
//                           {
//                            switch(event.memo.frameId)
//                            {}
//                           });
function waitIframe(iframeId,eventName)
{
 if($(iframeId).readyState=='complete')
 {
  document.fire(eventName,{frameId:iframeId});  	 
 }
 else
 {
  setTimeout('waitIframe(\''+iframeId+'\',\''+eventName+'\')',5);	 
 }	
}
//Call event properly
function fireEvent(element,event)
{
 if (document.createEventObject)
 {
  // dispatch for IE
  var evt = document.createEventObject();
  return element.fireEvent('on'+event,evt)
 }
 else
 {
  // dispatch for firefox + others
  var evt = document.createEvent("HTMLEvents");
  evt.initEvent(event, true, true ); // event type,bubbling,cancelable
  return !element.dispatchEvent(evt);
 }
}

