﻿var combos = new Array();
var ComboDropDownHeight = 250;

ComboBoxInfo = function() {}
ComboBoxInfo.prototype.ID = "";
ComboBoxInfo.prototype.RecordCount = 0;
ComboBoxInfo.prototype.InitialQuery = false;
ComboBoxInfo.prototype.FirstVisibleRowIndex = 0;
ComboBoxInfo.prototype.LastVisibleRowIndex = 1;
ComboBoxInfo.prototype.IsRendering = false;
ComboBoxInfo.prototype.ScrollTimeout = 0;
ComboBoxInfo.prototype.CloseTimeout = 0;
ComboBoxInfo.prototype.ComboItemHeight = 20;
ComboBoxInfo.prototype.SelectedIndex = -1;
ComboBoxInfo.prototype.TypedText = '';
ComboBoxInfo.prototype.HasCursorExited = true;
ComboBoxInfo.prototype.KeyPressTime = 0;
ComboBoxInfo.prototype.IsSelectionRequired = false;
ComboBoxInfo.prototype.IsScrollToItemRequired = false;
ComboBoxInfo.prototype.GetTextBoxSelection = function()
{
    var tb = $(this.ID+'_text');
    
}
ComboBoxInfo.prototype.SetTextBoxAutoComplete = function(text)
{
    var tb = $(this.ID+'_text');
    tb.value = text;
    if (document.all)
    {
        var range = tb.createTextRange();
        range.moveStart("character", this.TypedText.length);
        range.moveEnd("character", text.length);
        range.select();
        tb.focus();
    }
    else
    {
        tb.setSelectionRange(this.TypedText.length, this.TypedText.length + (text.length-this.TypedText.length));
        tb.focus();
        //tb.selectionEnd = 0;
        //tb.selectionStart = start;
    }
}
ComboBoxInfo.prototype.MoveCursorToEnd = function()
{
    var tb = $(this.ID+'_text');
    if (document.all)
    {
        var range = tb.createTextRange();
        range.moveStart("character", tb.value.length);
        range.moveEnd("character", tb.value.length);
        range.select();
        tb.focus();
    }
    else
    {
        tb.setSelectionRange(tb.value.length,tb.value.length);
        tb.focus();
        //tb.selectionEnd = 0;
        //tb.selectionStart = start;
    }
}
ComboBoxInfo.prototype.GetCBMethod = function()
{
    return $(this.ID+'_method').value;
}
ComboBoxInfo.prototype.GetIsReadOnly = function()
{
    return $(this.ID+'_readonly').value == '1';
}
ComboBoxInfo.prototype.UnselectAll = function()
{
    for(var i=0;i<this.RecordCount;i++)
    {
        var elName = this.ID.toString()+'_i'+i.toString();
        if ($(elName)
            && $(elName).className != 'ComboBoxItem')
            $(elName).className = 'ComboBoxItem';
    }
}
ComboBoxInfo.prototype.VisibleRows = function(winHeight)
{
    return parseInt(winHeight/this.ComboItemHeight)+1;
}

ComboBoxInfo.prototype.DropDownAreaHeight = function()
{
    var innerHeight = ComboItemHeight*this.RecordCount;
    return innerHeight;
}

function GetCombo(id)
{
    for(var i=0;i<combos.length;i++)
        if (combos[i].ID==id)
            return combos[i];
  var cmb = new ComboBoxInfo();          
  cmb.ID = id;
  combos.push(cmb);
  return cmb;
}

function CloseAllCombos() {
    for (var i = 0; i < combos.length; i++) {
        var box = $j('#' + combos[i].ID + '_layer');
        if (!box.exists()|| !box.isMouseWithin()) 
            OnComboClose(combos[i].ID);
        
    }
}

