var GoboConfigurator = {
	modelList:          null,
	modelFarbeLinkList: null,
	herstellerSelect:   null,
	modelSelect:        null,
	groesseSelect:      null,
	farbeSelect:        null,
	
	init: function() {
		GoboConfigurator.herstellerSelect = $('goboConfiguratorHersteller');
		GoboConfigurator.modelSelect      = $('goboConfiguratorModel');
		GoboConfigurator.groesseSelect    = $('goboConfiguratorGroesse');
		GoboConfigurator.farbeSelect      = $('goboConfiguratorFarbe');

		GoboConfigurator.setModelList($('goboConfiguratorModelList').value);
		GoboConfigurator.setModelFarbeLinkList($('goboConfiguratorModelFarbeLinkList').value);

		GoboConfigurator.herstellerSelect.observe('change', function(e) {
			var hersteller = parseInt(e.target.value);

			if(hersteller > 0) {
				GoboConfigurator.groesseSelect.addClassName('hidden');
				GoboConfigurator.farbeSelect.addClassName('hidden');
				GoboConfigurator.removeOptions(GoboConfigurator.modelSelect);
				GoboConfigurator.loadModelle(hersteller);
				GoboConfigurator.modelSelect.removeClassName('hidden');
			} else if (hersteller == 0) {
				GoboConfigurator.farbeSelect.addClassName('hidden');
				GoboConfigurator.modelSelect.addClassName('hidden');
				GoboConfigurator.groesseSelect.value = -1;
				GoboConfigurator.groesseSelect.removeClassName('hidden');
			}
		});

		GoboConfigurator.modelSelect.observe('change', function(e) {
			var groesse = e.target.value;

			if(groesse == 'S' || groesse == 'M' || groesse == 'L') {
				GoboConfigurator.groesseSelect.addClassName('hidden');
				GoboConfigurator.removeOptions(GoboConfigurator.farbeSelect);
				GoboConfigurator.loadFarben(groesse);
			} else {
				GoboConfigurator.farbeSelect.addClassName('hidden');
				GoboConfigurator.groesseSelect.value = -1;
				GoboConfigurator.groesseSelect.removeClassName('hidden');
			}
		});
		
		GoboConfigurator.groesseSelect.observe('change', function(e) {
			var groesse = e.target.value;

			if(groesse == 'S' || groesse == 'M' || groesse == 'L') {
				GoboConfigurator.removeOptions(GoboConfigurator.farbeSelect);
				GoboConfigurator.loadFarben(groesse);
			}
		});

		GoboConfigurator.farbeSelect.observe('change', function(e) {
			var link = e.target.value;
			
			var hs = document.getElementById ("goboConfiguratorHersteller");
			var hsv = null;
			if (hs.selectedIndex > 1)
			{
				hsv = hs.options[hs.selectedIndex].text;
			}
			
			var ms = document.getElementById ("goboConfiguratorModel");
			var msv = null;
			if (ms.selectedIndex > 1)
			{
				msv = ms.options[ms.selectedIndex].text;
			}
			//link = link += "?a=" + GoboConfigurator.herstellerSelect.options[GoboConfigurator.herstellerSelect.value+1].text;
			if (hsv != null || msv != null)
			{
				link = link + "?";
				if (hsv != null)
				{
					link = link + "mf=" + hsv;
				}
				if (msv != null)
				{
					if (hsv != null)
					{
						link = link + "&";
					}
					link = link + "m=" + msv;
				}
			}
			//link = link += "?mf=" + hsv + "&m=" + msv;

			document.stopObserving();
			window.location.href = link;
		});
	},
	
	setModelList: function(modelList) {
		GoboConfigurator.modelList = decodeURIComponent(modelList).evalJSON();
	},

	setModelFarbeLinkList: function(modelFarbeLinkList) {
		GoboConfigurator.modelFarbeLinkList = decodeURIComponent(modelFarbeLinkList).evalJSON();
	},

	removeOptions: function(element) {
		while(element.length > 0) {
			element.options[0] = null;
		}
	},

	getFarbenSelect: function() {
		var farbenSelect = $('goboConfiguratorFarben');
		
		if(!farbenSelect) {
			farbenSelect = document.createElement('select');
			farbenSelect.setAttribute('id', 'goboConfiguratorFarben');
			farbenSelect.addClassName('hidden');

			var goboConfigurator = $('goboConfigurator');
				
			farbenSelect.observe('change', function(e) {
				var link = e.target.value;

				document.stopObserving();
				window.location.href = link;
			});
	
			goboConfigurator.appendChild(farbenSelect);
		}
		
		return farbenSelect;
	},

	getGroessenSelect: function() {
		var groessenSelect = $('goboConfiguratorGroessen');
		
		if(!groessenSelect) {
			groessenSelect = document.createElement('select');
			groessenSelect.setAttribute('id', 'goboConfiguratorGroessen');
			groessenSelect.addClassName('hidden');

			//var goboConfiguratorSizeCaption = $('goboConfiguratorSizeCaption');
			//var sizeSelectCaption = goboConfiguratorSizeCaption.value;

			var newOption = new Option('Groesse wählen', '-1', false, false);	
			//var newOption = new Option(sizeSelectCaption, '-1', false, false);	
			//var newOption = new Option(sizeSelectCaption, '-1', false, false);	
			groessenSelect.options[groessenSelect.length] = newOption;

			var newOption = new Option('S', 'S', false, false);	
			groessenSelect.options[groessenSelect.length] = newOption;
			
			var newOption = new Option('M', 'M', false, false);	
			groessenSelect.options[groessenSelect.length] = newOption;
			
			var newOption = new Option('L', 'L', false, false);	
			groessenSelect.options[groessenSelect.length] = newOption;
				
			var goboConfigurator = $('goboConfigurator');
				
			groessenSelect.observe('change', function(e) {
				var groesse = e.target.value;

				if(groesse == 'S' || groesse == 'M' || groesse == 'L') {
					GoboConfigurator.loadFarben(groesse);
				}
			});
	
			goboConfigurator.appendChild(groessenSelect);
		}
		
		return groessenSelect;
	},

	loadModelle: function(hersteller) {
		//var newOption = new Option('Modell wählen', '-1', false, false);	
		var goboConfiguratorModelCaption = $('goboConfiguratorModelCaption');
		var goboConfiguratorNoModelCaption = $('goboConfiguratorNoModelCaption');
		var noModelCaption = goboConfiguratorNoModelCaption.value		
		var modelSelectCaption = goboConfiguratorModelCaption.value;
		
		var newOption = new Option(modelSelectCaption, '-1', false, false);	
		GoboConfigurator.modelSelect.options[GoboConfigurator.modelSelect.length] = newOption;

		//var newOption = new Option('Keines aus der Liste', '0', false, false);	
		var newOption = new Option(noModelCaption, '0', false, false);			
		GoboConfigurator.modelSelect.options[GoboConfigurator.modelSelect.length] = newOption;

		$H(GoboConfigurator.modelList).each(function(item, index) {
			if(GoboConfigurator.modelList[index]) {
				if(GoboConfigurator.modelList[index]['herstellerid'] == hersteller) {
					var newOption = new Option(GoboConfigurator.modelList[index]['model'], GoboConfigurator.modelList[index]['groesse'], false, false);
					GoboConfigurator.modelSelect.options[GoboConfigurator.modelSelect.length] = newOption;
				}
			}
		});
	},
	
	loadFarben: function(groesse) {
		var goboConfiguratorColorCaption = $('goboConfiguratorColorCaption');
		var colorSelectCaption = goboConfiguratorColorCaption.value;
			
		//var newOption = new Option('Farbe wählen', '-1', false, false);	
		var newOption = new Option(colorSelectCaption, '-1', false, false);	
		GoboConfigurator.farbeSelect.options[GoboConfigurator.farbeSelect.length] = newOption;

		GoboConfigurator.farbeSelect.removeClassName('hidden');

		$H(GoboConfigurator.modelFarbeLinkList).each(function(item, index) {
			if(GoboConfigurator.modelFarbeLinkList[index]) {
				if(GoboConfigurator.modelFarbeLinkList[index]['groesse'] == groesse) {
					var newOption = new Option(GoboConfigurator.modelFarbeLinkList[index]['farbe'], GoboConfigurator.modelFarbeLinkList[index]['link'], false, false);
					GoboConfigurator.farbeSelect.options[GoboConfigurator.farbeSelect.length] = newOption;
				}
			}
		});
	}
};

Event.observe(window, 'load', function() {
	if(document.getElementById('goboConfiguratorHersteller'))
	{
		GoboConfigurator.init();
	}
});
