// MESSAGES
var lc_JS_EnterEmail = "";
var lc_JS_EnterValidEmail  = "";
var lc_JS_EnterPassword  = "";
var lc_JS_EnterValidPassword  = "";
var lc_JS_EnterFullName = ""
var lc_JS_EnterFirstName  = "";
var lc_JS_EnterLastName  = "";
var lc_JS_EnterPhone = "";
var lc_JS_WrongConfirmPassword  = "";
var lc_JS_DateFormat  = "";
var lc_JS_EnterValidMonth  = "";
var lc_JS_EnterValidDay  = "";
var lc_JS_EnterFourDigitYear  = "";
var lc_JS_And = "";
var lc_JS_EnterValidDate  = "";
var lc_JS_OutBeforeIn  = "";
var lc_JS_InBeforeToday = "";
var lc_JS_NotAllRoomsSelected = "";
var lc_JS_NotSmokingPreferenceSelected = "";
var lc_JS_NotBedPreferenceSelected = "";
var lc_JS_AgreeWithTerms = "";

// Debug
//var base_url = "www.sirios-village.local/reservations";

// Online
var base_url = "www.siriosvillage.gr/reservations";

var id_counter=0;

var NSHotel = function()
{
	this.Container;
	this.RoomsCount;
	this.CheckIn;
	this.CheckOut;
	this.GuestsString = "empty";
	this.RoomTypeBoards = "empty";
	this.CustomerId;
	this.Lang;
	this.Today;
} 

NSHotel.prototype.LoadLangVariables = function()
{
	head = document.getElementsByTagName("head").item(0);
	script = document.createElement("script");
	script.id = "tsouki_" + id_counter;
	id_counter++;
	script.src = "http://" + base_url + "/LocaleVariables.asp?lang="+ this.Lang;
	script.type = "text/javascript";
	script.defer = true;			
	void(head.appendChild(script));	
}

NSHotel.prototype.SetLang = function(newValue)
{
	this.Lang = newValue;
}	

NSHotel.prototype.SetCustomerId = function(newValue)
{
	this.CustomerId = newValue;
}	

NSHotel.prototype.SetRoomTypeBoards = function(newValue)
{
	this.RoomTypeBoards = newValue;
}	

NSHotel.prototype.SetGuestsString = function(newValue)
{
	this.GuestsString = newValue;
}	

NSHotel.prototype.SetContainer = function(newValue)
{
	this.Container = newValue;
}	

NSHotel.prototype.SetCheckIn = function(newValue)
{
	this.CheckIn = newValue;
}	

NSHotel.prototype.SetToday = function(newValue)
{
	this.Today = newValue;
}	

NSHotel.prototype.SetCheckOut = function(newValue)
{
	this.CheckOut = newValue;
}	

NSHotel.prototype.SetRoomsCount = function(newValue)
{
	this.RoomsCount = parseInt(newValue);
}	

function ValidateDates()
{
	var check_in = document.getElementById("check_in").value;
	var today = document.getElementById("today").value; 	
	var check_out = document.getElementById("check_out").value;
	
	if(isDate(check_in))
	{				
		if(isDate(check_out))
		{
			if(dateDiff("d",check_in,check_out)>0)
			{
				if(dateDiff("d",today,check_in)>=0)
				{
					return true;
				}
				else
				{
					alert(lc_JS_InBeforeToday);	
					return false;
				}
			}
			else
			{
				alert(lc_JS_OutBeforeIn);	
				return false;		
			}
		}
		else
		{
			return false;
		}
	}
	else
	{
		return false;
	}
}

function ValidateDatesCapacity()
{	
	if(ValidateDates())
	{
		CheckCapacity();
	}	
}

function CheckCapacity()
{
	var srcString = "nothing=nothing";
	var rooms_count = parseInt(document.getElementById("rooms_count").value);
	srcString += "&rooms_count=" + rooms_count;
	for(var k=1;k<=rooms_count;k++)
	{
		srcString += "&adults_" + k + "=" + document.getElementById("adults_" + k).value;
		srcString += "&children_" + k + "=" + document.getElementById("children_" + k).value;
	}
	head = document.getElementsByTagName("head").item(0);
	script = document.createElement("script");
	script.id = "tsouki_" + id_counter;
	id_counter++;
	script.src = "http://" + base_url + "/CheckCapacity.asp?" + srcString;
	script.type = "text/javascript";
	script.defer = true;			
	void(head.appendChild(script));	
}

