var NS4 = (document.layers)?true:false;
var IE4 = (document.all)?true:false;	

function _struct(child,childcaption,parent){
this.child = child;
this.childcaption = childcaption;
this.parent	= parent;
}

function _addobject(child,childcaption,parent){
var obj = new _struct();
obj.child = child;
obj.childcaption = childcaption;
obj.parent = parent;
return(obj);
}

function insertEntry(child,childcaption,parent){

	if(child.length > 0 ){		

		for(var i=0;i<this.length;i++)

			if(this.items[i].child == child)

				return;			

		this.items[this.length++] = _addobject(child,childcaption,parent);		

	}

}

function OptionCollection(){

this.length=0;

this.items = new Object();

this.Add=insertEntry

}



function clearSelect(oSelect){

var iCount=0;

if(!oSelect) return;

iCount = oSelect.options.length;

for(var i=0;i<iCount;i++){

	if(IE4)

		oSelect.options.remove(0);

	else if(NS4)

		oSelect.options[0]=null;
	else 
		oSelect.options[0] = null;	

}

}

function addOptions(oSelect,olist,parent,state){

	var elOption;

	var idxSelect=0;	



	//check arguments.

	if((!olist) || (!oSelect))return;		

	if(parent.length <=	0) 	return;

	//now looop through all the list items only entering relevant options.

	clearSelect(oSelect);	

	//add a blank list

	elBlankOption = new Option();

	elBlankOption.text = "[Select State]";

	if(NS4) oSelect.options[0] = elBlankOption

	else if(IE4) oSelect.options.add(elBlankOption,0)

	elBlankOption.value = "0";

	for(var i=0;i<olist.length;i++){		

		//only the child entries of the parent				

		if(olist.items[i].parent == parent){									

			elOption = new Option();
				
			//now IE and NS have a different way to handle object creation.

			if(NS4){						

				elOption.value = olist.items[i].child

				elOption.text = olist.items[i].childcaption

				oSelect.options[idxSelect] = elOption				
				if (elOption.value == state) {						
					oSelect.options[idxSelect].selected = true;
				}

			}else if(IE4){				

				elOption.value = olist.items[i].child

				elOption.text = olist.items[i].childcaption

				oSelect.options.add(elOption,idxSelect)					
				if (elOption.value == state) {						
					elOption.selected = true;
				}


			}						

			idxSelect++;

			delete(elOption);

		}			

	}	

}


function clearOptions(szSelect,szForm){

if(szSelect.length <= 0 || szForm.length <=0)

	alert("error:clearOption must pass arguments");	

if(IE4)

clearSelect(document.all.item(szSelect));

else if(NS4)
clearSelect(eval('document.' + szForm + '.' + szSelect));

else clearSelect(document.getElementById(szSelect));
				 

}



function listAllOptions(szSelect,szForm,olist){

	var elOption;

	var idxSelect=0;

	var oSelect = new Object();

			

	//check arguments.

	if(!olist)return;			

	

	if(IE4)

		 oSelect = document.all.item(szSelect);

	else if(NS4)

		oSelect = eval('document.' + szForm + '.' + szSelect);

	

	if(!oSelect)return;			

						

	//now looop through all the list items entering all

	clearSelect(oSelect);

	for(var i=0;i<olist.length;i++){							

		elOption = new Option();

		//now IE and NS have a different way to handle object creation.

		if(NS4){						

			elOption.value = olist.items[i].child

			elOption.text = olist.items[i].childcaption

			oSelect.options[idxSelect] = elOption				

		}else if(IE4){				

			elOption.value = olist.items[i].child

			elOption.text = olist.items[i].childcaption

			oSelect.options.add(elOption,idxSelect)					

		}						

		idxSelect++;

		delete(elOption);					

	}	

}

function UpdateSelect(szSelect,szForm,szParent,olist,state){

clearOptions(szSelect, szForm);

if(IE4)
addOptions(document.all.item(szSelect),olist,szParent,state);

else if(NS4)
addOptions(eval('document.' + szForm + '.' + szSelect),olist,szParent,state);



}