var resvColor = "#ff0000";
var checkColor = "#ffff00";
var normColor = "#00ff00";
var dayColor = "#80A2F0";

var rsvs = new Array();
var monthDays = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
var monthName = new Array("January","February","March","April","May","June","July","August","September","October","November","December");

var now = new Date();
var theyear = now.getFullYear();
//var themonth = now.getMonth();
var themonth = 0;
   
function initCalendar() {

   getReservations();
   displayCalendar();

}


function cal_getString(month, year) {

   var firstDate;
   var firstDay;          

   var day = 0;
   var calStr = "";

   calStr += "<TABLE BORDER=5 BORDERCOLOR=#0000FF>";
   calStr += "<TR><TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + normColor + "'><font face='arial' size='1'>&nbsp;</TD><TD><font face='arial' size='2'>Dates are Available</TD></TR>";
   calStr += "<TR><TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + resvColor + "'><font face='arial' size='1'>&nbsp;</TD><TD><font face='arial' size='2'>Dates are Reserved</TD></TR>";
   calStr += "<TR><TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + checkColor + "'><font face='arial' size='1'>&nbsp;</TD><TD><font face='arial' size='2'>Dates are Pending</TD></TR>";
   calStr += "</TABLE>";

   calStr += "<BR>";

   calStr += "<TABLE BORDER=5 BORDERCOLOR=#0000FF>";
   calStr += "<TR><TD><font face='arial' size='2'>To View This Calendar Accurately, Please Use Internet Explorer</TD></TR>";
   calStr += "</TABLE>";

   calStr += "<BR>";

   calStr += "<TABLE BORDER=5 BORDERCOLOR=#0000FF>";
   calStr += "<TR>";
   calStr += "<TD><A HREF='javascript:decrement_year()'><center><b><font face='arial' size='2'>Previous Year </font></b></center></A></TD>";
   calStr += "<TD><center><b><font face='arial' size='2'>" + year + "</font></b></center></A></TD>";

   //calStr += "<TD>&nbsp;</TD>"

   calStr += "<TD ALIGN='RIGHT'><A HREF='javascript:increment_year()'><center><b><font face='arial' size='2'>Next Year</font></b></center></A></TD>";
   calStr += "</TR>";
   calStr += "<font face='arial' size='1'>";
      
   for (var g = 0; g < 4; g++) {

      calStr += "<TR>";

      for (var h = 0; h < 3; h++) {

         firstDate = new Date(year, month, 1);
         firstDay = firstDate.getDay();

         calStr += "<TD VALIGN=TOP>";

         calStr += "<font face='arial' size='2'>" + monthName[month] + " " + year;
         calStr += "<TABLE BORDER=1 ROWS=6 COLS=7 cellpadding='0' cellspacing='0'>";

         //days of week
         calStr += "<TR>";
         calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + dayColor + "'><font face='arial' size='2'>Su</TD>";
         calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + dayColor + "'><font face='arial' size='2'>Mo</TD>";
         calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + dayColor + "'><font face='arial' size='2'>Tu</TD>";
         calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + dayColor + "'><font face='arial' size='2'>We</TD>";
         calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + dayColor + "'><font face='arial' size='2'>Th</TD>";
         calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + dayColor + "'><font face='arial' size='2'>Fr</TD>";
         calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + dayColor + "'><font face='arial' size='2'>Sa</TD>";
         calStr += "</TR>";

         //first week 
         calStr += "<TR>";
         if (firstDay != 0) 
            calStr += "<TD COLSPAN=" + firstDay + ">&nbsp;</TD>";
         


         for (var i = firstDay; i < 7; i++) {
            day++;
            key = checkReserve(month, day, year);
            calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + key + "'>";
            calStr += "<font face='arial' size='2'>" + day;
            calStr += "</TD>";
         }
         calStr += "</TR>";
         
         //remaining weeks
         for (i = 1; i < 6; i++) {

            calStr += "<TR>";

            for (var j = 0; j < 7; j++) {
                 
               day++;
               if (day <= getMonthDays(month, year)) {
               
                  key = checkReserve(month, day, year);
                  calStr += "<TD WIDTH=20 ALIGN=CENTER BGCOLOR='" + key + "'>";
                  calStr += "<font face='arial' size='2'>" + day;
                  calStr += "</TD>";
               }
            }

         	calStr += "</TR>";
         }

         calStr += "</TABLE>";
         calStr += "</TD>";

         //next month
         month++;
         if (month > 11) {
            month = 0;
            year++; 
         }
         day = 0;
      }

      calStr += "</TR>";

   }

   calStr += "</TABLE>";
	return calStr;
}


function checkReserve(month, day, year) {

   month++;
   var subject = month + "/" + day + "/" + year;

   if (!rsvs[subject]) 
      return normColor;
   
   else if(rsvs[subject].indexOf("check") == -1) 
      return resvColor;
   
   else 
      return resvColor;

   
}



function displayCalendar() {

   var szcal;

   document.all['cal_display'].innerHTML = cal_getString(themonth, theyear);
}

function getMonthDays(month, year) {


   if (month != 1) 
      return monthDays[month];
   else if ( (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0)) )
         return 29;
      else
         return 28;
   
}


function getReservations() {

   var resdate = new Date();
   var enddate = new Date();
   
   var xmlDoc = document.getElementById('xmlCalendar');

   var elements = xmlDoc.getElementsByTagName('reservation');


   for(var i = 0; i < elements.length; i++) {

      var children = elements[i].childNodes;
      var name = children[0].firstChild.nodeValue;    
      
      //get end date
      enddate.setTime(Date.parse(children[2].firstChild.nodeValue));
      rsvs[(enddate.getMonth() + 1) + "/" + enddate.getDate() + "/" + enddate.getYear()] = "checkout" + name;
      
      //get start date
      resdate.setTime(Date.parse(children[1].firstChild.nodeValue));
      rsvs[(resdate.getMonth() + 1) + "/" + resdate.getDate() + "/" + resdate.getYear()] = "checkin:" + name;

      resdate = inc_day(resdate);
      while (resdate.getTime() < enddate.getTime()) {
         rsvs[(resdate.getMonth() + 1) + "/" + resdate.getDate() + "/" + resdate.getYear()] = name;
         resdate = inc_day(resdate);
      }

      
   }
}



function inc_day(date) {

   var day = date.getDate();
   var month = date.getMonth();
   var year = date.getYear();

   day++;
   if (day > getMonthDays(month, year)) {
      day = 1;
      month++;
      if (month > 11) {
         month = 0;
         year++;
      }
   }

   return new Date(year, month, day);

}

function increment_year() {

   theyear++;
   document.all['cal_display'].innerHTML = cal_getString(themonth, theyear);
}

function decrement_year() {

   theyear--;
   document.all['cal_display'].innerHTML = cal_getString(themonth, theyear);
}

