function getListeSelected(nom)
{
	var selectedList = new Array();
	var selectBox = $(nom);
	for(var i=0; i < selectBox.options.length; i++)
	{
		if(selectBox.options[i].selected)
			selectedList.push(selectBox.options[i].value);
	}
	return selectedList;
}

function getFirstSelected(nom)
{
	var selected = '';
	var selectBox = $(nom);
	for(var i=0; i < selectBox.options.length; i++)
	{
		if(selectBox.options[i].selected)
		{
			selected = selectBox.options[i].value;
			break;
		}
	}
	return selected;
}
//Recupere les elements ayant une classe donnée (on peut préciser le genre de tag et le contenu dans lequel recherché) 
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;
}

function array_search( needle, haystack, argStrict ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: array_search('zonneveld', {firstname: 'kevin', middle: 'van', surname: 'zonneveld'});
    // *     returns 1: 'surname'
 
    var strict = !!argStrict;
    var key = '';
 
    for(key in haystack){
        if( (strict && haystack[key] === needle) || (!strict && haystack[key] == needle) ){
            return key;
        }
    }
 
    return false;
}

function ParseSortable(bloc)
{
	var tabTable = bloc.select('table.sortable');
	for(var i = 0; i < tabTable.length; i++)
	{
		var table = tabTable[i];
		sorttable.makeSortable(table);
	}
}

function getBlocCotation(element)
{
	var msgAttente = $('message_attente');
	var blocache = element.id.replace('lien_','');
	var bloc = $(blocache);
	var en_cours = $('encours:'+blocache);
	if(en_cours.value == '1')
		return;
	en_cours.value = '1';
	var msgAttente = $('message_attente:'+blocache);
	new Effect.Grow(msgAttente, {queue:'front'});
	var tab = blocache.split(':');
	if(tab.length > 1)
	{
		idproduit = tab[0];
		numl = ':'+tab[1];
	}
	else
	{
		idproduit = blocache;
		numl = '';
	}
	idproduit = idproduit.replace('cotation_', '');
	new Ajax.Request(urlaff, {
		asynchronous: 'true',
		postBody: 'tpl=catalogue/bloc_cotation&idproduit='+idproduit+'&reference='+numl,
		onSuccess: function (ahr)
		{
			new Effect.Appear(bloc, {queue:'end', beforeStart: function(){
				bloc.innerHTML = ahr.responseText;
				bloc.setStyle({marginTop: '', position:'', top:''});
				//On masque tous les blocs de cotation
				//On recherche tous les div de la classe bloc_cot
				var blocs = $$('div.bloc_cot');
				for(var i = 0; i < blocs.length; i++)
					blocs[i].style.display = "none";
			}});
			new Effect.Fade(msgAttente, {queue:'end', afterFinish: function(){en_cours.value = 0; Behaviour.apply();}});
		}
	});
}

