var tblDayEnds = new Array(4);
tblDayEnds[0] = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
tblDayEnds[1] = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
tblDayEnds[2] = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
tblDayEnds[3] = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

function change_date(from_dd, from_MM, from_yyyy, to_dd, to_MM, to_yyyy, sel_dd, sel_MM, sel_yyyy, iddd, idMMyyyy) {
    sel_dd = get_value(iddd);
    sel_MM = get_value(idMMyyyy).split('.')[0];
    sel_yyyy = get_value(idMMyyyy).split('.')[1];

    generate_date(from_dd, from_MM, from_yyyy, to_dd, to_MM, to_yyyy, sel_dd, sel_MM, sel_yyyy, iddd, idMMyyyy)
}

function generate_date(from_dd, from_MM, from_yyyy, to_dd, to_MM, to_yyyy, sel_dd, sel_MM, sel_yyyy, iddd, idMMyyyy) {
    document.getElementById(iddd).options.length = 0;
    document.getElementById(idMMyyyy).options.length = 0;

    from_dd_ISO = ISO_date(from_dd);
    from_MM_ISO = ISO_date(from_MM);
    from_yyyy_ISO = ISO_date(from_yyyy);
    to_dd_ISO = ISO_date(to_dd);
    to_MM_ISO = ISO_date(to_MM);
    to_yyyy_ISO = ISO_date(to_yyyy);

    if (from_yyyy_ISO + from_MM_ISO + from_dd_ISO > to_yyyy_ISO + to_MM_ISO + to_dd_ISO) {
        return;
    }
    else {
        for (k = from_yyyy; k <= to_yyyy; k++) {
            from_MM_sel = 1;
            to_MM_sel = 12;
            if (k == from_yyyy) { from_MM_sel = from_MM; }
            if (k == to_yyyy) { to_MM_sel = to_MM; }
            for (j = from_MM_sel; j <= to_MM_sel; j++) {
                generate_select(j + '.' + k, j + '.' + k, sel_MM + '.' + sel_yyyy, idMMyyyy)
            }
        }
        if (from_yyyy == get_value(idMMyyyy).split('.')[1] && from_MM == get_value(idMMyyyy).split('.')[0]) {
            from_dd_sel = from_dd;
        }
        else {
            from_dd_sel = 1;
        }
        if (to_yyyy == get_value(idMMyyyy).split('.')[1] && to_MM == get_value(idMMyyyy).split('.')[0]) {
            to_dd_sel = to_dd;
        }
        else {
            to_dd_sel = tblDayEnds[sel_yyyy % 4][sel_MM - 1];
        }
        generate_select(from_dd_sel, to_dd_sel, sel_dd, iddd);
    }
}

function generate_select(from, to, sel, id) {
    for (i = from; i <= to; i++) {
        text = ISO_date(i);
        document.getElementById(id).options[document.getElementById(id).options.length] = new Option(text, text);
        if (ISO_date(text) == ISO_date(sel)) {
            document.getElementById(id).options[document.getElementById(id).options.length - 1].selected = true
        }
    }
}

function ISO_date(int_number) {
    if (int_number.length != undefined) {
        if (int_number.indexOf('.') == -1) {
            if (int_number.length < 2) {
                int_number = '0' + int_number;
            }
        }
        else {
            if (int_number.split('.')[0].length < 2) {
                int_number = '0' + int_number;
            }
        }
    }
    else {
        if (int_number < 10) {
            int_number = '0' + int_number;
        }
    }
    return int_number;
}

function get_value(name) {
    return document.getElementById(name).options[document.getElementById(name).options.selectedIndex].value;
}

function FillSelects(startd, startm, starty, endd, endm, endy, selectd, selectm, selecty, dateddInputName, dateMMyyyyInputName) {
    var dd = selectd;
    var MMyyyy = selectm + "." + selecty;
    var currentDateFromMMyyyy = document.getElementById(dateMMyyyyInputName);
    var currentDateFromdd = document.getElementById(dateddInputName);
    for (var i = 0; i < currentDateFromMMyyyy.options.length; i++) {
        if (currentDateFromMMyyyy.options[i].value == MMyyyy) {
            currentDateFromMMyyyy.selectedIndex = i;
        }
    }
    change_date(startd, startm, starty, endd, endm, endy, selectd, selectm, selecty, dateddInputName, dateMMyyyyInputName);
    for (var j = 0; j < currentDateFromdd.options.length; j++) {
        if (currentDateFromdd.options[j].value == dd) {
            currentDateFromdd.selectedIndex = j;
        }
    }
    document.getElementById(dateddInputName).value = dd;
    document.getElementById(dateMMyyyyInputName).value = MMyyyy;
}