function generateOutputHtml(item) {
  var outputHtml = new String();
  if( item.eventType.length < 1 ) {
    item.eventType = item.brandName;
  }

/* These are only necessary for the hinxton events calendar. */  
  item.deadlineYear  = parseInt(item.deadlineYear);
  item.deadlineMonth = parseInt(item.deadlineMonth);
  item.deadlineDay   = parseInt(item.deadlineDay);
/*************************************************************/

  var d = 'Dates';
  if( item.eventsCategoryId == 42 ) { d = 'Date' }
  var dates                = formatSearchDates(item);
  var dateRangeFormatted   = dates[0];
  var appDeadlineFormatted = dates[1];
  var sm                   = item.startMonth;
  var sd                   = item.startDay;
  if(sm < 10) { sm = '0'+sm }
  if(sd < 10) { sd = '0'+sd }
  outputHtml += ' <table class="search_result_tbl">';
  outputHtml += '   <!--'+item.startYear+sm+sd+'-->';
  outputHtml += '   <tr>';
  if( item.titleLink != '' ) {
    outputHtml += '     <td colspan="3"><a href="' + item.titleLink + '" target="_new"><h3>' + item.titleName + '</h3></a></td>';
  } else {
    outputHtml += '     <td colspan="3"><h3>' + item.titleName + '</h3></td>';
  }  
  outputHtml += '   </tr>';
  outputHtml += '   <tr>';
  outputHtml += '     <td class="col1"><img src="' + item.brandImage + '" /></td>';
  outputHtml += '     <td class="col2">Type of event:</td>';
  outputHtml += '     <td class="col3">' + item.eventType + '</td>';
  outputHtml += '   </tr>';
  outputHtml += '   <tr>';
  outputHtml += '     <td class="col1"></td>';
  outputHtml += '     <td class="col2">' + d + ':</td>';
  outputHtml += '     <td class="col3">' + dateRangeFormatted + '</td>';
  outputHtml += '   </tr>';
  if( item.eventsCategoryId != 42 ) {
    outputHtml += '   <tr>';
    outputHtml += '     <td class="col1"></td>';
    outputHtml += '     <td class="col2">Application deadline:</td>';
    outputHtml += '     <td class="col3">' + appDeadlineFormatted + '</td>';
    outputHtml += '   </tr>';
  } else {
    if( item.startTime && ! item.startTime.match(/00:00:00/) ) {
      outputHtml += '   <tr>';
      outputHtml += '     <td class="col1"></td>';
      outputHtml += '     <td class="col2">Time:</td>';
      outputHtml += '     <td class="col3">'+item.startTime.replace(/:\d+$/, '')+'</td>';
      outputHtml += '   </tr>';
    }
    outputHtml += '   <tr>';
    outputHtml += '     <td class="col1"></td>';
    outputHtml += '     <td class="col2">Speaker:</td>';
    outputHtml += '     <td class="col3">' + item.speakerTitle + ' ' + item.speakerFirstName + ' ' + item.speakerLastName + '</td>';
    outputHtml += '   </tr>';
    outputHtml += '   <tr>';
    outputHtml += '     <td class="col1"></td>';
    outputHtml += '     <td class="col2">Affiliation:</td>';
    outputHtml += '     <td class="col3">' + item.affiliation + '</td>';
    outputHtml += '   </tr>';
    outputHtml += '   <tr>';
    outputHtml += '     <td class="col1"></td>';
    outputHtml += '     <td class="col2">Location:</td>';
    outputHtml += '     <td class="col3">' + item.location + '</td>';
    outputHtml += '   </tr>';
    outputHtml += '   <tr>';
    outputHtml += '     <td class="col1"></td>';
    outputHtml += '     <td class="col2">Host:</td>';
    outputHtml += '     <td class="col3">' + item.host + '</td>';
    outputHtml += '   </tr>';
    outputHtml += '   <!--tr>';
    outputHtml += '     <td class="col1"></td>';
    outputHtml += '     <td class="col3">Host Institute:</td>';
    outputHtml += '     <td class="col3">' + item.hostDescription + '</td>';
    outputHtml += '   </tr-->';
    outputHtml += '   <tr>';
    outputHtml += '     <td class="col1"></td>';
    outputHtml += '     <td class="col2">Abstract:</td>';
    outputHtml += '     <td class="col3">' + item.abstract + '</td>';
    outputHtml += '   </tr>';
  }
  outputHtml += ' </table>';
  outputHtml += ' <br />';
  return outputHtml;
}

function formatSearchDates(item) {
  var dates = new Array();
  if( /^0.*/.test(item.deadlineYear) ) {
    dates[1] = 'T.B.A';
  } else {
    dates[1] = appendSuffix(item.deadlineDay) + " " + month[item.deadlineMonth - 1] + ", " + item.deadlineYear;
  }
  if( /0000/.test(item.endYear) ) {
    dates[0] = appendSuffix(item.startDay) + " " + month[item.startMonth - 1]  + ", " + item.startYear;
  } else {
    if( item.endMonth == item.startMonth ) {
      if( item.endDay == item.startDay ) {
        dates[0] = appendSuffix(item.startDay) + " " + month[item.endMonth - 1] + ", " + item.endYear;
      } else {
        dates[0] = appendSuffix(item.startDay) + " - " + appendSuffix(item.endDay) + " " + month[item.endMonth - 1] + ", " + item.endYear;
      }
    } else if( item.startMonth != item.endMonth ) {
      dates[0] = appendSuffix(item.startDay) + " " + month[item.startMonth - 1];
      if( item.startYear != item.endYear ) {
        dates[0] += ", " + item.startYear + " - ";
      } 
      dates[0] += " - " + appendSuffix(item.endDay) + " of " + month[item.endMonth - 1] + ", " + item.endYear;
    }
  }
  return dates;
}

function appendSuffix(day) {
  var ext;
  if ( /(\d|)1$/.test(day) && !/^11$/.test(day) ) {
    ext = 'st';
  } else if ( /^1\d+/.test(day) ) {
    ext = 'th';
  } else if ( /2$/.test(day) ) {
    ext = 'nd';
  } else if ( /3$/.test(day) ) {
    ext = 'rd';
  } else if ( /(4|5|6|7|8|9|0)$/.test(day) ) {
    ext = 'th';
  }
  return day + ext; 
}
