 /* 
General JS File for LondonSwimming.org.uk
Neil McGibbon for Excalbur Studios.
**NOTE: All functions are terminated with the strict syntax ';' as are all other statements,
with the exception of if() statements.** - This is due to JavaScript decompression algorithm
constraints used to reduce this file size
*/

function calculateQuantity(value,price) {
	var total = value * price;
	document.getElementById('calculate_quantity').innerHTML = total.toFixed(2);
	return true;
};


function checkSwimmerDates(value) {
	for (var i  = 1; i <= value; i++) {
		if (document.getElementById('swimmer_first' + i).value == '') {alert ('Please Ensure you fill in all mandatory fields.'); document.getElementById('swimmer_first' + i).focus(); return false; }
		if (document.getElementById('swimmer_last' + i).value == '') {alert ('Please Ensure you fill in all mandatory fields.'); document.getElementById('swimmer_last' + i).focus(); return false; }
		if (document.getElementById('med_yesno' + i).value == 'yes') {
			if (document.getElementById('swimmer_medical' + i).value == '') {
				alert ('Please ensure you complete the "medical conditions" box if you have selected "yes" to exisiting conditions.'); 
				document.getElementById('swimmer_medical' + i).focus(); return false; 
			}
		}
	}
	
	
	/* 
	The following is a thorough check on birthday validation, including leap years, 
	and the leap years which aren't leap years...(see: http://en.wikipedia.org/wiki/Leap_year#Gregorian_calendar) 
	*/
	var thirty_arr = new Array(4,6,9,11);
	for (var i  = 1; i <= value; i++) {
		var dob_month = document.getElementById('dob_month' + i);
		var dob_day = document.getElementById('dob_day' + i);
		var dob_year = document.getElementById('dob_year' + i);
		
		
		for (var j = 0; j < thirty_arr.length; j++) { 
			if (thirty_arr[j] == dob_month.value) { 
				if (dob_day.value > 30) {	
					alert('The date of birth you have entered for ' + document.getElementById('swimmer_first' + i).value + ' ' + document.getElementById('swimmer_last' + i).value + ' is not valid. Please try again');
					return false; 
				} 
			} 
		}	
		if (dob_month.value == 2) { 
			if(dob_year.value%4 == 0) { 
				if(dob_year.value%100 != 0) {
					if (dob_day.value > 29) { 
						alert('The date of birth you have entered for ' + document.getElementById('swimmer_first' + i).value + ' ' + document.getElementById('swimmer_last' + i).value + ' is not valid. Please try again'); 
						return false; 
					} 
				} else { 	
					if(dob_year.value%400 == 0) {	
						if (dob_day.value > 29) {
							alert('The date of birth you have entered for ' + document.getElementById('swimmer_first' + i).value + ' ' + document.getElementById('swimmer_last' + i).value + ' is not valid. Please try again');
							return false;
						}
					} else {
						if (dob_day.value > 28) {
							alert('The date of birth you have entered for ' + document.getElementById('swimmer_first' + i).value + ' ' + document.getElementById('swimmer_last' + i).value + ' is not valid. Please try again');
							return false;
						}
					}
				}
			} else {
				if (dob_day.value > 28) {
					alert('The date of birth you have entered for ' + document.getElementById('swimmer_first' + i).value + ' ' + document.getElementById('swimmer_last' + i).value + ' is not valid. Please try again');
					return false;
				}
			}			
		}
	}
	/* End thorough birthdate validation */
	
	document.swimmers_list.submit();
};




