
/* +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 * +- [ZMI] Calendar

 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

 */



var zmiCalFmName;

var zmiCalElName;



/**

 * Display calendar

 */

function zmiCal() 

{

  // First day in Month

  m_anf = new Date(jahr,monat,1);

  firstDay = m_anf.getDay();

  // x Days in Month

  m_neu = new Date(jahr, monat + 1 ,1);  // first day of next month

  m_end = m_neu - 864e5;                 // previous day

  m_lang = new Date(m_end);

  m_lang = m_lang.getDate();              // date

  // Write centered month

  var monthnames = new Array ("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");

  document.getElementById('zmiCalMon').innerHTML = monthnames[monat] + "&nbsp;" + jahr;

  // Write fields

  var fld = new Array();

  for (var k = 0; k < 42; k++) fld[k]  = new zmiCalFld(k);

  for (var i = 0; i < 42; i++) fld[i].zmiCalDisplay();

}



/**

 * Constructor of field

 */

function zmiCalFld(num) {

  this.num = num;

  this.zmiCalDisplay = zmiCalDisplay;

}



// Display field

function zmiCalDisplay() {

  firstDay = (firstDay > 0) ? firstDay : 7;

  // Sunday is 7th day

  var tag = (this.num + 2 - firstDay);

  // past?

  if(jahr < currYear)

    var past = true;

  else if(jahr == currYear)

    past = (monat < currMonth)? true : ((monat == currMonth)? ((tag >= today) ? false : true) : false);

  var now = !!(tag == today && monat == currMonth && jahr == currYear);

  var day = ((tag < 10)? "&nbsp;" + tag : tag);

  var txtN = '\<span class="zmiCalNorm"\>' + day + '\</span\>';

  var txtN = '\<a class="zmiCalNorm" href="#" onclick="zmiCalSelect(' + tag + ');return false"\>' + day + '\</a\>';

  var txtF = '\<a class="zmiCalBold" href="#" onclick="zmiCalSelect(' + tag + ');return false"\>' + day + '\</a\>';

  var txtH = '\<a class="zmiCalCurr" href="#" onclick="zmiCalSelect(' + tag + ');return false"\>' + day + '\</a\>';

  var txt = past? txtN : (now? txtH : txtF);

  if (!((this.num >= firstDay - 1) && (tag <= m_lang)))

    txt = "&nbsp;";

  var obj = document.getElementById('field' + this.num);

  obj.innerHTML = txt;

}



/**

 * Scroll to next month

 */

function zmiCalNextMon() {

  if (monat < 12) monat += 1;

  if (monat == 12) {

    jahr += 1;

    monat = 0;

  }

  zmiCal();

}



/**

 * Scroll to last month

 */

function zmiCalLastMon() {

  if (monat > -1) monat -= 1;

  if (monat == -1) {

    jahr -= 1;

    monat = 11;

  }

  zmiCal();

}



/**

 * Select calender.

 */

function zmiCalSelect(num) {

  var myTag = (num < 10)? '0' + num: num;

  var myMon = ((monat + 1) < 10)? '0' + (monat + 1): (monat + 1);

  

  document.forms[zmiCalFmName].elements[zmiCalElName].value = myTag + "." + myMon + "." + jahr;

  

  document.forms[zmiCalFmName].elements[zmiCalElName].focus();

  // Close calendar.

  zmiCalClose();

}





/**

 * Close calender.

 */

function zmiCalClose() {

  var zmiCalDiv = document.getElementById("zmiCalDiv");

  zmiCalDiv.style.visibility = 'hidden';

  zmiCalDiv.style.display = 'none';

}



/**

 * Click calendar-button.

 */

function calendarBtnClick (fmName, elName, startDate) 

{

  // Show calendar.

  var zmiCalDiv = document.getElementById("zmiCalDiv");

  if ( !zmiCalDiv) {

    var body = document.getElementsByTagName('body')[0];

    zmiCalDiv = document.createElement( "div");

    zmiCalDiv.setAttribute( "id", "zmiCalDiv");

    zmiCalDiv.setAttribute( "className", "form-small");

    body.appendChild( zmiCalDiv);

  }

  zmiCalDiv.style.visibility = 'visible';

  zmiCalDiv.style.display = 'block';

  zmiCalDiv.style.position = 'absolute';

  var el = document.getElementById(elName);

  var coords = {x: 0, y: 0};

  var element = el;

  while (element) {

    coords.x += element.offsetLeft;

    coords.y += element.offsetTop;

    element = element.offsetParent;

  }

  zmiCalDiv.style.top = (coords['y']+el.offsetHeight)+"px";

  zmiCalDiv.style.left = (coords['x']+el.offsetWidth)+"px";

  var html = '';

  html += '<div id=\"zmiCalLastMon\"><a href=\"#\" onclick=\"zmiCalLastMon(); return false;\" class=\"zmiCalHead\">&laquo;</a>&nbsp;</div>';

  html += "<div id=\"zmiCalMon\" style=\"text-align:center;width:70px;\"></div>";

  html += "<div id=\"zmiCalNextMon\" style=\"float:none;\">";

  html += "&nbsp;<a href=\"#\" onclick=\"zmiCalNextMon(); return false;\" class=\"zmiCalHead\">&raquo;</a>";

  html += "&nbsp;<a href=\"#\" onclick=\"zmiCalClose(); return false;\" class=\"zmiCalHead\">&times;</a>";

  html += "</div>";

  var msie = (navigator.appName == "Microsoft Internet Explorer");

  var daynames = new Array("M","T","W","T","F","S","S");

  for(var d = 0; d < daynames.length; d++) {

    var st = "";

    if ( !msie && (d == 0))

      st = " style=\"clear:left;\"";

    if ( d == 6)

      st = " style=\"float:none;\"";

    html += "<div class=\"zmiCalDayname\""+st+">" + daynames[d] + "</div>";

  }

  for(var d = 0; d < 42; d++) {

    var cn = "";

    var st = "";

    if ( !msie && (d % 7 == 0))

      st = " style=\"clear:left;\"";

    if ( (d+1) % 7 == 0 && (d+1) < 42)

      st = " style=\"float:none;\"";

    html += "<div id=\"field" + d + "\" class=\"zmiCalWeekday\""+st+"></div>";

  }

  zmiCalDiv.innerHTML = html;

  // Init

  zmiCalFmName = fmName;

  zmiCalElName = elName;

  var elValue = document.forms[zmiCalFmName].elements[zmiCalElName].value;

  if (validDate(elValue))

    currDate = getDate(elValue)

  else

    //currDate = new Date();
    currDate = getDate(startDate);

  today       = currDate.getDate();

  monat       = currDate.getMonth();

  jahr        = currDate.getYear();

  if (jahr < 1000) jahr += 1900;

  currYear    = jahr;

  currMonth   = monat;

  zmiCal();

}


// ############################################################################

// ### validDate:

// ############################################################################

function validDate(s) {

  return (getDate(s) != null)

}


// ############################################################################
// ### clearDateFields:
// ############################################################################

function clearDateFields() {
  document.getElementById("arr_dt").value = '';
  document.getElementById("dep_dt").value = '';
  return
}


