// JavaScript Document
function addText(id, txt){
 var elem;
   
 if( document.getElementById  && (elem=document.getElementById(id)) ){
   elem.appendChild( document.createTextNode( txt ) );
 }

 return false; 
}

function setText(id, txt){
 var elem;
   
 if( document.getElementById  && (elem=document.getElementById(id)) ){
  if( !elem.firstChild )
   elem.appendChild( document.createTextNode( txt ) );
  else 
   elem.firstChild.data = txt;
 }

 return false; 
}

function changeGuestNum (){
	
	if(document.calculatorForm.listPeople.value == "choose"){
		//Change value of number of people to sleep
		setText('numPeople','-');
		setText('numPeopleLeft', '-');
	}else{
		//Change value of number of people to sleep
		setText('numPeople',document.calculatorForm.listPeople.value);
		
		//Update the people left to sleep field
		updatePeopleLeft();
	}
	
	//Check for errors
	checkErrors();
}

function startUpScript(){
	changeGuestNum();
	roomSummary();	
}

// JavaScript Document
function changeRoom(roomType, changeType){
	var num;
	var hiddenField;
	
	//Set the id of the hidden value to adjust
	hiddenField = "hidden" + roomType;
	
	//Get room variable
	num = parseInt(document.calculatorForm.elements[hiddenField].value);
		
	//Adjust room variable
	if(changeType == "increase"){
		num = num + 1;
	}else if(changeType == "decrease"){
		num = num - 1;
	}
	
	//Can't have negative rooms so set to 0
	if(num < 0){
		num = 0;	
	}
	
	//Set room variable with updated room total
	document.calculatorForm.elements[hiddenField].value = num;
	
	//Check number of possible rooms vs rooms selected 
	if(roomsFull(roomType) == "full"){
		//Lockout images
	}else if(roomsFull(roomType) == "over"){
		//Lockout images
		
		//Reduce room num by 1
		num = num - 1;
	}
	
	//Set room variable with updated room total
	document.calculatorForm.elements[hiddenField].value = num;
	
	//Update the people left to sleep field
	updatePeopleLeft();
	
	//Update the room summary
	roomSummary();
	
	//Check for errors
	checkErrors();
}

function updatePeopleLeft(){

	checkErrors();
	
	//Calcualte people left and display
	peopleLeft = document.calculatorForm.listPeople.value - calculateTotal();
	setText('numPeopleLeft', peopleLeft);
	
}

// JavaScript Document
function roomSummary(){
	
	//setup array of room types
	var arrayRooms = new Array();
	arrayRooms[0] = "Single";
	arrayRooms[1] = "Twin";
	arrayRooms[2] = "Triple";
	arrayRooms[3] = "Quad";
	arrayRooms[4] = "SCA4";
	arrayRooms[5] = "SCA5";
	arrayRooms[6] = "SCA6";
	arrayRooms[7] = "Tatami";
		
	//Clear current text in div
	clearAllNodes(document.getElementById('divRoomSummary'));
	
	message = "";	
	
	if(calculateTotal() == 0){
		addText('divRoomSummary', 'No Rooms Selected');
	}else{
		//loop through array of rooms	
		for ( var i=0, len=arrayRooms.length; i<len; ++i ){
			//Set the id of the hidden value to adjust
			hiddenField = "hidden" + arrayRooms[i];
			
			//Output room summary if the count is larger then 0
			if(document.calculatorForm.elements[hiddenField].value != 0){
			
				//Output room type and number
				message = document.calculatorForm.elements[hiddenField].value + " x " + arrayRooms[i] + " ";
				addText('divRoomSummary', message);
				
				//Output decrease link	
				var mylink = document.createElement('a');
				mylink.setAttribute('href','JavaScript:void(0);');
				mylink.setAttribute('onclick',"changeRoom('" + arrayRooms[i] + "', 'decrease');");
				mylink.innerHTML = "remove";
				document.getElementById('divRoomSummary').appendChild(mylink);
				
				//Output Line Break
				lineBreak = document.createElement('BR');
				document.getElementById('divRoomSummary').appendChild(lineBreak);
			} 
		}
	}
}

