function ensureSelected(fld, fld_name) {
    var t = fld.type;
    if (!t) t = fld[0].type;
    if (t == 'select-one' || t == 'text' || t == 'password') {
        if (fld.value == '') {
            alert(fld_name + ' is required.');
            fld.focus();
            return false;
        }
    } else {
        // need to know the type
        alert(t);
    }
    return true;
}
function removeSelectBoxElements(obj) {
    for (var i = obj.options.length - 1; i >= 0; i--) {
        obj.options[i] = null;
    }
}
function selectAllSelectBoxElements(obj) {
    for (var i = obj.options.length - 1; i >= 0; i--) {
        obj.options[i].selected = true;
    }
}
function unselectAllSelectBoxElements(obj) {
    for (var i = obj.options.length - 1; i >= 0; i--) {
        obj.options[i].selected = false;
    }
}

// list funcs to move left/right and up/down
function moveRight(master_list, sub_list) {
    moveIt(master_list, sub_list);
}
function moveLeft(master_list, sub_list) {
    moveIt(sub_list, master_list);
}
function moveIt(src, dest) {
    for (var i = 0; i < src.options.length; i++) {
        if (src.options[i].selected) {
            var o = document.createElement('option');
            o.value = src.options[i].value;
            o.text = src.options[i].text;
            dest.options.add(o);
            src.options[i] = null;
            i--;
        }
    }
}
function moveUpDown(sel_list, dir) {
    var sel, txt, val;
    if (dir == 'up') {
        for (var i = 0; i < sel_list.options.length; i++) {
            moveUpDownHelper(sel_list, i, dir);
        }
    } else if (dir == 'down') {
        for (var i = sel_list.options.length - 1; i >= 0; i--) {
            moveUpDownHelper(sel_list, i, dir);
        }
    }

    // reinforce the selected since sometimes it doesn't highlight properly in IE
    for (var i = 0; i < sel_list.options.length; i++) {
        sel_list.options[i].selected = sel_list.options[i].selected;
    }
}
function moveUpDownHelper(sub, i, dir) {
    if (i > 0 && sub.options[dir == 'up' ? i : i - 1].selected) {
        // switch with one next to it
        var val = sub.options[i].value;
        var txt = sub.options[i].text;
        var sel = sub.options[i].selected;
        sub.options[i].value = sub.options[i - 1].value;
        sub.options[i].text = sub.options[i - 1].text;
        sub.options[i].selected = sub.options[i - 1].selected;
        sub.options[i - 1].selected = sel;
        sub.options[i - 1].text = txt;
        sub.options[i - 1].value = val;
    }
}
function moveDown(sel_list) {
    moveUpDown(sel_list, 'down');
}
function moveUp(sel_list) {
    moveUpDown(sel_list, 'up');
}
function sortList(what) {
    var copyOption = new Array();
    for (var i=0;i<what.options.length;i++)
        copyOption[i] = new Array(what[i].value,what[i].text);

    copyOption.sort(function(a,b) { return a[1] < b[1] ? -1 : (a[1] > b[1] ? 1 : 0); });

    for (var i=what.options.length-1;i>-1;i--)
        what.options[i] = null;

    for (var i=0;i<copyOption.length;i++) {
        var o = document.createElement('option');
        o.value = copyOption[i][0];
        o.text = copyOption[i][1];
        what.options.add(o);
    }
}