// JavaScript Document

// DATE FUNCTIONS
function submitDateValid(date, alertUser)
{
	var valid = true;
	var error = 'Error: Please check the following error(s);\r\n';

/*	if (!$('#tba').attr('checked') && (!$('#start_time_hour').val() || !$('#start_time_minute').val() || !$('#start_time_xm').val() || !$('#end_time_hour').val() || !$('#end_time_minute').val() || !$('#end_time_xm').val()))
	{
		error += '\r\n- Please select Start/End times for this Date or check TBA (To be announced).';
		valid = false;
	}
	else
	{
*/
		var today = new Date();
		if (str2dt(date) < Date.parse(today.getMonth()+1 +'/'+ today.getDate() +'/'+ today.getFullYear()))
		{
			error += '\r\n- Please select a date in the future.';
			valid = false;
		}
	//}

	if (valid == false && alertUser)
		alert(error);
	
	return valid;
}

function timeValid() {
	if (parseInt($('#StartTimeHour').val()) > parseInt($('#EndTimeHour').val())) {
		if($('#StartTimeXm').val() == 'am' && $('#EndTimeXm').val() == 'pm') {
			return true;
		} else {
			return false;
		}
	} else if (parseInt($('#StartTimeHour').val()) == parseInt($('#EndTimeHour').val())) {
		if ((parseInt($('#StartTimeMinute').val()) < parseInt($('#EndTimeMinute').val()) && $('#StartTimeXm').val() == $('#EndTimeXm').val()) || (parseInt($('#StartTimeMinute').val()) >= parseInt($('#EndTimeMinute').val()) && $('#StartTimeXm').val() == 'am' && $('#EndTimeXm').val() == 'pm')) {
			return true;
		} else {
			return false;
		}
	} else {
		if ($('#StartTimeXm').val() == 'pm' && $('#EndTimeXm').val() == 'am') {
			return false;
		} else {
			return true;
		}
	}
}

