/*
// Event Listing Code
// Written by Ken Gould
// ©2007 Birchwood Recording LLC
//
// 2010-08-22 KBG change text alignment to left for dates in week view
// 2011-08-24 KBG changed to Google calendar and Google api
//                change midnight to return string of 12:00 am
//
//
*/
var dayA = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday") ;
var oneMinute = 60 * 1000 ;
var oneHour = oneMinute * 60 ;
var oneDay = oneHour * 24 ;
var oneWeek = oneDay * 7 ;
var strToday ="" ;

/* Loads the Google data JavaScript client library */
google.load("gdata", "2.x");
//google.setOnLoadCallback(init);




function get_week(nWeek)
{
	var i ;
	var str ;
	var dToday ;
	var dEvent ;
	var dWeek ;
	var dEnd ;
	var strTime ;
	var bTitle ;
	var strDay ;

	dEvent = new Date() ;
	dToday = new Date() ;
	dWeek =  new Date() ;
	dEnd =   new Date() ;
	var strTitle ;
	str = "" ;
	dEvent.setTime(Date.parse(calA[0].Meeting_Start)) ;
	// find first day of week
	var dateInMs = dToday.getTime() ;
	// get begining of current week
	dateInMs = dateInMs - (dToday.getDay())*oneDay - (dToday.getHours()+1)*oneHour ;
	// add number of weeks
	dateInMs = (nWeek==0 ? dateInMs : dateInMs + (nWeek*oneWeek)) ;
	dWeek.setTime(dateInMs) ;
	// last day of week
	dateInMs += (oneWeek) ;
	dEnd.setTime(dateInMs) ;
	
	var bFirstLine = true ;
	for (i=0;i<calA.length -1;i++)
	{
		dEvent.setTime(Date.parse(calA[i].Meeting_Start)) ;
		if ((dEvent.getTime() >= dWeek.getTime()) && (dEvent.getTime() <= dEnd.getTime()))
			{
			if (bFirstLine==true)
				{
				strDay = dayA[dEvent.getDay()] ;
				str = str +
				"<tr><td colspan=\"3\" class=\"cal_title\" align=\"left\">" + get_date_string(dEvent) + "</td></tr>" ;
				bFirstLine = false ;
				}
			strTime = get_time_string(dEvent) ;
			bTitle = (strTitle == (calA[i].MeetingTitle + calA[i].Meeting_Start) ) ;
			if (strDay != dayA[dEvent.getDay()])
				{
				strDay = dayA[dEvent.getDay()]
				str = str +
				"<tr><td colspan=\"3\" class=\"cal_title\" align=\"left\">" + get_date_string(dEvent) + "</td></tr>" ;
				}
			str = str + (bTitle ? "<td class=\"cal_today\">&nbsp;</td>" :
				"<td class=\"cal_today\" align=\"right\" width=\"60\">" + strTime + "</td>" ) ;
			str = str + (bTitle ? "<td class=\"cal_today\">&nbsp;</td>" :
				"<td class=\"cal_today\" width=\"45%\">" + calA[i].MeetingTitle + "</td>") ;
			str = str + "<td class=\"cal_today\" \"nowrap\" >" + calA[i].Meeting_Room+ "</td></tr>\n" ;
			}
		strTitle = (calA[i].MeetingTitle + calA[i].Meeting_Start) ;
	}
	document.write (str) ;
}


function get_date_string( dDate)
{	
	return dayA[dDate.getDay()] + ", " + (dDate.getMonth() + 1) + "/" + dDate.getDate() + "/" + dDate.getFullYear() ;
}

function get_today()
{
	var i ;
	var str ;
	var dToday ;
	var dEvent ;
	var strTime ;
	var bTitle ;
	var bFound = false ;
	dEvent = new Date() ;
	dToday = new Date() ;
	var strTitle ;
	str = "<div style=\"height: 2px; background-color: #009; margin: 2px;\"> " ;
	str = str + "</div><b><center>Today's Events</center></b><table border=\"0\" cellspacing=\"0\" cellpadding=\"2\" width=\"100%\">\n" ;
	for (i=0;i<calA.length -1;i++)
	{
		dEvent.setTime(Date.parse(calA[i].Meeting_Start)) ;
		if ((dEvent.getDate() == dToday.getDate()) && (dEvent.getMonth() == dToday.getMonth())
			&& (dEvent.getYear() == dToday.getYear()))
			{
			bFound = true ;
			strTime = ((dEvent.getHours()<12) ?
				(dEvent.getHours() + ":" + String(dEvent.getMinutes()+100).substr(1,2) + " AM" ) :
				(dEvent.getHours()-12) + ":" + String(dEvent.getMinutes()+100).substr(1,2) + " PM") ;
			str = str + "<td class=\"cal_today\" align=\"right\" nowrap=\"nowrap\" >" + strTime + "</td>"  ;
			str = str + "<td class=\"cal_today\">" + calA[i].MeetingTitle + "</td></tr>\n" ;
			}
	}
	if (!bFound) 
		str = "<span style=\"font-size: 10px;\"><i>See our <a href=\"/events.htm\">calendar</a> for full list of events</i></span><br>"  ;
	else
		str = str + "</table>" + 
		"<span style=\"font-size: 10px; margin-top: 2px;\"><i>See our <a href=\"/events.htm\">calendar</a> for full list of events</i></span>" +
			"<div style=\"height: 2px; background-color: #009;\"></div>" ;
	document.write (str) ;
}