function OnComboMouseUp(event, id)
{
    var cmb = GetCombo(id);
    var readOnly = cmb.GetIsReadOnly();
    var tb = $(id + '_text');
    cmb.TypedText = tb.value;
    var x = event.offsetX ? event.offsetX : event.layerX;
    var y = event.offsetY ? event.offsetY : event.layerY;
    var width = GetWidth(tb);
    if (x > width - 20 || readOnly)
        OnComboButtonClick(id);
    if (readOnly && $(id + '_layer')) {
     
        //$(id+'_layer').focus();
        //   tb.blur();
    }
}
function OnComboMouseMove(event, id)
{
    var cmb = GetCombo(id);
    var readOnly = cmb.GetIsReadOnly();
    var tb = $(id+'_text');
    var x = event.offsetX?event.offsetX:event.layerX;
    var y = event.offsetY?event.offsetY:event.layerY;
    var width = GetWidth(tb);
    if(x>width-20 || readOnly)
        tb.style.cursor = 'pointer';
    else
        tb.style.cursor = 'text';
    if (cmb.CloseTimeout)
        clearTimeout(cmb.CloseTimeout);
        
}
function OnComboButtonClick(id)
{
    var cmb = GetCombo(id);
    cmb.HasCursorExited = false;
    
    var div = $(id+'_layer');
    if (div.style.display != 'block')
    {
        cmb.IsScrollToItemRequired = true;
        if (!cmb.KeyPressTime
            || (new Date()).getTime()-cmb.KeyPressTime > 5000) // 5sec timeout on keypress
            cmb.TypedText = "";
        OpenComboLayer(id);
    }
    else
    {
        cmb.HasCursorExited = true;
        OnComboClose(id);
    }
}
function OnComboKeyDown(event, id)
{
    var cmb = GetCombo(id);
    if (event.keyCode==13 // Enter
        || event.keyCode==9 // Tab
        ||event.keyCode==27 // Esc
        )
    {
    
        if (event.keyCode==9
            ||event.keyCode==27)
        {
            // close dropdown on tab out
            OnComboClose(id);
            return true;
        }
        
        if (!document.all)
            event.preventDefault();
            
        
        cmb.UnselectAll();
        if (cmb.SelectedIndex >= cmb.RecordCount)
            cmb.SelectedIndex = cmb.RecordCount;

        OnComboSelect(id, cmb.SelectedIndex, true);
        OnComboClose(id);
        cmb.MoveCursorToEnd();
        return false;
    }
    
    if (cmb.GetIsReadOnly())
    {
        if (!document.all)
                event.preventDefault();
        return false;
    }
    
    return true;
    
}

function OnComboMouseOut(event, id)
{
    var cmb = GetCombo(id);
    cmb.HasCursorExited = true;
}

