
var PENGZ_LANG        = 'de';       // Default Language: en - english ; es - spanish; de - german
var PENGZ_ENABLE_PAST =  true;
var PENGZ_X           = -1;         // x position (-1 if to appear below control)
var PENGZ_Y           = -1;         // y position (-1 if to appear below control)
var PENGZ_WEEK_START  =  0;         // 0 - sunday ; 1 - monday
var PENGZ_DISP_WEEK   = false;
var PENGZ_SHOW_TODAY  = true;
var PENGZ_SHOW_CLEAR  = true;
var PENGZ_IMG_D       = 'bilder/';  // path to images...i.e."/img/"
var PENGZ_EARLIEST_Y   = 2003;
var PENGZ_LATEST_Y = new Date().getYear() + 1;
if (PENGZ_LATEST_Y < 1900) PENGZ_LATEST_Y += 1900;
//var PENGZ_LATEST_Y     = 2100; // reset later.

// end of consumer preferences

var dayName        = '';

var pengz_locale_erase_date = {
  de : "Eintrag löschen",
  en : "Erase Current Entry",
  es : "Erase Current Entry"

}
var gotoString = {
  en : 'Go To Current Month',
  es : 'Ir al Mes Actual',
  de : 'Gehe zu aktuellem Monat'
};
var todayString = {
  en : 'Today is',
  es : 'Hoy es',
  de : 'Heute ist'
};
var weekString = {
  en : 'Wk',
  es : 'Sem',
  de : 'KW'
};
var scrollLeftMessage = {
  en : 'Click to scroll to previous month. Hold mouse button to scroll automatically.',
  es : 'Presione para pasar al mes anterior. Deje presionado para pasar varios meses.',
  de : 'Klicken um zum vorigen Monat zu gelangen. Gedr?ckt halten, um automatisch weiter zu scrollen.'
};
var scrollRightMessage = {
  en : 'Click to scroll to next month. Hold mouse button to scroll automatically.',
  es : 'Presione para pasar al siguiente mes. Deje presionado para pasar varios meses.',
  de : 'Klicken um zum n?chsten Monat zu gelangen. Gedr?ckt halten, um automatisch weiter zu scrollen.'
};
var selectMonthMessage = {
  en : 'Click to select a month.',
  es : 'Presione para seleccionar un mes',
  de : 'Klicken um Monat auszuw?hlen'
};
var selectYearMessage = {
  en : 'Click to select a year.',
  es : 'Presione para seleccionar un a?o',
  de : 'Klicken um Jahr auszuw?hlen'
};
var selectDateMessage = {                // do not replace [date], it will be replaced by date.
  en : 'Select [date] as date.',
  es : 'Seleccione [date] como fecha',
  de : 'W?hle [date] als Datum.'
};
var monthName = {
  en : new Array('January','February','March','April','May','June','July','August','September','October','November','December'),
  es : new Array('Enero','Febrero','Marzo','Abril','Mayo','Junio','Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'),
  de : new Array('Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember')
};
var monthName2 = {
  en : new Array('JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC'),
  es : new Array('ENE','FEB','MAR','ABR','MAY','JUN','JUL','AGO','SEP','OCT','NOV','DIC'),
  de : new Array('JAN','FEB','MRZ','APR','MAI','JUN','JUL','AUG','SEP','OKT','NOV','DEZ')
};

if (PENGZ_WEEK_START==0) {
  dayName = {
    en : new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat'),
    es : new Array('Dom','Lun','Mar','Mie','Jue','Vie','Sab'),
    de : new Array('So','Mo','Di','Mi','Do','Fr','Sa')
  };
} else {
  dayName = {
    en : new Array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'),
    es : new Array('Lun','Mar','Mie','Jue','Vie','Sab','Dom'),
    de : new Array('Mo','Di','Mi','Do','Fr','Sa','So')
  };
}

var crossobj, crossMonthObj, crossYearObj, monthSelected, yearSelected, dateSelected, omonthSelected, oyearSelected, odateSelected;
var monthConstructed, yearConstructed, intervalID1, intervalID2, timeoutID1, timeoutID2, ctlToPlaceValue, ctlNow, dateFormat;
var nStartingYear, selDayAction;
var visYear  = 0;
var visMonth = 0;
var bPageLoaded = false;
var ie  = document.all;
var dom = document.getElementById;
var ns4 = document.layers;
var today    = new Date();
var dateNow  = today.getDate();
var monthNow = today.getMonth();
var yearNow  = today.getYear();
var imgsrc   = new Array('drop2.gif','drop2.gif','left2.gif','left2.gif','righter.gif','righter.gif');
var img      = new Array();
var bShow    = false;

