function getDay(number) {
    if( number == 1 )
        var o = document.getElementById("takeoffday");
    if( number == 2 )
        var o = document.getElementById("arrivalday");

    return parseInt(o.options[o.selectedIndex].value, 10 );
}

function getMonthYear(number) {
    if( number == 1 )
        var o = document.getElementById("takeoffmonthyear");
    if( number == 2 )
        var o = document.getElementById("arrivalmonthyear");

    return o.options[o.selectedIndex].value;
}

function setDay(number, value) {
    if( number == 1 )
        var o = document.getElementById("takeoffday");
    if( number == 2 )
        var o = document.getElementById("arrivalday");

    for (var i=0;i<o.options.length;i++) {
        if (o.options[i].value == value) {
            o.selectedIndex = i;
            return true;
        }
    }
    return false;
}

function setMonthYear(number, value) {
    if( number == 1 )
        var o = document.getElementById("takeoffmonthyear");
    if( number == 2 )
        var o = document.getElementById("arrivalmonthyear");

    for (var i=0;i<o.options.length;i++) {
        if (o.options[i].value == value) {
            o.selectedIndex = i;
            return true;
        }
    }
    return false;

}

function setWeekday(number, value) {
//     if(value[1].substring(0,1)=='0')
//         value[1] = value[1].substring(1,2);
//     if(value[0].substring(0,1)=='0')
//         value[0] = value[0].substring(1,2);

    var date = new Date(parseInt(value[2],10), parseInt(value[1],10)-1, parseInt(value[0],10));

    var weekday = new Array(special_dayNames[6], special_dayNames[0], special_dayNames[1], special_dayNames[2], special_dayNames[3], special_dayNames[4], special_dayNames[5]);
    //var weekday = new Array("So", "Mo", "Di", "Mi", "Do", "Fr", "Sa");

    var day = date.getDay();
    var month = date.getMonth();
    var year = date.getFullYear();
    var o = document.getElementById("takeoffweekday_"+number);
    if( o ) {
        o.innerHTML = weekday[day];
    }
}

function setDuration() {

    var arrivalDay          = String(getDay(1));
    var arrivalMonthYear    = String(getMonthYear(1));
    var arrivalMonth        = arrivalMonthYear.substring(0,2);
    var arrivalYear         = arrivalMonthYear.substring(3,7);

    var departureDay        = String(getDay(2));
    var departureMonthYear  = String(getMonthYear(2));
    var departureMonth      = departureMonthYear.substring(0,2);
    var departureYear       = departureMonthYear.substring(3,7);

    if(arrivalDay.substring(0,1)=='0')
        arrivalDay = arrivalDay.substring(1,2);
    if(arrivalMonth.substring(0,1)=='0')
        arrivalMonth = arrivalMonth.substring(1,2);

    if(departureDay.substring(0,1)=='0')
        departureDay = departureDay.substring(1,2);
    if(departureMonth.substring(0,1)=='0')
        departureMonth = departureMonth.substring(1,2);

    //alert("arrivalMonth: "+(arrivalMonth-1)+"\n departureMonth: "+(departureMonth-1));

    var arrivalTimestamp    = new Date( arrivalYear, (arrivalMonth-1), arrivalDay );
    var departureTimestamp  = new Date( departureYear, (departureMonth-1), departureDay );

    var duration            = (departureTimestamp-arrivalTimestamp)/1000/60/60/24;

    var o = document.getElementById("duration");
    if( o ) {
        if( parseInt(Math.round(duration)) == 1 ) {
            o.innerHTML = String((Math.round(duration)))+" "+day1;
        } else {
            o.innerHTML = String((Math.round(duration)))+" "+day2;
        }
    }
}

function isLeapYear(year) {
    if( (year % 4 == 0) && ( ( !(year % 100 == 0)) || (year % 400 == 0) ) )
        return true;
    else
        return false;
}


function daysInMonth(month,year) {
    switch(parseInt(month,10)) {
        case 1 :
        case 3 :
        case 5 :
        case 7 :
        case 8 :
        case 10 :
        case 12 :
            return 31;
        break;

        case 4 :
        case 6 :
        case 9 :
        case 11 :
            return 30;
        break;
        case 2 :
            if( isLeapYear(year) )
                return 29;
            else
                return 28;
        break;
        default:
            return false;
        break;
    }
}