function show_calendar(field, str_target, str_datetime, allowPast) {
	$(str_target).show();
	
	var arr_months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
	var week_days = ["S", "M", "T", "W", "T", "F", "S"];
	var n_weekstart = 0; // day week starts from (normally 0 or 1)

	var dt_datetime = (str_datetime == null || str_datetime == "" ?  new Date() : str2dt(str_datetime));
	var dt_prev_month = new Date(dt_datetime);
		dt_prev_month.setMonth(dt_datetime.getMonth()-1);
	var dt_next_month = new Date(dt_datetime);
		dt_next_month.setMonth(dt_datetime.getMonth()+1);
	var dt_firstday = new Date(dt_datetime);
		dt_firstday.setDate(1);
		dt_firstday.setDate(1-(7+dt_firstday.getDay()-n_weekstart)%7);
	var dt_lastday = new Date(dt_next_month);
		dt_lastday.setDate(0);

	
	var str_buffer = new String (
		'<table id="popCal" cellspacing="1" cellpadding="3" border="0" width="100%" style="font-size:11px; background:#fff">'+"\n"+
		'<tr>\n	<td><a href="#" onclick="$(\''+str_target+'\').html(show_calendar(\''+field+'\', \''+str_target+'\', \''+ dt2dtstr(dt_prev_month)+'\', 1)); return false">'+
		'<img src="../templates/default/images/btn_cal_prev.gif" width="18" height="18" style="border:0" alt="&lt; prev"></a></td>'+"\n"+
		'	<td colspan="5" style="font-size:14px; text-align:center">'+arr_months[dt_datetime.getMonth()]+' '+dt_datetime.getFullYear()+'</td>'+"\n"+
		'	<td style="tesxt-align:right"><a href="#" onclick="$(\''+str_target+'\').html(show_calendar(\''+field+'\', \''+str_target+'\', \''+dt2dtstr(dt_next_month)+'\', 1)); return false">'
		+'<img src="../templates/default/images/btn_cal_next.gif" width="18" height="18" style="border:0" alt="next &gt;"></a></td>\n</tr>'+"\n"
	);

	var dt_current_day = new Date(dt_firstday);
	// print weekdays titles
	str_buffer += "<tr>\n";

	for (var n=0; n<7; n++)
		str_buffer += '	<th>'+week_days[(n_weekstart+n)%7]+'</th>'+"\n";

	// print calendar table

	str_buffer += "</tr>\n";

	while (dt_current_day.getMonth() == dt_datetime.getMonth() || dt_current_day.getMonth() == dt_firstday.getMonth()) {

		// print row header
		str_buffer += "<tr>\n";

		for (var n_current_wday=0; n_current_wday<7; n_current_wday++)
		{		
				if (dt_current_day.getDate() == dt_datetime.getDate() && dt_current_day.getMonth() == dt_datetime.getMonth())
				{
					dateClass = 'popCalToday'; // print current date
				}
				else if (dt_current_day.getDay() == 0 || dt_current_day.getDay() == 6)
				{
					dateClass = 'popCalWeekends'; // weekend days
				}
				else
				{
					dateClass = 'popCalWeekdays'; // print working days of current month
				}
				
				str_buffer += '<td width="25" class="'+dateClass+'" style="text-align:center">';
				
				if (dt_current_day.getMonth() == dt_datetime.getMonth())
				{
					if (allowPast || submitDateValid(dt2dtstr(dt_current_day), false)) {
					// print days of current month
					str_buffer += '<a class="popCalCurrentMonthDays" href="#" onclick="$(\'#'+field+'\').val(\''+dt2dtstr(dt_current_day)+'\'); $(\''+str_target+'\').hide(); return false;">'+dt_current_day.getDate()+"</a>";
					} else {
					str_buffer += '<span class="popCalCurrentMonthDays" return false;">'+dt_current_day.getDate()+"</span>";	
					}
				} else {
					// print days of other months
					str_buffer += '<span class="popCalNextMonthDays">'+dt_current_day.getDate()+"</span>";
				}

				str_buffer += "</td>\n";
				dt_current_day.setDate(dt_current_day.getDate()+1);

		}

		// print row footer
		str_buffer += "</tr>\n";

	}
	
	str_buffer += '<tr>\n<td colspan="7" style="text-align:center">\n<a href="#" onclick="$(\''+str_target+'\').hide(); return false\">Close</a></td>\n<tr>\n';
	
	// print calendar footer
	return str_buffer += "</table>\n";
}

function dt2dtstr (dt_datetime) {
	var format = 'mdy';
	
	switch(format) {
		case 'ymd':
			return (new String (dt_datetime.getFullYear()+"-"+(dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate()));
		break;
		
		case 'mdy':
			return (new String ((dt_datetime.getMonth()+1)+"-"+dt_datetime.getDate()+"-"+dt_datetime.getFullYear()));
		break;
	}
}

function str2dt(str_datetime) {

	if(str_datetime != '')
	{
		var re_date = /^(\d+)(\-|\/|\.)(\d+)(\-|\/|\.)(\d+)+$/; // Look for number -/. number -/. number

		if (!re_date.exec(str_datetime))
			return alert("Invalid Datetime format: "+ str_datetime); // Not a valid date pattern, throw error

		// If the 1st set of numbers is 4 characters, assign correct variables
		if (RegExp.$1.length == 4) { 
			var month = RegExp.$3;
			var day = RegExp.$5;
			var year = RegExp.$1;
		} else if(RegExp.$5.length == 4) { // If the fifth set of numbers is 4 chars, do the same
			var month = RegExp.$1;
			var day = RegExp.$3;
			var year = RegExp.$5;
		} else { // Otherwise enter a valid date
			return alert("Invalid Datetime format: "+ str_datetime);
		}
	} else {
		return alert("Please enter a date.");
	}

	// Create Date object
	var date = new Date(Date.parse(month+'/'+day+'/'+year));
	return date;
}