var STR_VISIBLE   = (dom||ie) ? 'visible' : 'show';
// this section will be for color definitions
//var CLDR_HEAD_COLOR_BG = '#000066';
var CLDR_HEAD_COLOR_BG = '#9a9bb1';
//var CLDR_HEAD_COLOR_FG = '#ffffff';
var CLDR_HEAD_COLOR_FG  = '#222222';
var CLDR_BORDER         = '1px solid #A0A0A0';
var CLDR_BUTTON_COLOR_BORDER      = '#ffffff'; //36f
var CLDR_BUTTON_COLOR_BORDER_OVER = '#000000'; //8af
var CLDR_BUTTON_STYLE   = 'border:1px solid ' + CLDR_BUTTON_COLOR_BORDER + ';cursor:pointer';
var CLDR_BORDER_POP  = '1px solid #505050';

var styleAnchor      = 'text-decoration:none;color:black;';
var styleLightBorder = 'border:1px solid #a0a0a0;';


function px(str)      { return str + "px" }
function padZero(num) { return (num < 10) ? '0' + num : num }

/* hides <select> and <applet> objects (for IE only) */
function hideElement(elmID, overDiv) {
  if(ie) {
    var div_left   = overDiv.offsetLeft;
    var div_right  = overDiv.offsetWidth  + div_left;
    var div_top    = overDiv.offsetTop;
    var div_bottom = overDiv.offsetHeight + div_top;

    var tags = document.all.tags( elmID );
    var len  = tags.length;
    for (var i = 0; i<len; i++) {
      var obj = tags[i];
      if(!obj || !obj.offsetParent) continue;

      // Find the element's offsetTop and offsetLeft relative to the BODY tag.
      var obj_left   = obj.offsetLeft;
      var obj_top    = obj.offsetTop;
      var obj_parent = obj.offsetParent;

      while ((obj_parent.tagName.toUpperCase() != 'BODY') && (typeof obj_parent.tagName == 'object')) {
        obj_left  += obj_parent.offsetLeft;
        obj_top   += obj_parent.offsetTop;
        obj_parent = obj_parent.offsetParent;
      }

      var obj_height = obj.offsetHeight;
      var obj_bottom = obj_top + obj_height;
      var obj_width  = obj.offsetWidth;
      var obj_right  = obj_width + obj_left;

      if ( ! (
              (obj_bottom <= div_top   ) ||
              (obj_top    >= div_bottom) ||
              (obj_right  <= div_left  ) ||
              (obj_left   >= div_right )
         )   ) {
        obj.style.visibility = 'hidden';
      }
} } }

/*
* unhides <select> and <applet> objects (for IE only)
*/
function showElement(elmID) {
  if (ie) {
    var tags = document.all.tags( elmID )
    var len  = tags.length
    for (var i = 0; i<len; i++) {
      var obj = tags[i];
      if (!obj || !obj.offsetParent) continue;
      obj.style.visibility = '';
} } }

function HolidayRec (d, m, y, desc) {
  this.d = d;
  this.m = m;
  this.y = y;
  this.desc = desc;
}

var HolidaysCounter = 0;
var Holidays = new Array();

function addHoliday (d, m, y, desc) {
  Holidays[HolidaysCounter++] = new HolidayRec (d, m, y, desc);
}


