// Module: Calendar
// for facilitating Coe Library calendars
// by Jon Frechette


function Calendar() {} // empty constructor


Calendar.nMonthsShown = 4;

Calendar.firstMonthShown = 0; // offset from current month

Calendar.filename = Utils.removeFileExtension( Utils.filename );


{
var date = new Date();
Calendar.curMonth = parseInt( date.getMonth(), 10 );
Calendar.curYear  = parseInt( date.getFullYear(), 10 );
}


Calendar.monthStrs  = [
  'January', 'February', 'March', 'April', 'May', 'June',
  'July', 'August', 'September', 'October', 'November', 'December'
];


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


Calendar.getCurCalFilename = function()
  {
  var s = Calendar._makeFilename( 0 );
  return s;
  }


Calendar.getList = function()
  {
  var s = '<p class="calendarList">';
  for ( var i = Calendar.firstMonthShown; i < Calendar.nMonthsShown; i++ )
    {
    var filename = Calendar._makeFilename( i );
    var label    = Calendar._makeDateStr( i );
    s += '<a href="' + filename + '">' + label + '</a><br />';
    }
  s += '</p>';
  //Diag.showCode( s );
  return s;
  }


Calendar.getPrevLink = function()
  {
  var s = 'To Previous Month';
  var filename = Calendar._makePrevNextFilename( true );
  if ( filename != null )
    {
    s1 = '<img src="../images/gui/arrow_l.gif" width="10" height="10" />';
    s1 += ' <a href="' + filename + '">';
    s = s1 + s + '</a>';
    }
  return s;
  }


Calendar.getNextLink = function()
  {
  var s = 'To Next Month';
  var filename = Calendar._makePrevNextFilename( false );
  if ( filename != null )
    {
    s = '<a href="' + filename + '">' + s + '</a>';
    s += ' <img src="../images/gui/arrow_r.gif" width="10" height="10" />';
    }
  return s;
  }


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


Calendar._makePrevNextFilename = function( pDoPrev )
  {
  var calMonth = Calendar._getCalMonth();

  if ( calMonth == null )
    return null;

  var calYear  = Calendar._getCalYear();
  offset = calMonth - Calendar.curMonth;

  if ( calYear > Calendar.curYear )
    offset += 12;

  if ( pDoPrev == true )
    {
    if ( offset == Calendar.firstMonthShown ) // if first calendar shown, no 'prev' link
      return null;
    else
      offset -= 1;
    }
  else // do next
    {
    if ( offset == Calendar.nMonthsShown - 1 ) // if last calendar shown, no 'next' link
      return null;
    else
      offset += 1;
    }
  return Calendar._makeFilename( offset );
  }


  // e.g. '../Calendar/February-04.html'
Calendar._makeFilename = function( pOffsetFromCurMonth )
  {
  return '../Calendar/' + Calendar._makeFnameOrStr( pOffsetFromCurMonth, true ) + '.html';
  }


  // e.g. 'February 20004'
Calendar._makeDateStr = function( pOffsetFromCurMonth )
  {
  return Calendar._makeFnameOrStr( pOffsetFromCurMonth, false );
  }


Calendar._makeFnameOrStr = function( pOffsetFromCurMonth, pDoFilename )
  {
  var calMonth = Calendar.curMonth + pOffsetFromCurMonth;
  var calYear  = Calendar.curYear;
  while ( calMonth < 0 )
    {
    calMonth += 12;
    calYear  -= 1;
    }
  while ( calMonth > 11 )
    {
    calMonth -= 12;
    calYear  += 1;
    }
  var s = Calendar.monthStrs[ calMonth ];
  if ( pDoFilename == true  )
    s += '-' + calYear.toString().substr( 2, 2 );
  else
    s += ' ' + calYear;
  return s;
  }


Calendar._getCalYear = function()
  {
  var match = Calendar.filename.match( /(\d+)$/ );
  if ( match != null )
    {
    var year = parseInt( match[ 1 ], 10 );
    return year + 2000;
    }
  else
    return null;
  }


Calendar._getCalMonth = function()
  {
  var match = Calendar.filename.match( /^([^-]+)/ );
  if ( match != null )
    return Calendar._monthStrToMonth( match[ 1 ] );
  else
    return null;
  }


Calendar._monthStrToMonth = function( pStr )
  {
  for ( var i = 0; i < 12; i++ )
    if ( pStr == Calendar.monthStrs[ i ] )
      return i; 
  return null;
  }



