


var productInfo = new Object();
var modelInfo = null;
var caracList = new Object();

function getAllModels(refProduct) {
   var allModels = productInfo[refProduct];
   if(allModels == null) {
      allModels = new Object();
      productInfo[refProduct] = allModels ;
   }

   return allModels ;
}

function getModelInfo(refProduct, refModel) {
   var allModels = getAllModels(refProduct);
   var modelInfo = allModels[refModel];
   if(modelInfo == null) {
      modelInfo = new Object();
      allModels[refModel] = modelInfo;
   }

   return modelInfo;
}


modelInfo = getModelInfo("PCX0059", "");
modelInfo['id'] = 172;
modelInfo['refProduct'] = "PCX0059";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("Protiquick", "");
modelInfo['id'] = 142;
modelInfo['refProduct'] = "Protiquick";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("VET0002", "");
modelInfo['id'] = 199;
modelInfo['refProduct'] = "VET0002";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("VET0004", "");
modelInfo['id'] = 196;
modelInfo['refProduct'] = "VET0004";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("CHV1001", "");
modelInfo['id'] = 201;
modelInfo['refProduct'] = "CHV1001";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS7000", "");
modelInfo['id'] = 187;
modelInfo['refProduct'] = "COS7000";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS4001", "");
modelInfo['id'] = 183;
modelInfo['refProduct'] = "COS4001";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS7002", "");
modelInfo['id'] = 188;
modelInfo['refProduct'] = "COS7002";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS4002", "");
modelInfo['id'] = 185;
modelInfo['refProduct'] = "COS4002";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("PCX0051", "");
modelInfo['id'] = 209;
modelInfo['refProduct'] = "PCX0051";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS7001", "");
modelInfo['id'] = 192;
modelInfo['refProduct'] = "COS7001";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("VET0005", "");
modelInfo['id'] = 198;
modelInfo['refProduct'] = "VET0005";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("VET0003", "");
modelInfo['id'] = 200;
modelInfo['refProduct'] = "VET0003";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("CHV4000", "");
modelInfo['id'] = 208;
modelInfo['refProduct'] = "CHV4000";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("VET0001", "");
modelInfo['id'] = 197;
modelInfo['refProduct'] = "VET0001";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("CHV3000", "");
modelInfo['id'] = 205;
modelInfo['refProduct'] = "CHV3000";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS7008", "");
modelInfo['id'] = 193;
modelInfo['refProduct'] = "COS7008";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("CHV3002", "");
modelInfo['id'] = 207;
modelInfo['refProduct'] = "CHV3002";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("AMI0036", "");
modelInfo['id'] = 156;
modelInfo['refProduct'] = "AMI0036";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS7007", "");
modelInfo['id'] = 190;
modelInfo['refProduct'] = "COS7007";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("PCX0041", "");
modelInfo['id'] = 179;
modelInfo['refProduct'] = "PCX0041";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS7003", "");
modelInfo['id'] = 189;
modelInfo['refProduct'] = "COS7003";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("CHV2002", "");
modelInfo['id'] = 210;
modelInfo['refProduct'] = "CHV2002";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("COS6000", "");
modelInfo['id'] = 186;
modelInfo['refProduct'] = "COS6000";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("PCX0058", "");
modelInfo['id'] = 175;
modelInfo['refProduct'] = "PCX0058";
modelInfo['refModel'] = "";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("Barres Hyperprotéinées", "");
modelInfo['id'] = 139;
modelInfo['refProduct'] = "Barres Hyperprotéinées";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -3;


modelInfo = getModelInfo("leucine", "");
modelInfo['id'] = 211;
modelInfo['refProduct'] = "leucine";
modelInfo['refModel'] = "";
modelInfo['quantity'] = null;


modelInfo = getModelInfo("rhodiomag", "");
modelInfo['id'] = 212;
modelInfo['refProduct'] = "rhodiomag";
modelInfo['refModel'] = "";
modelInfo['quantity'] = null;


modelInfo = getModelInfo("sucrolys", "");
modelInfo['id'] = 213;
modelInfo['refProduct'] = "sucrolys";
modelInfo['refModel'] = "";
modelInfo['quantity'] = null;