function autoSwimmer(swimmerID, class_id) {
	
	/* 
	If the swimmer is not selected, or unselected, then set all fields to be blank.
	Important that element pre_sel(x) is set here, otehrwise it messes up the add_swimmer
	routine, the checkout, the confirmation and ultimately payment...
	*/
	if (swimmerID == 'none') {
		$('swimmer_title' + class_id).value = '';
		$('swimmer_first' + class_id).value = '';
		$('swimmer_last' + class_id).value = '';
		$('dob_day' + class_id).value = '';
		$('dob_month' + class_id).value = '';
		$('dob_year' + class_id).value = '';
		$('swimmer_phone' + class_id).value = '';
		$('swimmer_gender' + class_id).value = '';
		$('swimmer_medical' + class_id).value = '';
		$('swimmer_email' + class_id).value = '';
		$('swimmer_asa' + class_id).value = '';
		$('pre_sel' + class_id).value = 'no'; //IMPORTANT!
		
		$('swimmer_first' + class_id).style.backgroundColor = '#FFF';
		$('swimmer_last' + class_id).style.backgroundColor = '#FFF';
		$('swimmer_title' + class_id).style.backgroundColor = '#FFF';
		$('dob_day' + class_id).style.backgroundColor = '#FFF';
		$('dob_month' + class_id).style.backgroundColor = '#FFF';
		$('dob_year' + class_id).style.backgroundColor = '#FFF';
		$('swimmer_phone' + class_id).style.backgroundColor = '#FFF';
		$('swimmer_gender' + class_id).style.backgroundColor = '#FFF';
		$('swimmer_medical' + class_id).style.backgroundColor = '#FFF';
		$('swimmer_email' + class_id).style.backgroundColor = '#FFF';
		$('med_yesno' + class_id).style.backgroundColor = '#FFF';
		$('swimmer_asa' + class_id).style.backgroundColor = '#FFF';
		
		$('swimmer_title' + class_id).readOnly = false;
		$('swimmer_first' + class_id).readOnly = false;
		$('swimmer_last' + class_id).readOnly = false;
		$('dob_day' + class_id).readOnly = false;
		$('dob_month' + class_id).readOnly = false;
		$('dob_year' + class_id).readOnly = false;
		$('swimmer_phone' + class_id).readOnly = false;
		$('swimmer_gender' + class_id).readOnly = false;
		$('swimmer_medical' + class_id).readOnly = false;
		$('swimmer_email' + class_id).readOnly = false;
		$('swimmer_asa' + class_id).readOnly = false;
		
		medicalBoxCheckout('no',class_id);
		$('med_yesno' + class_id).value = 'no';

		return false;
	}
	
	/* 
	Using MOOtools JSON XMLHttpRequest implementation, the JSON object gives more accurate control
	over the swimmer's details
	*/	
	var jsonRequest = new Request.JSON({url: "/includes/swimmer_details.php", onComplete: function(swimmer){
							  
    	$('swimmer_title' + class_id).value = swimmer.title;
		$('swimmer_first' + class_id).value = swimmer.first_name;
		$('swimmer_last' + class_id).value = swimmer.last_name;
		$('dob_day' + class_id).value = swimmer.dob.day;
		$('dob_month' + class_id).value = swimmer.dob.month;
		$('dob_year' + class_id).value = swimmer.dob.year;
		$('swimmer_phone' + class_id).value = swimmer.phone;
		$('swimmer_gender' + class_id).value = swimmer.gender;
		$('swimmer_medical' + class_id).value = swimmer.medical;
		$('swimmer_email' + class_id).value = swimmer.email;
		$('swimmer_asa' + class_id).value = swimmer.asa;
		$('pre_sel' + class_id).value = swimmerID;
		
		$('swimmer_title' + class_id).readOnly = true;
		$('swimmer_first' + class_id).readOnly = true;
		$('swimmer_last' + class_id).readOnly = true;
		$('dob_day' + class_id).readOnly = true;
		$('dob_month' + class_id).readOnly = true;
		$('dob_year' + class_id).readOnly = true;
		$('swimmer_phone' + class_id).readOnly = true;
		$('swimmer_gender' + class_id).readOnly = true;
		$('swimmer_medical' + class_id).readOnly = true;
		$('swimmer_email' + class_id).readOnly = true;
		$('swimmer_asa' + class_id).readOnly = true;

	
		$('swimmer_first' + class_id).style.backgroundColor = '#fdd5d5';
		$('swimmer_last' + class_id).style.backgroundColor = '#fdd5d5';
		$('swimmer_title' + class_id).style.backgroundColor = '#fdd5d5';
		$('dob_day' + class_id).style.backgroundColor = '#fdd5d5';
		$('dob_month' + class_id).style.backgroundColor = '#fdd5d5';
		$('dob_year' + class_id).style.backgroundColor = '#fdd5d5';
		$('swimmer_phone' + class_id).style.backgroundColor = '#fdd5d5';
		$('swimmer_gender' + class_id).style.backgroundColor = '#fdd5d5';
		$('swimmer_medical' + class_id).style.backgroundColor = '#fdd5d5';
		$('swimmer_email' + class_id).style.backgroundColor = '#fdd5d5';
		$('swimmer_asa' + class_id).style.backgroundColor = '#fdd5d5';
		
		$('med_yesno' + class_id).style.backgroundColor = '#fdd5d5';
		
		if (swimmer.medical != '') {
			medicalBoxCheckout('yes',class_id);
			$('med_yesno' + class_id).value = 'yes';
		} else {
			medicalBoxCheckout('no',class_id);
			$('med_yesno' + class_id).value = 'no';
		}
		
	}}).get({'id': swimmerID});

	
};

