// JavaScript Document   ENG
function CheckForm() {
	// check if the a car has been selected
	if (document.car_devis.valuecar.value=="") {
		alert("Please choose a type of vehicle.");
		return false;
	}	
	// Check for destination box, which can not be empty
	if (document.car_devis.dest.value=="") {
		alert("Please choose a destination.");
		document.car_devis.dest.focus();
		return false;
	}
	// Check for drop off box, which can not be empty
	if (document.car_devis.dropoff.value=="") {
		alert("Please choose a return location.");
		document.car_devis.dropoff.focus();
		return false;
	}
	// Check for start date format
	if (getDateFromFormat(document.car_devis.stdate.value,"dd/MM/yyyy") == 0) {
		alert("Please check your dates. All the dates must be entered according to the « day/month/year » format using numbers or by choosing the date out of the calendar.");
		document.car_devis.stdate.focus();
		return false;
	} 
	// Check for end date format
	if (getDateFromFormat(document.car_devis.eddate.value,"dd/MM/yyyy") == 0) {
		alert("Please check your dates. All the dates must be entered according to the « day/month/year » format using numbers or by choosing the date out of the calendar.");
		document.car_devis.eddate.focus();
		return false;
	}
	//Détecte si la date de départ est de 4 jours ou plus que la date de la journée même.
	if(compareDates(document.car_devis.stdate.value,"dd/MM/yyyy",fourmoreday,"d/M/yyyy") != 1){
		alert("A delay of 3 working days is required to allow us to confirm your request.");
		return false;
	}
	// Check for end date must greater than begin date
	if (compareDates(document.car_devis.stdate.value,"dd/MM/yyyy",document.car_devis.eddate.value,"dd/MM/yyyy")==1) {
		alert("The departure date must be before the return date.");
		document.car_devis.eddate.focus();
		return false;
	}
	// Start date must greater than min date
	if (compareDates(document.car_devis.stdate.value,"dd/MM/yyyy",lcMinDate,"dd/MM/yyyy") != 1) {
		alert("Only the dates between " + lcMinDate + " and  " + lcMaxDate + " are available. Please make another choice.");
		document.car_devis.eddate.focus();
		return false;
	}
	// End date must less than max date
	if (compareDates(lcMaxDate,"dd/MM/yyyy",document.car_devis.eddate.value,"dd/MM/yyyy") != 1) {
		alert("Only the dates between " + lcMinDate + " and  " + lcMaxDate + " are available. Please make another choice.");
		document.car_devis.eddate.focus();
		return false;
	}
	if ((getDateFromFormat(document.car_devis.eddate.value,"dd/MM/yyyy") - getDateFromFormat(document.car_devis.stdate.value,"dd/MM/yyyy")) > 2592000000) {
		alert("We’re sorry but you cannot book for more than 30 days. Please change your dates.");
		document.car_devis.eddate.focus();
		return false;
	}
	if ((getDateFromFormat(document.car_devis.eddate.value,"dd/MM/yyyy") - getDateFromFormat(document.car_devis.stdate.value,"dd/MM/yyyy")) < 302400000) {
		alert("We’re sorry but the minimal rental duration is 3 days. Please change your dates.");
		document.car_devis.eddate.focus();
		return false;
	}
}

function valide_case(){
	if(document.car_devis.condition.checked!=true){
		alert("You must accept the conditions.");
		return false;
	}
}

