
// Javascript global functions

window.addEvent('domready', pdfLinks);
window.addEvent('domready', externalLinks);
window.addEvent('domready', debugMode);
window.addEvent('domready', generateToolTips);
window.addEvent('domready', generateImgLinks);

// utility functions

function setElementText(text, id)
{
	var el = document.getElementById(id);
	
	if(el != null)
	{
		el.innerHTML = text;
	}
}

function debugMode()
{
	var debugDIVs = new Array();
	
	$$('div.debug').each(function(item){
		debugDIVs.push(item.getElement('ul'));
	});
	
	if (debugDIVs.length > 0){
		$(document.body).setStyle('background-position','center 32px');
	}
	
	debugDIVs.each(function(object){
		object.state = 'closed';
		object.addEvent('click', function(){
			if(this.state == 'open'){ 
				this.setStyles({height: '14px', width: '20px'});
				this.getParent('div').setStyle('z-index',998);
				this.getParent('div').setStyle('width','26px');
				this.state = 'closed';
				debugDIVs.each(function(DIV){
					DIV.setStyles({height: '14px', width: '20px'});
					DIV.getParent('div').setStyle('z-index',998);
					DIV.getParent('div').setStyle('width','26px');
					if(DIV.state == 'open'){ DIV.state = 'closed' }
					});
			} else {
				debugDIVs.each(function(DIV){
					DIV.setStyles({height: '14px', width: '20px'});
					DIV.getParent('div').setStyle('z-index',998);
					DIV.getParent('div').setStyle('width','26px');
					if(DIV.state == 'open'){ DIV.state = 'closed' }
					});
				this.setStyles({height: 'auto', width: '400px'});
				this.getParent('div').setStyle('z-index',999);
				this.getParent('div').setStyle('width','404px');
				this.state = 'open';
			}
		});
		object.addEvent('mouseover', function(){
			this.setStyles({cursor: 'pointer'});
		});
	});
}


function pleaseWait(overID, show)
{
	if(!document.pleaseWaitDIV)
	{
		var div = document.createElement("div");
		
		div.className = "pleaseWait";
		div.style.display = "none";
		
		document.body.appendChild(div);
		
		document.pleaseWaitDIV = div;
	}
	
	if(show)
	{
		var el = $(overID);
		
		var tl = topLeft(el);
		var theadHeight = el.getElement('thead').offsetHeight;
		var tbodyHeight = el.getElement('tbody').offsetHeight;
		
		var w = el.offsetWidth - 1;
		var h = tbodyHeight;
		var t = tl.Top + theadHeight - 2;
		var l = tl.Left - 1;
		
		document.pleaseWaitDIV.style.width = w + "px";
		if(h < 10) { h = 57 }
		document.pleaseWaitDIV.style.height = h + "px";
		document.pleaseWaitDIV.style.top = t + "px";
		document.pleaseWaitDIV.style.left = l + "px";;
		
		document.pleaseWaitDIV.style.display = "block";
	}
	else
	{
		document.pleaseWaitDIV.style.display = "none";
	}
}

function topLeft(el)
{
	var x, y = 0;

    x = el.offsetLeft;
	y = el.offsetTop;

	el = el.offsetParent;

	while(el != null)
	{
		x = parseInt(x) + parseInt(el.offsetLeft);
		y = parseInt(y) + parseInt(el.offsetTop);
		
        el = el.offsetParent;
	}

	return {Top: y, Left: x};
}


function qstring(name, qs)
{
	var ret = null;
	
	if(!qs) {qs = window.location.search.substring(1);}

	if(name)
	{
		var pairs = qs.split("&");
		
		for(i = 0; i < pairs.length && ret == null; i++)
		{
			var bits = pairs[i].split("=");
			
			if(bits[0] == name)
			{
				ret = unescape(bits[1]);
			}
		}
	}
	else
	{
		ret = (qs == "") ? null : qs;
	}
	
	return ret;
}


function cleanText(val)
{
	var s = "" + val;
	
	s = s.replace(new RegExp("[\\n\\r\\t]"), " ");
	s = s.replace(new RegExp(" {2,}"), " ");
	s = trim(s);
	
	return s;
}
		