function addDaysToISO(days, date) {
    var pattern = /^([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})$/;
    var match = pattern.exec(date);

//     if(match[3].substring(0,1)=='0')
//         match[3] = match[3].substring(1,2);

//     if(match[2].substring(0,1)=='0')
//         match[2] = match[2].substring(1,2);

    var day     = parseInt(match[3],10);
    var month   = parseInt(match[2],10);
    var year    = parseInt(match[1],10);
    var days    = parseInt(days);
    var from = new Date(year,month,day);
    var maxdays = daysInMonth(month,year);

    /**
    var fromtimestamp = from.getTime();
    var to = new Date(fromtimestamp+(days*24*60*60*1000));
    var day     = to.getDate();
    var month   = to.getMonth()+1;
    var year    = to.getYear();
    if(year<999) {
        year    += 1900;
    }
    /**/
    if( (day+days)>maxdays ) {
        if( (month+1)>12 ) {
            year += 1;
            month = 1;
        } else {
            month += 1;
        }
        day = ((day+days)-maxdays);
    } else {
        day = (day+days);
    }
    /**/
    if(month<10)
        month = "0"+month;

    if(day<10)
        day = "0"+day;

    //alert("day: "+day+"\n month: "+month+"\n year: "+year+"\n days: "+days);

    return year+'-'+month+'-'+day;
}

function checkDates(number) {

    var now = new Date();
    var nowDay = parseInt(now.getDate()+3,10);
    if(nowDay<10)
        nowDay = '0'+nowDay;
    var nowMonth = parseInt(now.getMonth(),10)+1;
    if(nowMonth<10)
        nowMonth = '0'+nowMonth;

    var nowYear = parseInt(now.getFullYear(),10);

    var aDate = new Array();
    aDate[0]        = nowYear+''+nowMonth+''+nowDay

    for( var i=1;i<=legCnt;i++ ) {
        var day         = getDay(i);

        var monthYear   = getMonthYear(i);
        var month       = monthYear.substring(0,2);
        if(month.substring(0,1)=='0')
            month = parseInt(month.substring(1,2),10);

        var year        = monthYear.substring(3,7);
        var maxdays     = daysInMonth(month,year);

        /**/
        if( day>maxdays ) {
            if( (month+1)>12 ) {
                year += 1;
                month = 1;
            } else {
                month += 1;
            }
            day = (day-maxdays);
        }

        if(day<10)
            day = "0"+day;

        if(month<10)
            month = '0'+month;

        aDate[i]        = year+''+month+''+day;
    }

    //alert( aDate );

    var first           = aDate[0];
    if( dayDifference )
        var firstPlusXDays  = addDaysToISO(dayDifference, first.substr(0,4)+"-"+first.substr(4,2)+"-"+first.substr(6,2));
    else
        var firstPlusXDays  = addDaysToISO(0, first.substr(0,4)+"-"+first.substr(4,2)+"-"+first.substr(6,2));

        firstPlusXDays  = parseInt((firstPlusXDays.substr(0,4)+""+firstPlusXDays.substr(5,2)+""+firstPlusXDays.substr(8,2)),10);

    var selected        = aDate[number];

    for (var i = 1; i < aDate.length; i++) {
        var current = aDate[i];
        var currentPlusXDays = addDaysToISO(dayDifference, current.substr(0,4)+"-"+current.substr(4,2)+"-"+current.substr(6,2));
            currentPlusXDays = parseInt((currentPlusXDays.substr(0,4)+""+currentPlusXDays.substr(5,2)+""+currentPlusXDays.substr(8,2)),10);

        if( i==1 && parseInt(current,10) < parseInt(first,10) ) {
            //alert("current: "+current+"\n first: "+first+"\n firstPlusXDays: "+firstPlusXDays);
            aDate[i] = firstPlusXDays;
            current  = firstPlusXDays;
        }
        datePlusXDays = String(aDate[i-1]);
        var datePlusXDays = addDaysToISO(dayDifference, datePlusXDays.substr(0,4)+"-"+datePlusXDays.substr(4,2)+"-"+datePlusXDays.substr(6,2));
            datePlusXDays = parseInt((datePlusXDays.substr(0,4)+""+datePlusXDays.substr(5,2)+""+datePlusXDays.substr(8,2)),10);

        if( parseInt(current,10) < parseInt(aDate[i-1],10) ) {
            //alert("current: "+current+"\n aDate: "+aDate[i-1]+"\n datePlusXDays: "+datePlusXDays+"\n dayDifference: "+dayDifference);
            aDate[i] = datePlusXDays;
            //current  = datePlusXDays;
        }
    }

    for (var i = 1; i < aDate.length; i++) {
        var string = String(aDate[i]);

        var day     = string.substring(6,8);
        /**/
        if(day.substring(0,1)=='0')
            day = day.substring(1,2);
        /**/
        var month   = string.substring(4,6);
        /*
        if(month.substring(0,1)=='0')
            month = month.substring(1,2);
        */
        var year    = string.substring(0,4);

        eval('setDay("'+i+'","'+day+'");');
        eval('setMonthYear("'+i+'","'+month+'-'+year+'");');
        eval('setWeekday("'+i+'",["'+day+'","'+month+'","'+year+'"]);');
    }
    setDuration();
}