function AllRoomsChecked(frm_id)
{
	var frm = document.getElementById(frm_id);
	var sum_checked = 0;
	var rooms_count = parseInt(frm.rooms_count.value)
	var temp_el;	
	for(var rc=1;rc <= rooms_count;rc++)
	{
		temp_el = eval("frm.room_" + rc + ";");
		if(typeof temp_el.length == "undefined")
		{
			if(!temp_el.disabled)
			{
				sum_checked += 1;
			}
		}
		else
		{
			for (var r_counter = 0; r_counter < temp_el.length; r_counter++)
			{
				if (temp_el[r_counter].checked)
				{
					sum_checked += 1;
				}
			}		
		}
	}
	if(rooms_count>sum_checked)
	{
		alert(lc_JS_NotAllRoomsSelected);
	}
	else
	{
		CheckAvailability(frm_id);
	}	
}	

function CheckAvailability(frm_id)
{
	var srcString = "nothing=nothing";
	var frm = document.getElementById(frm_id);
	var rooms_count = parseInt(frm.rooms_count.value)
	srcString += "&check_in=" + document.getElementById("check_in").value;
	srcString += "&check_out=" + document.getElementById("check_out").value;
	srcString += "&rooms_count=" + document.getElementById("rooms_count").value;
	var temp_el;	

	for(var rc=1;rc <= rooms_count;rc++)
	{
		temp_el = eval("frm.room_" + rc + ";");
		if(typeof temp_el.length == "undefined")
		{
			if(!temp_el.disabled)
			{
				alert(rooms_count);
				return false;
			}
		}
		else
		{
			for (var r_counter = 0; r_counter < temp_el.length; r_counter++)
			{
				if (temp_el[r_counter].checked)
				{
					srcString += "&room_" + rc + "=" + temp_el[r_counter].value;
				}
			}		
		}
	}	
	head = document.getElementsByTagName("head").item(0);
	script = document.createElement("script");
	script.id = "tsouki_" + id_counter;
	id_counter++;
	script.src = "http://" + base_url + "/CheckAvailability.asp?" + srcString;
	//alert(script.src);
	script.type = "text/javascript";
	script.defer = true;			
	void(head.appendChild(script));	
}

NSHotel.prototype.CheckContact = function()
{
	var FullName = Trim(document.getElementById("FullName").value);
	var Email = Trim(document.getElementById("Email").value);
	
	var errMessage = "";
	var valid = true;
	if(FullName.length<=1)
	{
		errMessage += lc_JS_EnterFullName + "\n";
		valid = false;
	}	
	if(Email == "")
	{
		errMessage += lc_JS_EnterEmail + ".\n";
		valid = false;
	}
	else if(!validateEmail(Email))
	{
		errMessage += lc_JS_EnterValidEmail + "\n";
		valid = false;
	}
	
	if(valid)
	{
		return true;
	}
	else
	{
		alert(errMessage);
		return false;
	}
}

NSHotel.prototype.CheckCustomer = function()
{
	var FirstName = Trim(document.getElementById("FirstName").value);
	var LastName = Trim(document.getElementById("LastName").value);
	var Email = Trim(document.getElementById("Email").value);
	var Phone = Trim(document.getElementById("Phone").value);
	var Country = Trim(document.getElementById("Country").value);
	var City = Trim(document.getElementById("City").value);
	var Region = Trim(document.getElementById("Region").value);
	var Address = Trim(document.getElementById("Address").value);
	var PostalCode = Trim(document.getElementById("PostalCode").value);
	var SmokingPref = document.getElementById("SmokingPref").value;
	var BedPref = document.getElementById("BedPref").value;
	var AgreeTerms = false;
	var WaitingList;
	if(document.getElementById("isWaitingList").value == 'true')
	{
		WaitingList = true;
	}else 
	var WaitingList = false;

	if(!WaitingList)
	{
		AgreeTerms = document.getElementById("AgreeTerms").checked;
	}

	var errMessage = "";
	var valid = true;
	if(FirstName.length<=1)
	{
		errMessage += lc_JS_EnterFirstName + "\n";
		valid = false;
	}	
	if(LastName.length<=1)
	{
		errMessage += lc_JS_EnterLastName + "\n";
		valid = false;
	}
	if(Email == "")
	{
		errMessage += lc_JS_EnterEmail + "\n";
		valid = false;
	}
	else if(!validateEmail(Email))
	{
		errMessage += lc_JS_EnterValidEmail + "\n";
		valid = false;
	}
	if(Phone == "")
	{
		errMessage += lc_JS_EnterPhone + "\n";
		valid = false;
	}
	if(SmokingPref == "none")
	{
		errMessage += lc_JS_NotSmokingPreferenceSelected + "\n";
		valid = false;
	}	
	if(BedPref == "none")
	{
		errMessage += lc_JS_NotBedPreferenceSelected + "\n";
		valid = false;
	}
	
	if(!AgreeTerms && !WaitingList)
	{
		errMessage += lc_JS_AgreeWithTerms + "...\n";
		valid = false;
	}
		
	if(valid)
	{
		return true;
	}
	else
	{
		alert(errMessage);
		return false;
	}
}

