var eventArray = new Array();
//-- Expired events.


/*-- Event Template
/*-- Note: To specify a location not on this server, define the url property. 
If a url is defined, it must include the "http://" at the start, 
 or it will try to refer to something on this server.

ev = new Event("");
ev.linkString = "";
ev.extraString = '';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;
-*/

ev = new Event("UTHSC_Practica");
ev.linkString = "Practica at UTHSC Spectrum Club";
ev.extraString = '5:30-7:15 PM';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;

ev = new Event("JazzerciseMilonga");
ev.linkString = "Milonga at Jazzercise";
ev.extraString = '';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;

ev = new Event("PavilShow");
ev.linkString = "Dinner Show, Class, Milonga";
ev.extraString = 'At Pavil';
//-- ev.url = null;
ev.expired = true;
eventArray[ev.name] = ev;

ev = new Event("ArcuriWS");
ev.linkString = "Workshop by Daniela Arcuri";
ev.extraString = '7-9:30 PM, At Jazzercise';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;

ev = new Event("ArcuriMilonga");
ev.linkString = "Milonga with exhibition: Daniela and Grisha";
ev.extraString = '9:30 - 12, at Jazzercise';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;

ev = new Event("FondaMilonga");
ev.linkString = "Milonga at La Fonda";
ev.extraString = '7 - 10 PM';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;

ev = new Event("MilongaDelNorte");
ev.linkString = "Milonga Del Norte";
ev.extraString = '(Round Rock)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;


ev = new Event("AustinSpring");
ev.linkString = "Austin Spring Tango Festival";
ev.extraString = '(Austin)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;

ev = new Event("AnniesMilonga");
ev.linkString = "Milonga at Annie's";
ev.extraString = '(Austin)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;


ev = new Event("AntiguaMilonga");
ev.linkString = "Milonga at Antigua";
ev.extraString = '6-10 PM';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;


ev = new Event("CalleOcho");
ev.linkString = "Milonga at Calle Ocho";
ev.extraString = '8 - 10:30 PM';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;


ev = new Event("ArcuriClasses");
ev.linkString = "Classes by Daniela Arcuri";
ev.extraString = "at Brasserie Pavil";
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;
 
ev = new Event("UptownMilonga");
 ev.linkString = 'Uptown Milonga';
ev.extraString = '(Austin)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;
 
ev = new Event("NocheDeTango");
ev.linkString = '"Noche De Tango" at EsquniaTango';
ev.extraString = '(Austin)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;
	
ev = new Event("LoDeLaura");
 ev.linkString = 'Milonga "Lo De Laura"';
ev.extraString = '(Austin)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;
	 
ev = new Event("BharmacyMilonga");
ev.linkString = "Milonga at the Olmos Bharmacy";
ev.extraString = '7 - 10 PM';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;

ev = new Event("EsquinaPassion");
ev.linkString = "Esquina Passion Milonga";
ev.extraString = '9:00 PM - 12:00 AM (Austin)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;


ev = new Event("SalonMexicoTango");
ev.linkString = "Salon Mexico Tango Weekend";
ev.extraString = '';
ev.expired = false;
eventArray[ev.name] = ev;


ev = new Event("MilongaCampanario");
ev.linkString = "Milonga Campanario";
ev.extraString = '(Austin)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;

ev = new Event("UATCMilonga");
ev.linkString = "UATC Milonga";
ev.extraString = '9 PM - 1 AM (Austin)';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;


ev = new Event("TazzaFresca");
ev.linkString = "Milonga at La Tazza Fresca (Austin)";
ev.extraString = '8PM-12PM';
//-- ev.url = null;
ev.expired = false;
eventArray[ev.name] = ev;


	
//-------------------------------------------------------------------------------------------------------

var monthNames = ["","January","February","March","April","May","June","July","August","September","October","November","December"];
//var monthDays = [0,31,28,31,30,31,30,31,31,30,31,30,31];	//-- non-leap years. First entry not used.
//var monthStartDays = [0,2,5,5,1,3,6,1,4,0,2,5,0];	//-- for 2002. 0 = Sunday, etc. (first entry
//-- is null, and does not refer to a month; it's just there so I can use month numbers as subscripts)
//----------------------------------------------

