// Variable holder to specify if is IE6 (overwritten in setheightie6.js if needed)
var setHeightIE6 = false;

// Set up events to avoid mixing in with HTML
registerEventNode('load', window, pageLoadEvents);

// functions that happen on page load
function pageLoadEvents()
{
	createDynamicMultiimage();
	createPanoramic();
	assignEvents();
	
	adjustForGMap();
	
	try
	{ $('linkboxContainer').style.height = (imgEngine.getLinkboxMaxHeight() +20)+ 'px'; }
	catch (e)
	{ /* do nothing */ }
	
	setHeight();
	
	try
	{ imgEngine.init(5000); }
	catch (e)
	{ /* do nothing */ }
	
	if ( document.getElementById('email') )
	{
		var qry = new Querystring();
		var emailAddr = qry.get('emailaddress');
		if ( emailAddr )
		{ document.getElementById('email').value = emailAddr; }
	}
	
	// set today's date for the check availability area
	setDate();
}

// assign event handlers that have other triggers
function assignEvents()
{
	// callback click
	registerEvent('click', 'callback', function () { webVoicePop('Template=55376'); } );
	
	// change events for "check availability" form
	registerEvent('change', 'checkday', makeDate);
	registerEvent('change', 'checkmonth', makeDate);
	
	// validation event for "check availability" form
	registerEvent('submit', 'checkavailabilityform', makeDate);
}

function adjustForGMap()
{
	var gMapFrame = document.getElementById('gmapframe');
	var promo = document.getElementById('promotional');
	var content = document.getElementById('content');
	var mapHTML;
	
	if (gMapFrame)
	{
		if (gMapFrame.outerHTML)
		{ mapHTML = gMapFrame.outerHTML; }
		else
		{ 
			var parent = gMapFrame.parentNode;
			var el = document.createElement(parent.tagName);
			el.appendChild(gMapFrame);
			mapHTML = el.innerHTML;
			parent.appendChild(gMapFrame);
		}
		
		try
		{
			promo.style.display = 'none';
			content.style.padding = '0px';
			content.innerHTML = mapHTML;
		}
		catch (e)
		{
			gMapFrame.style.display = 'none';
		}
	}

}

function setDate(options)
{
	// WARNING: expects options.month to be 0-11, as with the built-in Date object
	// work out what date we're setting
	var today = new Date(), i;
	var dateParts = { day: (today.getDate())+1, month: today.getMonth(), year: today.getFullYear() }
	if (options)
	{
		dateParts.day = options.day || dateParts.day;
		dateParts.month = options.month || dateParts.month;
		dateParts.year = options.year || dateParts.year;
	}

	// select the appropriate dropdown options
	// ignore year for now, dropdown only covers 12 months
	var daySelect = document.getElementById('checkday');
	var monthSelect = document.getElementById('checkmonth');

	if (daySelect !== null && monthSelect !== null)
	{
		for (i = daySelect.options.length - 1; i >= 0; i--)
		{

			if (parseInt(daySelect.options[i].value) == dateParts.day)
			{
				daySelect.selectedIndex = i;
				break;
			}
		}

		for (i = monthSelect.options.length - 1; i >= 0; i--)
		{
			monthValue = monthSelect.options[i].value.split('/')[0];
			if ((parseInt(monthValue) - 1) == dateParts.month)
			{
				monthSelect.selectedIndex = i;
				break;
			}
		}

		// make the hidden field match the display
		makeDate();
	}
}

function makeDate() 
{
	var dateField  = document.getElementById('datein');
	var dayField = document.getElementById('checkday');
	var monthField = document.getElementById('checkmonth');

	var dayOfMonth = dayField.options[dayField.selectedIndex].value;
	var monthYear = monthField.options[monthField.selectedIndex].value;  
					  
	var monthYearParts = monthYear.split('/');

	// validate the date first
	//var testDate = new Date(monthYearParts[1], parseInt(monthYearParts[0])-1, dayOfMonth);

	dateField.value =  monthYearParts[0] + '/' + dayOfMonth + '/' + monthYearParts[1];
}

function maxOfArray(itemArray)
{
	var max = 0;
	for (var i=0; i<itemArray.length; i++)
	{ max = Math.max(max, itemArray[i]); }
	
	return max;
}

function setHeight()
{
	var isSinglePanel, content, promotional;
	var navGroup = document.getElementById('navgroup');
	var navigation = document.getElementById('navigation');
	var qSubscribeForm = document.getElementById('qsubscribeform');
	
	if (document.getElementById('gallerymain'))
	{
		isSinglePanel = true;
		content = document.getElementById('gallerymain');
		promotional = document.getElementById('gallerymain');
	}
	if (!isSinglePanel && document.getElementById('mapmain'))
	{
		isSinglePanel = true;
		content = document.getElementById('mapmain');
		promotional = document.getElementById('mapmain');
	}
	if (!isSinglePanel && document.getElementById('sitemapmain'))
	{
		isSinglePanel = true;
		content = document.getElementById('sitemapmain');
		promotional = document.getElementById('sitemapmain');
	}
	if (!isSinglePanel)
	{
		isGallery = false;
		content = document.getElementById('content');
		promotional = document.getElementById('promotional');
	}

	var navGroupHeight = navGroup.offsetHeight;
	var contentHeight = content.offsetHeight;
	var promotionalHeight = promotional.offsetHeight;
	var qSubHeight = qSubscribeForm.offsetHeight;

	var maxHeight = maxOfArray([navGroupHeight, contentHeight, promotionalHeight]);

	var navigationHeight = maxHeight - 43; // remove navigation padding and separating border
	navigationHeight = navigationHeight - qSubHeight; // remove quicksub form total height
	contentHeight = maxHeight - 80; // remove top/bottom padding values

	// use attachEvent to spot IE, so we can give it "height" rather than "minHeight"
	// to spot IE6 only, use variable in setheightie6.js
	if (navGroup.attachEvent)
	{
		if (setHeightIE6)
		{ navigationHeight += 10; }
		navigation.style.height = navigationHeight+'px';
		content.style.height = contentHeight+'px';
		if (!isSinglePanel)
		{ promotional.style.height = maxHeight+'px'; }
	}
	else
	{
		navigation.style.minHeight = navigationHeight+'px';
		content.style.minHeight = contentHeight+'px';
		if (!isSinglePanel)
		{ promotional.style.minHeight = maxHeight+'px'; }
	}
}


function newSetHeight()
{
	// work out which columns we have
	// calculate the height of all the things in the column
	// set heights appropriately


}