var domainContainer = function(){};
domainContainer.prototype = {
	names : new Array(),
	domains: new Array(),

	addDomain : function (domain)
	{
		this.names.push(domain.name);
		this.domains.push(domain);
	}
};

var domain = function(name){
	this.name = name;
	this.concerns = new Array();
	this.projects = new Array();
	this.urls = new Array();
};
domain.prototype = {
	name : null,
	concernIndex: null,

	addConcern : function(concern)
	{
		this.concerns.push(concern);
		this.concernIndex = this.concerns.length-1;
		this.projects[this.concernIndex] = new Array();
		this.urls[this.concernIndex] = new Array();
	},

	setConcern : function(concern)
	{
		var found = false;
		for(var i = 0; i < this.concerns.length; i++ )
		{
			if(this.concerns[i] == concern)
			{
				found = true;
				this.concernIndex = i;
				break;
			}
		}
		if(!found)
		{
			this.addConcern(concern);
		}
	},

	addProjectUrl : function(project, url)
	{
		this.projects[this.concernIndex].push(project);
		this.urls[this.concernIndex].push(url);
	},

	addConcernUrl : function(concern, url)
	{
		this.setConcern(concern);
		this.addProjectUrl('', url);
	}

};

function formController(domainContainer)
{
	this.domainContainer = domainContainer;
};
formController.prototype = {
	debug : false,
	isIE: /MSIE/.test(navigator.userAgent) && !window.opera,
	isIE6: this.isIE && /MSIE 6/.test(navigator.userAgent),
	isIE7: this.isIE && /MSIE 7/.test(navigator.userAgent),
	isIE8: this.isIE && /MSIE 8/.test(navigator.userAgent),
	isOpera: !this.isIE && window.opera,
	domainContainer : null,
	elems : {},
	ids : {},
	cache : new Array(),
	nullValueElems : {},
	currentDomain: null,
	currentConcern: null,

	init : function (conf)
	{
		conf.debug?this.debug = conf.debug:null;
		this.ids.domainInputId = conf.domainInputId;
		this.ids.concernInputId = conf.concernInputId;
		this.ids.projectInputId = conf.projectInputId;
		this.ids.redirectInputId = conf.redirectInputId;
		this.ids.buttonId = conf.buttonId;
		this.getInputElements();
		this.setEventHandlers();
		this.nullValueElems.domains = conf.domainNullValueElems;
		this.nullValueElems.concerns = conf.concernNullValueElems;
		this.nullValueElems.projects = conf.projectNullValueElems;
	},

	getInputElements : function()
	{
		/*
		this.elems.domainInput = document.getElementById(this.ids.domainInputId);
		this.elems.concernInput = document.getElementById(this.ids.concernInputId);
		this.elems.projectInput = document.getElementById(this.ids.projectInputId);
		*/
		this.elems.redirectInput = document.getElementById(this.ids.redirectInputId);
		this.elems.button = document.getElementById(this.ids.buttonId);
	},

	createHandler: function()
	{
		var obj = this;
		return function(){return obj;};
	},

	setEventHandlers : function()
	{
		var handler = this.createHandler();
		if(this.isIE)
		{
			/*
			this.elems.domainInput.attachEvent('change', function(e){handler().changeDomain(e.currentTarget.value);});
			this.elems.concernInput.attachEvent('change', function(e){handler().changeConcern(e.currentTarget.value);});
			this.elems.projectInput.attachEvent('change', function(e){handler().changeProject(e.currentTarget.value);});
			*/
			this.elems.button.attachEvent('onclick', function(e){handler().redirect();});
		}
		else
		{
			/*
			this.elems.domainInput.addEventListener('change', function(e){handler().changeDomain(e.currentTarget.value);}, false);
			//this.elems.domainInput.onchange = function(){handler().changeDomain()};
			this.elems.concernInput.addEventListener('change', function(e){handler().changeConcern(e.currentTarget.value);}, false);
			this.elems.projectInput.addEventListener('change', function(e){handler().changeProject(e.currentTarget.value);}, false);
			*/
			this.elems.button.addEventListener('click', function(e){handler().redirect();}, false);
		}
	},

	createOption : function(value, text)
	{
		return "<option value='" + value + "'>" + text + "</option>";
	},

	createSelect : function(id, options)
	{
		return "<select id='"+ id +"' name='" + id + "' size='1'>" + options + "</select>";
	},

	showDomains : function()
	{
		document.getElementById(this.ids.domainInputId).parentNode.innerHTML = this.createSelect(this.ids.domainInputId, this.renderDomains());
		var handler = this.createHandler();
		document.getElementById(this.ids.domainInputId).onchange = function(){handler().changeDomain();};
	},

	renderDomains : function()
	{
		var options = '';
		for(var i in this.nullValueElems.domains)
		{
			options += this.createOption('', this.nullValueElems.domains[i]);
		}
		for(var i=0; i<this.domainContainer.names.length; i++)
		{
			options += this.createOption(i, this.domainContainer.names[i]);
		}
		return options;
	},

	changeDomain: function()
	{
		var value = document.getElementById(this.ids.domainInputId).value;

		if(this.debug)
		{
			console.info('changeDomain: ' + value);
		}

		this.currentDomain = value;
		//this.hide(this.ids.projectInputId);
		this.clear(this.ids.projectInputId);
		this.hide(this.ids.buttonId);

		this.showConcerns(value);
	},

	showConcerns : function(value)
	{
		if(this.debug)
		{
			console.info('showConcerns: ' + value);
		}

		var concernArray = null;
		var options = '';

		if(!value)
		{
			value = 'default';
			concernArray = this.nullValueElems.concerns;
		}
		else
		{
			concernArray = this.domainContainer.domains[value].concerns;
		}

		if(!this.cache.concerns)
		{
			this.cache.concerns = {};
		}
		if(this.cache.concerns[value])
		{
			options = this.cache.concerns[value];
			if(this.debug)
			{
				console.info('from cache(d: ' + value + ')');
			}
		}
		else
		{
			options = this.renderConcerns(value, concernArray);
			this.cache.concerns[value] = options;
			if(this.debug)
			{
				console.info('to cache(d: ' + value + ')');
			}
		}
		document.getElementById(this.ids.concernInputId).parentNode.innerHTML = this.createSelect(this.ids.concernInputId, options);
		var handler = this.createHandler();
		document.getElementById(this.ids.concernInputId).onchange = function(){handler().changeConcern();};
	},


	renderConcerns : function(value, concernArray)
	{
		var options = '';
		if(value != 'default')
		{
			options = this.cache.concerns['default'];
		}
		var index = null;
		for(var i=0; i<concernArray.length; i++)
		{
			index = (value == 'default'?'':i);

			options += this.createOption(index, concernArray[i]);
		}
		return options;
	},

	changeConcern: function()
	{
		var value = document.getElementById(this.ids.concernInputId).value;
		if(this.debug)
		{
			console.info('changeConcern: ' + value);
		}

		//this.hide(this.ids.projectInputId);
		this.hide(this.ids.buttonId);

		if(value)
		{
			this.currentConcern = value;

			if(this.domainContainer.domains[this.currentDomain].projects[value][0])
			{
				this.showProjects(value);
			}
			else
			{
				this.setRedirect(null);
				this.show(this.ids.buttonId);
			}
		}
	},

	showProjects : function(value)
	{
		if(this.debug)
		{
			console.info('showProjects: ' + value);
		}

		var options = '';

		if(!this.cache.projects)
		{
			this.cache.projects = {};
		}
		if(!this.cache.projects[this.currentDomain])
		{
			this.cache.projects[this.currentDomain] = {};
		}
		if(this.cache.projects[this.currentDomain][value])
		{
			options = this.cache.projects[this.currentDomain][value];
			if(this.debug)
			{
				console.info('from cache(d: ' + this.currentDomain + ',c: ' + value + ')');
			}
		}
		else
		{
			options = this.renderProjects(value);
			this.cache.projects[this.currentDomain][value] = options;
			if(this.debug)
			{
				console.info('to cache(d: ' + this.currentDomain + ',c: ' + value + ')');
			}
		}

		document.getElementById(this.ids.projectInputId).parentNode.innerHTML = this.createSelect(this.ids.projectInputId, options);
		var handler = this.createHandler();
		document.getElementById(this.ids.projectInputId).onchange = function(){handler().changeProject();};
		this.show(this.ids.projectInputId);
	},

	renderProjects : function(value)
	{
		var options = '';
		for(var i=0; i<this.nullValueElems.projects.length; i++)
		{
			options += this.createOption('', this.nullValueElems.projects[i]);
		}
		if(this.currentDomain != null)
		{
			for(var i=0; i<this.domainContainer.domains[this.currentDomain].projects[value].length; i++)
			{
				options += this.createOption(i, this.domainContainer.domains[this.currentDomain].projects[value][i]);
			}
		}

		return options;
	},

	changeProject: function()
	{
		var value = document.getElementById(this.ids.projectInputId).value;
		if(this.debug)
		{
			console.info('changeProject: ' + value);
		}

		if(!value)
		{
			this.hide(this.ids.buttonId);
		}
		else
		{
			this.setRedirect(value);
			this.show(this.ids.buttonId);
		}
	},

	clear : function(elem)
	{
		elem.innerHTML = '';
	},

	setRedirect : function(value)
	{
		if(!value)
		{
			if(this.debug)
			{
				console.info('url: ' + this.domainContainer.domains[this.currentDomain].urls[this.currentConcern][0]);
			}
			this.elems.redirectInput.value = this.domainContainer.domains[this.currentDomain].urls[this.currentConcern][0];
		}
		else
		{
			if(this.debug)
			{
				console.info('url: ' + this.domainContainer.domains[this.currentDomain].urls[this.currentConcern][value]);
			}
			this.elems.redirectInput.value = this.domainContainer.domains[this.currentDomain].urls[this.currentConcern][value];
		}
	},

	redirect : function()
	{
		var uri = document.location.protocol + '//' + document.location.host + this.elems.redirectInput.value;
		if(this.debug)
		{
			console.info('uri: ' + uri);
		}
		else
		{
			document.location.href = uri;

			window.event.returnValue=false;
		}
	},

	show : function(id)
	{
		document.getElementById(id).parentNode.style.display = 'block';
	},

	hide : function(id)
	{
		document.getElementById(id).parentNode.style.display = 'none';
	}
};



