//ZSite Widget Library
//DOM combobox edit control JavaScript functions
//(c) Zagorodnikov Anton 2007-2008

var zsite_combobox_events = Array();

function zsite_combobox_enable(id)
{
    dojo.byId(id+"_input").removeAttribute('disabled');
    dojo.byId(id+"_field").className="zsite_combobox";
    dojo.byId(id+"_dropbutton").style.background="url('"+zsitewww+"res/images/controls/combobox/combo_drop_off.gif');";
    dojo.byId(id+"_input").value="";
}

function zsite_combobox_disable(id)
{
    dojo.byId(id+"_input").setAttribute('disabled', 'disabled');
    dojo.byId(id+"_field").className="zsite_combobox_disabled";
    dojo.byId(id+"_dropbutton").style.background="url('"+zsitewww+"res/images/controls/combobox/combo_drop_disabled.gif');";
    dojo.byId(id+"_input").value="";
}

function zsite_combobox_showoptionslist(node_id)
{
    zsite_combobox_rebuildoptionslist(node_id);

    if(zsite_combobox_countoptionnumber(node_id) > 0)
    {
    
	    dojo.byId(node_id+"_optlist").style.display="block";

	    dojo.byId(node_id+"_dropbutton").style.padding="1px 0 0 1px";
	    dojo.byId(node_id+"_dropbutton").style.background="url('"+zsitewww+"res/images/controls/combobox/combo_drop_on.gif');";
    
	//    alert(dojo.coords(dojo.byId(node_id)).y);
	//    dojo.byId("zsite_validateerror").style.top = dojo.coords(dojo.byId(node_id)).y-2-dojo.coords(dojo.byId("zsite_validateerror")).h + "px";
	//    dojo.byId("zsite_validateerror").style.left = dojo.coords(dojo.byId(node_id)).x + "px";

	    if(zsite_pref_uispecialfx)
	    {
		dojo.fadeIn({node:dojo.byId(node_id+"_optlist"), duration: 200}).play();
	    }

    }
}

function zsite_combobox_hideoptionslist(node_id)
{
    dojo.byId(node_id+"_dropbutton").style.padding="0 0 0 0";
    dojo.byId(node_id+"_dropbutton").style.background="url('"+zsitewww+"res/images/controls/combobox/combo_drop_off.gif');";

    if(zsite_pref_uispecialfx)
    {
	dojo.fadeOut({node:dojo.byId(node_id+"_optlist"), duration: 200}).play();
        setTimeout( function() { dojo.byId(node_id+"_optlist").style.display="none"; }, 200);
    }
    else
    {
        dojo.byId(node_id+"_optlist").style.display="none";
    }

	if(zsite_combobox_events[node_id] != null)
		zsite_combobox_events[node_id]();
}

function zsite_combobox_toggleoptionslist(node_id)
{
    if(dojo.byId(node_id+"_optlist").style.display=="none")
    {
	zsite_combobox_showoptionslist(node_id);
    }
    else
    {
	zsite_combobox_hideoptionslist(node_id);
    }
}