function calculateTotal(){
	singles = 1 * parseInt(document.calculatorForm.elements['hiddenSingle'].value);
	twins = 2 * parseInt(document.calculatorForm.elements['hiddenTwin'].value);
	triples = 3 * parseInt(document.calculatorForm.elements['hiddenTriple'].value);
	quads = 4 * parseInt(document.calculatorForm.elements['hiddenQuad'].value);
	sca4 = 4 * parseInt(document.calculatorForm.elements['hiddenSCA4'].value);
	sca5 = 5 * parseInt(document.calculatorForm.elements['hiddenSCA5'].value);
	sca6 = 6 * parseInt(document.calculatorForm.elements['hiddenSCA6'].value);
	tatami	= 6 * parseInt(document.calculatorForm.elements['hiddenTatami'].value);
	
	total = singles + twins + triples + quads + sca4 + sca5 + sca6 + tatami;
	
	return total;
}

function roomsFull(roomType){
	
	//Check room number totals are below maximum's
	twinTotals = parseInt(document.calculatorForm.elements['hiddenSingle'].value) + parseInt(document.calculatorForm.elements['hiddenTwin'].value) + parseInt(document.calculatorForm.elements['hiddenTriple'].value);
	quadTotals = parseInt(document.calculatorForm.elements['hiddenQuad'].value);
	scaTotals = parseInt(document.calculatorForm.elements['hiddenSCA4'].value) + parseInt(document.calculatorForm.elements['hiddenSCA5'].value) + parseInt(document.calculatorForm.elements['hiddenSCA6'].value);
	tatamiTotals = parseInt(document.calculatorForm.elements['hiddenTatami'].value);
	
	switch(roomType){
		case "Single": case "Twin": case "Triple":			
			if(twinTotals == 5){
				return "full";
			}else if(twinTotals > 5){
				return "over";
			}else{
				return "ok";
			}
		case "Quad":
			if(quadTotals == 2){
				return "full";
			}else if(quadTotals > 2){
				return "over";
			}else{
				return "ok";
			}
		case "SCA4": case "SCA5": case "SCA6":
			if(scaTotals == 1){
				return "full";
			}else if(scaTotals > 1){
				return "over";
			}else{
				return "ok";
			}
		case "Tatami":
			if(tatamiTotals == 1){
				return "full";
			}else if(tatamiTotals > 1){
				return "over";
			}else{
				return "ok";
			}
		default:
	}	
}

function checkErrors(){
	
	showMessages = false;
	
	//Clear current text in div
	clearAllNodes(document.getElementById('divRoomErrors'));
	
	//Check if a group of people has been selected
	if(document.calculatorForm.listPeople.value == "choose"){
		//Change value of number of people to sleep
		setText('numPeople','-');
		setText('numPeopleLeft', '-');
		
		//Add Error Text
		addText('divRoomErrors', "- Please select the number of people in your group above");
						
		//Output Line Break
		lineBreak = document.createElement('BR');
		document.getElementById('divRoomErrors').appendChild(lineBreak);	
		
		showMessages = true;
	}
	
	//Check if a group of people has been selected
	if(document.calculatorForm.listPeople.value - calculateTotal() < 0){
		//Add Error Text
		addText('divRoomErrors', "- Please be aware you have selected too many beds for your group size. This may not give the cheapest option for your group.");
						
		//Output Line Break
		lineBreak = document.createElement('BR');
		document.getElementById('divRoomErrors').appendChild(lineBreak);	
		
		showMessages = true;
	}
	
	//If message to be displayed show messages row
	if(showMessages == true){
		document.getElementById('rooms_gui_messages').style.display = '';
	}else{
		document.getElementById('rooms_gui_messages').style.display = 'none';
	}
}

function clearAllNodes(element){

	if ( element.hasChildNodes() ){
		while ( element.childNodes.length >= 1 ){
			element.removeChild( element.firstChild );       
		} 
	}
}