modelInfo = getModelInfo("COS0001", "");
modelInfo['id'] = 168;
modelInfo['refProduct'] = "COS0001";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("rhodiomag", "");
modelInfo['id'] = 214;
modelInfo['refProduct'] = "rhodiomag";
modelInfo['refModel'] = "";
modelInfo['quantity'] = null;


modelInfo = getModelInfo("Hyper-Pro", "");
modelInfo['id'] = 107;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "";
modelInfo['quantity'] = null;


modelInfo = getModelInfo("Hyper-Pro", "AMI0041");
modelInfo['id'] = 110;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0041";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("Hyper-Pro", "AMI0040");
modelInfo['id'] = 121;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0040";
modelInfo['quantity'] = 0;


modelInfo = getModelInfo("Hyper-Pro", "AMI0021");
modelInfo['id'] = 108;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0021";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("Panachés Hyper-Pro", "");
modelInfo['id'] = 133;
modelInfo['refProduct'] = "Panachés Hyper-Pro";
modelInfo['refModel'] = "";
modelInfo['quantity'] = null;


modelInfo = getModelInfo("COS5000", "");
modelInfo['id'] = 184;
modelInfo['refProduct'] = "COS5000";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("Hyper-Pro", "AMI0055");
modelInfo['id'] = 116;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0055";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("PCX0045", "");
modelInfo['id'] = 178;
modelInfo['refProduct'] = "PCX0045";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("PCX0042", "");
modelInfo['id'] = 163;
modelInfo['refProduct'] = "PCX0042";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -8;


modelInfo = getModelInfo("PCX0061", "");
modelInfo['id'] = 171;
modelInfo['refProduct'] = "PCX0061";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -2;


modelInfo = getModelInfo("PCX0021", "");
modelInfo['id'] = 169;
modelInfo['refProduct'] = "PCX0021";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -6;


modelInfo = getModelInfo("CHV3001", "");
modelInfo['id'] = 206;
modelInfo['refProduct'] = "CHV3001";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -2;


modelInfo = getModelInfo("CHV2000", "");
modelInfo['id'] = 203;
modelInfo['refProduct'] = "CHV2000";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("AMI0051", "");
modelInfo['id'] = 149;
modelInfo['refProduct'] = "AMI0051";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -2;


modelInfo = getModelInfo("Hyper-Pro", "AMI0025");
modelInfo['id'] = 125;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0025";
modelInfo['quantity'] = -13;


modelInfo = getModelInfo("COS7006", "");
modelInfo['id'] = 194;
modelInfo['refProduct'] = "COS7006";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("COS7004", "");
modelInfo['id'] = 191;
modelInfo['refProduct'] = "COS7004";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -2;


modelInfo = getModelInfo("PCX0050", "");
modelInfo['id'] = 204;
modelInfo['refProduct'] = "PCX0050";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("CHV1000", "");
modelInfo['id'] = 202;
modelInfo['refProduct'] = "CHV1000";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("EXT0002", "");
modelInfo['id'] = 167;
modelInfo['refProduct'] = "EXT0002";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("Hyper-Pro", "AMI0038");
modelInfo['id'] = 119;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0038";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("Hyper-Pro", "AMI0101");
modelInfo['id'] = 131;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0101";
modelInfo['quantity'] = -11;


modelInfo = getModelInfo("Hyper-Pro", "AMI0011");
modelInfo['id'] = 115;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0011";
modelInfo['quantity'] = -9;


modelInfo = getModelInfo("Hyper-Pro", "AMI0039");
modelInfo['id'] = 120;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0039";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("SUN0003", "");
modelInfo['id'] = 181;
modelInfo['refProduct'] = "SUN0003";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -12;


modelInfo = getModelInfo("CUR0001", "");
modelInfo['id'] = 166;
modelInfo['refProduct'] = "CUR0001";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -11;


modelInfo = getModelInfo("EXT0010", "");
modelInfo['id'] = 180;
modelInfo['refProduct'] = "EXT0010";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("PCX0029", "");
modelInfo['id'] = 177;
modelInfo['refProduct'] = "PCX0029";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("COS4000", "");
modelInfo['id'] = 182;
modelInfo['refProduct'] = "COS4000";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("EXT0011", "");
modelInfo['id'] = 159;
modelInfo['refProduct'] = "EXT0011";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -7;


