/*
 ***************************************************************
 * Start config code
 ***************************************************************
 */

/*
 * Load any missing libraries which functions in this script depend on
 */
function ftnCaBAdminLoadJs(){
	// Register dependencies here
	if(typeof(ftnGetObjectPosition) == 'undefined') ftnCaBAdminAddJs('/javascript/cab-common-functions.js');
	if(typeof(Prototype) == 'undefined') ftnCaBAdminAddJs('/javascript/scriptaculous/lib/prototype.js');
	if(typeof(Effect) == 'undefined') ftnCaBAdminAddJs('/javascript/scriptaculous/src/effects.js');
}

/*
 * Register code to call onload
 */
function ftnCaBAdminLoadEvents(){
	ftnAddLoadEvent(ftnInitialisePrimaryMenus);
	ftnAddLoadEvent(ftnInitialiseMediaBlockSlideShow);
	ftnAddLoadEvent(ftnInitialiseMediaBlockFlip);
	ftnAddLoadEvent(ftnInitialiseSecondaryContentFlip);
	ftnAddLoadEvent(ftnSetExternalLinks);
}


/*
 ***************************************************************
 * End config code
 ***************************************************************
 */
 
/*
 * Load registered javascript library dependencies
 */
function ftnCaBAdminAddJs(source){
	var head = document.getElementsByTagName('head').item(0);
	var script = document.createElement('script');
	script.setAttribute('type','text/javascript');
	script.setAttribute('src',source);
	head.appendChild(script);
}
//ftnCaBAdminLoadJs();

/*
 * Basic form validation - checks that all inputs with an attribute of 
 * 'required' contain a value.
 *
 * Note that if you use this you _must_ use the custom DTD (/dtd/xhtml1-custom.dtd) else 
 * your xhtml will not validate (the custom DTD contains some extended attributes).
 */
function ftnValidateForm() {
	var x = document.forms[0].elements;
	var blnValid = true;
	
	for (var i=0;i<x.length;i++) {
		if (x[i].getAttribute('required')) {
			if (!x[i].value) {
				x[i].style.backgroundColor = '#ff0000';
				blnValid = false;
			} else {
				x[i].style.backgroundColor = '';
			}
		}
	}
	return blnValid;
}

function ftnNewsArticleWebsiteLinkSelect(linkCheck){
	if(!linkCheck.checked)
		document.getElementById('hdl' + linkCheck.id.substr(4,(linkCheck.id.length - 4))).checked = false;
}

function ftnNewsArticleWebsiteHeadlineSelect(headCheck){
	if(headCheck.checked)
		document.getElementById('nawl' + headCheck.id.substr(3,(headCheck.id.length - 3))).checked = true;
}


function ftnSetExternalLinks() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
			anchor.target = "_blank";
	}
}

/*
 * Load registered onload event handlers
 */
function ftnAddLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

/*
 * Menu functions
 */
function ftnInitialisePrimaryMenus(){
	// Set event handlers on menu list items
	var pNav = document.getElementById('primary-nav');
	for (var i=0; i<pNav.childNodes.length; i++){
		var lItem = pNav.childNodes[i];
		if(lItem.tagName == 'LI'){
			lItem.onmouseover = ftnTogglePrimaryMenuOn;
			lItem.onmouseout = ftnTogglePrimaryMenuOff;
		}
	}
	
	// Set event handlers on dropdowns
	var arrDrops = document.getElementsByTagName('div');
	for (var i=0; i<arrDrops.length; i++){
		var objDrop = arrDrops[i];
		if(objDrop.id.length > 12 && objDrop.id.substr(0,12) == 'nav-primary-'){
			objDrop.style.display = 'none';
			objDrop.style.position = 'absolute';
			objDrop.onmouseout = ftnTogglePrimaryMenuOff;
		}
	}
}

function ftnTogglePrimaryMenuOn(evnt){
	ftnTogglePrimaryMenu(evnt, true);
}

function ftnTogglePrimaryMenuOff(evnt){
	if (!evnt) var evnt = window.event;
	var targ = ftnCaBGetTargetFromEvent(evnt);
	
	while(targ.id.substr(0,12) != 'nav-primary-' && targ.id.substr(0,5) != 'pnav-' && targ.nodeName != 'BODY'){
		targ = targ.parentNode;
	}
	
	// We don't want to deselect the menu item if we've just moved over the dropdown
	// As the mouse always has to cross the actual drop div to reach anything inside it, we shouldn't
	// need to walk up the DOM tree looking for the drop, but due to IE's utterly useless event 
	// handling it often doesn't report the mouseout until the pointer is over one of the inner elements
	var entered = (evnt.relatedTarget) ? evnt.relatedTarget : evnt.toElement;
	if (entered != null){
		while(entered.id.substr(0,12) != 'nav-primary-' && entered.id.substr(0,5) != 'pnav-' && entered.nodeName != 'BODY')
			entered = entered.parentNode;
		if(entered.id.length > 12 && entered.id.substr(0,12) == 'nav-primary-') return;
	}
	
	// IE doesn't reliably report the element we've entered - we have to assume it's the drop and leave the
	// menu open if leaving the menu list item or the menus will be intermittently unusable...
	if (entered == null && targ.id.substr(0,5) == 'pnav-') return;
	
	if (ftnMouseOut(targ, evnt)) ftnTogglePrimaryMenu(evnt, false);
}