function zsite_combobox_selectnextoption(node_id)
{
	var activeoption = parseInt(dojo.byId(node_id).getAttribute('activeoption'));
	var autocomplete = ((dojo.byId(node_id).getAttribute('autocomplete')==null)?(false):(true));

	if(dojo.byId(node_id+"_optlist").style.display=="none")
	{
		zsite_combobox_showoptionslist(node_id);
	}


	if(autocomplete)
	{
		//find next active option if intellisense is on
		var found = false;
		var i = activeoption+1;
		while(dojo.byId(node_id+"_option_"+(i)) != null)
		{
			if(dojo.byId(node_id+"_option_"+(i)).style.display != "none")
			{
				zsite_combobox_selectoption(node_id, i);
				found = true;
				break;
			}
			i++;
		}
		//if not found, continue from beginning
		//find first active option if intellisense is on
		if(!found)
		{
			i = 0;
			while(dojo.byId(node_id+"_option_"+(i)) != null)
			{
				if(dojo.byId(node_id+"_option_"+(i)).style.display != "none")
				{
					zsite_combobox_selectoption(node_id, i);
					break;
				}
				i++;
			}
		}
	}
	else
	{
		if(activeoption >= zsite_combobox_countoptionnumber(node_id)-1)
		{
			zsite_combobox_selectoption(node_id, 0);
		}
		else
		{
			zsite_combobox_selectoption(node_id, activeoption+1);
		}
	}





	//TODO: also affect overflow scrolling
	//node_id+"_scroller"
	//if scrollOffset > currentScroll then move scroll
	activeoption = parseInt(dojo.byId(node_id).getAttribute('activeoption'));

	var curoptiontop = dojo.byId(node_id+"_option_"+(activeoption)).offsetTop - dojo.byId(node_id+"_option_"+(1)).offsetTop;

	if(curoptiontop > (dojo.byId(node_id+"_scroller").scrollTop + 200))
	{
		//scroll down a little bit
		dojo.byId(node_id+"_scroller").scrollTop = curoptiontop - 180;
	}
	if(curoptiontop < (dojo.byId(node_id+"_scroller").scrollTop))
	{
		//scroll up a little bit
		dojo.byId(node_id+"_scroller").scrollTop = curoptiontop;
	}
}

function zsite_combobox_selectpreviousoption(node_id)
{
	var activeoption = parseInt(dojo.byId(node_id).getAttribute('activeoption'));
	var autocomplete = ((dojo.byId(node_id).getAttribute('autocomplete')==null)?(false):(true));

	if(dojo.byId(node_id+"_optlist").style.display=="none")
	{
		zsite_combobox_showoptionslist(node_id);
	}


	
	if(autocomplete)
	{
		//find previous active option if intellisense is on
		var i = activeoption-1;
		var found = false;

		while(dojo.byId(node_id+"_option_"+(i)) != null)
		{
			if(dojo.byId(node_id+"_option_"+(i)).style.display != "none")
			{
				zsite_combobox_selectoption(node_id, i);
				found = true;
				break;
			}

			i--;
		}
		if(!found)
		{
			//find last active option if intellisense is on
			var i = zsite_combobox_countalloptionnumber(node_id)-1;
	
			while(dojo.byId(node_id+"_option_"+(i)) != null)
			{
				if(dojo.byId(node_id+"_option_"+(i)).style.display != "none")
				{
					zsite_combobox_selectoption(node_id, i);
					break;
				}
				i--;
			}
		}
	}
	else
	{
		if(activeoption <= 0)
		{
			zsite_combobox_selectoption(node_id, zsite_combobox_countoptionnumber(node_id)-1);
		}
		else
		{
			zsite_combobox_selectoption(node_id, activeoption-1);
		}
	}




	//TODO: also affect overflow scrolling
	activeoption = parseInt(dojo.byId(node_id).getAttribute('activeoption'));

	var curoptiontop = dojo.byId(node_id+"_option_"+(activeoption)).offsetTop - dojo.byId(node_id+"_option_"+(1)).offsetTop;

	if(curoptiontop > (dojo.byId(node_id+"_scroller").scrollTop + 200))
	{
		//scroll down a little bit
		dojo.byId(node_id+"_scroller").scrollTop = curoptiontop - 180;
	}
	if(curoptiontop < (dojo.byId(node_id+"_scroller").scrollTop))
	{
		//scroll up a little bit
		dojo.byId(node_id+"_scroller").scrollTop = curoptiontop;
	}
}

function zsite_combobox_selectoptionvalue(node_id, val)
{
	dojo.byId(node_id+"_input").value = val;

	dojo.byId(node_id+"_option").value = val;
	dojo.byId(node_id).setAttribute('activeoption', -1);
	dojo.byId(node_id).setAttribute('autocomplete', null);
	zsite_combobox_hideoptionslist(node_id);
	if(zsite_combobox_events[node_id] != null)
		zsite_combobox_events[node_id]();
}

