/**
 * @author g.bates
 */
 
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}


// Booking form calendar 
 
var calendar;

function strToDate(str) {
	var dateParts = str.split('/');
	var year = dateParts[2];
	var month = dateParts[1] - 1;
	var date = dateParts[0];
	return new Date(year, month, date);
}

function bookingForm() {
	
	// mini form
	if (document.getElementById('bookTypeNav')) {
		var bookTabs = document.getElementById('bookTypeNav').getElementsByTagName('li');
		var bookFormRoom = document.getElementById('bookFormRoom');
		var bookFormTable = document.getElementById('bookFormTable');		
		
		bookTabs[0].onclick = function() {			
			bookTabs[0].className = 'active';
			bookTabs[1].className = '';
			bookFormRoom.className = '';
			bookFormTable.className = 'hidden';
			return false;
		}
		bookTabs[1].onclick = function() {
			bookTabs[0].className = '';
			bookTabs[1].className = 'active';
			bookFormRoom.className = 'hidden';
			bookFormTable.className = '';
			return false;
		}
		
		// validate
		document.getElementById('bookFormRoom').onsubmit = function() {
			if (!document.getElementById('theCityRoom').value) {
				alert('Please select your city');
				return false;
			}
			if (!document.getElementById('numberOfPersonsRoom').value) {
				alert('Please select number of persons');
				return false;
			}
			if (!document.getElementById('arriveDate').value || document.getElementById('arriveDate').value == 'From:') {
				alert('Please select your arrival date');
				return false;
			}
			if (!document.getElementById('departDate').value || document.getElementById('departDate').value == 'To:') {
				alert('Please select your departure date');
				return false;
			}
		}
		document.getElementById('bookFormTable').onsubmit = function() {
			if (!document.getElementById('theCityTable').value) {
				alert('Please select your city');
				return false;
			}
			if (!document.getElementById('numberOfPersonsTable').value) {
				alert('Please select number of persons');
				return false;
			}
			if (!document.getElementById('bookingDate').value || document.getElementById('bookingDate').value == 'Date:') {
				alert('Please select your booking date');
				return false;
			}
			if (!document.getElementById('mealType').value) {
				alert('Please select a meal type');
				return false;
			}
		}
	}

	// added by Francis Barbero to handle restaurant bookings
	if (document.getElementById('bookFormTable')) {
		// create calendar
		calendar = new Epoch('bookingDate', 'popup', document.getElementById('bookingDate'), false);			
		// set initial date
		document.getElementById('bookingDate').dateObj = strToDate(document.getElementById('bookingDate').value);
		// focus text fields when button is clicked - will cause calendar to open
		document.getElementById('bookingDateSelect').onclick = function() {
			document.getElementById('bookingDate').focus();
		}		
		// set callbacks to ensure dates are in correct order
		document.getElementById('bookingDate').onblur = function() {			
			var bookingDate = document.getElementById('bookingDate').dateObj || new Date();
		}		
	}
	
	if (document.getElementById('bookFormRoom')) {
		var calendar = new Epoch('arriveDate', 'popup', document.getElementById('arriveDate'), false);
		
		// set initial dates	
		var arriveInitial = new Date();		
		if (document.getElementById('arriveDate').value && document.getElementById('arriveDate').value != 'From:') {
			arriveInitial = strToDate(document.getElementById('arriveDate').value);
		}
		calendar.setTarget(document.getElementById('arriveDate'),false);
		calendar.selectDates(new Array(arriveInitial),true,false,true);
		calendar.tgt.dateObj = new Date(arriveInitial);
		calendar.hide();
		calendar.reDraw();		
		
		var departInitial = new Date();
		if (document.getElementById('departDate').value && document.getElementById('departDate').value != 'To:') {
			departInitial = strToDate(document.getElementById('departDate').value);
		}
		calendar.setTarget(document.getElementById('departDate'),false);
		calendar.selectDates(new Array(departInitial),true,false,true);
		calendar.tgt.dateObj = new Date(departInitial);
		calendar.hide();
		calendar.reDraw();

			
		// focus text fields when button is clicked - will cause calendar to open
		document.getElementById('arriveDateSelect').onclick = function() {
			document.getElementById('arriveDate').focus();
		}
		document.getElementById('departDateSelect').onclick = function() {
			document.getElementById('departDate').focus();
		}
		// open calendar on focus
		document.getElementById('arriveDate').onfocus = document.getElementById('departDate').onfocus = function(){
			calendar.setTarget(this);
		};
		
		// set callbacks to ensure dates are in correct order
		document.getElementById('arriveDate').onblur = function() {			
			var arriveDate = document.getElementById('arriveDate').dateObj || new Date();
			var departDate = document.getElementById('departDate').dateObj || new Date();
			if (departDate.getTime() <= arriveDate.getTime()) {
				// set depart date to 1 day after arrival
				departDate.setTime(arriveDate.getTime() + 96400000);
				document.getElementById('departDate').value = departDate.dateFormat();
			}
		}		
		document.getElementById('departDate').onblur = function() {
			var arriveDate = document.getElementById('arriveDate').dateObj || new Date();
			var departDate = document.getElementById('departDate').dateObj || new Date();
			if (departDate.getTime() <= arriveDate.getTime()) {
				// set arrival date to 1 day before departure
				arriveDate.setTime(departDate.getTime() - 96400000);
				document.getElementById('arriveDate').value = arriveDate.dateFormat();
			}
		}
	}
}

function newsletterForm() {
	if (!document.getElementById('newsletterForm')) return false;
	var newsletterForm = document.getElementById('newsletterForm');
    var formInputs = newsletterForm.getElementsByTagName('input');
    for (var i = 0; i < formInputs.length; i++) {
        var theInput = formInputs[i];
        if (theInput.type == 'text') {  
            /* Add event handlers */          
            addEvent(theInput, 'focus', clearDefaultText, false);
            addEvent(theInput, 'blur', replaceDefaultText, false);
            
            /* Save the current value */
            if (theInput.value != '') {
                theInput.defaultText = theInput.value;
            }
        }
    }
    
    // validate
    newsletterForm.onsubmit = function() {    	
    	
    	//validate name
    	if (!formInputs[0].value || formInputs[0].value == 'Name') {
    		alert('Name is required');
    		return false;
    	}
    	
    	//validate email
    	var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    	
    	if (!formInputs[1].value || formInputs[1].value == 'Email') {
    		alert('Email is required');
    		return false;
    	} else if (!filter.test(formInputs[1].value)) {
    		alert('Email is not valid');
    		return false;
    	}
    }
}

/* Clear Default Text: functions for clearing and replacing default text in sidebar newsletter signup <input> elements. */

function clearDefaultText(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;
    
    if (target.value == target.defaultText) {
        target.value = '';
    }
}

function replaceDefaultText(e) {
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target) return;
    
    if (target.value == '' && target.defaultText) {
        target.value = target.defaultText;
    }
}

// Cross-browser event handling, by Scott Andrew
function addEvent(element, eventType, lamdaFunction, useCapture) {
    if (element.addEventListener) {
        element.addEventListener(eventType, lamdaFunction, useCapture);
        return true;
    } else if (element.attachEvent) {
        var r = element.attachEvent('on' + eventType, lamdaFunction);
        return r;
    } else {
        return false;
    }
}

addLoadEvent(bookingForm);
addLoadEvent(newsletterForm);