var monthEvents = new Array(13);	//-- Events Array for the year.
//-- Start by initializing all month entries to null.
for( var i=0; i < 13; i++ ) {
  monthEvents[i] = null;
}


//-- Array of regular weekly events.
var weekEvents = new Array(7);
//weekEvents[0] = ["Classes","Practica"];
weekEvents[0] = ["AntiguaMilonga"];
weekEvents[1] = null;
weekEvents[2] = ["ArcuriClasses"];
weekEvents[3] = ["FondaMilonga"];
weekEvents[4] = ["EsquinaPassion"];
weekEvents[5] = null;
weekEvents[6] = null;

//-- Array of special events to be added.
//-- format: addEvents[i++] = [month-number,day-number,"event name"]; 
var addEvents = new Array();  //-- Modify this as needed!
var i = 0;

/*--
addEvents[i++] = [ , ," "];
--*/



addEvents[i++] = [ 4,7, "CalleOcho"];
addEvents[i++] = [4,10, "JazzerciseMilonga"];
addEvents[i++] = [ 4,14, "BharmacyMilonga"];
addEvents[i++] = [4 ,24 ,"ArcuriWS"];
addEvents[i++] = [ 4,24 ,"ArcuriMilonga"];
addEvents[i++] = [ 4,25 ,"PavilShow"];
addEvents[i++] = [ 4,28, "BharmacyMilonga"];

addEvents[i++] = [ 5, 7,"LoDeLaura"];
addEvents[i++] = [ 5, 8,"NocheDeTango"];
addEvents[i++] = [5,8,"JazzerciseMilonga"];


//-- Array of special event deletions. Put an entry here to surpress the 
//-- reporting of an event that would otherwise be reported.
//-- format: deleteEvents[i++] = [month-number,day-number,"name of event"];
var deleteEvents = new Array(); 
var i = 0;
deleteEvents[i++] = [2,3,"FondaMilonga"];

var dE_length = deleteEvents.length;  //-- probably no longer necessary.

