// JavaScript Document

var xmlobject;
var xmlobjectinit;
var editedRow;
var initial = true;
var reloader = false;



function debug(texte){
	//var content = document.getElementById('debug').innerHTML;	
	//content += "<br>"+texte;
	//document.getElementById('debug').innerHTML = content;
}

function caracChange(caracs,callBack,carac){
	
	//alert("caracs : "+caracs+" sur carac: "+carac);
	
	initializeDatas();

	
	var car = caracs.split(",");
	
	var expected = new Array();
	for(var k=0; k<car.length; k++){
		var id = "selecteur_"+car[k];
		var val = document.getElementById(id).value;
		expected.push(val);
	}
	
	var found = -1;
	for(var i=0; i<getResultsNumber(); i++){
		
		var ok = true;
		for(var j=0; j<car.length; j++){
			if (getValue("fk_"+car[j],i)!=expected[j]){
				ok = false;
				break;
			}
		}
		
		if(ok){
			found = i;
			break;
		}
	}
	
	editedRow = found;
	
	
	//alert("valeur selectionnée : "+document.getElementById("selecteur_"+carac).value);
	
	
	if (document.getElementById("selecteur_"+carac).value!=-1){
		//mise à jour des champs
		for(var k=0; k<car.length; k++){
			if (car[k]!=carac){
				
				reloadSelect(car[k],car);	
			}
		}
		//
	
	}else{
		//alert("reinit");
		reloader=true;
		reinitFields(caracs);
		eval(callBack+"(false);");
		reloader = false;
	}
	

	
	if (found==-1){
		//alert("Produit non trouvé");	
	}else{
		//alert("produit trouvé : "+editedRow);
		
		eval(callBack+"(true);");
		
		initial = false;

	}

	

	
}


function reinitFields(caracs){
	
	//alert("REINIT");
	
	var car = caracs.split(",");
	

	for(var i=0; i<car.length; i++){
		
		
		var valeurs = document.getElementById("selecteur_"+car[i]).getAttribute('valeurs');
		var affichlist = document.getElementById("selecteur_"+car[i]).getAttribute('affichlist');
		valeurs_init = valeurs;
		valeurs = valeurs.split(";");
		affichlist_init = affichlist;
		affichlist = affichlist.split(";");
		
		var contenu = "";
		contenu = "<option selected='selected' value='-1'>Choisissez...</option>";
		
		for(var j=0; j<valeurs.length; j++){
			contenu += "<option value='"+valeurs[j]+"'>"+affichlist[j]+"</option>";
		}
		
		
		
		index = car[i];
		
		//valeurs = document.getElementById("selecteur_"+index).getAttribute("valeurs");
		//affichlist = document.getElementById("selecteur_"+index).getAttribute("affichlist");
		change1 = document.getElementById("selecteur_"+index).getAttribute("a1");
		change2 = document.getElementById("selecteur_"+index).getAttribute("a2");
		change3 = document.getElementById("selecteur_"+index).getAttribute("a3");
		
		

		contenu = "<select id='selecteur_"+index+"' a1='"+change1+"' a2='"+change2+"' a3='"+change3+"' valeurs='"+valeurs_init+"' affichlist='"+affichlist_init+"'>"+contenu+"</select>";
	
		//alert("contenu pour "+i+" : "+contenu);
		document.getElementById("div_selecteur_"+index).innerHTML = contenu;
	
		if( !document.getElementById("selecteur_"+index).addEventListener ) 
		{
			document.getElementById("selecteur_"+index).addEventListener = function(eventType, listener, useCapture) {
				this.attachEvent("on" + eventType, listener);
			}
		}	
		
		var selecteur = document.getElementById("selecteur_"+index);
		
		//console.log(selecteur);
		
		//alert("carac : "+index);
		//document.getElementById("selecteur_"+index).index = index;
		selecteur.index = index;
		//console.log("index : "+selecteur.index);
		
		//document.getElementById("selecteur_"+index).test = function(){
		var selectchange = function() {
			//alert("id : "+this.nodeName);
			//alert("change"+this.index);
			//console.log("this : "+this);
			eval("caracChange('"+document.getElementById("selecteur_"+this.index).getAttribute('a1')+"','"+document.getElementById("selecteur_"+this.index).getAttribute('a2')+"','"+document.getElementById("selecteur_"+this.index).getAttribute('a3')+"');");
		}
		
		//document.getElementById("selecteur_"+index).addEventListener('change', document.getElementById("selecteur_"+index).test, false);
		//selecteur.addEventListener('change', selecteur.test, false);
		selecteur.onchange = selectchange;
		
		//console.log(selecteur);
		//console.log("change : "+selecteur.onchange);
		//document.getElementById("selecteur_"+index).setAttribute("onChange","alert('test')");
		
		
		
	}
	
	
}






