function updateSelect2(array, array2, sel, target, merging) {
        
    var i, item, item2;

    
    if(!target)
    {
        return false;
    }
    if (array.length < 1) {
        target.options.length = 0;
        return false;
    }

    if (merging) {
        
        
        item = merge_arrays(array[sel[0]], target.options, 1);
        item2 = merge_arrays(array2[sel[0]], target.options, 1);

        
        for (i = 1 ; i < sel.length ; i++) {
            item = merge_arrays(array[sel[i]], item, 0);
        }
    } else if ( sel.length > 1 ) {
        
        item = merge_arrays(array[sel[0]],array[sel[1]], 0);
        item2 = merge_arrays(array2[sel[0]],array2[sel[1]], 0);

        
        for (i = 2; i < sel.length; i++) {
            item = merge_arrays(item, array[sel[i]], 0);
            item2 = merge_arrays(item2, array2[sel[i]], 0);
        }
    } else { 
        item = array[sel[0]];
        item2 = array2[sel[0]];
    }

    
    target.options.length = 0;

    
    if (sel.length > 0)
    {
        for (i = 0; i < item.length; i++) {
            target.options[i] = new Option(item[i], item2[i]);
        }
    }
    return true;
}

function updateSelect(array, sel, target, merging) {
        
    var i, item;

    
    if (array.length < 1) {
        target.options.length = 0;
        return false;
    }

    if (merging) {
        
        
        item = merge_arrays(array[sel[0]], target.options, 1);

        
        for (i = 1 ; i < sel.length ; i++) {
            item = merge_arrays(array[sel[i]], item, 0);
        }
    } else if ( sel.length > 1 ) {
        
        item = merge_arrays(array[sel[0]],array[sel[1]], 0);

        
        for (i = 2; i < sel.length; i++) {
            item = merge_arrays(item, array[sel[i]], 0);
        }
    } else { 
        item = array[sel[0]];
    }

    
    target.options.length = 0;

    
    for (i = 0; i < item.length; i++) {
        target.options[i] = new Option(item[i], item[i]);
    }
    return true;
}


function fake_diff_array(a, b) {
    var newsel = new Array();
    var found = false;

    
    for (var ia in a) {
        for (var ib in b) {
            if (a[ia] == b[ib]) {
                found = true;
            }
        }
        if (!found) {
            newsel[newsel.length] = a[ia];
        }
        found = false;
    }
    return newsel;
}


function merge_arrays(a, b, b_is_select) {
    var pos_a = 0;
    var pos_b = 0;
    var ret = new Array();
    var bitem, aitem;

    
    while ((pos_a < a.length) && (pos_b < b.length)) {
        if (b_is_select) {
            bitem = b[pos_b].value;
        } else {
            bitem = b[pos_b];
        }
        aitem = a[pos_a];

        
        if (aitem.toLowerCase() < bitem.toLowerCase()) {
            ret[ret.length] = aitem;
            pos_a++;
        } else {
            
            if (aitem.toLowerCase() > bitem.toLowerCase()) {
                ret[ret.length] = bitem;
                pos_b++;
            } else {
                
                ret[ret.length] = aitem;
                pos_a++;
                pos_b++;
            }
        }
    }

    
    if (pos_a < a.length) {
        for (; pos_a < a.length ; pos_a++) {
            ret[ret.length] = a[pos_a];
        }
    }

    if (pos_b < b.length) {
        for (; pos_b < b.length; pos_b++) {
            if (b_is_select) {
                bitem = b[pos_b].value;
            } else {
                bitem = b[pos_b];
            }
            ret[ret.length] = bitem;
        }
    }
    return ret;
}


function get_selection(control, findall, want_values) {
    var ret = new Array();

    if ((!findall) && (control.selectedIndex == -1)) {
        return ret;
    }

    for (var i=0; i<control.length; i++) {
        if (findall || control.options[i].selected) {
            ret[ret.length] = want_values ? control.options[i].value : i;
        }
    }
    return ret;
}


function restoreSelection(control, selnames) {
    
    for (var j=0; j < selnames.length; j++) {
        for (var i=0; i < control.options.length; i++) {
            if (control.options[i].value == selnames[j]) {
                control.options[i].selected = true;
            }
        }
    }
}


