function test_date_correctness( year, month, day ) {
  return (month > 0 && month < 13 && day <= getDaysInMonth( year, month) && year > 2003);
}
var daysInMonths = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
var monthNames = new Array( 'Januar', 'Februrar', 'M&auml;rz', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember');
function getDaysInMonth( year, month ) {
  var leap = ( ( year % 4 == 0 ) && ( year % 100 != 0 ) ) || ( year % 400 == 0 );
  if (leap && month == 2) { return 29; } else { return daysInMonths[month-1]; }
  
}
var calendarWindow;
var count = 0;
function generateCalendar( year, month ) {
  var opnr = "opener.";
  var currentDate = new Date();
  var currentYear = currentDate.getYear();
  if (currentYear < 150) { currentYear += 1900; }
  var currentMonth = currentDate.getMonth()+1;
  var currentDay = currentDate.getDate();
  if (year == -1) { year = currentYear; month = currentMonth; }
  year = parseInt(year, 10);
  month = parseInt(month, 10);
  var prevYear = year;
  var prevMonth = month - 1;
  if (prevMonth == 0) { --prevYear; prevMonth = 12; }
  
  var nextYear = year;
  var nextMonth = month + 1;
  if (nextMonth == 13) { ++nextYear; nextMonth = 1; }
  
  
  var c =
'<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">'+
'<html>'+
'<head><link REL="stylesheet" HREF="http://www.pentagonik.de/css/main.css" TYPE="text/css">'+
'      <title>Pentagonik Calender</title>'+
'  </head>'+
  
'  <body style="background: #fff">'+
'    <center>'+
'      <table border=0 cellspacing=0 cellpadding=1 height=100% width=100%>'+
'	<tr>'+
'	  <td class=white valign=middle>'+
'	    <table border=0 cellspacing=0 cellpadding=1 width=100%>'+
'	      <tr>'+
'		<td class=dark>'+
'		  <table cellpadding=0 width=100% cellspacing=0 border=0>'+
'		    <tr>'+
'		      <td class=white>'+
'			<table cellpadding=2 cellspacing=1 BORDER=0 width="100%">'+
'			  <tr valign="top">'+
'			    <th colspan=7 class=headline align=middle>'+
'			      <table border=0 cellpadding=3 cellspacing=0 width=100%>'+
'				<tr>'+
'				  <th align=middle>'+
'				    <a href="javascript://" onClick="'+opnr+'reloadCalendar('+ prevYear+','+prevMonth+');">&laquo;&laquo;</A>&nbsp;&nbsp;'+monthNames[month-1]+' '+year+'</font>&nbsp;&nbsp;'+
'				    <a href="javascript://" onClick="'+opnr+'reloadCalendar('+nextYear+","+nextMonth+');">&raquo;&raquo;</A>'+
'				  </th>'+
'				</tr>'+
'			      </table>'+
'			    </th>'+
'			  </tr>'+
'			  <tr>'+
'			    <th class=dark width=20><center>Mo</th>'+
'			    <th class=dark width=20><center>Di</th>'+
'			    <th class=dark width=20><center>Mi</th>'+
'			    <th class=dark width=20><center>Do</th>'+
'			    <th class=dark width=20><center>Fr</th>'+
'			    <th class=dark width=20><center>Sa</th>'+
'			    <th class=dark width=20><center>So</th>'+
'			  </tr><tr>'
  var date = new Date( year, month-1, 1 );
  var firstDay = date.getDay();
  if (firstDay == 0) { firstDay = 7; }  
  for( var i = 1; i < firstDay; ++i ) {
    c += '<td>&nbsp;</td>';
  }
  
  var days = getDaysInMonth( year, month );
  var d = 1;
  while( d <= days ) {
    for( ; i <= 7; ++i ) {
      var color = (month == currentMonth && d == currentDay ? 'dddddd' : 'eeeeee');
      var sclass = (month == currentMonth && d == currentDay ? 'dark_right' : 'light_right');
      c += '<td class="'+sclass+'"><center>'+ (d <= days ? '<a href="javascript://" onClick="'+opnr+'closeCalendar('+year+','+month+','+d+');"><b>'+d+'</b></a>' : '&nbsp;') + '</td>';
      ++d;
    }
    c += '</tr>';
    i = 1;
  }
  c += '</table>'+
'			  <tr>'+
'			    <td class=white>'+
'			      &nbsp;'+
'			    </td>'+
'			  </tr>'+
'			  <tr>'+
'			    <td class=light>'+
'			      <table width=100%>'+
'				<tr>'+
'				  <td>'+
'				      <a href="javascript://" onClick="'+opnr+'reloadCalendar('+currentYear+','+(currentDate.getMonth()+1)+');">&nbsp;&nbsp;&nbsp;zum aktuellen Monat</a>'+
'				  </td>'+
'				  <td align=right>'+
'				      <a href="javascript:window.close();">Fenster schliessen&nbsp;&nbsp;&nbsp;</a>'+
'				  </td>'+
'				</tr>'+
'			      </table>'+
'			    </td>'+
'			  </tr>'+
'			</table>'+
'		      </td>'+
'		    </tr>'+
'		  </table>'+
'		</td>'+
'	      </tr>'+
'	    </table>'+
'      </table>'+
'    </center>'+
'  </body>'+
    '</html>';
  
  
  return c;
}
function writeData( year, month ) {
  calendarWindow.document.open();
  if (!test_date_correctness( year, month, 1)) {
    calendarWindow.document.write( generateCalendar(-1, -1) );  
  } else {
    calendarWindow.document.write( generateCalendar(year, month) );  
  }
  calendarWindow.document.close();
}
var year_object, month_object, day_object;

function openCalendar( yearo, montho, dayo ) {
  /*if (!test_date_correctness( yearo.value, montho.value, dayo.value ) ) {
    alert("Date is not correct"); return;
  }*/
  
  
  year_object = yearo;
  month_object = montho;
  day_object = dayo;
  calendarWindow = window.open("", "Calendar", "width=300,height=200");
  writeData( year_object.value, month_object.value );
  calendarWindow.opener_value = window;
}
function reloadCalendar( year, month ) {
  ++count;
  writeData(year, month);
}
function closeCalendar( year, month, day ) {
  calendarWindow.close();
  year_object.value = year;
  month_object.value = month;
  day_object.value = day;
}