function reloadSelect(index,current){
	

	//debug("reloadSelect : "+index+" : "+current);
	
	//on récupère les valeurs et affichages

	var valeurs = document.getElementById("selecteur_"+index).getAttribute('valeurs');
	var valid = valeurs;
	valeurs = valeurs.split(";");
	//alert("valid : "+valid);
	//alert("type : "+typeof(valid));
	var valid = valid.split(";");
	var affichlist = document.getElementById("selecteur_"+index).getAttribute('affichlist');
	affichlist = affichlist.split(";");
		
	var initValue = document.getElementById("selecteur_"+index).value;
	
	for(var i=0; i<valid.length; i++){
		valid[i] = 0;	
	}
	
	//on récupère la valeur du courant
	//var currentValue = document.getElementById("selecteur_"+current).value;
	
	
	//on reconstruit la combo - pour celà on cherche dans les produits quels sont ceux qui peuvent correspondre
	// càd : valeur des autres combos compatible
	

	
	var validLines = new Array();
	
	for(var i=0; i<getResultsNumber(); i++){

		var valide = true;
		
		for (var m=0; m<current.length; m++){
			var selValue = document.getElementById("selecteur_"+current[m]).value;

			var lineValue = getValue("fk_"+current[m],i);
			
		
			
			if(lineValue != selValue && selValue != -1){
				valide = false;	
			}
		}
		
		validLines.push(valide);
		
	}
	

	for(var j=0; j<valid.length; j++){

		for(var k=0; k<validLines.length; k++){
	
			if (validLines[k]){
				
				if (valeurs[j]==getValue("fk_"+index,k)){
					valid[j] = 1;
				}
			}
		}
	}
	
	
	

	
	var contenu = "";
	if(initValue=="-1"){
		contenu = "<option selected='selected' value='-1'>Choisissez...</option>";
	}else{
		contenu = "<option value='-1'>Choisissez...</option>";
	}


	//alert("valid nb : "+valid.length);

	for(var i=0; i<valid.length; i++){
		//alert("validité : "+valid[i]);
		if (valid[i]==1){
			
			if (initValue==valeurs[i]){
				contenu += "<option selected='selected' value='"+valeurs[i]+"'>"+affichlist[i]+"</option>";
			}else{
				contenu += "<option value='"+valeurs[i]+"'>"+affichlist[i]+"</option>";
			}
		}
	}
	


	valeurs = document.getElementById("selecteur_"+index).getAttribute("valeurs");
	affichlist = document.getElementById("selecteur_"+index).getAttribute("affichlist");
	change1 = document.getElementById("selecteur_"+index).getAttribute("a1");
	change2 = document.getElementById("selecteur_"+index).getAttribute("a2");
	change3 = document.getElementById("selecteur_"+index).getAttribute("a3");
	
	
	
	
	
	contenu = "<select id='selecteur_"+index+"' a1='"+change1+"' a2='"+change2+"' a3='"+change3+"' valeurs='"+valeurs+"' affichlist='"+affichlist+"'>"+contenu+"</select>";

	//alert(" contenu de "+current+" avec index "+index+" : "+contenu);

	document.getElementById("div_selecteur_"+index).innerHTML = contenu;

	if( !document.getElementById("selecteur_"+index).addEventListener ) 
	{
		document.getElementById("selecteur_"+index).addEventListener = function(eventType, listener, useCapture) {
			this.attachEvent("on" + eventType, listener);
		}
	}	
	
	
	document.getElementById("selecteur_"+index).test = function(){
		//alert("change");
		eval("caracChange('"+document.getElementById("selecteur_"+index).getAttribute('a1')+"','"+document.getElementById("selecteur_"+index).getAttribute('a2')+"','"+document.getElementById("selecteur_"+index).getAttribute('a3')+"');");
	}
	
	document.getElementById("selecteur_"+index).addEventListener('change', document.getElementById("selecteur_"+index).test, false);
	//document.getElementById("selecteur_"+index).setAttribute("onChange","alert('test')");

}



function initializeDatas(){
	
	xml = document.getElementById("productsSrc").innerHTML;
	
	if (document.implementation.createDocument){
	
		 xmlobject = (new DOMParser()).parseFromString(xml, "text/xml");
	}else{

		xmlobject = new ActiveXObject("Microsoft.XMLDOM") 
		xmlobject.async="false"; 
		xmlobject.loadXML(xml);
		//alert("xmlobject : "+xmlobject.documentElement);
	}
	
}





function getValue(col,index){
	//alert("getValue : "+col+"-"+index);
	
	if(index==-1){
		index = editedRow;
	}
	

	
	var elmts = document.getElementById("productsSrc").getElementsByTagName(col)

	
	//alert(elmts);
	try{
		//alert("valeur : "+elmts[index].value);
		var value = elmts[index].getAttribute("valeur");
		
	}catch(error){
		//alert(error.description);
		var value = -1;
	}
	
	

	return(value);
}

function getResultsNumber(){
	
	return document.getElementById("productsSrc").getElementsByTagName("pk_produit").length
	//var elmts = xmlobject.getElementsByTagName("pk_produit");
	
	//return elmts.length;
}

function afficher(cible,index,val){
	/*if (initial==true){
		document.getElementById(cible).setAttribute('old',eval("document.getElementById(cible)."+val));
	}
	
	if (reloader==true){
		eval("document.getElementById(cible)."+val) = document.getElementById(cible).getAttribute('old');
	}else{
		eval("document.getElementById(cible)."+val) = getValue(index,-1);	
	}*/
	
	if (val=="innerHTML"){
		if (initial==true){
		document.getElementById(cible).setAttribute('old',document.getElementById(cible).innerHTML);
		}
		
		if (reloader==true){
			document.getElementById(cible).innerHTML = document.getElementById(cible).getAttribute('old');
		}else{
			document.getElementById(cible).innerHTML = getValue(index,-1);	
		}
	}else if(val=="value"){
		if (initial==true){
			document.getElementById(cible).setAttribute('old',document.getElementById(cible).value);
		}
		
		if (reloader==true){
			document.getElementById(cible).value = document.getElementById(cible).getAttribute('old');
		}else{
			document.getElementById(cible).value = getValue(index,-1);	
		}
	}
	
	
}
