Event.onDOMReady(function(){
	init_guiSelect(GuiSelect_ContactTransformer);
});

/********************************************************************/
/* START: functional initalisation                                  */

// replaces search button and generic buttons by a-elements to provide css styled buttons

function initLayout_buttons() {

	$$("button.generic").each(function(elt) {

		if (!elt.form.id) {
			elt.form.id = Helper.getUniqueId();
		}
		
		if(elt.type == 'reset')
		{
			var caption      = $(elt).innerHTML;
			var linkAsButton = new Element('a', {'class': 'generic-button'}).update("<span><span>"+caption+"</span></span>");
			var formid = elt.form.id;
			linkAsButton.observe('click', function(e){resetForm(formid);Event.stop(e);});
			$(elt).parentNode.replaceChild(linkAsButton, $(elt));	
		} else if(elt.type == 'submit') {

			var handle="";
	        var reg=/^return/;
	        $A(elt.form.attributes).each(function(item) {
	            if(item.nodeName=='onsubmit') {
	                handle="if("+item.nodeValue.replace(reg,"").replace(/;$/,"")+")";
	            }
	        });
	        var caption=$(elt).innerHTML;
	        var jsCode="javascript:"+handle+" document.forms['"+elt.form.id+"'].submit();";
	        var cssClassName="generic-button";
	        linkAsButton = new Element('a',{className:cssClassName,href:jsCode}).update('<span><span>'+caption+'</span></span>');
			
			$(elt).parentNode.replaceChild($(linkAsButton), $(elt));			
		}
	});
	
}

/**
 * name of replaced select field
*/
var select_names = {'region':'', 'gender':'', 'companytype':'', 'productservice': '', 'countryofplant': '', 'newregion':''};

/**
 * reads the 'captions' of all selects and saves them for a custom reset function
 */
function init_remberSelectDefaultText(){
	for (var select in select_names){
		input_element =  document.getElementsByName(select)[0];
		if(input_element){
			select_names[select] = getSelectLabelElement(input_element).innerHTML;
		}
	}
	return;
}

/**
 * element containing the text of the selected option field  
 */
function getSelectLabelElement(item){
	return $(item).previous('p').down('a'); 
}

/**
 * reset der form  
 */
function resetForm(formid) {
	Form.reset(formid);
	$$('div.disclaimer').each(function(item){item.removeClassName('errorfield')});
	$$('div.ErrMessage').each(function(item){item.update();});
	var f = $(formid);
	f.getElements().each(function(item, index){
		for (var select in select_names){
			if(item.name == select){
				var it = getSelectLabelElement(item);
				it.update(select_names[select]);
				it.style.color='#333333';
			} else {
				item.style.color = '#333333';
			}
		}
	});
	return false;
}


