var CaFilter = (function()
{
	this.CaFilterConstructor = function(name, layerId)
	{
		this.selectionArr = new Array();

		this.caAddOption = function(name, isActive)
		{
			var		opt=new Object();


			opt.name = name;
			opt.isActive = isActive;

			this.filterArr[this.filterArr.length] = opt;

			if (isActive == true && opt.name != 'Alle anzeigen')
				this.selectionArr[this.selectionArr.length] = opt.name;
		}
		this.caClearOptions = function()
		{
			this.filterArr.length = 1;

			this.selectionArr.length = 0;
		}

		this.name = name;
		this.isOpen = false;

		this.filterArr = new Array();
		this.caAddOption('Alle anzeigen', false);

		this.btnOff = document.getElementById('filter_'+this.name+'_off');
		this.btnOn = document.getElementById('filter_'+this.name+'_on');
		this.btnActive = document.getElementById('filter_'+this.name+'_active');

		this.layerObj = document.getElementById(layerId);
		this.layerOptions = document.getElementById(layerId+'_checkboxes');

		CaFilterConstructor.filters[CaFilterConstructor.filters.length] = this;

		this.caIsNothingSelected = function()
		{
			return (this.selectionArr.length == 0);
		}

		this.caShowOptions = function()
		{
			var			strOut='';
			var			i;


			if (!this.layerOptions)
				return;

			if (this.filterArr.length == 0)
				this.layerOptions.innerHTML = '';

			strOut += '<table border="0" cellpadding="0" cellspacing="0">';
			strOut += '<tr>';

			for (i=1;i<this.filterArr.length;++i)
			{
				strOut += '<td style="width:179px;font-family:Arial;font-size:13px;color:#000000;"><input type="checkbox" onClick="CaFilter.caOnSelectOpt('+i+', this.checked);" name="filterOpt_'+i+'"'+(this.filterArr[i].isActive ? ' checked' : '')+'> '+this.filterArr[i].name+'</td>';

				if ((i & 3) == 0)
				{
					if ((i-1) > 0)
					{
						strOut += '</tr>';
						strOut += '<tr><td height="10"></td></tr>';
					}

					strOut += '<tr>';
				}
			}

			strOut += '<td style="width:179px;font-family:Arial;font-size:13px;color:#000000;"><input type="checkbox" onclick="CaFilter.caOnSelectAll(this.checked);" name="filterOpt_0"'+(this.filterArr[0].isActive ? ' checked' : '')+'> '+this.filterArr[0].name+'</td>';

			strOut += '</tr>';
			strOut += '</table>';

			this.layerOptions.innerHTML = strOut;
		}

		this.caToggleOn = function()
		{
			var			i;


			if (!this.layerObj || !this.btnOff || !this.btnOn || !this.btnActive || !this.layerOptions)
				return;

			// Andere offene filter schliessen.
			for (i=0;i<CaFilter.filters.length;++i)
			{
				if (CaFilter.filters[i].name == this.name || CaFilter.filters[i].isOpen == false)
					continue;

				CaFilter.filters[i].btnOn.style.display = 'none';

				if (CaFilter.filters[i].caIsNothingSelected() == true)
					CaFilter.filters[i].btnOff.style.display = 'block';
				else
					CaFilter.filters[i].btnActive.style.display = 'block';

				CaFilter.filters[i].isOpen = false;

				// Layer schließen.
				caToggleFilterLayer(CaFilter.filters[i].layerObj);
				CaFilter.activeFilter = null;
			}

			if (this.isOpen == true)
			{
				// Layer schließen.
				caToggleFilterLayer(this.layerObj);
				CaFilter.activeFilter = null;

				this.btnOn.style.display = 'none';

				if (this.caIsNothingSelected() == true)
				{
					this.btnOff.style.display = 'block';
					this.btnActive.style.display = 'none';
				}
				else
					this.btnActive.style.display = 'block';

				this.isOpen = false;
			}
			else
			{
				// Layer öffnen.
				caToggleFilterLayer(this.layerObj);
				CaFilter.activeFilter = this;

				if (this.caIsNothingSelected() == true)
				{
					this.btnOn.style.display = 'block';

					if (this.caIsNothingSelected() == true)
						this.btnOff.style.display = 'none';
					else
						this.btnActive.style.display = 'none';
				}

				this.isOpen = true;

				// Optionen anzeigen.
				this.caShowOptions();
			}
		}

		this.caDeactivate = function()
		{
			var		i;


			for (i=0;i<this.filterArr.length;++i)
			{
				this.filterArr[i].isActive = false;
			}

			this.selectionArr.length = 0;
		}

		this.caApply = function()
		{
			var		i;


			this.selectionArr.length = 0;

			for (i=0;i<this.filterArr.length;++i)
			{
				// Wert der Checkbox speichern.
				this.filterArr[i].isActive = document.getElementsByName('filterOpt_'+i)[0].checked;

				if (this.filterArr[i].isActive == true)
				{
					if (i > 0)
					{
						// In das Array aufnehmen.
						this.selectionArr[this.selectionArr.length] = this.filterArr[i].name;
					}
				}
			}
		}

		this.caOnSelectAll = function(activateAll)
		{
			var			filterOpt;
			var			i;


			for (i=1;i<this.filterArr.length;++i)
			{
				filterOpt = document.getElementsByName('filterOpt_'+i)[0];
				if (!filterOpt)
					continue;

				filterOpt.checked = activateAll;
			}
		}

		this.caOnSelectOpt = function(optNum, enabled)
		{
			if (enabled == false)
			{
				// Disable "select all".
				document.getElementsByName('filterOpt_0')[0].checked = false;
			}
			else if (enabled == true)
			{
				var				i;


				for (i=1;i<this.filterArr.length;++i)
				{
					if (optNum == i)
						continue;

					if (document.getElementsByName('filterOpt_'+i)[0].checked == false)
						return;
				}

				document.getElementsByName('filterOpt_0')[0].checked = true;
			}
		}
	}

	CaFilterConstructor.caApplyActiveFilter = function()
	{
		if (!CaFilter.activeFilter)
			return;

		CaFilter.activeFilter.caApply();
		// e-dynamics
		edFilter(CaFilter.activeFilter);
		// Layer schliessen.
		CaFilter.activeFilter.caToggleOn();
	}
	CaFilterConstructor.caDeactivateActiveFilter = function()
	{
		if (!CaFilter.activeFilter)
			return;

		CaFilter.activeFilter.caDeactivate();
		// Layer schliessen.
		CaFilter.activeFilter.caToggleOn();
	}
	CaFilterConstructor.caCloseFilter = function()
	{
		if (!CaFilter.activeFilter)
			return;

		// Layer schliessen.
		CaFilter.activeFilter.caToggleOn();
	}
	CaFilterConstructor.caOnSelectAll = function(activateAll)
	{
		if (!CaFilter.activeFilter)
			return;

		CaFilter.activeFilter.caOnSelectAll(activateAll);
	}
	CaFilterConstructor.caOnSelectOpt = function(optNum, enabled)
	{
		if (!CaFilter.activeFilter)
			return;

		CaFilter.activeFilter.caOnSelectOpt(optNum, enabled);
	}

	CaFilterConstructor.filters = new Array();
	CaFilterConstructor.activeFilter = null;

	return CaFilterConstructor;
})();



