/* = FLASH VIDEO
-------------------------------------------------
	Creates embed code for Flash player
-------------------------------------------------*/

var requiredMajorVersion = 8;
var requiredMinorVersion = 0;
var requiredRevision = 0;
var jsVersion = 1.0;
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
jsVersion = 1.1;
function JSGetSwfVer(i){
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
      		var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			descArray = flashDescription.split(" ");
			tempArrayMajor = descArray[2].split(".");
			versionMajor = tempArrayMajor[0];
			versionMinor = tempArrayMajor[1];
			if ( descArray[3] != "" ) {
				tempArrayMinor = descArray[3].split("r");
			} else {
				tempArrayMinor = descArray[4].split("r");
			}
      		versionRevision = tempArrayMinor[1] > 0 ? tempArrayMinor[1] : 0;
            flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
      	} else {
			flashVer = -1;
		}
	}

	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;

	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;

	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;

	else {
		
		flashVer = -1;
	}
	return flashVer;
} 

function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision) 
{
 	reqVer = parseFloat(reqMajorVer + "." + reqRevision);

	for (i=25;i>0;i--) {	
		if (isIE && isWin && !isOpera) {
			versionStr = VBGetSwfVer(i);
		} else {
			versionStr = JSGetSwfVer(i);		
		}
		if (versionStr == -1 ) { 
			return false;
		} else if (versionStr != 0) {
			if(isIE && isWin && !isOpera) {
				tempArray         = versionStr.split(" ");
				tempString        = tempArray[1];
				versionArray      = tempString .split(",");				
			} else {
				versionArray      = versionStr.split(".");
			}
			versionMajor      = versionArray[0];
			versionMinor      = versionArray[1];
			versionRevision   = versionArray[2];
			
			versionString     = versionMajor + "." + versionRevision;   
			versionNum        = parseFloat(versionString);
        	
			if ( (versionMajor > reqMajorVer) && (versionNum >= reqVer) ) {
				return true;
			} else {
				return ((versionNum >= reqVer && versionMinor >= reqMinorVer) ? true : false );	
			}
		}
	}	
	return (reqVer ? false : 0.0);
}
function writeFlash(format, id, tag){
	var hasRightVersion = DetectFlashVer(requiredMajorVersion, requiredMinorVersion, requiredRevision);
if(hasRightVersion) {

	switch(format)
		{
			case "large":
				var w=320;
				var h=266;
			break;    
			case "small":
				var w=240;
				var h=206;
			break;
			case "wide":
				var w=320;
				var h=266;
			break;
			default:
				var w=320;
				var h=266;
		}
    var newContent = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'
    + 'width="'+w+'" height="'+h+'"'
    + 'codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab">'
    + '<param name="movie" value="http://www.imperial.ac.uk/imedia/vid/videos.swf"/><param name="quality" value="high" /><param name="bgcolor" value="#000000" /><param name="allowFullScreen" value="true" />'
	+ '<param name="FlashVars" value="vid='+id+'&tag='+tag+'&format='+format+'"/>'
    + '<embed src="http://www.imperial.ac.uk/imedia/vid/videos.swf" quality="high" bgcolor="#000000" '
    + 'width="'+w+'" height="'+h+'" name="FlashVideo" align="middle"'
	+ 'FlashVars="vid='+id+'&tag='+tag+'&format='+format+'"'
    + 'play="true"'
    + 'loop="false"'
    + 'quality="high"'
    + 'allowScriptAccess="sameDomain"'
	+ 'allowFullScreen="true"'
    + 'type="application/x-shockwave-flash"'
    + 'pluginspage="http://www.macromedia.com/go/getflashplayer">'
    + '<\/embed>'
    + '<\/object>';
    document.getElementById("flashcontainer").innerHTML=newContent;  
  } 
}

/* = GET URL
-------------------------------------------------
	Gets the URL of current page
-------------------------------------------------*/

function getURL() {
	var url = location.href;
	return url;
}

/* = CLEAR FIELD
-------------------------------------------------
	clears the value of any inpu field with the
	class name of clearDefault
-------------------------------------------------*/

function clickClear() {
	if(!document.getElementsByTagName) return false;
	
	var inputs = document.getElementsByTagName("INPUT");
	
	for ( var i = 0; i < inputs.length; i++)
	{
		if(inputs[i].className.indexOf("clearDefault") != -1)
		{
			inputs[i].onclick = function() {
				if(this.value == this.defaultValue)
				{
					this.value = "";
				}
				return 0;
			}
			inputs[i].onfocus = function() {
				if(this.value == this.defaultValue)
				{
					this.value = "";
				}
				return 0;
			}
			inputs[i].onblur = function() {
				if(this.value == "")
				{
					this.value = this.defaultValue;
				}
				return 0;
			}
		}
	}
	return 0;
}

