

// ------------------------ 10util.js starts here -----------------------------
/*              Utility functions                    */

ensurePackage('guardian.r2');
guardian.r2.browser = {
	isIE6 : false,
	isIE7 : false,
	isOpera:  !!window.opera,
	isWebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1,
	isSafari2 : (function () {
		var userAgentNumber = RegExp("( Safari/)([^ ]+)").exec(navigator.userAgent);
		if (!userAgentNumber || userAgentNumber.length < 3) {
			return false;
		}
		var mainVersionNumber = userAgentNumber[2].split('.')[0];
		if (parseInt(mainVersionNumber) > 500) { //This is Safari 3
			return false;
		}
		return true;
	})(),
	isGecko:  navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1
};

function getInternetExplorerVersion()
//Returns the version of Internet Explorer or a -1
//(indicating the use of another browser).
{
	var rv = -1; // Return value assumes failure.
	if (navigator.appName == 'Microsoft Internet Explorer') {
		var ua = navigator.userAgent;
		var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
		if (re.exec(ua) != null) rv = parseFloat( RegExp.$1 );
	}
	return rv;
}

function checkVersionIsIE6() {
	var ver = getInternetExplorerVersion();
	if ( ver > -1 ) {
		if ( ver <= 6.0 ) {
			return true;
		}
	}
}

/*@cc_on

if(checkVersionIsIE6()) {
	guardian.r2.browser.isIE6 = true;
}
else {
	guardian.r2.browser.isIE7 = true;
}

@*/

function addEvent(obj, eventType, fn){

	if (typeof obj === "string") {
		obj = document.getElementById(obj);
	}

    /* adds an eventListener for browsers which support it
     Written by Scott Andrew: nice one, Scott */
    if (eventType === "load") {
        //hack me
        loadEventList.addLoadEvent(fn);
        return true;
    }
	if (!obj) {
		return null;
	}
    
    if (obj.addEventListener) {
        obj.addEventListener(eventType, fn, false);
        return true;
    }
    else 
        if (obj.attachEvent) {
            var r = obj.attachEvent("on" + eventType, fn);
            return r;
        }
        else {
            return false;
        }
}

function addClickListenersToMatchingElements(inElement, cssRule, clickListenerCallback) {
		
	var elementsToAddListenersTo = guardian.r2.dom.element.getElementsByCssSelector(cssRule, inElement);
	
	for (var i = 0; i < elementsToAddListenersTo.length; i++) {
		addEvent(elementsToAddListenersTo[i], 'click', clickListenerCallback);	
	}
	
};
	
var loadEventList = [];
loadEventList.addLoadEvent = function(fn){
	if(loadEventList.hasFired) {
		fn();
	} else {
		loadEventList[loadEventList.length] = fn;
	}
};

loadEventList.hasFired = false;
loadEventList.fireLoadEvents = function(){
    for (var i = 0; i < loadEventList.length; i++) {
        loadEventList[i]();
    }
    loadEventList.hasFired = true;
};

/* the following is a hack to replicate DOMContentLoaded in browsers
 other than Firefox.  It is basically copied from
 http://dean.edwards.name/weblog/2006/06/again/
 */
if (guardian.r2.browser.isWebKit && !(_timer)) { // Safari
    var _timer = setInterval(function(){
        if (/loaded|complete/.test(document.readyState)) {
            clearInterval(_timer);
            loadEventList.fireLoadEvents(); // call the onload handler
        }
    }, 100);
}
else 
    if (document.addEventListener) {
        document.addEventListener("DOMContentLoaded", loadEventList.fireLoadEvents, false);
    }
    else {
    // IE HACK
    /*@cc_on @*/
    /*@if (@_win32)
     document.write("<script id='__ie_onload' defer='defer' src='//:'><\/script>");
     var script = document.getElementById("__ie_onload");
     script.onreadystatechange = function() {
	     if (this.readyState == "complete") {
		     loadEventList.fireLoadEvents(); // call the onload handler
	     }
     };
     /*@end @*/
    }

var safeLoadEventList = [];

function addSafeLoadEvent(fn) {
	if (!(guardian.r2.browser.isIE6 || guardian.r2.browser.isIE7)) {
		addEvent(document, 'load', fn);
		return true;
	} else {
		// This is IE6 or 7 and therefore can't have document.body.appendChilds or innerHTMLs until the whole page has loaded.
		// See http://support.microsoft.com/kb/927917 for more information
		safeLoadEventList.push(fn);
		return true;
	}
}

