// MOVES THE SELECTED ITEMS FROM THE fbox TO tbox
function move(fbox, tbox) {
    var aFbox = new Array();
    var aTbox = new Array();
    var aLookup = new Array();
    var i;
    // ITERATE THROUGH THE tbox SAVING WHAT IS ALREADY THERE
    for (i = 0; i < tbox.options.length; i++) {
        aLookup[tbox.options[i].text] = tbox.options[i].value;
        aTbox[i] = tbox.options[i].text;
    }
    // ITERATE THROUGH THE fbox ADDING THE SELECTED ITEMS TO THE tbox
    var fLength = 0;
    var tLength = aTbox.length;
    for(i = 0; i < fbox.options.length; i++) {
        aLookup[fbox.options[i].text] = fbox.options[i].value;
        if (fbox.options[i].selected && fbox.options[i].value != "") {
            aTbox[tLength] = fbox.options[i].text;
            tLength++;
        } else {
            aFbox[fLength] = fbox.options[i].text;
            fLength++;
        }
    }
    aFbox.sort();
    aTbox.sort();
    fbox.length = 0;
    tbox.length = 0;
    var c;
    // RECREATE fbox
    for(c = 0; c < aFbox.length; c++) {
        var no = new Option();
        no.value = aLookup[aFbox[c]];
        no.text = aFbox[c];
        fbox[c] = no;
    }
    // RECREATE tbox
    for(c = 0; c < aTbox.length; c++) {
        var no = new Option();
        no.value = aLookup[aTbox[c]];
        no.text = aTbox[c];
        tbox[c] = no;
   }
}

// MOVES ALL OPTIONS FROM fbox TO tbox
function moveAll(fbox, tbox) {
    for (var i=0; i<fbox.options.length; i++) {
        fbox.options[i].selected = true;
    }
    move(fbox,tbox);
}

// PIPES THE selectbox VALUES TO obj.value
function getSelectBoxValues(selectbox,obj){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
    obj.value = "";
    for (var i=0; i<selectbox.options.length; i++) {
      obj.value += selectbox.options[i].value + "|";
    }
    var str = obj.value;
    var length = str.length;
    obj.value = str.substring(0,str.length - 1);
}


// PIPES THE selectbox TEXT IN CSV TO obj.value
function getSelectBoxText(selectbox,obj){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
    obj.value = "";
    for (var i=0; i<selectbox.options.length; i++) {
      obj.value += selectbox.options[i].text + "|";
    }
    var str = obj.value;
    var length = str.length;
    obj.value = str.substring(0,str.length - 1);
}


// SELECTS THE APPRORIATE INDEX OF THE selectbox BASED ON THE text
function setSelectedByText(selectbox,text) {
   if(selectbox == null || typeof(selectbox) == "undefined") return;
    var i = indexOfText(selectbox,text);
    if(i != -1) selectbox.selectedIndex = i;    
}

// SELECTS THE APPRORIATE INDEX OF THE selectbox BASED ON THE value
function setSelectedByValue(selectbox,value) {
   if(selectbox == null || typeof(selectbox) == "undefined") return;
    var i = indexOfValue(selectbox,value);
    if(i != -1) selectbox.selectedIndex = i;    
}

// RETURNS THE FIRST INDEX OF text FOUND IN selectbox TEXT
function indexOfText(selectbox,text){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
    for(var i = 0; i < selectbox.options.length; i++){
        if(selectbox.options[i].text == text) {
            return i;
        }
    }
    return -1;
}

// RETURNS THE FIRST INDEX OF value FOUND IN selectbox VALUES
function indexOfValue(selectbox,value){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
    for(var i = 0; i < selectbox.options.length; i++){
        if(selectbox.options[i].value == value) {
            return i;
        }
    }
    return -1;
}

// POPULATES A SELECT BOX
function populateTextAndValues(selectbox,txtarray,valarray){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
   selectbox.length = 0;
   var op;
   for(var i = 0; i < txtarray.length; i++) {
      op = new Option();
      op.text = txtarray[i];
      if(i < valarray.length) op.value = valarray[i];
      else op.value = "";
      selectbox.options[i] = op;
   }
}

// POPULATES A SELECT BOX
function populateText(selectbox,array){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
   selectbox.length = 0;
   var op;
   for(var i = 0; i < array.length; i++) {
      op = new Option();
      op.text = array[i];
      op.value = array[i];
      selectbox.options[i] = op;
   }
}

// POPULATES A SELECT BOX
function populateTextValues(selectbox,txt_val_array){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
   selectbox.length = 0;
   var op;
   var position = 0;
   for(var i = 0; i < txt_val_array.length; i+=2) {
      op = new Option();
      op.text = txt_val_array[i];
      if(i < txt_val_array.length) op.value = txt_val_array[i+1];
      else op.value = "";
      selectbox.options[position] = op;
      position++;
   }
}

// POPULATES A SELECT BOX
function updateSelectBox(selectbox,txt_val_array){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
   var op;
   var position = 0;
   // CHECK FOR BLANK
   if(selectbox.options.length > 0) {
      if(selectbox.options[0].text == "") {
        selectbox.length = 1;
        position = 1;
      } else {
	    selectbox.length = 0;
        position = 0;
      }
   }
   // RECREATE selectbox
   for(var i = 0; i < txt_val_array.length; i+=2) {
      op = new Option();
      op.text = txt_val_array[i];
      if(i < txt_val_array.length) op.value = txt_val_array[i+1];
      else op.value = "";
      selectbox.options[position] = op;
      position++;
   }
}

// UPDATES A SELECT BOX GROUP
function updateGroupSelectBox(selectbox,selectbox2,txt_val_array){
   if(selectbox == null || typeof(selectbox) == "undefined") return;
   var op;
   var position = 0;
   selectbox.selectedIndex = -1;
   // CHECK FOR BLANK
   if(selectbox.options.length > 0) {
      if(selectbox.options[0].text == "") {
        selectbox.length = 1;
        position = 1;
      } else {
        selectbox.length = 0;
        position = 0;
      }
   }
   // SAVE THE OPTIONS OF selectbox2
   var selectedOptions = new Array();
   for(var i = 0; i < selectbox2.options.length; i++) {
      selectedOptions[i] = selectbox2.options[i];
   }
   // RECREATE selectbox
   for(var i = 0; i < txt_val_array.length; i+=2) {
      op = new Option();
      op.text = txt_val_array[i];
      if(i < txt_val_array.length) op.value = txt_val_array[i+1];
      else op.value = "";
      selectbox.options[position] = op;
      position++;
   }
   // MOVE ALL SELECTION OPTIONS FROM selectbox TO selectbox2
   selectbox2.length = 0;
   for(var i = 0; i < selectedOptions.length; i++) {
      var index = indexOfValue(selectbox,selectedOptions[i].value);
      if(index > -1) {
        selectbox.options[index].selected = true;
      }
   }
   move(selectbox,selectbox2);
}