function selectReplacement(obj)
{
  // append a class to the select
  obj.className += ' replaced';
  // create list for styling
  var ul = document.createElement('ul');
  ul.className = 'selectReplacement';
  var opts = obj.options;
  for (var i=0; i<opts.length; i++) {
    var selectedOpt;
    if (opts[i].selected) {
      selectedOpt = i;
      break;
    } else {
      selectedOpt = 0;
    }
  }
  for (var i=0; i<opts.length; i++) {
    var li = document.createElement('li');
    var txt = document.createTextNode(opts[i].text);
    li.appendChild(txt);
    li.selIndex = opts[i].index;
    li.selectID = obj.id;
    li.style.width = obj.style.width;
    li.onclick = function() {
      selectMe(this);
    }
    if (i == selectedOpt) {
      li.className = 'selectedItem';
      li.onclick = function()
      {
        this.parentNode.className += ' selectOpen';
        this.onclick = function()
        {
          selectMe(this);
        }
      }
    }
    if (window.attachEvent) {
      li.onmouseover = function() {
        this.className += ' hover';
      }
      li.onmouseout = function() {
        this.className = 
          this.className.replace(new RegExp(" hover\\b"), '');
      }
    }
    ul.appendChild(li);
    li=null; txt=null;
  }
  // add the input and the ul
  obj.parentNode.appendChild(ul);
  
  ul=null; opts=null; selectedOpt=null;
}

function sendEvent( obj, evtName)
{
	if ( obj == null) return;
	
	if( document.createEvent)
	{
		var evt = document.createEvent('HTMLEvents');
		if( evt.initEvent)
		{
			evt.initEvent( evtName, true, true);
		}
		if( obj.dispatchEvent)
		{
			obj.dispatchEvent(evt);
		}
		evt=null;
	}
	else if( getInternetExplorerVersion() <= 0 && obj.fireEvent)
	{
		obj.fireEvent(evtName);
	}
  else if (document.createEventObject) 
  {
    var evt = document.createEventObject(); 
    obj.fireEvent( 'on' + evtName, evt);
  }
}

function selectMe(obj)
{
	if ( obj == null) return;
	
  var lis = obj.parentNode.getElementsByTagName('li');
  for (var i=0; i<lis.length; i++)
  {
		if (lis[i] != obj)
		{ // not the selected list item
			lis[i].className='';
			lis[i].onclick = function() { selectMe(this); }
		}
		else
		{
			setValue(obj.selectID, obj.selIndex);
      obj.className='selectedItem';
      obj.parentNode.className = obj.parentNode.className.replace(new RegExp(" selectOpen\\b"), '');
      obj.onclick = function()
      {
        obj.parentNode.className += ' selectOpen';
        this.onclick = function() { selectMe(this); }
      }
    }
  }
  lis=null;
  
  // Ansonsten werden onChange-Events nicht mehr behandelt
	sendEvent( document.getElementById(obj.selectID), 'change');
}

function selectIt(obj)
{
	if ( obj == null) return;
	
  var lis = obj.parentNode.getElementsByTagName('li');
  for (var i=0; i<lis.length; i++)
  {
		if (lis[i] != obj)
		{ // not the selected list item
			lis[i].className='';
			lis[i].onclick = function() { selectMe(this); }
		}
		else
		{
      obj.className='selectedItem';
      obj.parentNode.className = obj.parentNode.className.replace(new RegExp(" selectOpen\\b"), '');
      obj.onclick = function()
      {
        obj.parentNode.className += ' selectOpen';
        this.onclick = function() { selectMe(this); }
      }
    }
  }
  lis=null;
  
  // Ansonsten werden onChange-Events nicht mehr behandelt
	sendEvent( document.getElementById(obj.selectID), 'change');
}

function setValue( objID, selIndex)
{
  var obj = document.getElementById(objID);
  obj.selectedIndex = selIndex;
  
  var ul = obj.parentNode.getElementsByTagName('ul');
  if ( ul.length == 1)
  {
		var lis = ul[0].getElementsByTagName('li');
		for ( var i=0; i < lis.length; i++)
		{
		  if ( lis[i].selIndex == selIndex)
		  {
		    selectIt( lis[i]);
		    break;
			}
		}
		lis=null;
	}
	obj=null; ul=null;
}

function getValue( objID)
{
  var obj = document.getElementById(objID);
  return obj.selectedIndex;
}

function makeCombosPretty()
{
  var s = document.getElementsByTagName('select');
  for (var i=0; i<s.length; i++)
  {
    selectReplacement(s[i]);
  }
}

