var months = [ "januari", "februari", "maart",
               "april", "mei", "juni", "juli",
               "augustus", "september", "oktober",
               "november", "december" ];

function updateDates( obj, type ) {
    switch( type ) {
        case "day"      : fillDays( obj );
                          break;
        case "week"     : fillWeeks( obj );
                          break;
        case "month"    : fillMonths( obj );
                          break;
        default         : fillDays( obj );
                          break;
   }
}

function fillDays( obj ) {
    obj.options.length = 0;
    now = new Date;
    for( x = 1; x <= now.getDate(); x++ ) {
        obj.options[x-1] = new Option( x + " " + ( months[now.getMonth()] ), x );
    }
//    obj.options[obj.options.length-1].selected = true;
    obj.options.selectedIndex = obj.options.length-1;
}

function fillWeeks( obj ) {
    var now = new Date;
    curWeek = getWeek( y2k( now.getYear() ), now.getMonth(), now.getDate() );
    obj.options.length = 0;
    for( x = curWeek-3; x <= curWeek+1; x++ ) {
        weekstart = getDate( x );
        var startdate = weekstart.getDate() + "/" + ( weekstart.getMonth() + 1 );
        var weekend   = new Date( weekstart.getYear(), weekstart.getMonth(), weekstart.getDate() + 6 );
        var enddate   = weekend.getDate() + "/" + ( weekend.getMonth() + 1 );
        obj.options[obj.options.length] = new Option( "Week " + x + " (" + startdate + " - " + enddate + ")", x );
    }
    obj.options[obj.options.length-1].selected = true;
}

function fillMonths( obj ) {
    obj.options.length = 0;
    now = new Date;
    thismonth = now.getMonth() + 1;
    for( x = 0; x < thismonth; x++ ) {
        obj.options[x] = new Option( months[x], x+1 );
    }
    obj.options[obj.options.length-1].selected = true;
}

function y2k( number ) { return ( number < 1000 ) ? number + 1900 : number; }

function getWeek(year,month,day) {
    var when = new Date(year,month,day);
    var newYear = new Date(year,0,1);
    var offset = 7 + 1 - newYear.getDay();
    if (offset == 8) offset = 1;
    var daynum = ((Date.UTC(y2k(year),when.getMonth(),when.getDate(),0,0,0) - Date.UTC(y2k(year),0,1,0,0,0)) /1000/60/60/24) + 1;
    var weeknum = Math.floor((daynum-offset+7)/7);
    if (weeknum == 0) {
        year--;
        var prevNewYear = new Date(year,0,1);
        var prevOffset = 7 + 1 - prevNewYear.getDay();
        if (prevOffset == 2 || prevOffset == 8) weeknum = 53; else weeknum = 52;
    }
    return weeknum;
}

function getDate( week ) {
    week--;
    var now = new Date();
    var curDoy = week * 7;      // Current Day Of Year
    var curMonth = Math.ceil( curDoy / 30 ); // Estimate current month
    var curDay = curDoy - curMonth * 30;
    var when = new Date( now.getYear(), curMonth, curDay );
    if( getWeek( when.getYear(), when.getMonth(), when.getDate() ) >= week ) {
        while( getWeek( when.getYear(), when.getMonth(), when.getDate() ) >= week ) {
            if( when.getDate() <= 1 ) {
                newDay = 31;
                newMonth = when.getMonth() - 2;
            }
            else {
                newDay = when.getDate() - 1;
                newMonth = when.getMonth();
            }
            when = new Date( when.getYear(), newMonth, newDay );
        }
        when = new Date( when.getYear(), when.getMonth(), when.getDate() + 2 );
    }
    else {
        while( getWeek( when.getYear(), when.getMonth(), when.getDate() ) < week ) {
            if( when.getDate() > 30 ) {
                newDay = 1;
                newMonth = when.getMonth() + 1;
            }
            else {
                newDay = when.getDate() + 1;
                newMonth = when.getMonth();
            }
            when = new Date( when.getYear(), newMonth, newDay + 1 );    // +1 is correction for weekstart on
                                                                        // Monday instead of Sunday
        }
    }
    return when;
}