myDomainContainer = new domainContainer();

/*Betrieb */
var myDomain = new domain('Betrieb');
myDomain.addConcern('Energieversorgung');
myDomain.addProjectUrl('Holzheizungen (zur Eigenversorgung)','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/holzheizungen/');
myDomain.addProjectUrl('Nahwärmeversorgung','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/nahwrmeversorgung/');
myDomain.addProjectUrl('Fernwärmeanschluss','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/fernwrme/');
myDomain.addProjectUrl('Wärmepumpe','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/wrmepumpe/');
myDomain.addProjectUrl('Thermische Solaranlagen','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/solaranlage/');
myDomain.addProjectUrl('Solare Großanlagen','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/solare_groanlagen/');
myDomain.addProjectUrl('Stromerzeugung in Insellage','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/stromerzeugung_in_insellage/');
myDomain.addProjectUrl('Herstellung biogener Brenn-/Treibstoffe','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/herstellung_biogener_brenn_und_treibstoffe/');
myDomain.addProjectUrl('Nutzung biogene Roh-/Reststoffe','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/energetische_nutzung_von_biogenen_roh_und_reststoffen/');
myDomain.addProjectUrl('Erdgas-Kraft-Wärme-Kopplung','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/erdgaskraftwrmekopplung_fr_betriebe/');
myDomain.addProjectUrl('Landwirtschaftliche Biomasse','/kpc/de/home/umweltfrderung/fr_betriebe/energieversorgung/landwirtschaftliche_biomasse/');


