///////////////////////////////////////////
// Calendar v1.0.0                       //
// (c) 2001 by Flying/DR/HRz             //
///////////////////////////////////////////
// Contact me: flying@dom.natm.ru        //
// if you want to use this script        //
// or need something else for your site. //
///////////////////////////////////////////

//var months = Array('January','February','March','April','May','June','July','August','September','October','November','December');
var months = Array();
var dayNames = Array('Mo','Tu','We','Th','Fr','Sa','Su');
var sundayFirst = false;
var charSet = 'iso-8859-1';

var date = new Date();
//var curMonth = date.getMonth()+1;
var curMonth=null;
//var curYear = date.getFullYear();
var curYear=null;
//var actDay = date.getDate();
var actDay=null;
//var actMonth = curMonth;
var actMonth = null;
//var actYear = curYear;
var actYear = null;

var selDate;
var selMonth;
var NS4 = false;
var userFunc = null;
var win = null;
var nazwa = null;


// prepare calendar
function PrepareCalendar(){
	if (months.length == 0) {
		var tmp_hid;
		var hiddens_to_tak = Array('january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october','november', 'december');
		for (var k=0; k < hiddens_to_tak.length; k++){
			tmp_hid = document.getElementById('_' + hiddens_to_tak[k]);
			if (tmp_hid) {
				months[k] = tmp_hid.value;
			}
			else months[k] = hiddens_to_tak[k];
		}
	}
} 

// Function returns an array with month and year of previons month
function getPrevMonth(month, year)
{
    return((month==1)?new Array(12,year-1):new Array(month-1,year));
};

// Function returns an array with month and year of next month
function getNextMonth(month, year)
{
    return((month==12)?new Array(1,year+1):new Array(month+1,year));
};

// Function returns number of days within given month and year
function getDaysNum(month, year)
{
    var numDays = new Array(31,0,31,30,31,30,31,31,30,31,30,31);
    if (numDays[month-1]!=0)
        return(numDays[month-1]);
    else
        return((isLeapYear(year))?29:28);
};

// Function returns TRUE if given year ia leap, FALSE otherwise
function isLeapYear(year)
{
    return(((year % 4)==0) && !(((year % 100)==0) && ((year % 400)!=0)));
};