function handleCalendarSelect(number,type,args,obj) {

    var dates       = args[0];
    var date        = dates[0];
    var year        = parseInt(date[0],10);
    var month       = parseInt(date[1],10);
    var day         = parseInt(date[2],10);
/*
    if(day<10)
        day = '0'+day;
*/
    if(month<10)
        month = '0'+month;

    var monthYear   = month+'-'+year;

    //alert("day: "+day+"\n month: "+month+"\n year: "+year+"\n number: "+number);

    eval('setDay("'+number+'","'+day+'");');
    eval('setMonthYear("'+number+'","'+month+'-'+year+'");');
    eval('YAHOO.flight.calendar.cal'+number+'.hide();');
    eval('calendar'+number+'status = "closed";');
    checkDates(number);
}

function handleCalendar1Select(type,args,obj) {
    handleCalendarSelect('1',type,args,obj);
}
function handleCalendar2Select(type,args,obj) {
    handleCalendarSelect('2',type,args,obj);
}
function handleCalendar3Select(type,args,obj) {
    handleCalendarSelect('3',type,args,obj);
}
function handleCalendar4Select(type,args,obj) {
    handleCalendarSelect('4',type,args,obj);
}
function handleCalendar5Select(type,args,obj) {
    handleCalendarSelect('5',type,args,obj);
}
function handleCalendar6Select(type,args,obj) {
    handleCalendarSelect('6',type,args,obj);
}
function handleCalendar7Select(type,args,obj) {
    handleCalendarSelect('7',type,args,obj);
}
function handleCalendar8Select(type,args,obj) {
    handleCalendarSelect('8',type,args,obj);
}
function handleCalendar9Select(type,args,obj) {
    handleCalendarSelect('9',type,args,obj);
}

function updateCalendar(number) {

    var day         = getDay(number);

    day = String(day);
    if( day.substring(0,1)=='0' )
        day = day.substring(1,2);

    var monthYear   = getMonthYear(number);
    var sMonthYear  = String(monthYear);
    var aMonthYear  = sMonthYear.split("-");

    if( aMonthYear[0].substring(0,1)=='0' )
        aMonthYear[0] = aMonthYear[0].substring(1,2);

    var month       = parseInt(aMonthYear[0],10);
    var year        = parseInt(aMonthYear[1],10);

    if (! isNaN(month) && ! isNaN(day) && ! isNaN(year)) {
        var date = month + "/" + day + "/" + year;

        eval('YAHOO.flight.calendar.cal'+number+'.select("'+date+'");');
        eval('YAHOO.flight.calendar.cal'+number+'.cfg.setProperty("pagedate", "'+month+"/"+year+'");');
        eval('YAHOO.flight.calendar.cal'+number+'.render();');
    }
    checkDates(number);
}
function updateCalendar1() {
    updateCalendar(1);
}
function updateCalendar2() {
    updateCalendar(2);
}
function updateCalendar3() {
    updateCalendar(3);
}
function updateCalendar4() {
    updateCalendar(4);
}
function updateCalendar5() {
    updateCalendar(5);
}
function updateCalendar6() {
    updateCalendar(6);
}
function updateCalendar7() {
    updateCalendar(7);
}
function updateCalendar8() {
    updateCalendar(8);
}
function updateCalendar9() {
    updateCalendar(9);
}

YAHOO.namespace("flight.calendar");

