var astrMonthName = new Array("Unknown","January","February","March","April","May","June","July","August","September","October","November","December");
var astrDayName = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");
var TIME_UNITS_PER_DAY = 86400000;

	var day, mon, hrs, year;
	var grDay, grMon;
	
	UTCToday = new Date();
	
	weekDay
	mon = UTCToday.getUTCMonth();
	day = UTCToday.getUTCDate();
	hrs = UTCToday.getUTCHours();
	mins = UTCToday.getUTCMinutes();
	secs = UTCToday.getUTCSeconds();
	msecs = UTCToday.getUTCMilliseconds();
	year = UTCToday.getUTCFullYear();
	currentTimeZoneOffsetInHours = UTCToday.getTimezoneOffset()/60;

	grHrs = hrs + Math.abs(currentTimeZoneOffsetInHours);
	grDay = day;
	grMon = mon;

	if (hrs == 21 || hrs == 22 || hrs == 23) {
		grDay = day + 1;
		if (grDay > 31) { // month change
			grDay = 1;
			grMon = mon + 1;
			if (grMon > 12) { // year change
				grMon = 1;
				year = year + 1;
			}
		}
	}

var TodayDate = new Date(year,grMon,grDay,grHrs,mins,secs,msecs);
var weekDay = astrDayName[TodayDate.getDay()];

/*
   Utility Routines
*/

// This checks to see if the browser is supported.
// We omit Netscape 2.0x since the "select" object's "options" array properties don't work.

function blnBrowserIsSupported() {
	// Get the version of the browser
	version = parseFloat(navigator.appVersion);
	if ( ( version >= 2.0 ) && ( version < 2.1 ) && ( navigator.appName.indexOf( "Netscape" ) != -1 ) ) {
		return false;
	   } else {
		return true;
	}
}


function intDaysInMonth(intMonth, intYear) {
	// Assume 31
	var intDays=31

	// expect Feb. (of course)
	if (intMonth==2) {
		if (blnIsLeapYear(intYear)) intDays=29; else intDays=28;
	   } else {
		if (intMonth==4 || intMonth==6 || intMonth==9 || intMonth==11) {
			intDays=30;
		}
	}
	return intDays;
}


// Return true if year is a leap year (good till 2100)

function blnIsLeapYear(intYear) {
	return intYear%4 == 0 ? true : false;
}


// Get the integer value of the passed selections index

function intSelIndex(selChoice) {
	return selChoice.selectedIndex;
}


// Set a selection to a specific value, return true if successful.

function blnSelIndexSet(selChoice, intValue) {
	if (intValue >= 0 && intValue < selChoice.length) {
	   selChoice.selectedIndex = intValue;
	   return true;
	  } else {
	   return false;
      }
	return false;
}


// Get the integer value of the passed selection

function intSelValue(selChoice) {
	return parseInt(strSelValue(selChoice));
}


// Get the string value of the passed selection

function strSelValue(selChoice) {
	return selChoice.options[selChoice.selectedIndex].value;
}


// Set a selection to a specific value, return true if successful.

function blnSelValueSet(selChoice, intValue) {
var intIndex;
	var intOptionCount = selChoice.length;

	for (intIndex = 0 ; intIndex < intOptionCount ; intIndex++) {
	   if (parseInt(selChoice.options[intIndex].value) == intValue) {
		selChoice.selectedIndex = intIndex;
		return true;
	   }
	}
	return false;
}


/*
   Process date changes
*/

// This changes the day of the month to the last day if it is past the end.

function blnDateFixDay(selMonth, selDay, selYear) {
	var intMonth = intSelIndex(selMonth) + 1;
	var intDay = intSelValue(selDay);
	var intYear = intSelValue(selYear);

	var intMonthDays = intDaysInMonth(intMonth, intYear);

	if (intDay > intMonthDays) {
	   blnSelValueSet(selDay, intMonthDays);
	   return true;
	 } else {
	   return false;
	}
}


/*
   Calendar Creation/Updates
*/