// Display calendar table for current month and year
function displayCalendar()
{
	PrepareCalendar();
	// Create array of days, being displayed for current month
    var days = new Array();
    var curDay = 0;
    var date = new Date(curYear,curMonth-1,1);
    var fDay = date.getDay();
    if (!sundayFirst)
    {
        if (--fDay<0)
            fDay+=7;
        fDay = fDay % 7;
    };
    if (fDay!=0)
    {
        var pMonth = getPrevMonth(curMonth,curYear);
        var numDays = getDaysNum(pMonth[0],pMonth[1]);
        for (i=fDay;i>0;i--)
            days[curDay++] = numDays-i+1;
    };
    var numDays = getDaysNum(curMonth,curYear);
    for (i=1;i<=numDays;i++)
        days[curDay++] = i;
    var day = 1;
    while((curDay % 7)!=0)
        days[curDay++] = day++;

    // Create HTML code for diplaying calendar
    if (typeof(special_months) != "undefined" && typeof(special_months[curMonth-1]) == "string") momo = special_months[curMonth-1];
    else momo = months[curMonth-1];

//    var html = '<html><head><title>calendar</title><meta http-equiv="Content-Type" content="text/html; charset='+charSet+'">\n';
//    var font = 'font-family: Arial, Helvetica, sans-serif; font-size: 11px; font-weight: normal; text-decoration: none; text-align: center; ';
/*    if (!NS4)
        html += '<style type="text/css"><!-- .rahmen {margin: 3px 1px 1px;border: 2px solid #666666;}\n.nav {'+font+'color: #003399}\n .aDay {font-family: Arial, Helvetica, sans-serif;font-size: 11px;font-weight: bold;text-decoration: none;color: #000000}\n .day {font-size: 11px;font-weight: normal;color: #999999;text-decoration: line-through;}\n .month {'+font+
                    'color: #000000}\n .dayName {'+font+'color: #000000;background-color: ##ffffff;border-bottom-width: 1px;border-bottom-style: solid;border-bottom-color: #999999;}\n .curDay {'+font+'color: #990000;border: 1px solid #990000;height: 15px;width: 20px;text-align: center;vertical-align: middle;}\n .tdmonth {font-family: Arial, Helvetica, sans-serif;font-size: 11px;font-weight: bold;color: #FFFFFF;letter-spacing: 2px;background-color: #808080;border-top-width: 1px;border-right-width: 1px;border-bottom-width: 1px;border-left-width: 1px;border-top-style: solid;border-right-style: solid;border-bottom-style: solid;border-left-style: solid;border-top-color: #000000;border-right-color: #FFFFFF;border-bottom-color: #000000;border-left-color: #FFFFFF;}\n .tdday {background-color: #e1e1e1;}\n .tdright {border: 1px solid #000000;background-color: #808080;}\n .tdleft {border: 1px solid #000000;background-color: #808080;}\n --></style>\n';
    html += '</head><body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">\n';
*/
    var html = '<table width="170"><tr><td><div  width="170"  calss="rahmen"><div class="shadow" width="170"><div align="center"><table class="rahmen" width="170" height="95" border="0" cellspacing="0" cellpadding="'+((NS4)?1:2)+'" align="center" >\n';
	html += '<tr ><td height="22" colspan=8 align=right class="tdmi"><a href="#" onClick="closeCalendar();" style=text-decoration:underline; font-weight:bold;><img src="templates/close.gif" border=0></a></td></tr>';
    html += '<tr class=tdtop><td height="22" class=tdtop>';
    if ((curYear == actYear) && (curMonth == actMonth)) {
        html += '&nbsp;';
    }
    else {
        html += '<a href="#" class="nav" onClick="return(prevMonth())"><img src="http://flights2.infosys.de/prevMonth.gif" border="0"></a>';
    }
    html += '</td><td class="tdtop" colspan="5" align="center" class="month" nowrap>'+momo+' '+curYear+
                '</td><td class="tdleft">';
    if ((curYear == (actYear + 2)) && (curMonth == 12)) {
        html += '&nbsp;';
    }
    else {
        html += '<a href="#" class="nav" onClick="return(nextMonth())"><img src="http://flights2.infosys.de/nextMonth.gif" border="0"></a>';
    }
    html += '</td></tr>\n';

    html += '<tr>\n';
    if (typeof(firstWeekDay)== "undefined") {
        var index = (sundayFirst)?6:0;
    } else {
        index = parseInt(firstWeekDay);
        index = (index>=0 && index <=6)?index:6;
    }
    for (var i=0;i<7;i++)
    {
        if (typeof(special_dayNames) != "undefined" && typeof(special_dayNames[index]) == "string") {
            html = html+'<td class="tdmibottom">'+special_dayNames[index]+'</td>\n';
        } else {
            html = html+'<td class="tdmibottom">'+dayNames[index]+'</td>\n';
        }
        index++;

        index = index % 7;
    };
    html = html+'</tr>\n';
    date = new Date();
    day = ((date.getMonth()==(curMonth-1)) && ((date.getFullYear()==curYear)))?date.getDate():-1;
    curDay = 0;
    var isCurMonth = false;
	
    while(curDay<days.length)
    {
        if ((curDay % 7)==0)
            html = html+'<tr>\n';
        if (days[curDay]==1)
            isCurMonth = !isCurMonth;
        dayHTML = ((days[curDay] == day) && (NS4))?"<font color=\"#FF0000\"><b>"+days[curDay]+"</b></font>":days[curDay];
        if (isCurMonth && !((curMonth == actMonth) && (days[curDay] < actDay)))
        {
			// getting day type (current/selected or none)
			if (days[curDay] == selDate && curMonth == selMonth){
				dateClass = 'selDay';
			}
			else {
				dateClass = ((days[curDay]==day)?'curDay':'aDay');
			}
			html += '<td align="center" class="tdmi"><a href="#" class="'+dateClass+'" onClick="return(setDate('+days[curDay++]+'))" />'+dayHTML+'</a></td>\n';
        }
        else {
            html = html+'<td align="center" class="tdmi" ><font color=\"#eeeeee\"><i>'+days[curDay++]+'</i></font></td>\n';
        }
        if ((curDay % 7)==0)
            html = html+'</tr>\n';
		//curDay++;
    };
    html = html+'</table></div>\n</div>\n</div></tr></td></table>';
    //win.document.open();
    //win.document.write(html);
    //win.document.close();
	if (document.getElementById){
		document.getElementById(nazwa).innerHTML=html;
	}
};

function prevMonth(){
    var pMonth = getPrevMonth(curMonth,curYear);
    curMonth = pMonth[0];
    curYear = pMonth[1];
    displayCalendar();
    return(false);
};

function nextMonth(){
    var nMonth = getNextMonth(curMonth,curYear);
    curMonth = nMonth[0];
    curYear = nMonth[1];
    displayCalendar();
    return(false);
};

function setDate(day,idCal){
	document.getElementById(nazwa).style.display = 'none';
	eval(userFunc+"("+day+","+curMonth+","+curYear+")");
	return(false);
};

/* This function must be called to get calendar to work.
* At enter:
* callbackFunc - name of user function being called to provide selected date
*/
function getDate(callbackFunc, elementName, year, month, day, c_year, c_month, c_day){
	selDate = parseInt(c_day,10);
	curMonth = parseInt(c_month,10);
	selMonth = curMonth;
	curYear = parseInt(c_year,10);
	actDay = day;
	actMonth = month;
	actYear = year;
	nazwa = elementName;

	NS4 = ((navigator.appName.indexOf('Netscape')!=-1) && (parseInt(navigator.appVersion)==4));
	userFunc = callbackFunc;
	//win = window.open("","calendar","location=0,toolbar=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,width=175,height=170,top=" + top + ",left=" + left);
	displayCalendar();
	//win.focus();
	return(false);
};

function closeCalendar(){
	document.getElementById(nazwa).style.display="none";
}
