//Panier écrit en javascript
//Copyright Anne-Marie Schwartz, 2003
// Fonction AjoutPanier
// paramètres en entrée : formulaire, code article, quantité saisie, autre info
// paramètre en sortie : booleen pour maj
// maj des cookies et message
// permet d'ajouter un produit au panier


function AjoutPanier(form,code_article,qte_article,autre_info_article)
{
	var nb_articles = 0;
	var ligne_achats = new Array();
	var infos_achats = new Array();
	var position_panier = 0;
	var present_panier = 0;
	var presence_panier = "00";
	var code_article_panier= " ";
	var qte_article_panier = 0;
	var autre_info_article_panier =" ";
	var qte_tot_article_panier = 0;
	var cookie_achats;
	var indexi;
	var mauvais = "!#$%^&*()/:;,+";
	var caractere = "";
	var indexv;
	var boo_car;
	var recherche;
	var recherchef;
	var nom_page;

	var maj_panier = false; //booleen pour resultat
	infos_achats[3] = maj_panier;

	var ajout_panier = form.substring(0,3); //contient AJO ou MOD en minuscules + autres car
	infos_achats[4] = ajout_panier;

	if (autre_info_article == null)
		autre_info_article = " ";
	    

	//avant de commencer, il faut vérifier que les quantités saisies sont correctes, sinon, il faut sortir de la fonction et recommencer

	ControleQuantite(code_article,qte_article,autre_info_article,ligne_achats,infos_achats);
	maj_panier = infos_achats[3];
	ajout_panier = infos_achats[4];

	if (maj_panier == false)
	{
		document.forms[form].elements['qte_article'].focus();
		return false;
	}
	else
	{
		// on en profite pour contrôler que la saisie est correcte dans autre info article:
		boo_car = 0;
		for (indexv=0;indexv<mauvais.length;indexv++)
		{
			caractere = mauvais.charAt(indexv);
			if (autre_info_article.indexOf(caractere) != -1)
			{
				if (langue=="FR")
					alert("merci de ne pas saisir le caractère " + caractere + " dans cette zone");
				if (langue=="EN")
					alert("please do not use " + caractere + " in this field");
				if (langue=="DE")
					alert("bitte nicht " + caractere + " in diesem feld verwenden");
				boo_car=1;
				maj_panier = false;
			}
		}
		if (boo_car == 1)
		{	
			document.forms[form].elements['autre_info_article'].focus();
			return false;
		}
	}

	// on revient ici si la quantité est acceptée et pourra donner lieu à une mise à jour sinon une des fonction aura été arrêtée
	// les deux variables position_panier et present_panier ont pu être mises à jour si on a trouvé l'article dans le panier sinon elles ont toujours leur valeur initiale

	nb_articles = infos_achats[0];
	presence_panier = infos_achats[1];
	qte_article_panier = infos_achats[2];


	if (nb_articles == 0) //panier vide
	{
		// on met le nombre d'articles commandés à 1 et on écrit le cookie nbart
		// on met à jour la première occurence du cookie achats
		nb_articles = 1
		DefinirCookie("nbart",nb_articles);		
		ligne_achats[0] = code_article + ":" + qte_article  + ":" + escape(autre_info_article);
		cookie_achats = ligne_achats[0];
		DefinirCookie("achats",cookie_achats);
		if (langue=="FR")
			alert("Cet article a été ajouté " + qte_article + " fois à votre panier");
		if (langue=="EN")
			alert("This item has been added " + qte_article + " time(s) to your shopping cart");
		if (langue=="DE")
			alert("Dieser Artikel wurde " + qte_article + " mal in Ihren Warenkorb gelegt");
	}
	else
	{
		//verification de la présence de cet article avec les memes infos articles dans le panier
		//si oui on incrémente la quantite avec max à 9, sinon, on crée une nouvelle occurence
		//cela a déjà été fait au moment du controle des valeurs et on sait où est l'article
		present_panier = presence_panier.substring(0,1);
		position_panier = parseInt(presence_panier.substring(1,presence_panier.length));

			
		if (present_panier == 0) // l'article n'est pas encore dans le panier
		{
			nb_articles = parseInt(nb_articles) +1
			SupprimerCookie("nbart");
			DefinirCookie("nbart",nb_articles);

			ligne_achats[nb_articles-1] = code_article + ":" + qte_article + ":" + escape(autre_info_article);
		}
		else
		{//l'article est déjà dans le panier, le nombre d'articles n'est pas modifié, la quantité est mise à jour
			ligne_achats[position_panier] = code_article + ":" + (parseInt(qte_article) + parseInt(qte_article_panier)) + ":" + escape(autre_info_article);
		}

		// remplissage de cookie_achats par les occurences de ligne_achats séparées par des slashs

		indexi =1 ;
		cookie_achats = ligne_achats[0];
		while (indexi < nb_articles)
		{
			cookie_achats = cookie_achats + "/" + ligne_achats[indexi];
			indexi = parseInt(indexi) + 1;
		}
		SupprimerCookie("achats");
		DefinirCookie("achats",cookie_achats);
		if (langue=="FR")
			alert("Cet article a été ajouté " + qte_article + " fois à votre panier");
		if (langue=="EN")
			alert("This item has been added " + qte_article + " time(s) to your shopping cart");
		if (langue=="DE")
			alert("Dieser Artikel wurde " + qte_article + " mal in Ihren Warenkorb gelegt");

	}
//	location.href=location.href;
	document.forms[form].elements['qte_article'].value=1;
	document.forms[form].elements['autre_info_article'].value=" ";
	return false; // cette ligne est artificielle, c'est uniquement pour que la page ne soit pas rechargée au début
}



