var m_attributeRules = new Array();

function AttributeRule() {;}

function GetAttributeRule(clientID)
{
    var attribRule = new AttributeRule();
    for (var i = 0; i < m_attributeRules.length; i++)
    {
        if (m_attributeRules[i].ClientID.toString() == clientID.toString())
        {
            attributeRule = m_attributeRules[i];
            break;
        }
    }
    return attributeRule;
}

function DropDownListItemDependent(oList, sArgs1, sArgs2, bIsParentVisible)
{
	var sSelectedVal = oList[oList.selectedIndex].value;
	
	var sOptionIDList = sArgs1.split(";");
	var sAttribList = sArgs2.split(";");
	var nAttributeIndex = 0;
	
	if (bIsParentVisible == null || typeof(bIsParentVisible) == "undefined")
	{
		bIsParentVisible = true;
	}
	
	var oRule = GetAttributeRule(oList.id);
			
	for(var nOptionIndex = 0; nOptionIndex < sOptionIDList.length; nOptionIndex++)
	{
		var sOptionIDs = sOptionIDList[nOptionIndex].split(",");
		var bShow = false;
		if (bIsParentVisible == true)
		{
			for (var x = 0; x < sOptionIDs.length; x++)
		    {
			    if (sOptionIDs[x] == sSelectedVal)
			    {
				    bShow = true;
				    break;
				}
		    }
		}
		
		var sAttribs = sAttribList[nOptionIndex];
		var sTargetDetailList = oRule.TargetDetailID.split(";");
					
		ListItemDependent(bShow, sAttribs, sTargetDetailList);
	}
}		

function RadioListItemDependent(oContainer, sArgs1, sArgs2, bIsParentVisible)
{
	var sSelectedVal;
	var list = oContainer.getElementsByTagName("input");
	for (var i = 0; i < list.length; i++)
	{
		if (list[i].checked)
		{
			sSelectedVal = list[i].value;
			break;
		}
	}
	
	var sOptionIDList = sArgs1.split(";");
	var sAttribList = sArgs2.split(";");
	var nAttributeIndex = 0;
	
	if (bIsParentVisible == null || typeof(bIsParentVisible) == "undefined")
	{
		bIsParentVisible = true;
	}
	
	var oRule = GetAttributeRule(oContainer.id);
		
	for(nOptionIndex = 0; nOptionIndex < sOptionIDList.length; nOptionIndex++)
	{
		var sOptionIDs = sOptionIDList[nOptionIndex].split(",");
		var bShow = false;
		if (bIsParentVisible == true)
		{
		    for (x = 0; x < sOptionIDs.length; x++)
		    {
			    if (sOptionIDs[x] == sSelectedVal)
			    {
				    bShow = true;
				    break;
			    }					
		    }
		}
		
		var sAttribs = sAttribList[nOptionIndex];
		var sTargetDetailList = oRule.TargetDetailID.split(";");
					
		ListItemDependent(bShow, sAttribs, sTargetDetailList);
	}
}

function ProcessItem(){;}