function ftnTogglePrimaryMenu(evnt, blnShow){
	if (!evnt) var evnt = window.event;
	var targ = ftnCaBGetTargetFromEvent(evnt);
	
	while(targ.id.substr(0,12) != 'nav-primary-' && targ.id.substr(0,5) != 'pnav-' && targ.nodeName != 'BODY'){
		targ = targ.parentNode;
	}
	
	if(targ.id.substr(0,12) == 'nav-primary-'){
		// Event was fired from the dropdown
		var objDrop = targ;
		var objLink = document.getElementById('pnav-' + targ.id.substr(12,targ.id.length-12));
	}else{
		// Event was fired from the menu list item
		var objLink = targ;
		var objDrop = document.getElementById('nav-primary-' + targ.id.substr(5,targ.id.length-5));
	}
	
	// If no specific state requested, toggle state
	if (blnShow != true && blnShow != false){
		blnShow = objLink.className.indexOf('active') > -1 ? false : true;
	}
	
	if (blnShow) {
		if(objDrop != null){
			// Display dropdown
			objDrop.style.display = 'block';
			var arrLinkLoc = ftnGetObjectPosition(objLink);
			var x = arrLinkLoc[0];
			var y = arrLinkLoc[1] + ftnGetObjectHeight(objLink);
			ftnMoveObject(objDrop, x, y);

			// Place an iFrame under the menu to make it overlay windowed controls
			ftnCaBPlaceAboveWindowed(objDrop, 'site_list_iframe',9);
		}
		
		// Highlight menu list item
		if (objLink.className.indexOf(' active') == -1)
			objLink.className = objLink.className + ' active';
	} else {
		if(objDrop != null){
			// Hide dropdown
			// IE is really ropy at effects, so don't try them
				objDrop.style.display = 'none';
			
			// Remove iFrame
			var iFrame = document.getElementById('site_list_iframe');
			if(iFrame != null) iFrame.parentNode.removeChild(iFrame);
		}
		
		// Remove highlight from menu list item
		if (objLink.className.indexOf(' active') > -1)
			objLink.className = objLink.className.substr(0,objLink.className.length - 7);
	}
	return false;
}

var mediaBlockSlides = new Array();
var mediaBlockCurrentSlide = 0;
var mediaBlockIntervalId;

function ftnInitialiseMediaBlockSlideShow(){
	var mediaBlockSlideshow = document.getElementById('media-block-slideshow');
	if(mediaBlockSlideshow != null){
		var arrSlides = mediaBlockSlideshow.getElementsByTagName('div');
		if(arrSlides.length > 1){
			for(var i=0; i<arrSlides.length; i++){
				mediaBlockSlides.push(arrSlides[i].id);
				if (i>0) arrSlides[i].style.display = 'none';
				arrSlides[i].className = '';
			}
			mediaBlockCurrentSlide = 0;
			mediaBlockIntervalId = setInterval('ftnMediaBlockSlideShow()',mediaBlockDelay);
		}
	}
}

function ftnMediaBlockSlideShow() {
	Effect.Fade(mediaBlockSlides[mediaBlockCurrentSlide], { duration:1, from:1.0, to:0.0 }); 
	mediaBlockCurrentSlide++;
	if (mediaBlockCurrentSlide == mediaBlockSlides.length) mediaBlockCurrentSlide = 0;
	Effect.Appear(mediaBlockSlides[mediaBlockCurrentSlide], { duration:1, from:0.0, to:1.0 });
}

var mediaBlockFlips = new Array();
var mediaBlockCurrentFlip = 0;

function ftnInitialiseMediaBlockFlip(){
	var mediaBlockFlip = document.getElementById('media-block-flip');
	if(mediaBlockFlip != null){
		var arrSlides = mediaBlockFlip.getElementsByTagName('div');
		if(arrSlides.length > 1){
			for(var i=0; i<arrSlides.length; i++){
				mediaBlockFlips.push(arrSlides[i].id);
				if (i>0) arrSlides[i].style.display = 'none';
				arrSlides[i].className = '';
			}
			mediaBlockCurrentFlip = 0;
			var flipCtl = document.getElementById('flip-control');
			flipCtl.style.display = 'block';
			var flipNext = document.getElementById('flip-next');
			if(flipNext != null) flipNext.onclick = ftnMediaBlockFlipNext;
			var flipPrevious = document.getElementById('flip-previous');
			if(flipPrevious != null) flipPrevious.onclick = ftnMediaBlockFlipPrevious;
			flipCtl.style.display = 'block';
		}
	}
}