function OnComboKeyUp(event, id)
{

    var cmb = GetCombo(id);
    if (cmb.CloseTimeout)
        clearTimeout(cmb.CloseTimeout);
    switch(event.keyCode)
    {
        case 112: // f1
        case 113: // f2
        case 114: // f3
        case 115: // f4
        case 116: // f5
        case 117: // f6
        case 118: // f7
        case 119: // f8
        case 120: // f9
        case 121: // f10
        case 122: // f11
        case 123: // f12
        case 27: // Esc
            return false;
        case 39: // Right
        case 37: // Left
        case 35: // End
        case 36: // Home
        case 33: // Page Up
        case 34: // Page Down
        case 144: // Numlock
        case 16: // Shift
        case 17: // Ctrl
        case 18: // Alt
        case 91: // Windows
        case 93: // Menu
        case 20: // capslock
        case 9: // tab
            return true;
        case 13: // Enter
        //case 10:
            if (!document.all)
                event.preventDefault();
            
            cmb.UnselectAll();
            if (cmb.SelectedIndex >= cmb.RecordCount)
                cmb.SelectedIndex = cmb.RecordCount;

            OnComboSelect(id, cmb.SelectedIndex, true);
            OnComboClose(id);
            return false;
        case 40: // Down
            if (!document.all)
                event.preventDefault();
            //if (!cmb.TypedText)
            //    cmb.TypedText = $(id+'_text').value;
            cmb.UnselectAll();
            cmb.SelectedIndex++;
            if (cmb.SelectedIndex >= cmb.RecordCount-1)
                cmb.SelectedIndex = cmb.RecordCount-1;
            
            if (cmb.SelectedIndex<cmb.FirstVisibleRowIndex)
                cmb.FirstVisibleRowIndex = cmb.SelectedIndex;
            else if (cmb.SelectedIndex >= cmb.FirstVisibleRowIndex + cmb.VisibleRows(ComboDropDownHeight)-1)
                cmb.FirstVisibleRowIndex = cmb.SelectedIndex;
                
            
            $(id+'_layer').scrollTop = cmb.FirstVisibleRowIndex* parseInt(cmb.ComboItemHeight);
            OnComboSelect(id, cmb.SelectedIndex, false);
            if ($(id+'_layer').style.display != 'block')
                OpenComboLayer(id);
            //    setTimeout("DelayScrollFetch('"+id+"')", 100);
            return false;
        case 38: // Up
            if (!document.all)
                event.preventDefault();
            //if (!cmb.TypedText)
            //    cmb.TypedText = $(id+'_text').value;
            cmb.UnselectAll();
            cmb.SelectedIndex--;
            if (cmb.SelectedIndex < 0)
                cmb.SelectedIndex = 0;
            else if(cmb.SelectedIndex < cmb.FirstVisibleRowIndex+2)
                cmb.FirstVisibleRowIndex = cmb.SelectedIndex - (cmb.VisibleRows(ComboDropDownHeight) - 2);
            if (cmb.FirstVisibleRowIndex<0)
                cmb.FirstVisibleRowIndex = 0;
            OnComboSelect(id, cmb.SelectedIndex, false);
            $(id+'_layer').scrollTop = cmb.FirstVisibleRowIndex* parseInt(cmb.ComboItemHeight);
            if ($(id+'_layer').style.display != 'block')
                OpenComboLayer(id);
//            if ($(id+'_layer').style.display != 'block'
//                || !$(id+'_i'+cmb.FirstVisibleRowIndex.toString()+'t'))
//                setTimeout("DelayScrollFetch('"+id+"')", 100);
            return false;
    }
    
    if (cmb.GetIsReadOnly())
    {
        event.returnValue = false;
        if (!document.all)
            event.preventDefault();
        return false;
    }
    
    OnComboClearValue(id);
    cmb.SelectedIndex = -1;
    
    if (cmb.ScrollTimeout)
        clearTimeout(cmb.ScrollTimeout);


    cmb.TypedText = $(id + '_text').value;
    cmb.KeyPressTime = new Date();
    cmb.SelectedIndex = -1;
    if ($(id+'_layer').scrollTop!=0)
        $(id+'_layer').scrollTop =0;

    //OnComboSelect(id, cmb.SelectedIndex, false);
    cmb.ScrollTimeout = setTimeout("DelayScrollFetch('"+id+"')", 1000);
    return true;
}
function OnComboClearValue(id)
{
    $(id + '_value').value = '';

    var cmb = GetCombo(id);
    if (cmb)
    cmb.KeyPressTime = 0;
   var onselectscript = $(id+'_onchange').value;
   if (onselectscript)
    eval(onselectscript);
    //window.status = 'value cleared';
}
function ComboClear(id)
{
    OnComboClearValue(id);
}
function ComboSelect(id, value, text)
{
   var cmb = GetCombo(id);
   if (!cmb
      || !$(id+'_value'))
      return;
   cmb.TypedText = '';
   $(id+'_value').value = value;
   $(id + '_text').value = text;
   cmb.KeyPressTime = 0;
   var onselectscript = $(id+'_onchange').value;
   if (onselectscript)
       eval(onselectscript);
   if ($j('#' + id + '_text').attr('blockid'))
       $j('#' + $j('#' + id + '_text').attr('blockid')).focus();
}
function OpenComboLayer(id)
{
    var cmb = GetCombo(id);
    cmb.IsRendering = true;

    var div = $(id + '_layer');

    div.style.width = $(id + '_ddw') && $(id + '_ddw').value ? $(id + '_ddw').value : (GetWidth($(id + '_text'))-2) + 'px';
    div.style.overflow = 'auto';
    div.style.overflowX = 'hidden';
    div.style.zIndex = 2000;
    div.style.backgroundColor = '#ffffff';
    div.style.border = '1px solid #555555';
    div.style.position='absolute';
    div.style.display = 'block';
    div.style.marginTop = '-2px';
    div.innerHTML = "<div id='"+id+"_loading' class='Loading' style='position: absolute; display: none; width: 20px; height: 20px;'>&nbsp;</div><div class='ComboBoxItem' id='"+id+"_sizeDummy' style='display:none; overflow: hidden; position:absolute; top:-1000px; left:-1000px;'>SAMPLE</div><div style='overflow: scroll-y;' id='"+id+"_layerInner'></div>";
    if (!cmb.ComboItemHeightCalculated) {
        $(id + '_sizeDummy').style.display = 'block';
        cmb.ComboItemHeight = GetHeight($(id + '_sizeDummy'));
        $(id + '_sizeDummy').style.display = 'none';
        cmb.ComboItemHeightCalculated = cmb.ComboItemHeight != 0;
    }
    if (!cmb.ComboItemHeight)
        cmb.ComboItemHeight = 20;
    div.style.height =  cmb.ComboItemHeight+'px';
    if (isNaN(cmb.FirstVisibleRowIndex))
        cmb.FirstVisibleRowIndex = 0;

    $(id+'_loading').style.display = 'block';
    
    var method = cmb.GetCBMethod();
    if (method)
        GlobalCB('ComboBox2.OnCallback', id, method, cmb.FirstVisibleRowIndex.toString(), cmb.VisibleRows(ComboDropDownHeight), cmb.TypedText, $(id + '_related').value ? $(id + '_related').value : '0');
    else
    {
        OnComboStaticData(id);
    }
}
function OnComboStaticData(id)
{
    var cmb = GetCombo(id);
    var readOnly = cmb.GetIsReadOnly();
    var data = $(id+'_items')?$(id+'_items').value.split('\n'):new Array();
    var d = new Object();
    d.RangeStart = cmb.FirstVisibleRowIndex;
    d.RangeLength = cmb.VisibleRows(ComboDropDownHeight);
    //d.RecordCount = data.length;
    d.Items = new Array();
    var end = d.RangeLength+d.RangeStart;
    //
    var filteredData = new Array();

    for (var i = 0; i < data.length; i++)
    {
        var item = data[i].split('^');
        var o = new Object();
        var s = new String();
        o.Value = item[0];
        o.Text = item[1];
        o.Html = item[2];
        if (!cmb.TypedText
            || o.Text.toLowerCase().indexOf(cmb.TypedText.toLowerCase()) > -1
            || readOnly)
            filteredData.push(o);
    }

    for (var i = d.RangeStart; i < filteredData.length && i < end; i++)
    {
        d.Items.push(filteredData[i]);
    }
    d.RecordCount = filteredData.length;
    OnComboData(id, d);
    
}
function OnComboDelayClose(id)
{
    var cmb = GetCombo(id);
    cmb.HasCursorExited = true;
    if (cmb.CloseTimeout)
        clearTimeout(cmb.CloseTimeout);
    cmb.CloseTimeout = setTimeout("OnComboClose('"+id+"')", 1500);
}
function OnComboDelayCloseCancel(id)
{
    var cmb = GetCombo(id);
    if (cmb.CloseTimeout)
        clearTimeout(cmb.CloseTimeout);
}
function OnComboScroll(id)
{
    var cmb = GetCombo(id);
    cmb.HasCursorExited = false;
    if (cmb.IsRendering || cmb.IsSettingScrollTop)
        return;
    if (cmb.ScrollTimeout)
        clearTimeout(cmb.ScrollTimeout);
    if (cmb.CloseTimeout)
        clearTimeout(cmb.CloseTimeout);

    var div = $(id + '_layer');
    
     cmb.FirstVisibleRowIndex = parseInt(div.scrollTop/parseInt(cmb.ComboItemHeight));
     cmb.ScrollTimeout = setTimeout("DelayScrollFetch('"+id+"')", 200);
    
   
}
function DelayScrollFetch(id)
{
    var cmb = GetCombo(id);
    clearTimeout(cmb.ScrollTimeout);
    
    var div = $(id+'_layer');
    if (!div)
        return;
        
    if (div.style.display=='block')
    {
       var method = cmb.GetCBMethod();
       if (method)
           GlobalCB('ComboBox2.OnCallback', id, method, (cmb.FirstVisibleRowIndex).toString(), cmb.VisibleRows(ComboDropDownHeight), cmb.TypedText, $(id + '_related').value ? $(id + '_related').value : '0');
       else
            OnComboStaticData(id);
    }
    else
    {
        OpenComboLayer(id);
    }
}
function OnComboBlur(id)
{
    var cmb = GetCombo(id);
    if (cmb.CloseTimeout)
        clearTimeout(cmb.CloseTimeout);
    OnComboDelayClose(id);
}

