//-----------------------------Global variables 

var email_err_exp = ""
var email = ""



//-----------------------------Gets values from form field 

function GetValue(el_type,el_name){
	var elNodes = document.getElementsByTagName(el_type)
		var max = elNodes.length 
       	for(var i = 0;i < max;i++){ 
       		var elObj = elNodes.item(i);  
          		if (elObj.name == el_name){
          	  		var value = elObj.value 
            		return value;
            	}
        		
        } 
}
	 
//----------------------------Checks if mail is valid

function IsValidEmail (emailStr,eng) { 
	
	var checkTLD=0; 
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/; 
	var emailPat=/^(.+)@(.+)$/; 
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]"; 
	var validChars="\[^\\s" + specialChars + "\]"; 
	var quotedUser="(\"[^\"]*\")"; 
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/; 
	var atom=validChars + '+'; 
	var word="(" + atom + "|" + quotedUser + ")"; 
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$"); 
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$"); 
	var matchArray=emailStr.match(emailPat); 
	if (matchArray==null) { 
		email_err_exp = ((eng)?("The Email Address Is Invalid \n"):("Indirizzo email errato \n")); 
		return false; 
	} 
	else return true;
	
	var user=matchArray[1]; 
	var domain=matchArray[2]; 
	for (i=0; i<user.length; i++) { 
		if (user.charCodeAt(i)>127) { 
		email_err_exp = ((eng)?("Email error: username contains invalid characters \n"):("Email errata: l'username contiene caratteri non validi \n")); 
			return false; 
		} 
	} 
	for (i=0; i<domain.length; i++) { 
		if (domain.charCodeAt(i)>127) { 
			email_err_exp = ((eng)?("Email error: domain name contains invalid characters \n"):("Email errata: il dominio contiene caratteri non validi \n"));"The email domain name contains invalid characters \n"; 
			return false; 
		} 
	} 
	if (user.match(userPat)==null) { 
		err_msg = ((eng)?("Email error: username contains invalid characters \n"):("Email errata: l'username contiene caratteri non validi \n"));  
		return false; 
	} 
	var IPArray=domain.match(ipDomainPat); 
	if (IPArray!=null) { 
		for (var i=1;i<=4;i++) { 
			if (IPArray[i]>255) { 
				email_err_exp = ((eng)?("Email error: the destination IP address is invalid \n"):("Email errata: indirizzo ip di destinazione non valido \n"));
				return false; 
			} 
		} 
		return true; 
		email_err_exp = '';
	} 
	var atomPat=new RegExp("^" + atom + "$"); 
	var domArr=domain.split("."); 
	var len=domArr.length; 
	for (i=0;i<len;i++) { 
		if (domArr[i].search(atomPat)==-1) { 
			email_err_exp = "The Domain Name Is Invalid \n"; 
			return false; 
		} 
	} 
	if (checkTLD && domArr[domArr.length-1].length!=2 && 
		domArr[domArr.length-1].search(knownDomsPat)==-1) { 
			email_err_exp = ((eng)?("Email error: The Domain Name Extension Is Invalid \n"):("Email errata: nome dell'estenzione del dominio non valido \n"));
			return false; 
	} 
	if (len<2) { 
		email_err_exp = ((eng)?("Email error: The Address Is Missing A Hostname \n"):("Email errata: indirizzo privo di Hostname \n"));
		return false; 
	} 
} 
	
//------------------------------Checks if phone-number is valid

function IsValidNumber(num){
	var i;
    for (i = 0; i < num.length; i++){   
        
        var c = num.charAt(i);
        if (((c < "0") || (c > "9")) && (c != "/") && (c != "-") && (c != " ") ) {
        	return false;
    	}
    
    }
    return true;
}


//------------------------------Checks if date is valid

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function IsValidDate(strMonth, strDay, strYear){
	var daysInMonth = DaysArray(12)
	
	
	var month=parseInt(strMonth);
	var day=parseInt(strDay);
	var year=parseInt(strYear);
	
	var currentTime = new Date();
	var currentTimeDays = currentTime.getDate() +  (currentTime.getMonth() * 31) + (currentTime.getFullYear() * 365);
	var InputTimeDays = day +  (month * 31) + (year * 365);

	if (strMonth.length<1 || month<1 || month>12){
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		return false
	}
	if (strYear.length != 4 || year==0) {
		return false
	}
	if (strYear.length != 4 || year==0) {
		return false
	}
	if (strYear.length != 4 || year==0) {
		return false
	}
    if ( (InputTimeDays < currentTimeDays) || (InputTimeDays > (currentTimeDays + 365)) ){
    	return false
    }    
return true;

}

//---------------------------------Checks if time il valid

function IsValidTime(hour, minute){
	if (hour && minute) { 
	 	if  ( isNaN(hour) || isNaN(minute) || (hour > 24) || (minute > 59) ) {
			return false;
	 		}
	 	else {
	 		return true;
		}
	}
}