//-----------------------------------------------
//-- Create a month with the standard events.
function createMonth( monthNum, year ) {
  var d;
  
  var weekdayNum;  
  var monthIndex = monthNum - 1;
  var nd;
//  var dayEventList = new Array();
  var thisEventName;
  var daysInMonth = numberOfDays( monthNum, year );
  var thisMonthEventArray = new Array(daysInMonth+1);
  var k = 0;
  var kk = 0;
  for( var i=1; i <= daysInMonth; i++ ) {
     d = new Date( year, monthIndex, i );
     weekdayNum = d.getDay();
	  var wk = Math.ceil(i/7);

     //-- If there are events for this weekday, we have to create a new array
     //-- and copy them; otherwise the array element will just be a pointer
     //-- to the original array, and any changes will change it and whatever
     //-- else points to it.
     if( weekEvents[weekdayNum] != null ) {
       thisMonthEventArray[i] = new Array( weekEvents[weekdayNum].length );
       for( var ii=0; ii < weekEvents[weekdayNum].length; ii++ ) {
          thisMonthEventArray[i][ii] = weekEvents[weekdayNum][ii];
        }
		kk = weekEvents[weekdayNum].length;
     }
	 //-- If this day's events are a null list, create an empty array anyway; that way the
	 //-- routine won't die if you later try to add events to it.
	 else {
		 thisMonthEventArray[i] = new Array();
    	 kk = 0;
	 }
	 
	//-- Tuesday stuff 
	/*-- not needed (fh 200907)
	if( weekdayNum == 2 ) {
	   if( (wk == 2) || (wk == 4) ) {
			thisMonthEventArray[i][kk++] = ["BharmacyMilonga"];
		}
	 }
	 */
 
	 //-- Friday stuff goes here.
     //-- The second and last Friday of every month is the Instituto milonga; check for this.
	
//-- Friday stuff.
 if( weekdayNum == 5 ) { 
 //  thisMonthEventArray[i][kk++] = ["FondaLatinaMilonga"];
	 /*-- Not doing this until February 2007, according to Marion Perry.
	//-- The Instituto Milonga: 1st, 2nd and 4th Fridays	
	   if( (wk == 2) || (wk == 4) ) {
         thisMonthEventArray[i][kk++] = ["Ardiente-Instituto"]; 
       }
	 --*/
//-- 2nd Friday: at Let's Dance Studio. (200611: I think this has been cancelled)
/*--
	   if( wk == 1 ) {
         thisMonthEventArray[i][kk++] = ["Ardiente-LetsDance"]; 
	   }
--*/
      //-- Week 2 is Tazza Fresca.
      if ( wk == 2 ) {
        thisMonthEventArray[i][kk++] = ["TazzaFresca"];
      }
      

   //-- Copa moved to last Friday in the month; check for this. -->
   //-- 20081007: no more Copa
   /*--
       if( (daysInMonth - i) < 7 ) {
         thisMonthEventArray[i][kk++] = ["Copa"];
       }
    --*/

 } 
//-- end of Friday stuff.


     
     //-- the Jazzercise milonga; 2nd  Saturday of each month.
	 /*--
	 if( (Math.ceil(i/7) == 2) && (weekdayNum == 6) ) {
		 thisMonthEventArray[i][kk++] = ["SATMilonga"];
	 }
	 --*/
   }
   //-- Add special events
   for( var i=0; i < addEvents.length; i++ ) {
      if( addEvents[i] == null) break;
      if( addEvents[i][0] == monthNum ) {
        nd = addEvents[i][1];
        thisMonthEventArray[nd] == null ? thisMonthEventArray[nd] = [ addEvents[i][2] ] : 
        thisMonthEventArray[nd] = [ addEvents[i][2] ].concat(thisMonthEventArray[nd]);
      }
          
   }
   
   //-- delete events: Read the deleteEvents array and remove any that are specified.
   for( var i=0; i < dE_length; i++ ) {
     if(deleteEvents[i] == null) break;
     if( deleteEvents[i][0] == monthNum ) {			//-- check for same month.
       nd = deleteEvents[i][1];						//-- get the day.
//       dayEventList.length = 0;
       //-- take each event name out and see if it matches the name we want to delete. 
//-- in this version we don't use a temporary dayEvents array.
       for( var j=0; j < thisMonthEventArray[nd].length; j++ ) {
         thisEventName = thisMonthEventArray[nd][j];
         //-- if event name matches, remove it from the day's event list.
         if( thisEventName == deleteEvents[i][2] ) {
            thisMonthEventArray[nd].splice(j,1);
         }
       }
      }

    }
             
       
   
   return thisMonthEventArray;
   
 }
   
//------------------------------------------------  
//-- The Event Objects
function Event(eventName) {
  this.name = eventName;
  this.expired = false;
  this.url = 'TangoActivities.html#' + this.name;
}
//-----------------------------------------------


//--------------------------------------------------------

function numberOfDays( month, year ) {
   var numDays = new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);
   n = numDays[month];
   if( month == 2 && year % 4 == 0 ) ++n;
   return n
}

//--------------------------------------------------------

function writeMonthEvents() {

  document.write("<br>In writeMonthEvents()");

  for(var i=0; i < monthEvents[this.monthNumber].length; i++) {
    if(monthEvents[this.monthNumber][i]) {
      document.write("<br>",i," : ",monthEvents[this.monthNumber][i]);
    }
  }
}

//---------------------------------------------------------

//-- Prototype CalendarMonth object
function calendarMonth(monthNumber, year) {
//--  document.write ("<br/>In calendarMonth: creating object for month number: " + monthNumber);
  this.year = year;
  this.monthNumber = monthNumber;
  this.name = monthNames[monthNumber];
  var d = new Date(year, monthNumber - 1, 1);
  this.numDays = numberOfDays( monthNumber, year );
  this.startDayIndex = d.getDay();
  /*--
  if( monthEvents[monthNumber] != null ) 
    this.monthEvents = monthEvents[monthNumber];
  else
    this.monthEvents = null;
  --*/
  this.monthEvents = createMonth( monthNumber, year );
}