function checkBirthDate(formname) {
	var thirty_arr = new Array(4,6,9,11);
	
	/* using JS eval function to get field values from a specific form, rather than give all id's a unique id (could be hundreds in theory). */
	var dob_month = eval("document." + formname + ".dob_month");
	var dob_day = eval("document." + formname + ".dob_day");
	var dob_year = eval("document." + formname + ".dob_year");
	var medical = eval("document." + formname + ".med_yesno");
	
	/* IE7 Fix, for those using MS Script Debugger, if the value is NULL then an error is thrown (ignoring the opposite of true...) */
	if (medical.value != "yes") {	
		// Do nothing (Hold IE7's hand...)
	} else {
		if (eval("document." + formname + ".swimmer_medical.value") == '') {
			alert('Please fill in all required fields');
			return false;
		}
	}
	if (eval("document." + formname + ".swimmer_first.value") == '') {
			alert('Please fill in all required fields');
			return false;
	}
	if (eval("document." + formname + ".swimmer_last.value") == '') {
			alert('Please fill in all required fields');
			return false;
	}
	if (eval("document." + formname + ".swimmer_phone.value") == '') {
			alert('Please fill in all required fields');
			return false;
	}
	
	/* 
	The following is a thorough check on birthday validation, including leap years, 
	and the leap years which aren't leap years...(see: http://en.wikipedia.org/wiki/Leap_year#Gregorian_calendar) 
	*/
	for (var j = 0; j < thirty_arr.length; j++) { 
		if (thirty_arr[j] == dob_month.value) { 
			if (dob_day.value > 30) {	
				alert('The date of birth you have entered is not valid. Please try again');	
				return false; 
			} 
		}
	} 
	if (dob_month.value == 2) { 
		if(dob_year.value%4 == 0) { 
			if(dob_year.value%100 != 0) { 
				if (dob_day.value > 29) { 
					alert('The date of birth you have entered is not valid. Please try again'); 
					return false; 
				} 
			} else { 
				if(dob_year.value%400 == 0) {	
					if (dob_day.value > 29) { 
						alert('The date of birth you have entered is not valid. Please try again'); 
						return false;	
					} 
				} else { 
					if (dob_day.value > 28) { 
						alert('The date of birth you have entered is not valid. Please try again'); 
						return false; 
					} 
				} 
			} 
		} else { 
			if (dob_day.value > 28) { 
				alert('The date of birth you have entered is not valid. Please try again'); 
				return false; 
			} 
		} 
	} 
	/* End of Birthdate validation */
	
	eval("document." + formname + ".submit()");
};


/* 
The following functions are all for use by the account menu and the admin menu. Both use the same concept of the css div display properties
block and none to create an easier to use, more interactive account management. There are a lot of AJAX calls used, all using MOOtools
implementation (Request), with the HTML option flagged.
*/

// 1) Shows the div with the selected gala details
function showRaces(gala_id) {
	var url = "/edit_gala.php?gala_id=" + gala_id;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('galas').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('galas').innerHTML = rs; if (gala_id != 'none') {setUpGalaCal();} }}).send();
	showAdminDiv('galas');
};

