// JavaScript Document

function checkUKTelephone (telephoneNumber) {

  // Convert into a string and check that we were provided with something
  var telnum = telephoneNumber + " ";
  if (telnum.length == 1)  {
     telNumberErrorNo = 1;
     return false
  }
  telnum.length = telnum.length - 1;
  
  // Don't allow country codes to be included (assumes a leading "+")
  var exp = /^(\+)[\s]*(.*)$/;
  if (exp.test(telnum) == true) {
     telNumberErrorNo = 2;
     return false;
  }
  
  // Remove spaces from the telephone number to help validation
  while (telnum.indexOf(" ")!= -1)  {
    telnum = telnum.slice (0,telnum.indexOf(" ")) + telnum.slice (telnum.indexOf(" ")+1)
  }
  
  // Remove hyphens from the telephone number to help validation
  while (telnum.indexOf("-")!= -1)  {
    telnum = telnum.slice (0,telnum.indexOf("-")) + telnum.slice (telnum.indexOf("-")+1)
  }  
  
  // Now check that all the characters are digits
  exp = /^[0-9]{10,11}$/
  if (exp.test(telnum) != true) {
     telNumberErrorNo = 3;
     return false;
  }
  
  // Now check that the first digit is 0
  exp = /^0[0-9]{9,10}$/
  if (exp.test(telnum) != true) {
     telNumberErrorNo = 4;
     return false;
  }
  
  // Finally check that the telephone number is appropriate.
  // Removed as of 2010 because these rules no longer counted neither could they be validated well.
  /*exp = /^(01|02|03|05|070|077|07624|078|079)[0-9]+$/;
  if (exp.test(telnum) != true) {
     telNumberErrorNo = 5;
     return false;
  }*/
  
  // Telephone number seems to be valid - return the stripped telehone number  
  return telnum;
}





function buyTicketsNext()
{
	makeVisible('custDetails');
	makeVisible('custDetails_boxtop');
	makeVisible('custDetails_boxbottom');

	makeInvisible('dworldEntryTickets');
	makeInvisible('entry_boxtop');
	makeInvisible('entry_boxbottom');		
		
	makeInvisible('dworldEvents');
	makeInvisible('events_boxtop');
	makeInvisible('events_boxbottom');

	makeInvisible('chooseTicketsTop');
	makeInvisible('chooseTickets');
	makeInvisible('chooseTicketsBottom');
	
	document.frmTickets.txtCustName.focus();
	document.frmTickets.btnGotoCustDetails.disabled = true;

}

function buyTicketsPrev()
{
	makeVisible('ticketDetails');
	makeInvisible('custDetails');
	
	makeInvisible('custDetails');
	makeInvisible('custDetails_boxtop');
	makeInvisible('custDetails_boxbottom');

	makeVisible('chooseTicketsTop');
	makeVisible('chooseTickets');
	makeVisible('chooseTicketsBottom');
	
	document.frmTickets.txtCustName.focus();
	document.frmTickets.btnGotoCustDetails.disabled = true;
	document.frmTickets.btnGotoCustDetails.disabled = false;
	document.frmTickets.btnGotoTicketDetails.disabled = false;
	
	if ((document.frmTickets.choose_event_ticket.checked))
	{
		makeVisible('dworldEvents');
		makeVisible('events_boxtop');
		makeVisible('events_boxbottom');
	}
	
	if ((document.frmTickets.choose_entry_ticket.checked))
	{
		makeVisible('dworldEntryTickets');
		makeVisible('entry_boxtop');
		makeVisible('entry_boxbottom');	
	}
	
}

function makeVisible(div_name)
{
	// This functions sets the div to display: block
	document.getElementById(div_name).style.display = "block"; 
}

function makeInvisible(div_name)
{
	// 	This function sets the div to display: none 
	document.getElementById(div_name).style.display = "none"; 
}




function validate_required(field,alerttxt)
{
	with (field)
	{
	if (value==null||value=="")
	  { 
	  	alert(alerttxt);
		return false;
	  }
	else {return true}
	}
}