function ftnMediaBlockFlipNext() {
	Effect.Fade(mediaBlockFlips[mediaBlockCurrentFlip], { duration:1, from:1.0, to:0.0 }); 
	mediaBlockCurrentFlip++;
	if (mediaBlockCurrentFlip == mediaBlockFlips.length) mediaBlockCurrentFlip = 0;
	Effect.Appear(mediaBlockFlips[mediaBlockCurrentFlip], { duration:1, from:0.0, to:1.0 });
}

function ftnMediaBlockFlipPrevious() {
	Effect.Fade(mediaBlockFlips[mediaBlockCurrentFlip], { duration:1, from:1.0, to:0.0 }); 
	mediaBlockCurrentFlip--;
	if (mediaBlockCurrentFlip == -1) mediaBlockCurrentFlip = mediaBlockFlips.length - 1;
	Effect.Appear(mediaBlockFlips[mediaBlockCurrentFlip], { duration:1, from:0.0, to:1.0 });
}

var secondaryContentFlips = new Array();
var secondaryContentCurrentFlip = 0;

function ftnInitialiseSecondaryContentFlip(){
	var mediaBlockFlip = document.getElementById('secondary-content-flip');
	if(mediaBlockFlip != null){
		var arrSlides = mediaBlockFlip.getElementsByTagName('div');
		if(arrSlides.length > 1){
			for(var i=0; i<arrSlides.length; i++){
				if(arrSlides[i].id.length > 0){
					secondaryContentFlips.push(arrSlides[i].id);
					if (i>0) arrSlides[i].style.display = 'none';
					arrSlides[i].className = '';
				}
			}
			flipCtl = document.getElementById('flip-control2');
			flipCtl.style.display = 'block';
			var flipNext = document.getElementById('flip-next2');
			if(flipNext != null) flipNext.onclick = ftnSecondaryContentFlipNext;
			var flipPrevious = document.getElementById('flip-previous2');
			if(flipPrevious != null) flipPrevious.onclick = ftnSecondaryContentFlipPrevious;
			flipCtl.style.display = 'block';
		}
	}
}

function ftnSecondaryContentFlipNext() {
	Effect.Fade(secondaryContentFlips[secondaryContentCurrentFlip], { duration:1, from:1.0, to:0.0 }); 
	secondaryContentCurrentFlip++;
	if (secondaryContentCurrentFlip == secondaryContentFlips.length) secondaryContentCurrentFlip = 0;
	Effect.Appear(secondaryContentFlips[secondaryContentCurrentFlip], { duration:1, from:0.0, to:1.0 });
}

function ftnSecondaryContentFlipPrevious() {
	Effect.Fade(secondaryContentFlips[secondaryContentCurrentFlip], { duration:1, from:1.0, to:0.0 }); 
	secondaryContentCurrentFlip--;
	if (secondaryContentCurrentFlip == -1) secondaryContentCurrentFlip = secondaryContentFlips.length - 1;
	Effect.Appear(secondaryContentFlips[secondaryContentCurrentFlip], { duration:1, from:0.0, to:1.0 });
}

// This function call should always be at the bottom of the script - it
// needs to run after all functions have been defined
//ftnCaBAdminLoadEvents();

function TopazSwapImg (source){
	imgDiv=document.getElementById("aerial-photo");
	imgDiv.src=source;
}
var locZoom = "in";
function TopazSwapLocImg (elementID){
	var element = document.getElementById(elementID);
	var aerial = document.getElementById("aerial-photo");
	if(locZoom=="in"){
		element.src="/images/buttons/zoom-in.gif";
		aerial.src="/images/mediablock/location-2.jpg";
		element.alt="Zoom in";
		locZoom="out";
	}else if(locZoom=="out"){
		element.src="/images/buttons/zoom-out.gif";
		aerial.src="/images/mediablock/location-1.jpg";
		element.alt="Zoom out";
		locZoom="in";
	}
}
var dirZoom = "in";
function TopazSwapDirImg (elementID){
	var element = document.getElementById(elementID);
	var aerial = document.getElementById("aerial-photo");
	if(dirZoom=="in"){
		element.src="/images/buttons/zoom-in.gif";
		aerial.src="/images/mediablock/directions-2.gif";
		element.alt="Zoom in";
		dirZoom="out";
	}else if(dirZoom=="out"){
		element.src="/images/buttons/zoom-out.gif";
		aerial.src="/images/mediablock/directions-1.gif";
		element.alt="Zoom out";
		dirZoom="in";
	}
}