myDomain.addConcern('Energiesparen');
myDomain.addProjectUrl('Thermische Sanierung','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/thermische_gebudesanierung_sanierungsoffensive_2011/');
myDomain.addProjectUrl('Neubau/Niedrigenergie','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/neubau_in_niedrigenergiebauweise_fr_betriebe/');
myDomain.addProjectUrl('Mustersanierung','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/mustersanierung_2011/');
myDomain.addProjectUrl('Energiesparen in Betrieben','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/energiesparen_in_betrieben/');
myDomain.addProjectUrl('LED-Systeme','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/ledsysteme_in_betrieben/');
myDomain.addProjectUrl('Energieeffiziente Antriebe','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/energieeffiziente_antriebe_in_betrieben/');
myDomain.addProjectUrl('Klimatisierung und Kühlung','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/klimatisierung_und_khlung_fr_betriebe/');
myDomain.addProjectUrl('KMU-Energie-Effizienz-Scheck','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/energieeffizienzscheck/');
myDomain.addProjectUrl('LW-Energie-Effizienz-Scheck','/kpc/de/home/umweltfrderung/fr_betriebe/energiesparen/lwscheck/');



myDomain.addConcern('Wasser');
myDomain.addProjectUrl('Abwasserbeseitigung','/kpc/de/home/umweltfrderung/fr_betriebe/wasser/abwasserbeseitigung_fr_kommunalbetriebe/');
myDomain.addProjectUrl('Wasserversorgung','/kpc/de/home/umweltfrderung/fr_betriebe/wasser/wasserversorgung_fr_kommunalbetriebe/');
myDomain.addProjectUrl('Betriebliche Abwassermaßnahmen','/kpc/de/home/umweltfrderung/fr_betriebe/wasser/betriebliche_abwassermanahmen/');
myDomain.addProjectUrl('Gewässerökologie','/kpc/de/home/umweltfrderung/fr_betriebe/wasser/gewsserkologie_fr_wettbewerbsteilnehmer/');
myDomain.addProjectUrl('Forschung','/kpc/de/home/umweltfrderung/fr_betriebe/wasser/forschung/');