safeLoadEventList.hasFired = false;
safeLoadEventList.fireLoadEvents = function() {
    for (var i = 0; i < safeLoadEventList.length; i++) {
        safeLoadEventList[i]();
    }
    safeLoadEventList.hasFired = true;
};

if ((guardian.r2.browser.isIE6 || guardian.r2.browser.isIE7)) {
	window.attachEvent("onload", safeLoadEventList.fireLoadEvents);
}


function importScript(src, onloadCallback, forceIEtoUseTimers, notifyOnState, onerrorCallback){
	var scriptElem = document.createElement('script');
	scriptElem.setAttribute('src',src);
	scriptElem.setAttribute('type','text/javascript');
	
	notifyOnState = (notifyOnState ? notifyOnState : 'loaded');
	
	if (onloadCallback) {
		
		// from http://ajaxian.com/archives/a-technique-for-lazy-script-loading
		// safari doesn't support either onload or readystate, create a timer
		// only way to do this in safari
	
        if (guardian.r2.browser.isSafari2 || guardian.r2.browser.isOpera || (forceIEtoUseTimers && (guardian.r2.browser.isIE6 || guardian.r2.browser.isIE7))) { // sniff
			importScript.guardianImportScriptTimers[src] = setInterval(function() {
				
				if (/loaded|complete/.test(document.readyState)) {
					clearInterval(importScript.guardianImportScriptTimers[src]);
					try {
						onloadCallback(); // call the callback handler
					} catch (e) {
						if(onerrorCallback) {
							onerrorCallback();
						}
					}
				}
				
			}, 10);
	
		} else {
			// and now the browsers that WORK
			
			scriptElem.onreadystatechange = function () {
			
				if (scriptElem.readyState === 'notifyOnState') {
					onloadCallback();
				}
			};
			scriptElem.onload = onloadCallback;
			scriptElem.onerror = function(){ 
				if(onerrorCallback){
					onerrorCallback();
				}
			};
			
		}
	}

	document.getElementsByTagName('head')[0].appendChild(scriptElem);
}
importScript.guardianImportScriptTimers = {};


function forEachElementOf(list, doThis) {
    var listLength = list.length;
    for(var i=0; i<listLength; i++) {
        doThis( list[i], i);
    }
}

function generateScriptTag(src){
    document.write('<script type="text/javascript" src="' + src + '"></scr' + 'ipt>');
    document.close();
}

function readCookie(name) {
    var nameEQ = name + "=";
    var cookieArray = document.cookie.split(';');
	
    for (var i = 0; i < cookieArray.length; i++) {
        var cookie = cookieArray[i];
		
        while (cookie.charAt(0) == ' ') {
			cookie = cookie.substring(1, cookie.length);
		}
			
        if (cookie.indexOf(nameEQ) === 0) {
			return cookie.substring(nameEQ.length, cookie.length);
		}
    }
	
    return null;
}

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function isExternalSystemOn(system) {
	var extSystems=readCookie("GU_EXT_SYS");
	if(extSystems!==null) { 
		return extSystems.match(system)===null
	}
	return true
	}


// ------------------------- 10util.js ends here ------------------------------





// -------------------- 11image-utils.js starts here ----------------------------

