///////////////////////////////////////////
// Calendar v1.0.0                       //
// (c) 2006 frank + sasan          //
///////////////////////////////////////////
// Contact me: info@ypsilon.net        //
// if you want to use this script        //
// or need something else for your site. //
///////////////////////////////////////////

var months = new Array('january','february','march','april','may','june','july','august','september','october','november','december');
var dayNames = new Array('mo','tu','we','th','fr','sa','su');
var sundayFirst = false;
var charSet = 'iso-8859-1';
var linkcss = '+stylesheet+';

var NS4 = false;
var userFunc = null;
var win = null;
    
// Mausposition
var posx = 0;
var posy = 0;

// Function returns an array with month and year of previons month
function getPrevMonth(month, year) {
    return((month==1)?new Array(12,year-1):new Array(month-1,year));
};

// Function returns an array with month and year of next month
function getNextMonth(month, year) {
    return((month==12)?new Array(1,year+1):new Array(month+1,year));
};

// Function returns number of days within given month and year
function getDaysNum(month, year) {
    var numDays = new Array(31,0,31,30,31,30,31,31,30,31,30,31);
    if (numDays[month-1]!=0)
        return(numDays[month-1]);
    else
        return((isLeapYear(year))?29:28);
};

// Function returns TRUE if given year ia leap, FALSE otherwise
function isLeapYear(year) {
    return(((year % 4)==0) && !(((year % 100)==0) && ((year % 400)!=0)));
};

// Display calendar table for current month and year
function displayCalendar(ident){
    if(ident == 'DateHandler1'){
        curMonth = curMonth1;
        curYear = curYear1;
        curDaySel = curDay1;
    } else if(ident == 'DateHandler2'){
        curMonth = curMonth2;
        curYear = curYear2;
        curDaySel = curDay2;
    }
    // Create array of days, being displayed for current month
    var curDay = 0;
    var days = new Array();
    var date = new Date(curYear,curMonth-1,1);
    var fDay = date.getDay();
    if (!sundayFirst) {
        if (--fDay<0)
            fDay+=7;
        fDay = fDay % 7;
    }

    if (fDay!=0) {
        var pMonth = getPrevMonth(curMonth,curYear);
        var numDays = getDaysNum(pMonth[0],pMonth[1]);
        for (i=fDay;i>0;i--)
            days[curDay++] = numDays-i+1;
    };
    var numDays = getDaysNum(curMonth,curYear);
    for (i=1;i<=numDays;i++)
        days[curDay++] = i;
    var day = 1;
    while((curDay % 7)!=0)
        days[curDay++] = day++;

    // Create HTML code for diplaying calendar
    if (typeof(special_months) != "undefined" && typeof(special_months[curMonth-1]) == "string") momo = special_months[curMonth-1];
    else momo = months[curMonth-1];

    var html = '<html><head><title>Kalender</title><meta http-equiv="Content-Type" content="text/html; charset='+charSet+'">\n';
    var font = 'font-family: Arial, Helvetica, sans-serif; font-size: 11px; font-weight: normal; text-decoration: none; text-align: center; ';
    if (!NS4)
    html = html+'<link rel="stylesheet" type="text/css" href="'+stylesheet+'" >\n';
    html = html+'</head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">\n';
    html = html+'<div align="center"><table class="rahmen" width="100%" height="100%" border="0" cellspacing="0" cellpadding="0" align="center" border=0 style="padding:0px">\n';
    html = html+'<tr class="tdtop"><td class="tdtop" height="22"><a href="#" class="textkopf" onClick="return(window.opener.prevMonth(\''+ident+'\',\''+curMonth+'\',\''+curYear+'\'))"><img src="include/flt/amex/graphics/prevMonth.gif" border="0"></a></td>'+
                '<td colspan="5" align="center" class="tdtop" nowrap><span class="textkopf"  style=" text-transform:capitalize">'+momo+' '+curYear+
                '</span></td><td class="tdtop"><a href="#" class="nav" onClick="return(window.opener.nextMonth(\''+ident+'\',\''+curMonth+'\',\''+curYear+'\'))"><img src="include/flt/amex/graphics/nextMonth.gif" border="0"></a></td></tr>\n';

    html = html+'<tr>\n';
    if (typeof(firstWeekDay)== "undefined") {
        var index = (sundayFirst)?6:0;
    } else {
        index = parseInt(firstWeekDay);
        index = (index>=0 && index <=6)?index:6;
    }

    for (var i=0;i<7;i++) {
        if (typeof(special_dayNames) != "undefined" && typeof(special_dayNames[index]) == "string") {
            html = html+'<td>'+special_dayNames[index]+'</td>\n';
        } else {
            html = html+'<td>'+dayNames[index]+'</td>\n';
        }
        index++;

        index = index % 7;
    };
    uhtml = html+'</tr>\n';
    date = new Date();
    day = ((date.getMonth()==(curMonth-1)) && ((date.getFullYear()==curYear)))?date.getDate():-1;
    curDay = 0;
    var isCurMonth = false;

    while(curDay<days.length) {
        if ((curDay % 7)==0)
            html = html+'<tr>\n';
        if (days[curDay]==1)
            isCurMonth = !isCurMonth;
        dayHTML = ((days[curDay]==day) && (NS4))?"<font color=\"#FF0000\"><b>"+days[curDay]+"</b></font>":days[curDay];
        if (isCurMonth)
            html = html+'<td align="center" valign="middle" class="aDay"><a href="#" class="'+((days[curDay]==curDaySel)?'curDay':'')+
                        '" onClick="return(window.opener.setDate('+days[curDay++]+'));">'+dayHTML+'</a></td>\n';
        else
            html = html+'<td align="center" class="day" style="padding:0px;vertical-align: middle;">'+days[curDay++]+'</td>\n';
        if ((curDay % 7)==0)
            html = html+'</tr>\n';
    };
    html = html+'</table></div>\n</body>\n</html>';
    win.document.open();
    win.document.write(html);
    win.document.close();
};