if (dom) {
  for (var i=0;i<imgsrc.length;i++) {
    img[i] = new Image;
    img[i].src = PENGZ_IMG_D + imgsrc[i];
  }
  document.write('<div onclick="bShow=true" id="pengzcal" style="z-index:+999;position:absolute;visibility:hidden;">'
                 +'<table width="'
                 +((PENGZ_DISP_WEEK)?250:220)
                 +'" style="font-family:Arial;font-size:11px;border: ' + CLDR_BORDER + ';" bgcolor="#ffffff">'
                 +'<tr bgcolor="'+ CLDR_HEAD_COLOR_BG +'"><td><table width="'+((PENGZ_DISP_WEEK)?248:218)
                 +'"><tr><td style="padding:2px;font-family:Arial;font-size:11px;"><font color="' + CLDR_HEAD_COLOR_FG +'"' /*C9D3E9*/
                 +'"><b><span id="pengzcaption"></span></b></font></td><td align="right">'
                 +'<a href="javascript:hideCalendar()"><img src="'+PENGZ_IMG_D
                 +'close.gif" width="15" height="13" border="0" /></a></td></tr></table></td></tr>'
                 +'<tr><td style="padding:5px" bgcolor="#ffffff"><span id="pengzcontent"></span></td></tr>');
  if (PENGZ_SHOW_TODAY) {
    document.write ('<tr bgcolor="#f0f0f0"><td style="padding:5px" align="center"><span id="lblToday"></span></td></tr>');
  }
  if (PENGZ_SHOW_CLEAR) {
    document.write ('<tr bgcolor="#f0f0f0"><td style="padding:5px" align="center"><span id="pengz_clear"><a href="javascript:clearCalendar()" style="'
                    +styleAnchor + '"> ' +pengz_locale_erase_date['de']+'</a></span></td></tr>');
  }
  document.write ('</table></div><div id="selectMonth" style="z-index:+999;position:absolute;visibility:hidden;">'
                  +'</div><div id="selectYear" style="z-index:+999;position:absolute;visibility:hidden;"></div>');
}

function swapImage(srcImg, destImg) {
  if (ie) document.getElementById(srcImg).setAttribute('src',PENGZ_IMG_D + destImg);
}

function interpolate_arrays(s, c) {
  var str = '';
  for (var i=0; i<s.length; i++) {
    str += s[i] + c[i];
  }
  return str;
}

function calendar_init() {
  if (!ns4) {
    var new_html;
    if (!ie) yearNow += 1900;
    lastestYear = yearNow + 80;

    crossobj      = dom ? document.getElementById('pengzcal'   ).style : ie? document.all.pengzcal     : document.pengzcal;
    hideCalendar();
    crossMonthObj = dom ? document.getElementById('selectMonth').style : ie ? document.all.selectMonth : document.selectMonth;
    crossYearObj  = dom ? document.getElementById('selectYear' ).style : ie ? document.all.selectYear  : document.selectYear;

    monthConstructed = false;
    yearConstructed  = false;

    if (PENGZ_SHOW_TODAY) {
      document.getElementById('lblToday').innerHTML = '<font color="#000066">' + todayString[PENGZ_LANG] + ' <a onmousemove="window.status=\''+gotoString[PENGZ_LANG]+'\'" onmouseout="window.status=\'\'" title="'+gotoString[PENGZ_LANG]+'" style="'+styleAnchor+'" href="javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();">'+dayName[PENGZ_LANG][(today.getDay()-PENGZ_WEEK_START==-1)?6:(today.getDay()-PENGZ_WEEK_START)]+', ' + dateNow + ' ' + monthName[PENGZ_LANG][monthNow].substring(0,3) + ' ' + yearNow + '</a></font>';
    }

    var static_stuff = new Array('<span id="',
                               '" style="' +CLDR_BUTTON_STYLE+ '" onmouseover="swapImage(',
                               ");this.style.borderColor='" + CLDR_BUTTON_COLOR_BORDER_OVER +"';window.status='",
                               '\'" onclick="',
                               '" onmouseout="clearInterval(intervalID1);swapImage(',
                               ");this.style.borderColor='" + CLDR_BUTTON_COLOR_BORDER +
                                   "';window.status=''\" onmousedown=\"clearTimeout(timeoutID1);timeoutID1=setTimeout(",
                               ',500)" onmouseup="clearTimeout(timeoutID1);clearInterval(intervalID1)">',
                               '<img id="',
                               '" src="',
                               '" width="10" height="11" border="0">&nbsp</span>&nbsp;');
    new_html = interpolate_arrays(static_stuff,
                                new Array('spanLeft',
                                          "'changeLeft','left2.gif'",
                                          scrollLeftMessage[PENGZ_LANG],
                                          'decMonth()',
                                          "'changeLeft','left2.gif'",
                                          "'StartDecMonth()'",
                                          '&nbsp;',
                                          "changeLeft",
                                          PENGZ_IMG_D+'left2.gif',''
                               )         );

    new_html += interpolate_arrays(static_stuff,
                                 new Array("spanRight",
                                           "'changeRight','righter.gif'",
                                           scrollRightMessage[PENGZ_LANG],
                                           'incMonth()',
                                           "'changeRight','righter.gif'",
                                           "'StartIncMonth()'",
                                           "&nbsp;",
                                           "changeRight",
                                           PENGZ_IMG_D+'righter.gif', ''
                                )          );
    static_stuff = static_stuff.slice(0, 5);
    static_stuff[5] = ");this.style.borderColor='" + CLDR_BUTTON_COLOR_BORDER + "';window.status=''\"></span>&nbsp;";
    new_html += interpolate_arrays(static_stuff,
                                new Array("spanMonth",
                                          "'changeMonth','drop2.gif'",
                                          selectMonthMessage[PENGZ_LANG],
                                          'popUpMonth()',
                                          "'changeMonth','drop2.gif'",'',''
                                  )      );
    new_html += interpolate_arrays(static_stuff,
                                new Array("spanYear",
                                          "'changeYear','drop2.gif'",
                                          selectYearMessage[PENGZ_LANG],
                                          'popUpYear()',
                                          "'changeYear','drop2.gif'",'',''
                                  )      );

    document.getElementById('pengzcaption').innerHTML = new_html;
    bPageLoaded=true;
  }
}