//cheks form fields and create mail body	

function CreateMailBody(eng){ 

	var name          	= GetValue('input','first_name');  		 	
  	var surname        	= GetValue('input','last_name');
  	var telephone	   	= GetValue('input','telephone');
  	var email			= GetValue('input','reply_email');
  	
  	var arrival_month  	= GetValue('input','arrival_month');
   	var arrival_day    	= GetValue('input','arrival_day'); 
  	var arrival_year   	= GetValue('input','arrival_year'); 
  	var arrival_hour   	= GetValue('input','arrival_hour');
  	var arrival_minute 	= GetValue('input','arrival_minute');
   	var arrival_date   	= arrival_month + '/' + arrival_day  + '/' + arrival_year 
   	
   	var leaving_month  	= GetValue('input','leaving_month');
  	var leaving_day    	= GetValue('input','leaving_day'); 
  	var leaving_year   	= GetValue('input','leaving_year'); 
    var leaving_hour   	= GetValue('input','leaving_hour');
  	var leaving_minute 	= GetValue('input','leaving_minute');
    var leaving_date   	= leaving_month + '/' + leaving_day  + '/' + leaving_year 
    
    var apartment     	= GetValue('select','apartment');
    var persons_number 	= GetValue('select','persons_number');
    
  		 	
    //Compose error messages
    
    var empty_fields 	= new Array();	        
	var error_msg 		= new Array();
	
	if (!name) 		{empty_fields[1] = ( (eng)?('Name \n'):('Nome \n') )};
	if (!surname) 	{empty_fields[2] = ( (eng)?('Surname \n'):('Cognome \n') )};
	
	if (!telephone){
		empty_fields[3] = (eng)?('Telephone \n'):('Telefono \n') ;		
	}
	else {
		if (!IsValidNumber(telephone)){
		error_msg[1] = ( (eng)?('Wrong phone number \n'):('Numero di telefono errato \n') );
		}
	}

	if (!email){
		empty_fields[4] = 'email \n';		
	}
	else {
		if (!IsValidEmail(email,eng)){
		error_msg[2] = email_err_exp;
		}
	}
	
	if (!arrival_month && !arrival_day && !arrival_year){
		empty_fields[5] = ( (eng)?('Arrival date \n'):('Data di arrivo  \n') );		
		}
	else {
		if (!IsValidDate(arrival_month, arrival_day, arrival_year) ){
			error_msg[3] = ( (eng)?('Wrong arrival date \n'):('Data di arrivo errata \n') );	
		}
	}
   
    if (!arrival_hour && !arrival_minute){
		empty_fields[6] = ( (eng)?('Arrival time \n'):('Orario di arrivo\n') );		
		}
	else {
		if (!IsValidTime(arrival_hour, arrival_minute)){
			error_msg[4] = ( (eng)?('Wrong arrival time \n'):('Orario di arrivo errato \n') );	
		}
	}
    
    if (!leaving_month && !leaving_day &&! leaving_year){
		empty_fields[7] = ( (eng)?('Leaving date \n'):('Data di partenza  \n') );		
	}
	else {
		if (!IsValidDate(leaving_month, leaving_day, leaving_year) ){
		error_msg[5] = ( (eng)?('Wrong leaving date \n'):('Data di partenza errata \n') );
		}
	} 

	if (!leaving_hour && !leaving_minute){
		empty_fields[8] = ((eng)?('Leaving time \n'):('Orario di partenza \n'));		
		}
	else {
		if (!IsValidTime(leaving_hour, leaving_minute)){
			error_msg[6] = ((eng)?('Wrong leaving time \n'):('Orario di partenza errato \n'));		
		}
	}
	
    if (empty_fields.join() != ''){ 
   		error_msg[7] = ((eng)?('Field listed here cannot left blank \n') : ('I seguenti campi devono essere valorizzati: \n') ) + empty_fields.join("");
	};

	if ((error_msg.join("")) != '') {
		alert(((eng)?('WARNING! \nForm contains following errors: \n'):('ATTENZIONE ! \n Sono stati rilevati i seguenti errori \n')) + error_msg.join(""));		
		}  
	else {

		document.booking_form.Da.value  								=	name + ' ' + surname; 
  		document.booking_form.email.value    							=	email;
  		document.booking_form.Telefono.value 							=  	telephone;
  		document.booking_form.Arrivo_previsto_in_data.value 			= 	arrival_date; 
  		document.booking_form.Orario_arrivo.value 						= 	arrival_hour + ':' + arrival_minute; 
  		document.booking_form.Partenza_prevista_in_data.value 			= 	leaving_date;
  		document.booking_form.Orario_partenza.value 					=	leaving_hour + ':' + leaving_minute;
  		document.booking_form.Tipologia_appartamento_richiesta.value  	= 	apartment;
  		document.booking_form.Numero_di_persone.value					=  	persons_number; 
  		
  		document.booking_form.submit()    
	    }
}
	