function checkClass(el, name)
{
	var s = " " + el.className + " ";
	
	return (s.indexOf(" " + name + " ") != -1);
}
		
function ebus_addClass(el, name)
{
	var s = " " + el.className + " ";
	
	if(s.indexOf(" " + name + " ") == -1)
	{
		el.className += " " + name;
	}
}

function ebus_removeClass(el, name)
{
	var s = " " + el.className + " ";
	
	el.className = trim(s.replace(new RegExp(" " + name + " "), " "));
}

function replaceClass(el, oldName, newName)
{
	ebus_removeClass(el, oldName);
	ebus_addClass(el, newName);
}

function trim(str)
{
	str = str.replace(new RegExp("^ +"), "");
	str = str.replace(new RegExp(" +$"), "");
	
	return str;
}

function ebus_getChildByName(el, name)
{
	var ret = null;
	
	for(var i = 0; i < el.childNodes.length && ret == null; i++)
	{
		var el2 = el.childNodes[i];
		
		if(el2.name == name || (el2.attributes && el2.attributes["name"] && el2.attributes["name"].value == name))
		{
			ret = el.childNodes[i];
		}
		else
		{
			if(el.childNodes)
			{
				ret = ebus_getChildByName(el.childNodes[i], name);
			}
		}
	}
	
	return ret;
}

function ebus_getChildByID(el, id)
{
	var ret = null;
	
	for(var i = 0; i < el.childNodes.length && ret == null; i++)
	{
		var el2 = el.childNodes[i];
		
		if(el2.id && el2.id == id)
		{
			ret = el2;
		}
		else
		{
			if(el2.childNodes)
			{
				ret = ebus_getChildByID(el2, id);
			}
		}
	}
	
	return ret;
}

function ebus_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 ebus_readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function ebus_eraseCookie(name) {
	ebus_createCookie(name,"",-1);
}


//------------------------------------------------------
// Expand Collapse
//------------------------------------------------------

function getEvent(_event)
{
	var isIE = _event.srcElement;
	
	var el = (isIE) ? _event.srcElement : _event.target;
	
	if (el.className.substring(0, 13) == "tree_heading_") 
	{
		var sibl = el.nextSibling;
		var strURL = document.URL;
		var loop = 0;
		
		while (sibl.tagName != "DIV" && loop++ < 100) 
		{
			sibl = sibl.nextSibling;
		}
		
		var parent = (isIE) ? sibl.parentElement : sibl.parentNode;
		var isCollapsed = (sibl.className == "tree_collapsed");

		if (parent.currentExpandedEl) 
		{
			parent.currentEl.className = "tree_heading_collapsed";
			parent.currentExpandedEl.className = "tree_collapsed";
		}
				 
		sibl.className = (isCollapsed) ? "tree_expanded" : "tree_collapsed"; 
		el.className = (isCollapsed) ? "tree_heading_expanded" : "tree_heading_collapsed";
	}
}

//------------------------------------------------------
// Display warning dialog on linking to external site
//------------------------------------------------------

// define all henderson "internal" domains

var g_internalDomains = new Array();

g_internalDomains.push("(www|www2|www3|go|wms01).henderson.(com|co.uk)");
g_internalDomains.push("(www|sharedata|secure).itshenderson.(com|co.uk)");
g_internalDomains.push("(www|www2|www3).moneymovesmarkets.(com|co.uk)");
g_internalDomains.push("(www|www2|www3).newstaram.(com|co.uk)");
g_internalDomains.push("www.hendersongroupplc.(com|co.uk)");
g_internalDomains.push("usretail.thesource");
g_internalDomains.push("asset.tv");
g_internalDomains.push("www.asset.tv");
g_internalDomains.push("ecross.bnpparibas.(com|co.uk)");
g_internalDomains.push("www.nsimanagers.com");
g_internalDomains.push("webfund6.financialexpress.net/clients/newstar/dailypricesintl.aspx");
g_internalDomains.push("www-uk.computershare.com");
g_internalDomains.push("www-au.computershare.com");
g_internalDomains.push("phx.corporate-ir.net");
g_internalDomains.push("activeaccess.henderson.com");
g_internalDomains.push("prospectus-express.newriver.com");
g_internalDomains.push("prtdocs.newriver.com");
g_internalDomains.push("www.manageyourinvestments.co.uk/einvestor/ci/");
g_internalDomains.push("henderson.kuluvalley.com");
g_internalDomains.push("www.77tracking.com/redirect.ashx");
g_internalDomains.push("www.investorcentre.com");
g_internalDomains.push("www.hendersonalphagen.com");
g_internalDomains.push("www.hendersondelivered.com");
g_internalDomains.push("mediazone.brighttalk.com");