function hideCalendar() {
  crossobj.visibility = 'hidden';
  if (crossMonthObj != null) crossMonthObj.visibility = 'hidden';
  if (crossYearObj  != null) crossYearObj.visibility  = 'hidden';
  showElement('SELECT');
  showElement('APPLET');
}

function constructDate(d,m,y) {
  var sTmp = dateFormat;
  sTmp = sTmp.replace ('dd','<e>');
  sTmp = sTmp.replace ('d','<d>');
  sTmp = sTmp.replace ('<e>',padZero(d));
  sTmp = sTmp.replace ('<d>',d);
  sTmp = sTmp.replace ('mmmm','<p>');
  sTmp = sTmp.replace ('mmm','<o>');
  sTmp = sTmp.replace ('mm','<n>');
  sTmp = sTmp.replace ('m','<m>');
  sTmp = sTmp.replace ('<m>',m+1);
  sTmp = sTmp.replace ('<n>',padZero(m+1));
  sTmp = sTmp.replace ('<o>',monthName[PENGZ_LANG][m]);
  sTmp = sTmp.replace ('<p>',monthName2[PENGZ_LANG][m]);
  sTmp = sTmp.replace ('yyyy',y);
  return sTmp.replace ('yy',padZero(y%100));
}

function closeCalendar() {
  hideCalendar();
  ctlToPlaceValue.value = constructDate(dateSelected,monthSelected,yearSelected);
}

function clearCalendar() {
  hideCalendar();
  ctlToPlaceValue.value = '';
}

/*** Month Pulldown ***/
function StartDecMonth() { intervalID1 = setInterval("decMonth()", 80) }
function StartIncMonth() { intervalID1 = setInterval("incMonth()", 80) }

function modMonth (delta) {
  monthSelected += delta;
  if (delta >= 0 ? monthSelected > 11 : monthSelected < 0) {
    monthSelected = delta >=0 ? 0 : 11;
    yearSelected += delta;
  }
  constructCalendar();
}
function incMonth () { modMonth( 1) }
function decMonth () { modMonth(-1) }

function constructMonth() {
  popDownYear()
  if (!monthConstructed) {
    var sHTML = "";
    for (var i=0; i<12; i++) {
      var sName = monthName[PENGZ_LANG][i];
      if (i == monthSelected){
        sName = '<b>' + sName + '</b>';
      }
      sHTML += '<tr><td id="m' + i + '" onmouseover="this.style.backgroundColor=\'#909090\'" onmouseout="this.style.backgroundColor=\'\'" style="cursor:pointer" onclick="monthConstructed=false;monthSelected=' + i + ';constructCalendar();popDownMonth();event.cancelBubble=true"><font color="#000066">&nbsp;' + sName + '&nbsp;</font></td></tr>';
    }
    document.getElementById('selectMonth').innerHTML =
        '<table width="70" style="font-family:Arial;font-size:11px;border:'
        +CLDR_BORDER_POP
        +';" bgcolor="#f0f0f0" cellspacing="0" onmouseover="clearTimeout(timeoutID1)" onmouseout="clearTimeout(timeoutID1);timeoutID1=setTimeout(\'popDownMonth()\',100);event.cancelBubble=true">' + sHTML + '</table>';

    monthConstructed = true;
  }
}

