// s_tree component starts here 

var stopev = false;


function selectout( o )
{
}


function selectover( o )
{
	if( stopev ) return;
	stopev = true;
	setTimeout( 'stopev = false', 1 );
	clearselection();
	var cnl = o.sel.lastsel.className;
	cnl = cnl.replace( /_over/, '' );
	o.sel.lastsel.className = cnl;

	var cn = o.className + '_over';
	o.className = cn;

//	par = o.parentNode;
//	if( isdefined( par.tim ) ) clearTimeout( par.tim );


	o.sel.lastsel = o;

}

function selectclick( o )
{

	if( o == null ) return;
	clearselection();

	if( o == null ) return;
	if( o.sel != $(o.sel.id) ) o.sel = $(o.sel.id);
	if( !isdefined( o.sel) || !isdefined( o.sel.options ) || !o.sel.options.length ) return;
	var changed = o.sel.selectedIndex != o.idx;
	o.sel.selectedIndex = o.idx;
	o.sel.lastsel = o;
	if( changed && typeof( o.sel.onchange ) == 'function' )
		o.sel.onchange();
	var res = o.sel.options[o.idx].text;
	o.selobj.innerHTML = res;
	selectclose();
}

function clearselection()
{
	if( ie )
		document.selection.empty();
	else
		window.getSelection().removeAllRanges();
}

function selectclose()
{
	if( currentselectbox != null )
	{
		currentselectbox.myopts.style.display = 'none';
		currentselectbox = null;
		document.body.onmouseup = null;
	}
}

function selectopen( event, mysel )
{
	if( mysel.myopts.style.display == 'block' )
	{
		mysel.myopts.style.display = 'none';
		return;
	}
	selectclose();
	var ptop = event.clientY + document.body.scrollTop;
	var pleft = event.clientX + document.body.scrollLeft;
	ptop -= ie ? event.offsetY: event.layerY;
	pleft -= ie ? event.offsetX : event.layerX;
	mysel.myopts.style.display = 'block';
	ox = ie ? -3 : 0;
	oy = ie ? 0 : 2;
	ptop = ptop + mysel.clientHeight + oy;
	pleft = pleft + ox;
	mysel.myopts.style.top = ptop+"px";//ptop + mysel.clientHeight + oy;
	mysel.myopts.style.left = pleft+"px";//pleft + ox;
	//alert(mysel.myopts.style.top+":"+mysel.myopts.style.left);
	clearselection();
	currentselectbox = mysel;
	//setTimeout( 'document.body.onmouseup = selectclose', 1000 );
	return false;
}

var currentselectbox = null;

var tmpidnum = 0;

function selectbox( selectsource )
{

//	return;
	var sel = selectsource;
	if( isdefined( sel.alreadydone ) ) return;
	sel.alreadydone = true;
	if( sel.id == '' ) sel.id = 'tmpsel' + tmpidnum;
	tmpidnum++;
	var id = 'sbox' + sel.id;
	var oid = 'sboxopt' + sel.id;
	var hang = sel.parentNode;

	if( selectsource.id == 'addselect' ) return;

	//se hang for um p tem que colocar depois do p. Inserir divs dentro de Ps da problema no IE...
	if( hang.tagName == 'P' )
	{
		hang.removeChild( sel );
		insertAfter( sel, hang );
		hang = sel.parentNode;
	}
	
	var mysel = ce( 'DIV' );
	if( $(oid) != null ) document.body.removeChild( $(oid) );
	var myopts = ce( 'DIV' );
	var i;

	mysel.sel = sel;
	sel.mysel = mysel;
	mysel.id = id;
	myopts.id = oid;
	mysel.className = 'select';
	var sidx = sel.selectedIndex;

	if( sidx < 0 ) sidx = 0;
	if( sel.options.length ) mysel.innerHTML = sel.options[sidx].text + '';

	myopts.className = 'selectcontent';
	myopts.optflag = 1;
	mysel.onmouseover = function() 
	{
		if( isdefined( myopts.tim ) ) clearTimeout( myopts.tim );
	}
	mysel.onmouseout = function() 
	{
		if( isdefined( myopts.tim ) ) clearTimeout( myopts.tim );
		myopts.tim = setTimeout( function() { myopts.style.display = 'none' }, 1000 );
	}
	myopts.onmouseover = function() 
	{
		if( isdefined( myopts.tim ) ) clearTimeout( myopts.tim );
	}
	myopts.onmouseout = function() 
	{
		if( isdefined( myopts.tim ) ) clearTimeout( myopts.tim );
		myopts.tim = setTimeout( function() { myopts.style.display = 'none' }, 1000 );
	}
	var br = ce( 'BR' );
	br.clear = 'all';

	hang.insertBefore( br, sel );
	hang.insertBefore( mysel, br );
	document.body.appendChild( myopts );
	mysel.myopts = myopts;
	//mysel.onscroll = function() { myselsave( mysel.id + '_scroll', mysel.scrollTop ); };
	
	sel.style.display = 'none';
	mysel.opts = new Array;
	mysel.onmousedown = function(ev) { e = ie ? event : ev; selectopen( e, this ); };
	mysel.onmousemove = clearselection;
	var olist = '';

	if( sel.getAttribute( 'width' )*1 > 0 )
		sel.wd = sel.getAttribute( 'width' )*1;

	selopt( sel );
	
	if( sel.getAttribute( 'load' ) != null )
	{
		ajaxrequest( nocache( sel.getAttribute( 'load' )), 'resultselect', sel, 1 );
		mysel.innerHTML = '&nbsp;';
	}
	

}


