//	cTime Class - Copyright (C) 2007-2010 Charles A Upsdell, All Rights Reserved; www.upsdell.com
//
aModule.has ( 'cTime' );


cTime.prototype.$name = 'cTime';


function cTime ( sTime, doAlert )
{
sTime = sTime || '';
if ( doAlert === undefined )
	doAlert = true;
var s = ( sTime instanceof Number ) ? sTime.toString() : sTime;
s = s.toLowerCase();
this.t1 = 0;
this.t2 = 0;
this.separator = '';
var hour = [ 0, 0 ];
var minute = [ 0, 0 ];
var ampm = [ '', '' ];
var ix = 0;
var state = 'h';	// h m -
var i;
if ( s != 'tba' ) for ( i = 0; i < s.length; ++i )
  {
	if ( (state == 'h') && (s.substring(i).indexOf( 'noon' ) == 0) )
	  {
		hour[ix] = 12;
		minute[ix] = 0;
		i += 3;
		if ( ix == 0 )
			state = '-';
		else
			break;
	  }
	else
	  {
		var c;
		c = s.charAt( i );
		if ( (c == '-') || (c == '/') )
		  {
			this.separator = c;
			if ( ix == 0 )
			  {
				++ix;
				state = 'h';
			  }
			else
			  { this.$name.alert( '', '%0 has unexpected %1', sTime, c ); return; }
		  }
		else if ( (c >= '0') && (c <= '9') )
		  {
			if ( state == 'h' )
				hour[ix] = 10*hour[ix] + Number(c);
			else if ( state == 'm' )
				minute[ix] = 10*minute[ix] + Number(c);
			else
				{ this.$name.alert( '', '%0 has unexpected digit %1', sTime, c ); return; }
			if ( hour[ix] > 23 )
				{ this.$name.alert( '', '%0 has hour > 23', sTime ); return; }
			if ( minute[ix] > 59 )
				{ this.$name.alert( '', '%0 has minute > 59', sTime ); return; }
		  }
		else if ( (c == ':') || (c == '.') )
		  {
			if ( state == 'h' )
				state = 'm';
			else
				{ this.$name.alert( '', '%0 has unexpected %1', sTime, c ); return; }
		  }
		else if ( (c == 'a') || (c == 'p') )
		  {
			if ( ++i < s.length )
			  {
				ampm[ix] = c;
				if ( s.charAt(i) != 'm' )
					{ this.$name.alert( '', '%0 has no "m" in "am||pm"', sTime ); return; }
				else
				  {
					if ( ix == 0 )
						state = '-';
					else
						break;
				  }
			  }
		  }
		else
		  {
			{ this.$name.alert( '', '%0 has unexpected %1', sTime, c ); return; }
		  }
	  }
  }
if ( (ampm[0] == 'p') && (hour[0] <= 11) )
	hour[0] += 12;
else if ( (ampm[0] == '') && (ampm[1] == 'p') && (hour[0] <= 11) )
	hour[0] += 12;
else if ( (ampm[0] == 'a') && (hour[0] > 11) )
	hour[0] -= 12;
if ( (ampm[1] == 'p') && (hour[1] <= 11) )
	hour[1] += 12;
else if ( (ampm[1] == 'a') && (hour[1] > 11) )
	hour[1] -= 12;
this.t1 = (hour[0] * 60) + minute[0];
this.t2 = (hour[1] * 60) + minute[1];
}


cTime.prototype.isEqual = function ( t )
{
var $name = 'isEqual';
var rv = (t !== undefined) && (t instanceof cTime) && (this.toHTML('.') == t.toHTML('.'));
return rv;
}


cTime.prototype.toHTML = function ( s, separator, is12HourClock, sZero )
{
var $name = 'toHTML';
if ( s === undefined )
	s = '';
if ( separator === undefined )
  {
	if ( this.separator == '/' )
		separator = ' or ';
	else
		separator = ' ';
  }
if ( is12HourClock === undefined )
	is12HourClock = false;
if ( (this.t1 == 0) && (this.t2 == 0) && (sZero !== undefined) )
	return sZero;
var sT1 = '';
var sT2 = '';
var sHTML = '';
if ( s != '' )
	sHTML += s + ' ';
var h1 = Math.floor(this.t1/60);
var m1 = this.t1%60;
if ( m1 < 10 )
	m1 = '0' + m1;
var h2 = Math.floor(this.t2/60);
var m2 = this.t2%60;
if ( m2 < 10 )
	m2 = '0' + m2;
if ( is12HourClock )
  {
	var ampm1 = 'am';
	if ( h1 >= 12 )
	  {
		if ( h1 > 12 )
			h1 -= 12;
		ampm1 = 'pm';
	  }
	var ampm2 = 'am';
	sT1 = h1 + ':' + m1;
	if ( h2 >= 12 )
	  {
		h2 -= 12;
		ampm2 = 'pm';
	  }
	sT2 = h2 + ':' + m2;
	if ( (separator === '\n') || (this.t2 == 0) )
		sHTML = sT1 + ampm1;
	else if ( ampm1 == ampm2 )
		sHTML = (sT1 + separator + sT2 + ampm2 );
	else
		sHTML = (sT1 + ampm1 + separator + sT2 + ampm2 );
  }
else
  {
	sT1 = h1 + ':' + m1;
	sT2 = h2 + ':' + m2;
	sHTML = sT1;
	if ( (separator !== '\n') && ((this.t2 > 0) || (arguments.length<2)) )
		sHTML += separator + sT2;
  }
return sHTML;
}


