function booking_login()
{ document.getElementById("newiframe").src=h+"load_page.php?MESSAGE=L_O_G_G_I_N_G__I_N";
  setTimeout('document.getElementById("newiframe").src="'+h+'load_page.php?MESSAGE=L_O_G_G_I_N_G__I_N"',1);
  scroll(0,0);
  cacheOn();
}

function change_country(code) {
	if(document.getElementById(code)) {
		document.getElementById("state_field").innerHTML = document.getElementById(code).innerHTML;
	} else {
		document.getElementById("state_field").innerHTML = document.getElementById("ALL").innerHTML;
	}
}

function cardval(cardnumber,cardname) {
  var cards = new Array();
  cards [0] = {name: "VI", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "CA", 
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "DC", 
               length: "14,16", 
               prefixes: "305,36,38,54,55",
               checkdigit: true};
  cards [3] = {name: "AX", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [4] = {name: "DS", 
               length: "16", 
               prefixes: "6011,622,64,65",
               checkdigit: true};
  cards [5] = {name: "JC", 
               length: "16", 
               prefixes: "35",
               checkdigit: true};
  cards [6] = {name: "CB", 
		  	   length: "14", 
		  	   prefixes: "300,301,302,303,304,305",
		  	   checkdigit: true};
               
  // Establish card type
  var cardType = -1;
  for (var i=0; i<cards.length; i++) {

    // See if it is this card (ignoring the case of the string)
    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  
  // If card type not found, report an error
  if (cardType == -1) return false; 
   
  // Ensure that the user has provided a credit card number
  if (cardnumber.length == 0) return false; 
      
  // Now remove any spaces from the credit card number
  cardnumber = cardnumber.replace (/\s/g, "");
  
  // Check that the number is numeric
  var cardNo = cardnumber
  var cardexp = /^[0-9]{13,19}$/;
  if (!cardexp.exec(cardNo))  {
     return false; 
  }
       
  // Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
  
    // Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      // Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
    
      // If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      // Add the units element to the checksum total
      checksum = checksum + calc;
    
      // Switch the value of j
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    // All done - if checksum is divisible by 10, it is a valid modulus 10.
    // If not, report an error.
    if (checksum % 10 != 0)  {
     return false; 
    }
  }  

  // The following are the card-specific checks we undertake.
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  // We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
    
  // Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
      
  // Now see if any of them match what we have in the card number
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  // If it isn't a valid prefix there's no point at looking at the length
  if (!PrefixValid) {
     return false; 
  }
    
  // See if the length is valid for this card
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  
  // See if all is OK by seeing if the length was valid. We only check the 
  // length if all else was hunky dory.
  if (!LengthValid) {
     return false; 
  };   
  
  // The credit card is in the required format.
  return true;
}

function emailValidation(entered)
{ var len=0;
  var count=0;
  len=entered.value.length;
  for(var i=0;i<=len;i++)
  { if((entered.value.charAt(i)=="@"))
    { count++;
	}

  }
  if(count>2)
  { return false;	
 }else
 { apos=entered.value.indexOf("@");
   dotpos=entered.value.lastIndexOf(".");
   lastpos=entered.length-1;
   if (apos<1 || dotpos-apos<2 || lastpos-dotpos>3 || lastpos-dotpos<2)
   { return false;	
   }else
   { return true;
   }
 }
}

function IataCheck(sText)
{ var ValidChars = "0123456789";
  var IsNumber=true;
  var Char;
  for (i = 0; i < sText.length && IsNumber == true; i++) 
  { Char = sText.charAt(i); 
    if (ValidChars.indexOf(Char) == -1) 
    { IsNumber = false;
    }
  }
  return IsNumber;
}


function reserve()
{ document.getElementById("newiframe").src=r+"load_page.php?MESSAGE=C_O_N_F_I_R_M_I_N_G__A_V_A_I_L_A_B_I_L_I_T_Y";
  setTimeout('document.getElementById("newiframe").src="'+r+'load_page.php?MESSAGE=C_O_N_F_I_R_M_I_N_G__A_V_A_I_L_A_B_I_L_I_T_Y"',1);
  scroll(0,0);
  cacheOn();	
}

function do_booking() {
	error_str = new String("");
	found_error = false;
	
	if(document.booking.first_name.value=="") {
		error_str += "Please enter your First Name\n";
		found_error = true;
	}
	if(document.booking.last_name.value=="") {
		error_str += "Please enter your Last Name\n";
		found_error = true;
	}
	if(document.booking.email.value=="") {
		error_str += "Please enter your Email Address\n";
		found_error = true;
	}
	if(document.booking.email_confirm.value!=document.booking.email.value) {
		error_str += "Email Address and Confirm Email Address must be the same\n";
		found_error = true;
	}
	if(document.booking.phone.value=="") {
		error_str += "Please enter your Phone Number\n";
		found_error = true;
	}
	if(document.booking.currency.value=="") {
		error_str += "Please choose your Currency\n";
		found_error = true;
	}
	if(document.booking.language.value=="") {
		error_str += "Please choose your Language\n";
		found_error = true;
	}
	if(document.booking.address_1.value=="") {
		error_str += "Please enter your Address\n";
		found_error = true;
	}
	if(document.booking.city.value=="") {
		error_str += "Please enter your City\n";
		found_error = true;
	}
	if(document.booking.country.value=="") {
		error_str += "Please choose your Country\n";
		found_error = true;
	}
	if((document.booking.country.value=="US" || document.booking.country.value=="CA" || document.booking.country.value=="AU") && document.booking.state.value=="") {
		error_str += "Please choose your State\n";
		found_error = true;
	}
	if(document.booking.zip_postal.value=="") {
		error_str += "Please enter your Zip / Postal Code\n";
		found_error = true;
	}
	if(document.booking.card_number.value=="") {
		error_str += "Please enter your Credit Card Number\n";
		found_error = true;
	}
	if(document.booking.card_type.value=="") {
		error_str += "Please choose your Credit Card Type\n";
		found_error = true;
	}
	if(document.booking.card_name.value=="") {
		error_str += "Please enter the Name on your Credit Card\n";
		found_error = true;
	}
	if(document.booking.expiry_month.value=="") {
		error_str += "Please choose your Credit Card Expiry Month\n";
		found_error = true;
	}
	if(document.booking.expiry_year.value=="") {
		error_str += "Please choose your Credit Card Expiry Year\n";
		found_error = true;
	}

	if(!emailValidation(document.booking.email)) {
		error_str += "Please enter a valid Email Address\n";
		found_error = true;
	}

	if(document.booking.expiry_year.value+"-"+document.booking.expiry_month.value<nowdate) {
		error_str += "Please enter a valid Credit Card Expiry Date\n";
		found_error = true;
	}

	if(!cardval(document.booking.card_number.value, document.booking.card_type.value)) {
		error_str += "Please enter a valid Credit Card Number\n"; 
		found_error = true;
	}

	//if(document.booking.IATA.value!="" || IataCheck(document.booking.IATA.value)) {
	//	alert("Please enter a valid IATA number (numbers only, do not include spaces or hyphens)";
	//}
	
	if(found_error == false) {
		document.booking.GO.value="true";
		document.getElementById("newiframe").src=h+"load_page.php?MESSAGE=M_A_K_I_N_G__R_E_S_E_R_V_A_T_I_O_N<br><br>This can take up to one minute<br>Please do not close or refresh your browser";
		setTimeout('document.getElementById("newiframe").src="'+h+'load_page.php?MESSAGE=M_A_K_I_N_G__R_E_S_E_R_V_A_T_I_O_N<br><br>This can take up to one minute<br>Please do not close or refresh your browser"',1);
		scroll(0,0);
		cacheOn();
		return true;
	} else {
		alert(error_str);
		return false;
	}
}

function validateEmail()
{ if(document.booking.firstName.value=="")
  { alert("Please enter your First Name");
	document.booking.firstName.focus();
  }else if(document.booking.lastName.value=="")
  { alert("Please enter your Last Name");
	document.booking.lastName.focus();
  }else if(document.booking.yemail.value=="")
  { alert("Please enter your Email Address");
	document.booking.yemail.focus();
  }else if(document.booking.yemail_confirm.value!=document.booking.yemail.value)
  { alert("Your Email Address and Confirm Email Address must be the same");
	document.booking.yemail_confirm.focus();
  }else if(document.booking.subject.value=="")
  { alert("Please enter a Subject");
	document.booking.subject.focus();
  }else if(document.booking.message.value=="")
  { alert("Please enter a Message");
	document.booking.message.focus();
  }else
  { if(emailValidation(document.booking.yemail))
    { document.booking.submit(); 
    }else
    { alert("Please enter a valid Email Address");
    }
  }
  return false;
}



function validateCalender() {
	var url;
	var arrival_date = document.getElementById("arrival_date").value;
	if(arrival_date != '' && arrival_date != 'Arrival') {
		var arrival_date_list = arrival_date.split(",");
		var fday = arrival_date_list[1].substr(5,2);
		var fmonth_name = arrival_date_list[1].substr(1,3);
		var fmonth_num = monthNameToNum(fmonth_name);
		var fyear = arrival_date_list[2].substr(1,4);
		
		var fmonth = fmonth_num + "-" + fyear;
		document.getElementById("FDAY").value = fday;
		document.getElementById("FMONTH").value = fmonth;
	}

	var departure_date = document.getElementById("departure_date").value;
	if(departure_date != '' && departure_date != 'Departure') {
		var departure_date_list = departure_date.split(",");
		var tday = departure_date_list[1].substr(5,2);
		var tmonth_name = departure_date_list[1].substr(1,3);
		var tmonth_num = monthNameToNum(tmonth_name);
		var tyear = departure_date_list[2].substr(1,4);
		
		var tmonth = tmonth_num + "-" + tyear;
		document.getElementById("TDAY").value = tday;
		document.getElementById("TMONTH").value = tmonth;		
	}
	
	if(fday != '' && tday != '') {
		if(tyear < fyear) {
			errorMsg += "Your departure date must be after your arrival date.";
		} else if(tmonth_num < fmonth_num && tyear == fyear) {
			errorMsg += "Your departure date must be after your arrival date.";
		} else if(tday <= fday && tmonth_num == fmonth_num && tyear == fyear) {
			errorMsg += "Your departure date must be after your arrival date.";
		}		
	}

	if(errorMsg != '') {
		alert(errorMsg);
		return false;
	}
	
	request_validate();
}


function request_validate()
{ if(document.booking.firstName.value=="")
  { alert("Please enter your First Name");
	document.booking.firstName.focus();
  }else if(document.booking.lastName.value=="")
  { alert("Please enter your Last Name");
	document.booking.lastName.focus();
  }else if(document.booking.email.value=="")
  { alert("Please enter your Email Address");
	document.booking.email.focus();
  }else if(document.booking.email_confirm.value!=document.booking.email.value)
  { alert("Email Address and Confirm Email Address must be the same");
    document.booking.email_confirm.focus();
  }else if((document.booking.email.value!="") && (document.booking.setemail.checked==false)&&(document.booking.telephone.value==""))
  { alert("By Email should be selected!");
    document.booking.email.focus();
  }else if(document.booking.telephone.value=="" && (document.booking.setphone.checked==true))
  { alert('Please enter your Telephone Number');
	document.booking.setphone.checked=false;
  }else if(document.booking.telephone.value!="" && (document.booking.setphone.checked==false) && (document.booking.setemail.checked==false))
  { msg1="Please Select at least one field - either By Email or By Phone";
	alert(msg1);
  }else
  { if(emailValidation(document.booking.email))
    { document.booking.submit(); 
    }else
    { alert("Please enter a valid Email Address");
    }
  }	
}