function prevMonth(ident,curMonth, curYear){
    var pMonth = getPrevMonth(curMonth,curYear);
    curMonth = pMonth[0];
    curYear = pMonth[1];
    if(ident == 'DateHandler1'){
        curMonth1 = curMonth;
        curYear1 = curYear;
    } else if(ident == 'DateHandler2'){
        curMonth2 = curMonth;
        curYear2 = curYear;
    }
    displayCalendar(ident);
    return(false);
};

function nextMonth(ident){
    var nMonth = getNextMonth(curMonth,curYear);
    curMonth = nMonth[0];
    curYear = nMonth[1];
    if(ident == 'DateHandler1'){
        curMonth1 = curMonth;
        curYear1 = curYear;
    } else if(ident == 'DateHandler2'){
        curMonth2 = curMonth;
        curYear2 = curYear;
    }
    displayCalendar(ident);
    return(false);
};

function setDate(day) {
    win.close();
    win = null;
    eval(userFunc+"("+(day-1)+","+(curMonth)+","+(curYear)+")");
    return(false);
};

// This function must be called to get calendar to work.
// At enter:
//   month        - default month (0..11) or NULL to use current month
//   year         - default year or NULL to use current year
//   callbackFunc - name of user function being called to provide selected date
//   winX         - X position of calendar window on screen (optional)
//   winY         - Y position of calendar window on screen (optional)
function getDate(month,year,callbackFunc,curMonth,curYear) {
    if(win != null){
        win.close();
        win = null;
    }
    NS4 = ((navigator.appName.indexOf('Netscape')!=-1) && (parseInt(navigator.appVersion)==4));
    var date = new Date();
    curMonth = (month)?parseInt(month):date.getMonth()+1;
    curYear = (year)?parseInt(year):date.getFullYear();
    winX = (getDate.arguments[3])?"left="+50000+",":"";
    winY = (getDate.arguments[4])?"top="+getDate.arguments[4]+",":"";
    userFunc = callbackFunc;
    X = posx + 50;
    Y = posy + 100;
    win = window.open("",callbackFunc,"dependent=yes,location=no,toolbar=no,status=no,menubar=no,scrollbars=0,resizable=no,width=215,height=190,top="+Y+",left="+X);
    displayCalendar(callbackFunc);
    return(false);
}

var jetzt = new Date();
var aktMon = jetzt.getMonth();


// handler for calendar
function DateHandler1(day,month,year) {
    curDay = day;
    curMonth = month;
    curYear = year;
    curDaySel1 = day;
    curMonth1 = month;
    curYear1 = year;

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

    var such = month + '-' + year;
    for(i = 0; i< document.MainForm.month_1.length; i++){
        if(document.MainForm.month_1.options[i].value == such){
            document.MainForm.month_1.selectedIndex = i;
            break;
        }
    }
    document.forms['MainForm']['day'].options[day].selected = true;
    dateCheck(document.MainForm.day, 'day');
    writeWochentag('takeoffday','takeoffmonthyear','takeoffweekday');
    writeDuration('takeoffday','takeoffmonthyear','arrivalday','arrivalmonthyear','duration');
}