function doCotation(cote)
{
	var url = siteencours+'module/ajax/index.php?module=cotation';
	var idproduit = cote.id.replace('cotation_','');
	var tab = idproduit.split(':');
	var elemt = idproduit;
	if(tab.length > 1)
		idproduit = tab[0];
	//On recupere la quantite saisie
	var qte = $('quantite_'+elemt).value;
	new Ajax.Request(url, {
			aynchronous: 'true', 
			postBody: 'feed='+idproduit+'&qte='+qte,
			onLoading: function (xhr)
			{
				//On masque les boutons de resultat de l'interrogation
				$('cotation_echec_'+elemt).style.display = 'none';
				$('cotation_succes_'+elemt).style.display = 'none';
				$('allo_stock_'+idproduit).style.display = 'none';
				//On met a jour le message d'attente de l'interrogation
				$('message_ajax_'+elemt).style.height = '26px';
				$('message_ajax_'+elemt).style.background = 'transparent url(media/img/phx/curseur/attente_24.gif) top left no-repeat';
				$('message_ajax_'+elemt).innerHTML = 'Patientez... interrogation du stock en cours';
			},
			onFailure: function (xhr)
			{
				$('message_ajax_'+elemt).style.background = '';
				$('message_ajax_'+elemt).innerHTML = xhr.status+ ' : ' + xhr.statusText;
				$('cotation_echec_'+elemt).style.display = 'block';
				$('cotation_succes_'+elemt).style.display = 'none';
				$('allo_stock_'+idproduit).style.display = 'none';
            },
			onSuccess: function(xhr)
			{
				var temmp = xhr.responseText;
				var tabtmp = temmp.split('|');
				var setqte = false;
				$('message_ajax_'+elemt).style.height = '0px';
				$('message_ajax_'+elemt).style.background = '';
				$('message_ajax_'+elemt).innerHTML = '';
				if(tab.length > 1)
				{
					//On vérifie si on est dans le cas de l'historique des commandes
					var Expression = new RegExp(":livraison_.*");
					if(Expression.test(elemt))
					{
						//Historique des commandes
						var elemtpu = tab[0]+':'+tab[1];
						if(tab.length <= 2)
						{
							//Cas du clic sur le bouton dans l'historique des commandes
							setqte = true;
						}
					}
					else
					{
						//Cas du clic sur le bouton d'une promo dans l'affichage d'un produit
						var elemtpu = tab[0];
					}
				}
				else
				{
					//Cas du clic sur le bouton dans l'affichage d'un produit
					var elemtpu = tab[0];
					setqte = true;
					
				}
				//On regarde si on met à jour le prix total
				if(tabtmp[0] == 1 || tabtmp[0] == 0)
				{
					if(setqte)
					{
						$('total_cotation_'+elemt).innerHTML = tabtmp[2]+ " €";
					}
					//Si l'interrogation de l'erp a reussi, on met a jour le prix
					$('pu_net_'+elemtpu).innerHTML = tabtmp[1]+" €";
					if(tabtmp[0] == 1)
					{
						//Stock OK
						$('cotation_echec_'+elemt).style.display = 'none';
						$('cotation_succes_'+elemt).style.display = 'block';
						$('allo_stock_'+idproduit).style.display = 'none';
					}
					else
					{
						//Stock !OK
						$('cotation_echec_'+elemt).style.display = 'block';
						$('cotation_succes_'+elemt).style.display = 'none';
						$('allo_stock_'+idproduit).style.display = 'block';
					}
				}
				else
				{
					//Message d'erreur lors de l'interrogation de l'erp
					$('message_ajax_'+elemt).style.height = '26px';
					$('message_ajax_'+elemt).style.background = '';
					$('message_ajax_'+elemt).innerHTML = tabtmp[0];
				}						
				
			}
			}
		);
}

function ajoutFavori(favori)
{
	var url = siteencours+'module/ajax/index.php?module=produitfavori';
	var idprod = favori.id.replace('vers_favori_cotation_','');
	var tab = idprod.split(':');
	if(tab.length > 1)
		idprod = tab[0];

	new Ajax.Request(url, {
		asynchronous: 'true', 
		postBody: 'favori='+idprod, 
		onSuccess: function(xhr)
		{
			var temmp = xhr.responseText.split('|');
			var spanaffichage = "nbr_favori_"+temmp[0];
			var idspanaffichage = $(spanaffichage);
			idspanaffichage.innerHTML = temmp[1];
			favori.className = "fav_cot_vrai";
			$('vers_favori_image_'+idbloc).style.display = 'block';
			new Effect.Pulsate($('cols_'+spanaffichage), {duration:0.5, afterFinish: function(){Behaviour.apply();}});
		}
		}
	);
}