function resultselect( xml, obj )
{
	
	if( obj.parentNode == null ) return;
	var olist = ntag( xml, 'option' );
	var ol = olist.length;
	for( var i = 0 ; i < ol && i < 100 ; i++ )
	{
		var eid = vtag( olist[i], 'value' );
		var ename = vtag( olist[i], 'txt' );
		var selected = vtag( olist[i], 'selected' ) * 1;
		var opt = ce( 'OPTION' );
		opt.value = eid;
		opt.text = ename;
		obj.options.add( opt );
		if( selected == 1 )
		{
			obj.selectedIndex = selected;
			opt.selected = true;
		}
//		debug( 'opt', opt.text );
	}
	if( i > 99 ) alert( 'over' );
//	obj.mysel.style.display = 'none';
//	obj.style.display = 'block';
	obj.mysel.myopts.innerHTML = '';
	obj.mysel.myopts.style.display = 'block';
	selopt( obj );
}

function selopt( sel )
{
	var mysel = sel.mysel;
	var myopts = mysel.myopts;
	var sidx = sel.selectedIndex;
	var id = mysel.id;

	{
		var olist = new Array();
		myopts.style.height = 'auto';
		for( var i = 0 ; i < sel.options.length && i < 500  ; i++ )
		{
			var txt = sel.options[i].text;
			opt = ce( 'DIV' );
			var ic = i == sidx ? 'selectoption_over' : 'selectoption';
			opt.onmouseover = function() { selectover(this); };
			opt.onmouseout = function() { selectout(this); };
			opt.onmouseup = function() { selectclick(this); };
			opt.className = id;
			opt.idx = i;
			opt.id = id + '_' + i;
			opt.innerHTML = txt;
			opt.sel = sel;
			opt.selobj = mysel;
			olist[i] = opt;
			myopts.appendChild( opt );
		}
		if( myopts.clientHeight > selmaxh ) myopts.style.height = selmaxh+"px";
		var owid = sel.wd ? sel.wd : myopts.clientWidth + 20;
		for( var i = 0 ; i < sel.options.length  && i < 500 ; i++ )
		{
			opt = olist[i];
			opt.style.width = owid+"px";
			var ic = i == sidx ? 'selectoption_over' : 'selectoption';
			opt.className = ic;
		}
	}
	myopts.style.width = (owid - (!ie ? 20 : 0))+"px";
	mysel.style.width = (myopts.clientWidth)+"px";
//	mysel.style.width = owid;
	mysel.style.paddingTop = ie? 2 : 2;
	mysel.style.height = (ie ? 20 : 16)+"px";
	myopts.scrollTop = sidx * 20;
	myopts.style.display = 'none';
	selectclick( $(id + '_' + sidx) );
}

var selmaxh = 200;
var selmaxw = 40;