/* = FEATURE NEWS AREA
-------------------------------------------------*/

function prepFeaturedNews() {
	if(!document.getElementById || !document.getElementsByTagName) return 0;
	if(!document.getElementById("featured-news-block") 
		|| !document.getElementById("featured-news-list") 
		|| !document.getElementById("featured-news-image")) return 0;
	
	var list = document.getElementById("featured-news-list");
	var imageBlockContainer = document.getElementById("featured-news-image");
	
	var listItem = list.getElementsByTagName("LI");
	
	for( var i = 0; i < listItem.length; i < i++ )
	{
		var link = listItem[i].getElementsByTagName("A")[0];
		if(!link) continue;
		
		listItem[i].onmouseover = function() {
			var link = this.getElementsByTagName("A")[0];
			var href = link.getAttribute("href");
			
			var imageId = href.split("#")[1];

			if(!document.getElementById(imageId)) return 0;
			var imageBlock = document.getElementById(imageId);
			hideAll(imageBlockContainer, "DIV", "photo", "hide");
			for(var j = 0; j < listItem.length; j++)
			{
				listItem[j].className = listItem[j].className.replace(/ ?active ?/g, "");
			}
			imageBlock.className = imageBlock.className.replace(/ ?hide ?/g, "");
			var activateListItem = this;
			if(activateListItem.className) {
				activateListItem.className += " active";
			}
			else {
				activateListItem.className = "active";
			}
			
			return false;
		}
	}
}

/* = HIDE ELEMENTS IN A CONTAINER OF A CERTAIN TYPE, CLASS AND HIDE THEM WITH SPECIFIED CLASS */

function hideAll(container, elementType, elementClass, hideClass) {
	if(!container || !elementType || !elementClass || !hideClass) return 0;
	
	var element = container.getElementsByTagName(elementType);
	
	for(var i = 0; i < element.length; i++)
	{
		if(!element[i].className.match(elementClass)) continue;
		if(element[i].className.match(hideClass)) continue;
		
		if(element[i].className) {
			element[i].className += " hide";
		}
		else {
			element[i].className = "hide";
		}
	}
	return 0;
}

/* = PREP INPUT TYPES
-------------------------------------------------*/

function prepInputs() {

	var inputs = document.getElementsByTagName("INPUT");
	for(var i = 0; i < inputs.length; i++)
	{
		if(inputs[i].getAttribute("type") == "checkbox")
		{
			if(inputs[i].className)
			{
				inputs[i].className += " checkBoxInput";
			}
			else {
				inputs[i].className = "checkBoxInput";
			}
			
		}
		else if(inputs[i].getAttribute("type") == "radio")
		{
			if(inputs[i].className)
			{
				inputs[i].className += " radioInput";
			}
			else {
				inputs[i].className = "radioInput";
			}
		}
		else if (inputs[i].getAttribute("type") == "image")
		{
			if(inputs[i].className)
			{
				inputs[i].className += " submitButton";
			}
			else {
				inputs[i].className = "submitButton";
			}
		}
	}
}

function prepFormReset() {
	var forms = document.getElementsByTagName("FORM");
	for(var i = 0; i < forms.length; i++)
	{
		var links = forms[i].getElementsByTagName("A");
		for(var j = 0; j < links.length; j++)
		{
			
			if(links[j].className.match("reset-link"))
			{
				links[j].parentForm = forms[i];
				links[j].onclick = function() {
					this.parentForm.reset();
					
					return false;
				}
			}
		}
	}
	return 0;
}

/* = PRINT LINKS
-------------------------------------------------
	This function adds the javascript print
	function to the onclick event.  The href of 
	this links should be to a printer friendly page
	if possible
-------------------------------------------------*/

function prepPrintLinks() {
	var link = document.getElementsByTagName("A");
	for(var i = 0; i < link.length; i++)
	{
		if(!link[i].className.match("print-link")) continue;
		
		link[i].onclick = function() {
			print();
			return false;
		}
	}
	return 0;
}

/* = EMAIL A FRIEND LINK
-------------------------------------------------*/

