// Ofqual equivalences diagram imagemap functions - Commented
// Requires jquery
// 01/06/09
// jon.elliott@ofqual.gov.uk

//Globals
var qualseq_running;  //Running?
var qualseq_totalContents; //Total sections
var qualseq_loadingImageSrc = 'http://webarchive.nationalarchives.gov.uk/+/http://www.ofqual.gov.uk/resources/qualseq/styles/images/loader.gif';
var qualseq_diagramSrc = 'http://webarchive.nationalarchives.gov.uk/+/http://www.ofqual.gov.uk/resources/qualseq/images/equivalencies.gif';

//Initial preparation of imagemap links and containers
function qualseq_prepareArea () {
	
	//Preload Image
	var qualseq_image = new Image();
	qualseq_image.src = qualseq_diagramSrc;

	//Pre-flight check for main containers existence
	if (!document.getElementById('qualseq_infoHolder') || !document.getElementById('qualseq_visHolder')) {
		return false;
	}
	
	//Hide infoHolder
	var infoHolder = document.getElementById('qualseq_infoHolder');
	$(infoHolder).hide();
	
	//Attach event handlers to areas
	var areas = document.getElementsByTagName('area');
	for (i=0; i<areas.length; i++) {
		areas[i].onclick = qualseq_showArea;
	}
	
	//Hide contentHolder
	var contentHolder = document.getElementById('qualseq_contentHolder');
	$(contentHolder).hide();
	
	//Get content sections
	var contents = $('.qualseq_section');
	
	//Create contents list
	var contentsListHolder = document.createElement('div');
	contentsListHolder.id = 'qualseq_contentsList';
	$(contentsListHolder).insertBefore('#qualseq_visHolder');
	var contentsList = document.createElement('ol');
	var contentsHeading = document.createElement('h2');
	contentsHeading.appendChild(document.createTextNode('Contents'));
	contentsListHolder.appendChild(contentsHeading);
	
	for (i=0; i<contents.length; i++) {
		var contentsListText = document.createTextNode(contents[i].getElementsByTagName('h2')[0].innerHTML);
		var contentsListItem = document.createElement('li');
		var contentsListLink = document.createElement('a');
		contentsListLink.href = '#qualseq_section'+(i+1);
		contentsListLink.onclick = qualseq_showArea;
		contentsListLink.appendChild(contentsListText);
		contentsListItem.appendChild(contentsListLink);
		contentsList.appendChild(contentsListItem);
	}
	
	contentsListHolder.appendChild(contentsList);
	
	var allSectionsLinkHolder = document.createElement('p');
	var allSectionsLink = document.createElement('a');
	allSectionsLink.id = 'allSectionsLink';
	allSectionsLink.href = '#';
	allSectionsLink.onclick = qualseq_showArea;
	var allSectionsLinkText = document.createTextNode('View all sections');
	allSectionsLink.appendChild(allSectionsLinkText);
	allSectionsLinkHolder.appendChild(allSectionsLink);
	contentsListHolder.appendChild(allSectionsLinkHolder);
	
	//Assign global section counter
	qualseq_totalContents = contents.length;
	
	//Create loading image
	var loadingImage = document.createElement('img');
	loadingImage.id = 'qualseq_loadingImage';
	loadingImage.src = qualseq_loadingImageSrc;
	loadingImage.style.display = 'none';
	document.getElementById('qualseq_visHolder').appendChild(loadingImage);
	
	//Show 1st area info
	qualseq_showArea(1);

	//Scroll to top
	window.scrollTo(0,0);
	
}

