/*ComboItem for individual item settings*/
function ComboItem(ID, ParentID, Value) 
{
	this.ID = ID
	this.Value = Value
	this.ParentID = ParentID
}

/*ComboSet Object for each com set settings*/
function ComboSet(Levels, FormName, ComboName)
{
	this.Levels = Levels
	this.FormName = FormName
	this.ComboName = ComboName

	this.ComboOnChange = ComboOnChange;
	this.SetID = SetID;
	this.SetHidden = SetHidden;
	this.SetMaximumNestLevel  = SetMaximumNestLevel;
	this.GetSelectedIndex = GetSelectedIndex;

	//Fill the entire set with defaults	
	var i = 0; var bSelectedItems = false;
	//Do we have a previuous selection?
	if (eval(ComboName + '_SelectedItems.length') > 0)
		bSelectedItems = true;
		
	//Fill the combos
	var iParentItem = "";
	for(i = 1; i <= Levels; ++i)
	{
		var cmbObj = document.forms[this.FormName].elements[this.ComboName + i];
		EmptySelect(cmbObj);
		if (bSelectedItems) 
		{
			var iSelectedItem = this.GetSelectedIndex(i, iParentItem)
			FillCombo (eval(ComboName + i), iParentItem, cmbObj, iSelectedItem);
			if (iSelectedItem > -1)
			{
				iParentItem = cmbObj.options[iSelectedItem].value;
				if (cmbObj.options[iSelectedItem].value!="")
					this.SetHidden(cmbObj.options[iSelectedItem].value, i)
			}
		}
		else
		{
			FillCombo (eval(ComboName + i), iParentItem, cmbObj, '');
			if (cmbObj.options[0])
			{
				iParentItem = cmbObj.options[0].value;
				this.SetHidden(cmbObj.options[0].value, i)
			}
		}
	}
	//Set the maximum nest level with the running combination
	this.SetMaximumNestLevel();
}
/*Handle the on change event */
function ComboOnChange(nLevel)//, curComboSet)
{
	//Set the selected index 
	var objChangedCombo = document.forms[this.FormName].elements[this.ComboName + nLevel];
	this.SetHidden(objChangedCombo.options[objChangedCombo.selectedIndex].value, nLevel)
	//Empty the selects below this one and fill with defaults
	for(var i=nLevel + 1; i <= this.Levels; ++i)
	{
		var objCmbPar = document.forms[this.FormName].elements[this.ComboName + (i-1)]
		var objCmbFig = document.forms[this.FormName].elements[this.ComboName + i]
		EmptySelect(objCmbFig);
	
		if (objCmbPar.selectedIndex >= 0)
			FillCombo(eval(this.ComboName + (i)), 
								objCmbPar.options[objCmbPar.selectedIndex].value,
								objCmbFig, 
								'')
		//Set the selected index if not empty
		if (objCmbFig.selectedIndex> -1 && objCmbFig.options[objCmbFig.selectedIndex].value != '')
			this.SetHidden(objCmbFig.options[objCmbFig.selectedIndex].value, i);
	}
	//Set the maximum nest level with the running combination
	this.SetMaximumNestLevel();
}

function SetID(i)
{
	var objCmb = document.forms[this.FormName].elements[this.ComboName + i]
	if (objCmb.selectedIndex> -1 && objCmb.options[objCmb.selectedIndex].value != '')
		this.SetHidden(objCmb.options[objCmb.selectedIndex].value, i);
}

//Fill the child combo
function FillCombo (cmbArray, lParent, cmbObj, selItem) 
{	var lOffset = 0;	for (var i = 0; i < cmbArray.length; i++) {		//Do we have the right parent?
		if (cmbArray[i].ParentID == lParent || cmbArray[i].ID == '')		{
			if (navigator.appName == "Netscape") 			{
				cmbObj.options[i - lOffset] = new Option(cmbArray[i].Value, cmbArray[i].ID,false);
			} 			else 
			{					var newElem 	= document.createElement("OPTION");					newElem.value = cmbArray[i].ID;
					newElem.text 	= cmbArray[i].Value;
						if (navigator.platform != "MacPPC") 
							{newElem.style.backgroundColor = "#ffffff";}					cmbObj.options.add(newElem);			}
		}
		else
			lOffset = lOffset + 1;
			
	}	//Set the selected item	if(selItem!='')		cmbObj.selectedIndex = selItem;	//Refresh for older browsers	
	if (navigator.appName == "Netscape" && document.layers!=null) 
		history.go(0);
	return;
}
//Empty a specific combo
function EmptySelect(cmbObj)
{
	var lengthCmb = cmbObj.options.length;
	if (navigator.appName != "Netscape") 	{
		for (var count = 0; count < lengthCmb; count++) 		{
			cmbObj.options.remove(0); 		}	
 	}  	else 
 	{ 		cmbObj.options.length = 0; 	}
}function SetHidden(strValue, lNestLevel){	document.forms[this.FormName].elements[this.ComboName].value = strValue;
	document.forms[this.FormName].elements[this.ComboName + '_NestLevel'].value = lNestLevel;}function SetMaximumNestLevel(){	//Figure out the maximum attainable nest level	var lMaximumLevel=0;	for(var i=1; i <= this.Levels; ++i)	{		//Does it have any items at all?		if (document.forms[this.FormName].elements[this.ComboName + i].options.length > 0)		{			//If it doesn't have a single empty element then count it in			if (!(document.forms[this.FormName].elements[this.ComboName + i].options.length == 1 && 					document.forms[this.FormName].elements[this.ComboName + i].options[0].value=='') )						lMaximumLevel = i;		}	}	document.forms[this.FormName].elements[this.ComboName + '_MaximumNestLevel'].value = lMaximumLevel;}function GetSelectedIndex(nNestLevel, lParent){	var lSelectedIndex = -1; 	var lArrayIndex = eval(this.ComboName + '_SelectedItems[' + (nNestLevel - 1) + ']');	var cmbArray = eval(this.ComboName + (nNestLevel));	for (var i = 0; i <= lArrayIndex; i++) 	{		//Do we have the right parent?
		if (cmbArray[i].ParentID == lParent || cmbArray[i].ID == '')			++lSelectedIndex;
	}	return lSelectedIndex;}