function ajoutPanier(panier)
{
	var url = siteencours+'module/ajax/index.php?module=panier';
	var idbloc = panier.id.replace('vers_panier_','');
	var	elemt = idbloc;
	var tab = idbloc.split(':');
	var idpromo = 0;
	var numPromo = 0;
	var idprod = tab[0];
	var puht = 0;
	var leprix = '';
	var idblocprix = '';
	var parValue = false;
	if(tab.length > 1)
	{
		var Expression = new RegExp(":livraison_.*");
		if(Expression.test(elemt))
		{
			//Cas de l'affichage dans l'historique des commandes
			idblocprix = tab[0]+':'+tab[1];
			if(tab.length > 2)
			{
				//Cas d'une promotion
				numPromo = tab[2];
				idpromo = tab[3];
				idbloc = idbloc.replace(':'+idpromo, '');
				leprix = 'puht_';
				parValue = true;
			}
			else
			{
				leprix = 'pu_net_';
			}
		}
		else
		{
			//Cas d'une promotion dans l'affichage des produits
			numPromo = tab[1];
			idpromo = tab[2];
			idbloc = idbloc.replace(':'+idpromo, '');
			leprix = 'puht_';
			parValue = true;
			idblocprix = tab[0];
		}
	}
	else
	{
		leprix = 'pu_net_';
		idblocprix = tab[0];
	}
	idprod = idprod.replace('cotation_','');
	//On recupere la quantite du produit
	var quantiteproduit = $('quantite_'+idbloc).value;
	///TODO Taux de tva ?
	var codetva = '19.6';
	if(quantiteproduit != 0 && quantiteproduit != '')
	{
		var url_cot = siteencours+'module/ajax/index.php?module=cotation';
		new Ajax.Request(url_cot, {
			aynchronous: 'true', 
			postBody: 'feed='+idprod+'&qte='+quantiteproduit,
			onLoading: function (xhr)
			{
				//On masque les boutons de resultat de l'interrogation
				$('cotation_echec_'+idbloc).style.display = 'none';
				$('cotation_succes_'+idbloc).style.display = 'none';
				$('allo_stock_'+tab[0]).style.display = 'none';
				//On met a jour le message d'attente de l'interrogation
				$('message_ajax_'+idbloc).style.height = '26px';
				$('message_ajax_'+idbloc).style.background = 'transparent url(media/img/phx/curseur/attente_24.gif) top left no-repeat';
				$('message_ajax_'+idbloc).innerHTML = 'Patientez... interrogation du stock en cours';
			},
			onFailure: function (xhr)
			{
				$('message_ajax_'+idbloc).style.background = '';
				$('message_ajax_'+idbloc).innerHTML = xhr.status+ ' : ' + xhr.statusText;
				$('cotation_echec_'+idbloc).style.display = 'block';
				$('cotation_succes_'+idbloc).style.display = 'none';
				$('allo_stock_'+tab[0]).style.display = 'none';
            },
			onSuccess: function (xhr)
			{
				var temmp = xhr.responseText;
				var tabtmp = temmp.split('|');
				if(tabtmp[0] == 1 || tabtmp[0] == 0)
				{
					if($('total_cotation_'+elemt))
						$('total_cotation_'+elemt).innerHTML = tabtmp[2]+ " €";
					$('pu_net_'+idblocprix).innerHTML = tabtmp[1];
					if(parValue)
						puht = $(leprix+idbloc).value;
					else
						puht = $(leprix+idbloc).innerHTML;
					$('pu_net_'+idblocprix).innerHTML += " €";
					if(tabtmp[0] == 1)
					{
						//Stock OK
						$('cotation_echec_'+idbloc).style.display = 'none';
						$('cotation_succes_'+idbloc).style.display = 'block';
						$('allo_stock_'+tab[0]).style.display = 'none';
					}
					else
					{
						//Stock !OK
						$('cotation_echec_'+idbloc).style.display = 'block';
						$('cotation_succes_'+idbloc).style.display = 'none';
						$('allo_stock_'+tab[0]).style.display = 'block';
					}
					new Ajax.Request(url, {
						asynchronous: 'true', 
						postBody: 'panier_produit='+idprod+'|'+quantiteproduit+'|'+'ajout'+'|'+puht+'|'+codetva+'|'+idpromo+'|'+numPromo+'|0|Produit',
						onLoading: function (xhr)
						{
							$('vers_panier_'+elemt).style.display = 'block';
							$('vers_panier_ko_'+idbloc).style.display = 'none';
							$('message_ajax_'+idbloc).style.height = '0px';
							$('message_ajax_'+idbloc).innerHTML = '';
							$('message_ajax_'+idbloc).style.background = '';
						},
						onFailure: function(xhr)
						{
							$('vers_panier_ko_'+idbloc).style.display = 'block';
							$('message_ajax_'+idbloc).style.height = '26px';
							$('message_ajax_'+idbloc).innerHTML = 'Le produit n\'a pas &eacute;t&eacute; ajout&eacute; au panier !';
						},
						onSuccess: function(xhr)
						{
							$('vers_panier_ko_'+idbloc).style.display = 'block';
							$('message_ajax_'+idbloc).style.height = '26px';
							$('message_ajax_'+idbloc).innerHTML = xhr.responseText;/*'Le produit a bien &eacute;t&eacute; ajout&eacute; au panier';*/
						}
						}
					);
				}
				else
				{
					//Message d'erreur lors de l'interrogation de l'erp
					$('message_ajax_'+idbloc).style.height = '26px';
					$('message_ajax_'+idbloc).style.background = '';
					$('message_ajax_'+idbloc).innerHTML = tabtmp[0];
				}
				
			}
			}
		);
	}else{
		alert('Veuillez indiquer la quantité à ajouter au panier');
	}
}