var applyImageMaskImmediate = function applyImageMaskImmediateFactory() {
    var root = '/images/';

    function getMaskUrl( maskName, width, height ) {
        var lowerCaseMaskName = maskName.toLowerCase();
        switch( lowerCaseMaskName ) {
            case "roundedcorners":
                switch (width)  {
                    case 460:
                        return root + '460x276-mask.png';
                    case 300:
                        return root + '300x180-mask.png';
                    case 140:
                        switch(height) {
                            case 84:
                                return root + '140x84-mask.png';
                            case 89:
                                return root + '140x84-mask.png';
                            case 180:
                                return root + '140x180-mask.png';
                            case 120:
                                return root + '140x120-mask.png';
                        }
                        break;
                    case 280:
                        return root + '280x168-mask.png';
                    case 130:
                        switch( height ) {
                            case 78:
                                return root + '130x78-mask.png';
                            case 111:
                                return root + '130x111-mask.png';
                        }
                        break;
                    case 220:
                        return root + '220x132-mask.png';
                }
                break;

            case "article" :
            case "cartoon" :

            	// no mask
            	break;

            default:
                if( width === 140 && height === 84 ) {
                    return root + lowerCaseMaskName + '_140.png';
                }
        }
        return null;
    }

    var applyMaskInIE6 = function(parentNode, maskUrl, width, height) {
        var newImageDiv = document.createElement("div");
        newImageDiv.style.width = width + "px";
        newImageDiv.style.height = height + "px";
        newImageDiv.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+maskUrl+"',sizingMethod='scale')";
        newImageDiv.style.position="absolute";
        newImageDiv.style.top="0";
        newImageDiv.style.left="0";
        newImageDiv.style.zIndex="100";

        parentNode.style.position='relative';
        parentNode.style.width='1px';
        parentNode.style.display='block';
        parentNode.appendChild(newImageDiv);
    }

    var applyMask = function(originalElement, parentNode, maskUrl, width) {
        parentNode.style.width = width + 'px';
        parentNode.style.display = 'block';
        parentNode.style.position = 'relative';

        var newImage = originalElement.cloneNode(false);
        newImage.setAttribute('src', maskUrl);
        newImage.className = 'mask';
        parentNode.appendChild(newImage);
    }

    function applyImageMaskImmediate(originalElement, maskName) {
        var parentNode = originalElement.parentNode;
        var width = Number(originalElement.width);
        var height = Number(originalElement.height);
        var maskUrl = getMaskUrl( maskName, width, height);
        if( maskUrl ) {
            if(guardian.r2.browser.isIE6) {
                applyMaskInIE6(parentNode, maskUrl, width, height);
            } else {
                applyMask(originalElement, parentNode, maskUrl, width);
            }
        }
    }

    return applyImageMaskImmediate;
}();

// -------------------- 11image-utils.js ends here ----------------------------


// -------------------- post-load-images.js starts here ----------------------------

var postLoadImage = function postLoadImageFactory(){
    var imagesToLoad = {};

    function postLoadImage( elementId, url ) {
        imagesToLoad[ elementId ] = url;
    }

    function loadImages() {
        for( var elementId in imagesToLoad ) {
            document.getElementById( elementId ).src = imagesToLoad[ elementId ];
        }
    }
    addEvent(window, "load", loadImages);

    return postLoadImage;
}();

var applyImageMask = function applyImageMaskFactory(){
    var imagesToMask = {};

    function applyImageMask( elementId, maskName ) {
        imagesToMask[ elementId ] = maskName;
    }

    function applyImageMasks() {
        for( var elementId in imagesToMask ) {
            var originalElement = document.getElementById( elementId );
            var parentNode = originalElement.parentNode;
            var parentNodeName = parentNode.nodeName;
            if( parentNodeName.match(/^a$|^div/i) && parentNode.lastChild.className !== 'mask') {
                var maskName = imagesToMask[ elementId ];
                applyImageMaskImmediate(originalElement, maskName);
            }
        }
    }
    addEvent(window, "load", applyImageMasks);

    return applyImageMask;
}();

// -------------------- post-load-images.js ends here ----------------------------


// -------------------- update-content-mask.js starts here ----------------------------

function maskContentImages()  {
    var images = document.getElementsByTagName('img');
    var numberOfImages = images.length;
    var imagesToProcess = [];
    forEachElementOf(images, function(image) {
        imagesToProcess.push( image );
    });

    var maskClass = /([a-zA-Z]+)-mask/;
    var anchorOrDiv = /^a$|^div/i;
    forEachElementOf(imagesToProcess, function(image){
        var matchMaskClass = maskClass.exec(image.className);
        if(matchMaskClass && image.parentNode.nodeName.match(anchorOrDiv)) {
            var maskName = matchMaskClass[1];
            applyImageMaskImmediate(image, maskName);
        }
    });

}

addEvent(window, "load", maskContentImages);

// -------------------- update-content-mask.js ends here ----------------------------


var eneroot = 0;

// Maximum number of dimension results before clicking showAll, but including the showAll link
var maxNumFromEndeca = 26;

function init () {
	shrinkAll();
	// add checking function on page load
	attachValidationToFormsOnPage();
}

function getSearchbox() {
	return document.getElementById('searchbox');
}

function notifyHbox() {
	try {
		_hbLink('{header}{search-gu}','{header}');
	}
	catch(err) {}
}

function guRadioClicked() {
	var searchbox = getSearchbox();
	searchbox.style.backgroundImage = null;
	searchbox.name = 'search';
	document.forms['simple_search_form'].action = this.value;
}

function goUrl(Selected) {
    var newURL = Selected.options[Selected.selectedIndex].value ;

	if (newURL != " " && newURL.match("^http://")){
		document.location.href = newURL;
	} else if (newURL != " ") {
		document.location.href = "http://www.guardian.co.uk" + newURL;
	}
}