function popUpMonth() {
  if (visMonth == 1) {
    popDownMonth();
    visMonth--;
  }
  else {
    constructMonth();
    crossMonthObj.visibility = STR_VISIBLE;
    crossMonthObj.left = px( parseInt(crossobj.left) + 50 );
    crossMonthObj.top  = px( parseInt(crossobj.top ) + 23 );
    hideElement('SELECT', document.getElementById('selectMonth'));
    hideElement('APPLET', document.getElementById('selectMonth'));
    visMonth++;
  }
}

function popDownMonth() {
  crossMonthObj.visibility = 'hidden';
  visMonth = 0;
}

/*** Year Pulldown ***/
function modYear(delta) {
  for (var i=0; i<7; i++) {
    var newYear = (i + nStartingYear) + delta;
    var txtYear;
    if (newYear == yearSelected) txtYear = '<span style="color:#006;font-weight:bold;">&nbsp;' + newYear + '&nbsp;</span>';
    else                         txtYear = '<span style="color:#006;">&nbsp;'                  + newYear + '&nbsp;</span>';
    document.getElementById('y'+i).innerHTML = txtYear;
  }

  /*
    fix for bug #18076, adjust nStartingYear regardless position between
    PENGZ_LATEST_Y and PENGZ_EARLIEST_Y
  */
  nStartingYear += delta;
  // if (delta > 0) {
  //   if (nStartingYear <= PENGZ_LATEST_Y  ) nStartingYear += delta;
  // }
  // else {
  //   if (nStartingYear >= PENGZ_EARLIEST_Y) nStartingYear += delta;
  // }
  bShow=true;
}
function incYear() { return modYear( 1) }
function decYear() { return modYear(-1) }

function selectYear(nYear) {
  yearSelected = parseInt(nYear + nStartingYear);
  yearConstructed = false;
  constructCalendar();
  popDownYear();
}

function constructYear() {
  popDownMonth();
  var sHTML = '';
  if (!yearConstructed) {
    sHTML = '<tr><td align="center" onmouseover="this.style.backgroundColor=\'#909090\'" onmouseout="clearInterval(intervalID1);this.style.backgroundColor=\'\'" style="cursor:pointer" onmousedown="clearInterval(intervalID1);intervalID1=setInterval(\'decYear()\',30)" onmouseup="clearInterval(intervalID1)"><font color="#000066">-</font></td></tr>';
    var j = 0;
    nStartingYear = yearSelected - 3;
    for (var i = (yearSelected-3); i <= (yearSelected+3); i++ ) {
      sName = i;
      if (i == yearSelected) sName = '<b>' + sName + '</b>';
      sHTML += '<tr><td id="y' + j + '" onmouseover="this.style.backgroundColor=\'#909090\'" onmouseout="this.style.backgroundColor=\'\'" style="cursor:pointer" onclick="selectYear('+j+');event.cancelBubble=true"><font color="#000066">&nbsp;' + sName + '&nbsp;</font></td></tr>';
      j++;
    }
    sHTML += '<tr><td align="center" onmouseover="this.style.backgroundColor=\'#909090\'" onmouseout="clearInterval(intervalID2);this.style.backgroundColor=\'\'" style="cursor:pointer" onmousedown="clearInterval(intervalID2);intervalID2=setInterval(\'incYear()\',30)" onmouseup="clearInterval(intervalID2)"><font color="#000066">+</font></td></tr>';
    document.getElementById('selectYear').innerHTML =
        '<table width="44" cellspacing="0" bgcolor="#f0f0f0" style="font-family:Arial;font-size:11px;border:'
       +CLDR_BORDER_POP
       +';" onmouseover="clearTimeout(timeoutID2)" onmouseout="clearTimeout(timeoutID2);timeoutID2=setTimeout(\'popDownYear()\',100)">' + sHTML + '</table>';
    yearConstructed = true;
  }
}