function affichePromotionSuivante(tab, indice, msgAttente, precedent, btn)
{
	if(indice >= tab.length)
	{
		new Effect.Fade(msgAttente, {queue:'end', afterFinish: function(){Behaviour.apply();}});
		return;
	}
	var idproduit = tab[indice];
	blocache = 'cotation_'+idproduit;
	var bloc = $(blocache);
	var en_cours = $('encours:'+blocache);
	if(en_cours.value != '1')
	{
		en_cours.value = '1';
		new Ajax.Request(urlaff, {
			asynchronous: 'true',
			postBody: 'tpl=catalogue/bloc_cotation&idproduit='+idproduit,
			onSuccess: function (ahr)
			{
				new Effect.Appear(bloc, {queue:'end', 
					beforeStart: function(){
						bloc.innerHTML = ahr.responseText;
						if($(precedent))
						{
							var arr = $(precedent).cumulativeOffset();
							bloc.setStyle({marginTop: $(precedent).getHeight()+'px', position:'absolute', top:arr[1]+'px'});
						}
						else
						{
							if($(btn))
							{
								var blocs = $$('div.bloc_cot');
								for(var i = 0; i < blocs.length; i++)
									blocs[i].style.display = "none";
								var arr = $(btn).cumulativeOffset();
								bloc.setStyle({position:'absolute', top:arr[1]+'px'});
							}
						}
					},
					afterFinish: function(){
						en_cours.value = 0;
						affichePromotionSuivante(tab, indice + 1, msgAttente, blocache, 0);
					}, duration:0.2
				});
			}
		});
	}
}

function traitementFormulaire(typeE)
{
	var bloc = $('bloc_'+typeE);
	var bloc_erreur = $('blocerreur_'+typeE);
	var en_cours = $(typeE+'_encours');
	var attente = $('message_attente'+typeE);
	if(document.getElementById('langue_actuelle'))
	{
		var langue = $('langue_actuelle').value;
		var msg_attente = $('msgvalidation:'+typeE+':'+langue).value;
	}
	else
		var msg_attente = $('msgvalidation:'+typeE).value;	
	if(en_cours.value == '1')
		return;
	en_cours.value = '1';
	new Effect.Appear(attente, {queue:'front', beforeStart: function(){attente.innerHTML = msg_attente;}});
	var checkedField = '';
	var fieldValue = '';
	var elementValue = '';
	var tabValue = [];
	var tabId = [];
	var tabElement = [];
	var inputs = getElementsByClassName('elementtoget '+typeE, "*", bloc);
	for(var cpt = 0; cpt < inputs.length; cpt++)
	{
		var push = true;
		if(inputs[cpt].tagName == "SELECT")
		{
			tabElement = getListeSelected(inputs[cpt].id); 
			tabValue.push(tabElement.join("#"));
		}
		else
		{
			if(inputs[cpt].tagName == "TEXTAREA")
			{
				if(document.getElementById(inputs[cpt].id+"_parent"))
				{
					elementValue = escape(tinyMCE.get(inputs[cpt].id).getContent());
					tabValue.push(elementValue);
				}
				else
				{
					elementValue = encodeURIComponent(inputs[cpt].value);
					tabValue.push(elementValue.replace(/’/g, "'"));
				}
			}
			else
			{
				if(inputs[cpt].type == "checkbox" || inputs[cpt].type == "hidden")
				{
					if(inputs[cpt].id.match(new RegExp("[^:]+:cle:.+")))
					{
						var tabCheck = inputs[cpt].id.split(':');
						var indexCheck = array_search(tabCheck[0], tabId);
						if(inputs[cpt].checked === true || inputs[cpt].type == "hidden")
						{
							if(indexCheck !== false)
								tabValue[indexCheck] += inputs[cpt].value+"#";
							else
							{
								tabId.push(tabCheck[0]);
								tabValue.push(inputs[cpt].value+"#");
							}
						}
						else
						{
							if(indexCheck === false)
							{
								tabId.push(tabCheck[0]);
								tabValue.push("");
							}
						}
						push = false;
					}
					else
					{
						if(inputs[cpt].checked === true || inputs[cpt].type == "hidden")
						{
							elementValue = inputs[cpt].value;
							tabValue.push(elementValue.replace(/’/g, "'"));
						}
					}
				}
				else
				{
					elementValue = inputs[cpt].value;
					tabValue.push(elementValue.replace(/’/g, "'"));
				}
			}
		}
		if(push)
			tabId.push(inputs[cpt].id);
	}
	checkedField = tabId.join("|");
	fieldValue = tabValue.join("|");
	var chPOST = "&checkedField="+checkedField+"|"+
				"&fieldValue="+fieldValue;
							
	new Ajax.Request(urltask, {
		asynchronous: 'true',
		postBody: 'tache=enregistre'+typeE+chPOST,
		onLoading: function (xhr)
		{
			bloc_erreur.innerHTML = '';
		},
		onSuccess: function(xhr)
		{
			var result = treatTaskMsg(xhr.responseText);
			var msg_res = '';
			if(result == true)
			{
				msg_res = xhr.responseText.substr(13);
				tab_res = msg_res.split('|');
				msg_res = tab_res[0];
				if(document.getElementById('redirection:'+typeE))
					window.location.replace($('redirection:'+typeE).innerHTML+"&message=enreg&"+typeE+"="+tab_res[1]);
				else
				{
					if(tab_res.length == 1)
						window.location.replace(tab_res[0]);
					else
						updateTemplate(typeE);
				}
				new Effect.SwitchOff(bloc, {queue:'end', afterFinish: function(){Behaviour.apply();}});
			}
			else
			{
				if(result == false)
					msg_res = xhr.responseText.substr(11);
			}
			new Effect.BlindUp(bloc_erreur, {queue:'end', afterFinish: function(){bloc_erreur.innerHTML = msg_res;}});
			new Effect.BlindDown(bloc_erreur, {queue:'end'});
			new Effect.SwitchOff(attente, {queue:'end', afterFinish: function(){en_cours.value = '0'; Behaviour.apply();}});
		}
	});
}