// 2) Adds a new race, and redisplays the Gala div
function addRace(gala_id) {
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('galas').innerHTML = rs; }}).send();
	var url = "/add_gala_race.php?gala_id=" + gala_id;
	new Request.HTML({url: url, method: 'get'}).send();
	showRaces(gala_id);
};

function showReports(report) {
	var url = "/includes/reports.php?report=" + report;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('reports').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {
																document.getElementById('reports').innerHTML = rs;
																if (report == 'revenue') {
																	Calendar.setup({inputField:"revenue_start",ifFormat:"%Y-%m-%d"});
																	Calendar.setup({inputField:"revenue_end",ifFormat:"%Y-%m-%d"});		
																}
															}
					}
	).send();
	
	showAdminDiv('reports');
};

// 3) Shows the div with the selected Class details
function showClass(class_id) {
	var url = "/edit_class.php?class_id=" + class_id;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('classes').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('classes').innerHTML = rs; if (class_id != 'none') {setUpClassCal();} }}).send();
	showAdminDiv('classes');
};

// 4 ) Binds the Dynarchİ DHTML Calendar to the Class entry div.
function setUpClassCal() {
	Calendar.setup({inputField:"start_date",ifFormat:"%Y-%m-%d"});
	Calendar.setup({inputField:"end_date",ifFormat:"%Y-%m-%d"});
};

// 5) Binds the Dynarchİ DHTML calendar to the Gala div, and dynamically binds to x races. 
function setUpGalaCal() {
	var num = document.getElementById('races').value;
	for (var i = 1; i <= num; i++) {
		Calendar.setup({inputField:"race_date"+i,ifFormat:"%Y-%m-%d"});
	}
	Calendar.setup({inputField:"gala_start_date",ifFormat:"%Y-%m-%d"});
	Calendar.setup({inputField:"gala_end_date",ifFormat:"%Y-%m-%d"});
};


// 6) Shows the signed up members details for reviewing (which enable to admin to change the flag for being able to view galas).
function showMember(memberid) {
	$('memberdiv').style.display = "block";
	var url = "/show_member.php?member_id=" + memberid;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('memberdiv').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {
														   		document.getElementById('memberdiv').innerHTML = rs; 
																window.location="#member";
															}
	}).send();
};

// 7) Shows the selected swimmers details, for reviewing.
function showSwimmer(swimmerid) {
	$('swimmerdiv').style.display = "block";
	var url = "/show_swimmer.php?swimmer_id=" + swimmerid;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('swimmerdiv').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {
																document.getElementById('swimmerdiv').innerHTML = rs; 
																window.location="#swimmer";
															}
	}).send();
};

// 8) Hides all the ADMIN div's, and then displays the one requested argument div.
function showAdminDiv(divToShow) {
	$('enquire').style.display="none";
	$('feedback').style.display="none";
	$('swimmers').style.display="none";
	$('members').style.display="none";
	$('galas').style.display="none";
	$('classes').style.display="none";
	$('addclass').style.display="none";
	$('addgala').style.display="none";	
	$('memberdiv').style.display="none";
	$('swimmerdiv').style.display="none";
	$('addtype').style.display="none";
	$('transactions').style.display="none";
	$('reports').style.display="none";
	$('swimmerxfer').style.display="none";
	$('swimmerxfer2').style.display="none";
	$(divToShow).style.display="block";
};


// 9) Hides all the USER ACCOUNT div's, and then displays the one requested argument div.
function showDiv(divToShow, noSwimmers) {
	$('details').style.display="none";
	$('password').style.display="none";
	$('bookings').style.display="none";
	if (!divToShow.match(/^swimmer[0-9]+$/)) {
		$('swimmers').style.display="none";
	}
	$('addswimmer').style.display="none";
	for (var i = 1; i <= noSwimmers; i++) {
			$('swimmer' + i).style.display="none";
	}
	$(divToShow).style.display="block";
};

// Ensures the user enters the medical field if they select the swimmer has a pre-existing medical condition.
function medicalBox(value, formname) {
	var medical_div = $(formname + '_medical_div');
	var medical_title = $(formname + '_medical_title');

	if (value == 'yes') {
		medical_div.style.display = "block";
		medical_title.style.display = "block";
	} else {
		medical_div.style.display = "none";
		medical_title.style.display = "none";
	}
};