function makeDimensionDivName(dimensionName)
{
	var dimensionDivName = dimensionName;

	if (dimensionDivName != null) {
	    dimensionDivName = dimensionDivName.toLowerCase();
	    var tempArray = new Array();
	    tempArray = dimensionDivName.split('+');

	    for(var i=0; i< tempArray.length; i++) {
     	   dimensionDivName = tempArray.join("_");
	    }

	    dimensionDivName = dimensionDivName + 'div';
	}

	return dimensionDivName;
}

function shrinkAll()
{
	shrinkDimensions();
	shrinkDomainSearches();
}

function shrinkDimensions()
{
	if(document.getElementById){
	    var navArea = document.getElementById('navigation');

		if (navArea) {
		    if (navArea.getElementsByTagName) {
		        var dimensionLists = navArea.getElementsByTagName('UL');
		        var moreItem = buildListLink('Show more...');
		        var showAllItem = buildListLink('Show more...');
		        var showAllDim = getQueryVariable('ShowAllDim');
		        var showAllDivName = makeDimensionDivName(showAllDim);

		        for (var i=0; i < dimensionLists.length; i++) {
		            var dimensionName = dimensionLists[i].parentNode.id;

		            if (dimensionName != showAllDivName) {
		                var dimensionItems = dimensionLists[i].getElementsByTagName('LI');

		                if (dimensionItems.length > 6) {
		                    for (var j=5; j < dimensionItems.length; j++) {
	                   		     dimensionItems[j].style.display = 'none';
		                    }

		                    var item;

		                    if ( dimensionItems.length > maxNumFromEndeca - 1 ) {
	                	        item = moreItem.cloneNode(true);
		                    } else {
	        		            item = showAllItem.cloneNode(true);
		                    }

		                    item.firstChild.onclick = expandDimension;
		                    dimensionLists[i].appendChild(item);
		                }
		            }
		        }
		    }
	    }
	}
}

function shrinkDomainSearches()
{
	if(document.getElementById){
		var domainResults = document.getElementById('domain');

		if (domainResults && domainResults.getElementsByTagName) {
			var domainResultsLists = domainResults.getElementsByTagName('UL');
			//var showAllItem = buildListLink('Show more...');

			for (var i=0; i < domainResultsLists.length; i++) {
				var domainItems = domainResultsLists[i].getElementsByTagName('LI');
				if (domainItems.length > 3) {
					for (var j = 2; j < domainItems.length; j++) {
						domainItems[j].style.display = 'none';
					}

					//var item = showAllItem.cloneNode(true);
					//item.firstChild.onclick = expandDomainResults;
					//domainResultsLists[i].appendChild(item);
				}
			}
		}
	}
}

function expandDomainResults() {
	var wholeList = this.parentNode.parentNode;
	var listItems = wholeList.getElementsByTagName('LI');
	var startPoint = 2;

	//wholeList.removeChild(this.parentNode);

	for (var i = startPoint; i < listItems.length; i++) {
	    listItems[i].style.display = 'block';
	}
}

function buildListLink(text) {
    var anchor = document.createElement('A');
    var textNode = document.createTextNode(text);
    anchor.appendChild(textNode);
    anchor.href = '#';
    anchor.className = 'more';
    var item = document.createElement('LI');
    item.appendChild(anchor);

    return item;
}

// Expand list of dimensions on click of More...
function expandDimension()
{
	var wholeList = this.parentNode.parentNode;
	var listItems = wholeList.getElementsByTagName('LI');
	var startPoint = 5;

	var showAllDim = getQueryVariable('ShowAllDim');
	var showAllDivName = makeDimensionDivName(showAllDim);

	wholeList.removeChild(this.parentNode);

	var isShowAll = false;
	if (showAllDivName == wholeList.parentNode.id) {
		isShowAll = true;
	}

	var numToShow = (listItems.length - 1);

	// Handle odd cases like the Publication year, which return all the results all the time
	var isSpecial = false;
	if (!isShowAll && listItems.length > maxNumFromEndeca) {
		isSpecial = true;
		numToShow = maxNumFromEndeca;
	}

	for (var i = startPoint; i < numToShow; i++) {
	    listItems[i].style.display = 'block';
	}

	// Stop any other processing;
	return false;
}