function zsite_combobox_selectoption(node_id, optionnum)
{
	var i = 0;
	var c = 0;

	var prevoption = parseInt(dojo.byId(node_id).getAttribute('activeoption'));

	if(dojo.byId(node_id+"_option_"+(prevoption)) != null)
	{
	    //clear previous selection
	    dojo.byId(node_id+"_option_"+(prevoption)).style.background = "";		
	}

	//mark selected option
	dojo.byId(node_id).setAttribute('activeoption', optionnum);
	dojo.byId(node_id+"_option_"+(optionnum)).style.background = "#aa9";

	return true;
}

function zsite_combobox_countoptionnumber(node_id)
{
    var c = 0;
    var i = 0;
    while(dojo.byId(node_id+"_option_"+(i)) != null)
    {
	if(dojo.byId(node_id+"_option_"+(i)).style.display != "none") c++;
	i++;
    }

    return c;
}

function zsite_combobox_countalloptionnumber(node_id)
{
    var i = 0;
    while(dojo.byId(node_id+"_option_"+(i)) != null)
    {
	i++;
    }

    return i;
}

function zsite_combobox_doselect(node_id)
{
    if(zsite_combobox_countoptionnumber(node_id) > 0)
    {
        var i = 0;
	var c = 0;

	var option = parseInt(dojo.byId(node_id).getAttribute('activeoption'));

	dojo.byId(node_id+"_input").value = dojo.byId(node_id+"_optionval_"+(option)).innerHTML;
	dojo.byId(node_id+"_option").value = dojo.byId(node_id+"_optionval_"+(option)).innerHTML;

	if(dojo.byId(node_id+"_label")) dojo.byId(node_id+"_label").innerHTML = dojo.byId(node_id+"_option_"+(option)).innerHTML;

	dojo.byId(node_id).setAttribute('activeoption', -1);
	dojo.byId(node_id).setAttribute('autocomplete', null);
	zsite_combobox_hideoptionslist(node_id);

/*
	while(dojo.byId(node_id+"_option_"+(i)) != null)
	{
	    if(dojo.byId(node_id+"_option_"+(i)).style.display != "none") c++;
	
	    if(c == dojo.byId(node_id).getAttribute('activeoption'))
	    {
		dojo.byId(node_id+"_input").value = dojo.byId(node_id+"_optionval_"+(i)).innerHTML;
		dojo.byId(node_id+"_option").value = dojo.byId(node_id+"_optionval_"+(i)).innerHTML;

		if(dojo.byId(node_id+"_label")) dojo.byId(node_id+"_label").innerHTML = dojo.byId(node_id+"_option_"+(i)).innerHTML;

		dojo.byId(node_id).setAttribute('activeoption', 0);
		dojo.byId(node_id).setAttribute('autocomplete', null);
		zsite_combobox_hideoptionslist(node_id);
	    }
	    i++;
	}
*/

    }
	if(zsite_combobox_events[node_id] != null)
		zsite_combobox_events[node_id]();
}

function zsite_combobox_rebuildoptionslist(node_id)
{
    dojo.byId(node_id).setAttribute('activeoption', -1);

    var i = 0;
    while(dojo.byId(node_id+"_option_"+(i)) != null)
    {
	//reset backgrounds
	dojo.byId(node_id+"_option_"+(i)).style.background = "";

	//see if it fits
	if(dojo.byId(node_id).getAttribute('autocomplete') != null)
	{
	    //filter values
	    var text = dojo.byId(node_id).getAttribute('autocomplete');
	    var text2 = dojo.byId(node_id+"_optionval_"+(i)).innerHTML;
	    if(text2.length > text.length)
	    {
		if(text2.substr(0,text.length)==text)
		{
		    dojo.byId(node_id+"_option_"+(i)).style.display = "block";
		}
		else
		{
		    dojo.byId(node_id+"_option_"+(i)).style.display = "none";
		}
	    }
	    else
	    {
		    dojo.byId(node_id+"_option_"+(i)).style.display = "none";
	    }
	}
	else
	{
	    dojo.byId(node_id+"_option_"+(i)).style.display = "block";
	}
	
	i++;
    }
}