//opens a new window for the calendar and fill it in
function CreateCalendar(selMonth, selDay, selYear, strInOut) {
	if (!blnBrowserIsSupported()) {
		alert("Your browser appears to be outdated and does not support this feature.")
 		return;
	}
	if (navigator.appVersion.indexOf("Mac",0) != -1) {
	   winCalendar = window.open("","Calendar","width=280,height=410,resizable=yes,scrollbars=no");
	  } else {
	   winCalendar = window.open("","Calendar","width=280,height=410,resizable=yes,scrollbars=no");
  	}
	GenerateCalendar(winCalendar,intSelValue(selYear),intSelIndex(selMonth)+1,strInOut)
	winCalendar.focus();
}

//generates the meat of the calendar
function GenerateCalendar(winCalendar, intYear, intMonth, strInOut) {
    
	dtmCurrentDate = TodayDate;
	var  myMonth = dtmCurrentDate.getMonth() + 1;
	var myDay = dtmCurrentDate.getDate();
	var myYear = dtmCurrentDate.getFullYear();
	
	
	// Begin table for calendar
	var strHTML = "<html><head><title>Calendar</title></head><body bgcolor=#FFFFFF text=#CCCCCC link=#CC6600 vlink=#CC6600 alink=#FF0000 topmargin=5 marginheight=5 onLoad=\"self.moveTo(0, 0)\">"
	strHTML += "<table border=0 cellspacing=0 cellpadding=4 width=250>"
	strHTML += "<tr valign=top>"

	// Header
	strHTML +="<td colspan=7 align=center bgcolor=#F2F2F2>"
	strHTML +="<b><font face='Verdana, Arial,sans-serif' size='2' color='#666666'>" + astrMonthName[intMonth] + "&nbsp;&nbsp;&nbsp;" + intYear + "</font></b></td></tr>"

	// Weekday labels
	strHTML +="</tr><tr align=center>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2' color='#666666'><b>S</b></font></td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b>M</b></font></td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b>T</b></font></td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b>W</b></font></td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b>T</b></font></td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b>F</b></font></td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2' color='#666666'><b>S</b></font></td>"
	strHTML +="</tr>"

	// Calendar lines
	var dtmFirstOfTheMonth = new Date(intYear,intMonth-1,1);
	
	var  cMonth = dtmFirstOfTheMonth.getMonth() + 1;
	var cDay = dtmFirstOfTheMonth.getDate();
	var cYear = dtmFirstOfTheMonth.getFullYear();
	
	var intDayOfMonth = 1 - dtmFirstOfTheMonth.getDay();

	var intLastDayOfMonth = intDaysInMonth(intMonth, intYear);

	while (intDayOfMonth <= intLastDayOfMonth) {

	   strHTML += "<tr>";

	   for (intDayOfWeek = 0  ;  intDayOfWeek < 7  ;  intDayOfWeek++) {
		if (intDayOfMonth < 1  ||  intDayOfMonth > intLastDayOfMonth) {
		   // 'empty' boxes
		   strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'>&nbsp;</font></td>";
		 } else {
		   // enter date number
		  if (myMonth==cMonth && myDay==intDayOfMonth && myYear==cYear) {
		   strHTML +="<td align=center bgcolor=#FADFC5><font face='Verdana, Arial,sans-serif' size='2'><a href='JavaScript:self.close();opener.SetCalendar"+strInOut+"("+intMonth+","+intDayOfMonth+","+intYear+")'> "+(intDayOfMonth)+"</a></font></td>";
		   }
		   else {
		   strHTML +="<td align=center><font face='Verdana, Arial,sans-serif' size='2'><a href='JavaScript:self.close();opener.SetCalendar"+strInOut+"("+intMonth+","+intDayOfMonth+","+intYear+")'> "+(intDayOfMonth)+"</a></font></td>";
		   }
		}
		intDayOfMonth++;
	   }

	   strHTML +="</tr>";
	}

	//separator line
	strHTML +="<tr><td colspan=7 align=center width=250><hr color=#666666 size=1 noshade></td></tr>"

	// Month selection
	strHTML +="<tr align=center>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",1,\""+strInOut+"\")'>Jan</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",2,\""+strInOut+"\")'>Feb</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",3,\""+strInOut+"\")'>Mar</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",4,\""+strInOut+"\")'>Apr</a></b></font></td>"
	strHTML +="</tr>"

	strHTML +="<tr align=center>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",5,\""+strInOut+"\")'>May</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",6,\""+strInOut+"\")'>Jun</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",7,\""+strInOut+"\")'>Jul</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",8,\""+strInOut+"\")'>Aug</a></b></font></td>"
	strHTML +="</tr>"

	strHTML +="<tr align=center>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",9,\""+strInOut+"\")'>Sep</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",10,\""+strInOut+"\")'>Oct</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",11,\""+strInOut+"\")'>Nov</a></b></font></td>"
	strHTML +="<td>&nbsp;</td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+intYear+",12,\""+strInOut+"\")'>Dec</a></b></font></td>"
	strHTML +="</tr>"

	// Separator Line
	strHTML +="<tr><td colspan=7 align=center width=250><hr color=#666666 size=1 noshade></td></tr>"

	// Year Selection
//	var intCurrentYear = TodayDate.getFullYear();
	var intCurrentYear = intYear;


	strHTML +="<tr align=center>"
	strHTML +="<td colspan=3><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+(intCurrentYear-1)+","+(intMonth)+",\""+strInOut+"\")'>"+(intCurrentYear-1)+"</a></b></font></td>"
	strHTML +="<td><font face='Verdana, Arial,sans-serif' size='2'>&nbsp;</font></td>"
	strHTML +="<td colspan=3><font face='Verdana, Arial,sans-serif' size='2'><b><a href='javascript:opener.GenerateCalendar(self,"+(intCurrentYear+1)+","+(intMonth)+",\""+strInOut+"\")'>"+(intCurrentYear+1)+"</a></b></font></td>"
	strHTML +="</tr>"

	strHTML +="</table><div align=\"center\"><a href=\"javascript:window.close()\">Close Window</a></div></body></html>"

	// Write the results
	winCalendar.document.open()
	winCalendar.document.write(strHTML);
	winCalendar.document.close()	
}