modelInfo = getModelInfo("EXT0006", "");
modelInfo['id'] = 165;
modelInfo['refProduct'] = "EXT0006";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -27;


modelInfo = getModelInfo("PCX0057", "");
modelInfo['id'] = 176;
modelInfo['refProduct'] = "PCX0057";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("GIN0005", "");
modelInfo['id'] = 161;
modelInfo['refProduct'] = "GIN0005";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -10;


modelInfo = getModelInfo("GIN0003", "");
modelInfo['id'] = 160;
modelInfo['refProduct'] = "GIN0003";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -17;


modelInfo = getModelInfo("Protiquick", "AMI0052");
modelInfo['id'] = 144;
modelInfo['refProduct'] = "Protiquick";
modelInfo['refModel'] = "AMI0052";
modelInfo['quantity'] = -11;


modelInfo = getModelInfo("Protiquick", "AMI0053");
modelInfo['id'] = 143;
modelInfo['refProduct'] = "Protiquick";
modelInfo['refModel'] = "AMI0053";
modelInfo['quantity'] = -10;


modelInfo = getModelInfo("Hyper-Pro", "AMI0015");
modelInfo['id'] = 127;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0015";
modelInfo['quantity'] = -17;


modelInfo = getModelInfo("Hyper-Pro", "AMI0022");
modelInfo['id'] = 109;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0022";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("PCX0060", "");
modelInfo['id'] = 174;
modelInfo['refProduct'] = "PCX0060";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -13;


modelInfo = getModelInfo("EXT0009", "");
modelInfo['id'] = 173;
modelInfo['refProduct'] = "EXT0009";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -2;


modelInfo = getModelInfo("EXT0007", "");
modelInfo['id'] = 164;
modelInfo['refProduct'] = "EXT0007";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -5;


modelInfo = getModelInfo("Hyper-Pro", "AMI0056");
modelInfo['id'] = 117;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0056";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("Hyper-Pro", "AMI0024");
modelInfo['id'] = 122;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0024";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("AMI0050", "");
modelInfo['id'] = 148;
modelInfo['refProduct'] = "AMI0050";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("Hyper-Pro", "AMI0043");
modelInfo['id'] = 124;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0043";
modelInfo['quantity'] = -7;


modelInfo = getModelInfo("Barres Hyperprotéinées", "AMI0037");
modelInfo['id'] = 141;
modelInfo['refProduct'] = "Barres Hyperprotéinées";
modelInfo['refModel'] = "AMI0037";
modelInfo['quantity'] = -10;


modelInfo = getModelInfo("Hyper-Pro", "AMI0042");
modelInfo['id'] = 126;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0042";
modelInfo['quantity'] = -13;


modelInfo = getModelInfo("Hyper-Pro", "AMI0100");
modelInfo['id'] = 129;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0100";
modelInfo['quantity'] = -6;


modelInfo = getModelInfo("Panachés Hyper-Pro", "AMI0031");
modelInfo['id'] = 134;
modelInfo['refProduct'] = "Panachés Hyper-Pro";
modelInfo['refModel'] = "AMI0031";
modelInfo['quantity'] = -12;


modelInfo = getModelInfo("AMI0030", "");
modelInfo['id'] = 145;
modelInfo['refProduct'] = "AMI0030";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -4;


modelInfo = getModelInfo("Hyper-Pro", "AMI0020");
modelInfo['id'] = 111;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0020";
modelInfo['quantity'] = -5;


modelInfo = getModelInfo("EXT0005", "");
modelInfo['id'] = 157;
modelInfo['refProduct'] = "EXT0005";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -5;


modelInfo = getModelInfo("Barres Hyperprotéinées", "AMI0029");
modelInfo['id'] = 140;
modelInfo['refProduct'] = "Barres Hyperprotéinées";
modelInfo['refModel'] = "AMI0029";
modelInfo['quantity'] = -11;


modelInfo = getModelInfo("Hyper-Pro", "AMI0014");
modelInfo['id'] = 130;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0014";
modelInfo['quantity'] = -14;


modelInfo = getModelInfo("EXT0001", "");
modelInfo['id'] = 146;
modelInfo['refProduct'] = "EXT0001";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -20;


