// global variables
var sError = "";
var bError = false;

// error message array
aErrors = new Array();

aErrors["title"] = "Select the traveller's title";
aErrors["first_name"] = "Enter the traveller's first name";
aErrors["surname"] = "Enter the traveller's surname";
aErrors["passportnumber"] = "Enter the traveller's passport number";
aErrors["expirydate"] = "Select a valid passport expiry for the traveller";
aErrors["sex"] = "Select the traveller's sex";
aErrors["country_residence"] = "Select the traveller's country of residence";
aErrors["dob"] = "Select a valid date of birth for the traveller";
aErrors["nationality"] = "Select the traveller's nationality";

function validateStep(iStep) {
	// check that a step is complete
	var bPaxError = false;
	var iPaxError = 0;
	bError = false;
	switch (iStep) {
		// step 2 validation
		case 2:
			
			
			if (sTravellerStatus == "W")
			{
				if (!travellerComplete(1, true)) {
					iPaxError = 1;
					bPaxError = true;
					break;
				}
			}
			else
			{
				for (var i=1; i<=iNumberOfTravellers; i++) {
					if (!travellerComplete(i, true)) {
						iPaxError = i;
						bPaxError = true;
						$(".passengerTabs a").eq(i-1).trigger("click");
						
						break;
					}
				}
			}
			break;

		
	}
	
	if (bError) {
		if (bPaxError)
		{
			sError = "Please amend the following for passenger " + iPaxError + ": \n" + sError;
		}
		else
		{
			sError = "Please amend the following: \n" + sError;
		}
		showError();
		return false;
	} else {
		return true;
	}
}


function validTextField(sField, bAddErrors) {
	// validates a mandatory text field
	if (!checkField(sField)) {
		if (bAddErrors) {
			addError(sField);
		}
		bError = true;
	}
}

function validNumericField(sField, bAddErrors, bAllowSpaces) {
	// validates a mandatory text field
	if (!checkField(sField))
	{
		if (bAddErrors)
		{
			addError(sField);
		}
		bError = true;
	}
	else
	{
		if (bAllowSpaces)
		{
			// replace all spaces and check for a number
			if (isNaN(document.forms["frm"].elements[sField].value.replace(/\s/g, "")))
			{
				if (bAddErrors)
				{
					addError(sField);
				}
				bError = true;
			}
		}
		else
		{
			// check for a number without removing spaces
			if (isNaN(document.forms["frm"].elements[sField].value))
			{
				if (bAddErrors)
				{
					addError(sField);
				}
				bError = true;
			}
		}
	}
}

function validAlphaField(sField, bAddErrors) {

	// validates a mandatory text field
	var regExAlpha = /.[a-zA-Z]/

	if (!checkField(sField))
	{
		if (bAddErrors)
		{
			addError(sField);
		}
		bError = true;
	}
	else if (!regExAlpha.test(document.forms["frm"].elements[sField].value))
	{
		if (bAddErrors)
		{
			addError(sField);
		}
		bError = true;
	}
}

function validRadio(sField, bAddErrors) {
	// validates a mandatory radio button group
	if (!checkRadioSelected(sField)) {
		if (bAddErrors) {
			addError(sField);
		}
		bError = true;
	}
}

function checkField(sField) {
	// checks if a field has been completed
	if (document.forms["frm"].elements[sField].value == "") {
		return false;
		sField.focus();
	} else {
		return true;
	}
}