// Gartmore launch: From here...

g_internalDomains.push("gartmore.com");
g_internalDomains.push("gartmore.co.uk");
g_internalDomains.push("gartmoreevents.co.uk");
g_internalDomains.push("gartmorenews.co.uk");
g_internalDomains.push("gartmorelogo.com");
g_internalDomains.push("absolutereturn.info");
g_internalDomains.push("gartmore.co.jp");
g_internalDomains.push("gartmore.it");
g_internalDomains.push("gartmore.eu");
g_internalDomains.push("gartmore.tv");
g_internalDomains.push("gartmoreeuropeaninvtrust.co.uk");
g_internalDomains.push("gartmoreeuropeaninvtrust.com ");
g_internalDomains.push("gartmorefledglingtrust.co.uk");
g_internalDomains.push("gartmorefledglingtrust.com");
g_internalDomains.push("gartmoreglobaltrust.co.uk");
g_internalDomains.push("gartmoreglobaltrust.com");
g_internalDomains.push("gartmoregrowthopps.co.uk");
g_internalDomains.push("gartmoregrowthopps.com");
g_internalDomains.push("gartmoreifa.co.uk");
g_internalDomains.push("gartmoreirishgrowthfund.co.uk");
g_internalDomains.push("gartmoreirishgrowthfund.com");
g_internalDomains.push("gartmoreprivateequity.co.uk");
g_internalDomains.push("gartmoreprivateequity.com");
g_internalDomains.push("gartmoresmallercostrust.co.uk");
g_internalDomains.push("gartmoresmallercostrust.com");
g_internalDomains.push("gartmoretv.co.uk");
g_internalDomains.push("gartmoretv.com");
g_internalDomains.push("www.gartmore.com");
g_internalDomains.push("www.gartmore.co.uk");
g_internalDomains.push("www.gartmoreevents.co.uk");
g_internalDomains.push("www.gartmorenews.co.uk");
g_internalDomains.push("www.gartmorelogo.com");
g_internalDomains.push("www.absolutereturn.info");
g_internalDomains.push("www.gartmore.co.jp");
g_internalDomains.push("www.gartmore.it");
g_internalDomains.push("www.gartmore.eu");
g_internalDomains.push("www.gartmore.tv");
g_internalDomains.push("www.gartmoreeuropeaninvtrust.co.uk");
g_internalDomains.push("www.gartmoreeuropeaninvtrust.com ");
g_internalDomains.push("www.gartmorefledglingtrust.co.uk");
g_internalDomains.push("www.gartmorefledglingtrust.com");
g_internalDomains.push("www.gartmoreglobaltrust.co.uk");
g_internalDomains.push("www.gartmoreglobaltrust.com");
g_internalDomains.push("www.gartmoregrowthopps.co.uk");
g_internalDomains.push("www.gartmoregrowthopps.com");
g_internalDomains.push("www.gartmoreifa.co.uk");
g_internalDomains.push("www.gartmoreirishgrowthfund.co.uk");
g_internalDomains.push("www.gartmoreirishgrowthfund.com");
g_internalDomains.push("www.gartmoreprivateequity.co.uk");
g_internalDomains.push("www.gartmoreprivateequity.com");
g_internalDomains.push("www.gartmoresmallercostrust.co.uk");
g_internalDomains.push("www.gartmoresmallercostrust.com");
g_internalDomains.push("www.gartmoretv.co.uk");
g_internalDomains.push("www.gartmoretv.com");

// Gartmore launch: ...to here.

g_internalDomains.push("localhost");
g_internalDomains.push("henderson-ebusiness-websites");
g_internalDomains.push("dev-cmshendersongroup.ukebusdev.net");
g_internalDomains.push("10.208.193.16");
g_internalDomains.push("dev-henderson-com.hds.int");
g_internalDomains.push("dev.henderson.com");

