/*
-----------------------------------------------
Wheel: Standard scripts
Version: $Id: mainscript.js,v 1.20 2006/12/19 18:01:34 willh Exp $
----------------------------------------------- */

/* Load events
---------------------------------------*/
/* addLoadEvent(doPopups) use advanced 'getNewWindowLinks' instead*/
addLoadEvent(getNewWindowLinks)
addLoadEvent(setupDynamicInputText)
addLoadEvent(LongLists)
addLoadEvent(SearchOptions)
addLoadEvent(sharePrice)
addLoadEvent(dropNavs)
//addLoadEvent(startSWFObjects)
//addLoadEvent(checkForAnchor)
//addLoadEvent(doHelpLinks)

/* Basic library functions
---------------------------------------*/
getElementsByClassName = function(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    arrElements = null;
    strClassName = null;
    oRegExp = null;
    oElement = null;
    return (arrReturnElements)
}
function insertAfter(newElement,targetElement) {
	var parent = targetElement.parentNode;
	if ( parent.lastChild == targetElement ) {
		parent.appendChild(newElement);
	} else {
		parent.insertBefore(newElement,targetElement.nextSibling);
	}
}
String.prototype.trim=function trim(){
    return this.replace(/^\s*|\s*$/g,'');
}
/* Global onLoad Event function handler */
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
	  		oldonload();
	  		func();
		}
	}
}
/* Event handlers */
function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}
function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

/* Advanced popup functions
---------------------------------------*/
/* Create the new window */
function openInNewWindow(e) {
	var event;
	if (!e) event = window.event;
	else event = e;
	// Abort if a modifier key is pressed
	if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) {
		return true;
	}
	else {
		// Change "_blank" to something like "newWindow" to load all links in the same new window
	    var newWindow = window.open(this.getAttribute('href'), '_blank');
		if (newWindow) {
			if (newWindow.focus) {
				newWindow.focus();
			}
			return false;
		}
		return true;
	}
}
/*
Add the openInNewWindow function to the onclick event of links with a specified class name
*/
function getNewWindowLinks() {
	// Check that the browser is DOM compliant
	if (document.getElementById && document.createElement && document.appendChild) {
		// Change this to the text you want to use to alert the user that a new window will be opened
		var strNewWindowAlert = " (opens in a new window)";
		// Find all links
		var links = document.getElementsByTagName('a');
		var objWarningText;
		var link;
		for (var i = 0; i < links.length; i++) {
			link = links[i];
			// Find all links with a class name of "newwin"
			if (/\bnewwin\b/.test(link.className)) {
				// Create an em element containing the new window warning text and insert it after the link text
				//objWarningText = document.createElement("em");
				//objWarningText.appendChild(document.createTextNode(strNewWindowAlert));
				//link.appendChild(objWarningText);
				link.title = "This link will open a new window";
				link.onclick = openInNewWindow;
			}
		}
		objWarningText = null;
	}
}

/* Basic popup functions
---------------------------------------*/
function openLink(oururl,features,winname) { // SP2 friendly popups hopefully
	if (oururl) {
		if(!features) { features="" }
		if(!winname) { winname="" }
		try	{		    
			window.open(oururl,winname,features);		
			return false;
		} catch (e)	{
			return true; // Just use normal link if popup cannot open
		}
	}
}
function doPopups() { // Open links .'class' in new windows
	if (!document.getElementsByTagName) return false;		
	
	var links = document.getElementsByTagName("a");  
	for (var i=0; i < links.length; i++) {			
			
		if (links[i].className.match("newwin")) { // Open new window
			links[i].onclick = function() {
				openLink(this.href);
				return false;
			}
			links[i].title = "This link will open in a new window";
			
		} else if (links[i].className.match("popup")) {	// Open popup 
			links[i].onclick = function() {
//			Generic popup
//				openLink(this.href,"width=550,height=490,resizable=1,scrollbars=1");
//			Fully specified features - No toolbars etc
				openLink(this.href,"width=550,height=490,resizable=0,scrollbars=1,navigation=0,menubar=0,location=0,status=0,toolbar=0");
//			Specify window name to prevent duplicates
//				openLink(this.href,"width=550,height=490,resizable=1,scrollbars=1","windowNameHere");
				return false;
			}
			links[i].title = "This link will open in a new window";			
				
		}
		
	}  
}

/*  Flash Objects
----------------------------------------------- */
function startSWFObjects() {
	if (!document.getElementById) return false;

/* ** example use **
	if (document.getElementById("flashholder-1")) {
		var so = new SWFObject("images/static.swf", "statictest", "229", "190",  "8", "#fefcf5", true);	// source, name&id, width, height, Flash version, background colour, useExpressInstall, quality, redirectUrl, detectKey
		//so.addParam("scale", "noscale"); // param
		//so.addVariable("container", "browser"); // flashvar
		so.write("flashholder-1"); // element to write flash into
	}
** end example use ** */

}