// Fonction ModifiePanier
// paramètres en entrée : formulaire, code article, quantitée modifiée, autre info
// pas de paramètres en sortie : maj des cookies et message
// permet de modifier la quantité d'un produit du panier

function ModifiePanier(form,code_article,qte_article,autre_info_article)
{
	// cette fonction est appelée à partir de l'affichage du panier complet.
	// On est sur de retrouver l'article dans le panier
	// il faut d'abord faire les contrôles comme en création d'occurence, puis mettre à jour le panier

	var nb_articles = 0;
	var ligne_achats = new Array();
	var infos_achats = new Array();
	var position_panier = 0;
	var present_panier = 0;
	var presence_panier = "00";
	var code_article_panier= " ";
	var qte_article_panier = 0;
	var autre_info_article_panier =" ";
	var qte_tot_article_panier = 0;
	var cookie_achats;
	var indexi;

	var nom_champ;
	nom_champ = document.forms[form].elements["q" + code_article];

	var maj_panier = false; //booleen pour resultat
	infos_achats[3] = maj_panier;

	var ajout_panier = form.substring(0,3); //contient AJO ou MOD en minuscules + autres car
	infos_achats[4] = ajout_panier;

	if (autre_info_article == null)
		autre_info_article = " ";
	    

	//avant de commencer, il faut vérifier que les quantités saisies sont correctes, sinon, il faut sortir de la fonction et recommencer

	ControleQuantite(code_article,qte_article,autre_info_article,ligne_achats,infos_achats);

	maj_panier = infos_achats[3];

	if (maj_panier == false)
	{
		//on met le focus sur le champ et on sort du programme
		location.href=location.href
		nom_champ.focus();
	}
	else
	{
		// on revient ici si la quantité est acceptée et pourra donner lieu à une mise à jour sinon une des fonction aura été arrêtée
		// les deux variables position_panier et present_panier ont pu être mises à jour car on a trouvé l'article dans le panier sinon elles ont toujours leur valeur initiale

		nb_articles = infos_achats[0];
		presence_panier = infos_achats[1];
		qte_article_panier = infos_achats[2];

		present_panier = presence_panier.substring(0,1);
		position_panier = parseInt(presence_panier.substring(1,presence_panier.length));
			
		//l'article est déjà dans le panier, le nombre d'articles n'est pas modifié, la quantité est mise à jour
		ligne_achats[position_panier] = code_article + ":" + qte_article + ":" + escape(autre_info_article);
		// remplissage de cookie_achats par les occurences de ligne_achats séparées par des slashs

		indexi =1 ;
		cookie_achats = ligne_achats[0];
		while (indexi < nb_articles)
		{
			cookie_achats = cookie_achats + "/" + ligne_achats[indexi];
			indexi = parseInt(indexi) + 1;
		}
		SupprimerCookie("achats");
		DefinirCookie("achats",cookie_achats);
		if(langue=="FR")
			alert("Cet article figure maintenant " + qte_article + " fois dans votre panier");
		if(langue=="EN")
			alert("This item appears now " + qte_article + " time(s) in your shopping cart");
		if(langue=="DE")
			alert("Dieser Artikel liegt jetzt" + qte_article + " mal in Ihrem Warenkorb");
		location.href=location.href;
	}
}