modelInfo = getModelInfo("PCX0056", "");
modelInfo['id'] = 170;
modelInfo['refProduct'] = "PCX0056";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -17;


modelInfo = getModelInfo("Hyper-Pro", "AMI0012");
modelInfo['id'] = 112;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0012";
modelInfo['quantity'] = -21;


modelInfo = getModelInfo("PCX0040", "");
modelInfo['id'] = 162;
modelInfo['refProduct'] = "PCX0040";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -26;


modelInfo = getModelInfo("EXT004", "");
modelInfo['id'] = 158;
modelInfo['refProduct'] = "EXT004";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -9;


modelInfo = getModelInfo("Panachés Hyper-Pro", "AMI0033");
modelInfo['id'] = 136;
modelInfo['refProduct'] = "Panachés Hyper-Pro";
modelInfo['refModel'] = "AMI0033";
modelInfo['quantity'] = -1;


modelInfo = getModelInfo("Panachés Hyper-Pro", "AMI0035");
modelInfo['id'] = 138;
modelInfo['refProduct'] = "Panachés Hyper-Pro";
modelInfo['refModel'] = "AMI0035";
modelInfo['quantity'] = -3;


modelInfo = getModelInfo("Panachés Hyper-Pro", "AMI0032");
modelInfo['id'] = 135;
modelInfo['refProduct'] = "Panachés Hyper-Pro";
modelInfo['refModel'] = "AMI0032";
modelInfo['quantity'] = -9;


modelInfo = getModelInfo("Panachés Hyper-Pro", "AMI0034");
modelInfo['id'] = 137;
modelInfo['refProduct'] = "Panachés Hyper-Pro";
modelInfo['refModel'] = "AMI0034";
modelInfo['quantity'] = -8;


modelInfo = getModelInfo("Hyper-Pro", "AMI0023");
modelInfo['id'] = 123;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0023";
modelInfo['quantity'] = -5;


modelInfo = getModelInfo("Hyper-Pro", "AMI0013");
modelInfo['id'] = 128;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0013";
modelInfo['quantity'] = -18;


modelInfo = getModelInfo("Hyper-Pro", "AMI0019");
modelInfo['id'] = 114;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0019";
modelInfo['quantity'] = -5;


modelInfo = getModelInfo("Hyper-Pro", "AMI0054");
modelInfo['id'] = 118;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0054";
modelInfo['quantity'] = -6;


modelInfo = getModelInfo("AMI0026", "");
modelInfo['id'] = 132;
modelInfo['refProduct'] = "AMI0026";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -15;


modelInfo = getModelInfo("Hyper-Pro", "AMI0016");
modelInfo['id'] = 113;
modelInfo['refProduct'] = "Hyper-Pro";
modelInfo['refModel'] = "AMI0016";
modelInfo['quantity'] = -5;


modelInfo = getModelInfo("AMI0006", "");
modelInfo['id'] = 147;
modelInfo['refProduct'] = "AMI0006";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -6;


modelInfo = getModelInfo("AMI2753", "");
modelInfo['id'] = 152;
modelInfo['refProduct'] = "AMI2753";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -35;


modelInfo = getModelInfo("AMI2750", "");
modelInfo['id'] = 154;
modelInfo['refProduct'] = "AMI2750";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -87;


modelInfo = getModelInfo("AMI2748", "");
modelInfo['id'] = 153;
modelInfo['refProduct'] = "AMI2748";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -14;


modelInfo = getModelInfo("AMI2749", "");
modelInfo['id'] = 155;
modelInfo['refProduct'] = "AMI2749";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -38;


modelInfo = getModelInfo("AMI2751", "");
modelInfo['id'] = 150;
modelInfo['refProduct'] = "AMI2751";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -354;


modelInfo = getModelInfo("AMI2752", "");
modelInfo['id'] = 151;
modelInfo['refProduct'] = "AMI2752";
modelInfo['refModel'] = "";
modelInfo['quantity'] = -82;




/**
* Retrieve designation label for a caracteristic name
*/
function getCaracDesignation(carac) {
  return caracList[carac];
}