calendarMonth.prototype.writeMonthCalendar = writeMonthCalendar;
calendarMonth.prototype.writeEvents = writeEvents;
calendarMonth.prototype.writeMonthEvents = writeMonthEvents;

//--------------------------------------------------------
//-- Get all event objects for a given date, for the currently selected month.
function writeEvents(date) {
   var eventObj;
   var eventList;
//   eventList = monthEvents[this.monthNumber][date];	//-- Get array of event names.
     eventList = this.monthEvents[date];

//   eventList = monthEvents[12][9];
   if(eventList) {
//      document.write("<UL>");
//      document.write("<br>event List length: ", eventList.length);
      for(var i=0;i < eventList.length; i++) {
        var eventName = eventList[i];
        eventObj = eventArray[eventName];		//-- Get the event object named.
//        document.write('<BR>',eventObj.name);
        
		if( i > 0 ) document.write('<HR/>');
		
        if( eventObj.expired ) {
          document.write('<BR/>',eventObj.linkString);
        }
		
		else if( eventObj.url == null ) {
		  document.write('<BR/><B> ',eventObj.linkString,'</B>&nbsp;', eventObj.extraString);
		}
		
        else {           
          document.write('<BR/><A HREF="',eventObj.url,'">', eventObj.linkString, '</A><BR/> ', eventObj.extraString);
        }
      }

   }
} 

//---------------------------------------------------------
//-- Write the HTML calendar table.

function writeMonthCalendar() {

    var date = 1;
    var row, col;
    var dayIndex = this.startDayIndex;
    var days_in_Month = this.numDays;
//    document.write('<br>',this.monthNumber);
//    document.open();
    document.write('<H3>',this.name,' ',this.year,' </H3>');
    if( this.monthEvents == null ) {
      document.write('<br/><b>This month has no events defined.</b>');
      return;
    }
    document.write('<TABLE CLASS="CalendarTable" WIDTH="90%"');
    document.write('<TR><TH>S</TH><TH>M</TH><TH>T</TH><TH>W</TH><TH>Th</TH><TH>F</TH><TH>Sat</TH></TR>');
    document.write('<TR>');
//-- Do that first row.
    for(col=0; col < 7; col++) {
      if(col < this.startDayIndex) {
            document.write('<TD></TD>');
      }
      else {
            document.write('<TD>',date);
//           document.write(monthEvents[this.monthNumber][date]);
//            if(monthEvents[this.monthNumber][date]) {
              if(this.monthEvents[date] != null) {
                this.writeEvents(date);
              }
            document.write('</TD>');
            date++;
      }
    }
    document.write('</TR>');		//-- end of first row.
    dayIndex = dayIndex + date - 1; 	//-- update dayIndex; it's been out of the loop.
  
//-- Now do the rest of the calendar.
    for( ;date <= days_in_Month; date++ ) {
       col = dayIndex % 7;
       if(col == 0) {
         document.write('<TR>');	//-- New table row; new week.
       }
            document.write('<TD>',date);
            this.writeEvents(date);
//            var eventName = monthEvents[this.monthNumber][date];
//            if(eventName) {
//                document.write( eventArray[eventName].name );
//            }
//            this.writeDateEvents(date);
            document.write('</TD>');
       dayIndex++;
       if(col==6) {
         document.write('</TR>');
       }
    }
//-- Clean up that last row.
    if(col < 6) {
      for(;col < 6;col++) {
        document.write('<TD></TD>');
      }
      document.write('</TR>');
    }
 
    document.write('</TABLE>');
    document.close();
}   
//--------------------------------------------------------------------  

/*
//-- This is just to see if the monthEvents array is accessible.
function testA() {
  for( var i=0; i < 6; i++) {
    if(monthEvents[2][i]) {
      document.write('<br>monthEvents[2][',i,']: ',monthEvents[2][i]);
    }
  }
}
*/



  
 

  