/**
*/

function SelectorCollection(inIndicatorElementIds)
{
	var self = this;
	
	var itsSelectors = new Properties();
	var itsWhereClause;
	var itsState = new Properties();
	var itsIndex;

	var itsFilterDisplays = new Array();  //because of loops, cant rely on subscriber  model and must handle manually.

	Publisher(self);

	//hack, this does not turn off element
	if (inIndicatorElementIds)
		for (var i = 0; i < inIndicatorElementIds.length; i++)
		{
			itsFilterDisplays[i] = new FilterDisplay(inIndicatorElementIds[i]);
			self.addSubscriber(itsFilterDisplays[i],itsFilterDisplays[i].show);
		}


	self.reset = function()
	{
		var theKeys = itsSelectors.getKeys();
		for (var i = 0; i < theKeys.length; i++)
		{
			var theSelector = itsSelectors.getProperty(theKeys[i]);
			theSelector.resetWithoutNotify();
		}
		itsState.clear();
		self.notifySubscribers(itsState,false);
	};

	self.setState = function(inSorter,inState,inIsNotNotifyingSubscribers)
	{
		var i;
		if (inState && inState instanceof Properties)
		{
			var theKeys = itsSelectors.getKeys();
			for (i = 0; i < theKeys.length; i++)
			{
				var theSelector = itsSelectors.getProperty(theKeys[i]);
				var theProperty = inState.getProperty(theKeys[i]);
				if (theProperty)
					theSelector.setState(theProperty);
			}
			itsState = inState;

			if (!inIsNotNotifyingSubscribers) //to avoide infinite recursions in loops
				self.notifySubscribers(itsState,self.getFilterOn());

			//hack to bybass subscription model
			for (i = 0; i < itsFilterDisplays.length; i++)
				itsFilterDisplays[i].show(itsState,self.getFilterOn())
		}
	};

	self.addSelector = function(inName,inSelector)
	{
		itsSelectors.setProperty(inName,inSelector);
		inSelector.setName(inName);
		inSelector.addSubscriber(self,self.updateState);
	};

    self.getSelector = function(inName)
    {
        return itsSelectors.getProperty(inName);
    };

	self.getSelectorKeys = function() {
		return itsSelectors.getKeys();
	};
    
    
    self.updateState = function(inName)
	{
		var theSelector = itsSelectors.getProperty(inName);		
		self.notifySubscribers(theSelector, self.getFilterOn());
		
	};


	self.getFilterOn = function()
	{

		var theKeys = itsSelectors.getKeys();
		for (var i = 0; i < theKeys.length; i++)
		{
			var theSelector = itsSelectors.getProperty(theKeys[i]);
			if (theSelector.getFilterOn())
				return true;
		}
		return false;
	};
}