//*****************************************************************************
// To change holidays and end-of-year closures, modify this section.
//
// Format for year start/end: mmdd([month], [day])
// Format for holidays: holiday([month], [day or datecode], [holiday duration])
//
// NOTES:
//  * Months are relative to 0 (i.e. January = 0, December = 11).
//  * Third parameter for holiday is the duration, in number of days.
//*****************************************************************************
      // Beginning and ending of year
	  var yearStart = new mmdd(0, 2);
      var yearEnd = new mmdd(11, 23);

	  // Datecodes
	  var lastMonOfMonth = 99;
	  var lastThuOfMonth = 88;
	  var lastSatOfMonth = 77;
	  var fourthThuOfMonth = 66;
	  var lastFriOfMonth = 55;

	  // Holidays
      var holidays = new Array();
      holidays[0] = new holiday(4, lastMonOfMonth, 1);    // Memorial Day
      holidays[1] = new holiday(6, 4, 1);                 // July 4th
      holidays[2] = new holiday(10, fourthThuOfMonth, 3); // Thanksgiving
//*****************************************************************************
//*****************************************************************************

      // Miscellaneous constants
      var months = new Array("January", "February", "March", "April", "May", "June", "July", "August",
                             "September", "October", "November", "December")
      var days = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
    
      var oneDay = 24 * 60 * 60 * 1000;
      var oneWeek = oneDay * 7;
      var tuesday = oneDay;
      var wednesday = oneDay * 2;
      var thursday = oneDay * 3;
      var friday = oneDay * 4;
      var saturday = oneDay * 5;
      
      var today = new Date();            
      
      function mmdd(mm, dd) {
        this.mm = mm;
        this.dd = dd;
      }
      
      function holiday(mm, dd, dur) {
        this.mm = mm;
        this.dd = dd;
        this.duration = dur;
      }
      
      function yearStarts(ddate) {
        if (ddate.getMonth() == yearStart.mm && ddate.getDate() == yearStart.dd) { return true; }
        return false;
      }
      
      function studioCloses(ddate) {
        if (ddate.getMonth() < yearEnd.mm) { return false; }
        if (ddate.getMonth() > yearEnd.mm || ddate.getDate() > yearEnd.dd) { return true; }
        return false;
      }
      
      function closed(ddate) {
        // Check beginning/end of year.
        if (studioCloses(ddate)) { return true; }
        if (ddate.getMonth() < yearStart.mm || 
           (ddate.getMonth() == yearStart.mm && ddate.getDate() < yearStart.dd)) { return true; }
        
		// If year starts on a Saturday, mark the studio closed.
		if (yearStarts(ddate) && ddate.getDay() == 6) { return true; }
            
        // Check all holidays.
        var dyear = convertYear(ddate.getYear());
        var startHoliday;
        var endHoliday;
        for (var i = 0; i < holidays.length; i++) {
          startHoliday = calculateDate(dyear, holidays[i].mm, holidays[i].dd);
          endHoliday = new Date(startHoliday.getTime() + (oneDay * (holidays[i].duration - 1)));
          if (ddate.getTime() >= startHoliday.getTime() && ddate.getTime() <= endHoliday.getTime()) { return true; }
        }
        
        return false;
      }

	  function calculateDate(year, month, day) {
	    if (day == lastMonOfMonth) {
          return lastDayOfMonth(year, month, 1);
	    }
		else if(day == lastThuOfMonth) {
          return lastDayOfMonth(year, month, 4);
        }
		else if(day == lastFriOfMonth) {
          return lastDayOfMonth(year, month, 5);
	    }
		else if(day == lastSatOfMonth) {
          return lastDayOfMonth(year, month, 6);
	    }
		else if(day == fourthThuOfMonth) {
	      return findDate(year, month, 4, 4);
	    }
		else {
          return new Date(year, month, day, 0, 0, 0);
        }
	  }
	        
      function lastDayOfMonth(yy, mm, day) {
        var ldate;
        if (mm == 11) {
          ldate = new Date(yy + 1, 0, 1, 0, 0, 0);
        }
        else {
          ldate = new Date(yy, mm + 1, 1, 0, 0 ,0);
        }
        do {
          ldate = new Date(ldate.getTime() - oneDay);
        } while (ldate.getDay() != day)
        return ldate;
      }
	  
	  function findDate(yy, mm, day, week) {
	    var fdate = new Date(yy, mm, 1, 0, 0, 0);
		while (fdate.getDay() != day) {
		  fdate = new Date(fdate.getTime() + oneDay);
		}
		fdate = new Date(fdate.getTime() + ((week - 1) * oneWeek));
		return fdate;
	  }
      
      function convertYear(year) {
        // need this for Netscape
        var yy = year;
        if (yy < 2000) {
          yy = yy + 1900;
        }
        return yy;
      }
      
	  function convertTime(time) {
	    if (time == "") { return time; }
		if (time == "12:00am") { return "00:00"; }
		if (time == "12:00pm") { return "12:00"; }
		
		var i = time.indexOf("am");
		var j = time.indexOf(":");
        var military;
		var hour;

        if (i > 0) {
          military = time.substring(0, i);
        }
		else {
		  i = time.indexOf("pm");
		  if (i > 0) {
		    hour = parseInt(time.substring(0, j));
			hour += 12;
			military = hour + time.substring(j, i);
		  }
		  else {
		    military = time;
		  }
		}
        if (military.length < 5) { military = "0" + military; }
		return military;
      }