function medicalBoxCheckout(value, formname) {
	var medical_div = $('medicalStateDiv' + formname);
	var medical_title = $('medicalSelect' + formname);

	if (value == 'yes') {
		medical_div.style.display = "block";
		medical_title.style.display = "block";
	} else {
		medical_div.style.display = "none";
		medical_title.style.display = "none";
	}
	return;
};

// Used in my implentation/restructered PHP-Calendar by Keith Devens. (http://keithdevens.com/software/php_calendar)
function getMonthC(timestamp) {
	var url = "/includes/calendar.php?timestamp=" + timestamp;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('calendar_content').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('calendar_content').innerHTML = rs; }}).send();
};

/* 
Sends admin to the delete member page. 
Note: Deletion is misleading, the member and all their associated swimmers are flagged as
not "active", thus hiding them from all views.  Details are retained to view pre-exisiting 
booking data.  The same applies to the deleteSwimmer() function.
*/
function deleteMember(id) {
	document.location.href="/includes/member_delete.php?id=" + id;
};

function deleteSwimmer(id) {
	document.location.href="/includes/swimmer_delete.php?id=" + id;
};

/* Used to add a valid email address to the Newsletter table.  Regex for email address processed server side for security/spambot hampering. */
function addNewsletter() {
	var email_address = $('newsletter_email').value;
	var url = "/includes/add_newsletter.php?email=" + email_address;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('newsletter_div').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('newsletter_div').innerHTML = rs; }}).send();
};

function deleteClassType(id) {
	var url = "/includes/delete_class_type.php?type=type&class_id=" + id;
	new Request.HTML({url: url, method: 'get', onComplete: function() {window.location.href="/admin"; }}).send();
	
};

function deleteSingleClass(id) {
	var url = "/includes/delete_class_type.php?type=class&class_id=" + id;
	new Request.HTML({url: url, method: 'get', onComplete: function() {window.location.href="/admin"; }}).send();
};

function showTransactions(id) {
	var url = "/includes/get_transactions.php?id=" + id;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('transactions').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('transactions').innerHTML = rs;  }}).send();
	showAdminDiv('transactions');
};

function sendContact() {
	if ($('name').value == '') {alert('Please enter your name.'); return false; }
	if ($('email').value == '') {alert('Please enter your email address.'); return false; }
	document.getElementById('contactForm').submit();
};

function sendContact1() {
	if ($('name').value == '') {alert('Please enter your name.'); return false; }
document.getElementById('contactForm1').submit();
};

function getRevenueReport() {
	var start_date = document.getElementById('revenue_start').value;
	var end_date = document.getElementById('revenue_end').value;
	if ((start_date == '') || (end_date == '')) {
			alert('Please make sure you supply a start and end date range.');
			return false;
	}
	var date_match = /^\d{4}\-\d{2}\-\d{2}$/
	if (!start_date.match(date_match)) {
			alert('Your start date is invalid.');
			return false;
	}
	if (!end_date.match(date_match)) {
			alert('Your end date is invalid.');
			return false;
	}
	fulldate = start_date + '' + end_date;
	showReports(fulldate)
	
};

function changeClass(id) {
	$('swimmerxfer').style.display = 'none';
	showAdminDiv('swimmerxfer2');
	var url = "/includes/swimmer_xfer.php?id=" + id + '&step=1';
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('swimmerxfer2').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('swimmerxfer2').innerHTML = rs;  }}).send();
	
	
};

function changeClassAction(entryId, newClassId) {
	var answer = confirm('Are you sure you want to transfer these class details?');
	if (!answer) {
		return false;
	}
	var url = "/includes/swimmer_xfer.php?id=" + entryId + '&step=2&new_class_id=' + newClassId;
	var url2 = "/includes/loading.html";
	new Request.HTML({url: url2, method: 'get', onComplete: function(rt, re, rs, rj) {document.getElementById('swimmerxfer2').innerHTML = rs; }}).send();
	new Request.HTML({url: url, method: 'get', onComplete: function(rt, re, rs, rj) {window.location.reload();}}).send();
	
	
};
	