function OnComboClose(id)
{
    var cmb = GetCombo(id);
    if (!cmb.HasCursorExited)
        return;
        
    var div = $(id+'_layer');
    if (div)
        div.style.display='none';
    if (cmb.ScrollTimeout)
        clearTimeout(cmb.ScrollTimeout);
}
function OnComboSelect(id, index, overwrite)
{
    var cmb = GetCombo(id);
    cmb.SelectedIndex = index;
    if ((!$(id+'_i'+index+'t')||!$(id+'_i'+index.toString()+'t'))
        && !cmb.IsSelectionRequired)
    {   
        cmb.IsSelectionRequired = true;
         var div = $(id+'_layer');
        div.scrollTop = (cmb.SelectedIndex-1) * cmb.ComboItemHeight;
        
        //setTimeout("DelayScrollFetch('"+id+"')", 100);
        return;
    }
  
    if (!$(id+'_i'+index.toString()+'t'))
        return;
        
    /*
    if ((cmb.FirstVisibleRowIndex+cmb.VisibleRows(ComboDropDownHeight)-1) <= index)
    {
        cmb.FirstVisibleRowIndex = index;
        var div = $(id+'_layer');
        cmb.IsSettingScrollTop = true;
        div.scrollTop = (cmb.ComboItemHeight * (cmb.FirstVisibleRowIndex-2));
        cmb.IsSettingScrollTop = false;
    }
    else if (index < cmb.FirstVisibleRowIndex+1)
    {
        cmb.FirstVisibleRowIndex = index;
        var div = $(id+'_layer');
        cmb.IsSettingScrollTop = true;
        div.scrollTop = (cmb.ComboItemHeight * (cmb.FirstVisibleRowIndex-(cmb.VisibleRows()-2)));
        cmb.IsSettingScrollTop = false;
    }*/

    
    
    if (overwrite)
    {
        cmb.TypedText = '';
        cmb.KeyPressTime = 0;
        $(id+'_text').value = $(id+'_i'+index.toString()+'t').value;
        $(id + '_value').value = $(id + '_i' + index.toString() + 'v').value;

        if ($j('#' + id + '_text').attr('blockid'))
            $j('#' + $j('#' + id + '_text').attr('blockid')).focus();
        else
            cmb.MoveCursorToEnd();
        cmb.HasCursorExited = true; // Allow next ComboClose() function to work
    }
    else
    {
        cmb.SetTextBoxAutoComplete($(id+'_i'+index.toString()+'t').value);
        $(id+'_value').value = $(id+'_i'+index.toString()+'v').value;
    }
    // window.status = 'value set';

   
   var onselectscript = $(id+'_onchange').value;
   if (onselectscript)
    eval(onselectscript);
    
   if ($(cmb.ID+'_i'+cmb.SelectedIndex))
       $(cmb.ID + '_i' + cmb.SelectedIndex).className = 'ComboBoxItemSelected';

  
}

