function snfMeetingDates() {
  var strResult = '';
  var eoyDate = new Date().next().february().set({day:1}).addDays(-1); /* Next 31st January */
  /* ---------------------------------------------------------------------------------------------
  **  Each forum[] element contains:
  **   [ Frequency, Forum Name/Location, Weekday, Instance, TimeString, Image File, Booking link ] 
  ** Configure forums[] sub-array elements indexing ('fix' = forum index)
  ** --------------------------------------------------------------------------------------------- */
  var testMode = false;
  var fixFreq = 0;
  var fixName = 1;
  var fixDay = 2;
  var fixInst = 3;
  var fixTime = 4;
  var fixImg = 5;
  var fixLink = 6;
  var fixDate = 7;  /* Element appended with calculated next meeting date. */
  /* Initialise dates calculation, foundation settings */
  var prevDay = Date.parse('yesterday');
  var thisDay = Date.today();
  /* Adjust dates: no recurring meetings are held during January or February */
  if( thisDay.is().january() ) {
    thisDay = thisDay.set({day:1}).addMonths(1);
  } else if( thisDay.is().december() ) {
    thisDay = thisDay.set({day:1}).addMonths(2);
  }
  /* Get start date of next month for when meeting date this month is historic */
  var nextMonth = thisDay.clone();
  if( nextMonth.is().november() ) {   /* if next month is December then advance to February */
    nextMonth = nextMonth.set({day:1}).addMonths(3);
  } else {
    nextMonth = nextMonth.set({day:1}).addMonths(1);
  }
  /* Iterate through all forums in the array: */
  for( var i=0; i < forums.length; i++ ) {
    if( (forums[i][fixFreq] == 'recurring') ) {
      dNum = Date.getDayNumberFromName(forums[i][fixDay]);
      dInst = forums[i][fixInst] * 1;
      dWhen = thisDay.clone();
      dWhen = dWhen.moveToNthOccurrence(dNum,dInst);
      if( dWhen.isBefore(thisDay)) {
        dWhen = nextMonth.moveToNthOccurrence(dNum,dInst);
      }
      dWhen = dWhen.at(forums[i][fixTime]);
      forums[i][fixDate] = dWhen.clone();  /* Append next meeting date element to array */
    } else {
      var tmpDate = forums[i][fixFreq];
      dWhen = Date.parse(tmpDate);
      if( dWhen == null ) dWhen = prevDay.clone(); /* Set invalid dates to expired */
      dWhen = dWhen.at(forums[i][fixTime]);
      forums[i][fixDate] = dWhen.clone();  /* Append the specific meeting date to array */
    }
  }
  /* Sort forums array into ascending 'Date' order */
  forums.deepsort(fixDate);
  /* If testMode then print all elements of sorted forums array */
  if( testMode ) {
    var strName = '';
    for( var i=0; i < forums.length; i++ ) {
      if( forums[i][fixName].indexOf('<') !=-1 ) {
        strName = forums[i][fixName].substring(0,forums[i][fixName].indexOf('<'));
      } else {
        strName = forums[i][fixName];
      }
      document.write((i+1) + ': ' + strName + ', Date: ' + forums[i][fixDate].toString("ddd, d MMM yyyy h:mmtt") + '<br>');
    }
  } 
  /* --------------------------------------------------
  ** Cycle through the sorted forum meeting dates array  
  ** Create list of Forums and their next meeting dates
  ** -------------------------------------------------- */
  var strName = '';
  var n = 0;
  for( i=0; i < forums.length; i++ ) {
    n = i;
    if( forums[i][fixDate] >= Date.today() ) { break; }
  }
  if( n < forums.length ) {
    var cntList = 0;
    for( i=n; i < forums.length; i++ ) {
      n = forums[i][fixName].indexOf('<');
      if( n !=-1 ) {
        strName = forums[i][fixName].substring(0,n);
      } else {
        strName = forums[i][fixName];
      }
      strResult = strResult + strName + '&nbsp;' + forums[i][fixDate].toString("ddd&#160;d&#8209;MMM&#8209;yy") + ', ';
      cntList++;
      if( cntList >= 9 ) { break; }
    }
    strResult = strResult + '<a href="http://www.networkingworld.net.au/smartnetworkingforums-calendar" target="_blank">...more...<br />Click&nbsp;here&nbsp;for&nbsp;details&nbsp;and&nbsp;the&nbsp;complete&nbsp;meetings&nbsp;calendar</a>';
  } else {
    strResult = 'There are no Forum Meetings scheduled at this time';
  }
  if( testMode ) {
    document.write( strResult );
  }
  return strResult;
}