myDomain.addConcern('Altlasten');
myDomain.addProjectUrl('Altlastensanierung','/kpc/de/home/umweltfrderung/fr_betriebe/altlasten/altlastensanierung/');
myDomain.addProjectUrl('Forschung','/kpc/de/home/umweltfrderung/fr_betriebe/altlasten/forschung_altlastensanierung/');

myDomain.addConcern('Verkehr&Mobilität');
myDomain.addProjectUrl('Verkehrsmaßnahmen','/kpc/de/home/umweltfrderung/fr_betriebe/verkehr_und_mobilitt/verkehrsmassnahmen_in_betrieben/');
myDomain.addProjectUrl('Mobilitätsmanagement (Freizeit, Tourismus)','/kpc/de/home/umweltfrderung/fr_betriebe/verkehr_und_mobilitt/mobilittsmanagement_freizeit_und_tourismus/');
myDomain.addProjectUrl('Mobilitätsmanagement (Radverkehr)','/kpc/de/home/umweltfrderung/fr_betriebe/verkehr_und_mobilitt/mobilittsmanagement_im_radverkehr/');
myDomain.addProjectUrl('Mobilitätsmanagement (Betriebe)','/kpc/de/home/umweltfrderung/fr_betriebe/verkehr_und_mobilitt/mobilittsmanagement_in_betrieben/');
myDomain.addProjectUrl('Sonderaktion Elektrofahrräder','/kpc/de/home/umweltfrderung/fr_betriebe/verkehr_und_mobilitt/sonderaktion_elektrofahrrder/');
myDomain.addProjectUrl('Fahrzeuge mit alternativem Antrieb','/kpc/de/home/umweltfrderung/fr_betriebe/verkehr_und_mobilitt/fahrzeuge_mit_alternativem_antrieb/');
myDomain.addProjectUrl('Sonderaktion E-Ladestation','/kpc/de/home/umweltfrderung/fr_betriebe/verkehr_und_mobilitt/sonderaktion_eladestation_klimaaktiv_mobil/');



myDomain.addConcern('weitere Förderungen');
myDomain.addProjectUrl('Rohstoffmanagement','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/rohstoffmanagement_in_betrieben/');
myDomain.addProjectUrl('Luftreinhaltung','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/luftreinhaltung/');
myDomain.addProjectUrl('Gefährliche Abfälle','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/gefhrliche_abflle_in_betrieben/');
myDomain.addProjectUrl('Sonst. Umweltschutzmaßnahmen','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/sonstige_umweltschutzmanahmen_in_betrieben/');
myDomain.addProjectUrl('Nachhaltig am Ball','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/nachhaltig_am_ball/');
myDomain.addProjectUrl('Landesförderungen','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/landesfrderungen/');
myDomain.addProjectUrl('Regionalprogramme','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/regionalprogramme/');
myDomain.addProjectUrl('Förderinitiative Abfallvermeidung','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/frderaktion_abfallvermeidung/');
myDomain.addProjectUrl('Klima-/Energie- Modellregionen','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/ausschreibung_fr_klima_und_energie_modellregionen/');
myDomain.addProjectUrl('Klimafolgenforschung ACRP','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/klimafolgenforschung_acrp/');
myDomain.addProjectUrl('Umweltförderung im Ausland','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/umweltfrderung_im_ausland/');

myDomainContainer.addDomain(myDomain);
/* Kommune */

myDomain = new domain('Kommune');

myDomain.addConcern('Wasser');
myDomain.addProjectUrl('Abwasserbeseitigung','/kpc/de/home/umweltfrderung/fr_kommunen/wasser/abwasserbeseitigung/');
myDomain.addProjectUrl('Wasserversorgung','/kpc/de/home/umweltfrderung/fr_kommunen/wasser/wasserversorgung/');
myDomain.addProjectUrl('Gewässerökologie','/kpc/de/home/umweltfrderung/fr_kommunen/wasser/gewsserkologie/');
myDomain.addProjectUrl('Forschung','/kpc/de/home/umweltfrderung/fr_kommunen/wasser/forschung/');