NSHotel.prototype.LoginCustomer = function()
{
	var errMessage = "";
	var valid = true;
	
	var CustomerMail = Trim(document.getElementById("CustomerMail").value);	
	if(CustomerMail == "")
	{
		errMessage += lc_JS_EnterEmail + "\n";
		valid = false;
	}
	else if(!validateEmail(CustomerMail))
	{
		errMessage += lc_JS_EnterValidEmail + "\n";
		valid = false;
	}
		
	var Password = Trim(document.getElementById("Password").value);	
	if(Password == "")
	{
		errMessage += lc_JS_EnterPassword + "\n";
		valid = false;
	}
	else if(Password.length<=3)
	{
		errMessage += lc_JS_EnterValidPassword + "\n";
		valid = false;
	}
	
	if(valid==true)
	{	
		document.getElementById("what").value = "login";
		document.getElementById("LoginForm").submit();
	}
	else
	{
		alert(errMessage);
	}
}	

NSHotel.prototype.NewCustomer = function()
{
	document.getElementById("what").value = "new";
	document.getElementById("LoginForm").submit();
}	

NSHotel.prototype.SendPassword = function()
{
	var errMessage = "";
	var valid = true;
	
	var CustomerMail = Trim(document.getElementById("CustomerMail").value);	
	if(CustomerMail == "")
	{
		errMessage += lc_JS_EnterEmail + "\n";
		valid = false;
	}
	else if(!validateEmail(CustomerMail))
	{
		errMessage += lc_JS_EnterValidEmail + "\n";
		valid = false;
	}
	
	if(valid==true)
	{	
		var srcString = "container=" + this.Container;
		srcString += "&lang="+ this.Lang;
		srcString += "&CustomerMail=" + CustomerMail;
		
		head = document.getElementsByTagName("head").item(0);
		script = document.createElement("script");
		script.id = "tsouki_" + id_counter;
		id_counter++;
		script.src = "http://" + base_url + "/SendPassword.asp?" + srcString;
		//alert(script.src);
		script.type = "text/javascript";
		script.defer = true;			
		void(head.appendChild(script));	
	}
	else
	{
		alert(errMessage);
	}
}	

NSHotel.prototype.SaveCustomer = function()
{
	var FirstName = Trim(document.getElementById("FirstName").value);
	var LastName = Trim(document.getElementById("LastName").value);
	var Email = Trim(document.getElementById("Email").value);
	var Password = Trim(document.getElementById("Password").value);
	var PasswordConfirm = Trim(document.getElementById("PasswordConfirm").value);
	var Phone = Trim(document.getElementById("Phone").value);
	var Country = Trim(document.getElementById("Country").value);
	var City = Trim(document.getElementById("City").value);
	var Region = Trim(document.getElementById("Region").value);
	var Address = Trim(document.getElementById("Address").value);
	var PostalCode = Trim(document.getElementById("PostalCode").value);
	var CustomerId = Trim(document.getElementById("CustomerId").value);	
	
	var errMessage = "";
	var valid = true;
	if(FirstName.length<=1)
	{
		errMessage += lc_JS_EnterFirstName + "\n";
		valid = false;
	}	
	if(LastName.length<=1)
	{
		errMessage += lc_JS_EnterLastName + "\n";
		valid = false;
	}
	if(Email == "")
	{
		errMessage += lc_JS_EnterEmail + "\n";
		valid = false;
	}
	else if(!validateEmail(Email))
	{
		errMessage += lc_JS_EnterValidEmail + "\n";
		valid = false;
	}
	
	if(Password == "")
	{
		errMessage += lc_JS_EnterPassword + "\n";
		valid = false;
	}
	else if(Password.length<=3)
	{
		errMessage += lc_JS_EnterValidPassword + "\n";
		valid = false;
	}
	else if(Password != PasswordConfirm)
	{
		errMessage += lc_JS_WrongConfirmPassword + "\n";
		valid = false;
	}
	
	if(valid)
	{
		return true;
	}
	else
	{
		alert(errMessage);
		return false;
	}
}	