function validate_frmTickets(thisform)
{
	// loaded on submitting the buy_tickets.php form
	errorFlag = 0; 		
	errorMessage = "";	

	if (document.frmTickets.choose_entry_ticket.checked == true)
	{
		// VALIDATE DATE - UNSELECTED, PAST, TODAY, FUTURE
		if 	(dateSelected == 1)
		{
			// IS DATE IN THE PAST?
			var today = new Date();
			if (myDate < today)
			{
				errorFlag++;
				errorMessage = errorMessage + errorFlag + " You have selected a date in the past\n";
			}
		
			// VALIDATE NUM TICKETS SELECTION
			var dayAdults 			= parseInt(parseFloat(document.getElementById("selDayAdults").value));
			var dayChildren 		= parseInt(parseFloat(document.getElementById("selDayChildren").value));
			var dayYoungChildren 	= parseInt(parseFloat(document.getElementById("selDayYoungChildren").value));
			var eveAdults 			= parseInt(parseFloat(document.getElementById("selEveAdults").value)); 
			var eveChildren 		= parseInt(parseFloat(document.getElementById("selEveChildren").value));
			var eveYoungChildren 	= parseInt(parseFloat(document.getElementById("selEveYoungChildren").value));
			var	selDayConcessions	= parseInt(parseFloat(document.getElementById("selDayConcessions").value));
			var	selEveConcessions	= parseInt(parseFloat(document.getElementById("selEveConcessions").value));
			
			var numDayTickets = dayAdults + dayChildren + dayYoungChildren + selDayConcessions;
			var numEveTickets = eveAdults + eveChildren + eveYoungChildren + selEveConcessions;
		
			if ((numDayTickets + numEveTickets) == 0) 
			{	
				errorFlag++;
				errorMessage = errorMessage + errorFlag + " You have not selected any tickets to purchase. \n";
			}
		
			if ((numDayTickets + numEveTickets) > 14)
			{
				errorFlag++;
				errorMessage = errorMessage + errorFlag + " You have selected more than 15 tickets. Please call us regarding group bookings. \n";
			}
			if ((dayAdults + eveAdults + selDayConcessions + selEveConcessions) == 0)
			{
				errorFlag++;
				errorMessage = errorMessage + errorFlag + " At least one adult must be present. \n";
			}
		
			// check for quotas
			// IS THIS DATE RESERVED AS A CLOSED DAY ( NEED TO MAKE A NEW MYSQL TABLE FOR THIS, COMPLETE WITH ADMIN INTERFACE [TODO]
		}
		else
		{
			errorFlag++;
			errorMessage = errorMessage + errorFlag + " You must select a date to purchase tickets for \n";
		}

	}
	
	if (document.frmTickets.choose_event_ticket.checked == true)
	{
		//alert("validating event tickets");
		
		// VALIDATE FOR EVENT TICKETS
		var totalTicketsBought = 0;
		var e = document.frmTickets.getElementsByTagName('select');
		//alert("val events: entering loop");
		
		for (var i=0;i<e.length;i++) {

			var p = e[i].parentNode.parentNode;	
			if ((p.className == 'row_light') || (p.className == 'row_dark')) {
				//alert('select value:'+e[i].parentNode.parentNode.className);
				if ( (e[i].value) > 0) { totalTicketsBought++; } 
			}
		}
		
		if (totalTicketsBought == 0)
		{
			// alert ("error flag setting because no events were selected");
			errorFlag++;
			errorMessage = errorMessage + errorFlag + " You have not selected any event tickets. \n";
		}
	}
	
	//alert ("now validitn customer details");
	
	with (thisform)	
	{
		if (validate_required(txtCustName, "Please enter your name.") == false)
			{ buyTicketsNext(); txtCustName.focus(); return false; }
		if (validate_required(txtBilling, "Please enter your billing address.") == false)
			{ buyTicketsNext(); txtBilling.focus(); return false; }
		if (validate_required(txtEmail, "Please enter your email address.") == false)
			{ buyTicketsNext(); txtEmail.focus(); return false; }
		if (validate_required(txtPhone, "Please enter your phone number.") == false)
			{ buyTicketsNext(); txtPhone.focus(); return false; }
		
		telNumberErrorNo = 0;
		telNumberErrors = new Array ();
		telNumberErrors[0] = "Valid UK telephone number";
		telNumberErrors[1] = "Telephone number not provided";
		telNumberErrors[2] = "UK telephone number without the country code, please";
		telNumberErrors[3] = "UK telephone numbers should contain 10 or 11 digits";
		telNumberErrors[4] = "The telephone number should start with a 0";
		telNumberErrors[5] = "The telephone number is either invalid or inappropriate";
		
		var myTelNo = txtPhone.value;	
		//alert (myTelNo);	
			if (!checkUKTelephone (myTelNo)) {
			alert (telNumberErrors[telNumberErrorNo]);
			return false;
			}
			// Otherwise redisplay telephone number on form in corrected format
			else {
			txtPhone.value = checkUKTelephone (myTelNo);			
			}
			
		if (txtEmail.value != txtEmail2.value)
		{
			errorFlag++;
			errorMessage = errorMessage + errorFlag + " The email addresses you have provided do not match. \n";
		}
			
	}
	
	// evaluate if there have been any errors and display the appropriate message
	
	if (errorFlag > 0)
	{
		alert(errorMessage);
		buyTicketsPrev();
		return false;
	}
	else
	{
		return true;
	}
	
	//alert('error, should not have got here');
	return false;
}