// Sets the input calendar
function SetCalendarIn(intMonth,intDay,intYear) {
	blnSelIndexSet(document.ReservationForm.ArrivalMonth,intMonth-1);
	blnSelValueSet(document.ReservationForm.ArrivalDay,intDay);
	blnSelValueSet(document.ReservationForm.ArrivalYear,intYear);
	InDateChange(document.ReservationForm.ArrivalMonth, document.ReservationForm.ArrivalDay, document.ReservationForm.ArrivalYear, 
			 document.ReservationForm.DepartureMonth, document.ReservationForm.DepartureDay, document.ReservationForm.DepartureYear);
}


// Sets the output calendar
function SetCalendarOut(intMonth,intDay,intYear) {
	blnSelIndexSet(document.ReservationForm.DepartureMonth,intMonth-1);
	blnSelValueSet(document.ReservationForm.DepartureDay,intDay);
	blnSelValueSet(document.ReservationForm.DepartureYear,intYear);
	OutDateChange(document.ReservationForm.ArrivalMonth, document.ReservationForm.ArrivalDay, document.ReservationForm.ArrivalYear, 
			  document.ReservationForm.DepartureMonth, document.ReservationForm.DepartureDay, document.ReservationForm.DepartureYear);

}

var TIME_UNITS_PER_DAY = 86400000;
	
    //Form Validator
    function validateCheckReservationForm(frm) {
      var country = 1;
      
      // Get the current date without any time portion
      dtmCurrentDate = TodayDate;
	var intMonth = dtmCurrentDate.getMonth() + 1;
	var intDay = dtmCurrentDate.getDate();
	var intYear = dtmCurrentDate.getFullYear();
      dtmCurrentDate = new Date(intYear, intMonth-1, intDay);
      // Get Arrival Date
	intMonth = intSelIndex(frm.ArrivalMonth) + 1;
	intDay = intSelValue(frm.ArrivalDay);
	intYear = intSelValue(frm.ArrivalYear);
	var dtmInDate = new Date(intYear,intMonth-1,intDay);
      // Get Departure Date
	intMonth = intSelIndex(frm.DepartureMonth) + 1;
	intDay = intSelValue(frm.DepartureDay);
	intYear = intSelValue(frm.DepartureYear);
	var dtmOutDate = new Date(intYear,intMonth-1,intDay);
      // Check for Arrival before today
      if (dtmInDate.getTime() <= dtmCurrentDate.getTime()) {
        alert("You may not request a reservation for a date that has already occurred.");
        return false;
      }
      // Check for a Departure date that is not later than the arrival date
      if (dtmInDate.getTime() >= dtmOutDate.getTime()) {
        alert("The Departure Date must me greater than the Arrival Date.");
        return false;
      }
      // Check for a Last Minute Arrival
//      if (dtmInDate.getTime() < (dtmCurrentDate.getTime() + 3*TIME_UNITS_PER_DAY)) {
//        alert("This is a last minute reservation request.\nYou may not request a reservation for a date less than 3 days ahead from the current date.");
//        return false;
//      }
      // Check for a stay that is less than 3 days.
//      if (Math.round((dtmOutDate.getTime() - dtmInDate.getTime()) / TIME_UNITS_PER_DAY) < 3) {
//        alert("We are sorry but we don't process one or two nights reservation requests.");
//        return false;
//      }
      if (!form_ok(frm)) {
        return false;
      }

      // Get Arrival Date
      intMonth = intSelIndex(frm.ArrivalMonth) + 1;
      intDay = intSelValue(frm.ArrivalDay);
      intYear = intSelValue(frm.ArrivalYear);
      var ardate = astrMonthName[intMonth]+" "+intDay+", "+intYear;
      // Populate hidden fields
      frm.Arrival_Date.value=ardate;
      // Get Departure Date
      intMonth = intSelIndex(frm.DepartureMonth)+1;
      intDay = intSelValue(frm.DepartureDay);
      intYear = intSelValue(frm.DepartureYear);
      var depdate = astrMonthName[intMonth]+" "+intDay+", "+intYear;
      // Populate hidden fields
      frm.Departure_Date.value=depdate;

	return true;
    	}


    
    function blnBrowserIsSupported() {
    	// Get the version of the browser
    	version = parseFloat(navigator.appVersion);
    	if ( ( version >= 2.0 ) && ( version < 2.1 ) && ( navigator.appName.indexOf( "Netscape" ) != -1 ) ) {
    		return false;
    	   } else {
    		return true;
    	}
    }
    
    
    function intDaysInMonth(intMonth, intYear) {
    
    	// Assume 31
    	var intDays=31
    
    	// expect Feb. (of course)
    	if (intMonth==2) {
    		if (blnIsLeapYear(intYear)) intDays=29; else intDays=28;
    	   } else {
    		if (intMonth==4 || intMonth==6 || intMonth==9 || intMonth==11) {
    			intDays=30;
    		}
    	}
    	return intDays;
    }
    
    
    // Return true if year is a leap year (good till 2100)
    
    function blnIsLeapYear(intYear) {
    	return intYear%4 == 0 ? true : false;
    }
    
    
    // Get the integer value of the passed selections index
    
    function intSelIndex(selChoice) {
    	return selChoice.selectedIndex;
    }
    
    
    // Set a selection to a specific value, return true if successful.
    
    function blnSelIndexSet(selChoice, intValue) {
    	if (intValue >= 0 && intValue < selChoice.length) {
    	   selChoice.selectedIndex = intValue;
    	   return true;
    	  } else {
    	   return false;
          }
    	return false;
    }
    
    
    // Get the integer value of the passed selection
    
    function intSelValue(selChoice) {
    	return parseInt(strSelValue(selChoice));
    }
    
    
    // Get the string value of the passed selection
    
    function strSelValue(selChoice) {
    	return selChoice.options[selChoice.selectedIndex].value;
    }
    
    
    // Set a selection to a specific value, return true if successful.
    
    function blnSelValueSet(selChoice, intValue) {
    
    var intIndex;
    
    	var intOptionCount = selChoice.length;
    
    	for (intIndex = 0 ; intIndex < intOptionCount ; intIndex++) {
    	   if (parseInt(selChoice.options[intIndex].value) == intValue) {
    		selChoice.selectedIndex = intIndex;
    		return true;
    	   }
    	}
    	return false;
    }
    
    
    /*
       Process date changes
    */
     
    // This changes the day of the month to the last day if it is past the end.
    
    function blnDateFixDay(selMonth, selDay, selYear) {
    
    	var intMonth = intSelIndex(selMonth) + 1;
    	var intDay = intSelValue(selDay);
    	var intYear = intSelValue(selYear);
    
    	var intMonthDays = intDaysInMonth(intMonth, intYear);
    
    	if (intDay > intMonthDays) {
    	   blnSelValueSet(selDay, intMonthDays);
    	   return true;
    	 } else {
    	   return false;
    	}
    }
        
   
    
    function InDateChange(selInMonth, selInDay, selInYear, selOutMonth, selOutDay, selOutYear) {

    	blnDateFixDay(selInMonth, selInDay, selInYear);
    
      	theDate = TodayDate;
    
    	var currentMonth = (theDate.getMonth()) + 1;
      	var currentDay = theDate.getDate();
      	var currentYear = theDate.getYear();

    	// Get numeric dates
    	var intInMonth = intSelIndex(selInMonth) + 1;
     	var intInDay = intSelValue(selInDay);
      	var intInYear = intSelValue(selInYear);
    	var intOutMonth = intSelIndex(selOutMonth) + 1;
    	var intOutDay = intSelValue(selOutDay);
    	var intOutYear = intSelValue(selOutYear);
       
    	// Make sure OutDate > InDate
    	var theDate = TodayDate;
    	var dtmInDate = new Date(intInYear,intInMonth-1,intInDay);
    	var dtmOutDate = new Date(intOutYear,intOutMonth-1,intOutDay);
    	var dtmCurDate = new Date(currentYear,currentMonth-1,currentDay);
       
    	if (dtmInDate.getTime() >= dtmOutDate.getTime()) {
    	   dtmOutDate.setTime(dtmInDate.getTime()+TIME_UNITS_PER_DAY+(TIME_UNITS_PER_DAY/2));
    	   intOutMonth = dtmOutDate.getMonth() + 1;
    	   intOutDay = dtmOutDate.getDate();
    	   intOutYear = dtmOutDate.getFullYear();
    	   blnSelIndexSet(selOutMonth, intOutMonth-1);
    	   blnSelValueSet(selOutDay, intOutDay);
    	   if (! blnSelValueSet(selOutYear, intOutYear)) {
    		blnSelIndexSet(selOutMonth, intInMonth-1);
    		blnSelValueSet(selOutDay, intInDay);
    		blnSelValueSet(selOutYear, intInYear);
    	   }
    	}
    }
    
    
    function OutDateChange(selInMonth, selInDay, selInYear, selOutMonth, selOutDay, selOutYear) {
    	blnDateFixDay(selOutMonth, selOutDay, selOutYear);
}


