var DAY_LETTERS = new Array('', 'M', 'T', 'W', 'H', 'F', 'S');
var DAY_NAMES = new Array('', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');

function checkedByDefault(day)
{
  return (day==2 || day==4);
}

function clear(element)
{
  var range = document.createRange();
  range.selectNodeContents(element);
  range.deleteContents();
}

function showForm()
{
  var warningOrForm = document.getElementById('warningOrForm');

  clear(warningOrForm);


  var form = document.createElementNS('http://www.w3.org/1999/xhtml', 'form');
  form.setAttribute('action', '.');
  form.setAttribute('method', 'get');


  var nameFieldset = document.createElementNS('http://www.w3.org/1999/xhtml', 'fieldset');

  var first = document.createElementNS('http://www.w3.org/1999/xhtml', 'input');
  first.setAttribute('type', 'text');
  first.setAttribute('id', 'first');
  first.setAttribute('name', 'first');
  first.setAttribute('size', '11');
  first.setAttribute('value', 'First');

  var last = document.createElementNS('http://www.w3.org/1999/xhtml', 'input');
  last.setAttribute('type', 'text');
  last.setAttribute('id', 'last');
  last.setAttribute('name', 'last');
  last.setAttribute('size', '16');
  last.setAttribute('value', 'Last');

  nameFieldset.appendChild(first);
  nameFieldset.appendChild(last);


  var dayTable = document.createElementNS('http://www.w3.org/1999/xhtml', 'table');


  var header = document.createElementNS('http://www.w3.org/1999/xhtml', 'thead');
  var headerRow = document.createElementNS('http://www.w3.org/1999/xhtml', 'tr');

  for(var day = 1; day < 7; day++)
  {
    var dayLetter = DAY_LETTERS[day];

    var labelText = document.createTextNode(dayLetter);
    var label = document.createElementNS('http://www.w3.org/1999/xhtml', 'label');
    label.setAttribute('for', dayLetter);
    var headerCell = document.createElementNS('http://www.w3.org/1999/xhtml', 'th');

    label.appendChild(labelText);
    headerCell.appendChild(label);
    headerRow.appendChild(headerCell);
  }

  header.appendChild(headerRow);
  dayTable.appendChild(header);


  var body = document.createElementNS('http://www.w3.org/1999/xhtml', 'tbody');
  var bodyRow = document.createElementNS('http://www.w3.org/1999/xhtml', 'tr');

  for(var day = 1; day < 7; day++)
  {
    var dayLetter = DAY_LETTERS[day];

    var checkbox = document.createElementNS('http://www.w3.org/1999/xhtml', 'input');
    checkbox.setAttribute('type', 'checkbox');
    checkbox.setAttribute('id', dayLetter);
    checkbox.setAttribute('name', dayLetter);
    if(checkedByDefault(day))
    {
      checkbox.setAttribute('checked', 'checked');
    }
    var bodyCell = document.createElementNS('http://www.w3.org/1999/xhtml', 'td');

    bodyCell.appendChild(checkbox);
    bodyRow.appendChild(bodyCell);
  }

  body.appendChild(bodyRow);
  dayTable.appendChild(body);


  var submitDiv = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
  var submitButton = document.createElementNS('http://www.w3.org/1999/xhtml', 'input');
  submitButton.setAttribute('type', 'submit');
  submitButton.setAttribute('value', 'Generate Links');
  submitDiv.appendChild(submitButton);


  form.appendChild(nameFieldset);
  form.appendChild(dayTable);
  form.appendChild(submitDiv);


  var instructions = document.createElementNS('http://www.w3.org/1999/xhtml', 'p');
  instructions.appendChild(document.createTextNode('Enter your first and last name below, check the boxes for the days you have class, and press Generate Links.  You can bookmark the resultant page, and it will save your name and class days.  In the links produced, the date of your next class will be highlighted.'));


  warningOrForm.appendChild(instructions);
  warningOrForm.appendChild(form);
}

function pad(string)
{
  return ((new String(string).length == 1) ? '0' : '') + string;
}

function showResults(first, last, classDays)
{
  var NEWLINE = "%0D%0A";
  var DAY_START_OFFSET = 1; // tomorrow
  var DAY_END_OFFSET = 7; // a week from today

  var resultsDiv = document.getElementById('results');
  clear(resultsDiv);
  var resultsList = document.createElementNS('http://www.w3.org/1999/xhtml', 'ol');

  first = first.substring(0, 1).toUpperCase() + first.substring(1);
  last = last.substring(0, 1).toUpperCase() + last.substring(1);
  var initial = first.substring(0, 1);
  var to = 'utp@cs.pitt.edu,cjsst55@cs.pitt.edu';
  var body =
  first + ' ' + last + NEWLINE +
  '' + NEWLINE +
  '' + NEWLINE +
  'List of important concepts' + NEWLINE +
  '==========================' + NEWLINE +
  '' + NEWLINE +
  '' + NEWLINE +
  '' + NEWLINE +
  'Questions' + NEWLINE +
  '=========' + NEWLINE +
  '' + NEWLINE +
  '' + NEWLINE +
  '';

  var date = new Date();
  date.setDate(date.getDate() + DAY_START_OFFSET);
  var nextClass = true;
  for(var i = DAY_START_OFFSET; i <= DAY_END_OFFSET; i++)
  {
    if(classDays[date.getDay()])
    {
      var month = pad(date.getMonth() + 1);
      var day = pad(date.getDate());
      var text = DAY_LETTERS[date.getDay()];
      var subject = 'CS1502:' + month + '-' + day + ':' + last + ',' + initial;

      var link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
      link.appendChild(document.createTextNode(text));
      link.setAttribute('href', 'mailto:' + to + '?subject=' + subject + '&body=' + body);
      link.setAttribute('title', DAY_NAMES[date.getDay()] + ' ' + month + '-' + day);

      var li = document.createElementNS('http://www.w3.org/1999/xhtml', 'li');

      if(nextClass)
      {
        nextClass = false;

        var strong = document.createElementNS('http://www.w3.org/1999/xhtml', 'strong');
        strong.appendChild(link);

        li.appendChild(strong);
      }
      else
      {
        li.appendChild(link);
      }

      resultsList.appendChild(li);
    }

    date.setDate(date.getDate() + 1);
  }

  resultsDiv.appendChild(resultsList);


  for(var day = 1; day < 7; day++)
  {
    var dayLetter = DAY_LETTERS[day];
    document.getElementById(dayLetter).checked = classDays[day];
  }

  document.getElementById('first').value = first;
  document.getElementById('last').value = last;
}

function maybeShowResults()
{
  createRequestObject();
  var last = FORM_DATA['last'];
  var first = FORM_DATA['first'];

  var classDays = new Array(false, false, false, false, false, false, false);
  for(var day = 1; day < 7; day++)
  {
    var dayLetter = DAY_LETTERS[day];

    if(FORM_DATA[dayLetter])
    {
      classDays[day] = true;
    }
  }

  if(last && first)
  {
    showResults(first, last, classDays);
  }
}

showForm();
maybeShowResults();