//Show detailed section information 
function qualseq_showArea (e) {
	
	//Fix IE6 reload
	var diagram = document.getElementById('qualseq_diagram');
	diagram.src = qualseq_diagramSrc;
	
	if (qualseq_running == true) {
		return false;
	}
	else {
		qualseq_running = true;
	}
	
	
	if (typeof(e) == 'number') {
		var contentId = 'qualseq_section'+e;
		var sectionNo = e;
	}
	else if (this.href) {
		
		// Get event handler and attributes
		var area = this;
		
		//Remove IE outline
		area.blur();

		if (area.id == 'allSectionsLink') {
			var sectionNo = 'all';
		}
		else {
			//Get content id and section number
			var link = area.href;
			var idPos = link.search(/#/i);
			var contentId = link.slice(idPos+1);
			var sectionNo = contentId.replace("qualseq_section", "");
		}
	}
	else {
		return false;
	}	

	// Hide infoHolder and proceed
	var infoHolder = document.getElementById('qualseq_infoHolder');
	if (infoHolder.style.display != 'none') {
		$(infoHolder).slideUp('slow', qualseq_prepareInfo);
	}
	else {
		qualseq_prepareInfo();
	}
	
	//Prepare section information
	function qualseq_prepareInfo () {
		
		//Show loading image
		var loadingImage = document.getElementById('qualseq_loadingImage');
		loadingImage.style.display = 'block';
		
		//Remove existing
		removeInfo();
		
		// Remove existing info
		function removeInfo () {
			
			//If exit button presses
			if (this.className == ('qualseq_infoExit')) {
				document.getElementById('qualseq_visHolder').style.height = 'auto';
				if (infoHolder.style.display != 'none') {
					$(infoHolder).slideUp('slow');
				}
			}
			else {
				//Remove info and pagination
				infoHolder.style.display = "none";
				if (document.getElementById('qualseq_paginationLinks')) {
					var paginationLinks = document.getElementById('qualseq_paginationLinks');
					infoHolder.removeChild(paginationLinks);
				}
				var infoExisting = infoHolder.getElementsByTagName('dl');
				for (i=0; i<infoExisting.length; i++) {
					infoHolder.removeChild(infoExisting[i]);
				}
			}
			
			return false;
			
		}
		
		//Create container
		var infoContent = document.createElement('div');
		infoContent.className = 'qualseq_infoContent';
		
		//Get content then clone
		if (sectionNo == 'all') {
			//clone
			var content = document.getElementById('qualseq_contentHolder');
			var clonedContent = content.cloneNode(true);
			clonedContent.id = 'qualseq_allcontentHolder';
			clonedContent.style.display = 'block';
			
			//title
			var title = document.createElement('h2');
			var titleText = document.createTextNode('Explaining Qualifications');
			title.appendChild(titleText);
			
		}
		else {
			//clone
			var content = document.getElementById(contentId);
			var clonedContent = content.cloneNode(true);
			
			//title
			var title = clonedContent.getElementsByTagName('h2')[0];
			
			//related links
			var contentHolders = clonedContent.getElementsByTagName('div');
			for (i=0; i<contentHolders.length; i++) {
				if (contentHolders[i].className == 'qualseq_links') {
					var linksHolder = contentHolders[i];
					//infoContent.appendChild(linksHolder);
				}
			}
		
		}

		//Create content container
		var infoList = document.createElement('dl');
		
		//Content for title container
		var infoTerm = document.createElement('dt');
		infoTerm.appendChild(title);
		
		//Exit button
		var infoTermExit = document.createElement('a');
		infoTermExit.href= "#";
		infoTermExit.className = 'qualseq_infoExit';
		infoTermExit.onclick = removeInfo;
		var infoTermExitText = document.createTextNode('X');
		infoTermExit.appendChild(infoTermExitText);
		infoTerm.appendChild(infoTermExit);
		
		//Content for info container
		var infoDesc = document.createElement('dd');
		infoContent.appendChild(clonedContent);
		infoDesc.appendChild(infoContent);
		
		//Create footer
		var infoFooter = document.createElement('br');
		infoFooter.className = 'qualseq_infoFooter';
		infoDesc.appendChild(infoFooter);
		
		// Append to list and then to holder
		infoList.appendChild(infoTerm);
		infoList.appendChild(infoDesc);
		infoHolder.appendChild(infoList);
		
		//Create pagination
		var paginationHolder = document.createElement('div');
		paginationHolder.id = 'qualseq_paginationLinks';
		
		if (sectionNo != 'all') {
			//Not first section
			if (sectionNo > 1) {
				var prevLink = document.createElement('a');
				var prevLinkText = document.createTextNode('Prev');
				prevLink.appendChild(prevLinkText);
				prevLink.href="#qualseq_section"+(parseInt(sectionNo)-1);
				prevLink.onclick = qualseq_showArea;
				prevLink.className = 'qualseq_prevLink';
				paginationHolder.appendChild(prevLink);
			}
			
			//Not last section
			if (sectionNo < qualseq_totalContents) {
				var nextLink = document.createElement('a');
				var nextLinkText = document.createTextNode('Next');
				nextLink.appendChild(nextLinkText);
				nextLink.href="#qualseq_section"+(parseInt(sectionNo)+1);
				nextLink.onclick = qualseq_showArea;
				nextLink.className = 'qualseq_nextLink';
				paginationHolder.appendChild(nextLink);
			}
		}
		else {
			var backLink = document.createElement('a');
			var backLinkText = document.createTextNode('Back to top');
			backLink.appendChild(backLinkText);
			backLink.href = '#';
			backLink.onclick = function () { window.scrollTo(0, 600) };
			backLink.className = 'qualseq_backLink';
			paginationHolder.appendChild(backLink);
		}

		//Append pagination
		infoHolder.appendChild(paginationHolder);
	
		//Set visHolder to anticipated height and scroll so in view
		var visHolder = document.getElementById('qualseq_visHolder');
		var hiddenHeight = $('#qualseq_infoHolder').height();
		var visibleHeight = ($('#qualseq_visHolder').height())+($(loadingImage).height());
		visHolder.style.height = (500 + hiddenHeight)+'px';
		
		window.scrollTo(0, 600);

		// Little delay for loading image
		setTimeout(qualseq_showInfo, 500);
		
		return false;
	
	}
	
	//Display info
	function qualseq_showInfo () {
		//Hide loading image
		var loadingImage = document.getElementById('qualseq_loadingImage');
		loadingImage.style.display = 'none';
		
		//Transition effect to show info
		$(infoHolder).slideDown('slow', function () { qualseq_running = false; });
	}
	
	return false;
}

//IE reload image workaround
function fixIEreload(fix) {
	try {
		document.execCommand("BackgroundImageCache", false, fix);
	} catch(err) { }
	return;
}

//On load...
$(document).ready(function() {
	//Do info functions
	qualseq_prepareArea();
	//Fix IE6
	fixIEreload(true);
	//Do mapper functions
	$('.mapper').maphilight();
	
});

