function deleteOption(object,index) {
    object.options[index] = null;
}

function addOption(object,text,value) {
    var defaultSelected = true;
    var selected = true;
    var optionName = new Option(text, value, defaultSelected, selected)
    object.options[object.length] = optionName;
}

function copySelected(fromObject,toObject) {
    for (var i=0, l=fromObject.options.length;i<l;i++) {
        if (fromObject.options[i].selected)
            addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
    }
    for (var i=fromObject.options.length-1;i>-1;i--) {
        if (fromObject.options[i].selected)
            deleteOption(fromObject,i);
    }
    fromObject.selectedIndex = -1;
    toObject.selectedIndex = -1;
}

function copyAll(fromObject,toObject) {
    for (var i=0, l=fromObject.options.length;i<l;i++) {
        addOption(toObject,fromObject.options[i].text,fromObject.options[i].value);
    }
    for (var i=fromObject.options.length-1;i>-1;i--) {
        deleteOption(fromObject,i);
    }
    fromObject.selectedIndex = -1;
    toObject.selectedIndex = -1;
}

function selectAll(selectObject) {
    for (var i=0, l=selectObject.options.length;i<l;i++) {
        selectObject.options[i].selected = true;
    }
}

function unselectAll(selectObject) {
    for (var i=0, l=selectObject.options.length;i<l;i++) {
        selectObject.options[i].selected = false;
    }
}

function clearAll(object) {
    for (var i=object.options.length-1;i>-1;i--) {
        deleteOption(object,i);
    }
    object.selectedIndex = -1;
}

function updateSelected(selectObject, targetObject) {
    var s = '';
    for (var i=0, l=selectObject.options.length;i<l;i++) {
        s += selectObject.options[i].value + ',';
    }
    s = s.substring(0,s.length-1);
    targetObject.value = s;
}

var daysofweek = new Array('Sunday',
                               'Monday',
                               'Tuesday',
                               'Wednesday',
                               'Thursday',
                               'Friday',
                               'Saturday');

function day_of_week(year, month, day) {
    var a = Math.floor((14 - month)/12);
    var y = year - a;
    var m = month + 12*a - 2;
    var d = (day + y + Math.floor(y/4) - Math.floor(y/100) +
    Math.floor(y/400) + Math.floor((31*m)/12)) % 7;
    return daysofweek[d+1];
}

function fix_date(s, reset) {
    var f_year = document.getElementById(s + '_year');
    var f_month = document.getElementById(s + '_month');
    var f_day = document.getElementById(s + '_day');
    var tot_days = totalDays(f_year.options[f_year.selectedIndex].value,f_month.options[f_month.selectedIndex].value);
    tot_days = Math.floor(tot_days);
    if (reset) {
        var s_i = '';
        if (f_day.options.length != tot_days) {
            clearAll(f_day);
            for (var i=1;i<=tot_days;i++) {
                s_i = i;
                if (i < 10) {
                    s_i = '0' + i;
                }
                var dow = day_of_week(f_year.value, f_month.value, s_i);
                addOption(f_day, s_i + ' (' + dow + ')', s_i);
            }
        }
        f_day.selectedIndex = 0;
    }
    var obj = document.getElementById(s);
    obj.value = f_year.options[f_year.selectedIndex].value + '-' + f_month.options[f_month.selectedIndex].value + '-' + f_day.options[f_day.selectedIndex].value;
    return;
}

function totalDays(iYear,iMonth) {
    return (iMonth == 2) ? (28 + (!(!(iYear%100)?(iYear%400):(iYear%4)))) : (28 + (((iMonth%8)+(iMonth/8))%2)+2);
}

function updateSelectedCheckboxes(checked, v, obj) {
    if (checked) {
        obj.value += ',' + v + ',';
    } else {
        obj.value = obj.value.replace(',' + v + ',', '');
    }
}

