/** ***********************************************************************
 * Methodes utilisées pour l'appel AJAX d'alimentation du panier ou de la liste
 *********************************************************************** */
 var regexBaliseIdenditiant = /<(tr|td|div|span)( [a-zA-Z]*=\"[0-9a-zA-Z]*\" *)*( id=\"[0-9a-zA-Z]*\"){1}( [a-zA-Z]*=\"[0-9a-zA-Z]*\" *)*( )*>/;
 var regexIdentifiantBalise = /id="[0-9a-zA-Z]*"/;
 var regexTypeBalise = /(div|span|tr|td)/;
 
// traitement ajax en cas de succes
//récupère la response ajax, la découpe et envoie le flux au navigateur
var handleSuccess = function(o)
{
	if(o.responseText !== undefined){ 
		//var divError = YAHOO.util.Dom.get("log");
		//divError.innerHTML += o.responseText;
		var tabReponse = o.responseText.split("#####");
		if(tabReponse.length > 1){
			div = YAHOO.util.Dom.get('errorAjax');
			if(div != undefined){
				div.innerHTML = "";
			}
			for(i=0;i<tabReponse.length;i++){
				//alert(tabReponse[i]);
				//alert(getResponseId(tabReponse[i]));
				div = YAHOO.util.Dom.get(getResponseId(tabReponse[i]));
				if(div != undefined){
					var content = getResponseContent(tabReponse[i]);
					div.innerHTML = content;
				} else {
					evalJavascript(tabReponse[i]);
				}
			}
		} else {
			alert('Votre session a expiré. Le site n\'a pas pu répondre à votre demande.\n Vous allez être redirigé vers la page d\'accueil.');
			//window.location.reload();
			location.href="accueil.html";
			//div = YAHOO.util.Dom.get('errorAjax');
			//div.innerHTML = "<div class=\"error\"><span>Votre session a expiré. Nous n'avons pu répondre à votre action.<br/> Vous pouvez maintenant reprendre vos courses.</span></div>";
		}		
	}
} 

//Traitement ajax en cas d'erreur
//récupère la response ajax, la découpe et envoie le flux au navigateur
var handleFailure = function(o)
{
	if(o.responseText !== undefined){ 
		var tabReponse = o.responseText.split("#####");
		for(i=0;i<tabReponse.length;i++){
			div = YAHOO.util.Dom.get(getResponseId(tabReponse[i]));
			if(div != undefined){
				div.innerHTML = getResponseContent(tabReponse[i]);
				//alert(div.innerHTML);
				//alert('eval Failure');
				evalJavascript(div.innerHTML);
				var yscroll = 0;
				if(YAHOO.util.Dom.getY(div) - 40 > 0){
					yscroll = YAHOO.util.Dom.getY(div) - 40;
				}
				var currentYScroll;
				if (!document.documentElement.scrollTop){
					currentYScroll = document.body.scrollTop;
				} else {
					currentYScroll = document.documentElement.scrollTop;
				}
				//on vérifie juste que la div d'erreur n'est pas visible et située au dessus de la scrollbar
				if(currentYScroll > yscroll){
					window.scroll(0, yscroll);
				}
			}
		}
	} 
}

//Traitement de la réponse ajax
//handleSuccess: Succès
//handleFailure: Erreur
var callback =  { 
	  success:handleSuccess, 
	  failure:handleFailure
};

function evalJavascript(content) {
	var patt1 = new RegExp("<script>","i");
	var patt2 = new RegExp("</script>","i");
	var tabContent =  content.split(patt1);
	//alert(tabContent[0]);
	//alert(tabContent[1]);
	//alert('length tableau split : '+ tabContent.length);
	if (tabContent.length > 0 ) {
		for (var i = 0; i < tabContent.length; i++) {
	    	if(patt2.test(tabContent[i])){
		    	var scriptToExecute = tabContent[i].split(patt2);
				eval(scriptToExecute[0]);
	    	}
		}
	}
}

// Recupération de l'identifiant de l'element à mettre à jour 
// avec le contenu emis par le serveur après appel AJAX
function getResponseId(content) {

	if(content == null || content == ""){
		return;
	}

	//on récupère la balise identifiant le contenu ajax
	//alert('content='+content+ ' result match = ' + content.match(regexBaliseIdenditiant));
	baliseIdentifiant = new String(content.match(regexBaliseIdenditiant)).split(",")[0];

	//on récupère l'identifiant
	identifiant = null;
	if (baliseIdentifiant != null) {
		identifiant = new String(baliseIdentifiant.match(regexIdentifiantBalise));
		//on supprime l'identifiant "id="
		identifiant = identifiant.substring(4, (identifiant.length)-1);
	}

	return identifiant;
}

// Recupération du contenu emis par le serveur après appel AJAX
function getResponseContent(content){

	//on récupère la balise identifiant le contenu ajax
	baliseIdentifiant = new String(content.match(regexBaliseIdenditiant)).split(",")[0];
	
	//on récupère le type de balise (ex: "div", "span", "tr", ...)
	typeBalise = new String(baliseIdentifiant.match(regexTypeBalise)).split(",")[0];
	
	//on retire les balise identifiant le contenu ajax à remplacer
	var ret = content.substring(baliseIdentifiant.length, content.length - typeBalise.length - 3);

	return ret;
}

//Envoi de la requete ajax au controller Kasper
function actionAjax(ctrlAddress, postData){
	YAHOO.util.Connect.initHeader("Content-Type", "text/html;charset=ISO-8859-15");
	var request = YAHOO.util.Connect.asyncRequest('POST', ctrlAddress, callback, postData);
	
}


/**
 * Met l'object en attente de réponse AJAX.
 */
function putInWait(elementName, srcImageWait){
	div = YAHOO.util.Dom.get(elementName);
	div.innerHTML = "<div style='margin-top:50px;text-align:center;'><img src='" + srcImageWait + "'></div>";
}