function get_today_go()
{
	loadCalendar('https://www.google.com/calendar/feeds/lpcnhcalendar@gmail.com/public/full');
	document.write(strToday) ;
	
	
}



/* ============================= get_time_string ====================
//  return time in HH:MM AM/PM
//
*/

function get_time_string(dTime)
{
	switch (dTime.getHours())
	{
	case 0:
		return ("12:" + String(dTime.getMinutes()+100).substr(1,2) + " AM" ) ;
		break ;
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
	case 6:
	case 7:
	case 8:
	case 9:
	case 10:
	case 11:
		return (dTime.getHours() + ":" + String(dTime.getMinutes()+100).substr(1,2) + " AM" ) ;
		break ;
	case 12:
		return "12:" + String(dTime.getMinutes()+100).substr(1,2) + " PM"  ;
		break ;
	default:
		return ((dTime.getHours()-12) + ":" + String(dTime.getMinutes()+100).substr(1,2) + " PM") ;
	}
}

/////////////////////////////////////// get_front_page //////////////////////
//
//
//
function get_front_page()
{
	var i ;
	var str ;
	var dToday ;
	var dEvent ;
	var dWeek ;
	var dEnd ;
	var strTime ;
	var bTitle ;
	var strDay ;
	var nWeek = 0 ;

	dEvent = new Date() ;
	dToday = new Date() ;
	dWeek =  new Date() ;
	dEnd =   new Date() ;
	var strTitle ;
	str = "" ;
	dEvent.setTime(Date.parse(calA[0].Meeting_Start)) ;
	// find first day of week
	var dateInMs = dToday.getTime() ;
	// get begining of current week
	dateInMs = dateInMs - (dToday.getDay())*oneDay - (dToday.getHours()+1)*oneHour ;
	// add number of weeks
	dateInMs = (nWeek==0 ? dateInMs : dateInMs + (nWeek*oneWeek)) ;
	dWeek.setTime(dateInMs) ;
	// last day of week
	dateInMs += 4*(oneWeek) ;
	dEnd.setTime(dateInMs) ;
	
	var bFirstLine = true ;
	for (i=0;i<calA.length -1;i++)
	{
		dEvent.setTime(Date.parse(calA[i].Meeting_Start)) ;
		if ((dEvent.getTime() >= dWeek.getTime()) && (dEvent.getTime() <= dEnd.getTime()) && 
			calA[i].front_page=="True")
			{
			if (bFirstLine==true)
				{
				strDay = dayA[dEvent.getDay()] ;
				str = str +
				"<tr><td colspan=\"3\" class=\"cal_title\">" + get_date_string(dEvent) + "</td></tr>" ;
				bFirstLine = false ;
				}
			strTime = get_time_string(dEvent) ;
			bTitle = (strTitle == (calA[i].MeetingTitle + calA[i].Meeting_Start) ) ;
			if (strDay != dayA[dEvent.getDay()])
				{
				strDay = dayA[dEvent.getDay()]
				str = str +
				"<tr><td colspan=\"3\" class=\"cal_title\">" + get_date_string(dEvent) + "</td></tr>" ;
				}
			str = str + (bTitle ? "<td class=\"cal_today\">&nbsp;</td>" :
				"<td class=\"cal_today\" align=\"right\">" + strTime + "</td>" ) ;
			str = str + (bTitle ? "<td class=\"cal_today\">&nbsp;</td>" :
				"<td class=\"cal_today\">" + calA[i].MeetingTitle + "</td>") ;
			str = str + "<td class=\"cal_today\" \"nowrap\" >" + calA[i].Meeting_Room+ "</td></tr>\n" ;
			}
		strTitle = (calA[i].MeetingTitle + calA[i].Meeting_Start) ;
	}
	document.write (str) ;
}

/**
 * Uses Google data JS client library to retrieve a calendar feed from the specified
 * URL.  The feed is controlled by several query parameters and a callback 
 * function is called to process the feed results.
 *
 * @param {string} calendarUrl is the URL for a public calendar feed
 */  
