function confirmerAction(Message,URL)
{
	if (confirm(Message))
	{
		window.location=URL;
	}
}
// --------------------------------------------------------------------------------------
// FONCTIONS DE CONTROLE DES DONNEES SAISIES DANS LES FORMULAIRES 
// --------------------------------------------------------------------------------------
function validSaisieEntier(f)
{	
	var re = /^$|^[0-9]*$/;
	if (! re.test(f.value))
		{
		alert ("Vous avez saisi : "+f.value+"\nCe champs necessite la saisie d'un nombre entier");
		if (isNaN(parseInt(f.value,10)))
			f.value="";
		else
			f.value=parseInt(f.value,10);
		return false;
		}
	return true;
}
// --------------------------------------------------------------------------------------
function validSaisieReel(f)
{	
	var re = /^$|^[0-9]+([.,][0-9]+){0,1}$/;
	if (! re.test(f.value))
		{
		alert ("Vous avez saisi : "+f.value+"\nCe champs necessite la saisie d'un nombre");
		if (isNaN(parseInt(f.value,10)))
			f.value="";
		else
			f.value=parseInt(f.value,10);
		return false;
		}
	return true;
}
// --------------------------------------------------------------------------------------
function validSaisieMoisAnnee(f)
{
	var re1 = /^[0-9]{1,2}\/[0-9]{2}$/; // Format année sur 2 digits
	if (re1.test(f.value)) 
		{
	    tab_date = f.value.split(/\//);
		f.value=tab_date[0]+"/20"+tab_date[1];
		}

	var re2 = /^[1-9]{1}\/[0-9]{4}$/; // Format mois sur 1 digits
	if (re2.test(f.value)) 
		{
	    tab_date = f.value.split(/\//);
		f.value="0"+tab_date[0]+"/"+tab_date[1];
		}

	var re3 = /^$|^[0-9]{2}\/[0-9]{4}$/;
	if (! re3.test(f.value))
		{
		alert ("Vous avez saisi : "+f.value+"\nCe champs necessite une saisie sous la forme MM/AAAA\nEx, Pour Février 2002 entrer 02/2002");
		f.value="";
		f.focus();
		return false;
		}
	return true;
}
// --------------------------------------------------------------------------------------
function validSaisieDate(f)
{

	var re = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2}$/; // Format année sur 2 digits
	if (re.test(f.value)) 
		{
	    tab_date = f.value.split(/\//);
		f.value=tab_date[0]+"/"+tab_date[1]+"/20"+tab_date[2];
		}

	var re = /^[0-9]{1,2}\/[0-9]{1,2}$/; // Format entré : juste J/M : on rajoute année courant
	if (re.test(f.value)) 
		{
		Today = new Date();
		tab_date = f.value.split(/\//);
		f.value=tab_date[0]+"/"+tab_date[1]+"/"+Today.getFullYear();
		}

	var re = /^$|^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/;
	if (! re.test(f.value))
		{
		alert ("Vous avez saisi : "+f.value+"\nCe champs necessite une saisie sous la forme JJ/MM/AAAA\nEx, Pour le 1 Février 2002 entrer 1/2/2002");
		f.value=f.defaultValue;
		f.focus();
        return false;
		}

    tab_date = f.value.split(/\/| |-/);
    j=parseInt(tab_date[0],10);
    m=parseInt(tab_date[1],10);
    a=parseInt(tab_date[2],10);
    if (! checkDate(j,m,a))
		{
		alert ("La date saisie est invalide");
		f.select();
        return false;
		}
	return true;
}
// --------------------------------------------------------------------------------------
// Accepte les formats étendus des dates : 
// jour : [j]j/[m]m/[aa]aa  
// mois : [m]m/[aa]aa
// semaine : S[SS]
// Période : [j]j/[m]m/[aa]aa-[j]j/[m]m/[aa]aa
// Les années sur 2 chiffres sont converties en années sur 4 chiffres.

function validSaisieDateExt(f)
{
var usage  = "Formats de date acceptés : \n"+
			 "    Date simple : [j]j/[m]m/[aa]aa \n" +
			 "    Mois : [m]m/[aa]aa \n" +
			 "    Semaine : S[s]s \n" +
			 "    Période : [j]j/[m]m/[aa]aa - [j]j/[m]m/[aa]aa \n";
			 
	
	var re = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2,4}$/; // Date simple
	if (re.test(f.value)) 
		{
	    tab_date = f.value.split(/\//);
		if (tab_date[2] < 100) tab_date[2] = 2000 + parseInt(tab_date[2]);
		f.value=tab_date[0]+"/"+tab_date[1]+"/"+tab_date[2];
		if ( !checkDate(parseInt(tab_date[0]),parseInt(tab_date[1]),parseInt(tab_date[2])))
			{
			alert ("Date entrée incorrecte. Vérifiez la date entrée\n"+usage);
			return false;
			}
		return true;
		}

	var re = /^[0-9]{1,2}\/[0-9]{2,4}$/; // Format entré : juste M/A : on vérifie année à deux chiffres
	if (re.test(f.value)) 
		{
		tab_date = f.value.split(/\//);
		if (tab_date[1] < 100) tab_date[1] = 2000 + parseInt(tab_date[1]);
		f.value=tab_date[0]+"/"+tab_date[1];
		if (!(tab_date[0]>0 && tab_date[0]<=12)) // on ne cherche pas à valider la date : ce n'est pas une date
			{
			alert ("Saisie invalide: "+f.value+"\n"+usage);
			return false;
			}
		return true;
		}

	var re = /^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2,4}-[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{2,4}$/; // Range
	if (re.test(f.value)) 
		{
	    tab_date = f.value.split(/[\/-]/);
		if (tab_date[2] < 100) tab_date[2] = 2000 + parseInt(tab_date[2]);
		if (tab_date[5] < 100) tab_date[5] = 2000 + parseInt(tab_date[5]);
		f.value=tab_date[0]+"/"+tab_date[1]+"/"+tab_date[2]+"-"+tab_date[3]+"/"+tab_date[4]+"/"+tab_date[5];
		if ( !checkDate(parseInt(tab_date[0]),parseInt(tab_date[1]),parseInt(tab_date[2])) || !checkDate(parseInt(tab_date[3]),parseInt(tab_date[4]),parseInt(tab_date[5])) )
			{
			alert ("Date entrée incorrecte. Vérifiez la date entrée.\n"+usage);
			return false;
			}
		return true;
		}

	var re = /^S[0-9]{1,2}$/; // N° de semaine
	if (re.test(f.value)) 
		{
	    tab_date = parseInt(f.value.substr(1));
		if (!(tab_date>0 && tab_date<=53)) // controle du n° de semaine
			{
			alert ("Saisie invalide: "+f.value+"\n"+usage);
			return false;
			}
		return true;
		}
	
	
	alert("Saisie invalide.\n"+usage);
	return false;

}
// --------------------------------------------------------------------------------------
function validSaisieHeure(f)
{
	var re = /^$|^[0-9]{1,2}:[0-9]{2}$/;
	if (! re.test(f.value))
		{
		alert ("Vous avez saisi : "+f.value+"\nCe champs necessite une saisie sous la forme HH:MM\nEx, Pour le 10h30 entrer 10:30");
		f.value="";
		f.focus();
        return false;
		}
	tab_heure = f.value.split(/:/);
	h=tab_heure[0];
	m=tab_heure[1];
    if (h>23 || m > 59)
        {
		alert ("L'heure saisie est incorrecte");
		f.value="";
		f.focus();
        return false;
        }
	return true;

}
// --------------------------------------------------------------------------------------
function validSaisieHeureSimple(f)
{
	var re = /^$|^[0-9]{1,2}$/;
	if (! re.test(f.value))
		{
		alert ("Vous avez saisi : "+f.value+"\nCe champs necessite la saisie d'un nombre de 0 à 23");
		f.value="";
		f.focus();
        return false;
		}
    if (f.value > 23)
        {
		alert ("L'heure saisie est incorrecte. Entrez un chiffre entre 0 et 23");
		f.value="";
		f.focus();
        return false;
        }
	return true;

}
// --------------------------------------------------------------------------------------
function validSaisieBarcode(f)
{	
	var re = /^$|^[0-9]*$/;
	if (! re.test(f.value))
		{
		alert ("Vous avez saisi : "+f.value+"\nCe champs necessite la saisie d'un nombre entier");
		if (isNaN(parseInt(f.value,10)))
			f.value="";
		else
			f.value=parseInt(f.value,10);
		return false;
		}
    
    var i;
    i = parseInt(f.value);
    if (i % 97)
        {
		alert ("La valeur saisie n'est pas modulo de 97 (reste : "+i%97+")");
        return false;
        }

	return true;
}
// --------------------------------------------------------------------------------------
function checkDate(j,m,a)
{
var JoursParMois   = new Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	if ( ( (a % 4 == 0) && (a % 100 != 0) ) || (a % 400 == 0) ) JoursParMois[2]=29;
    der_mois = JoursParMois[m];

    if (j>der_mois || m>12 )
		{
        return false;
		}
	return true;

}
// --------------------------------------------------------------------------------------
// FONCTIONS DE GESTION DES VALIDATION DE FORMULAIRE
// --------------------------------------------------------------------------------------
var form_soumis = false;
function bloqueDoubleSoumission()
{
    win_w=document.body.clientWidth;
    win_h=document.body.clientHeight;

    delta_x = document.body.scrollLeft;
    delta_y = document.body.scrollTop;

    obj = document.getElementById('Div_Wait');
    if (obj)
        { 
        o_w= parseInt(obj.style.width);
        o_h= parseInt(obj.style.height);
        x = Math.floor((win_w - o_w)/2);       
        y = Math.floor((win_h - o_h )/2)- 30;  

        obj.style.left = delta_x + x;
        obj.style.top  = delta_y + y;
        obj.style.visibility = 'visible';
        }

    obj = document.getElementById('Div_Cache');
    if (obj)
        {
        o_w= parseInt(obj.style.top);
        o_h= parseInt(obj.style.left);
        x = Math.floor((win_w - o_w));       
        y = Math.floor((win_h - o_h ));  

        obj.style.width = x;
        obj.style.height  = y;
        obj.style.visibility = 'visible';
        }

    if (form_soumis)
        {
        alert ("NE REVALIDEZ PAS UN FORMULAIRE EN COURS DE TRAITEMENT");
        return false;
        }

  form_soumis = true;
  return true;
}
// --------------------------------------------------------------------------------------
// FONCTIONS D'AIDE AU DEBUGGAGE : Exploration du D.O.M.
// --------------------------------------------------------------------------------------
function show_props_win(obj)
{
	var result = "";
	var node_name = "";
	var str;
	var idx = 0;
	tab_obj = new Array();

		for (var i in obj) 
			{
			str=""+obj[i];
			re = /</g;
			str=str.replace(re,"&lt;");
			re = />/g;
			str=str.replace(re,"&gt;");
			re = /\[object/i;
			if (i=="nodeName") node_name = str;
			if (str.match(re)) 
				{
				str = "<A HREF='Javascript:window.opener.show_props_rec("+idx+");'>"+str+"</A>";
				tab_obj[idx]=obj[i];
				idx++;
				}
			re = /\n/;
			if (str.match(re)) 
				{
				str = "<PRE>"+str+"</PRE>";
				}
			result += "<TR><TD VALIGN=TOP><B>" + i + "</B></TD>" +
					      "<TD>" + str + "</TD></TR>\n"
			}
		w = window.open();
		w.document.write("<html><head><title>Kyxar DOM explorer</title><head>\n");
		w.document.write("<style type='text/css'>\n");
		w.document.write("body { background-color:#f5f5e5; }\n");
		w.document.write("table { border-collapse:collapse; }\n");
		w.document.write("td {border:1px solid #ccc; font : 8pt verdana,arial }\n");
		w.document.write("h1 {font : bold 12pt  verdana,arial }\n");
		w.document.write("</style>\n<body>\n");
		w.document.write("<h1>Eléments de l'objet "+node_name+"</h1><br><table cellspacing=0>"+result+"</table>");
		w.document.write("</body>\n</html>\n");
		w.document.close();
}
function show_props_rec(index)
{
		show_props_win(tab_obj[index]);
}
function show_props_name(name)
{
		show_props_win(document.getElementById(name));
}

//////////////////////////////////////////////////////////////////
//
//    Nom : kAttachEvent, kDetachEvent
//    Description : Attache/détache un évènement sur un objet
//    Auteur : Matthieu
//    Date modif : 11 Juin 2008
//
//////////////////////////////////////////////////////////////////

function kIsObject(obj)
{
	return obj != null && (obj.focus || obj.setAttribute);
}

function kAttachEvent(obj,event,notify)
{
	if (!kIsObject(obj))
	{
		var obj = (obj!=null && obj!=''?document.getElementById(obj):null);
	}
	
	if (obj)
	{
		event = event.toLowerCase();
		if (obj.attachEvent)
	    {
		    if (event.indexOf('on') != 0)
		    {
		    	event = 'on' + event;
		    }
		    return obj.attachEvent(event,notify);
		}
		
		if (obj.addEventListener)
		{
			if (event.indexOf('on') == 0)
		    {
		    	event = event.substring(2);
		    }
		    return obj.addEventListener(event,notify,false);
		}
	}
	return false;
}

function kDetachEvent(obj,event,notify)
{
	if (!kIsObject(obj))
	{
		var obj = document.getElementById(obj);
	}
	
	if (obj)
	{
		event = event.toLowerCase();
		if (obj.attachEvent)
	    {
		    if (event.indexOf('on') != 0)
		    {
		    	event = 'on' + event;
		    }
		    return obj.detachEvent(event,notify);
		}
		
		if (obj.addEventListener)
		{
			if (event.indexOf('on') == 0)
		    {
		    	event = event.substring(2);
		    }
		    return obj.removeEventListener(event,notify,false);
		}
	}
	return false;
}

//////////////////////////////////////////////////////////////////
//
//    Nom : tooltipAfficher, tooltipCacher
//    Description : Créé un DIV de tooltip qui suit la souris
//    Auteur : Matthieu
//    Date modif : 11 Juin 2008
//
//////////////////////////////////////////////////////////////////

function tooltipAfficher(event,id,text)
{
	var elem = document.getElementById(id);
	if (elem)
	{
		elem.innerHTML = text;
		var pos = getMousePosition(event);
		elem.style.top = pos[1]+10+'px';
        elem.style.left = pos[0]+10+'px';
        elem.style.visibility = 'visible';
		kAttachEvent(document,'onmousemove',tooltipEvent);
	}
}

function tooltipEvent(event)
{
	tooltipSuivre(event,'block_tooltip');
}

function tooltipSuivre(event,id)
{
	var elem = document.getElementById(id);
	if (elem)
	{
		var pos = getMousePosition(event);
		elem.style.top = pos[1]+10+'px';
        elem.style.left = pos[0]+10+'px';
	}
}

function tooltipCacher(id)
{
	var elem = document.getElementById(id);
	if (elem)
	{
		elem.innerHTML = '';
		elem.style.visibility = 'hidden';
		kDetachEvent(document,'onmousemove',tooltipEvent);
	}
}

//////////////////////////////////////////////////////////////////
//
//    Nom : getMousePosition
//    Description : Récupère la position de la souris
//    Auteur : Matthieu
//    Date modif : 11 Juin 2008
//
//////////////////////////////////////////////////////////////////

function getMousePosition(event)
{
	if ( document.all )
	{
		var Y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		var X = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
	}
	else
	{
		
		var Y = event.pageY;
		var X = event.pageX;
	}
	return [X,Y];
}

// --------------------------------------------------------------------------------------

