	function multitem_getitems()
	{
		return this.subitems;
	}
	function multitem_additem(text,value,dopostback)
	{
		var v=new multitem(text,value,dopostback);
		this.subitems[this.subitems.length]=v;
		return v;
	}
	function multitem_count()
	{
		return this.subitems.length;
	}
	function multitem(text,value,dopostback)
	{
		this.text=text;
		this.value=value;
		this.dopostback=dopostback;
		this.subitems=new Array();
		this.count=multitem_count;
		this.getitems=multitem_getitems;
		this.additem=multitem_additem;
		this.a=multitem_additem;
	}

	function multlstbox_event_change()
	{
		var me=this.tag;
		var idx=me.getindex(this);
		var i;
		var selidx;
		var selitm;
		var subs=me.rootitem.subitems;
		for(i=0;i<=idx;i++)
		{
			selidx=me.lstboxarray[i].index();
			selitm=subs[selidx];
			subs=selitm.subitems;
		}
		if(selitm.dopostback || (me.getpostbackindex()>=0 && me.getpostbackindex()>=idx))
		{
			document.forms[0].submit();
			return;
		}
		me.refresh(idx);
	}
	function multlstbox_getindex(lstbox)
	{
		var i=0;
		for(i=0;i<this.lstboxarray.length;i++)
			if(this.lstboxarray[i].listctrl()==lstbox) return i;
	}
	function multlstbox_settag(data)
	{
		var i=0;
		for(i=0;i<this.lstboxarray.length;i++)
			this.lstboxarray[i].settag(data);
	}
	function multlstbox_setonchange(func)
	{
		var i=0;
		for(i=0;i<this.lstboxarray.length;i++)
			this.lstboxarray[i].setonchange(func);
	}
	function multlstbox_clearall()
	{
		var i=0;
		for(i=0;i<this.lstboxarray.length;i++)
			this.lstboxarray[i].clear();
	}
	function multlstbox_additem(text,value,dopostback)
	{
		return this.rootitem.additem(text,value,dopostback);
	}
	function multlstbox_selected(value)
	{
		return this.selval=value;
	}
	function multlstbox_setpostbackindex(value)
	{
		this.postbackindex=value;
	}
	function multlstbox_getpostbackindex()
	{
		return this.postbackindex;
	}
	function multlstbox_getselatindex(index)
	{	
		if(this.selval=="") return 0;
		var i=0;
		for(i=0;i<this.lstboxarray[index].count();i++)
		{
			if(this.lstboxarray[index].getvalue(i)==this.selval.split(":")[index])
				return i;
		}
		return 0;
	}	
	function multlstbox_refresh(from)
	{
		var isel=new Array();
		var i=0;
		for(i=0;i<this.lstboxarray.length;i++)
		{
			isel[i]=this.lstboxarray[i].index();
			if(isel[i]==-1 || (from!=null && i>from)) isel[i]=0;
		}

		this.clearall();

		for(x=0;x<this.lstboxarray.length;x++)
		{
			var it;
			if(from==null && x>0)
			{
				this.lstboxarray[x-1].select(this.getselatindex(x-1));				
				isel[x-1]=this.getselatindex(x-1);
			}
			
			if(x==0) 
			{
				it=this.rootitem;
			}
			else
			{
				it=it.getitems()[isel[x-1]];
			}
			for(i=0;i<it.count();i++)
			{
				this.lstboxarray[x].add(it.getitems()[i].text,it.getitems()[i].value);
			}
			this.lstboxarray[x].select(isel[x]);
		}
		if(from==null && this.lstboxarray.length-1>=0)
		{
			this.lstboxarray[this.lstboxarray.length-1].select(this.getselatindex(this.lstboxarray.length-1));				
		}		

	}

	function multlstbox(lstboxnamearray,dataarray)
	{
		var i=0;
		this.postbackindex=-1;
		this.getpostbackindex=multlstbox_getpostbackindex;
		this.setpostbackindex=multlstbox_setpostbackindex;
		this.rootitem=new multitem("","");
		this.selected=multlstbox_selected;
		this.getselatindex=multlstbox_getselatindex;
		this.selected("");
		this.additem=multlstbox_additem;
		this.a=multlstbox_additem;
		this.dataarray=dataarray;
		this.event_change=multlstbox_event_change;
		this.settag=multlstbox_settag;
		this.setonchange=multlstbox_setonchange;
		this.refresh=multlstbox_refresh;
		this.clearall=multlstbox_clearall;
		this.getindex=multlstbox_getindex;

		this.lstboxarray=new Array();
		for(i=0;i<lstboxnamearray.length;i++)
		{
			this.lstboxarray[i]=new lstbox(lstboxnamearray[i]);
		}
		
		this.settag(this);
		this.setonchange(multlstbox_event_change);		
	}