//Validate Calculator Script
function validateCalcForm(returnMessage){
	valid = true;
	message = "";
	
	form = document.forms["calculatorForm"];
	
	arrivalDateText = form.elements["txtArrivalDate"].value;
	departDateText = form.elements["txtDepartDate"].value;
	
	//Check Arrival & Departure Dates have been entered		
	if(form.elements["txtArrivalDate"].value == ""){
		message += "- enter your arrival date (dd/mm/yyyy)\n";
		valid = false;
	}
	
	if(form.elements["txtDepartDate"].value == ""){
		message += "- enter your departure date (dd/mm/yyyy)\n";
		valid = false;
	}
	
	//Check dates are correct
	if(valid){
		//Convert Arrival Date to date variable
		var brokenstring=arrivalDateText.split("/"); 	
		var arrivalDate = new Date();
		arrivalDate.setFullYear(brokenstring[2],brokenstring[1] - 1,brokenstring[0]);
		
		//Convert Depart Date to date variable
		var brokenstring=departDateText.split("/"); 	
		var departDate = new Date();
		departDate.setFullYear(brokenstring[2],brokenstring[1] - 1,brokenstring[0]);
		
		//Check that the departure date is after the arrival date
		if(arrivalDate >= departDate){
			message += "- enter a departure date after your arrival\n";
			valid = false;	
		}
		
		//Set season dates	
		var seasonStartDate = new Date();
		seasonStartDate.setFullYear(2010, 11, 1);		
		var seasonEndDate = new Date();
		seasonEndDate.setFullYear(2011, 4, 5);				
		
		if((arrivalDate < seasonStartDate) || (departDate > seasonEndDate)){
			message += "- enter dates for the 2010/11 season between 1/12/2010 - 5/5/2011\n";
			valid = false;	
		}
		
		if(days_between(departDate, arrivalDate) < 3){
			message += "- enter a stay of at least 3 nights (this is our minimum stay)\n";
			valid = false;	
		}
	}
	
	if(form.elements["listPeople"].value == "choose"){
		message += "- select the number of people in your group\n";
		valid = false;
	}
	
	if(form.elements["listPeople"].value > calculateTotal()){
		message += "- select enough beds for your group\n";
		valid = false;
	}
	
	if(calculateTotal() == 0){
		message += "- select a room\n";
		valid = false;
	}
		
	if(valid){
		if(returnMessage == true){
			return message;
		}else{
			document.forms["calculatorForm"].submit();	
		}
	}else{
		if(returnMessage == true){
			return message;
		}else{
			message = "Please:\n" + message;
			alert(message);	
		}
	}
}

function submitBooking(){	

	valid = true;
	message = "";
	calcMessage = "";
	form = document.forms["calculatorForm"];
		
	//Check Calculator Fields
	calcMessage = validateCalcForm(true);
		
	//Check the booking details
	if(form.elements["txtSurname"].value == ""){
		message += "- enter your surname\n";
		valid = false;
	}
	
	if(form.elements["txtFirstName"].value == ""){
		message += "- enter your first name\n";
		valid = false;
	}
	
	if(form.elements["txtPostCode"].value == ""){
		message += "- enter your postcode\n";
		valid = false;
	}
	
	if(form.elements["txtEmail"].value == ""){
		message += "- enter your email address\n";
		valid = false;
	}
	
	if(form.elements["txtVerifyEmail"].value == ""){
		message += "- verify your email address\n";
		valid = false;
	}
	
	if(form.elements["cboCountry"].value == "Please choose"){
		message += "- select your country\n";
		valid = false;
	}
	
	if(form.elements["txtSecurityNumber"].value == ""){
		message += "- enter the verification code\n";
		valid = false;
	}
	
	if(valid && calcMessage == ""){
		document.calculatorForm.elements['hiddenSubmitBooking'].value = 'true';
		document.forms["calculatorForm"].submit();
	}else{
		message = "Please:\n" + message;
		alert(message);	
	}
}

function showContactDetails(){
	document.getElementById('rowBookingHeader').style.display = '';
	document.calculatorForm.elements['hiddenContactShow'].value = 'true';
}

function availabilityPopup (){
	var startDate;
	var URL;
	
	//Check Arrival & Departure Dates have been entered		
	if(document.calculatorForm.elements["txtArrivalDate"].value == ""){
		alert("Please select your check-in date above and try again.\n");	
	}else{
		startDate = document.calculatorForm.elements["txtArrivalDate"].value;	
		URL = "http://www.ramatniseko.com/winter/availability.php?availability_date=" + startDate + "#anchor_availability"; 	
		window.open(URL,"availability_window");		
	}
}

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){
		return false
	}
	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 || year<minYear || year>maxYear){
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		return false
	}
return true
}

function days_between(date1, date2) {

    // The number of milliseconds in one day
    var ONE_DAY = 1000 * 60 * 60 * 24

    // Convert both dates to milliseconds
    var date1_ms = date1.getTime()
    var date2_ms = date2.getTime()

    // Calculate the difference in milliseconds
    var difference_ms = Math.abs(date1_ms - date2_ms)
    
    // Convert back to days and return
    return Math.round(difference_ms/ONE_DAY)

}

