/*
sh_xpack_schluffi
-----------------
Autor: 		cfauner
Datum: 		14.09.2009
Beschr.:	Erzeugt bei hover über Farbe auf der xpack einen Layer, der VErfügbarkeit von Größen bzw. Varianten anzeigt
			Nachfolger des PowerLayers (etw. abgespeckt)
*/		




		
		
		var openSchluffis="false";
		
		/*
		is_in
		----------
		brauchen wir um Duplikate auszusortieren
		return: -1 oder Position des Duplikats
		*/
		function is_in(searcharray,value)
		{
			var is_in=-1;
			var size=[];
			for (x in searcharray)
			{
				if (searcharray[x]==value)
				{
					is_in=x;
				}
			}
			return is_in;
		}
		/*
		openSchluffiLayer
		-----------------
		sortiert Variationen, Größen, etc.
		generiert den Layer
		Autor: cfauner
		Datum: 11.09.2009
		*/
		function openSchluffilayer(sku,color,svariation,scolor,webRoot,color_counter)
		{
		
		
			/**
			* Class KalRequest
			* Encapsulates an XML request to KAL (using jQuery)
			*/
			function KalRequest() 
			{
				this.xhr = null;
				this.sender = null;
				
				/* Initiates a KAL request and calls the appropriate handlers. sender must
				 * be able to respond to the "onKalSuccess" and "onKalError" messages. */
				this.initiate = function(sender, kalUrl, kalData) 
				{
					this.sender = sender;
					this.xhr = jQuery.ajax({
						type: "POST",
						url: kalUrl,
						processData: false,
						dataType: "xml",
						timeout: 2000,
						contentType: "application/xml; charset=UTF-8",
						data: kalData,
						success: sender.onKalSuccess,
						error: sender.onKalError
					});
				}
				
				this.cancel = function() 
				{
					if (this.xhr.readyState < 4) 
					{
						this.xhr.abort();
					}
				}
			}
			/*
			KALHelper
			---------
			cfauner
			
			Empfängt Anwort des KAL-Requests.
			Holt die Verfügbarkeit für die jew. Variante. Aktualisiert DOM entsprechend
			*/
			function KALHelper()
			{
				this.onKalSuccess = function(xml) 
				{
					var i=0;
					var verfuegbarkeit;
					var size;
					while (xml.getElementsByTagName("Article")[i]!=null)
					{
						try {verfuegbarkeit=xml.getElementsByTagName("DeliveryDesignation")[i].childNodes[0].nodeValue;}
						catch (e){verfuegbarkeit=1;};
						try{size=xml.getElementsByTagName("SizeAlphaText")[i].childNodes[0].nodeValue;}
						catch (e){};
						//alert ("av_"+size+": "+verfuegbarkeit);
						switch (verfuegbarkeit)
						{
							case "0": 
							if (document.getElementById("av_"+size))
							{
								document.getElementById("av_"+size).className="";
								document.getElementById("av_"+size).id=document.getElementById("av_"+size).id+"kal";
							}
							else if (document.getElementById("av_"+size+"kal"))
							{
								document.getElementById("av_"+size+"kal").className="";
							}
							//Größen verschieben für Helline
							else if (document.getElementById("av_na"))
							{
								document.getElementById("av_na").className="";
								document.getElementById("av_na").id=document.getElementById("av_na").id+"kal";
							}
							break;
							case "1" :
							//nur Daten aus DB ggf. überschreiben wurde, das Element schon einmal mit KAL aktualisiert keine Überschreibung auf nicht verfügbar
							if (document.getElementById("av_"+size))
							{
								document.getElementById("av_"+size).className="not_avail";
								document.getElementById("av_"+size).id=document.getElementById("av_"+size).id+"kal";
							}
							//Größen verschieben für Helline
							else if (document.getElementById("av_na"))
							{
								document.getElementById("av_na").className="not_avail";
								document.getElementById("av_na").id=document.getElementById("av_na").id+"kal";
							}
							break;
							case "2" :
							var verfuegbarkeit=xml.getElementsByTagName("DeliveryStatement")[0].childNodes[0].nodeValue;
							//wenn Artikel verfuegbar --> Layer-Background killen!!!
							if (verfuegbarkeit==1)
							{
								//nur Daten aus DB ggf. überschreiben wurde, das Element schon einmal mit KAL aktualisiert keine Überschreibung auf nicht verfügbar
								if (document.getElementById("av_"+size))
								{
									document.getElementById("av_"+size).className="not_avail";
									document.getElementById("av_"+size).id=document.getElementById("av_"+size).id+"kal";
								}
								else if (document.getElementById("av_na"))
								{
									document.getElementById("av_na").className="not_avail";
									document.getElementById("av_na").id=document.getElementById("av_na").id+"kal";
								}
							}
							else
							{
								if (document.getElementById("av_"+size))
								{
									document.getElementById("av_"+size).className="";
									document.getElementById("av_"+size).id=document.getElementById("av_"+size).id+"kal";
								}
								else if (document.getElementById("av_"+size+"kal"))
								{
									document.getElementById("av_"+size+"kal").className="";
								}
								//Größen verschieben für Helline
								else if (document.getElementById("av_na"))
								{
									document.getElementById("av_na").className="";
									document.getElementById("av_na").id=document.getElementById("av_na").id+"kal";
								}
							}
							break;
							
							default:break;
						}
						i++;
					}
					
					document.getElementById("schluffi_"+color_counter).style.display="block";
					jQuery("#schluffi_"+color_counter).fadeOut(parseInt("8000"));

				}
						
			}
		
		
			if (openSchluffis!="false")
			{
				closeSchluffilayer();
			}
			
			var availability_text="";
			var KALHelper=new KALHelper();
			var KalRequest=new KalRequest();
			var has_dim3=false; //Flag Variation vorhanden?
			var has_colors=false; //Farben überhaupt vorhanden?
			var variation;
			var fussmatten=0;
			var user_agent=navigator.userAgent;
			var ua="ff";
			if (user_agent.indexOf("MSIE")>0)
			{
				ua="ie";
				var schluffi_height=39; //Grundhöhe für Layer
				var schluffi_line=13; //Zeilenhöhe für Layer
			}
			else
			{
				ua="ff";
				var schluffi_height=26; //Grundhöhe für Layer
				var schluffi_line=13; //Zeilenhöhe für Layer
			}
			//Verfügbarkeitstabelle erzeugen
			var avail_table=document.createElement("div");
			avail_table.className="avail_table";
			/*Header des Layers bauen*/
			var avail_doc_header_1=document.createElement("div");
			avail_doc_header_1.className="avail_doc_header";
			var avail_doc_header_2=document.createElement("div");
			avail_doc_header_2.className="avail_doc_header";
			avail_doc_header_2.style.top=3*schluffi_line+"px";
			var availheader_text_1 = document.createTextNode(entity2char("Coloris/Mod&egrave;le:"));
			var colortext=color.split(",");
			var availheader_text_2 = document.createTextNode(entity2char(colortext[0]));
			var availheader_text_3 = document.createTextNode(entity2char("Tailles disponibles:"));
			var p_1=document.createElement("p");
			var p_2=document.createElement("p");
			var p_3=document.createElement("p");
			var avail_doc_trenner=document.createElement("div");
			avail_doc_trenner.className="var_trenner";
			p_1.appendChild(availheader_text_1);
			p_2.appendChild(availheader_text_2);
			p_3.appendChild(availheader_text_3);
			p_1.className="avail_p";
			p_2.className="avail_p_thin";
			p_3.className="avail_p";
			avail_doc_header_1.appendChild(p_1);
			avail_doc_header_1.appendChild(avail_doc_trenner);
			avail_doc_header_1.appendChild(p_2);		
			avail_doc_header_1.appendChild(avail_doc_trenner);
			avail_doc_header_2.appendChild(p_3);

			
			/*Layer in dem die Größen erscheinen*/
			var avail_doc_1=document.createElement("div");
			avail_doc_1.className="avail_doc";
			avail_doc_1.style.top=4*schluffi_line+"px";
			
			var v_for_Kal=Array();
			var textlaenge=0; //Zähler für Umbruch
			var v_By_col=[];
			var v_By_size=new Array(); //Array für Sortierung nach Größe
			var justSizes=new Array();
			var ssku=new Array(); //splitted sku
			var size=""; //extrahierte Größe
			var currentVariation=new Array();
			var duplikat=-1;
			var index = getStyleBySKU(sku);
			if(index >= 0)
			{

				var currentStyle = xpackStyles[index];
				
				v_By_col=currentStyle.getVariationsByColor(color); //Alle Variationen für jew. Farbe holen
				if (v_By_col.length==0) //wenn "normale" Farbe scheitert --> Suchfarbe nehmen
				{
					for (i in currentStyle.variations)
					{
						if (currentStyle.variations[i].searchColor==scolor)
						{
							v_By_col[i]=currentStyle.variations[i];
						}
					}
				}
				//nach Größe sortieren
				for (variation in v_By_col)
				{
					//für die KAL sichern wir noch einmal eine Varianten
					v_for_Kal[variation]=v_By_col[variation];
					ssku=v_By_col[variation].SKU.split("-");
					size=entity2char(v_By_col[variation].size);
					duplikat=is_in(justSizes,size)
					//Duplikate vermeiden
					if (duplikat==-1)
					{
						justSizes[variation]=size;
						v_By_size[variation]=size+":"+v_By_col[variation].availability+":"+v_By_col[variation].dim3;
					}
					else
					{
						if (v_By_col[variation].availability!=1)
						{
							v_By_col[duplikat].availability=v_By_col[variation].availability;
							v_By_size[duplikat]=size+":"+v_By_col[duplikat].availability+":"+v_By_col[duplikat].dim3;
						}
					}
					
				}
				try
				{
					v_By_size.sort();
				}
				catch (e)
				{
				}

				
				var sem_counter=0;
				var special_joe=-1; //Größen verschieben für Helline
				// Größen inkl Verfügbarkeit hinzufügen
				for (i in v_By_size)
				{
					
					sem_counter++;
					//Größen verschieben für Helline
					try
					{
					
						var french_connection=v_By_size[special_joe].split(":");
					
					}
					catch (e)
					{
						var french_connection=new Array();
						french_connection[0]="na";
					}
					special_joe++;
					try{ currentVariation=v_By_size[i].split(":");

					if (currentVariation[2]!="null")
					{
						has_dim3=true; // --> Später mehr Details Link anzeigen
					}
					//Nur die Varianten mit entsprechender Farbe berücksichtigen
					if (currentVariation[0]!="null")
					{
						has_colors=true;
	
						if (sem_counter<v_By_size.length)
						{
							var textpur=currentVariation[0]+";";
							textlaenge+=currentVariation[0].length;
						
							var gr_text=document.createTextNode(unescape(textpur));
						}
						else
						{
							var textpur=currentVariation[0];
							var gr_text=document.createTextNode(currentVariation[0]);
							textlaenge+=currentVariation[0].length;
							
						}
						
						if (currentVariation[0].length>10)
						{
							fussmatten++;
						}
						var gr_spacer=document.createTextNode("  ");
					
						if (currentVariation[1]==1) //nicht verfuegbar
						{
							var gr_cont=document.createElement("span");
							gr_cont.id="av_"+french_connection[0];
							gr_cont.className="not_avail";
							gr_cont.appendChild(gr_text);
							avail_doc_1.appendChild(gr_cont);
							avail_doc_1.appendChild(gr_spacer);
						}
						else
						{
							var gr_cont=document.createElement("span");
							gr_cont.id="av_"+french_connection[0];
							gr_cont.appendChild(gr_text);
							avail_doc_1.appendChild(gr_cont);
							avail_doc_1.appendChild(gr_spacer);			
						}
						
						
						//umbruch
						if (textlaenge>=20)
						{
							schluffi_height+=schluffi_line;
							textlaenge=0;
							//Nach langen Strings umbrechen im Layer
							if (fussmatten%2==0 && fussmatten!=0)
							{
								avail_doc_1.appendChild(document.createElement("br"));	
							}
						}

					}
					} catch (e){}	
				}
				
				//Cup praktisch... --> Zusatzlink einhängen
				if (has_dim3==true)
				{
					if (has_colors==true)
					{
						var avail_doc_trenner_2=document.createElement("div");
						avail_doc_trenner_2.className="var_trenner";
						if (ua=="ie")
						{
							avail_doc_trenner_2.style.bottom="14px";
						}
						else
						{
							avail_doc_trenner_2.style.bottom="24px";
						}
					}
					var avail_doc_2=document.createElement("div");
					
					avail_doc_2.className="avail_doc";
					var dv_link=document.createElement("a");
					dv_link.className="dv_link";
					dv_link.href=webRoot+"&ArticleNo="+ssku[0];
					var dv_link_text=document.createTextNode(entity2char("plus de d&eacute;tails ")+unescape ("%BB"));
					dv_link.appendChild(dv_link_text);
					avail_doc_2.style.bottom="8px";
					avail_doc_2.appendChild(dv_link);
					schluffi_height+=(schluffi_line*2);
				}
			}

			if (has_colors==true || has_dim3==true) // Wenn keine Farben oder Varianten vorhanden nix mache
			{

				if (document.getElementById("schluffi_"+svariation)==null)
				{
					var schluffiparent=document.getElementById("colorselector_"+color_counter);
					schluffiparent.style.visibility="visible";
					avail_table.appendChild(avail_doc_header_1);
					if (has_colors==true)
					{
						avail_table.appendChild(avail_doc_header_2);
						avail_table.appendChild(avail_doc_1);
						schluffi_height+=3*schluffi_line;
					}
					if (avail_doc_2)
					{
						if (avail_doc_trenner_2)
						{
							avail_table.appendChild(avail_doc_trenner_2);
						}
						avail_table.appendChild(avail_doc_2);
					}
					var schluffi = document.createElement("div");//SchluffiLayer erzeugen
					var schluffipos=findPosition(schluffiparent); //Position des "Pfeils" ermitteln
					schluffi.onmouseout=function(){schluffi.style.display="none";};
					schluffi.onmouseover=function(){schluffi.style.display="block";};
					schluffi.appendChild(avail_table);
					schluffi.style.left=schluffipos[0]+"px";
					schluffi.style.top=schluffipos[1]+8+"px";
					schluffi.style.height=schluffi_height+"px";
					schluffi.className="xpack_special";
					schluffi.id="schluffi_"+color_counter;

					
					//KAL-Aktualisierung

					var requestString = '<?xml version="1.0" encoding="utf-8"?>';
					requestString += '<tns:KALAvailabilityRequest xmlns:tns="http://www.helline.fr/KAL" ';
					requestString += 'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ';
					requestString += 'xsi:schemaLocation="http://www.helline.fr/KAL/KALAvailabilityRequestSchema.xsd">';
					requestString += "<Articles>";
					for (variation in v_for_Kal)
					{
						ssku=v_for_Kal[variation].SKU.split("-");
						if (v_for_Kal[variation].originalSize!=v_for_Kal[variation].size)
						{
							var size=entity2char(v_for_Kal[variation].originalSize);
						}
						else
						{
							var size=entity2char(v_for_Kal[variation].size);
						}
						var articleNo = ssku[0];
						var promo = ssku[0].substr(6);
						var company = "0";
						requestString += "<Article>";
						requestString += "<CompleteCatalogItemNo>" + articleNo + "</CompleteCatalogItemNo>";
						requestString += "<SizeAlphaText>" + size + "</SizeAlphaText>";
						requestString += "<Std_Promotion>" + promo + "</Std_Promotion>";
						requestString += "<CustomerCompanyID>" + company + "</CustomerCompanyID>";
						requestString += "</Article>";
					}
					requestString += "</Articles></tns:KALAvailabilityRequest>";
					KalRequest.initiate(KALHelper, kalRequestURL, requestString);
					//Layer unterhalb Selektor einhängen
					window.document.body.appendChild(schluffi);
					
					
					
				}
			}
			openSchluffis="schluffi_"+color_counter; //Flag --> Layer offen
			
			
			
			

		}
		/*
		closeSchluffilayer()
		--------------------
		schließt bel. schluffi-Layer wenn vorhanden
		*/
		function closeSchluffilayer()
		{
			schluffi_arrow=openSchluffis.split("_");
			document.getElementById("colorselector_"+schluffi_arrow[1]).style.visibility="hidden";
			try
			{
				window.document.body.removeChild(document.getElementById(openSchluffis));
			}
			catch (e)
			{
				schluffi_arrow=openSchluffis.split("_");
				document.getElementById("colorselector_"+schluffi_arrow[1]).style.visibility="hidden";
			}
		}