function getEventSrc (e)
{			
    if (window.event)
        e = window.event;
        
    return e.srcElement ? e.srcElement : e.target;
}
    
function extendeddropdown (id, uid, selectionColor, itemColor)
{            
    this.lastSelection = null;
    this.id = id;
    this.uid = uid;
    this.hasBeenOpened=false;
    this.selectionColor = selectionColor; 
    this.itemColor = itemColor;       
}

function initSelection (id)
{
	var o = document.getElementById ("selected_"+  id);
    if (o != null)
    {
		setSelectColorFromObject (o, id);
		setSelectionFromObject (id,o);
	}
}

var curValue ="";
var curText ="";
var curStyle ="";
var openedDropdown = null;

function getDropDown (id)
{
    var o = eval (id + '_dropdown');
    return o;
}

function setSelectColor (e, id)
{
    var o=getEventSrc (e);
    setSelectColorFromObject(o, id);
}

function setSelectColorFromObject (o, id)
{
	var dd = getDropDown (id);			
    o.style.color = "white";            
    o.style.backgroundColor = dd.selectionColor;
}
                
function sel(e,id)
{	                   
    var o=getEventSrc (e);                     
    setSelectColorFromObject(o, id);   
    setSelectionFromObject(id,o);              
}

function setSelectionFromObject (id,o)
{
	var dd = getDropDown (id);
	if (dd.lastSelection != null && dd.lastSelection  != o)
        setUnselectColorOnObject (dd.lastSelection, dd);
                    
    curValue = o.getAttribute ("value");  
    curStyle = o.className;    
    document.getElementsByName (dd.uid)[0].value = curValue;			
    curText = o.innerHTML;
    dd.lastSelection = o;      
}                

function setUnselectColorOnObject (o, dd)
{			
	 o.style.color = dd.itemColor;
    o.style.backgroundColor = "white";        
}

function decodeText (text)
{
	return text.replace ("&amp;","&").replace ("&lt;","<").replace("&gt;",">").replace("&nbsp;"," ");
}

function resetDD (objId)
{
	var sel = document.getElementById ("def_" +objId);
	if (sel == null)
		sel = document.getElementById ("selected_" +objId);
	
	setSelectionFromObject (objId, sel);
	dc (null, objId, true);
	unselect (null,objId);
}          

function dc (e, objId, changeColor)
{
    var select = document.getElementById ("dd_" + objId);  
    var selText = document.getElementById ("sel_" + objId);
    if (select.options)
        selText.value = select.options[select.selectedIndex].text;            
    else
		selText.value = decodeText (curText);
    
    var div = document.getElementById ("div_" + objId);
    var ifrm = document.getElementById ("ifr_" + objId);
    
    div.style.visibility = "hidden";
    div.style.display = "none";
    
    ifrm.style.visibility = "hidden";
    ifrm.style.display = "none";
    var dd = getDropDown (objId);
    selText.className = curStyle;
    if (changeColor == null)
    {		
		selText.style.backgroundColor = dd.selectionColor;
		selText.style.color = "white";    
	}
    
    selText.focus();
    openedDropdown = null;
}

function ts (e, objId)
{                              
	if (openedDropdown != null && openedDropdown != objId)
		ts (null, openedDropdown);
				
    var div = document.getElementById ("div_" + objId);
    var ifrm = document.getElementById ("ifr_" + objId);
    
    if (div.style.visibility != "visible")
    {
		openedDropdown = objId;
		var dd = getDropDown (objId);
		div.style.visibility = "visible"; 
        div.style.display="block";  
        var left = div.offsetLeft -1;
        var top = div.offsetTop;                
        ifrm.style.left = left;                
        ifrm.style.top = top;
        ifrm.style.visibility = "visible"; 
        ifrm.style.display="block";                                 
        if (!dd.hasBeenOpened)
		{
			var selected = document.getElementById ("selected_" + objId);
			if (selected != null)
				selected.focus();
			dd.hasBeenOpened = true;
		}
        
    }
    else
    {	
		openedDropdown = null;		
        div.style.visibility = "hidden";
        div.style.display = "none";                
        ifrm.style.visibility = "hidden";
        ifrm.style.display = "none";
    }
}

function unselect (e,objId)
{
	var selText = document.getElementById ("sel_" + objId);
	var dd = getDropDown (objId);
	selText.style.backgroundColor= "white";
	selText.style.color = dd.itemColor;
	
}

function tryClose (e)
{	
	var o = getEventSrc (e);
	
	if (openedDropdown != null && o.id.indexOf (openedDropdown) < 0)
	{
		ts (null, openedDropdown);
	}
}
		
if (window.addEventListener)
	window.addEventListener ('click', tryClose,false);
else
	document.attachEvent ('onclick', tryClose);

