function update_datetime(base){
    var y = get_obj("y_" + base);
    var m = get_obj("m_" + base);
    var d = get_obj("d_" + base);
    var h = get_obj("h_" + base);
    var i = get_obj("i_" + base);
    var s = get_obj("s_" + base);
    var ptr = get_obj("fe_" + base);
    ptr.value =
        y.options[y.selectedIndex].value + "-" +
        m.options[m.selectedIndex].value + "-" +
        d.options[d.selectedIndex].value + " " +
        h.options[h.selectedIndex].value + ":" +
        i.options[i.selectedIndex].value + ":" +
        s.options[s.selectedIndex].value;
}
function update_date(base){
    var y = get_obj("y_" + base);
    var m = get_obj("m_" + base);
    var d = get_obj("d_" + base);
    var ptr = get_obj("fe_" + base);
    ptr.value =
        y.options[y.selectedIndex].value + "-" +
        m.options[m.selectedIndex].value + "-" +
        d.options[d.selectedIndex].value;
}

var cal = Array();
var months = Array();

function init_cal(elem_name, tabindex){
    var ptr = get_obj("cal_" + elem_name + "_container");
    /* create year drop down */
    var cnt = "";
    var out = "";
    var i = 0;
    for (i = cal[elem_name][0]; i <= cal[elem_name][1]; i++){
        out += "<option value=\"" + i +"\"";
        if (i == cal[elem_name][2]){
            out += " selected ";
        }
        out += ">" + i + "</option>";
    }
    cnt = "<select onchange=\"scroll_year('"  + elem_name + "');\"  id=\"cal_" + elem_name + "_s_year\" class=\"y_select\" tabindex=\"" + tabindex + "\">" + out + "</select>";
    out = "";
    for (i = 0; i < 12; i++){
        out += "<option value=\"" + i +"\"";
        if (i == cal[elem_name][3]){
            out += " selected ";
        }
        out += ">" + months[i] +"</option>";
    }
    cnt += "<select onchange=\"scroll_month('"  + elem_name + "');\" id=\"cal_" + elem_name + "_s_month\" class=\"m_select\" tabindex=\"" + (tabindex + 1) + "\">" + out + "</select>";
    cnt += "<div class=\"cnt\" id=\"cal_" + elem_name + "_cnt\"></div>";

    ptr.innerHTML = cnt;
    show_cal(elem_name);
    store_date(elem_name);
}
function show_cal(elem_name){
    var dat = new Date();
    var current_year = get_obj("cal_" + elem_name + "_s_year");
    var current_month = get_obj("cal_" + elem_name + "_s_month");
    current_year = current_year.options[current_year.selectedIndex].value;
    current_month = current_month.options[current_month.selectedIndex].value;

    dat.setFullYear(current_year);
    dat.setMonth(current_month, 1);
    var d_offset = dat.getDay() - 1;
    if (d_offset < 0){
        d_offset = 6;
    }
    var d = Array(31,28,31,30,31,30,31,31,30,31,30,31);
    var is_long = (current_year % 4)?0:1;
    var d_count = d[current_month] + ((current_month == 1)?is_long:0);
    /* we need to figure out previous month day count */
    var prev_month = current_month - 1;
    var prev_month_d_count;
    if (prev_month < 0){
        prev_month_d_count = d[11];
    } else {
        prev_month_d_count = d[prev_month] + ((prev_month == 1)?is_long:0);
    }
    /* start render */
    var i = 0;
    var out = "";
    var c = "";
    var dd = 0;
    var js;
    for (i = 0; i < 42; i++){
        js = "";
        if (i < d_offset){
            c = "gray";
            dd = prev_month_d_count - d_offset + i + 1;
        } else if (i >= (d_offset + d_count)){
            c = "gray";
            dd = i - d_offset - d_count + 1;
        } else {
            if (!((i+1) % 7) || ((i+1) % 7 == 6)){
                c = "red";
            } else {
                c = "active";
            }
            dd = i - d_offset + 1;
            if ((cal[elem_name][2] == current_year) && (cal[elem_name][3] == current_month) && (cal[elem_name][4] == dd - 1)){
                c = "selected";
            }
            js = " onclick = \"cal_set_date('" + elem_name + "', " + dd + ");\"";
        }
        out += "<div class=\"" + c + "\"" + js + "><div>" + dd + "</div></div>";
    }
    ptr = get_obj("cal_" + elem_name + "_cnt");
    ptr.innerHTML = out;
}
function cal_set_date(elem_name, day){
    var current_year = get_obj("cal_" + elem_name + "_s_year");
    var current_month = get_obj("cal_" + elem_name + "_s_month");
    current_year = current_year.options[current_year.selectedIndex].value;
    current_month = current_month.options[current_month.selectedIndex].value;
    cal[elem_name][2] = current_year;
    cal[elem_name][3] = current_month;
    cal[elem_name][4] = day - 1;
    store_date(elem_name);
    show_cal(elem_name);
}
function store_date(elem_name){
    var ptr = get_obj("fe_" + elem_name);
    var year = cal[elem_name][2];
    var month = parseInt(cal[elem_name][3]) + 1;
    var day = parseInt(cal[elem_name][4]) + 1;
    if (month < 10){
        month = "0" + month;
    }
    if (day < 10){
        day = "0" + day;
    }

    var h = get_obj("h_" + elem_name);
    if (h){
        var i = get_obj("i_" + elem_name);
        var s = get_obj("s_" + elem_name);
        ptr.value = year + "-" + month + "-" + day + " " + h.value + ":" + i.value + ":" + s.value;
    } else {
        ptr.value = year + "-" + month + "-" + day;
    }
}
function scroll_month(elem_name){
    show_cal(elem_name);
}
function scroll_year(elem_name){
    show_cal(elem_name);
}