function isHendersonInternalLink(url)
{
	url = url.toLowerCase();

	var rex = new RegExp("^(http|https)://");

	var ret = !rex.test(url);

	for(var i = 0; i < g_internalDomains.length && !ret; i++)
	{
		var rex = new RegExp("^(http|https)://" + g_internalDomains[i] + "/?");
		
		ret = rex.test(url);
	}
	
	return ret;
}


function externalLinks()
{
	for(x = 0; x < document.links.length; x++)
	{
		var l = document.links[x];
		
		if(!isHendersonInternalLink(l.href))
		{
			l._onclick = l.onclick;
			
			l.target = "_blank";
			l.onclick = new Function("return externalLinks_Accept(this);");
		}
	}
}

function externalLinks_Accept(l)
{	
	// leavingHenderson var is generated in OverrideStyle render.xsl as a Dictionary key for multi-language purposes
	var ret = confirm(leavingHenderson);
	
	if(ret && l._onclick) {l._onclick();}
	
	return ret;
}

//------------------------------------------------------
// Make all .pdf links open in a new window
//------------------------------------------------------

var hrefPdf = /\.pdf$/;

function pdfLinks() {
  for ( x = 0; x < document.links.length; x++ ) {
    if ( hrefPdf.exec(document.links[x].href) ) {
	  document.links[x].target="_blank";
    }
  }
}


//------------------------------------------------------
// Tool Tips generator
//------------------------------------------------------

function generateToolTips() {
	tTips = $$('.ttip'); // $$() = MooTools function: http://mootools.net/docs/core/Element/Element
	for (i=0; i < tTips.length; i++){
		if (tTips[i].getFirst('span') && tTips[i].getFirst('span').className=='link' && tTips[i].getLast('span') && tTips[i].getLast('span').className=='text'){
			tTipTitle = tTips[i].getFirst('span');
			tTipText = tTips[i].getLast('span');
			if(tTips[i].getElement('a')){
				tTipTitleHref = tTips[i].getElement('a').get('href');
				tTipTitleRel = tTips[i].getElement('a').get('rel');
				tTipTitleClass = tTips[i].getElement('a').get('class');
				tTipTitleA = tTips[i].getFirst('span').getElement('a');
				tTipTitleText = tTips[i].getFirst('span').getElement('a').get('text');
				tTipTitleA.destroy();
				tTipTitle.set('text',tTipTitleText);
			} else {
				tTipTitleHref = '#';
				tTipTitleClass = '';
				tTipTitleRel = '';
			}
			aTag = new Element('a', {
				'href': tTipTitleHref,
				'class': tTipTitleClass,
				'rel': tTipTitleRel,
				'title': tTipText.innerHTML
				});
			if(tTipTitleHref == '#'){
				aTag.addEvent('click',function(){return false;});
			}
			tTipText.destroy();
			aTag.wraps(tTipTitle);
			
		}
	}
	if (window.name == 'xmodal'){
		setTimeout("new Tips('.ttip > a',{offset:{'x':-38, 'y': 5}})", 3000); // Tips is a MooTools object: http://mootools.net/docs/more/Interface/Tips
	} else {
		new Tips('.ttip > a',{offset:{x: 2, y: -58},fixed:true}); // Tips is a MooTools object: http://mootools.net/docs/more/Interface/Tips
	}
}


//------------------------------------------------------
// Clear passed through input field
//------------------------------------------------------

// define all default input values to be cleared

var fieldValues = new Array();

fieldValues.push("[##PostAlerts.YourEmail]");
fieldValues.push("[##EmailPage.YourAddress]");
fieldValues.push("[##EmailPage.YourName]");
fieldValues.push("[##EmailPage.YourFriendsAddress]");
fieldValues.push("Your email");
fieldValues.push("Your email (required)");
fieldValues.push("Your name");
fieldValues.push("Your name (required)");
fieldValues.push("Colleague's email (required)");

function clearField(e){

	for(var i = 0; i < fieldValues.length; i++)	{
		if (e.value == fieldValues[i]){
			e.value = '';
		}	
	}
}


// function to check if in modal and hide iframe when form submitted

