/**
 * Functions which support the formatting and printing of dates
 *
 * @author Mark Davidson (lick_the_toad@yahoo.com)
 * @version 1.0
 */

 // Array of day names
 var dayNames = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
 var monthNames = new Array("January","February","March","April","May","June","July",
                            "August","September","October","November","December");

 /**
  * Prints the date object to the document.
  */
 function printDate(date) {
   var y = date.getYear();
   // Y2K compliant
   if (y < 1000) y += 1900;
   document.write(dayNames[date.getDay()] + ", " + monthNames[date.getMonth()] + " " + date.getDate() + ", " + y);
 }
 
 // Returns a date object which represents the next day.
 // @param day Day of the week. i.e., Sunday = 0, Saturday = 6
 function nextDay(date, day) {
   var weekDay = date.getDay();
   var monthDay = date.getDate();

   if (day < weekDay) {
      date.setDate(monthDay + (7 - weekDay + day));
   } 
   else if (day > weekDay) {
      date.setDate(monthDay + (day - weekDay));
   }
   return date;
 }

 // Returns the next first day of the month.
 // @param day Day of the week. i.e., Sunday = 0, Saturday = 6
 function firstDayOfMonth(day) {
   var today = new Date();
   var weekDay = today.getDay();
   var monthDay = today.getDate();

   if (monthDay <= 7) {
     var newDate = nextDay(today, day);
     if (newDate.getDate() <= 7) {
       return newDate;
     }
   }

   var month = today.getMonth();
   var year = today.getFullYear();

   if (month == 11) {
     month = 0;
     year++;
   }
   else {
     month++;
   }
   return nextDay(new Date(year, month, 1), day);
 }
 
 // Returns the second day of the month
 // @param day Day of the week. i.e., Sunday = 0, Saturday = 6
 function secondDayOfMonth(day) {
   var next = nextDay(new Date(), day);
   if (next.getDate() >= 8 && next.getDate() <= 14) {
     return next;
   }

   var first = firstDayOfMonth(day);
   first.setDate(first.getDate() + 1);
   return nextDay(first, day);
 }

 function thirdDayOfMonth(day) {
	   var next = nextDay(new Date(), day);
	   if (next.getDate() >= 15 && next.getDate() <= 21) {
	     return next;
	   }

	   var second = secondDayOfMonth(day);
	   second.setDate(second.getDate() + 1);
	   return nextDay(second, day);
	 }

 function forthDayOfMonth(day) {
	   var next = nextDay(new Date(), day);
	   if (next.getDate() >= 22 && next.getDate() <= 28) {
	     return next;
	   }

	   var third = thirdDayOfMonth(day);
	   third.setDate(third.getDate() + 1);
	   return nextDay(third, day);
	 }