/* FAQ highlighter functions
-----------------------------------*/
function doHelpLinks() { // setup highlighting from links
	if (!document.getElementById) return false;
	if (document.getElementById("faqs")) {
		var links = document.getElementById("faqs").getElementsByTagName("a")
		for (var i=0; i < links.length; i++) {
			links[i].onclick = function() {
			jump(this.href);
			}
		}
	} else {
		return false;
	}
}
var theID = ""; /* I'm the heading ID to style on jump */
function highlighter(styleloop) {
	if (!document.getElementById) return false;
	var limit = 6;
	if (styleloop == 1) {
		document.getElementById(theID).className = "faq-step" + styleloop.toString();
		setTimeout("highlighter(" + (styleloop + 1) + ")", 1000); /* Pause on initial colour */
	} else if (styleloop <= limit) {
		document.getElementById(theID).className = "faq-step" + styleloop.toString();
		setTimeout("highlighter(" + (styleloop + 1) + ")", 33);
	} else {
		document.getElementById(theID).className = "faq-step0";
	}
}
function jump(target) {
	if (!document.getElementById) return false;
	if (target)	{
		if ( target.indexOf("#") >= 0 ) { //Check for anchorness			
			if ( (theID != "") && document.getElementById(theID) ) { //Clear and check for previous instance
				document.getElementById(theID).className = "faq_off";
			}			
			theID = target.substring(target.indexOf("#")+1);			
			if (document.getElementById(theID)) {
				highlighter(0);
			} else {
				//alert("not found: "+theID);
			}			
		}
	}
}
function checkForAnchor() {
	if (!document.getElementById("faqs")) return false;
	if (location.hash && location.hash!="#content") {
		jump(location.hash);
	}
}

/* Input field text population
-----------------------------------*/
/* Takes current value of form INPUTS and handles clearing and repopulating on focus */
function setupDynamicInputText() {
	var inputs = getElementsByClassName(document,"input","dyna-text");
	for(var i=0; i<inputs.length; i++){
		var target=inputs[i];
		target.savedText = target.value; // keep track of the original input value
		target.onfocus=function(){
			this.value = this.value.trim()
			if (this.value == this.savedText) {
				this.value = "";
			}
		}
		target.onblur=function(){
			this.value = this.value.trim()
			if (this.value == "") {
				this.value = this.savedText;
			}
		}
	}
}

/* Long Lists
-----------------------------------*/
function LongLists() {
	if (!document.getElementById) return false;
	
	var longLists = getElementsByClassName(document,"ul","long-list");
	for(var ll=0; ll<longLists.length; ll++){
	
		var numberToShow = 3;
		var target = longLists[ll];
		var items = target.getElementsByTagName("li");  
		var isLong = false;
		// Loop through list elements and hide them afer 'numberToShow'
		for (var i=0; i < items.length; i++) {
			if ( i>(numberToShow-1) ) {
				if (items[i].className == "" || items[i].className == "js-postit") {
					items[i].className = "postit";
				} else {
					items[i].className = items[i].className + " postit";
				}
				isLong = true;
			}
		}
		// If we've hidden some append the expansion link
		if (isLong) {
			seeMore = document.createElement("li");
			seeMore.className = "see-more";
			seeMoreLink = document.createElement("a");
			seeMoreLink.href = "#";
			seeMoreLinkText = "More ...";
			listHeading = longLists[ll].previousSibling; // Find heading for list
			if(!listHeading.tagName) {  // Fix for Mozilla needing two sibling steps
				listHeading = listHeading.previousSibling;
			}
			if(listHeading.tagName.toLowerCase() == "h3" && listHeading.childNodes[0]) {
				listHeadingValue = listHeading.childNodes[0].nodeValue.toLowerCase();
				if (listHeadingValue != "") {
					seeMoreLinkText = "More " + listHeadingValue + "...";
				}
			}
			seeMoreLink.appendChild(document.createTextNode(seeMoreLinkText));
			seeMore.appendChild(seeMoreLink);
			target.appendChild(seeMore);
			// Attach reveal functionality to the link
			seeMoreLink.onclick = function(){
				parentNode = this.parentNode.parentNode;
				var hiddens = parentNode.getElementsByTagName("li"); 
				for (var j=0; j < hiddens.length; j++) {			
					if (/\bpostit\b/.test(hiddens[j].className)) {
						tempClass = hiddens[j].className.replace("postit", "");
						hiddens[j].className = tempClass;
					} else if (/\bsee-more\b/.test(hiddens[j].className)) {
						parentNode.removeChild(hiddens[j])
					}
				}
				return false;
			}
		}
		
	} // end for
		
}

