var message;
var flag=0;
var days_in_months = [31,28,31,30,31,30,31,31,30,31,30,31];
var now = new Date(); //get the current date...






//########## Form validation
function validate(f)
{
flag=0;
message="Please fill in all the required details.\n";
message += "\nYou have either missed or incorrectly completed the following fields:\n";

if (((f.elements[4].value== null)||(f.elements[4].value==""))||((isblank(f.elements[4].value))||(f.elements[4].value.length<2)))
{ message += "\n\tTitle"; flag=1; }

if (((f.elements[5].value== null)||(f.elements[5].value==""))||((isblank(f.elements[5].value))||(f.elements[5].value.length<2)))
{ message += "\n\tName"; flag=1; }

if (((f.elements[6].value== null)||(f.elements[6].value=="" ))||((isblank(f.elements[6].value))||(f.elements[6].value.length<2)))
{ message += "\n\tAddress - line 1"; flag=1; }

if (((f.elements[7].value== null)||(f.elements[7].value=="" ))||((isblank(f.elements[7].value))||(f.elements[7].value.length<2)))
{ message += "\n\tAddress - line 2"; flag=1; }

if (((f.elements[10].value== null)||(f.elements[10].value=="" ))||((isblank(f.elements[10].value))||(f.elements[10].value.length<3)))
{ message += "\n\tPostcode"; flag=1; }

if (((f.elements[11].value== null)||(f.elements[11].value=="" ))||((isblank(f.elements[11].value))||(f.elements[11].value.length<3)))
{ message += "\n\tTelephone"; flag=1; }

if (((f.elements[13].value== null)||(f.elements[13].value=="" ))||((isblank(f.elements[13].value))||(f.elements[13].value.length<1)))
{ message += "\n\tVilla ID number"; flag=1; }

var from = is_date_valid(f.elements[16].value,f.elements[17].value,f.elements[18].value,'From');
var to = is_date_valid(f.elements[19].value,f.elements[20].value,f.elements[21].value,'To'); //check both dates for validity

if (from&&to)
{ //only if both dates are valid, proceed to check the following...
	if (!is_date_greater(parseInt(now.getDate()),parseInt(eval(now.getMonth()+1)),parseInt(now.getFullYear()),parseInt(f.elements[16].value),parseInt(f.elements[17].value),parseInt(f.elements[18].value)))
	{ flag=1; message += '\n\tFrom date must be later than today' } //Check that the FROM date is greater than TODAY
	if (!is_date_greater(parseInt(f.elements[16].value),parseInt(f.elements[17].value),parseInt(f.elements[18].value),parseInt(f.elements[19].value),parseInt(f.elements[20].value),parseInt(f.elements[21].value)))
	{ flag=1; message += '\n\tTo date must be later than From date' } //Check that the TO date is greater than the FROM date
}
else { flag=1;} //dates are not both valid...

if (flag==1) { alert(message); return false; } else { return true;} //if are any problems, alert the user.....
}

//########## Check for a valid date (including leap year Feb. days check)
function is_date_valid(day,month,year,name)
{
/*alert('day: ' + day);
alert('month: ' + month);
alert('year: ' + year);
alert('name: ' + name);*/
if ((isNaN(day) || isNaN(month)) || isNaN(year)) { message += '\n\t'+name+' date (numeric dates only)'; return false;} //check that the dates are all numbers...
if (year<now.getFullYear()||year>now.getFullYear()+10) { message += '\n\t'+name+' date (invalid year)'; return false;} //year must be between now and 10 years from now
if (year%4==0) { days_in_months[1]=29;} //if leap year then set feb. days to 29...
if (month<1||month>12) { message += '\n\t'+name+' date (invalid month)'; return false;} //month must be from 1 to 12
if (day>days_in_months[month-1]||day<1) { message += '\n\t'+name+' date (invalid day)'; days_in_months[1]=28; return false;} //day must be less than days in the month in question and greater than zero
days_in_months[1]=28; //reset the feb days value for the next check as the year might be different... same above...
return true;
}

//##########  Checks if date2 is greater than date1, returns TRUE or FALSE
function is_date_greater(day1,month1,year1,day2,month2,year2)
{
if (year2>=year1) { return true;} //year2 is later so return TRUE
if (year2<year1) { return false;} //year2 is earlier so return FALSE

//year is now the same
if (month2>=month1) { return true; } //same year but later month so return TRUE
if (month2<month1) { return false; } //same year but earlier month so return FALSE

//month is now also the same
if (day2>day1) { return true;} //same year, same month but later day so return TRUE
if (day2<day1) { return false;} //same year, same month but earlier day so return FALSE

//day and therefore date is now the same so return FALSE
return false; 
}

//########## Checks whether a field is blank or not
function isblank(s)
{
for (var i=0; i<s.length; i++)
{ var c=s.charAt(i); if ((c != ' ') && (c != '\n') && ( c != '\t')) return false;}
return true;
}

