/*
21.05.08
- für die Jetzt Buchen-Seite des DBS wird bei Klick die Funktion fcheck_pfh_dbs aufgerufen

20.11.07
- neue Variable form_target: wird diese Variable gesetzt, wird statt des ersten Formulares das angegebene Formular benutzt
*/

/* zu benutzendes Formular; wenn leer, wird das erste Formular benutzt */
var form_target = "";

/* schreibt den HTML-Code für den Kalender in die HTML-Seite */
var cal;

/* Titel des Kalenders */
var cal_title = "";

/* Zieleingabefelder für den Kalender */
var arr_target = new Array();

/* Koordinaten des Kalenders */
var posX = 0, posY = 0;

/* zur Identifikation des Kalender-Layers */
var id_layerglobal;

/* Arrays mit Wochentagen und gekürzten Monatsnamen */
var arr_wdays = new Array("Mo", "Di", "Mi", "Do", "Fr", "Sa", "So");
var arr_months = new Array("Jan", "Feb", "Mär", "Apr", "Mai", "Jun", "Juli", "Aug", "Sep", "Okt", "Nov", "Dez");

/*
Funktion zum Anzeigen des Kalenders bei Klick auf den entsprechenden Link
Aufruf: fshow_cal (string id_layer, array arr, array arr_coord, string title);
*/

function showCal(id_layer, arr, arr_coord, title)
{
   if(title != "")
   {
      // Kalender neu schreiben
      var akt = new Date();
      drawCal(akt.getFullYear(), akt.getMonth());
      $('div_cal_dummy').innerHTML = cal;
      $('div_cal_dummy').style.overflow = 'hidden';

      // Fenster generieren
      calWin = new Window('winid_cal',
      {
         maximizable: false,
         resizable: false,
         parent: "targetbody",
         hideEffect:Element.hide,
         showEffect:Element.show,
         minWidth: 10,
         destroyOnClose: true
      });
      calWin.setContent(id_layer, true, true);
      calWin.setDestroyOnClose();
      calWin.setSize(183,174);
      calWin.setZIndex(20);
      calWin.showCenter(true);
   }

   // Inhalt des Kalenders
   $('cal_title').value = title;

   cal_title = title;
   id_layerglobal = id_layer;
   arr_target = arr;

   if(arr_coord[0] && $(id_layer).style.position == "relative")
   {
      $(id_layer).style.left = arr_coord[0];
      $(id_layer).style.top = arr_coord[1];
   }

   if(title != "")
   {
      // Kalender ein- oder ausblenden
      ($(id_layer).style.visibility == "visible")?
      $(id_layer).style.visibility = "hidden":
      $(id_layer).style.visibility = "visible";
   }
}

/*
Funktion zum Zeichnen eines Kalendermonats
Aufruf: drawCal (int y, int m);
*/
function drawCal(y, m) {
   if(y<min_year)y=min_year;
   if(y>max_year)y=max_year;

   var akt_month = getCalmonth(y, m)
   //var month = arr_months[parseInt(m)];

   cal = "<div id='divCal' style='z-index:20;'><table border='0' cellpadding='0' cellspacing='0' class='cal_border'><tr><td><table border='0' cellpadding='0' cellspacing='1'>";
   /* Titel ohne Kalender schließen */
   cal = cal + "<tr><td colspan='7' class='cal_title'><input id='cal_title' type='text' readonly value='"+cal_title+"'></td></tr>";
   // cal = cal + "<table border='0' cellpadding='0' cellspacing='0' width='100%'><tr><td><input id='cal_title' type='text' readonly value='"+cal_title+"'></td>";
   // cal = cal + "<td align='right'><input type='button' value='X' onClick='fshow_cal(id_layerglobal, Array(\"\",\"\"), Array(\"\",\"\"),\"\");' class='cal_close'></td>";
   // cal = cal + "</tr></table></td></tr>";

   /* Auswahlmenüs Monat und Jahr */
   cal = cal + "<tr><td colspan='7'>";
   cal = cal + "<table border='0' cellpadding='0' cellspacing='0' width='100%'><tr class='cal_monthyear'>";
   cal = cal + "<td><input type='button' class='cal_change' onclick='fchange_cal(" + (m==0 ? parseInt(y-1) : parseInt(y)) + ", " + (m==0 ? 11 : parseInt(m-1)) + "); return false; ' value='<'></td>";
   cal = cal + "<td class='cal_monthyear'><select class='cal_sel cal_sel_month' onchange='fchange_cal(" + (m==0 ? parseInt(y-1) : parseInt(y)) + ",this.selectedIndex); return false; '>";
   /* Ausgabe Monate */
   for (var j=0;j<arr_months.length;j++){
      (j==m)?
      cal = cal + "<option selected>" + arr_months[j] + "</option>":
      cal = cal + "<option>" + arr_months[j] + "</option>";
   }
   cal = cal + "</select></td>";
   cal = cal + "<td><input type='button' class='cal_change' onclick='fchange_cal(" + (m==11 ? parseInt(y+1) : parseInt(y)) + ", " + (m==11 ? 0 : parseInt(m+1)) + "); return false; ' value='>'></td>";
   cal = cal + "<td><input type='button' class='cal_change' onclick='fchange_cal(" + parseInt(y-1) + ", " + parseInt(m) + "); return false; ' value='<'></td>";
   cal = cal + "<td class='cal_monthyear'><select class='cal_sel cal_sel_year' onchange='fchange_cal(parseInt(this.options[this.selectedIndex].value), " + parseInt(m) + "); return false; '>";
   /* Ausgabe Jahre */
   for (var k=min_year;k<=max_year;k++){
      (k==y)?
      cal = cal + "<option value='"+k+"' selected>" + k + "</option>":
      cal = cal + "<option value='"+k+"'>" + k + "</option>";
   }
   cal = cal + "</td>";
   cal = cal + "<td><input type='button' class='cal_change' onclick='fchange_cal(" + parseInt(y+1) + ", " + parseInt(m) + "); return false; ' value='>'></td>";
   cal = cal + "</tr></table></td></tr>";

   /* Ausgabe der Wochentage */
   cal = cal + "<tr>";
   for (w=0; w<7; w++)
      cal = cal + "<td class='cal_wdays'>" + akt_month[0][w] + "</td>";
   cal = cal + "</tr>";

   /* Ausgabe der Monatstage */
   for(w=1; w<7; w++){
      cal = cal + "<tr>";
      for(d=0; d<7; d++){
         cal = cal + "<td class='cal_days'>";

         (!isNaN(akt_month[w][d]))?
         cal = cal + "<a href='javascript:;' class='cal_days' style='text-decoration:none' onclick='clickCal(" + akt_month[w][d] + ", " + parseInt(m+1) + ", " + y + "); return false; '>" + akt_month[w][d] + "</a>":
         cal = cal + "&nbsp;";

         cal = cal + "</td>";
      }
      cal = cal + "</tr>";
   }
   cal = cal + "</table></td></tr></table></div>";
   return cal;
}