function reallyExpand() {
	var wholeList = this.parentNode.parentNode;
	var listItems = wholeList.getElementsByTagName('LI');
	var startPoint = 25;

	for (var i = startPoint; i < listItems.length; i++) {
	    listItems[i].style.display = 'block';
	}
	//wholeList.removeChild(this.parentNode);

	return false;
}

function ConstructURL(url,removeterms,addterms)
{
        var params = BuildURLArray(url);
        var newurl = "";
        for (var i=0; i<params.length; i++) {
                val = CheckArray(removeterms,params[i][0]);
                if (val == -1)
                        newurl = newurl + "&" + params[i][0] + "=" + params[i][1];
        }
        for (var i=0; i<addterms.length; i++) {
                newurl = newurl + "&" + addterms[i];
        }
        if (newurl.length > 0) {
                newurl = newurl.substr(1);
                newurl = "?"+newurl;
        }
        else {
                newurl = "?N="+eneroot;
        }

        var nVal = GetValue(newurl, "N");

        if(nVal == -1)
        {
                newurl = newurl + "&N=0";
        }

        return newurl;
}

function BuildURLArray(oldurl)
 {
        var returnArray = new Array();
        var url;
        if (oldurl == "CURRENTURL")
                url = location.search;
        else if (oldurl == "BLANKURL") {

        }
        else {
                var tokens = oldurl.split("?");
                url = "?"+tokens[1];
        }
        if (url) {
                url = url.substr(1);
                var params = url.split("&");
                for (var i=0; i<params.length; i++) {
                        var param = params[i].split("=");
                        returnArray[i] = param;
                }
        }
        return returnArray;
}

function CheckArray(removeterms,checkterm)
{
        for (var i=0; i<removeterms.length; i++) {
                if (removeterms[i] == checkterm)
                        return 1;
        }
        return -1;
}

function GetValue(url, term)
{
        var params = BuildURLArray(url);
        for (var i=0; i<params.length; i++) {
                if (params[i][0] == term) {
                        return params[i][1];
                }
        }
        return -1;
}

function getQueryVariable(variable)
{
        var query = window.location.search.substring(1);
        var vars = query.split("&");
        for (var i=0; i < vars.length; i++) {
                var pair = vars[i].split("=");
                if (pair[0] == variable) {
                        return pair[1];
                }
        }
}

function setDocumentDomain() {
	var domainName = document.domain;
	var indexOfDot = domainName.indexOf('.')
	if (indexOfDot> 0) {
		document.domain = domainName.substring(indexOfDot+1);
	}
}

// ------------------------ 12non-browser-utils.js starts here -----------------------------
function ensurePackage(packageName, packageBlock){
    var package_parts = packageName.split(".");
    var package_so_far = this;
    for (var i = 0; i < package_parts.length; i += 1) {
        var package_part = package_parts[i];
        if (!package_so_far[package_part]) {
            package_so_far[package_part] = {};
        }
        package_so_far = package_so_far[package_part];
    }
    if (packageBlock) {
        packageBlock(package_so_far);
    }
    return package_so_far;
}
// ------------------------ 12non-browser-utils.js ends here -----------------------------

// ------------------------ Endeca table utils starts here -----------------------------

function submitForm(Selected){
	var elementName = Selected.name;
	if(elementName=='Subject') {
		document.EducationForm.SearchBySubject.value='true';
	}
	if (elementName != "Institution") {
		Selected.form.Institution.selectedIndex = 0;
	}
	document.EducationForm.SortOrderDirection.value = "";
	document.EducationForm.SortOrderColumn.value = "";
	document.EducationForm.FirstRow.value = "";
	document.EducationForm.submit();
}

function gotoRow(rownum) {

	document.EducationForm.Institution.selectedIndex = 0;
	document.EducationForm.FirstRow.value = rownum;
	document.EducationForm.submit();
	return false;
}

function orderResults(column, direction) {

	document.EducationForm.Institution.selectedIndex = 0;
	document.EducationForm.FirstRow.value = 0;
	document.EducationForm.SortOrderColumn.value = column;
	document.EducationForm.SortOrderDirection.value = direction;
	document.EducationForm.submit();
	return false;
}

// ------------------------ Endeca table utils ends here -----------------------------




// ------------------------ General 0,,,00.js starts here -----------------------------

// Cookie handling functions

function setCookie(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + escape(value) +
        ((expires) ? "; expires=" + expires.toGMTString() : "") +
        ((path) ? "; path=" + path : "") +
        ((domain) ? "; domain=" + domain : "") +
        ((secure) ? "; secure" : "");
}