function minuscule(o)
{
o.value=o.value.toLowerCase();
}
function majuscule(o){
o.value=o.value.toUpperCase();
}
function valid_nom_prenom(evt)
{
var interdit='&*?!:;,#\'"%$£?²¤§%*()[]{}<>\\|/0123456789';
  return InterditTouches(evt, interdit);
}
function valid_mail(evt)
{
var interdit='àâäãçéèêëìîïòôöõùûüñÀÂÄÃÇÉÈÊËÌÎÏÒÔÖÕÙÛÜÑ¸ &*?!:;,#~\'"^¨%$£?²¤§%*()[]{}<>\\|/`';
  return InterditTouches(evt, interdit);
}
function valid_num(evt)
{
var interdit='àâäãçéèêëìîïòôöõùûüñÀÂÄÃÇÉÈÊËÌÎÏÒÔÖÕÙÛÜÑ¸qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM «»°±@£¢¤¬¦²³¼½¾§¶[]}{~´­¯µ|!"/$%?&*()_+¨^>`:.-^¸<`;,#=\'\\';
  return InterditTouches(evt, interdit);
}
function valid_tel(evt)
{
var interdit='àâäãçéèêëìîïòôöõùûüñÀÂÄÃÇÉÈÊËÌÎÏÒÔÖÕÙÛÜÑ¸qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM«»°±@£¢¤¬¦²³¼½¾§¶}{~´¯µ|!"/$%?&*_¨^>`:^¸<`;,#=\'\\';
  return InterditTouches(evt, interdit);
}
function bSyntaxeEmail(sMail)
{
var re=/^[a-z\d]+((\.|-|_)[a-z\d]+)*@((?![-\d])[a-z\d-]{0,62}[a-z\d]\.){1,4}[a-z]{2,6}$/gi;
return (sMail.match(re)==sMail)&&(sMail.substr(sMail.lastIndexOf("@")).length<=256);
}
function InterditTouches(evt, sInterdit)
{
var keyCode = evt.which ? evt.which : evt.keyCode;
  if (sInterdit.indexOf(String.fromCharCode(keyCode))>=0) return false;
}
function validerform(){
	if(document.car_devis.prenom.value == ""){
		alert("Please enter your first name.");
		document.car_devis.prenom.focus();
		return false;
	}
	if(document.car_devis.prenom.value.search(/[a-zA-Z]{2,}/)==-1){
		alert("Please enter your first name.");
		document.car_devis.prenom.focus();
		return false;
	}
	if(document.car_devis.nom.value == ""){
		alert("Please enter your name.");
		document.car_devis.nom.focus();
		return false;
	}
	if(document.car_devis.nom.value.search(/[a-zA-Z]{2,}/)==-1){
		alert("Please enter your name.");
		document.car_devis.nom.focus();
		return false;
	}
	if(document.car_devis.nbrpersonne.value == ""){
		alert("Please enter the number of persons.");
		document.car_devis.nbrpersonne.focus();
		return false;
	}
	if(document.car_devis.ageConducteur.value == ""){
		alert("Please enter the age of the main driver.");
		document.car_devis.ageConducteur.focus();
		return false;
	}	
	if(document.car_devis.adresse.value == ""){
		alert("Please enter your address.");
		document.car_devis.adresse.focus();
		return false;
	}
	if(document.car_devis.adresse.value.search(/[A-Za-z0-9]{2,}/)==-1){
		alert("Please enter a valid address.");
		document.car_devis.adresse.focus();
		return false;
	}		
	if(document.car_devis.ville.value == ""){
		alert("Please enter your city.");
		document.car_devis.ville.focus();
		return false;
	}
	if(document.car_devis.ville.value.search(/[a-zA-Z]{2,}/)==-1){
		alert("Please enter a valid city.");
		document.car_devis.ville.focus();
		return false;
	}
	if(document.car_devis.codePostal.value == ""){
		alert("Please enter your postal (or Zip) code.");
		document.car_devis.codePostal.focus();
		return false;
	}
	if(document.car_devis.codePostal.value.search(/[A-Za-z0-9]{2,}/)==-1){
		alert("Please enter a valid postal code.");
		document.car_devis.codePostal.focus();
		return false;
	}	
	if(document.car_devis.pays.value == ""){
		alert("Please enter your country.");
		document.car_devis.pays.focus();
		return false;
	}
	if(document.car_devis.pays.value.search(/[a-zA-Z]{2,}/)==-1){
		alert("Please enter a valid country.");
		document.car_devis.pays.focus();
		return false;
	}
	if(document.car_devis.telephone.value == ""){
		alert("Please enter a phone number.");
		document.car_devis.telephone.focus();
		return false;
	}
	if(document.car_devis.email.value == ""){
		alert("Please enter your email address.");
		document.car_devis.email.focus();
		return false;
	}
	else{
		if (!bSyntaxeEmail(document.car_devis.email.value)){
		  alert("Incorrect email address.");
		  document.car_devis.email.focus();
		  return false;
		}
	}
	if(document.car_devis.email2.value == ""){
			alert("Please confirm your email address.");
			document.car_devis.email2.focus();
			return false;
	}
	else{
		if (!bSyntaxeEmail(document.car_devis.email2.value)){
		  alert("Incorrect email address.");
		  document.car_devis.email2.focus();
		  return false;
		}
	}
	if(document.car_devis.email.value!=document.car_devis.email2.value){
		alert("The email addresses are not matching.");
		return false;
	}
	return validate_card();
}
function mod10( cardNumber ) { // LUHN Formula for validation of credit card numbers.
	var ar = new Array( cardNumber.length );
	var i = 0,sum = 0;
	for( i = 0; i < cardNumber.length; ++i ) {
		ar[i] = parseInt(cardNumber.charAt(i));
	}
	for( i = ar.length -2; i >= 0; i-=2 ) { // you have to start from the right, and work back.
		ar[i] *= 2; // every second digit starting with the right most (check digit)
		if( ar[i] > 9 ) ar[i]-=9; // will be doubled, and summed with the skipped digits.
	} // if the double digit is > 9, add those individual digits together 
	for( i = 0; i < ar.length; ++i ) {
		sum += ar[i]; // if the sum is divisible by 10 mod10 succeeds
	}
	return (((sum%10)==0)?true:false); 
}
function expired( month, year ) {
	var now = new Date(); // this function is designed to be Y2K compliant.
	var expiresIn = new Date(year,month,0,0,0); // create an expired on date object with valid thru expiration date
	expiresIn.setMonth(expiresIn.getMonth()); // adjust the month, to first day, hour, minute & second of expired month
	//expiresIn.setMonth(expiresIn.getMonth()+1); // adjust the month, to first day, hour, minute & second of expired month
	if( now.getTime() < expiresIn.getTime() ){
		return false;
	}
	return true; // then we get the miliseconds, and do a long integer comparison
}
function validate_card() {
	name=document.car_devis.nom_detenteur.value;
	cardNumber=document.car_devis.num_carte.value;
	cardMonth=document.car_devis.exp_mois.value;
	cardYear=document.car_devis.exp_annee.value;
	digitcode=document.car_devis.num_verif.value;
	i=0;
	cardType="";
	for(i=0; i<=2; ++i){
		if(document.car_devis.carte_credit[i].checked==true){
			cardType=document.car_devis.carte_credit[i].value;
		}
	}
	if(name==""){
		alert("Please enter the name of the credit card holder.");
		  document.car_devis.nom_detenteur.focus();
		  return false;
	}
	if(document.car_devis.nom_detenteur.value.search(/[a-zA-Z]{2,}/)==-1){
		alert("Please enter the name of the credit card holder.");
		document.car_devis.nom_detenteur.focus();
		return false;
	}	
	
	if( cardNumber.length == 0 ) { //most of these checks are self explanitory
		alert("Please enter a valid card number. \n\n Only use numbers. Do not use any space or special character.");
		document.car_devis.num_carte.focus();
		return false; 
	}
	for( var i = 0; i < cardNumber.length; ++i ) { // make sure the number is all digits.. (by design)
	var c = cardNumber.charAt(i);
	
	
		if( c < '0' || c > '9' ) {
			alert("Please enter a valid card number. \n\n Only use numbers. Do not use any space or special character.");
			document.car_devis.num_carte.focus();
			return false;
		}
	}
	var length = cardNumber.length; //perform card specific length and prefix tests
	switch( cardType ) {
	case 'American Express':
		if( length != 15 ) {
			alert("Please enter a valid American Express number.");
			document.car_devis.num_carte.focus();
			return false;
		}
		var prefix = parseInt( cardNumber.substring(0,2));
		if( prefix != 34 && prefix != 37 ) {
			alert("Please enter a valid American Express number.");
			document.car_devis.num_carte.focus();
			return false;
		}
		break;
	case 'Master Card':
		if( length != 16 ) {
			alert("Please enter a valid Master card number.");
			document.car_devis.num_carte.focus();
			return false;
		}
		var prefix = parseInt( cardNumber.substring(0,2));
		if( prefix < 51 || prefix > 55) {
			alert("Please enter a valid Master card number.");
			document.car_devis.num_carte.focus();
			return false;
		}
		break;
	case 'Visa':
		if( length != 16 && length != 13 ) {
			alert("Please enter a valid Visa number.");
			document.car_devis.num_carte.focus();
			return false;
		}
		var prefix = parseInt( cardNumber.substring(0,1));
		if( prefix != 4 ) {
			alert("Please enter a valid Visa number.");
			document.car_devis.num_carte.focus();
			return false;
		}
		break;
	default:
		if( cardType == "" ) {
			alert("Please select a type of card.");
			return false;
		}
		break;
	}
	if( !mod10( cardNumber ) ) { // run the check digit algorithm
		alert("We’re sorry but the card number you entered is invalid.");
		document.car_devis.num_carte.focus();
		return false;
	}
	if( expired( cardMonth, cardYear ) ) { // check if entered date is already expired.
		alert("We’re sorry but the expiration date you entered informs us that your card is not valid.");
		document.car_devis.exp_mois.focus();
		return false;
	}
	if(digitcode.length!=3 && digitcode.length!=4){
		//alert(digitcode.length);
		alert("Please enter a valid verification number.");
		document.car_devis.num_verif.focus();
		return false;
	}
	return true; // at this point card has not been proven to be invalid
}