myDomain.addConcern('Altlasten');
myDomain.addProjectUrl('Altlastensanierung','/kpc/de/home/umweltfrderung/fr_kommunen/altlasten/altlastensanierung/');
myDomain.addProjectUrl('Forschung','/kpc/de/home/umweltfrderung/fr_kommunen/altlasten/forschung/');

myDomain.addConcern('Verkehr&Mobilität');
myDomain.addProjectUrl('Mobilitätsmanagement (Freizeit, Tourismus)','/kpc/de/home/umweltfrderung/fr_kommunen/verkehr_und_mobilitt/mobilittsmanagement_freizeit_und_tourismus/');
myDomain.addProjectUrl('Mobilitätsmanagement (Städte, Gemeinden, Regionen)','/kpc/de/home/umweltfrderung/fr_kommunen/verkehr_und_mobilitt/mobilitt_stadt_gemeinde_region/');
myDomain.addProjectUrl('Mobilitätsmanagement (Radverkehr)','/kpc/de/home/umweltfrderung/fr_kommunen/verkehr_und_mobilitt/mobilittsmanagement_im_radverkehr/');
myDomain.addProjectUrl('Sonderaktion Elektrofahrräder','/kpc/de/home/umweltfrderung/fr_kommunen/verkehr_und_mobilitt/sonderaktion_elektrofahrrder/');
myDomain.addProjectUrl('Fahrzeuge mit alternativem Antrieb','/kpc/de/home/umweltfrderung/fr_kommunen/verkehr_und_mobilitt/fahrzeuge_mit_alternativem_antrieb/');
myDomain.addProjectUrl('Sonderaktion E-Ladestation','/kpc/de/home/umweltfrderung/fr_kommunen/verkehr_und_mobilitt/sonderaktion_eladestationen_klimaaktiv_mobil/');


myDomain.addConcern('weitere Förderungen');
myDomain.addProjectUrl('Klima- und Energie- Modellregionen','/kpc/de/home/umweltfrderung/fr_betriebe/weitere_frderungen/ausschreibung_fr_klima_und_energie_modellregionen/');

myDomainContainer.addDomain(myDomain);



/* Privatperson */

myDomain = new domain('Privatperson');

myDomain.addConcern('Energieversorgung');
myDomain.addProjectUrl('Photovoltaik 2011','/kpc/de/home/umweltfrderung/fr_private/energieversorgung/photovoltaik_2011/');
myDomain.addProjectUrl('Photovoltaik 2010','/kpc/de/home/umweltfrderung/fr_private/energieversorgung/photovoltaik_2010/');
myDomain.addProjectUrl('Photovoltaik in Fertigteilhäusern','/kpc/de/home/umweltfrderung/fr_private/energieversorgung/gipv_2011/');
myDomain.addProjectUrl('Holzheizungen 2011','/kpc/de/home/umweltfrderung/fr_private/energieversorgung/frderaktion_holzheizungen_2011/');

myDomain.addConcern('Energiesparen');
myDomain.addProjectUrl('Thermische Sanierung','/kpc/de/home/umweltfrderung/fr_private/energiesparen/sanierungsscheck_2011/');


myDomain.addConcern('Wasser');
myDomain.addProjectUrl('Abwasserbeseitigung','/kpc/de/home/umweltfrderung/fr_private/wasser/abwasserbeseitigung/');
myDomain.addProjectUrl('Wasserversorgung','/kpc/de/home/umweltfrderung/fr_private/wasser/wasserversorgung/');
myDomain.addProjectUrl('Einzel-Abwasserbeseitigung (bis 50 EW)','/kpc/de/home/umweltfrderung/fr_private/wasser/einzelabwasserbeseitigung_fr_weniger_als_50_ew/');
myDomain.addProjectUrl('Einzel-Abwasserbeseitigung [für mehr als 50 EW]','/kpc/de/home/umweltfrderung/fr_private/wasser/einzelabwasserbeseitigung_fr_mehr_als_50_ew/');
myDomain.addProjectUrl('Einzel-Wasserversorgung','/kpc/de/home/umweltfrderung/fr_private/wasser/einzelwasserversorgung/');

myDomain.addConcern('Altlasten');
myDomain.addProjectUrl('Altlastensanierung','/kpc/de/home/umweltfrderung/fr_private/altlasten/altlastensanierung/');
myDomain.addProjectUrl('Forschung','/kpc/de/home/umweltfrderung/fr_private/altlasten/forschung/');

myDomain.addConcern('Weitere Förderungen');
myDomain.addProjectUrl('Weitere Förderungen','/kpc/de/home/umweltfrderung/fr_private/weitere_frderungen/');


myDomainContainer.addDomain(myDomain);

myFormController = new formController(myDomainContainer);