var		caFilterSize=null;
var		caFilterColor=null;
var		caFilterBrand=null;
var		caFilterShape=null;
var		caFilterStyle=null;

var		caCBNumPages=null;

function caToggleFilterLayer(layerObj)
{
	if (layerObj.style.display == 'none')
		layerObj.style.display = 'block';
	else
		layerObj.style.display = 'none';
}

function caUpdateFilter(filter, optionsArr)
{
	var			i;
	var			j;
	var			newFilterArr=new Array();
	var			newOpt;


	// Erste Option kopieren.
	newFilterArr[newFilterArr.length] = filter.filterArr[0];

	for (i=0;i<optionsArr.length;++i)
	{
		if (optionsArr[i] == '0')
			continue;

		newOpt = new Object();
		newOpt.name = optionsArr[i];
		newOpt.isActive = false;
		newFilterArr[newFilterArr.length] = newOpt;

		for (j=1;j<filter.filterArr.length;++j)
		{
			if (filter.filterArr[j].name == newOpt.name)
			{
				// Status von alten Optionen beibehalten.
				newOpt.isActive = filter.filterArr[j].isActive;
				// Erste Option setzen.
				if (newOpt.isActive == true)
					newFilterArr[0].isActive = false;
				break;
			}
		}
	}

	filter.filterArr = newFilterArr;

	// Hide/show filter.
	if (filter.filterArr.length > 1)
		document.getElementById('filter_'+filter.name).style.display = 'block';
	else
		document.getElementById('filter_'+filter.name).style.display = 'none';
}

function caRestoreFilter(filter, optionsArr)
{
	var			keyVal;
	var			i;


	if (typeof optionsArr == 'undefined')
		return;

	optionsArr = optionsArr.indexOf(';') > 0 ? optionsArr.split(';') : new Array(optionsArr);

	for (i=0;i<optionsArr.length;++i)
	{
		keyVal = optionsArr[i].split('=');

		if (keyVal[0] == 'Alle anzeigen')
			continue;

		// Add options from last page.
		filter.caAddOption(keyVal[0], keyVal[1] != '0');
	}

	if (optionsArr.length > 0)
	{
		filter.btnOn.style.display = 'none';
		filter.btnOff.style.display = 'none';
		filter.btnActive.style.display = 'block';
	}
}

function caApplyFilter()
{
	var		activeFilter=CaFilter.activeFilter;
	var		i;
	var		filterEntries='';
	var		filterParam='';


	if (!activeFilter)
		return;

	CaFilter.caApplyActiveFilter();

	// Save current settings.
	for (i=0;i<activeFilter.filterArr.length;++i)
	{
		if (i != 0)
			filterEntries += ';';

		filterEntries += activeFilter.filterArr[i].name + '=' + (activeFilter.filterArr[i].isActive ? '1' : '0');
	}
	sessvars['filter_'+activeFilter.name] = filterEntries;

	// Save all active filters. (...&flt=01120)
	for (i=0;i<CaFilter.filters.length;++i)
	{
		if (CaFilter.filters[i].selectionArr.length > 0)
			filterParam += (CaFilter.filters[i] == activeFilter) ? '2' : '1';
		else
			filterParam += '0';
	}
	caSetFilters(filterParam);

	// Set current page to first page.
	caSetOverPage(0);

	// Load the page again with new parameters.
	caClickNavi(caGetNaviLevel1(), caGetNaviLevel2(), caGetNaviLevel3(), caGetNaviLevel4(), '', '', caGetOverPage(), '', caGetFilters());
}

function caDeaktivateFilter()
{
	var		activeFilter=CaFilter.activeFilter;


	CaFilter.caDeactivateActiveFilter();

	// Save current settings.
	for (i=0;i<CaFilter.filters.length;++i)
		sessvars['filter_'+CaFilter.filters[i].name] = '';
	caSetFilters();

	// Set current page to first page.
	caSetOverPage(0);

	// Load the page again with new parameters.
	caClickNavi(caGetNaviLevel1(), caGetNaviLevel2(), caGetNaviLevel3(), caGetNaviLevel4(), '', '', caGetOverPage(), '', caGetFilters());
}