function loadCalendar(calendarUrl) {
  var service = new google.gdata.calendar.CalendarService('lpcnhcalendar');
  var query = new google.gdata.calendar.CalendarEventQuery(calendarUrl);
  query.setOrderBy('starttime');
  query.setSortOrder('ascending');
  query.setFutureEvents(false);
  query.setSingleEvents(true);
  query.setMaxResults(20);
  var d = new Date() ;
  var dateInMs = d.getTime() ;  
  var m = String(d.getMonth()+ 101) ;
  var dy = String(d.getDate() + 100) ;
  var d_str_b = d.getFullYear() + "-" + m.substr(1,2) + "-" + dy.substr(1,2) ;
  dateInMs = d.getTime() ;
  dateInMs = dateInMs + oneDay ;
  d.setTime(dateInMs) ;
  m = String(d.getMonth()+ 101) ;
  dy = String(d.getDate() + 100) ;
  var d_str_e = d.getFullYear() + "-" + m.substr(1,2) + "-" + dy.substr(1,2) ;
  
  query.setRecurrenceExpansionStart(d_str_b) ;
  query.setRecurrenceExpansionEnd(d_str_e) ;
  query.setMinimumStartTime(d_str_b) ;
  query.setMaximumStartTime(d_str_e) ;

//  query.setRecurrenceExpansionStart('2011-08-26') ;
//  query.setRecurrenceExpansionEnd('2011-08-27') ;
//  query.setMinimumStartTime('2011-08-26') ;
//  query.setMaximumStartTime('2011-08-27') ;

  service.getEventsFeed(query, listEvents, handleGDError);
}

function listEvents(feedRoot)
{
	var entries = feedRoot.feed.getEntries();
	var strTime ;
	var bTitle ;
	var bFound = false ;
	var strTitle ;
	var d = new Date() ;
	str = "<div style=\"height: 2px; background-color: #009; margin: 2px;\"> " ;
	str = str + "</div><b><center>Today's Events</center></b><table border=\"0\" cellspacing=\"0\" cellpadding=\"2\" width=\"100%\">\n" ;
	
	var len = entries.length;
	for (var i = 0; i < len; i++) 
	{
	    var entry = entries[i];
		strTitle = entry.getTitle().getText();
		var startDateTime = null;
		var startJSDate = null;
		var times = entry.getTimes();
		if (times.length > 0) 
		{
		  bFound = true ;
		  startDateTime = times[0].getStartTime();
		  dEvent = startDateTime.getDate();
		}
		
		if (dEvent.getDate() == d.getDate())
		{	
			strTime = ((dEvent.getHours()<12) ?
				(dEvent.getHours() + ":" + String(dEvent.getMinutes()+100).substr(1,2) + " AM" ) :
				(dEvent.getHours()-12) + ":" + String(dEvent.getMinutes()+100).substr(1,2) + " PM") ;
			str = str + "<td class=\"cal_today\" align=\"right\" nowrap=\"nowrap\" >" + strTime + "</td>"  ;
			str = str + "<td class=\"cal_today\">" + strTitle + "</td></tr>\n" ;
		}
	}
	if (!bFound) 
		str = "<span style=\"font-size: 10px;\"><i>See our <a href=\"/events.htm\">calendar</a> for full list of events</i></span><br>"  ;
	else
		str = str + "</table>" + 
		"<span style=\"font-size: 10px; margin-top: 2px;\"><i>See our <a href=\"/events.htm\">calendar</a> for full list of events</i></span>" +
			"<div style=\"height: 2px; background-color: #009;\"></div>" ;

	document.getElementById('event_today').innerHTML = str ;	
	strToday = str ;
	return ;
}

/**
 * Callback function for the Google data JS client library to call when an error
 * occurs during the retrieval of the feed.  Details available depend partly
 * on the web browser, but this shows a few basic examples. In the case of
 * a privileged environment using ClientLogin authentication, there may also
 * be an e.type attribute in some cases.
 *
 * @param {Error} e is an instance of an Error 
 */
function handleGDError(e) {
//  document.getElementById('jsSourceFinal').setAttribute('style', 
//      'display:none');
  if (e instanceof Error) {
    /* alert with the error line number, file and message */
    alert('Error at line ' + e.lineNumber +
          ' in ' + e.fileName + '\n' +
          'Message: ' + e.message);
    /* if available, output HTTP error code and status text */
    if (e.cause) {
      var status = e.cause.status;
      var statusText = e.cause.statusText;
      alert('Root cause: HTTP error ' + status + ' with status text of: ' + 
            statusText);
    }
  } else {
    alert(e.toString());
  }
}

function init() {
  // init the Google data JS client library with an error handler
  google.gdata.client.init(handleGDError);
  // load the code.google.com developer calendar
  loadDeveloperCalendar();
}

/**
 * Loads the Google Developers Event Calendar
 */
function loadDeveloperCalendar() {
  loadCalendarByAddress('lpcnhcalendar@gmail.com');
}