function ListItemDependent(bShow, args, targetDetailList)
{
	var ary = args.split(",");
	var processList = new Array();
	for(i = 0; i < ary.length; i++)
	{
		var attributeID = ary[i];
			
		var hasTargetDetail = false;
		var targetOptions;
		if (targetDetailList != null)
		{
		    for (var detailIndex = 0; detailIndex < targetDetailList.length; detailIndex++)
		    {
			    var pair = targetDetailList[detailIndex].split(":");
			    if (pair[0] == attributeID)
			    {
				    hasTargetDetail = true;
				    targetOptions = pair[1];
				    break;
			    }
		    }	
		}
		
		var process = new ProcessItem();
		process.hasTargetDetail = hasTargetDetail;
		process.attributeID = attributeID;
		process.targetOptions = targetOptions;
		process.show = bShow;
		processList.push(process);
	}
	
	for (var i = 0; i < processList.length; i++)
	{
		var process = processList[i];
		if (process.hasTargetDetail)
		{
			ProcessListOption(process.attributeID, process.targetOptions, process.show);
		}
		else
		{
			ProcessAttribute(process.show, process.attributeID);
		}
	}	
}


		function ProcessListOption(attributeID, sTargetOptions, bShow)
		{
				var div = document.getElementById("AttributeWrapper_" + attributeID);
				if (div == null || typeof(div) == "undefined")
					return;
					
				targetOptions = sTargetOptions.split(",");	
				
				var arySelect = div.getElementsByTagName("select");	
				var bIsSelectList = (arySelect.length > 0);
				for (var x = 0; x < arySelect.length; x++)
				{
					var oList = arySelect[x];
					var oRule = GetAttributeRule(oList.id);
					var sValues = oRule.ListOptions;

					if (sValues == null || typeof(sValues) == "undefined")
					{
						sValues = "";
						
						for (var indexList = oList.options.length-1; indexList >= 0; indexList--)
						{
							if (sValues.length > 0)
							{
								sValues += "|";
							}
							sValues += oList.options[indexList].value + ";" + oList.options[indexList].text;
						}				
						oRule.ListOptions = sValues;		
					}
					else
					{
						var aryValues = sValues.split("|");
						oList.options.length = 0;
						for (var indexValue = aryValues.length-1; indexValue >= 0; indexValue--)
						{
							var aryOption = aryValues[indexValue].split(";");							
							
							if (!bShow && IsInList(targetOptions, aryOption[0]))
							{
								continue;
							}						

							var oOption = document.createElement("option");
							oList.appendChild(oOption);			
							oOption.value = aryOption[0];			
							oOption.text = aryOption[1];			
						}
					}
				
					var sAttributeID = oRule.AttributeID; //oList.AttributeID;
					var sAttributeDetailID = oRule.AttributeDetailID; //oList.AttributeDetailID;

					if (oList == null || typeof(oList) == "undefined" ||
						sAttributeID == null || typeof(sAttributeID) == "undefined" ||
						sAttributeDetailID == null || typeof(sAttributeDetailID) == "undefined")
					{
						continue;
					}	

					DropDownListItemDependent(oList, sAttributeDetailID, sAttributeID, bShow);
				} //end for arySelect		
				
				
			    var aryRadio = div.getElementsByTagName("input");	
				for (var x = 0; x < aryRadio.length; x++)
				{
				    if (bIsSelectList)
				    {
				        break;
				    }
				    
					var oList = aryRadio[x];
					
					if (oList.type != "radio")
					{
					    continue;
					}
					
					var oRule = GetAttributeRule(oList.id);
					
					var sValues = oRule.ListOptions;

					if (sValues == null || typeof(sValues) == "undefined")
					{
						sValues = "";
						
						//for (var indexList = oList.options.length-1; indexList >= 0; indexList--)
						//{
							if (sValues.length > 0)
							{
								sValues += "|";
							}
							var sValue = oList.value;
							var sText = oList.parentNode.getElementsByTagName("label")[0].innerText;
							sValues += sValue + ";" + sText;
						//}				
						oRule.ListOptions = sValues;		
					}
					else
					{
						var aryValues = sValues.split("|");
						oList.options.length = 0;
						for (var indexValue = aryValues.length-1; indexValue >= 0; indexValue--)
						{
							var aryOption = aryValues[indexValue].split(";");							
							
							if (!bShow && IsInList(targetOptions, aryOption[0]))
							{
								continue;
							}						

							var oOption = document.createElement("option");
							oList.appendChild(oOption);			
							oOption.value = aryOption[0];			
							oOption.text = aryOption[1];			
						}
					}
					
					var sAttributeID = oRule.AttributeID; //oList.AttributeID;
					var sAttributeDetailID = oRule.AttributeDetailID; //oList.AttributeDetailID;

					if (oList == null || typeof(oList) == "undefined" ||
						sAttributeID == null || typeof(sAttributeID) == "undefined" ||
						sAttributeDetailID == null || typeof(sAttributeDetailID) == "undefined")
					{
						continue;
					}	

					RadioListItemDependent(oList, sAttributeDetailID, sAttributeID, bShow);
				} //end for aryRadio									
		}
		
		function IsInList(targetOptions, val)
		{
			var returnVal = false;
			
			for (var indexTarget = 0; indexTarget < targetOptions.length; indexTarget++)
			{
				if (targetOptions[indexTarget] == val)
				{
					returnVal = true;
					break;
				}
			}
			
			return returnVal;
		}
		
		function ProcessAttribute(bShow, attributeID)
		{
				var div = document.getElementById("AttributeWrapper_" + attributeID);
				if (div == null || typeof(div) == "undefined")
					return;
							
				if (bShow == true)
					div.style.display = "";
				else
					div.style.display = "none";	

				var aryInput = div.getElementsByTagName("input");
				for (var x = 0; x < aryInput.length; x++)
				{
					if (aryInput[x].type == "hidden")
						aryInput[x].value = bShow + "";
				}
				
				var arySelect = div.getElementsByTagName("select");	
				for (var x = 0; x < arySelect.length; x++)
				{
					var oList = arySelect[x];
					var oRule = GetAttributeRule(oList.id);
					var sAttributeID = oRule.AttributeID; //oList.AttributeID;
					var sAttributeDetailID = oRule.AttributeDetailID; //oList.AttributeDetailID;

					if (oList == null || typeof(oList) == "undefined" ||
						sAttributeID == null || typeof(sAttributeID) == "undefined" ||
						sAttributeDetailID == null || typeof(sAttributeDetailID) == "undefined")
					{
						continue;
					}	

					DropDownListItemDependent(oList, sAttributeDetailID, sAttributeID, bShow);
				}		
				
				var aryRadio = div.getElementsByTagName("input");	
				for (var x = 0; x < aryRadio.length; x++)
				{
					var oList = aryRadio[x];
					var oRule = GetAttributeRule(oList.id);
					var sAttributeID = oRule.AttributeID; //oList.AttributeID;
					var sAttributeDetailID = oRule.AttributeDetailID; //oList.AttributeDetailID;

					if (oList == null || typeof(oList) == "undefined" ||
						sAttributeID == null || typeof(sAttributeID) == "undefined" ||
						sAttributeDetailID == null || typeof(sAttributeDetailID) == "undefined")
					{
						continue;
					}	

					RadioListItemDependent(oList, sAttributeDetailID, sAttributeID, bShow);
				}					
		}