// Fonction ControleQuantite
// paramètre en entrée = code article, quantité, autre info + tableau des lignes à remplir + infos comme la présence et la position et le booleen erreur
// pas de paramètre en sortie
// permet de faire les contrôles sur les quantités. En cas de problème, la fonction s'arrête

function ControleQuantite(code_article,qte_article,autre_info_article,ligne_achats,infos_achats)
{
	var car_achats;
	var i;
	var chaine_uncar;

	nb_articles = infos_achats[0];
	presence_panier = infos_achats[1];
	maj_panier = infos_achats[3];
	ajout_panier = infos_achats[4];
	
	// on vérifie que c'est un nombre 
	for(i=0;i<qte_article.length;i++)
	{
		chaine_uncar = qte_article.substring(i,i+1);
		if((chaine_uncar < "0") || (chaine_uncar > "9"))
//		if(isNaN(qte_article))
		{
			if(langue=="FR")
				alert("Vous devez saisir un nombre compris entre 1 et 9");
			if(langue=="EN")
				alert("You must select a number between 1 and 9");
			if(langue=="DE")
				alert("Sie mussen ein Ziffer zwischen 1 und 9 eingeben");
			return ;
		}
	}

	//on vérifie que la quantité est <=9
	if ((qte_article < 1) || (qte_article>9))
	{
		if(langue=="FR")
			alert("Vous devez saisir un nombre compris entre 1 et 9. Au dela de 9, consultez-nous pour obtenir un tarif préférentiel.");
		if(langue=="EN")
				alert("You must select a number between 1 and 9. Above 9, contact us for a better price");
		if(langue=="DE")
				alert("Sie mussen ein Ziffer zwischen 1 und 9 eingeben. Über 9 kontaktieren Sie uns für ermässigten Preisen");
		return;
	}
	// on vérifie que la quantité totale demandée de ce produit est <=9
	// la quantité totale est égale à la quantité saisie + la quantité déjà sur le bon de commande et stockée dans le cookie achats
	// on vérifie que la quantité saisie est compatible avec le stock
	// deux cas se présentent: ou bien c'est la première fois que l'article est sélectionné et on regarde directement s'il est disponible
	// ou bien l'article figure déjà au panier et dans ce cas, il faut aussi vérifier que le quantité totale est disponible


	PresencePanier(code_article,qte_article,autre_info_article,ligne_achats,infos_achats);

	nb_articles = infos_achats[0];
	presence_panier = infos_achats[1];
	var index_premier_car;
	var index_dernier_car;

	present_panier = presence_panier.substring(0,1);
	position_panier = parseInt(presence_panier.substring(1,presence_panier.length));

	if (present_panier == 0) // l'article n'est pas dans le panier
	{// on vérifie directement la quantité saisie par rapport aux disponibilités
		if (ControleDispo(code_article,qte_article) == false) // article non disponible dans les quantités voulues
			return;
	}
	else
	{// l'article est déja dans le panier. la quantité totale demandée doit être disponible dans le cas de l'ajout
	// la nouvelle quantié saisie dans le cas d'une modification
		car_achats = ligne_achats[position_panier];
		index_premier_car = 0;
		index_premier_car = car_achats.indexOf(":", index_premier_car); // donne l'emplacement du premier :
		index_dernier_car = parseInt(index_premier_car) + 1;
		index_premier_car = parseInt(index_premier_car) + 1;
		index_dernier_car = car_achats.indexOf(":", index_dernier_car); // donne l'emplacement du second :

		qte_article_panier = car_achats.substring(index_premier_car,index_dernier_car); // la quantité d'article est le caractère compris entre les deux :
		infos_achats[2] = qte_article_panier;
		if (ajout_panier == "ajo") // ajout
		{
			qte_tot_article_panier = parseInt(qte_article_panier) + parseInt(qte_article);
			if (qte_tot_article_panier >"9")
			{
				if (langue=="FR")
					alert("Vous avez déjà inscrit " + qte_article_panier + " fois cet article dans votre panier. Vous pouvez le faire encore " + parseInt(9 - qte_article_panier) + " fois ici mais pas plus. Demandez nous un tarif préférentiel au-delà.");
				if (langue=="EN")
					alert("You already put this item " + qte_article_panier + " time(s) in your shopping cart. You can still add it " + parseInt(9 - qte_article_panier) + " time(s) here but not more. Ask for a better price above 9.");
				if (langue=="DE")
					alert("Sie haben schon " + qte_article_panier + " mal diesen Artikel in Ihrem Warenkorb. Sie können ihn noch " + parseInt(9 - qte_article_panier) + " mal hier legen. Über 9 kontakten Sie uns für ermässigten Preisen.");
				return;
			}
		}
		else
		{//modif
			qte_tot_article_panier = qte_article;
		}
		if (ControleDispo(code_article,qte_tot_article_panier) == false) // article non disponible dans les quantités voulues
			return;
	}

	maj_panier = true; // si on est arrivé jusque là, c'est que tout les contrôles sont OK et on peut donc faire la mise à jour
	infos_achats[3] = maj_panier;

} 