/*
function ___OnComboData(id, data)
{
    var cmb = GetCombo(id);
    cmb.RecordCount = data.RecordCount;
    var s = '';
    var start = data.RangeStart;
    var end = start+data.RangeLength;
    
    for(var i=0;i<cmb.RecordCount;i++)
    {
        s += "<div style='height: "+(cmb.ComboItemHeight-4)+"px;' class='ComboBoxItem' id='"+id+"_i"+i+"'";
         if (i >= start
            && i< end)
            s += " onclick='OnComboSelect(\""+id+"\", "+i+", true); OnComboClose(\""+id+"\");'";
        s += ">";
        if (i >= start
            && i< end
            && data.Items[i-start])
        {
            s += data.Items[i-start].Text;
            s += "<input type='hidden' id='"+id+"_i"+i+"v' value='"+ data.Items[i-start].Value +"' />";
            s += "<input type='hidden' id='"+id+"_i"+i+"t' value='"+ data.Items[i-start].Text.replace("'", "\\\'") +"' />";
        }
        else
            s += "&nbsp;";
        s += "</div>";
    }
    var div = $(id+'_layerInner');
    div.innerHTML = s;
    
    if (cmb.SelectedIndex>-1 
        && cmb.SelectedIndex<cmb.RecordCount
        &&   $(id+'_i'+cmb.SelectedIndex))
            $(id+'_i'+cmb.SelectedIndex).className = 'ComboBoxItemSelected';
    
    
    if (cmb.RecordCount * cmb.ComboItemHeight < ComboDropDownHeight)
    {
        $(id+'_layer').style.height = (cmb.RecordCount * cmb.ComboItemHeight)+'px';
        
    }
    else
    {
        $(id+'_layer').style.height = ComboDropDownHeight+'px';
    }
    
    $(id+'_loading').style.display = 'none';
    if (cmb.RecordCount==0)
    {
        //$(id+'_layer').style.display = 'none';
        $(id+'_loading').style.display = 'block';
        $(id+'_loading').innerHTML = 'No Results.';
        $(id+'_layer').style.height = cmb.ComboItemHeight+'px';
        $(id+'_loading').style.display = 'block';
        $(id+'_loading').style.width = $(id+'_layer').style.width;
        $(id+'_loading').className = 'Tiny';
        $(id+'_loading').style.textAlign = 'center';
        $(id+'_loading').style.color = '#cccccc';
    }
    cmb.IsRendering = false;
   
    if (cmb.IsSelectionRequired)
    {
        OnComboSelect(id, cmb.SelectedIndex, false);
        cmb.IsSelectionRequired = false;   
    }
    
    if (cmb.IsScrollToItemRequired)
    {
        cmb.IsScrollToItemRequired = false;
        $(id+"_layer").scrollTop = cmb.FirstVisibleRowIndex * cmb.ComboItemHeight;
    }
  
}
*/