function prepEmailFriend() {
	if(!document.getElementById("action-email") || !document.getElementById("emailFriendForm")) return true;
	if(!document.getElementById("emailHref")) return true;
	var emailLink = document.getElementById("action-email").getElementsByTagName("A")[0];
	var emailForm = document.getElementById("emailFriendForm");
	var hrefArea = document.getElementById("emailHref");

	emailLink.onclick = function() {
		showElement(emailForm);
		return false;
	}
	
	var href = location.href;
	var hrefText = document.createTextNode(href);
	hrefArea.appendChild(hrefText);
	
	var closeLink = emailForm.getElementsByTagName("A");
	for(var i = 0; i < closeLink.length; i++)
	{
		if(!closeLink[i].className.match("close")) continue;
		
		closeLink[i].onclick = function() {
			hideElement(emailForm);
			return false;
		}
	}
}



/* = EXPANDABLE NAVIGATION
-------------------------------------------------*/

function expandableSection(blockId, expElementType, onClickElementType) {
	if(!document.createElement) return false;
	if(!document.getElementById(blockId) || !expElementType) return false;
	
	var container = document.getElementById(blockId);
	var expElement = container.getElementsByTagName(expElementType);
	
	for(var i = 0; i < expElement.length; i++)
	{
		if(!expElement[i].getElementsByTagName("UL").length) continue;
		if(expElement[i].className) {
			expElement[i].className += " expandable";
		}
		else {
			expElement[i].className = "expandable";
		}
		var expLink = expElement[i].getElementsByTagName("A")[0];
		
		var link = document.createElement("A");
		link.setAttribute("href", "#");
		link.setAttribute("title", "Click here to expand the list");
		link.className = "expand-link";
		
		expElement[i].insertBefore(link, expLink);
		
		link.onclick = function() {
			var parentLi = this.parentNode;
			// grab the first list
			var subList = parentLi.getElementsByTagName("UL")[0];
			
			if(subList.className.match("hidden")) {
				showElement(subList);
				if(this.className) {
					this.className += " collapsed";
				}
				else {
					this.className = "collapsed";
				}
			}
			else {
				hideElement(subList)
				this.className = this.className.replace(/ ?collapsed ?/g, "");
			}
			
			return false;
		}
	}
	
	return 0;
}

/* = HIDE ELEMENT
-------------------------------------------------*/

function hideElement(element) {
	if(!element || element.className.match("hidden")) return false;
	
	if(element.className) {
		element.className += " hidden";
	}
	else {
		element.className = "hidden";
	}
	
	return 0;
}

/* = SHOW ELEMENT
-------------------------------------------------*/

function showElement(element) {
	if(!element || !element.className.match("hidden")) return false;
	
	element.className = element.className.replace(/ ?hidden ?/g, "");
	
	return 0;
}

/* INITIALIZE ALL FUNCTION AFTER WINDOW ONLOAD
-------------------------------------------------*/

function init() {
	if(!document.getElementById || !document.getElementsByTagName) return 0;
	// prep functions
	prepFeaturedNews();
	clickClear();
	prepPrintLinks();
	expandableSection("section-nav", "LI", "IMG");
	prepEmailFriend();
	prepInputs();
	prepFormReset();
	
	//SIFR Flash Text Replacement
	if( typeof sIFR == "function") {
		// This is the preferred "named argument" syntax
/*		sIFR.replaceElement(named({sSelector:"body h1", sFlashSrc:"../flash/meta.swf",
			sColor:"#ffffff", sLinkColor:"#ffffff", sBgColor:"#27849a", sHoverColor:"#27849a", 
			nPaddingTop: 0, nPaddingBottom: 0, sFlashVars:"textalign=left&offsetTop=0"}));*/

/*		sIFR.replaceElement(named({sSelector:"#main-content h2", sFlashSrc:"../flash/meta.swf",
			sColor:"#27849a", sLinkColor:"#27849a", sBgColor:"#ffffff", sHoverColor:"#27849a", 
			nPaddingTop: 0, nPaddingBottom: 0, sFlashVars:"textalign=left&offsetTop=0"}));*/

/*		sIFR.replaceElement(named({sSelector:"#sub-content h2", sFlashSrc:"../flash/meta.swf",
			sColor:"#333333", sLinkColor:"#333333", sBgColor:"",sWmode: "transparent", sHoverColor:"", 
			nPaddingTop: 2, nPaddingBottom: 3, sFlashVars:"textalign=left&offsetTop=0"}));*/
	}
}

addLoadEvent(init);

/* = ON LOAD
---------------------------------------------------------------
	add the on load events
---------------------------------------------------------------*/
function addLoadEvent(func) {
	var oldOnLoad = window.onload
	if (typeof window.onload != 'function') 
	{
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldOnLoad();
			func();
		}
	}
}