function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1)
    {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    }
    else
    {
        begin += 2;
    }
    var end = document.cookie.indexOf(";", begin);
    if (end == -1)
    {
        end = dc.length;
    }
    return unescape(dc.substring(begin + prefix.length, end));
}

function deleteCookie(name, path, domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" + 
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

// RegPSS stack functions
function URLStack_getCookie(name) {
	if (!document.cookie) {
		return '';
	}
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	} else
		begin += 2;

	var end = document.cookie.indexOf(";", begin);
	if (end == -1)
	end = dc.length;
	return unescape(dc.substring(begin + prefix.length, end));
}

function URLStack_setCookie(name, value) {
  var curCookie = name + "=" + escape(value) +
      "; domain=.guardian.co.uk; path=/"
  document.cookie = curCookie;
}
function URLStack_push(url) {
	var cookie = URLStack_getCookie('GU_ST');
	var stack = cookie ? cookie.split('|') : new Array();

	if(stack.length == 0 || (stack.length > 0 && stack[stack.length-1] != url)) {
		stack[stack.length] = url;
		URLStack_setCookie('GU_ST',stack.join('|'));
	}
	return true;
}
function URLStack_pop() {
	var cookie = '|' + URLStack_getCookie('GU_ST');
	var x = cookie.lastIndexOf('|');
	var url = cookie.substring(x + 1);
	URLStack_setCookie('GU_ST',cookie.substring(0, x));
	return url;
}
function URLStack_peek() {
	var cookie = '|' + URLStack_getCookie('GU_ST');
	return cookie.substring(cookie.lastIndexOf('|') + 1);
}

function URLStack_kill() {
	if (URLStack_getCookie('GU_ST') != '') {
		URLStack_setCookie('GU_ST','');
	}
}

// RegPSS toolbar functions.

function gu_display_regpss_toolbar() {
	var theseCookies = document.cookie;
	var gu_me = getCookie('GU_ME');
	var spacer = '<img' + ' src="http://image.guardian.co.uk/sys-images/Users/Pix/Site_furniture/2003/02/20/toolbar_divider_transparent.gif" width="3" height="10" alt="|">';

	URLStack_kill();
	if (gu_me && gu_me.length > 0) {
		document.write(gu_me);
		document.write(' ' + spacer + ' ');
		document.write('<a' + ' href="http://users.guardian.co.uk/savedstories/0,,,00.html">Saved stories</' + 'a>');
		document.write(' ' + spacer + ' ');
		document.write('<a' + ' href="http://users.guardian.co.uk/mydetails/0,,,00.html">My details</' + 'a>');
		document.write(' ' + spacer + ' ');
		document.write('<a' + ' href="javascript:URLStack_push(document.location);location.href=\'http://users.guardian.co.uk/signout/tr/1,,,00.html\'">Sign out</' + 'a>');
	} else {
		document.write('<a' + ' href="javascript:URLStack_push(document.location);location.href=\'http://users.guardian.co.uk/signin/tr/1,,-1,00.html\'">Sign in</' + 'a>');
		document.write(' ' + spacer + ' ');
		document.write('<a' + ' href="javascript:URLStack_push(document.location);location.href=\'http://users.guardian.co.uk/register/1,,-1,00.html\'">Register</' + 'a>');
	}
}
function gu_window(url, name, opts) {
	newwindow = window.open(url, name, opts);
	if (window.focus) {
		newwindow.focus();
	}
	return false;
}

// ------------------------ General 0,,,00.js ends here -----------------------------

// add onsubmit event to all forms on page
function attachValidationToFormsOnPage() {
	for( var i = 0; i < document.forms.length; ++i) {
		addEvent(document.forms[i], 'submit', validateForm)
	}
}

//if it is null, display warning
function highlightAndFadeInput(inputElement) {
	var colourLevel = 1;
	var step = function() {
		var hex = colourLevel.toString(16);
		inputElement.style.backgroundColor = '#FFFF'+hex+hex;
		if(colourLevel<15) {
			colourLevel+=1;
			setTimeout(step, 100);
		}
	};
	setTimeout(step, 100);
}

//check form submission is not null
function validateForm(e) {
	theForm = e.target || window.event.srcElement;
	for(var i = 0; i < theForm.elements.length; ++i) {
		if(theForm.elements[i].name=='search' && !theForm.elements[i].value) {
			highlightAndFadeInput(theForm.elements[i]);
			guardian.r2.event.stop(e);
		}
	}
}





addEvent(document, 'load', init);