	var timeId = new Array();
	var newWidgets = new Array();
	var onChangeFuncs = new Array();
	function desplegar(id) {
		esconder_todos();
		elem = document.getElementById(id);
		elem.style.visibility = 'visible';		
		elem.parentNode.style.zIndex = '2';
		clearTimeout(timeId[id]);
	}
	function mantener(id) {
		document.getElementById(id).parentNode.style.cursor="hand";
		clearTimeout(timeId[id]);		
	}
	function recoger(id) {
		timeId[id] = setTimeout('esconder("'+id+'")',2000);
	}
	function esconder(id) {
		elem = document.getElementById(id);
		elem.parentNode.style.zIndex = '0';
		elem.style.visibility = 'hidden';		
	}
	function esconder_todos() {
		for(var i=0;i<newWidgets.length;i++) {
			esconder(newWidgets[i].id);
		}
	}
	function rewrite_selects() {
		if(arguments.length > 0) {
			var selects = arguments[0];		
		} else {
		var selects = arguments[0];		
			//var selects = document.getElementsByTagName('select');			
		}
		for(var i=0;i<selects.length;i++) {
			var newnode = document.createElement('span');
			newnode.setAttribute('className','selectWidgetBox');
			newnode.setAttribute('class','selectWidgetBox');
			try {
				selects[i].parentNode.style.setAttribute('cssText', 'z-index: 0;', 0);			
			} catch(error) {
				selects[i].parentNode.setAttribute('style', 'z-index: 0;');							
			}
					
			if(selects[i].options.selectedIndex >= 0) {			
				newnode.onclick = new Function("desplegar('"+selects[i].name+"'); return false;");
				newnode.onmouseout = new Function("recoger('"+selects[i].name+"')");
				newnode.onmouseover = new Function("mantener('"+selects[i].name+"')");		
				var output = '<a href="#">'+selects[i].options[selects[i].options.selectedIndex].text+'</a><div id="'+selects[i].name+'" class="selectWidget" style="visibility: hidden;">';
				for(var j=0;j<selects[i].options.length;j++) {
					output += ' <a href="#" onclick="changeValue(event,\''+selects[i].name+'\',\''+escape(selects[i].options[j].text)+'\',\''+escape(selects[i].options[j].value)+'\'); return false;"';
					/*if(selects[i].options[j].selected) {
						output += ' class="selected"';
					}*/
					output += '>'+selects[i].options[j].text+'</a>';			
				}
				output += '<input type="hidden" name="'+selects[i].name+'" value="'+escape(selects[i].options[selects[i].options.selectedIndex].value)+'"></div>';
				newnode.innerHTML = output;
			} else {
				newnode.innerHTML = '<a href="#">Sin opciones</a><div id="'+selects[i].name+'" class="selectWidget" style="visibility: hidden;"><input type="hidden" name="'+selects[i].name+'" value=""></div>';
			}
			
			selects[i].parentNode.insertBefore(newnode,selects[i]);
			newWidgets.push(document.getElementById(selects[i].name));		
			onChangeFuncs[selects[i].name] = selects[i].onchange;
			selects[i].parentNode.removeChild(selects[i]);		
			
			if(arguments.length <= 0) {
				i--; // Como eliminamos elementos restamos a la i
			}
			//alert(document.body.innerHTML)
		}
	}
	
	function changeValue(e,id,name,value) {
		var elems = document.getElementById(id).getElementsByTagName('input');
		elems[0].value = unescape(value);
		document.getElementById(id).previousSibling.innerHTML = unescape(name);
		esconder(id);
		e.cancelBubble = true;
		if(onChangeFuncs[id]) {
			// Este objeto imitará al objeto select, asignándole un valor a obj.value para que funcione this.value
			var obj = new Object();
			obj.value = value;
			obj.toCall = onChangeFuncs[id];
			obj.toCall();
		}
	}
	
	//window.onload = rewrite_selects;