// Fonction PresencePanier
// paramètre en entrée = code article, quantité, autre info + tableau des lignes à remplir + nb articles à remplir + presence panier
// pas de paramètre en sortie
// permet de savoir si l'article est déjà dans le panier et où pour éviter de refaire les boucles en mise à jour


function PresencePanier(code_article,qte_article,autre_info_article,ligne_achats,infos_achats)
{

	var present = 0;
	var position = 0;
	var cookie_achats = " ";
	var indexj;
	var index_premier_car;
	var index_dernier_car;
	var car_achats; // permet de récupérer correctement les infos de chaque ligne d'achat

	nb_articles = LireCookie("nbart");
	//récupère le nombre d articles commandés

	if (nb_articles == null)
		nb_articles = 0;

	presence_panier="00";
		
	if (nb_articles != 0) // panier non vide
	{// il y a au moins un article dans le panier

	//verification de la présence de cet article avec les memes infos articles dans le panier
	// on commence par récupérer le cookie achats

		cookie_achats = LireCookie("achats");
		if (nb_articles > 1)
		{// il y a plusieurs lignes articles qui sont séparées par des slashs

			indexj = 0;
			index_premier_car = 0;
			while(indexj<nb_articles)
			{
				index_dernier_car = cookie_achats.indexOf("/",index_premier_car); // donne l'emplacement du slash suivant
				ligne_achats[indexj]=cookie_achats.substring(index_premier_car,index_dernier_car);
				indexj = indexj + 1;
				index_premier_car = parseInt(index_dernier_car) + 1;
				if (indexj == nb_articles - 1) // on est à la fin, on doit prendre ce qui reste
				{
					ligne_achats[indexj]=cookie_achats.substring(index_premier_car,cookie_achats.length);
					indexj = indexj + 1
				}
			}
		}
		else
		{// un seul article qu'on met dans la première ligne
			ligne_achats[0] = cookie_achats;
		}
		
		var index = 0;	
		while (index <nb_articles)
		{
			car_achats = ligne_achats[index];
			// chaque ligne est constituée ainsi : code article : qte : autre info
			index_premier_car = 0;
			index_dernier_car = car_achats.indexOf(":", index_premier_car); // donne l'emplacement du premier :
			code_article_panier =car_achats.substring(index_premier_car,index_dernier_car); 
			index_premier_car = parseInt(index_dernier_car) + 1;
			index_dernier_car = car_achats.indexOf(":", index_premier_car); // donne l'emplacement du second :
			index_premier_car = parseInt(index_dernier_car) + 1;
			autre_info_article_panier = unescape(car_achats.substring(index_premier_car,car_achats.length));

			if ((code_article_panier == code_article) && (autre_info_article_panier == autre_info_article))
			{ // article déjà commandé
				present = "1";
				position = index;
				presence_panier = present + parseInt(index);
				index=nb_articles; // la fonction va s'arrêter là puisqu'on a trouvé le bon
			}
			else
			{ //rechercher à l'occurence suivante
				index = index + 1;
			}
		}
	}
	infos_achats[0] = nb_articles;
	infos_achats[1] = presence_panier;
}