function OnComboData(id, data)
{
    var cmb = GetCombo(id);
    cmb.RecordCount = data.RecordCount;
    var s = '';
    var start = data.RangeStart; // zero based index
    var end = start + data.RangeLength;

    var styleOff = 2; //4

    if (start != 0)
    {
        s += "<div style='height: " + (((cmb.ComboItemHeight) * (start))) + "px; cursor: wait;' ";
        s += ">&nbsp;</div>";
    }

    for (var i = 0; i < data.Items.length && i < data.RangeLength; i++)
    {
        var idx = start + i;
        var val = data.Items[i].Value;
        var txt = data.Items[i].Text;
        var html = data.Items[i].Html;
        if (!txt)
            txt = val;
        if (!html)
            html = txt;
            
        s += "<div style='height: " + (cmb.ComboItemHeight - styleOff) + "px;' class='ComboBoxItem' id='" + id + "_i" + idx + "'";
        s += " onclick='OnComboSelect(\"" + id + "\", " + idx + ", true); OnComboClose(\"" + id + "\");'";
        s += ">";
        s += html;
        s += "<input type='hidden' id='" + id + "_i" + idx + "v' value='" + val + "' />";
        s += "<input type='hidden' id='" + id + "_i" + idx + "t' value=\"" + txt.replace("\"", "&quot;") + "\" />";
        s += "</div>";
    }

    //if (end < cmb.RecordCount)
    if ((cmb.RecordCount - end)>0)
    {
        s += "<div style='height: " + ((cmb.ComboItemHeight) * ((cmb.RecordCount - end))) + "px; cursor: wait;' ";
        s += ">&nbsp;</div>";
    }
    
    var div = $(id + '_layerInner');
    div.innerHTML = s;

    if (cmb.SelectedIndex > -1
        && cmb.SelectedIndex < cmb.RecordCount
        && $(id + '_i' + cmb.SelectedIndex))
        $(id + '_i' + cmb.SelectedIndex).className = 'ComboBoxItemSelected';



    var dropHeight = ComboDropDownHeight;

    if (cmb.RecordCount * cmb.ComboItemHeight < ComboDropDownHeight)
        dropHeight = (cmb.RecordCount * (cmb.ComboItemHeight + 2));

    var docHeight = GetDocumentHeight();
    var bottomEdge = PosY($(id + '_text')) + GetHeight($(id + '_text')) + dropHeight;
    //alert(PosY($(id + '_text')) + " " + bottomEdge + " " + docHeight);
    if (bottomEdge > docHeight) {
        $(id + '_layer').style.marginTop = ((dropHeight + GetHeight($(id + '_text'))+4) * -1) + 'px';
    }
    else {
        $(id + '_layer').style.marginTop = '-2px';
    }
 
    $(id + '_layer').style.height = dropHeight + 'px';


    $(id + '_loading').style.display = 'none';
    if (cmb.RecordCount == 0)
    {
        $(id+'_layer').style.display = 'none';
        $(id + '_loading').style.display = 'block';
        $(id + '_loading').innerHTML = 'No Results.';
        $(id + '_layer').style.height = cmb.ComboItemHeight + 'px';
        $(id + '_loading').style.display = 'block';
        $(id + '_loading').style.width = $(id + '_layer').style.width;
        $(id + '_loading').className = 'Tiny';
        $(id + '_loading').style.textAlign = 'center';
        $(id + '_loading').style.color = '#cccccc';
    }
    cmb.IsRendering = false;

    if (cmb.IsSelectionRequired)
    {
        OnComboSelect(id, cmb.SelectedIndex, false);
        cmb.IsSelectionRequired = false;
    }

    if (cmb.IsScrollToItemRequired)
    {
        cmb.IsScrollToItemRequired = false;
        $(id + "_layer").scrollTop = cmb.FirstVisibleRowIndex * cmb.ComboItemHeight;
    }
    
}