	
	var num = 0;
	
	function activateScript(url)
	{
		num++;
		
		s = document.createElement('iframe');
		s.style.display    = 'none';
		s.id               = 'dynamicIframe'+num;
		s.style.visibility = 'hidden';
		s.style.position   = 'absolute';
		s.style.top        = '0px';
		s.style.left       = '0px';
		s.style.width      = '400px';
		s.style.height     = '400px';

		url += '&iframeId='+s.id;
		if(document.body)
			document.body.appendChild(s);
		s.src = url;
	}
	

	function removeDynamicIframe(id)
	{
		var obj = document.getElementById(id);
		
		obj.parentNode.removeChild(obj);
	}
	
	function addProductToBasket(productId, amount, variationLineId)
	{
		if (variationLineId && !variationLineId.value)
		{
			alert('You have to choose a variation.');
			return;
		}
		activateScript('queryData.php?action=addToBasket&productId='+productId+'&amount='+amount+'&variationLineId='+variationLineId.value);
	}
	
	var flashCount = 0;
	var flashCountMax = 10;
	var basketOuter = null;
	var flashTimerId = null;
	function addProductToBasketReturn(basketStr)
	{
		var obj = document.getElementById('miniBasket');
		if(!obj) return false;
		
		obj.innerHTML = unescape(basketStr);
		
		// Scroll to the basket area
		window.scrollTo(520, 15);
		
		// Flash the background
		if (!basketOuter) basketOuter = document.getElementById('basketOuter');
		if (!basketOuter) return false;
		if (flashTimerId) flashClear();
		flashTimerId = window.setInterval(flashBg, 100);
	}
	
	function flashBg()
	{
		if ('white' == basketOuter.style.backgroundColor) basketOuter.style.backgroundColor = 'green';
		else                                              basketOuter.style.backgroundColor = 'white';
		
		if (flashCountMax == ++flashCount) flashClear();
	}
	function flashClear()
	{
		flashCount = 0;
		window.clearInterval(flashTimerId);
		flashTimerId = null;
		basketOuter.style.backgroundColor = '';
	}
	
	
	function toggleMiniBasket()
	{
		var obj = document.getElementById('miniBasketFoldout');
		if(obj.style.display == 'none')
			obj.style.display = 'block';
		else
			obj.style.display = 'none';
	}
	
	function removeBasketLine(basketLine)
	{
		activateScript('queryData.php?action=removeFromBasket&basketLine='+basketLine);
	}


	function in_array(val, arr)
	{
		var i;
		for(i in arr)
		{
			if (val == arr[i]) return true;
		}
		return false;
	}


	function updateVariation(oSelect)
	{
		// Variables to use
		var choosenVariationIdList, variationGroupId, vgs;
		var validVariationLineList, variationLineId, variationIdList, validVariationIdList;
		var i, subVariationGroupId, validCount, lastValidOptionI;
		
		// Loop each of the options
		for(variationGroupId in variationGroupList)
		{
			// The choosen variation in the other selects
			var choosenVariationIdList = new Array();
			for(subVariationGroupId in variationGroupList)
			{
				if (variationGroupId == subVariationGroupId) continue; // Skip own select box
				vgs = document.getElementById('variationGroupIdVariationId'+subVariationGroupId);
				if (!vgs || ('SELECT' != vgs.tagName && 'SELECT-ONE' != vgs.tagName) || !vgs.value) continue;
				choosenVariationIdList.push(vgs.value);
			}
			
			// Find the valid variation ids
			validVariationIdList = new Array();
			forVariationLineList :
					for(variationLineId in variationLineList)
			{
				variationIdList = variationLineList[variationLineId].variationIdList;
				
				// Check for stock
// removed 2006-01-20 HKH				if (variationLineList[variationLineId].stock <= 0) continue;
				// Inserted 2006-01-20 HKH
				if ((variationLineList[variationLineId].stock<=0) && !allowSaleWhenNotOnStock)
				{
					continue;
				}
								
				// CHL #79 - Start
				if (   (undefined!=variationLineList[variationLineId].exists) // Bagudkombatibel, just in case.
					 && !variationLineList[variationLineId].exists ) // Eksisterer ikke
				{
					continue;
				}
				// CHL #79 - End

				// Is the choosen variation in not in the variation line then skip the variationLine
				for (i in choosenVariationIdList)
						if (!in_array(choosenVariationIdList[i], variationIdList))
								continue forVariationLineList; // Continue the for(variationLineId in variationLineList) loop
				
				// If it's in there add each variationId to the valid list
				for (i in variationIdList)
						if (!in_array(variationIdList[i], validVariationIdList))
								validVariationIdList.push(variationIdList[i]);
			}
			
			// Get the corrent select
			vgs = document.getElementById('variationGroupIdVariationId'+variationGroupId);
			if (!vgs || ('SELECT' != vgs.tagName && 'SELECT-ONE' != vgs.tagName)) continue;
			// if (vgs.value && oSelect && vgs.id == oSelect.id) continue;
			
			// Disable options
			validCount = 0;
			lastValidOptionI = null;
			for(i = 0; i < vgs.options.length; ++i)
			{
				if (!vgs.options[i].value) continue;
				if (in_array(vgs.options[i].value, validVariationIdList))
				{ // valid
					// vgs.options[i].style.backgroundColor = '';
					// vgs.options[i].style.display = '';
					vgs.options[i].disabled = false;
					++validCount;
					lastValidOptionI = i;
				}
				else
				{ // not valid
					// vgs.options[i].style.backgroundColor = 'red';
					// vgs.options[i].style.display = 'none';
					if (vgs.options[i].selected) vgs.options[0].selected = true;
					vgs.options[i].disabled = true;
				}
			}
			
			// Select lonely options
			if (1 == validCount && (!oSelect || vgs.id != oSelect.id))
			{
				vgs.options[lastValidOptionI].selected = true;
			}
			
		}
	}
	
	function resetVariation()
	{
		var vgs, variationGroupId;
		
		// reset options
		for(variationGroupId in variationGroupList)
		{
			vgs = document.getElementById('variationGroupIdVariationId'+variationGroupId);
			if (!vgs || ('SELECT' != vgs.tagName && 'SELECT-ONE' != vgs.tagName)) continue;
			// Reset
			vgs.options[0].selected = true;
		}
		
		// Update the variations
		updateVariation();
	}
	
	function prepVariationsForSubmit()
	{
		var variationGroupId, vgs, choosenVariationIdList;
		
		// Check values and gather variationIds
		choosenVariationIdList = new Array();
		for(variationGroupId in variationGroupList)
		{
			vgs = document.getElementById('variationGroupIdVariationId'+variationGroupId);
			if (!vgs || ('SELECT' != vgs.tagName && 'SELECT-ONE' != vgs.tagName && 'INPUT' != vgs.tagName)) continue;
			
			// value check
			if (!vgs.value)
			{
				alert('Please choose a product variant(s)');
				return false;
			}
			
			// find variation line
			choosenVariationIdList.push(vgs.value);
		}
		
		// Find variation lines that match options
		forVariationLineList :
				for(variationLineId in variationLineList)
		{
			variationIdList = variationLineList[variationLineId].variationIdList;
			
			// Debug
			var debugVariationIdList = new Array();
			for (i in variationIdList)
			{
				debugVariationIdList.push(variationIdList[i]);
			}
			

			// Is the choosen variation in not in the variation line then skip the variationLine
			for (i in choosenVariationIdList)
					if (!in_array(choosenVariationIdList[i], variationIdList))
					{
						//alert('FAIL - variationLineId: '+variationLineId+' - \nchoosenVariationIdList: '+choosenVariationIdList+' - \ndebugVariationIdList: '+debugVariationIdList);
						continue forVariationLineList; // Continue the for(variationLineId in variationLineList) loop
					}
			
			// If we made it this far we found the variationLine
			document.getElementById('variationLineId').value = variationLineId;
			
			return true;
		}
		
		alert('The choosen variation is not valid. Please choose another.');
		return false;
	}