/* Press-Search
-----------------------------------*/
function SearchOptions() {
	if (!document.getElementById) return false;
	if (document.getElementById("search-advanced-wrap") && document.getElementById("search-options-foot")) {
		
		var target = document.getElementById("search-advanced-wrap");
		var footer = document.getElementById("search-options-foot");
		var defaultLinkText = "More search options";
		var firstRun = true;

		if (document.getElementById("search-switch")) {
			temp = document.getElementById("search-switch")
			footer.removeChild(temp)
			firstRun = false;
		} else {
			target.linkText = defaultLinkText;
		}
		seeMore = document.createElement("p");
		seeMore.id = "search-switch";
		seeMoreLink = document.createElement("a");
		seeMoreLink.className = "search-trigger";
		seeMoreLink.href = "#";
		seeMoreLink.appendChild(document.createTextNode(target.linkText));
		seeMore.appendChild(seeMoreLink);
		footer.appendChild(seeMore);
		seeMoreLink.onclick = function(){
			SearchOptions()
			return false;
		}
		
		if (/\bhideme\b/.test(target.className)) {
			target.className = "";
			$("fieldset#search-options-fields").find("div#search-advanced-wrap").slideDown("slow"); 
			target.linkText = "More search options";
		} else {
			target.className = "hideme";
			$("fieldset#search-options-fields").find("div#search-advanced-wrap").slideUp("slow"); 
			target.linkText = "Fewer search options";
		}
	
	}	
}
function pressSearchOLD() {
	if (!document.getElementById) return false;
	if (document.getElementById("news-search-advanced")) {
		var target = document.getElementById("news-search-advanced");
		var footer = document.getElementById("news-search-foot");
		if (/\bpostit\b/.test(target.className)) {
			target.className = "";
			linkText = "Fewer search options";
		} else {
			target.className = "postit";
			linkText = "More search options";
		}
		if (document.getElementById("news-search-switch")) {
			temp = document.getElementById("news-search-switch")
			footer.removeChild(temp)
		}
		seeMore = document.createElement("p");
		seeMore.id = "news-search-switch";
		seeMoreLink = document.createElement("a");
		seeMoreLink.href = "#";
		seeMoreLink.appendChild(document.createTextNode(linkText));
		seeMore.appendChild(seeMoreLink);
		footer.appendChild(seeMore);
		seeMoreLink.onclick = function(){
			pressSearch()
			return false;
		}	
	}	
}

/* Share Price
-----------------------------------*/
function checkShareValues() {
	if ( 
		typeof LS_SharePrice == 'undefined' 
		|| typeof LS_Change == 'undefined' 
		|| typeof LS_TimeStamp == 'undefined' 
		|| typeof LS_DateStamp == 'undefined' 
		) 
	{
		return false;
	} 
	return true;
}

function sharePrice() {

	if(checkShareValues()) {
		var shareMove = "stable";
		var sharePath = sharesPathStable
		if (LS_Change > 0) {
			shareMove = "up";
			sharePath = sharesPathUp
		} else if (LS_Change < 0) {
			shareMove = "down";
			sharePath = sharesPathDown
		}
		var shares = getElementsByClassName(document,"p","mini-shares");
		
		
		for(var s=0; s<shares.length; s++){
			var target=shares[s];
			
			miniShare = document.createElement("p");
			miniShare.className = "mini-shares";
					
			miniShareFigures = document.createElement("div");
			miniShareFigures.className = "mini-shares-container";
			
			miniSharePrice = document.createElement("span");
			miniSharePrice.className = "mini-shares-price";
			miniSharePrice.appendChild(document.createTextNode(' '+LS_SharePrice+' '));
			miniShareFigures.appendChild(miniSharePrice);
				
			miniShareChange = document.createElement("span");
			miniShareChange.className = "mini-shares-change";
			miniShareChange.appendChild(document.createTextNode(' '+LS_Change+' '));
			miniShareFigures.appendChild(miniShareChange);
			
			miniShare.appendChild(miniShareFigures);
			
			miniShareDateTime = document.createElement("em");
			miniShareDateTime.appendChild(document.createTextNode(LS_DateStamp + ' ' + LS_TimeStamp));
			miniShare.appendChild(miniShareDateTime);
			
			var parent = target.parentNode;
			insertAfter(miniShare,target)
			parent.removeChild(target)
		}
	}

}

/* Dropdown Navigation
---------------------------------------*/
// Funtionality for dropdown navigation to make useful in the 
// dev environment where server side redirects are not available.
function dropNavsRedirect(target) {
	var selectedOption = target.selectedIndex;
	if (selectedOption > -1) {
		var path = target.options[selectedOption].value
		if (path !="") {
			window.location = path;
		}
	}
}
function dropNavs() {
	var fieldsets = document.getElementsByTagName("fieldset");
	for (var i = 0; i < fieldsets.length; i++) {
		var fieldset = fieldsets[i];
		if ( fieldset.id.match("world-locations") || fieldset.id.match("locale-locations") || fieldset.className.match("nav-selector") || fieldset.className.match("job-app-mod") ) {
			var selectField = fieldset.getElementsByTagName('select')[0];
			var submitField = getElementsByClassName(fieldset,"input","submit")[0];
			submitField.target = selectField;
			submitField.onclick = function() { 
				dropNavsRedirect(this.target);
				return false;
			}
		}
	}
} 

function toggleDiv(containerId) {
	var container = document.getElementById(containerId);
	
	if(container.style.display=='block') {
		container.style.display='none';
	}
	else {
		container.style.display='block';
	}
	
	
	
}