function DateHandler2(day,month,year) {
    curDay = day;
    curMonth = month;
    curYear = year;
    curDaySel2 = day;
    curMonth2 = month;
    curYear2 = year;

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

    var such = month + '-' + year;
    for(i = 0; i< document.MainForm.month_2.length; i++){
        if(document.MainForm.month_2.options[i].value == such){
            document.MainForm.month_2.selectedIndex = i;
            break;
        }
    }
    document.forms['MainForm']['retDay'].options[day].selected = true;
    dateCheck(document.MainForm.retDay, 'retDay');
    writeWochentag('arrivalday','arrivalmonthyear','ankunftWochentag');
    writeDuration('takeoffday','takeoffmonthyear','arrivalday','arrivalmonthyear','duration');
}

// Wochentag bestimmen
function browser() {
  return(navigator.appName.lastIndexOf('scape') != -1 );
}
function isNavVersion4() {
  var majVers = parseInt(navigator.appVersion);
  return (browser() && majVers == 4);
}


var heuteWD = new Date();


function writeWochentag(daySelect, monthSelect, intoDiv) {
  var dayVal = parseInt(document.getElementById(daySelect).value,10);
  var myval = document.getElementById(monthSelect).value;
  var monthVal = parseInt(myval.substring(0,2),10);
  var yearVal  = parseInt(myval.substring(3),10);
  var d = new Date(yearVal, monthVal-1, dayVal);

  if (d.getTime() < (heuteWD.getTime()-86400000)) {
     document.getElementById(intoDiv).innerHTML=(invalidlytxt);
  } else {
     document.getElementById(intoDiv).innerHTML=wochentage[d.getDay()];
  }
}

function writeDuration(daySelect1,monthSelect1,daySelect2,monthSelect2,intoDiv) {
    var dayVal = parseInt(document.getElementById(daySelect1).value,10);
    var myval = document.getElementById(monthSelect1).value;
    var monthVal = parseInt(myval.substring(0,2),10) - 1;
    var yearVal  = parseInt(myval.substring(3),10);
    var d1 = new Date(yearVal, monthVal, dayVal);

    var dayVal = parseInt(document.getElementById(daySelect2).value,10);
    var myval = document.getElementById(monthSelect2).value;
    var monthVal = parseInt(myval.substring(0,2),10) - 1;
    var yearVal  = parseInt(myval.substring(3),10);
    var d2 = new Date(yearVal, monthVal, dayVal);

    var secondsPerDay = 24 * 60 * 60 * 1000;
    var difference = d2.getTime() - d1.getTime();
    if(difference >= 0){
        var days = Math.round(difference/secondsPerDay) + 1;
    }
    if(days <= 0){
        var days = 1;
    }

    if (days > 1) {
        var daystxt = days +(day2);
    } else { 
        var daystxt = days +(day1);
    }

    if (days >= 0) {
        document.getElementById(intoDiv).innerHTML= daystxt;
    } else {
        document.getElementById(intoDiv).innerHTML=(1 + (day1));
    }
}

function disable(){
    if (document.MainForm.onewayswitch[1].checked) {
        document.MainForm.retDay.disabled= true;
        document.MainForm.flystay.disabled= true;
        document.MainForm.flydrive.disabled= true;
        document.MainForm.month_2.disabled= true;
    }
}
function enable(){
    document.MainForm.retDay.disabled = false;
    document.MainForm.month_2.disabled = false;
    document.MainForm.flystay.disabled= false;
    document.MainForm.flydrive.disabled= false;
}



