 function dD(o)
	{
			if ( !o.getAttribute("vs") )
			  o = getChildWithAttribute(o.parentNode,"vs");
  	var s="";			
	  var tpane = getTPane( o.id+"_Op" );
			if ( tpane ) { closeSelect(o.id+"_Op_Div"); tpane=null; return; }
	  if ( !tpane )
			{     							
			  var vals = o.getAttribute("vs").split("|");
					if ( vals.length == 2 || vals.length == 3 ) { alert("Nothing to select, dropdown is empty."); return; } 
					var selVal=o.nextSibling.value;					
					s += "<div><div class=op id="+o.id+"_Op_Div_Scroller valign='top' onclick='sD(this, event);cancelBubble(event);'><div>";
			  for ( i=0; i<vals.length; i++ )
					{						 
			    s += "<a href='#' name='"+vals[i]+"'  "+( vals[i] == selVal ? " class='active' " : "" )+">" + vals[++i] + "</a>";
//			    s += "<a href='#' name='"+vals[i]+"'  "+( vals[i] == selVal ? " class='active' " : "" )+">" + vals[++i] + " ("+vals[i-1]+") </a>";							
					}
					s += "</div></div></div>";					
     var tpane = new TPane( o.id+"_Op" );	
					tpane.sizeToObject=o.parentNode;					
					tpane.zIndex=1;
					tpane.bgImage=false;
					tpane.bgColor='#FFFFFF';
					tpane.movable=false;
					tpane.padding=2;
					tpane.outerBorder='1px solid #7F9DB9';
					tpane.closeHandler=closeSelect;
					
					var gs = getObjectsScroller(o.parentNode);
					var rmd = (  (document.body.offsetHeight) - (getElementPosY(o.parentNode) - gs.scrollTop) - o.parentNode.offsetHeight );
					if ( rmd < 200 )
					{
       tpane.yAlign = 'bottom';
					}
			} else
			{ 			
			  moveNode( tpane.dat, document.body );
					moveNode( tpane.tpane, document.body );						
			}
			var ba=0;
			var p=getParentWithAttributeValue( document.all[o.id],"className","tpaneInner");
			if ( p.nodeName != 'BODY' )
			{
 				tpane.parentDiv=getTPane(p.id).dat;
					getTPane(p.id).childrenIds += ","+tpane.id;
			}
			
			tpane.repos=true;					
			tpane.showTPane( s, o.parentNode, ba, o.parentNode.offsetHeight+ba, document.body );			
			
			var act = getChildWithAttributeValue( document.all[o.id+"_Op_Div_Scroller"],'className','active' );
			if ( act )
			  scrollIntoVView( document.all[o.id+"_Op_Div_Scroller"], act );
					
			g_curFocus=o;
	}
	
	function closeSelect(id)
	{
				if ( !document.all[id] ) return;
				  rn(document.all[id]);
						rn(document.all[id+"_TPane"]);
						g_tpanes[id]=null;																
	}
	function sD(o, e, src)
	{		
	   var s = e != null ? srcE(e) : src;
  	 s=getParentWithTag(s,'A');	
				if ( s.nodeName.toLowerCase()=='body' || s.innerHTML.length < 1 ) return false;
	   var opts = o.getElementsByTagName("a");
				for ( i=0; i<opts.length; i++ ) opts[i].className='';						
				s.className='active';				
				var id = o.id.replace(/_Ignore_Op_Div_Scroller/g, "")
				document.all[id+"_Ignore"].value=stripText( s.innerHTML );
				if ( s.innerHTML.indexOf('style="') > -1 )
				  document.all[id+"_Ignore"].style.backgroundColor=s.firstChild.style.backgroundColor;
				var delayId=id;				
				id = o.id.replace(/_Scroller/g, "")
				closeTPane(id,e);				
				//this fixes wierd never completing download process in IE.....doesn't like anything within the form being updated whilst its submitting...even if its not form elements.
				setTimeout("delaySelectUpdate('"+delayId+"','"+s.name+"')",1);
				if ( !document.all[delayId].getAttribute("noFocus") )
  				setTimeout("focusElement( '"+delayId+"_Ignore' )",1);
				return cancelBubble(e);
	}
	function delaySelectUpdate(id, val)
	{
		 document.all[id].value=val;			
	}
	function stripText( sHtml )
	{
		  if ( sHtml.indexOf("(") > -1 ) sHtml=sHtml.substring(0,sHtml.indexOf("(")-1);
    if ( !sHtml || sHtml.length < 1 ) return "";
    if ( sHtml.indexOf(">") < 0 || sHtml.indexOf("<") < 0 ) return sHtml;
    var len = sHtml.lastIndexOf("<");
    if ( len < (sHtml.indexOf(">")+1) ) len=sHtml.length;				
    return sHtml.substring( sHtml.indexOf(">")+1, len );		  
	}
	
	var g_curDDFocus;
	var g_prevIdx=-1;
	function kD(e)
	{		
	  if ( e.keyCode == 16 || e.shiftKey || e.ctrlKey || e.altKey ) return true;
   var s = srcE(e);			
	  var tpane = getTPane( s.id+"_Op" );
			if ( e.keyCode == 9 ) { if ( tpane ) closeTPane(s.id+"_Op_Div"); return true;}
	  if ( !tpane || tpane.dat.style.visibility=='hidden' )
			  dD(s);			
   var opts = document.all[s.id+"_Op_Div_Scroller"].getElementsByTagName("a");	
			
			switch ( e.keyCode )
			{
			  case 38 : //up
					  for ( i=0; i<opts.length; i++ ) 
							  if ( opts[i].style.backgroundColor=='#c1d2ee' ) 
							    try { cssRemoveProperty( opts[i], "background-color" ); opts[i].previousSibling.style.backgroundColor='#c1d2ee'; scrollIntoVView( document.all[s.id+"_Op_Div_Scroller"], opts[i].nextSibling, true ); return; } catch(e){}
							opts[0].style.backgroundColor='#c1d2ee';
					  break;
					case 40 : //down
					  for ( i=0; i<opts.length; i++ ) 
							  if ( opts[i].style.backgroundColor=='#c1d2ee' ) 
									  try { cssRemoveProperty( opts[i], "background-color" ); opts[i].nextSibling.style.backgroundColor='#c1d2ee'; scrollIntoVView( document.all[s.id+"_Op_Div_Scroller"], opts[i].nextSibling, true ); return; } catch(e){} 
							opts[0].style.backgroundColor='#c1d2ee';
					  break;
					case 13 :
					case 32 ://set
					  for ( i=0; i<opts.length; i++ )
							  if ( opts[i].style.backgroundColor=='#c1d2ee' )
									{
									  cssRemoveProperty( opts[i], "background-color" );
					      sD(document.all[s.id+"_Op_Div_Scroller"],null,opts[i] );
									}							
						 return cancelBubble(e);//required to stop single field forms from autosubmitting when enter key is pressed to select dropdown element.
					case 27 : //esacpe key close
  					closeTPane(s.id+"_Op_Div"); 
							s.focus();
							return true;
					default : //jump 2
					  var fnd=false;
					  for ( i=0; i<opts.length; i++ )
							{							
							  if ( stripText(opts[i].innerHTML).toUpperCase().charCodeAt(0) == e.keyCode && !fnd && opts[i].style.backgroundColor !='#c1d2ee' && i>(g_prevIdx) )
									{ fnd=true;
									  g_prevIdx=i;
							    opts[i].style.backgroundColor='#c1d2ee';
											scrollIntoVView( document.all[s.id+"_Op_Div_Scroller"], opts[i], true );
									} else
									  cssRemoveProperty( opts[i], "background-color" );
							}
							if ( !fnd ) g_prevIdx=-1;
					  break;
			}										
			cancelBubble(event);
			return false;			
 }
	
	var g_fromSetUltimateSelected=false;
	function setUltimateSelected( id, textVal )
	{
//		alert(id + "  " + val);
		   var o = document.all[id+"_Ignore"];
					o.setAttribute("fromSet",true);
			  var vals = o.getAttribute("vs").split("|");
//					var selVal=o.nextSibling.value;					
			  for ( i=1; i<vals.length; i=i+2 )
					{						 
         if ( vals[i].toLowerCase() == textVal )
									{
										  o.value=vals[i];
												o.nextSibling.value=vals[i-1];
										  return;
									}
//			    s += "<a href='#' name='"+vals[i]+"'  "+( vals[i] == selVal ? " class='active' " : "" )+">" + vals[++i] + " ("+vals[i-1]+") </a>";							
					}				
	}
	
	
	var g_bookm=false;
	function recordRange()
	{
		try
		{
		  			var sel = editor._getSelection();
			    var range = editor._createRange(sel);
							g_bookm = range.getBookmark();
		}catch(e){}
	}
	
	function generateSelect( name, vals, selectedVal, width, sHiddenExtra )
	{
		 var va = vals.split('|');
		 var output="";
   output += "<div class='dd' onmousedown='recordRange()' onclick='dD(this.firstChild);' style='width:"+width+"' title='' >";
   output += "<input name='"+name+"_Ignore' id='"+name+"_Ignore' onkeydown='return kD(event);' vs=\""+vals+"\" type='text' help='0'  class='field' value='Select'  Select />";
   output += "<input id='"+name+"' name='"+name+"' type='hidden' value='"+selectedVal+"'  "+sHiddenExtra+" />";
   output += "<img src='/Relatis/images/pages/dds.gif' border='0' align='absmiddle'  /></div>";
   output += "<select class='select' id='"+name+"_Ignore_OptLength' nohide='nohide' style='position:absolute;left:-2000px;top:-2000px;'>";
			
			var longest="";
			for ( i=1; i< va.length; i=i+2 )
			{
				if ( va[i].length > longest.length ) longest = va[i];
			}
   output += "<option>"+longest+"</option>";
   output += "</select>";
   output += "<script type='text/javascript' language='JavaScript'>sizeSelects( '"+name+"' );</script>";
			
			return output;
	}