function checkEmail(sField) {
	// checks for a valid email address
	var email = document.forms["frm"].elements[sField].value;
	var regExEmail = /^[a-zA-Z0-9\-\_\']+(\.[a-zA-Z0-9\-\_\']+)*\@([a-zA-Z0-9\-]+\.)+[a-zA-Z]{2,}$/

	if (!regExEmail.test(email))
	{
		return false;
	}
	else
	{
		return true;
	}
}

function checkRadioSelected(sField) {
	
	// checks if any of a group of radio buttons have been selected
	var bSelected= false;
	var oField = document.forms["frm"].elements[sField];
	for (var i=0; i < oField.length; i++) {
		if (oField[i].checked) {
			bSelected = true;
		}
	}
	return bSelected;
}

function radioValue(sField, sValue) {
	// gets the value of a radio group
	var bSelected= false;
	oField = document.forms["frm"].elements[sField];
	for (i=0; i < oField.length; i++) {
		if (oField[i].checked) {
			if (oField[i].value == sValue) {
				bSelected = true;
			}
		}
	}
	return bSelected;
}

function checkCheckboxSelected(sField) {
	// checks if a checkbox has been checked
	if (document.forms["frm"].elements[sField].checked) {
		return true;
	} else {
		return false;
	}
}

function checkDate(sDayField, sMonthField, sYearField) {
	// checks that a date is valid
	if (sDayField == "") {
		// some dates are only month and year, e.g. credit card expiry
		iDay = 1;
	} else {
		iDay = document.forms["frm"].elements[sDayField].value;
	}
	iMonth = document.forms["frm"].elements[sMonthField].value;
	iYear = document.forms["frm"].elements[sYearField].value;
	iMonth = iMonth - 1; // javascript month range : 0- 11
	var oDate = new Date(iYear, iMonth, iDay);
	if ((iYear == oDate.getFullYear()) && (iMonth == oDate.getMonth()) && (iDay == oDate.getDate())) {
		return true;
	} else {
		return false;
	}
}


function addError(sField) {
	// adds an error message
	//sError += "debug: " + sField;
	if (aErrors[sField]) {
		sError += "- " + aErrors[sField] + "\n";
	} else {
		// this field might end in a number, so add the error without the number
		sField = sField.substring(0, sField.length - 1);
		if (aErrors[sField]) {
			sError += "- " + aErrors[sField] + "\n";
		}
	}
	bError = true;
}

function showError() 
{
	// displays an error message to the user
	if (sError != "") 
	{
		alert(sError);
		sError = "";
	}
	bError = false;
}

// trip summary functions
// step 2 functions

function validate(frm) {
 var firstname=document.frm.firstname;
  if ((firstname.value==null)||(firstname.value=="")){
    alert("Please enter your first name ");
    firstname.focus();
    return false;
  }

var lastname=document.frm.lastname;
  if ((lastname.value==null)||(lastname.value=="")){
    alert("Please enter your last name ");
    lastname.focus();
    return false;
  }

var gender=document.frm.gender;
  if ((gender.selectedIndex==null)||(gender.selectedIndex=="")){
    alert("Please select your gender ");
	gender.focus();
    return false;
  }

var address=document.frm.address;
  if ((address.value==null)||(address.value=="")){
    alert("Please enter your address name ");
    address.focus();
    return false;
  }

var country=document.frm.country;
   if ((country.selectedIndex==null)||(country.selectedIndex=="")){
   alert("Please select your country ");
    country.focus();
    return false;
  }

var nationality=document.frm.nationality;
   if ((nationality.selectedIndex==null)||(nationality.selectedIndex=="")){
   alert("Please select your nationality ");
    nationality.focus();
    return false;
  }

var city=document.frm.city;
  if ((city.value==null)||(city.value=="")){
    alert("Please enter your city name ");
    city.focus();
    return false;
  }

var zipcode=document.frm.zipcode;
  if ((zipcode.value==null)||(zipcode.value=="")){
    alert("Please enter your zip code ");
    zipcode.focus();
    return false;
  }

var workphone=document.frm.workphone;
  if ((workphone.value==null)||(workphone.value=="")){
    alert("Please enter your work phone number ");
    workphone.focus();
    return false;
  }

var homephone=document.frm.homephone;
  if ((homephone.value==null)||(homephone.value=="")){
    alert("Please enter your home phone number ");
    homephone.focus();
    return false;
  }

var fax=document.frm.fax;
  if ((fax.value==null)||(fax.value=="")){
    alert("Please enter your fax number ");
    fax.focus();
    return false;
  }

var email=document.frm.email;
  if ((email.value==null)||(email.value=="")){
    alert("Please enter your email adress ");
    email.focus();
    return false;
  }

var cemail=document.frm.cemail;
  if ((cemail.value==null)||(cemail.value=="")){
    alert("Please confirm your email address ");
    cemail.focus();
    return false;
  }

var controls = frm.elements;
var emailAddress = controls['email'].value;
    if (!isEmailAddress(emailAddress)) {
        alert('Syntax error in email address.');
		email.focus();
        return false;
    }

   if (emailAddress != controls['cemail'].value) {
        alert('You may have mistyped your confirm email address.'
            + ' Please check e-mail fields carefully and try again.');
		cemail.focus();
        return false;
    }

  var agree=document.frm.agree;
  if ((agree.checked==null)||(agree.checked=="")){
    alert("Please read the terms and conditions and check the box");
	agree.focus();
    return false;
  }

      return true;
}

function validate1(frm) {
    var isOK=false;
		for(var i=0;i<document.frm.tourclass.length;i++)
		{
			if (frm.tourclass[i].checked==true)
				{
					isOK=true;
					break;
				}
		}
		if (isOK==false)
		{
			alert("Please select trip class.");
			return false;
		}
		
 var room=document.frm.room;
  if ((room.selectedIndex==null)||(room.selectedIndex=="")){
    alert("Please select room type. ");
	room.focus();
    return false;
  }


var isOK=false;
		for(var i=0;i<document.frm.pay.length;i++)
		{
			if (frm.pay[i].checked==true)
				{
					isOK=true;
					break;
				}
		}
		if (isOK==false)
		{
			alert("Please select payment way.");
			return false;
		}

        return true;
}


function isEmailAddress(string) {
    return /^[^@]+@[^.]+(\.[^.]+)+$/.test(string);
}
function check(a,b) {
var obja = document.getElementById(a);
var objb = document.getElementById(b);
if (obja.value==objb.value) {}
else {alert("The email fields aren't the same!!");}
}


function travellerComplete(iTraveller, bAddErrors) {
	// validates that a traveller's details are complete
	bError= false;
	// these are fields for all travellers
	validTextField("title" + iTraveller, bAddErrors);
	validTextField("first_name" + iTraveller, bAddErrors);
	validTextField("surname" + iTraveller, bAddErrors);
	validTextField("passportnumber" + iTraveller, bAddErrors);
	validTextField("expirydate" + iTraveller, bAddErrors);

if (sTravellerStatus != "W")
		{validRadio("sex" + iTraveller, bAddErrors);}
	
	validTextField("country_residence" + iTraveller, bAddErrors);
	validTextField("nationality" + iTraveller, bAddErrors);

if (sTravellerStatus != "W")
	{
		if (!checkField("dob_day" + iTraveller) || !checkField("dob_month" + iTraveller) || !checkField("dob_year" + iTraveller)) {
			if (bAddErrors) {
				addError("dob");
				bError = true;
			}
		} else if (!checkDate("dob_day" + iTraveller, "dob_month" + iTraveller, "dob_year" + iTraveller)) {
			if (bAddErrors) {
				addError("dob");
				bError = true;
			}
		}
	}
/*	
	if (!checkField("email" + iTraveller)) {
		if (bAddErrors) {
			addError("email");
			bError = true;
		}
	} else if (!checkEmail("email" + iTraveller)) {
		if (bAddErrors) {
			addError("email");
			bError = true;
		}
	} */

	if (bError) {
		return false;
	} else {
		return true;
	}
}

function getAge(iTraveller) {
	// gets the traveller's age last birthday
	var sDate = new Date();
	var iCurrentYear = sDate.getFullYear();
	iDOBYear = document.forms["frm"].elements["dob_year" + iTraveller].value;
	if (iDOBYear != "") {
		return iCurrentYear - iDOBYear;
	} else {
		return 0;
	}
}

function checkDOB(oField) {
	// checks the date of birth entered
	var iTraveller = oField.name.substring(oField.name.length-1, oField.name.length);
	if (bPolar == "False")
	{
		if (getAge(iTraveller) >= 70) {
			$("#traveller" + iTraveller + "over70").show();
		} else {
			$("#traveller" + iTraveller + "over70").hide();
		}
	}
}

// step 3 functions


function emailConditions(iDatesPricesID) {
	// opens the email conditions popup window
	//sEmail = document.forms["frm"].elements["email1"].value;
	window.open("email_conditions.asp?dates_prices_id=" + iDatesPricesID, "emailWin", "width=600,height=175");
}


function processBooking() 
{
	if (validate1(frm) && validateStep(2) && validate(frm)) 
	{
		document.forms["frm"].submit();
	}
}

function changeCountryOfResidence(countryID, n)
{
	// insert the phone code
	var objElement = window.document.getElementById("PhoneCode" + n);
	if (countryID)
	{
		objElement.replaceChild(window.document.createTextNode(countryPhonesArray[countryID].phoneCode), objElement.childNodes[0]);
	}
	else
	{
		objElement.replaceChild(window.document.createTextNode(""), objElement.childNodes[0]);
	}

	// update the contact country
	if (countryID)
	{
		if (document.forms["frm"].elements["contact_country" + n])
		{
			if (document.forms["frm"].elements["contact_country" + n].value == "")
			{
				document.forms["frm"].elements["contact_country" + n].value = countryID;
				changeContactCountry(countryID, n);
			}
		}

		/*
		if (sTravellerStatus != "W" && bPolar == "False")
		{
			if (n == 1)
			{
				// show or hide the credit card details
				if (countryID == 18)
				{
					doShowHide("ccDetails", false);
					doShowHide("noccDetails", true);
					document.forms["frm"].elements["card_name"].value = "";
				}
				else if (countryID == 22)
				{
					doShowHide("ccDetails", false);
					doShowHide("noccDetails", true);
					document.forms["frm"].elements["card_name"].value = "";
				}
				else
				{
					doShowHide("ccDetails", true);
					doShowHide("noccDetails", false);
				}
			}
		}
		*/
	}
}

function changeContactCountry(countryID, n)
{
	var objElement = window.document.getElementById("State" + n);
	if ((countryID == 17) || (countryID == 18))
	{
		objElement.replaceChild(window.document.createTextNode("State"), objElement.childNodes[0]);
	}
	else if (countryID == 22)
	{
		objElement.replaceChild(window.document.createTextNode("Province"), objElement.childNodes[0]);
	}
	else if (countryID == 240)
	{
		objElement.replaceChild(window.document.createTextNode("County"), objElement.childNodes[0]);
	}
	else
	{
		objElement.replaceChild(window.document.createTextNode("State / province / county"), objElement.childNodes[0]);
	}

	var objElement = window.document.getElementById("Postcode" + n);
	if (countryID == 18)
	{
		objElement.replaceChild(window.document.createTextNode("zip"), objElement.childNodes[0]);
	}
	else if ((countryID == 17) || (countryID == 22) || (countryID == 240))
	{
		objElement.replaceChild(window.document.createTextNode("Postcode"), objElement.childNodes[0]);
	}
	else
	{
		objElement.replaceChild(window.document.createTextNode("Postcode / zip"), objElement.childNodes[0]);
	}
}
