﻿// JScript File
            var hierarchyArray = new Array();
            function RegisterHierarchy(pid,pevent,cid,cevent)
            {
	            var hObj = new Object();
	            hObj.pid = pid;
	            hObj.pevent = pevent;
	            hObj.cid = cid;
	            hObj.cevent = cevent;
	            hierarchyArray.push(hObj);
            }

            function TriggerHierarchy(evt)
            {
	            var l = hierarchyArray.length;
	            if (l>0)
	            {
		            var cbe = (window.event)?window.event:evt;
		            var telm=(cbe.currentTarget)? cbe.currentTarget : cbe.srcElement;
		            if ((cbe.type)&&(telm.id))
		            {
		                var i=0;
			            for (i=0;i<l;i++)
			            {
				            if ((hierarchyArray[i].pid==telm.id)&&(hierarchyArray[i].pevent==cbe.type))
				            {
					            var celm = document.getElementById(hierarchyArray[i].cid);
					            if (celm!=null)
					            {
						            if (celm[hierarchyArray[i].cevent])
						            {
        					            celm[hierarchyArray[i].cevent](cbe);
						            }
					            }
				            }
			            }
		            }
	            }
            }
            
            function FilterMap(dataMap,filters)
            {
                var newMap = new Array();
                if (!(filters.length>0))
                {
                    return dataMap;
                }
                if (dataMap.length>0)
                {
                    for (i=dataMap.length-1;i>=0;i--)
                    {
                        var item = dataMap[i];
                        var add = true;
                        for (j=0;j<filters.length;j++)
                        {
                            var filterKey = filters[j].key;
                            var filterValue = filters[j].value;
                            if (item[filterKey]!=filterValue)
                            {
                                add = false;
                            }
                        }
                        if (add)
                        {
                            newMap.push(item);
                        }
                    }
                }
                return newMap;
            }
            
            function AddToArrayUnique(arr,value)
            {
                var add = true;
                for (i=0;i<arr.length;i++)
                {
                    if (arr[i]==value )
                    {
                        add=false;
                    }
                }
                if (add)
                {
                    arr.push(value);
                }
                return arr;
            }
            
            function DataBind(evt)
            {
                var filtersContext = new Array();
                if (this.mapfilters.length>0)
                {
                    for (i=0;i<this.mapfilters.length;i++)
                    {
                        var control = document.getElementById(this.mapfilters[i].controlID);
                        if (control)
                        {
                            if (control.value!="")
                            {
                                var filter = new Object();
                                filter.key = this.mapfilters[i].mapKey;
                                filter.value = control.value;
                                filtersContext.push(filter)
                            }
                        }
                    }
                }
                var map = FilterMap(this.dataMap,filtersContext);
                var mapKey  = this.mapKey;
                var keys = new Array();
                for (i=0;i<map.length;i++)
                {
                    var mapItem = map[i];
                    var add = true;
                    for (j=0;j<keys.length;j++)
                    {
                        if (keys[j]==mapItem[mapKey] )
                        {
                            add=false;
                        }
                    }
                    if (add)
                    {
                        keys.push(mapItem[mapKey]);
                    }
                }
                var cValue = this.value;
                //alert(cValue+' '+ this.id);
                this.innerHTML = '';
		        var k=0;
		        var valueNow = false;
		        for (i=0;i<this.dataSource.length;i++)
		        {
		            var useItem = false;
		            for (j=0;j<keys.length;j++)
		            {
		                if (keys[j]==this.dataSource[i].value)
		                {
		                   useItem = true; 
		                }
		            }
		            if (this.dataSource[i].value=="")
		            {
		                useItem = true;
		            }
			        if (useItem)
			        {
				        var newOpt = new Option (this.dataSource[i].text, this.dataSource[i].value, 
					        false, this.dataSource[i].value==cValue );
				        this.options[k] = newOpt;
				        if (this.dataSource[i].value==cValue)
				        {
				            valueNow = true;
				        }
				        k++;
			        }
		        }
		        this.value = (valueNow)?cValue:"";
		        /*if (!(this.selectedIndex>=0))
		        {
		            this.value="";
		        }*/
		        /*if (k==2)
		        {
		            this.options[1] = null;
		        }*/
		        //this.style.display = (k<2)?"none":"";
            }
            
            function RegisterFilter(id,map,dataSource,mapKey,filters,bind)
            {
                var control = document.getElementById(id);
                if (control==null)
                {
                    return false;
                }
                control.DataBind = DataBind;
                control.dataMap = map;
                control.dataSource = dataSource;
                control.mapKey = mapKey;
                control.mapfilters = filters;
                
                for (i=0;i<filters.length;i++)
                {
                    RegisterHierarchy(filters[i].controlID,"change",id,"DataBind");
                }

                if (bind)
                {
                    control.DataBind(null);
                }
                return true;
            }