function popDownYear() {
  clearInterval(intervalID1);
  clearTimeout(timeoutID1);
  clearInterval(intervalID2);
  clearTimeout(timeoutID2);
  crossYearObj.visibility= 'hidden';
  visYear = 0;
}

function popUpYear() {
  var leftOffset
  if (visYear==1) {
    popDownYear();
    visYear--;
  }
  else {
    constructYear();
    crossYearObj.visibility        = STR_VISIBLE;
    leftOffset = parseInt(crossobj.left) + document.getElementById('spanYear').offsetLeft;
    //if (ie) leftOffset += 6;
    leftOffset += 6;
    crossYearObj.left = px( leftOffset                  );
    crossYearObj.top  = px( parseInt(crossobj.top) + 23 );
    visYear++;
  }
}

/*** calendar ***/
function WeekNbr(n) {
  // Algorithm used:
  // From Klaus Tondering's Calendar document (The Authority/Guru)
  // http://www.tondering.dk/claus/calendar.html
  // a = (14-month) / 12
  // y = year + 4800 - a
  // m = month + 12a - 3
  // J = day + (153m + 2) / 5 + 365y + y / 4 - y / 100 + y / 400 - 32045
  // d4 = (J + 31741 - (J mod 7)) mod 146097 mod 36524 mod 1461
  // L = d4 / 1460
  // d1 = ((d4 - L) mod 365) + L
  // WeekNumber = d1 / 7 + 1

  var year  = n.getFullYear();
  var month = n.getMonth() + 1;
  var day;
  if (PENGZ_WEEK_START == 0) {
    day = n.getDate() + 1;
  } else {
    day = n.getDate();
  }

  var a = Math.floor((14-month) / 12);
  var y = year + 4800 - a;
  var m = month + 12 * a - 3;
  var b = Math.floor(y/4) - Math.floor(y/100) + Math.floor(y/400);
  var J = day + Math.floor((153 * m + 2) / 5) + 365 * y + b - 32045;
  var d4 = (((J + 31741 - (J % 7)) % 146097) % 36524) % 1461;
  var L = Math.floor(d4 / 1460);
  var d1 = ((d4 - L) % 365) + L;

  return /* week = */ Math.floor(d1/7) + 1;
}