function displayPipedCaracteristic(refProduct, carac) {
     var caracValues = getCaractValues(refProduct, carac); 
     var str ="";
     for(var i=0; i<caracValues.length; ++i) {
	str +=caracValues[i];
          if (i<(caracValues.length-1)) str += " | ";
     }
     document.write(str);

}

/**
 * Displays carac for refProduct.
 * If only one carac, then displays it.
 * If more that one carac, displays the list in a Select field.
 */
function displayCaracteristic(refProduct, carac, ispopup) {
	var caracValues = getCaractValues(refProduct, carac); 
	if(caracValues.length == 0) {
		document.write("");
	} /*else if(caracValues.length == 1) {
		document.write(caracValues[0]);
	} */else {
		var str = "<SELECT NAME='"+selectName(refProduct, carac)+"' onChange='updateCaracteristic(this,\""+refProduct+"\","+ispopup+");'>"
str += "<OPTION VALUE=\""+getCaracDesignation(carac)+"\">"+getCaracDesignation(carac)+"</OPTION>"

		for(var i=0; i<caracValues.length; ++i) {
			str += "<OPTION VALUE=\""+caracValues[i]+"\">"+caracValues[i]+"</OPTION>"
		}
		str += "</SELECT>"
		document.write(str);
	}
}

/**
 * Returns an array of all carac values available for refProduct.
 */
function getCaractValues(refProduct, carac) {
	var result = new Array();
	var allModels = getAllModels(refProduct);
	var allModelsLength = 0;
	for(k in allModels) {
		allModelsLength++;
	}
	var includeProductCarac = allModelsLength == 1;
	
	for(k in allModels) {
		var modelData = allModels[k];
		if(modelData['refModel'] != '' || includeProductCarac) {
			var caracValue = modelData[carac];
			if(!contains(result, caracValue)) {
				result.push(caracValue);
			}
		}
	}
	
	return result;
}

/**
 * Called when a carac Select field has been modified.
 * It checks if the combination of caracteristics match a single model.
 * And then modifies the "Choose Product" button with the mathing idProduct.
 */
function updateCaracteristic(updatedSelect, refProduct, ispopup, isFromInit) {
	var productForm = updatedSelect.form;
	var selectedCaracteristics = getSelectedCaracteristics(productForm);
	var matchingModels = getMatchingModels(selectedCaracteristics);

//alert('updateCaracteristic refProduct ='+refProduct );	
//alert('updateCaracteristic updatedSelect='+updatedSelect);	
	if(matchingModels == null || matchingModels.length == 0) {
		var msg = "No model match selected caracteristics !\n";
		for(k in selectedCaracteristics) {
			msg += (k+" : "+selectedCaracteristics[k]+"\n")
		}
                                          	var link = getElementById('addToBasketLink_'+refProduct);
		link.href = 'javascript:alert("Veuillez préciser votre choix")'
	} else if(matchingModels.length > 1) {
		var msg = "More than one model match selected caracteristics !\n";
		for(var i=0; i<matchingModels.length; ++i) {
			msg += matchingModels[i]['refModel']+"\n"
		}

                                           var link = getElementById('addToBasketLink_'+refProduct);		
                                           link.href = 'javascript:alert("More than one model match selected caracteristics ")'
	} else {
		var idProduct = matchingModels[0]['id'];
		var link = getElementById('addToBasketLink_'+matchingModels[0]['refProduct']);
                                           if (ispopup) 
		    link.href = "javascript:window.opener.location.href='/ebusiness/addToCaddie.jsp?idProduct="+matchingModels[0]['id']+"';window.close();"
                                           else
		    link.href = '/ebusiness/addToCaddie.jsp?idProduct='+matchingModels[0]['id']

		var quantity = matchingModels[0]['quantity'];
		if((isFromInit == null || !isFromInit) && (quantity != null && quantity <=0)) {
			var msg = "Ce produit n'est plus en stock, mais vous pouvez le commander dés maintenant.\n";
			msg += "\n";
			msg += "La totalité de votre commande sera envoyé dès reception de ce produit."
			alert(msg);
		}
		var reassortSpan = getElementById('reassort_'+matchingModels[0]['refProduct']);
		if(reassortSpan != null) {
			if(quantity != null && quantity <=0) {
				var reassort = matchingModels[0]['002_REASSOR'];		
				reassortSpan.innerHTML = reassort;
			} else {
				reassortSpan.innerHTML = '';
			}
		}
	}
}