function modalSubmit(){
	if ($(parent.document.body).getElement('#modal')){ // Has the modal iframe been created?
		$(parent.document.body).getElement('#modal').setStyles({left:'-1000000px', position:'relative'});
	}
}
function closeModal(url){
	if ($(parent.document.body).getElement('#modal')) { // Has the modal iframe been created?
		parent.MOOdalBox.close(url);
	}
}

// function to check if form is within expanded content - called from within mootools-1.2.4.2-more.js Form.Validator.Inline

function expanderSubmit(form){
	var expandWrapper = null;
	if ($(form).getParent('.expander-wrapper')){
		expandWrapper = $(form).getParent('.expander-wrapper');
	} else if ($(form).getElement('.expander-wrapper')){
		expandWrapper = $(form).getElement('.expander-wrapper');
	}
	if (expandWrapper){
		if (expandWrapper.getFirst('div').hasClass('expander-content')){ // IE6 - see mootools-1.2.4.2-more.js
			expandWrapper.setStyle('height','');
		} else {
			expandWrapper.getFirst('div').setStyle('height','');
		}
	}
}

//------------------------------------------------------
// Img links
//------------------------------------------------------

function generateImgLinks() {
	var imgLinkDivs = $$('.img-link');
	imgLinkDivs.each(function(imgLink,i){
		if(imgLink.getChildren('img')){
			var divDiv = imgLink.getFirst('div');
			var divImg = divDiv.getFirst('img');
			var divImgWidth = divImg.measure(function(){ return this.getStyle('width').toInt(); });
			var divImgHeight = divImg.measure(function(){ return this.getStyle('height').toInt(); });
			var divA = imgLink.getFirst('a');
			var divAWidth = divA.measure(function(){ return this.getStyle('width').toInt(); });
			//var spanA = new Element('span');
			//spanA.set('text',divA.get('text'));
			divA.set('html','<span>' + divA.get('text') + '</span>');
			var spanLeft = new Element('span', { 'class':'left' });
			var spanRight = new Element('span', { 'class':'right' });
			divA.grab(spanLeft);
			divA.grab(spanRight);
			var divSpans = divA.getElements('span');
			var divParentBgColor = getParentBgColor(imgLink);
			//var divParentBgColor = imgLink.parentNode.style.backgroundColor;
			//if(divParentBgColor == 'transparent'){ divParentBgColor = imgLink.parentNode.parentNode.style.backgroundColor; }
			
			divSpans.each(function(span,i){
				span.setStyle('backgroundColor',divParentBgColor);
				if(span.hasClass('left') || span.hasClass('right')){
					var spanWidth;
					if(((divAWidth/2) - (divImgWidth/2)) >= 0){
						spanWidth = ((divAWidth/2) - (divImgWidth/2)).round();
					} else {
						spanWidth = 0;
					}
					var spanHeight = divImgHeight;
					span.setStyles({ 'width':spanWidth + 'px', 'height':spanHeight });
				}
			});
			
			divA.setStyles({ 'padding-top':divImgHeight, 'margin-top':'8px', 'min-width':divImgWidth });
			divA.setStyle('backgroundImage','url(' + divImg.src + ')');
			divDiv.destroy();
		}
	});
}

function getParentBgColor(el){
	var ret = null;
	var parentEl = el.getParent();
	if(parentEl){
		var parentBgColor = parentEl.getStyle('background-color');
		if(parentBgColor == 'transparent' || parentBgColor == ''){
			ret = getParentBgColor(parentEl);
		} else {
			//alert($type(parentBgColor));
			ret = parentBgColor;
		}
	} else {
		ret = el.getStyle('background-color');
	}
	return ret;
}


/* AJAX functions ---------------------------------- */

var xmlhttp;

function eBusAJAX(url, callbackFunction, localTagID, remoteTagID, statusTxt) { // statusTxt must be escaped!!

    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }

    if (document.getElementById(localTagID)) {
        xmlhttp.localTagID = localTagID;
        xmlhttp.remoteTagID = remoteTagID;
        xmlhttp.statusTxt = unescape(statusTxt);
        xmlhttp.onreadystatechange = callbackFunction;
        xmlhttp.open('GET', url + '?t=' + Math.random(), true);
        xmlhttp.send();

        return false;

    } else {
        window.location = url;
    }

}