// Fonction RetirePanier
// paramètres en entrée : code article et autre info
// pas de paramètres en sortie : maj des cookies et message
// permet de retirer un produit du panier

function RetirePanier(code_article,autre_info_article)
{
	// cette fonction est appelée à partir de l'affichage du panier complet.Il y a donc au moins un article dans le panier
	// on recherche d'abord le nombre d'aricles. S'il est egal à 1, supprimer l'article revient à vider totalement le panier
	// sinon, il faut supprimer la ligne concernée et mettre à jour le panier 

	var nb_articles = 0;
	var ligne_achats = new Array();
	var code_article_panier;
	var autre_info_article_panier =" ";
	var position = 0; // sert à indiquer à quelle ligne se trouve l'article dans le panier
	var cookie_achats = " ";
	var index;
	var indexj;
	var index_premier_car;
	var index_dernier_car;
	var car_achats; // permet de récupérer correctement les infos de chaque ligne d'achat

	nb_articles = LireCookie("nbart");
	//récupère le nombre d articles commandés

		
	if (nb_articles == 1) // le panier ne contient qu'un seul article qu'on supprime
	{
		// on supprime le cookie nombre article et le cookie achats
		nb_articles = 0;
		SupprimerCookie("nbart");
		SupprimerCookie("achats");
		if (langue=="FR")
			alert("Cet article a été supprimé de votre panier.\n Votre panier est vide");
		if (langue=="EN")
			alert("This item has been removed.\n Your shopping cart is empty");
		if (langue=="DE")
			alert("Dieser Artikel wurde gelöscht.\n Ihr Warenkorb ist leer");

	}
	else
	{
		//récupération de cet article dans le panier
		// on commence par récupérer le cookie achats

		cookie_achats = LireCookie("achats");
		// il y a plusieurs lignes articles qui sont séparées par des slashs
		// alternative à l'utilisation de split: on recupère chaque valeur dans le tableau ligne_achats
		indexj = 0;
		index_premier_car = 0;
		while(indexj<nb_articles)
		{
			index_dernier_car = cookie_achats.indexOf("/",index_premier_car) // donne l'emplacement du slash suivant
			ligne_achats[indexj]=cookie_achats.substring(index_premier_car,index_dernier_car);
			indexj = indexj + 1;
			index_premier_car = parseInt(index_dernier_car) + 1;
			if (indexj == nb_articles - 1) // on est à la fin, on doit prendre ce qui reste
			{
				ligne_achats[indexj]=cookie_achats.substring(index_premier_car,cookie_achats.length);
				indexj = indexj + 1
			}
		}
		
		index = 0;	
		while (index <nb_articles)
		{
			car_achats = ligne_achats[index]; // on transfere chaque valeur du tableau dans car_achats pour en extraire le code article
			// chaque ligne est constituée ainsi : code article : qte : autre info
			index_premier_car = 0;
			index_dernier_car = car_achats.indexOf(":", index_premier_car); // donne l'emplacement du premier :
			code_article_panier =car_achats.substring(index_premier_car,index_dernier_car); 
			index_premier_car = parseInt(index_dernier_car) + 1;
			index_dernier_car = car_achats.indexOf(":", index_premier_car); // donne l'emplacement du second :
			index_premier_car = parseInt(index_dernier_car) + 1;
			autre_info_article_panier = unescape(car_achats.substring(index_premier_car,car_achats.length));

			if ((code_article_panier == code_article) && (autre_info_article_panier == autre_info_article))
			{ // article trouve
				position = index;
				index=nb_articles; // la fonction va s'arrêter là puisqu'on a trouvé le bon
			}
			else
			{ //rechercher à l'occurence suivante
				index = index + 1;
			}
		}

		//on décalle de 1 rang tous les articles du panier à partir de celui au rang position inclus
		index = position;
		indexj = parseInt(index) +1;
		while (indexj<nb_articles)
		{
			ligne_achats[index] = ligne_achats[indexj];
			index = parseInt(index) + 1;
			indexj = parseInt(indexj) + 1;
		}
		ligne_achats[index] = null;
	
		// on reformate le cookie_achats et on le met à jour
		// on diminue la quantite de 1 dans le cookie nb d'articles

		nb_articles = parseInt(nb_articles)- 1;
		cookie_achats = ligne_achats[0];
		index = 1;
		while (index < nb_articles)
		{
			cookie_achats = cookie_achats + "/" + ligne_achats[index];
			index = parseInt(index) + 1;
		}

		SupprimerCookie("achats");
		DefinirCookie("achats",cookie_achats);
		SupprimerCookie("nbart");
		DefinirCookie("nbart",nb_articles);
		if (langue=="FR")
			alert("Cet article a été supprimé de votre panier");
		if (langue=="EN")
			alert("This item has been removed");
		if (langue=="DE")
			alert("Dieser Artikel wurde gelöscht");
		
	}
	location.href=location.href;
}