function updateTemplate(typeE)
{
	if(document.getElementById('tpltoupdate:'+typeE))
	{
		var tpltoupdate = $('tpltoupdate:'+typeE).value;
		var bloctoupdate = $('bloctoupdate:'+typeE).value;
		var tabTplToUpdate = tpltoupdate.split('|');
		var tabBlocToUpdate = bloctoupdate.split('|');
	}
	else
	{
		var tabTplToUpdate = [];
		var tabBlocToUpdate = [];
	}
	for(var i = 0; i < tabTplToUpdate.length; i++)
	{
		var valeur_update = $(tabBlocToUpdate[i]+'_update').value;
		var tabValeur = valeur_update.split('|');
		var chPOST = '';
		for(var j = 0; j < tabValeur.length; j++)
		{
			var valpost = tabValeur[j].split(':');
			chPOST += '&'+valpost[0]+'='+valpost[1];
		}
		var formupdate = tabTplToUpdate[i];
		var blocupdate = $(tabBlocToUpdate[i]);
		new Ajax.Request(urlaff, {
			asynchronous: 'true', 
			postBody: 'tpl='+formupdate+chPOST,
			onComplete: function(zhr)
			{
				blocupdate.innerHTML = zhr.responseText;
				Behaviour.apply();
			}
		});
	}
}

function goReglette(lr)
{
	lr.onclick = function(){
		var valbloc = lr.id.replace('offset:', '');
		var tab = valbloc.split(':');
		var nombloc = tab[0];
		var en_cours = $('reglette_encours:'+nombloc);
		var tpl = $('template:'+nombloc);
		if(document.getElementById('postsupp:'+nombloc))
		{
			var postsupp = $('postsupp:'+nombloc).value;
			var tabpost = postsupp.split('|');
			postsupp = "";
			for(var i = 0; i < tabpost.length; i++)
				postsupp += '&'+tabpost[i];
		}
		else
			postsupp = "";
		if(document.getElementById('getsupp:'+nombloc))
		{
			var getsupp = $('getsupp:'+nombloc).value;
			var tabget = getsupp.split('|');
			getsupp = "";
			for(var i = 0; i < tabget.length; i++)
				getsupp += '&'+tabget[i];
		}
		else
			getsupp = "";
		var offset = tab[1];
		var bloc = $('contenu_reglette:'+nombloc);
		var attente = $('loading_reglette:'+nombloc);
		if(en_cours.value == '1')
			return;
		
		en_cours.value = '1';
		
		new Effect.Appear(attente, {queue:'front'});
		var url_aff = siteencours+'module/ajax/index.php?module=affichagemoteur&offset='+offset+getsupp;
			new Ajax.Request(url_aff, {
				asynchronous: 'true',
				postBody: 'tpl='+tpl.value+postsupp,
				onComplete: function (ahr)
				{
					bloc.update(ahr.responseText);
					new Effect.SwitchOff(attente, {queue:'end', afterFinish: function(){en_cours.value = '0'; Behaviour.apply(); ParseSortable(bloc);}});
				}
			});
	}
}