function constructCalendar () {
  var aNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31);
  var dateMessage;
  var startDate = new Date (yearSelected,monthSelected,1);
  var endDate;
  var numDaysInMonth;

  if (monthSelected==1) {
    endDate = new Date (yearSelected,monthSelected+1,1);
    endDate = new Date (endDate - (24*60*60*1000));
    numDaysInMonth = endDate.getDate();
  } else {
    numDaysInMonth = aNumDays[monthSelected];
  }

  var datePointer = 0;
  var dayPointer = startDate.getDay() - PENGZ_WEEK_START;

  if (dayPointer<0) dayPointer = 6;

  var sHTML = '<table border="0" style="font-family:verdana;font-size:10px;"><tr>';

  if (PENGZ_DISP_WEEK) {
    sHTML += '<td width="27"><b>' + weekString[PENGZ_LANG] + '</b></td><td width="1" rowspan="7" bgcolor="#d0d0d0" style="padding:0px"><img src="'+PENGZ_IMG_D+'divider.gif" width="1"></td>';
  }

  for (i = 0; i<7; i++) {
    sHTML += '<td width="27" align="right"><b><font color="#000066">' + dayName[PENGZ_LANG][i] + '</font></b></td>';
  }

  sHTML += '</tr><tr>';

  if (PENGZ_DISP_WEEK) {
    sHTML += '<td align="right">' + WeekNbr(startDate) + '&nbsp;</td>';
  }

  for ( var i=1; i<=dayPointer;i++ ) {
    sHTML += '<td>&nbsp;</td>';
  }

  for ( datePointer=1; datePointer <= numDaysInMonth; datePointer++ ) {
    var is_past;
    dayPointer++;
    sHTML += '<td align="right">';
    sStyle=styleAnchor;
    if (   (datePointer   == odateSelected )
        && (monthSelected == omonthSelected)
        && (yearSelected == oyearSelected  )
       ) { sStyle+=styleLightBorder }

    sHint = '';
    for (k = 0;k < HolidaysCounter; k++) {
      if ((parseInt(Holidays[k].d) == datePointer)&&(parseInt(Holidays[k].m) == (monthSelected+1))) {
        if ((parseInt(Holidays[k].y)==0)||((parseInt(Holidays[k].y)==yearSelected)&&(parseInt(Holidays[k].y)!=0))) {
          sStyle+= 'background-color:#fdd;';
          sHint += sHint=="" ? Holidays[k].desc : "\n"+Holidays[k].desc;
    } } }
    sHint = sHint.replace('/\"/g', '&quot;');

    dateMessage = 'onmousemove="window.status=\''
                  +selectDateMessage[PENGZ_LANG].replace('[date]',constructDate(datePointer,monthSelected,yearSelected))+'\'" onmouseout="window.status=\'\'" ';

    //////////////////////////////////////////////
    //////////  Modifications PinoToy  //////////
    //////////////////////////////////////////////
    if (! PENGZ_ENABLE_PAST && (   (yearSelected  < yearNow )
                                || (monthSelected < monthNow) && (yearSelected  == yearNow )
                                || (datePointer   < dateNow ) && (monthSelected == monthNow) && (yearSelected == yearNow)
       )                       ) {
      selDayAction = '';
      is_past = true;
    }
    else {
      selDayAction = 'href="javascript:dateSelected=' + datePointer + ';closeCalendar();"';
      is_past = false;
    }

    var day_pointer_mod_7 = dayPointer % 7
    var bold       = ''
    var unbold     = ''
    var font_color = '#00000'
    if ((datePointer == dateNow) && (monthSelected == monthNow) && (yearSelected == yearNow)) { // today
      bold       = '<b>'
      unbold     = '</b>'
      font_color = '#ff0000';
    }
    else if (    day_pointer_mod_7 == (1 - PENGZ_WEEK_START /*-PWS+1*/)) {  // Sunday
      if (is_past) font_color = '#909090'
      else         font_color = '#54A6E2'
    }
    else if (   (day_pointer_mod_7 == (7 - PENGZ_WEEK_START /*-PWS+7*/) && PENGZ_WEEK_START==1)
             || (day_pointer_mod_7 ==      PENGZ_WEEK_START             && PENGZ_WEEK_START==0)) { // Saturday
      if (is_past) font_color = '#909090'
      else         font_color = '#54A6E2'
    }
    else { // CUALQUIER OTRO DIA
      if (is_past) font_color = '#909090'
      else         font_color = '#000066'
    }
    sHTML += bold + "<a "+dateMessage+" title=\"" + sHint + "\" style='"+sStyle+"' "+selDayAction
                  +">&nbsp;<font color=" + font_color + ">" + datePointer + "</font>&nbsp;</a>" + unbold;
    if ((dayPointer+PENGZ_WEEK_START) % 7 == PENGZ_WEEK_START) {
      sHTML += '</tr><tr>';
      if ((PENGZ_DISP_WEEK) && (datePointer < numDaysInMonth)) {
        sHTML += '<td align="right">' + (WeekNbr(new Date(yearSelected,monthSelected,datePointer+1))) + '&nbsp;</td>';
      }
    }
  }
  document.getElementById('pengzcontent').innerHTML = sHTML
  document.getElementById('spanMonth'   ).innerHTML = '&nbsp;' + monthName[PENGZ_LANG][monthSelected]
                                                       + '&nbsp;<img id="changeMonth" src="'+PENGZ_IMG_D+'drop2.gif" width="12" height="10" border="0">'
  document.getElementById('spanYear'    ).innerHTML = '&nbsp;' + yearSelected
                                                       + '&nbsp;<img id="changeYear"  src="'+PENGZ_IMG_D+'drop2.gif" width="12" height="10" border="0">';
}