function MM_findObj(n, d) { 
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { 
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function getSelected(ref,sel){
   for(i=0;i<=ref.length;i++){
        if(ref.options[i].value == sel){
          return i;
        }
    }
    return 0;
}

function setCarrier(airline,elem) {
    document.forms['MainForm'][elem].value = airline;
}



var loop=null;
function dateCheck(fref, elem){
    var Offset = 7;
    form = fref.form;

    var monat1 = form.month_1.options[form.month_1.selectedIndex].value.split("-");
    var monat2 = form.month_2.options[form.month_2.selectedIndex].value.split("-");

    var datum1 = new Date(monat1[1],monat1[0]-1,parseInt(form.day.options[form.day.selectedIndex].value));
    var datum2 = new Date(monat2[1],monat2[0]-1,parseInt(form.retDay.options[form.retDay.selectedIndex].value));

    var heute = new Date();
    heute.setHours(0);
    heute.setMinutes(0);
    if(datum1.getTime() < heute.getTime() || datum2.getTime() < heute.getTime()){
        form.month_1.selectedIndex = 0;
        form.day.selectedIndex = heute.getDate() - 1;
        elem = 'day';
    }


    var max_days = getMaxDays(monat1[0]);
    switch(elem){
        case "day":
        case "month_1":
            if(datum1.getTime() > datum2.getTime()){
                if(datum1.getDate() != form.day.options[form.day.selectedIndex].value){
                    form.day.selectedIndex = datum1.getDate() - 1;
                    var monat = datum1.getMonth() + 1;
                    var year = datum1.getYear();
                    if(monat < 10){
                        monat = '0' + monat;
                    }
                    var such = monat + '-' + year;
                    for(i = 0; i< form.month_1.length; i++){
                        if(form.month_1.options[i].value == such){
                            form.month_1.selectedIndex = i;
                            break;
                        }
                    }
                }

                if((form.day.selectedIndex + Offset + 1) > max_days){
                    if(typeof form.month_2.options[form.month_1.selectedIndex + 1] != 'undefined' && form.month_2.options[form.month_1.selectedIndex + 1] != null){
                        form.month_2.selectedIndex = form.month_1.selectedIndex + 1;
                        form.retDay.selectedIndex = ( form.day.selectedIndex + Offset) - max_days;
                    } else {
                        form.month_2.selectedIndex = form.month_2.length - 1;
                        form.retDay.selectedIndex = form.retDay.length - 1;
                    }
                } else {
                    form.month_2.selectedIndex = form.month_1.selectedIndex;
                    form.retDay.selectedIndex = form.day.selectedIndex + Offset;
                }
            }
        break;

        case "retDay":
        case "month_2":
            if(datum2.getTime() < datum1.getTime()){
                if((form.retDay.selectedIndex - Offset + 1) < 1){
                    if((form.month_2.selectedIndex - 1) > 0){
                        form.month_1.selectedIndex = form.month_2.selectedIndex - 1;
                        form.day.selectedIndex = getMaxDays(monat1[0] - 1) + ( form.retDay.selectedIndex - Offset);
                    } else {
                        form.month_1.selectedIndex = 0;
                        form.day.selectedIndex = 0;
                    }
                } else {
                    form.month_1.selectedIndex = form.month_2.selectedIndex;
                    form.day.selectedIndex = form.retDay.selectedIndex - Offset;
                }
            }
        break;
    }
    writeWochentag('takeoffday','takeoffmonthyear','takeoffweekday');
    writeWochentag('arrivalday','arrivalmonthyear','ankunftWochentag');


    var monat1 = form.month_1.options[form.month_1.selectedIndex].value.split("-");
    var monat2 = form.month_2.options[form.month_2.selectedIndex].value.split("-");
    var datum1 = new Date(monat1[1],monat1[0]-1,parseInt(form.day.options[form.day.selectedIndex].value));
    var datum2 = new Date(monat2[1],monat2[0]-1,parseInt(form.retDay.options[form.retDay.selectedIndex].value));
    datum1.setHours(23);
    datum1.setMinutes(59);
    datum2.setHours(23);
    datum2.setMinutes(59);

    curDay1 = datum1.getDate();
    curMonth1 = datum1.getMonth() +1;
    if(datum1.getYear() < 1900){
        curYear1 = 1900 + datum1.getYear();
    } else {
        curYear1 = datum1.getYear();
    }
    curDay2 = datum2.getDate();
    curMonth2 = datum2.getMonth() +1;
    if(datum2.getYear() < 1900){
        curYear2 = 1900 + datum2.getYear();
    } else {
        curYear2 = datum2.getYear();
    }
    
    if(datum1.getTime() < heute.getTime() || datum2.getTime() < heute.getTime()){
        if(loop == null){
            loop=true;
            dateCheck(fref,'day',true);
        }
    }
    loop=null;
    writeDuration('takeoffday','takeoffmonthyear','arrivalday','arrivalmonthyear','duration');
}

function getMaxDays(myMonat){
    var days = 31;
    switch(myMonat){
        case "1":
        case "3":
        case "5":
        case "7":
        case "8":
        case "10":
        case "12":
        case "01":
        case "03":
        case "05":
        case "07":
        case "08":
            days = 31;
            break;

        case "4":
        case "6":
        case "9":
        case "11":  
        case "04":
        case "06":
        case "09":
            days = 30;
            break;

        case "2":   
        case "02":   
            if((myMonat % 4) == 0){
                days = 29;
            } else { 
                days = 28;
            }
        break;
    }
    return days;
}


function handleMouseMove(ereignis) {
    posx = (window.event) ? (window.event.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft)) : ereignis.pageX;
    posy = (window.event) ? (window.event.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop)) : ereignis.pageY;
}
document.onmousemove = handleMouseMove;