// Fonction ControleDispo
// paramètre en entree = code article, quantité souhaitée, 
// paramètre en sortie = disponibilité
// permet de savoir si un article est disponible en stock

function ControleDispo(code_article,qte_article)
{
	var article_dispo = true;
	var code_article_non_dispo = " ";
	var reste_article_non_dispo = 0;
	var index_premier_car =0;
	var index_dernier_car =0;


	for (i=0;i<article_non_dispo.length;i++)
	{
		// chaque ligne est constituée ainsi : code article : qte restante
		index_premier_car = 0;
		index_dernier_car = article_non_dispo[i].indexOf(":", index_premier_car); // donne l'emplacement du :
		code_article_non_dispo = article_non_dispo[i].substring(index_premier_car,index_dernier_car);
		index_premier_car = parseInt(index_dernier_car) + 1;
		reste_article_non_dispo = unescape(article_non_dispo[i].substring(index_premier_car,article_non_dispo[i].length));


		if ((code_article_non_dispo == code_article) && (qte_article > reste_article_non_dispo))
		{ // cette partie est imparfaite car il n'y a pas de contrôle de la base de donnée, mais c'est mieux que rien
		// on vérifie que la quantité commandée est inférieure ou égale à la quantité restant en stock pour l'article indisponible ou presque
			if (reste_article_non_dispo == 0)
			{
				if(langue=="FR")
					alert("Cet article est momentanément indisponible. Veuillez-nous en excuser");
				if(langue=="EN")
					alert("This item is for the moment unavailable. Please excuse us");
				if(langue=="DE")
					alert("Dieser Artikel ist zur Zeit nicht verfügbar. Bitte Entschuldigen Sie uns");
			}
			else
			{
				if(langue=="FR")
					alert("Il ne reste que " + reste_article_non_dispo + " article(s) de ce type dans notre stock.");
				if(langue=="EN")
					alert("We do not have more than " + reste_article_non_dispo + " item(s) at the moment.");
				if(langue=="DE")
					alert("Nur " + reste_article_non_dispo + " Artikel sind zur Zeit verfügbar.");
			}
			article_dispo = false;
			return article_dispo;
			break;
		}
	}
	return article_dispo;
}


// fin du javascript