/**
 * Returns a Map object of all selected caracteristics in productForm.
 * productForm MUST be related to only one product. 
 * ie: if there are multiple product on the current page, each one MUST have its own form.
 */
function getSelectedCaracteristics(productForm) {
	var selectedCaracteristics = new Object();
	for(var i = 0; i < productForm.elements.length; ++i) {
		var input = productForm.elements[i];
		if(input.name.indexOf("prod:") == 0) {
			var refProduct = refProductFromSelectName(input.name);
			var carac = caracNameFromSelectName(input.name);
			selectedCaracteristics['refProduct'] = refProduct;
			selectedCaracteristics[carac] = input.options[input.selectedIndex].value;
		}
	}
	
	return selectedCaracteristics;
}

/**
 * Returns an array of all the Models that matches selectedCaracteristics.
 */
function getMatchingModels(selectedCaracteristics) {
	var matchingModels = new Array();
	var refProduct = selectedCaracteristics['refProduct'];
	var allModels = getAllModels(refProduct);
	
	for(k in allModels) {
		var modelData = allModels[k];
		var modelDataMatchSelectedCaracteristics = true ;
		for(l in selectedCaracteristics) {
			modelDataMatchSelectedCaracteristics &= (selectedCaracteristics[l] == modelData[l]);
		}
		
		if(modelDataMatchSelectedCaracteristics) {
			matchingModels.push(modelData);
		}
	}
	
	return matchingModels;
}

function initProductForms(ispopup) {
	for(i=0; i<document.forms.length; ++i) {
		var cForm = document.forms[i];
		var selectedCaracteristics = getSelectedCaracteristics(cForm);
		var refProduct = null;
		var carac = null ;
		for(k in selectedCaracteristics) {
			if(k == 'refProduct') {
				refProduct = selectedCaracteristics['refProduct'];
			} else {
				carac = k;
			}
			if(refProduct != null && carac != null) {
				var selectCaract = cForm.elements[selectName(refProduct, carac)];
				updateCaracteristic(selectCaract,refProduct,ispopup,true);
			}
		}
	}
}

/**
 * Name of the Slect input to choose carac of product identified by refProduct.
 * selectName('Daisy 05', '001_TEST') returns 'prod:Daisy 05-carac:001_TEST'
 */
function selectName(refProduct, carac) {
	var result = "prod:"+refProduct+"-carac:"+carac;
	return result;
}

/**
 *  From 'prod:Daisy 05-carac:001_TEST' returns 'Daisy 05'
 */
function refProductFromSelectName(selectName) {
	var i = selectName.indexOf("-carac:");
	return selectName.substring("prod:".length, i);
}

/**
 *  From 'prod:Daisy 05-carac:001_TEST' returns '001_TEST'
 */
function caracNameFromSelectName(selectName) {
	var i = selectName.indexOf("-carac:") + "-carac:".length;
	return selectName.substring(i);
}

function contains(anArray, anElement) {
	if(anArray == null) {
		return false;
	}
	for(var i=0; i<anArray.length; ++i) {
		if(anElement == anArray[i]) {
			return true;
		}
	}
	return false ;
}

/**
* Show Hide Block
*/
function showHide(pstrID){
  var myDiv = document.getElementById(pstrID);
  if (myDiv){
    if (myDiv.style.display == 'none'){
      showBlock(pstrID);
    } else{
      hideBlock(pstrID);
    }
  }
}
function showBlock(pstrID){
  var myDiv = document.getElementById(pstrID);
  if (myDiv){
    myDiv.style.display = 'block';
  }
}
function hideBlock(pstrID){
  var myDiv = document.getElementById(pstrID);
  if (myDiv){
    myDiv.style.display = 'none';
  }
}
//
//****** Support multi navigateur ***************************
//
function getElementById(id) {
	if(document.all) {   					// Internet Explorer
		return document.all[id] ;
	} else if(document.getElementById) {	// Safari
		return document.getElementById(id);
	} else {
		alert("Unsupported Navigator");
	}
}