
function changeSelection (changedCharIndex)
{
	//Check if value is disabled
	if (changedCharIndex != -1000)
	{
		var ddlValueChanged = document.getElementById('ddlValue_' + changedCharIndex);
		var changedToOption = ddlValueChanged.options[ddlValueChanged.selectedIndex];
		
		if (changedToOption.disabled == true)
		{
			var hdSelectArguments = document.getElementById('hdSelectArguments');
			
			if (hdSelectArguments.value != "")
			{
				var parts = hdSelectArguments.value.split(';');

				for (var i = 0; i < parts.length - 1; i++)
				{
					var pair = parts[i].split(',');
					if (pair[0] == changedCharIndex)
					{
						ddlValueChanged.selectedIndex = Number(pair[1]) + 1;
						return;
					}
					
				}
			}
			ddlValueChanged.selectedIndex = 0;
			return;
		}
	}
	
	
	//Store selected choices for postback
	var hdSelectArguments = document.getElementById('hdSelectArguments');
	var args = "";
	
	for (var charIndex = 0; charIndex < v.length; charIndex++)
	{
		var ddlValue = document.getElementById('ddlValue_' + charIndex); 
			
		//If the cell is marked
		if (ddlValue.selectedIndex != 0)
		{
			var selectedValueIndex = ddlValue.selectedIndex - 1
			
			if (ddlValue.selectedIndex != 0)
			{
				args += charIndex + "," + selectedValueIndex + ";";
			}
		
		}
	}
	
	hdSelectArguments.value = args;
	
	
	
	
	var allProducts = getFilteredProducts(-1);
	
	//Check enabled/disabled
	for (var charIndex = 0; charIndex < v.length; charIndex++)
	{
		var ddlValue = document.getElementById('ddlValue_' + charIndex); 
		
		
		var selectedValueIndex = ddlValue.selectedIndex - 1
		
		var compareFilteredProducts = null;
		if (ddlValue.selectedIndex == 0)
		{
			compareFilteredProducts = allProducts;
		}
		else
		{
			compareFilteredProducts = getFilteredProducts(charIndex);
		}
	
		for (var valueIndex = 0; valueIndex < v[charIndex].length; valueIndex++)
		{
			var option = ddlValue.options[valueIndex + 1];
			
			
			if (ddlValue.selectedIndex == valueIndex + 1)
			{
				option.disabled = false;
				option.style.color = '#00925A'
			}
			else
			{
				//If the cell is not marked
				option.disabled = true;
				option.style.color = '#CCC';
				for (var productHolder = 0; productHolder < v[charIndex][valueIndex].length; productHolder++)
				{
					if (compareFilteredProducts[v[charIndex][valueIndex][productHolder]] == 1)
					{
						option.disabled = false;
						option.style.color = '#000';
						break;
					}
				}	
			}
		}
		
	}
	
	
	
	//Show/hide products
	var altItem = false;
	var visibleProductCount = 0;
	
	for (var productIndex = 0; productIndex < nrOfProducts; productIndex++)
	{
		var tableRow = document.getElementById('productRow_' + productIndex);
		
		if (allProducts[productIndex] == 1)
		{
			visibleProductCount++;
			
			tableRow.className = altItem ? "altgriditemrow" : "griditemrow";
			
			altItem = !altItem;
			tableRow.style.display = '';
		}
		else
		{
			tableRow.style.display = 'none';
		}
	}
	
	//Set the counter
	var spanNrOfProducts = document.getElementById('spanNrOfProducts');
	spanNrOfProducts.innerHTML = visibleProductCount;
}

function getFilteredProducts(excludeCharIndex)
{
	var allProducts = new Array(nrOfProducts);
	
	//All products visible from start
	for (var productIndex = 0; productIndex < nrOfProducts; productIndex++)
	{
		allProducts[productIndex] = 1;
	}
	
	for (var charIndex = 0; charIndex < v.length; charIndex++)
	{
		
		
		var ddlValue = document.getElementById('ddlValue_' + charIndex); 
		
		//If the char isn't the one to exclude and there is a selection
		if (charIndex != excludeCharIndex && ddlValue.selectedIndex != 0)
		{
			var selectedValueIndex = ddlValue.selectedIndex - 1	
			
			filterChar(allProducts, charIndex, selectedValueIndex);
		}
	}
	
	return allProducts;
}

function filterChar (allProducts, charIndex, selectedValueIndex)
{
	
	//Set allProducts + 1 for every products which is connected to the value
	for (var productHolder = 0; productHolder < v[charIndex][selectedValueIndex].length; productHolder++)
	{
		allProducts[v[charIndex][selectedValueIndex][productHolder]]++;
	}
	
	//Of the value is 2, keep the product, else remove it.
	for (var productIndex = 0; productIndex < nrOfProducts; productIndex++)
	{
		if (allProducts[productIndex] == 2)
		{
			allProducts[productIndex] = 1;
		}
		else
		{
			allProducts[productIndex] = 0;
		}
	}
}

function initStates()
{
	var hdSelectionVisible = document.getElementById("hdSelectionVisible");
	if (hdSelectionVisible.value == "1")
	{
		toggleSelectionGuide();
		hdSelectionVisible.value = "1";
	}
	
	var hdSelectArguments = document.getElementById('hdSelectArguments');
	
	if (hdSelectArguments.value != "")
	{
		
		var parts = hdSelectArguments.value.split(';');

		for (var i = 0; i < parts.length - 1; i++)
		{
			var pair = parts[i].split(',');
			var ddlValue = document.getElementById('ddlValue_' + pair[0]);
			ddlValue.selectedIndex = parseInt(pair[1]) + 1;
		}
		
		
		changeSelection(-1000);
		
	}
}


function toggleSelectionGuide () {
	var pnlSelectionGuideStyle = document.getElementById("pnlSelectionGuide").style;
	var hdSelectionVisible = document.getElementById("hdSelectionVisible");
	
	var imgArrow = document.getElementById("imgArrow");
	if (pnlSelectionGuideStyle.display == 'none') 
	{
		imgArrow.src = "img/arrow_down.gif";
		pnlSelectionGuideStyle.display = '';
		hdSelectionVisible.value = "1";
	} 
	else 
	{
		
		imgArrow.src = "img/arrow_right.gif";
		pnlSelectionGuideStyle.display = 'none';
		hdSelectionVisible.value = "0";
	}
}

