//Objet XMLHTTPRequest
var XHR = null;

function Go(url) {
	location.href = url;	
}

// retourne un objet xmlHttpRequest.
// méthode compatible entre tous les navigateurs (IE/Firefox/Opera)
function getXMLHTTP()
{
  var xhr = null;
  
  // Firefox et autres
  if(window.XMLHttpRequest)
  { 
    xhr = new XMLHttpRequest();
  }
  // Internet Explorer
  else if(window.ActiveXObject)
  { 
    try
    {
      xhr = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch(e)
    {
      try
      {
        xhr = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch(e1)
      {
        xhr = null;
      }
    }
  }
  // XMLHttpRequest non supporté par le navigateur
  else
  { 
    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  }

  return xhr;
}

//Appel la page php permettant de sauvegarder la gestion des categories
function fn_visibiliteCategorie(i_categorie,b_checkbox)
{
	//Si l'objet existe déjà on abandonne la requête et on le supprime
	if(XHR && XHR.readyState != 0)
	{
		XHR.abort();
		delete XHR;
	}

	//Création de l'objet XMLHTTPRequest
	XHR = getXMLHTTP();

	if(!XHR) return false; 
	
	//URL du script de sauvegarde auquel on passe la valeur à modifier	
	XHR.open("POST", "saveGestionCategories.php", true);
	XHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	//On se sert de l'événement OnReadyStateChange pour supprimer l'input et le replacer par son contenu
	XHR.onreadystatechange = function()
	{
	   
		//Si le chargement est terminé
		if (XHR.readyState == 4)
		{
		  alert(XHR.responseText)
		}
	}
	
	//Recuperation de l etat de la case a cocher
	if(b_checkbox) visible = "Y"
	else visible = "N"
	
	//Creation de la variable parametre a envoyer
	param = "idCat=" + i_categorie
	param = param + "&visible=" + visible

	//Envoi de la requête
	XHR.send(param);
	
}

//Fontion affichant un message de confirmation lors de la supression d un produit
function fn_supression(s_href)
{
  if(confirm("Confirmez-vous la supression"))
    document.location.href = s_href;    
}


/*fn_verifNumber****************************************************
| description : Verifie si la valeur saisie est un nombre
|----------------------------------------------------------------------------
| Algorithme :
|----------------------------------------------------------------------------
| Creation : 20070809
| Auteur   : gda
| Revision : 
| Auteur   : 
| Version : 2.00
|----------------------------------------------------------------------------
| Parametres : E  s_valeur : valeur a verifier
|				          s_msg : message a afficher a l utilisateur
|              S
| Retour :  Affiche un message a l utilisateur et retourne false si la valeur saisie n est pas un nombre
****************************************************************************/ 
function fn_verifNumber(s_valeur,s_msg)
{  
  if(isNaN(parseFloat(s_valeur)))  
  {
    //Affichage du message a l utilisateur
    alert(s_msg);
    //Retourne false
    return false;   
  }     
}

/*fn_checkForm****************************************************
| description : Force la saisie de tous les types de champs d un formulaire
|----------------------------------------------------------------------------
| Algorithme :
|----------------------------------------------------------------------------
| Creation : 20070303
| Auteur   : gda
| Revision : 20070728
| Auteur   : 
| Version : 1.02
|----------------------------------------------------------------------------
| Parametres : E  obj_form : objet formulaire a verifier
|				  tab_champOblig : tableau contenant les champs obligatoires
|				  tab_champDescription : tableau contenant la description des champs obligatoires
|				  s_msg : Message a afficher a l utilisateur
|              S
| Retour :  Affiche un message a l utilisateur si tous les champs obligatoires ne sont pas saisis
****************************************************************************/ 
function fn_checkForm(tab_champOblig,tab_champDescription,obj_form,s_msg)
{

	s_msg = s_msg + "\n";

    //Variable contenant le message a afficher	
	var l_Msg = s_msg.length;
	
	//Variable contenant le debut du message a afficher
	var alertMsg = s_msg;
	
	//Parcours du tableau contenant la liste des champs obligatoires
	for (var i = 0; i < tab_champOblig.length; i++)
	{
	  //Recuperation de l objet obligatoire
      var obj = obj_form.elements[tab_champOblig[i]];
	    //Test si l objet existe
		if (obj)
		{
		  //switch en fonction du type d objet
		  switch(obj.type)
		  {
			//Cas select simple
			case "select-one":
			    //Si le select n a pas d element selectionne
				if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "" || obj.options[obj.selectedIndex].value == -1)
				{
					//Incrementation du message a afficher a l utilisateur
					alertMsg += " - " + tab_champDescription[i] + "\n";
				}
				break;
			//Cas select multiple
			case "select-multiple":
			    // Si aucune selection
				if (obj.selectedIndex == -1)
				{
					//Incrementation du message a afficher a l utilisateur
					alertMsg += " - " + tab_champDescription[i] + "\n";
				}
				break;
			//Cas texte
			case "text":
			//Cas textarea
			case "textarea":
			    //Si pas de texte saisi
				if (obj.value == "" || obj.value == null)
				{
					//Incrementation du message a afficher a l utilisateur
					alertMsg += " - " + tab_champDescription[i] + "\n";
				}
				break;
			//Cas par defaut
			default:
			    //Si objet vide ou null
				if (obj.value == "" || obj.value == null)
				{
					//Incrementation du message a afficher a l utilisateur
					alertMsg += " - " + tab_champDescription[i] + "\n";
				}
			}
		}
	}

	//Test si le message a afficher est different du message de depart
	if (alertMsg.length != l_Msg)
	{
		//Affichage du message a l utilisateur
		alert(alertMsg);
		//retourne false
		return false;
	}
}

/*fn_ajouterLigne****************************************************
| description : Ajoute une (des) lignes dans une liste
|----------------------------------------------------------------------------
| Algorithme :
|----------------------------------------------------------------------------
| Creation : 20070124
| Auteur   : gda
| Revision : 20070729
| Auteur   : gda
| Version : 1.01
|----------------------------------------------------------------------------
| Parametres : tabLibelle : tableau contenant les libelles des lignes a ajouter
|			   tabValeur : tableau contenant les valeurs des lignes a ajouter
|			   obj_liste : objet liste dans lequel ajouter la ligne
|
| Retour : Ajoute une ligne dans une liste
****************************************************************************/
function fn_ajouterLigne(tabLibelle,tabValeur,obj_liste) 
{

  //Test si le tableau des libelles a le meme nbre d elements que le tableau des valeurs
  if(tabLibelle.length != tabValeur.length) return false;
  
  //Parcours des tableaux pour ajouter les lignes
  for(i=0;i < tabLibelle.length; i++)
  {
    //Declaration de la nouvelle option
    var o=new Option(tabLibelle[i],tabValeur[i]);
    //Ajout de la nouvelle option
    obj_liste.options[obj_liste.options.length] = o;
  }
  
}

/*fn_ordonnerListe****************************************************
| description : Ordonne une liste (vers le haut ou vers le bas)
|----------------------------------------------------------------------------
| Algorithme :
|----------------------------------------------------------------------------
| Creation : 20070124
| Auteur   : gda
| Revision : 20070729
| Auteur   : gda
| Version : 1.01
|----------------------------------------------------------------------------
| Parametres : obj_liste1 : objet liste a ordonner
|			   i_selectedIndex : index de l element selectionne
|			   i_type : type
|			     haut : vers le haut
|				 bas : vers le bas
|
| Retour : Ordonne une liste (vers le haut ou vers le bas)
****************************************************************************/
function fn_ordonnerListe(obj_liste,i_selectedIndex,i_type) 
{
  //Test si au moins un element a ete selectionne	
  if(i_selectedIndex >= 0)
  {
    switch(i_type)
    {
	 //monter
     case "haut" :
	   //Si c le premier element de la liste, on quitte la fonction
	   if(i_selectedIndex == 0) return;	   
	   i_type = i_selectedIndex - 1;
	   break;
	 //Descendre  
	 case "bas" :
	   //Si c le dernier element de la liste, on quitte la fonction
	   if(i_selectedIndex == obj_liste.options.length-1) return;
	   i_type = i_selectedIndex + 1;
	   break;	 
    }
    //Recuperation de la valeur de l element selectionne	
    var valeur=obj_liste.options[i_selectedIndex].value;
    //Recuperation du libelle de l element selectionne
    var texte=obj_liste.options[i_selectedIndex].text;
  
    obj_liste.options[i_selectedIndex].value=obj_liste.options[i_type].value;
    obj_liste.options[i_selectedIndex].text=obj_liste.options[i_type].text;
    obj_liste.options[i_type].value=valeur;
    obj_liste.options[i_type].text =texte;
    obj_liste.selectedIndex=i_type
  }
}

/*fn_ordreListe****************************************************
| description : Recupere l ordre d un liste
|----------------------------------------------------------------------------
| Algorithme :
|----------------------------------------------------------------------------
| Creation : 20070810
| Auteur   : gda
| Revision : 
| Auteur   : 
| Version : 1.00
|----------------------------------------------------------------------------
| Parametres : obj_liste1 : objet liste 
|              s_separateur : separateur entre les differentes options d une liste 
|
| Retour : Recupere l ordre d un liste
****************************************************************************/
function fn_ordreListe(obj_liste,s_separateur) 
{

   //Variable contenant l ordre de la liste
   var s_ordre = "";
   
   //Parcours des elements de la liste
   for(i=0;i < obj_liste.options.length; i++)
   {
     if(s_ordre.length ==  0) s_ordre = obj_liste.options[i].value;
     else s_ordre = s_ordre + s_separateur + obj_liste.options[i].value;
   }
   
   //Retourne l ordre de la liste
   return s_ordre;
}

/*fn_confirmSaisie****************************************************
| description : Verifie que la confirmation est identique a la saisie principale
|----------------------------------------------------------------------------
| Algorithme :
|----------------------------------------------------------------------------
| Creation : 20070122
| Auteur   : gda
| Revision : 
| Auteur   : 
| Version : 1.00
|----------------------------------------------------------------------------
| Parametres : E  s_valeur1 : valeur principale
|				  s_valeur2 : valeur confirmee
|			   	  s_msg : message à afficher a l utilisateur
|              S
| Retour :  Affiche un message a l utilisateur si la valeur de confirmation n est pas identique a la valeur saisie
****************************************************************************/ 
function fn_confirmSaisie(s_valeur1,s_valeur2,s_msg) 
{
  //Test si la valeur saisie est identique a la valeur confirmee
  if(s_valeur1 != s_valeur2)
  {
	  //Affichage du message a l utilisateur
	  alert(s_msg);
	  //Retourne false
	  return false;
  }
}


/*fn_ttcPaysLivraison**************************************************
| description : Permet de modifier le prix unitaire, les frais de ports,
| le total TTC en fonction du pays de livraison choisi via XMLHTTPRequest
**********************************************************************/
function fn_ttcPaysLivraison(i_pays,i_mode)
{
	//Si l'objet existe déjà on abandonne la requête et on le supprime
	if(XHR && XHR.readyState != 0)
	{
		XHR.abort();
		delete XHR;
	}

	//Création de l'objet XMLHTTPRequest
	XHR = getXMLHTTP();

	if(!XHR) return false; 
	
	//URL du script de sauvegarde auquel on passe la valeur à modifier	
	XHR.open("POST", "ttcPaysLivraison.php", true);
	XHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	//On se sert de l'événement OnReadyStateChange pour supprimer l'input et le replacer par son contenu
	XHR.onreadystatechange = function()
	{
	   
		//Si le chargement est terminé
		if (XHR.readyState == 4)
		{
		  alert(XHR.responseText)
		}
	}
		
	//Creation de la variable parametre a envoyer
	param = "idPays=" + i_pays
	param = param + "&mode=" + i_mode

	//Envoi de la requête
	XHR.send(param);
	
}

/*fn_confirmValidationCommande*********************************************
| description : Affiche un message de confirmation avant redirection vers la page definie
| 
**************************************************************************/
function fn_confirmValidationCommande(s_msg,s_url)
{
  if(confirm(s_msg))
    document.location.href = s_url;
  else
    return false;
}