function updatedbsel()
{
	var f = document.getElementById("rdssearchform");
	var xdbsel = new Array();
	var dbsels = getElementByName("dbsel");
	var saved;
	for (var i = 0; i < dbsels.length; i++)
	{
		if(dbsels[i].checked)
		{
			var prodnum;
			switch(dbsels[i].value)
			{
				case 'BMP': prodnum=2; break;
				case 'BNI': prodnum=3; break;
				case 'TBL': prodnum=5; break;
			}
			xdbsel[xdbsel.length] = prodnum;
		}
	}
	if(f.ct) {
		saved = get_selection(f.ct, false, true);
		updateSelect2(CTT, CTS, xdbsel, f.ct);
		restoreSelection(f.ct, saved);
	}
	if(f.mt) {
		saved = get_selection(f.mt, false, true);
		updateSelect2(MTT, MTS, xdbsel, f.mt);
		restoreSelection(f.mt, saved);
	}
	if(f.dp) {
		saved = get_selection(f.dp, false, true);
		updateSelect2(DPT, DPS, xdbsel, f.dp);
		restoreSelection(f.dp, saved);
	}
	if(f.it) {
		saved = get_selection(f.it, false, true);
		updateSelect2(INT, INS, xdbsel, f.it);
		restoreSelection(f.it, saved);
	}
	if(f.dt) {
		saved = get_selection(f.dt, false, true);
		updateSelect2(DTT, DTS, xdbsel, f.dt);
		restoreSelection(f.dt, saved);
	}
	if(f.gc) {
		saved = get_selection(f.gc, false, true);
		updateSelect2(GNT, GNS, xdbsel, f.gc);
		restoreSelection(f.gc, saved);
	}
}

function selectProduct(f) {
    
    if ((!f) || (!f.product)) {
        return;
    }

    
    if ((first_load) && (f.product.selectedIndex == -1)) {
        first_load = false;
        return;
    }
    
    
    first_load = false;

    
    var merging = false;
    var sel = Array();

    
    var findall = f.product.selectedIndex == -1;
    sel = get_selection(f.product, findall, false);
    if (!findall) {
        
        var tmp = sel;
    
        
        if ((last_sel.length > 0) && (last_sel.length < sel.length)) {
            sel = fake_diff_array(sel, last_sel);
            merging = true;
        }
        last_sel = tmp;
    }
    
    var saved_cpts = get_selection(f.component, false, true);
    var saved_vers = get_selection(f.version, false, true);
    var saved_tms = get_selection(f.target_milestone, false, true);

    
    updateSelect(cpts, sel, f.component, merging);
    restoreSelection(f.component, saved_cpts);
    updateSelect(vers, sel, f.version, merging);
    restoreSelection(f.version, saved_vers);
    updateSelect(tms, sel, f.target_milestone, merging);
    restoreSelection(f.target_milestone, saved_tms);
}

var clearform = false;

function checkform(x) {
  if(clearform) return true;
  var hasquery = false;
  var hasdbsel = x;
  var inputs = document.getElementsByTagName("INPUT");
  for(var i=0; i<inputs.length; i++)
  {
     var val=inputs[i].value;
     if (val != '')
     {
        if (inputs[i].name == 'dbsel' && inputs[i].checked == true)
	{
		hasdbsel = true;
	}
	else if (inputs[i].type == 'text')
	{
		hasquery=true;
	}
     }
  }
  if(!hasquery)
  {
    var inputs = document.getElementsByTagName("SELECT");
    for(var i=0; i<inputs.length; i++)
    {
      var control = inputs[i];
      for (var j=0; j<control.length; j++) {
          if (control.options[j].selected && control.options[j].value != '') {
		  hasquery=true;
		  break;
          }
      }
      if(hasquery)
	break;
    }
  }
  if(hasquery && hasdbsel)
    return true;
  if(!hasdbsel) alert("Please select a Database");
  if(!hasquery) alert("Please enter a search term");
  return false;
}

function addToggledbselEvent()
{
        var checkBoxElements=document.getElementsByTagName("input");
        for(var i=0; i<checkBoxElements.length; i++)
        {
                var chkBoxId=checkBoxElements[i].id;
                if(chkBoxId.match("dbsel_"))
                {
                        checkBoxElements[i].onclick=ToggleDBSEL;
                }
        }
}

function ToggleDBSEL()
{
	var dbselbmp=getElementById("dbsel_bmp");
	var dbselbni=getElementById("dbsel_bni");
	var dbseltbl=getElementById("dbsel_tbl");
	var mktrow  =getElementById("mktterms");
	var dptrow  =getElementById("dptterms");

	if(mktrow != null)
	{
	if((dbselbni.checked || dbseltbl.checked) && !dbselbmp.checked)
	{
		mktrow.className = "";
	}
	else
	{
		mktrow.className = "hide";
	}
	}
	if(dptrow != null)
	{
	if(dbselbmp.checked && !dbselbni.checked && !dbseltbl.checked)
	{
		dptrow.className = "";
	}
	else
	{
		dptrow.className = "hide";
	}
	}
}

addWindowLoadEvent(addToggledbselEvent);