function set_dates() {
    dtmCurrentDate = TodayDate;
	var  myMonth = dtmCurrentDate.getMonth() + 1;
	var myDay = dtmCurrentDate.getDate();
	var myYear = dtmCurrentDate.getFullYear();

     document.ReservationForm.ArrivalMonth.selectedIndex = myMonth-1;
     document.ReservationForm.ArrivalDay.selectedIndex = myDay-1;
     document.ReservationForm.ArrivalYear.selectedIndex = myYear-2003;
	 
    InDateChange( document.ReservationForm.ArrivalMonth, document.ReservationForm.ArrivalDay, document.ReservationForm.ArrivalYear, document.ReservationForm.DepartureMonth, document.ReservationForm.DepartureDay, document.ReservationForm.DepartureYear)     
}

function is_email(item)
{
        var mhkos = item.value.length
        var papaki = item.value.indexOf("@")
        var teleia = item.value.lastIndexOf(".")

        if (mhkos>4 && papaki>0 && teleia>papaki+1)
        {
                var space = item.value.indexOf(" ");
                if (space >= 0) {
                    alert("Your email contains white spaces. Please remove them and resubmit the form");
                    return false
                }
                return true
        }

        alert("Please fill in a proper e-mail so we can contact you");
        return false
}

function is_not_empty(item, msg)
{
        if (item.value.length > 0)
                return true
        else
        {
                alert("Please fill in " + msg);
                return false
        }
}


function is_selected(item, msg) {
        if (item.selectedIndex == 0) {
                alert(msg)
                return false
        }
		
		return true;
}

function check_persons(f) {
        if (f.Adults.value == "" && f.Children.value == "" && f.Infants.value == "")
        {
                alert("Please enter the number of persons")
                return false;
        }
        return true;
}

function form_ok(f)
{
 if (			is_selected(f.Accommodation_Type, "Please select the type of accommodation") &&
              check_persons(f) &&
              is_not_empty(f.Name, "your name") &&
              is_email(f.email)) {
              	 return true;
 }
 else 
	 return false;
}