for( var i=1;i<=legCnt;i++ ) {
    eval('var calendar'+i+'status = "closed";');
}

function showCalendar(number) {

    //alert("calendar "+number+" => "+eval('calendar'+number+'status'));

    if( eval('calendar'+number+'status=="open"') ) {

        eval('YAHOO.flight.calendar.cal'+number+'.hide();');
        eval('calendar'+number+'status = "closed";');
    } else {

        updateCalendar(number);
        eval('YAHOO.flight.calendar.cal'+number+'.show();');
        eval('calendar'+number+'status = "open";');
    }
}
/**/
function initCalendar() {
    var aCalendar = new Array();
    var oNowDate = new Date();
    var oFromDate = new Date( oNowDate.getFullYear(), oNowDate.getMonth()+1, oNowDate.getDate()+3 );
    var oToDate = new Date( oFromDate.getFullYear(), oFromDate.getMonth()+11, oFromDate.getDate()-3 );
    for( var i=1;i<=legCnt;i++ ) {
        if( !document.getElementById('calendarContainer'+i) )
            continue;

        eval('YAHOO.flight.calendar.cal'+i+' = new YAHOO.widget.Calendar ( "cal'+i+'", "calendarContainer'+i+'" , {PAGES:1, LOCALE_WEEKDAYS : "short", START_WEEKDAY : 1, MULTI_SELECT : false, mindate: "'+oFromDate.getMonth()+'/'+oFromDate.getDate()+'/'+oFromDate.getFullYear()+'",maxdate: "'+oToDate.getMonth()+'/'+oToDate.getDate()+'/'+oToDate.getFullYear()+'"});');
        eval('YAHOO.flight.calendar.cal'+i+'.cfg.setProperty("MONTHS_SHORT",   ["'+special_months[0]+'", "'+special_months[1]+'", "'+special_months[2]+'", "'+special_months[3]+'", "'+special_months[4]+'", "'+special_months[5]+'", "'+special_months[6]+'", "'+special_months[7]+'", "'+special_months[8]+'", "'+special_months[9]+'", "'+special_months[10]+'", "'+special_months[11]+'"]);');
        eval('YAHOO.flight.calendar.cal'+i+'.cfg.setProperty("MONTHS_LONG",   ["'+special_months[0]+'", "'+special_months[1]+'", "'+special_months[2]+'", "'+special_months[3]+'", "'+special_months[4]+'", "'+special_months[5]+'", "'+special_months[6]+'", "'+special_months[7]+'", "'+special_months[8]+'", "'+special_months[9]+'", "'+special_months[10]+'", "'+special_months[11]+'"]);');
        //eval('YAHOO.flight.calendar.cal'+i+'.cfg.setProperty("MONTHS_LONG",    ["Januar", "Februar", "M\u00E4rz", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]);');
        eval('YAHOO.flight.calendar.cal'+i+'.cfg.setProperty("WEEKDAYS_1CHAR", ["S", "M", "D", "M", "D", "F", "S"]);');
        eval('YAHOO.flight.calendar.cal'+i+'.cfg.setProperty("WEEKDAYS_SHORT", ["'+special_dayNames[6]+'", "'+special_dayNames[0]+'", "'+special_dayNames[1]+'", "'+special_dayNames[2]+'", "'+special_dayNames[3]+'", "'+special_dayNames[4]+'", "'+special_dayNames[5]+'"]);');
        eval('YAHOO.flight.calendar.cal'+i+'.cfg.setProperty("WEEKDAYS_MEDIUM",["Son", "Mon", "Die", "Mit", "Don", "Fre", "Sam"]);');
        eval('YAHOO.flight.calendar.cal'+i+'.cfg.setProperty("WEEKDAYS_LONG",  ["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"]);');
        eval('YAHOO.flight.calendar.cal'+i+'.selectEvent.subscribe(handleCalendar'+i+'Select, YAHOO.flight.calendar.cal'+i+', true);');
        eval('YAHOO.util.Event.addListener(["takeoffday_'+i+'","takeoffmonthyear_'+i+'"], "change", updateCalendar'+i+');');
        eval('YAHOO.flight.calendar.cal'+i+'.render();');
        eval('YAHOO.flight.calendar.cal'+i+'.hide();');
    }
}
YAHOO.util.Event.addListener(window, "load", initCalendar);
/**/