// JavaScript Document
function showDate()
// this function will show just the day, month, and year for the current date
{
	// create a new date object
	var myDate = new Date();	
	// extract the day out of the date
	var d = myDate.getDate();
	// extract the month out of the date
	var m = myDate.getMonth() + 1;
	// extract the year out of the date
	var y = myDate.getYear();
	//extract the day name from the day
	var dow = myDate.getDay();
	var dayName;
	switch (dow)
	{
		case 0: dayName = "Sunday"; break;
		case 1: dayName = "Monday"; break;
		case 2: dayName = "Tuesday"; break;
		case 3: dayName = "Wednesday"; break;
		case 4: dayName = "Thursday"; break;
		case 5: dayName = "Friday"; break;
		case 6: dayName = "Saturday"; break;
	}
		
	// get the month name from the month
	var monthName;	
	switch (m)
	{
		case 1: monthName = "January"; break;
		case 2: monthName = "February"; break;	
		case 3: monthName = "March"; break;	
		case 4: monthName = "April"; break;
		case 5: monthName = "May"; break;		
		case 6: monthName = "June"; break;
		case 7: monthName = "July"; break;
		case 8: monthName = "August"; break;
		case 9: monthName = "September"; break;
		case 10: monthName = "October"; break;
		case 11: monthName = "November"; break;
		case 12: monthName = "December"; break;
	}
	
	//add a suffix for the date (day of month - st, nd, rd, and th)
	var daySuffix = "th";
	switch (d)
	{
		case 1: daySuffix = "st"; break;
		case 2: daySuffix = "nd"; break;
		case 3: daySuffix = "rd"; break;
		case 21: daySuffix = "st"; break;
		case 22: daySuffix = "nd"; break;
		case 23: daySuffix = "rd"; break;
		case 31: daySuffix = "st"; break;
	}
			
	// combine the five date elements in a nice format
	var fullDate = dayName + ", the" + d + daySuffix + " of " + monthName + " " + y;
	// show the formatted date 
	document.write(fullDate);
}
function resetForm()
//resets form and initialises page
{
	//disable credit card boxes
	frmOrder.lstCard.disabled = true;
	frmOrder.txtCardNumber.disabled = true;
	frmOrder.lstMonth.disabled = true;
	frmOrder.lstYear.disabled = true;
	//hide errors
	fullname.style.visibility = "hidden";
	postaladdress.style.visibility = "hidden";
	phone.style.visibility = "hidden";
	payment.style.visibility = "hidden";
	cardnumber.style.visibility = "hidden";
	expirydate.style.visibility = "hidden";
	frmOrder.txtFullName.focus();	
}
function enableCredit()
// enables or disables the credit card details
{
	if (frmOrder.lstPayment.selectedIndex == 3)
	// credit card selected
	{
		frmOrder.lstCard.disabled = false;
		frmOrder.txtCardNumber.disabled = false;
		frmOrder.lstMonth.disabled = false;
		frmOrder.lstYear.disabled = false;
	}
	else // credit card not selected
	{
		frmOrder.lstCard.disabled = true;
		frmOrder.txtCardNumber.disabled = true;
		frmOrder.lstMonth.disabled = true;
		frmOrder.lstYear.disabled = true;
	}
}
function validateForm()
// validate the details supplied
{
	// test personal details
	// Full Name
	if (frmOrder.txtFullName.value == "")
	{
		fullname.style.visibility = "visible";
		frmOrder.txtFullName.focus();
		return;
	}
	fullname.style.visibility = "hidden";
	// Address
	if (frmOrder.txtAddress.value == "")
	{
		postaladdress.style.visibility = "visible";
		frmOrder.txtAddress.focus();
		return;
	}
	postaladdress.style.visibility = "hidden";
	// Phone no
	if (frmOrder.txtPhone.value == "")
	{
		phone.style.visibility = "visible";
		frmOrder.txtPhone.focus();
		return;
	}
	phone.style.visibility = "hidden";
	// Email
	if (frmOrder.txtEmail.value == "")
	{
		alert("Please type in your email address");
		frmOrder.txtEmail.focus();
		return;
	}
	
	// set a variable to hold the email
	var email = frmOrder.txtEmail.value;
	var accepted = checkEmail(email);
	if (accepted == true)
	
	{
		// test product and payment details
		// Product
		
		// Payment Method
		if (frmOrder.lstPayment.selectedIndex == 0)
		{
			payment.style.visibility = "visible";
			frmOrder.lstPayment.focus();
			return;
		}
		payment.style.visibility = "hidden";
		//card number if supplied
		if(frmOrder.lstPayment.selectedIndex == 3 && frmOrder.txtCardNumber.value == "")
		{
			cardnumber.style.visibility = "visible";
			frmOrder.txtCardNumber.focus();
			return;
		}
		cardnumber.style.visibility = "hidden";
		//expiry date if applicable
		if(frmOrder.lstPayment.selectedIndex == 3)
		{
			var creditYear = frmOrder.lstYear.value;
			var creditMonth = frmOrder.lstMonth.value;
			//get the current date
			var currentDate = new Date();
			//get the current month and year
			var currentYear = currentDate.getYear();
			var currentMonth = currentDate.getMonth() + 1;
			//validate month and year
			if (creditYear == currentYear && creditMonth < currentMonth)
			{
				expirydate.style.visibility = "visible";
				frmOrder.lstMonth.focus();
				return;	
			}
		}
		expirydate.style.visibility = "hidden";
		document.location = "orderaccepted.html";
	}
}
function calculateOrder()
//calculates the total cost of the order
{
	var cd = frmOrder.txtCdQuantity.value;
	var cdCost = cd * 25;
	var dvd = frmOrder.txtDvdQuantity.value;
	var dvdCost = dvd * 35;
	var tshirt = frmOrder.txtTshirtQuantity.value;
	var tshirtCost = tshirt * 45;
	var poster = frmOrder.txtPosterQuantity.value;
	var posterCost = poster * 20;
	var mp3 = frmOrder.lstMp3.value;
	var mp3Quantity = frmOrder.txtMp3Quantity.value;
	var mp3Cost = mp3 * mp3Quantity;
    var headphones = frmOrder.lstHeadphones.value;
	var headphonesQuantity = frmOrder.txtHeadphonesQuantity.value;
	var headphonesCost = headphones * headphonesQuantity;
	var cleaners = frmOrder.lstCleaners.value;
	var cleanersQuantity = frmOrder.txtCleanersQuantity.value;
	var cleanersCost = cleaners * cleanersQuantity;
	var total = cdCost + dvdCost + tshirtCost + posterCost + mp3Cost + headphonesCost + cleanersCost;
	
	//check if delivery is required
	if (frmOrder.chkDelivery.checked == true)
	{
		total = total + 10;
	}
	//display the total cost
	{
		frmOrder.txtTotalCost.value = "$ " + total.toFixed(2);
	}
}
function checkEmail(email)
//this function will validate an email address
{
	//declare the various patterns
	var baseEmail = "[a-z0-9_.]+[@][a-z0-9_]{2,99}[.][a-z]{2,4}";
	var extendedEmail = baseEmail + "[.][a-z]{2}";
	var extendedEmail2 = baseEmail + "[.][a-z]{2,4}[.][a-z]{2}";
	//place brakets and end expression codes around each pattern
	var pattern1 = "(" + baseEmail + "\$)";
	var pattern2 = "(" + extendedEmail + "\$)";
	var pattern3 = "(" + extendedEmail2 + "\$)";
	//put all the patterns together with or codes
	var allEmails = pattern1 + "|" + pattern2 + "|" + pattern3;
	//define the pattern as a regular expression
	var emailExpression = new RegExp(allEmails);
	//compare the expression with the email that the user entered
	if (emailExpression.test(email) == false)
	{
		alert("Please enter a valid email - e.g. jsmith@world.com");
		return;
	}
	else
	{
	//set a variable to return whether the email is valid
	var validEmail = true;
	return(validEmail);
	} 
}