Time = Class.create();
Time.prototype = 
{
  hours: function()
  {
    return this.seconds / 3600;
  },

  initialize: function(hour, minute)
  {
    this.seconds = hour * 3600 + minute * 60;
  },

  minutes: function()
  {
    return (this.seconds % 3600) / 60;
  }
}

Object.extend(Time,
{
  parse: function(str)
  {
    var parts = str.split(':', 2);
    if (parts.length < 2)
    {
      return undefined;
    }
    if (parts[0].charAt(0) == '0')
    {
      hour = parts[0].substring(1);
    }
    else
    {
      hour = parts[0];
    }
    var hour = parseInt(hour);
    if (isNaN(hour))
    {
      return undefined;
    }

    var remaining = parts[1];
    var minutes = '';
    var meridian = '';
    var i = 0;
    while (i < 2 && /^\d$/.test(remaining.charAt(i)))
    {
      minutes += remaining.charAt(i);
      i += 1;
    }

    meridian = remaining.substring(i).strip().toUpperCase();
    minutes = parseInt(minutes);
    if (isNaN(minutes))
    {
      return undefined;
    }

    if (meridian != '')
    {
      if (meridian == 'PM' && hour < 12)
      {
	hour += 12;	
      }
      else if (meridian == 'AM' && hour == 12)
      {
	hour = 0;
      }
    }
    else
    {
      if (hour == 12)
      {
	hour = 0;
      }
    }
    return new Time(hour, minutes);
  }
});

Object.extend(Date.prototype,
{
  hour: function()
  {
    var hour = this.getHours();
    if (hour > 12)
    {
      hour -= 12;
    }
    else if (hour == 0)
    {
      hour = 12;
    }

    return hour.toString();
  },

  meridian: function()
  {
    var hour = this.getHours();
    var meridian;

    if (hour > 11)
    {
      meridian = 'PM';
    }
    else
    {
      meridian = 'AM';
    }

    return meridian;
  },

  minute: function()
  {
    var minute = this.getMinutes().toString();
    if (minute.length == 1)
    {
      minute = '0' + minute;
    }

    return minute;
  },

  time_to_s: function()
  {
    return this.hour() + ":" + this.minute() + this.meridian();
  },

  to_s: function()
  {
    return (this.getMonth() + 1) + "/" + this.getDate() + "/" + this.getFullYear() + " " + this.time_to_s();
  }

});