function showCalendar(ctl, ctl2, format, lang, past, fx, fy) {
  if (lang != null && lang != '') PENGZ_LANG = lang;
  PENGZ_ENABLE_PAST = past;
  if (fx != null) PENGZ_X = fx;
  else PENGZ_X = 100;
  if (fy != null) PENGZ_Y = fy;
  else PENGZ_Y = 100;

  if (PENGZ_SHOW_TODAY) {
    document.getElementById('lblToday').innerHTML =
        '<font color="#000066">' + todayString[PENGZ_LANG]
        +' <a onmousemove="window.status=\''+gotoString[PENGZ_LANG]
        +'\'" onmouseout="window.status=\'\'" title="'+gotoString[PENGZ_LANG]
        +'" style="'+styleAnchor+'" href="javascript:monthSelected=monthNow;yearSelected=yearNow;constructCalendar();">'
        +dayName[PENGZ_LANG][(today.getDay()-PENGZ_WEEK_START==-1)?6:(today.getDay()-PENGZ_WEEK_START)]+', '
        +dateNow+' '+monthName[PENGZ_LANG][monthNow].substring(0,3)+' '+yearNow+'</a></font>';
  }
  popUpCalendar(ctl, ctl2, format);
}

function popUpCalendar(ctl, ctl2, format) {
  var leftpos = 0;
  var toppos  = 0;

  if (bPageLoaded) {
    if (crossobj.visibility == 'hidden') {
      ctlToPlaceValue = ctl2;
      dateFormat = format;
      var formatChar = ' ';
      var aFormat = dateFormat.split(formatChar);
      if (aFormat.length < 3) {
        formatChar = '/';
        aFormat = dateFormat.split(formatChar);
        if (aFormat.length < 3) {
          formatChar = '.';
          aFormat = dateFormat.split(formatChar);
          if (aFormat.length < 3) {
            formatChar = '-';
            aFormat = dateFormat.split(formatChar);
            if (aFormat.length < 3) {
              formatChar = '';    // invalid date format
            }
          }
        }
      }
      tokensChanged = 0;
      if (formatChar != "") {
        var aData =  ctl2.value.split(formatChar);      // use user's date

        for (var i=0; i<3; i++) {
          if ((aFormat[i] == "d") || (aFormat[i] == "dd")) {
            dateSelected = parseInt(aData[i], 10);
            tokensChanged++;
          } else if ((aFormat[i] == "m") || (aFormat[i] == "mm")) {
            monthSelected = parseInt(aData[i], 10) - 1;
            tokensChanged++;
          } else if (aFormat[i] == "yyyy") {
            yearSelected = parseInt(aData[i], 10);
            tokensChanged++;
          } else if (aFormat[i] == "mmm") {
            for (var j=0; j<12; j++) {
              if (aData[i] == monthName[PENGZ_LANG][j]) {
                monthSelected=j;
                tokensChanged++;
              }
            }
          } else if (aFormat[i] == "mmmm") {
            for (var j=0; j<12; j++) {
              if (aData[i] == monthName2[PENGZ_LANG][j]) {
                monthSelected = j;
                tokensChanged++;
              }
            }
          }
        }
      }

      if ((tokensChanged != 3) || isNaN(dateSelected) || isNaN(monthSelected) || isNaN(yearSelected)) {
        dateSelected  = dateNow;
        monthSelected = monthNow;
        yearSelected  = yearNow;
      }
      odateSelected  = dateSelected;
      omonthSelected = monthSelected;
      oyearSelected  = yearSelected;

      var aTag = ctl;
      do {
        aTag     = aTag.offsetParent;
        leftpos += aTag.offsetLeft;
        toppos  += aTag.offsetTop;
      } while (aTag.tagName != 'BODY');

      crossobj.left = px( (PENGZ_X == -1) ? ctl.offsetLeft + leftpos                       : PENGZ_X );
      crossobj.top  = px( (PENGZ_Y == -1) ? ctl.offsetTop  + toppos + ctl.offsetHeight + 2 : PENGZ_Y );
      constructCalendar (1, monthSelected, yearSelected);
      crossobj.visibility = STR_VISIBLE;

      hideElement('SELECT', document.getElementById('pengzcal'));
      hideElement('APPLET', document.getElementById('pengzcal'));

      bShow = true;
    } else {
      hideCalendar();
      if (ctlNow!=ctl) popUpCalendar(ctl, ctl2, format);
    }
    ctlNow = ctl;
  }
}

document.onkeypress = function hidecal1 (event) {
  if (event != null && event.keyCode == 27) hideCalendar();
}
document.onclick = function hidecal2 () {
  if (!bShow) hideCalendar();
  bShow = false;
}

if (ie) {
  calendar_init();
} else {
  window.onload = calendar_init;
}