var book = new NSHotel();	


//Various Useful Functions
function validateEmail(theAddress)
{
	var returnValue = true;
	var AtSym       = theAddress.indexOf('@');
	var Period      = theAddress.lastIndexOf('.');
	var Space       = theAddress.indexOf(' ');
	var Length      = theAddress.length - 1;  // Array is from 0 to length-1

	// '@' cannot be in first position, Must be at least one valid char btwn '@' and '.'
	// Must be at least one valid char after '.', No empty spaces permitted
	if((AtSym < 1) || (Period <= AtSym+1) || (Period == Length ) || (Space  != -1))
		returnValue = false;

	return returnValue;
}

function Trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}

function Right(str, n)
{
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

/*function ValidateForm()
{
	var dt=document.frmSample.txtDate;
	if (isDate(dt.value)==false)
	{
		dt.focus();
		return false;
	}
    return true;
}*/

//******************** DATE VALIDATION
//******************** DHTML date validation script.
//******************** Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
//******************** Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

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 isDate(dtStr)
{
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1)
	{	
		strDay=strDay.substring(1);
	}
	if (strMonth.charAt(0)=="0" && strMonth.length>1)
	{
		strMonth=strMonth.substring(1);
	}
	for (var i = 1; i <= 3; i++) 
	{
		if (strYr.charAt(0)=="0" && strYr.length>1)
		{
			strYr=strYr.substring(1);
		}
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	if (pos1==-1 || pos2==-1)
	{
		alert(lc_JS_DateFormat);
		return false;
	}
	if (strMonth.length<1 || month<1 || month>12)
	{
		alert(lc_JS_EnterValidMonth);
		return false;
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
	{
		alert(lc_JS_EnterValidDay);
		return false;
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear)
	{
		alert(lc_JS_EnterFourDigitYear + " " + minYear + " " + lc_JS_And + " " + maxYear);
		return false;
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
	{
		alert(lc_JS_EnterValidDate);
	}
return true;
}

function ConvertToJsDateFormat(dtStr)
{
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	strYr=strYear;
	if (strDay.charAt(0)=="0" && strDay.length>1)
	{	
		strDay=strDay.substring(1);
	}
	if (strMonth.charAt(0)=="0" && strMonth.length>1)
	{
		strMonth=strMonth.substring(1);
	}
	for (var i = 1; i <= 3; i++) 
	{
		if (strYr.charAt(0)=="0" && strYr.length>1)
		{
			strYr=strYr.substring(1);
		}
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);
	
	return month + dtCh + day + dtCh + year;
}

function dateDiff(p_Interval, p_Date1, p_Date2, p_firstdayofweek, p_firstweekofyear){
	p_Date1 = ConvertToJsDateFormat(p_Date1)
	p_Date2 = ConvertToJsDateFormat(p_Date2)
	var dt1 = new Date(p_Date1);
	var dt2 = new Date(p_Date2);

	// get ms between dates (UTC) and make into "difference" date
	var iDiffMS = dt2.valueOf() - dt1.valueOf();
	var dtDiff = new Date(iDiffMS);

	// calc various diffs
	var nYears  = dt2.getUTCFullYear() - dt1.getUTCFullYear();
	var nMonths = dt2.getUTCMonth() - dt1.getUTCMonth() + (nYears!=0 ? nYears*12 : 0);
	var nQuarters = parseInt(nMonths/3);	//<<-- different than VBScript, which watches rollover not completion
	
	var nMilliseconds = iDiffMS;
	var nSeconds = parseInt(iDiffMS/1000);
	var nMinutes = parseInt(nSeconds/60);
	var nHours = parseInt(nMinutes/60);
	var nDays  = parseInt(nHours/24);
	var nWeeks = parseInt(nDays/7);


	// return requested difference
	var iDiff = 0;		
	switch(p_Interval.toLowerCase()){
		case "yyyy": return nYears;
		case "q": return nQuarters;
		case "m": return nMonths;
		case "y": 		// day of year
		case "d": return nDays;
		case "w": return nDays;
		case "ww":return nWeeks;		// week of year	// <-- inaccurate, WW should count calendar weeks (# of sundays) between
		case "h": return nHours;
		case "n": return nMinutes;
		case "s": return nSeconds;
		case "ms":return nMilliseconds;	// millisecond	// <-- extension for JS, NOT available in VBScript
		default: return "invalid interval: '" + p_Interval + "'";
	}
}