/*
Funktion zur Bestimmung des aktuellen Kalendermonats
Aufruf: getCalmonth (int y, int m);
*/
function getCalmonth(y, m) {
   var calmonth = new Array();
   /* erster Monatstag */
   var first_day = new Date(y, m, 1);
   /* erster Wochentag im Monat */
   var first_wday = first_day.getDay();
   /* mögliche Monatsenden */
   var day_28 = new Date(y, m, 28);
   var day_29 = new Date(y, m, 29);
   var day_30 = new Date(y, m, 30);
   var day_31 = new Date(y, m, 31);

   /* Anzahl der Monatstage bestimmen */
   var days = 0;
   if(day_31.getMonth()==first_day.getMonth())days = day_31.getDate();
   else if(day_30.getMonth()==first_day.getMonth())days = day_30.getDate();
   else if(day_29.getMonth()==first_day.getMonth())days = day_29.getDate();
   else if(day_28.getMonth()==first_day.getMonth())days = day_28.getDate();

   /* Monatstage in Array schreiben */
   var tmp = 1;
   calmonth[0] = arr_wdays;
   calmonth[1] = new Array(7);
   calmonth[2] = new Array(7);
   calmonth[3] = new Array(7);
   calmonth[4] = new Array(7);
   calmonth[5] = new Array(7);
   calmonth[6] = new Array(7);
   if(first_wday==0){
      calmonth[1][6] = tmp;
      tmp++;
   }else{
      for(d=first_wday-1;d<7;d++) {
         calmonth[1][d] = tmp;
         tmp++;
      }
   }
   for(w=2;w<7;w++){
      for(d=0; d<7; d++){
         if(tmp <= days){
            calmonth[w][d] = tmp;
            tmp++;
         }
      }
   }
   return calmonth;
}

/*
Funktion wird bei Klick auf einen Monatstag aufgerufen
Aufruf: clickCal (string frm, int nr, int sel_day, int sel_month, int_sel_year);
*/
function clickCal(sel_day, sel_month, sel_year)
{
   if(form_target == "")
   {
      // Tag
      document.forms[0].elements[arr_target[0]].selectedIndex = sel_day;
      // Monat
      document.forms[0].elements[arr_target[1]].selectedIndex = sel_month;
      // Jahr
      for(var c=0;c<document.forms[0].elements[arr_target[2]].length;c++){
         if(document.forms[0].elements[arr_target[2]][c].value==sel_year)
            document.forms[0].elements[arr_target[2]][c].selected=true;
      }
   }
   else
   {
      // Tag
      document.forms[form_target].elements[arr_target[0]].selectedIndex = sel_day;
      // Monat
      document.forms[form_target].elements[arr_target[1]].selectedIndex = sel_month;
      // Jahr
      for(var c=0;c<document.forms[form_target].elements[arr_target[2]].length;c++){
         if(document.forms[form_target].elements[arr_target[2]][c].value==sel_year)
            document.forms[form_target].elements[arr_target[2]][c].selected=true;
      }
   }
   
   // Zeitraum im Kalender anzeigen
   if(typeof fcheck_pfh_dbs == "function")fcheck_pfh_dbs();

   // Kalender ausblenden
   showCal(id_layerglobal, "", "", "");
   //$('overlay_modal').style.display = "none";
   WindowUtilities.enableScreen();
   calWin.destroy();
}

/*
Diese Funktion wird aufgerufen, wenn der Monat oder das jahr geändert werden
Aufruf: fchange_cal(int y, int m)
*/
function fchange_cal(y, m) {
   // für alle vernünftigen Browser
   if(document.getElementById){
      drawCal(y, m);
      document.getElementById(id_layerglobal).innerHTML = cal;
   // für den ollen NS4
   }else if(document.layers){
      document.layers["divCal"].document.open();
      drawCal(y, m);
      document.write("<div>")
      document.write(cal);
      document.write("</div>")
      document.layers[id_layerglobal].document.close();
   // für IE 4+ 5
   }else if(document.all){
      drawCal(y, m);
      document.all[id_layerglobal].innerHTML = cal;
   }
}

function initCal(){
   if(document.captureEvents)document.captureEvents(Event.MOUSEMOVE);
   document.onmousemove = posCal;
}

function posCal(e){
   // für IE 4
   if(document.all){
      posX = event.clientX;
      posY = event.clientY;
   // alle anderen
   }else{
      posX = parseInt(e.pageX+10);
      posY = parseInt(e.pageY);
   }
}

window.onload = initCal;
