//var sImgPath = "assets/images/";
var sImgPath = "/portal/ocean24de/image/cms/";

var LANGUAGE = "DE";
var O24_HANDLING_DAYS = 5;
var DATE_WD = new Array("So","Mo","Di","Mi","Do","Fr","Sa");
var DATE_MMM = new Array("Jan","Feb","M&auml;r","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez");
var DATE_MMMM = new Array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
var CALENDAR_CAPTION = new Array("Hinfahrt","R&uuml;ckfahrt","Reisedatum");
var TIMETABLE_CAPTION = new Array("HINFAHRT","R&Uuml;CKFAHRT","Reisedatum");
var DATE_FORMAT_INPUT = "TT.MM.JJJJ";
var ERROR_DATE_INPUT = "Falsches Datumsformat. Erwartet wird " + DATE_FORMAT_INPUT + "."

//iType 0-hin, 1-zurück
function isTrip(){
var box_date_return = byId('box_date_return');
    if (byId('timetable_oneway').checked) {
        box_date_return.style.display = "none";
//box_date_return.disabled="disabled";
        return true;
    }
    else {
//box_date_return.disabled="";
        box_date_return.style.display = "block";
    }
    return false;
}
function viewCalendar(iType){
    if((new routeCalendar(iType)).isOpen()) return;
    
    if((iType==0)&&(isTrip())){
        (new routeCalendar(2)).view();
    }
    else{
        (new routeCalendar(iType)).view();
    }
}
function routeCalendar(iType){
    iType = parseInt(iType); // ensure to use as integer and not as string!
    
       var sFromId = 'timetable.outboundTripDate';
       var sThruId = 'timetable.inboundTripDate';
    var dNow;
    var dMoveMin;
    var dMoveMax;
    var dBookMinDay;
    var dBookMin;
    var dBookMax;
    var dRun;
    var dFrom;
    var dThru;
    var bIsFrom;
    var bIsThru;
    var sTargetId;
    if(iType==1){
      sTargetId = sThruId;
    }
    else{
      sTargetId = sFromId;
    }
  var oCalendar = byId(sTargetId+'Select');
  var oTarget = byId(sTargetId);
 
  var isDateOK = function (YYYY, M, D){
    var d = new Date(YYYY, M, D);
    return (d.getDate()==D)&&(d.getMonth()==M)&&(d.getFullYear()==YYYY);
  }
  var getLastMonthDay =function (YYYY, M){
    if(isDateOK(YYYY, M, 31)) return 31;
    if(isDateOK(YYYY, M, 30)) return 30;
    if(isDateOK(YYYY, M, 29)) return 29;
    return 28;
  }
  var getMonthFirstDayX = function (d,x)
    {return (new Date(d.getFullYear(), d.getMonth()+x, 1));}
  var getMonthFirstDay = function (d)
    {return (new Date(d.getFullYear(), d.getMonth(), 1));}
   var getDaysHtml = function(){
    
    var aDays = new Array();
    for(var iMonthCount=0; iMonthCount<3; iMonthCount++){
      aDays[iMonthCount] = new Array();
      for (var iWeek=0;iWeek<6;iWeek++){
        aDays[iMonthCount][iWeek] = new Array();
      }
  
      var dMonthFirstDay = getMonthFirstDayX(dRun,iMonthCount);
      var iMonth = dMonthFirstDay.getMonth();
      var iFullYear = dMonthFirstDay.getFullYear();
      var iMonthLastDay = getLastMonthDay(iFullYear,iMonth);
      
      var iFirstWeekDay = getGermanWeekDay(dMonthFirstDay);
    
      for (var iMonthDay = 0;iMonthDay<iMonthLastDay;iMonthDay++){
        var iWeek = 0;
        var iWeekDay = iMonthDay + iFirstWeekDay;
        while(iWeekDay > 6){
          iWeekDay-=7;
          iWeek++
        }
        aDays[iMonthCount][iWeek][iWeekDay]=new Array(iFullYear,iMonth+1,iMonthDay+1);
      }
    }
    var htm = "";
    for (var iWeek=0;iWeek<6;iWeek++){
      htm += "<tr class='calendar-days'>";
      for(var iMonthCount=0; iMonthCount<3; iMonthCount++){
        for(var iWeekDay=0;iWeekDay<7;iWeekDay++){
          var aDay = aDays[iMonthCount][iWeek][iWeekDay]
          if(aDay){
            var dDay = new Date(aDay[0],aDay[1]-1,aDay[2])
            if((dDay < dNow)||(dDay >= dBookMax)){                                                    //not available
              htm += "<td><a href='#' class='days-off'>"+aDay[2]+"</a></td>";                
            }
            else{
              if(dDay < dBookMinDay){                                                                //not allowed
                htm += "<td><a href='#' class='days-not'>"+aDay[2]+"</a></td>";
              }
              else{
                if((bIsFrom)&&(dDay.toGMTString()==dFrom.toGMTString())){                            //selected from
                  htm += "<td onClick='"+getSelectClick(aDay[0],aDay[1],aDay[2])+"'><a href='#' class='days-sel'>"+aDay[2]+"</a></td>";
                }
                else{
                  if((bIsThru)&&(dDay.toGMTString()==dThru.toGMTString())){                            //selected thru
                    htm += "<td onClick='"+getSelectClick(aDay[0],aDay[1],aDay[2])+"'><a href='#' class='days-sel'>"+aDay[2]+"</a></td>";
                  }
                  else{
                    if((bIsFrom)&&(bIsThru)&&(dDay>dFrom)&&(dDay<dThru)){
                      htm += "<td onClick='"+getSelectClick(aDay[0],aDay[1],aDay[2])+"'><a href='#' class='days-sel'>"+aDay[2]+"</a></td>";
                      }
                    else{
                      htm += "<td onClick='"+getSelectClick(aDay[0],aDay[1],aDay[2])+"'><a href='#' class='days-on'>"+aDay[2]+"</a></td>";
                    }
                  }
                }
              }
            }
          }
          else{
            htm += "<td><span class='days-empty'>&nbsp;</span></td>";
          }
        }
        if((iMonthCount==0)||(iMonthCount==1)){
          htm += "<td></td>";
        }
      }
      htm += "</tr>";
    }
    return htm;
  }
 
   var getDayCaptionHtml = function(){
    
    var htm = "";
    var htm2 = "";
    for(var i=0;i<7;i++){
      htm2 += "<th>"+DATE_WD[i]+"</td>";
    }
    htm += "<tr>";
    htm += "<td colspan='7' style='background-color: rgb(25, 52, 119); padding-right: 2px;' height='1'></td>";
    htm += "<td height='1'></td>";
    htm += "<td colspan='7' style='background-color: rgb(25, 52, 119); padding-right: 2px;' height='1'></td>";
    htm += "<td height='1'></td>";
    htm += "<td colspan='7' style='background-color: rgb(25, 52, 119); padding-right: 2px;' height='1'></td>";
    htm += "</tr>";
    htm += "<tr class='calendar-days'>";
    htm += htm2;
    htm += "<th>&nbsp;</th>";
    htm += htm2;
    htm += "<th>&nbsp;</th>";
    htm += htm2;
    htm += "</tr>";
    return htm;
  }
   var getMonthCaptionHtml = function(){
    
    var htm = "";
    htm += "<table border='0' cellpadding='0' cellspacing='0'>";
    htm += "<tr>";
    if(getMonthFirstDayX(dRun,-1)<dMoveMin){
      htm += "<td height='29' width='34'></td>";
    }
    else{
      htm += "<td height='29' width='34' onClick='"+getNavigationClick(getMonthFirstDayX(dRun,-1).getFullYear(),getMonthFirstDayX(dRun,-1).getMonth())+"' width='34'><a href='#'><img src='" + sImgPath + "btn_calendar_back.png' alt='zurück'></a></td>";
    }
    htm += "<td colspan='5' class='month' width='149'><strong>"+DATE_MMMM[dRun.getMonth()]+" "+dRun.getFullYear()+"</strong></td>";
    htm += "<td colspan='5' class='month' width='183'><strong>"+DATE_MMMM[getMonthFirstDayX(dRun,1).getMonth()]+" "+getMonthFirstDayX(dRun,1).getFullYear()+"</strong></td>";
    htm += "<td colspan='5' class='month' width='149'><strong>"+DATE_MMMM[getMonthFirstDayX(dRun,2).getMonth()]+" "+getMonthFirstDayX(dRun,2).getFullYear()+"</strong></td>";
    if(getMonthFirstDayX(dRun,1)<dMoveMax){
      htm += "<td height='29' width='34' onClick='"+getNavigationClick(getMonthFirstDayX(dRun,1).getFullYear(),getMonthFirstDayX(dRun,1).getMonth())+"' width='34'><a href='#'><img src='" + sImgPath + "btn_calendar_forward.png' alt='weiter'></a></td>";
    }
    else{
      htm += "<td height='29' width='34'></td>";
    }
    htm += "</tr>";
    htm += "</table>";
    return htm;
  }
   var getMonthBarHtml = function(){
    
    var htm = "";
    
    htm += "<table summary='Kalender Monate' border='0' cellpadding='0' cellspacing='0'>";
    htm += "<tr>";
    for(var i=0; i<9; i++){
      var d = getMonthFirstDayX(dRun,i-3);
      var iFullYear = d.getFullYear();
      var iMonth = d.getMonth();
      switch(i){
        case 0:
        case 1:
        case 2:
          if(getMonthFirstDayX(dRun,i-3)>=dMoveMin){
            htm += "<td onClick='"+getNavigationClick(iFullYear,iMonth)+"'><a href='#' class='month-n'>" + DATE_MMM[iMonth] + " " + iFullYear + "</a></td>";
          }
          else{
            htm += "<td><a href='#' class='month-no'>" + DATE_MMM[iMonth] + " " + iFullYear + "</td>";
          }
          break;
        case 3:
          htm += "<td><a href='#' class='month-a'>" + DATE_MMM[iMonth] + " " + iFullYear + "</b></td>";
          break;
        case 4:
        case 5:
          if(getMonthFirstDayX(dRun,i-3)<dMoveMax){
            htm += "<td onClick='"+getNavigationClick(iFullYear,iMonth)+"'><a href='#' class='month-an'>" + DATE_MMM[iMonth] + " " + iFullYear + "</b></td>";
          }
          else{
            htm += "<td><a href='#' class='month-a'>" + DATE_MMM[iMonth] + " " + iFullYear + "</b></td>";
          }
          break;
        default:
          if(getMonthFirstDayX(dRun,i-3)<dMoveMax){
            htm += "<td onClick='"+getNavigationClick(iFullYear,iMonth)+"'><a href='#' class='month-n'>" + DATE_MMM[iMonth] + " " + iFullYear + "</td>";
          }
          else{
            htm += "<td><a href='#' class='month-no'>" + DATE_MMM[iMonth] + " " + iFullYear + "</td>";
          }
          break;
      }
    }
    htm += "</tr>";
    htm += "</table>";
    return htm;
  }
  
   var getDescriptionHtml = function(){
 
    var htm = "";
    htm += "<table border='0' cellpadding='0' cellspacing='0' width='100%'>";
    htm += "<tr>";
    htm += "<td><h3>"+CALENDAR_CAPTION[iType]+"</h3></td>";
    htm += "<td align='right' onClick='"+getHideClick()+"'>X</td>";
    htm += "</tr>";
    htm += "</table>";
    return htm;
  }
  
   var getCalendarHtml = function(){
    
    var htm = "";
    
    
    htm += "<div class='calendarIE'><iframe frameborder='0' marginheight='0' marginwidth='0' style='width: 100%; height: 100%;' class='backgroundIE'></iframe></div>";
    htm += "<div class='calendar'>";
    htm += "<table border='0' cellpadding='0' cellspacing='0'>";
    htm += "<tr><td colspan='23'>" + getDescriptionHtml() + "</td></tr>";
    htm += "<tr><td colspan='23'>" + getMonthBarHtml() + "</td></tr>";
    htm += "<tr><td height='20'></td></tr>";
    htm += "<tr><td colspan='23'>" + getMonthCaptionHtml() + "</td></tr>";
    htm += "<tr><td height='2'></td></tr>";
    htm += getDayCaptionHtml();
    htm += getDaysHtml();
    htm += "</table>";
    htm += "</div>";
    
    return htm;
  }
  var getNavigationClick = function(iFullYear,iMonth){  
    return "(new routeCalendar("+iType+")).view(new Date("+iFullYear+","+iMonth+",1))";
  }
  var getHideClick = function(){  
    return "(new routeCalendar("+iType+")).hide()";
  }
  var getSelectClick = function(iFullYear,iMonth,iDay){  
    return "(new routeCalendar("+iType+")).select("+iFullYear+","+iMonth+","+iDay+")";
  }
  this.view = function (dRun_){
    if(!oCalendar) return;
    if(!oTarget) return;
  dNow = new Date();
    dMoveMin = getMonthFirstDay(dNow);
    dBookMinDay = new Date(dNow.getFullYear(), dNow.getMonth(), dNow.getDate() + O24_HANDLING_DAYS);
    dBookMin = getMonthFirstDay(dBookMinDay);
    dBookMax = getMonthFirstDayX(dBookMin,12);
    dMoveMax = getMonthFirstDayX(dBookMin,11);
    dRun = dBookMin;
    dFrom = readDate(sFromId);
    dThru = readDate(sThruId);
    bIsFrom = !(!dFrom);
    bIsThru = !(!dThru);
    if(dRun_){
        dRun = dRun_;                                //move
    }
    else{
        switch(iType){
            case 0:
                if(dFrom){
                    dRun = getMonthFirstDay(dFrom);                                //from? run = from
                }
                else{
                    if(dThru){
                        dRun = getMonthFirstDayX(dThru,-1);                      //thru? run = thru-1
                        if(dRun < dBookMin) dRun = getMonthFirstDayX(dRun,1);
                    }
                }
                break;
                
            case 1:
                if(dThru){
                    dRun = getMonthFirstDayX(dThru,-1);                          //thru? run = thru-1
                    if(dRun < dBookMin) dRun = getMonthFirstDayX(dRun,1);
                }
                else{
                    if(dFrom){
                        dRun = getMonthFirstDay(dFrom);                            //from? run = from
                    }
                }
                break;
                
            case 2:
                if(dFrom){
                    dRun = getMonthFirstDay(dFrom);                                //from? run = from
                }
                break;
        }
    }                
    oCalendar.innerHTML = getCalendarHtml();
  }

  this.select = function (iFullYear,iMonth,iDay){
      var dDay = new Date(iFullYear,iMonth-1,iDay);
     var sDay = (dDay.getDate()+100+"").substr(1,2)+"."+(dDay.getMonth()+1+100+"").substr(1,2)+"."+(dDay.getFullYear()+"").substr(2,2);
    dFrom = readDate(sFromId);
    dThru = readDate(sThruId);
    switch(iType){
        case 0:
            if(dThru){
                if(dDay>dThru){
                    var oThru = byId(sThruId);
                    if(oThru)oThru.value = sDay;
                }
            }
            else {
                var oThru = byId(sThruId);
                if(oThru)oThru.value = sDay;
            }
            break;
            
        case 1:
            if(dFrom){
                if(dDay<dFrom){
                    var oFrom = byId(sFromId);
                    if(oFrom)oFrom.value = "";
                }
            }
            break;
    }
    if(oCalendar){oCalendar.innerHTML="";}
    if(oTarget){
        oTarget.value = sDay;
//        oTarget.onchange();
    }
  }
  this.hide = function (){
    if(oCalendar){oCalendar.innerHTML="";}
  }
  this.isOpen = function (){
    if(oCalendar){return (oCalendar.innerHTML!="");}
  }
}