function init_guiSelect(transformer) {
 
	if(Info.browser.isIEpre6) {
		return;
	}
	
	var sliderCounter = 0;

	transformer = transformer || GuiSelect_DefaultTransformer;
	
	$A($("contact-zone").getElementsByTagName("select")).each(
		function(select) {
			select = $(select);
			if (select.hasClassName("gui-select")) {

				// build html

				var options         = $A(select.getElementsByTagName("option"));
				var index           = select.selectedIndex;
				var titleClassNames = (index) ? "title selected-title" : "title";
				var text            = transformer.replaceTitle(options[index].text);
				var id              = select.id;

				var _html = '<div id="' + id + '" class="gui-select"><p class="' + titleClassNames + '"><a href="#">' + text + '</a></p>'
					+ '<input type="hidden" name="' + select.name + '" value="' + select.value + '" />'
					+ '<div class="content"><ul>';
				options.each(
					function(option) {
						if (option.selected) return; // the selected element should not be in the list
						var text = transformer.replaceOption(option.innerHTML);
						_html += '<li><span class="value">' + option.value + '</span><a href="#">' + text + '</a></li>';
					}
				);
				_html += "</ul></div></div>";

				// replace html select element with new gui select element

				var wrapper = select.parentNode;
				Element.remove(select);
				wrapper.innerHTML += _html;
				
//				Element.replace(select, _html);
				
				// optimised for IE6 and siemens search
				
				var div        = $(id);
				var form       = $(div.parentNode.parentNode);
				var input      = $(div.childNodes[1]);
				var contentDiv = $(div.childNodes[2]);
				var linkList   = $(contentDiv.firstChild);
				var links      = $A(contentDiv.getElementsByTagName("a"));
				var titleLink  = $(div.firstChild.firstChild);
				
				// init layer logic

				var layer   = new GuiSelectLayer(contentDiv);
				
				titleLink.observe("focus", function() {
					layer.open();
				});
				titleLink.observe("click", function(e) {
					if (layer._state == "open") {
						layer.close();
					} else if (layer._state == "closed") {
						layer.open();
					}
					Event.stop(e);
				});
				
				// add events to links to submit form with selected value

				links.each(function(a) {
					a = $(a);
					
					a.observe('focus', function(e) {
						if (layer != Layer.current) {
							layer.open();
							if (layer.scrollbar) {
								layer.scrollbar.scrollIntoView(a.up("li"));
							}
						}
					}.bind(a));

					a.observe('click', function(e) {
						//input.value = this.previous("span.value").innerHTML;
						//form.submit();
						Event.stop(e);
						if (this.up().hasClassName('selected')) {
							layer.close();
						} else {
							input.value = this.previous('span.value').innerHTML;
							titleLink.innerHTML = this.innerHTML;
							
							if(typeof this.up().up().down('li.selected') != 'undefined')
								this.up().up().down('li.selected').removeClassName('selected');
							
							this.up().addClassName('selected');
							layer.close();
							if ( this.up('div.gui-select').hasClassName('onChangeSubmit') ) this.up('form').submit();
						}
					}.bindAsEventListener(a));

					// show nicer link on status bar:
					a.href = "?" + input.name + "=" + encodeURIComponent(a.previousSibling.innerHTML);
				});
				
				// add scrollbar, if necessary

				if (linkList.getHeight() <= contentDiv.getHeight()) { // no slider needed

					contentDiv.style.height = "auto"; // for IE6

				} else {

					sliderCounter++;

					/// add slider gui elements

					var sliderWrapper = document.createElement("div");
					sliderWrapper.className = "slider-wrapper";
					sliderWrapper.innerHTML = '<div class="arrow-up"></div><div class="slider" id="slider' + sliderCounter + '"><div class="handle" id="handle' + sliderCounter + '"></div></div><div class="arrow-down"></div>';
					contentDiv.appendChild(sliderWrapper);

					// init scrollbar and add scrollbar object to layer

					layer.scrollbar = new GuiScrollbar("handle" + sliderCounter, "slider" + sliderCounter, layer);

					// add click events

					var elts = $(sliderWrapper).childElements();

					elts[0].observe("click", function() {
						layer.scrollbar.moveUp();
					});
					elts[2].observe("click", function() {
						layer.scrollbar.moveDown();
					});

					// add other evens
					
					var handler = (Info.browser.isIE) ? "activate" : "focus";

					links.each(function(a) {
						$(a).observe(handler, function(e) {
							layer.scrollbar.scrollIntoView($(this).up("li"));
						}.bind(a));
					});

				}
				
			}
		}
	);
	init_remberSelectDefaultText();	

	// init mousewheel

	var wheel = new MouseWheelObserver;
	wheel.register(
		function(value) {
			if (Layer.current && Layer.current.onmousescroll && Layer.current.scrollbar) {
				return Layer.current.onmousescroll(value);
			} else {
				return true;
			}
		}
	);

}
/********************************************************************/
/* START: Transformer for selectbox replacing */

GuiSelect_ContactTransformer = {

	getMatches: function(text) {
		return /^(.+)\s(\([^)]+\))$/.exec(text);
	},

	replaceOption: function(text) {
		var matches = this.getMatches(text);
		return (matches) ? matches[1] + ' <span class="no">' + matches[2] + '</span>' : text;
	},

	replaceTitle: function(text) {
		var matches = this.getMatches(text);
		return (matches) ? matches[1] : text;
	}
}

/* END: Transformer for selectbox replacing */
/********************************************************************/