function parseLocalTime(timeString) {
  if (timeString == '') return null;
  var time = timeString.match(/(\d+)(:(\d+))?(:(\d+))?\s*(p?)/i);
  if (time == null) {
    return null;
  }
  var hours = parseInt(time[1],10);
  if (time[6]) { //pm
    hours += 12;
  } else if (hours == 12) { //12am
    hours = 0;
  }
  if (hours == 24) {
    hours = 12;
  }
  var minutes = parseInt(time[3],10) || 0;
  var seconds = parseInt(time[5],10) || 0;
  var millis = 0;
  var d = new Date();
  d.setHours(hours);
  d.setMinutes(minutes);
  d.setSeconds(seconds, millis);
  return d;
}

function parseStandardDate(dateString) {
  if (dateString == '') return null;
  var date = dateString.match(/\s*(\d{1,2})\D(\d{1,2})\D(\d{2,4}).*/i);
  if (date == null) {
    return null;
  }
  var month = parseInt(date[1],10);
  var day = parseInt(date[2],10);
  var year = parseInt(date[3],10);
  if (year < 100) {
    year += 2000;
  }
  var d = new Date();
  d.setMonth(month-1);
  d.setDate(day);
  d.setFullYear(year);
  return d;
}

function parseWtfTime(timeString) {
  var result = timeString.toUpperCase();
  result = result.replace(/[^A-Z]/g, '');
  if (result.length > 4) {
    result = result.substr(0, 4);
  }
  if (result == '') return null;
  return result;
}

function parseWtfDate(dateString) {
  var result = dateString.toUpperCase();
  result = result.replace(/[^A-Z]/g, '');
  if (result.length > 5) {
    result = result.substr(0, 5);
  }
  if (result == '') return null;
  return result+':';
}

function displayWtfTime() {
  var date = parseLocalTime(document.getElementById('local_time_input').value);
  var div = document.getElementById('to_result_time');
  if (date == null) {
    div.innerHTML = "Sorry, I didn't understand that.";
    return;
  }
  var wtf = WTF.toWtf(date).timePart;
  var outputString = '';
  outputString += formatLocalTimeString(date.getHours(), date.getMinutes(), date.getSeconds());
  outputString += ' is :';
  outputString += wtf;
  outputString += ' in WTF time.';
  div.innerHTML = outputString;
}

function displayLocalTime() {
  var time = parseWtfTime(document.getElementById('wtf_time_input').value);
  var div = document.getElementById('from_result_time');
  if (time == null) {
    div.innerHTML = "Sorry, I didn't understand that.";
    return;
  }
  var localTime = WTF.toDate(time);
  var localTimeString = formatLocalTimeString(localTime.getHours(), localTime.getMinutes(),
                                              localTime.getSeconds());
  var outputString = ':';
  outputString += time;
  outputString += ' is ';
  outputString += localTimeString;
  outputString += ' in local time.';
  div.innerHTML = outputString;  
}

function displayStandardDate() {
  var wtfDate = parseWtfDate(document.getElementById('wtf_date_input').value);
  var div = document.getElementById('from_result_date');
  if (wtfDate == null) {
    div.innerHTML = "Sorry, I didn't understand that.";
    return;
  }
  var standardDate = WTF.toDate(wtfDate);
  if (standardDate.getFullYear() <= 1582) {
    div.innerHTML = "Sorry, this only works for dates later than 1582.";
    return;
  }
  var standardDateString = standardDate.toDateString();
  var outputString = '';
  outputString += wtfDate;
  outputString += ' is ';
  outputString += standardDateString;
  outputString += '.';
  div.innerHTML = outputString;  
}

function displayWtfDate() {
  var date = parseStandardDate(document.getElementById('standard_date_input').value);
  var div = document.getElementById('to_result_date');
  if (date == null) {
    div.innerHTML = "Try a date formatted like MM/DD/YYYY.";
    return;
  }
  if (date.getFullYear() <= 1582) {
    div.innerHTML = "Sorry, this only works for dates later than 1582.";
    return;
  }
  var wtf = WTF.toWtf(date).datePart;
  var outputString = '';
  outputString += date.toDateString();
  outputString += ' is ';
  outputString += wtf;
  outputString += ': in WTF time.';
  div.innerHTML = outputString;
}

function formatLocalTimeString(hours, minutes, seconds) {
  var s = '';
  var suffix = 'AM';
  if (hours == 0) {
    s = '12';
  } else if (hours < 12) {
    s = parseInt(hours, 10);
  } else if (hours == 12) {
    s = '12';
    suffix = 'PM';
  } else {
    s = parseInt(hours-12, 10);
    suffix = 'PM';
  }
  s += ':';
  if (minutes < 10) {
    s += '0';
  }
  s += parseInt(minutes, 10);
  if (seconds == 0) {
  } else if (seconds < 10) {
    s += ':0';
    s += parseInt(seconds, 10);
  } else {
    s += ':';
    s += parseInt(seconds, 10);
  }
  s += ' ';
  s += suffix;
  return s;
}

function displayWtfTimeOnEnter(event) {
  if (event && event.which == 13)
    displayWtfTime();
  else
    return true;
}

function displayWtfDateOnEnter(event) {
  if (event && event.which == 13)
    displayWtfDate();
  else
    return true;
}

function displayLocalTimeOnEnter(event) {
  if (event && event.which == 13)
    displayLocalTime();
  else
    return true;
}

function displayStandardDateOnEnter(event) {
  if (event && event.which == 13)
    displayStandardDate();
  else
    return true;
}

