//utilities for dev

	//document.onclick=showTarget
	function showTarget(e)
	{
		if(ie) alert(event.srcElement.id)
		if(ns4) alert(e.target.id)
	}

// general initialisation

var pageTitlePresent=false;
function initPage()
{

	initMenus();
	
	if(ns4 || ns5) handleScroll(); // use self calling scrollHandler for ns4 - events don't work
	else if (ie) document.body.onscroll = handleScroll
	
	if(pageTitlePresent)
	{
		var objPageTitle= new divObject("pageTitle");
		objPageTitle.fadeIn()
	}

	
	

	return;
}

//places menu items in their correct positions
function posMenus()
{
	// position menus
	var xPos=1;
	for(i=1;i<menuNum+1;i++)
	{
		menuItemArr[i].moveTo(xPos,0,1,10);
		xPos+=menuItemArr[i].w;
	}
}


// does rollovers for topnav, just gifs as that's all we require
function rollover(imgId,imgObj,state)
{

	if(ns4 || ns5)return;
	var img=document.images[imgId];
	var currSrc=img.src;
	if(currSrc.indexOf("_roll.")==-1)
	{
		img.src= currSrc.replace(".gif","_roll.gif");
	}
	else
	{
		img.src= currSrc.replace("_roll.gif",".gif");
	}
}

// handle scrolling and resizing

var scrollSensitiveArr=new Array();// list of divObjects to be repositioned on scroll
var contactHideArr= new Array(); // list of divObjects to be hidden on contact rollover
var preScrollLeft=0;// keep tabs on previous scroll position

//var previousArr= new Array()
var now= new Date();
var lastScrollTime = now.valueOf();

//alert(lastScrollTime.valueOf())


function handleScroll()
{

	now= new Date();
	var currScrollTime= now.valueOf();
	//alert(currScrollTime-lastScrollTime +" : " +currScrollTime + " : "+lastScrollTime )
	
	
	// find scroll distance
	// this way we don't need to record the original positions of elements we are moving
	var deltaScrollLeft  = (ns4 ? window.pageXOffset : document.body.scrollLeft ) - preScrollLeft;
	
	if(ns5) 
	{
		//alert(window.scrollX )
		deltaScrollLeft = window.scrollX - preScrollLeft

	}
	//alert(deltaScrollLeft)
	if(lastScrollTime<currScrollTime-50 && deltaScrollLeft!=0) 
	{
		repos(deltaScrollLeft);
		lastScrollTime=currScrollTime
	}
	

	// call again if it's ns4
	if(ns4 || ns5) setTimeout("handleScroll()",5)

}

function repos(deltaScrollLeft)
{


	str=""
	// reposition appropriate elements
	for (i=0;i<scrollSensitiveArr.length;i++)
	{
		//setTimeout("scrollSensitiveArr["+i+"].reposition("+deltaScrollLeft+");",delay);
		scrollSensitiveArr[i].reposition(deltaScrollLeft);
		str+=scrollSensitiveArr[i].id+" : "
	}
	//alert(str)
	
	// update
	preScrollLeft += deltaScrollLeft
	

}

function handleResize()
{
	if(ns4) 
	{
		window.location.reload();
	}

	if(!ns4 && !ns5)handleScroll();
}

function reposPP()
{
	return;
	/*var newX
	if(ie)
	{
		winWidth=document.body.clientWidth;
		newX=winWidth-objPPDiv.w+preScrollLeft;
		if (newX>objMainHolderDiv.w) newX =  objMainHolderDiv.w-130
		objPPDiv.moveTo(newX,objPPDiv.y);
	}*/
	
	
}


//begin dropdown code


function mouseOverDDItem(objThis){
	if(objThis.parentNode){
		objThis.parentNode.className="listDDHover"
	}
}

function mouseOffDDItem(objThis){
	if(objThis.parentNode){
		objThis.parentNode.className="listDD"
	}
}

var g_intDDHeight

function toggleDropDown(blnHide){

	//alert(blnHide)
	if(blnHide+''=='undefined'){
		if(objListDDItemsContainerDiv.css.visibility+""=="visible" ||objListDDItemsContainerDiv.css.visibility=="show"){
	//alert(objListDDItemsContainerDiv.css.visibility=="visbile")
			blnHide = true
		}else
			blnHide = false
	}

		//alert(blnHide+"   "+objListDDItemsContainerDiv.css.visibility)
		
	if(blnHide){
		objListDDItemsContainerDiv.hide(0.5);
		if(ns4){
			g_intDDHeight = objListDDDiv.h
			objListDDDiv.css.clip.height=15
		}
	}else{
		objListDDItemsContainerDiv.show();
		if(ns4){
			objListDDDiv.css.clip.height=g_intDDHeight
		}
	}
}

function checkDropDownOnClickOff(e){

	var blnAutoHide = true

	//check dropdown is present in page
	if (typeof objListDDDiv == 'object'){
		if(!e) e = event

		if(e){

			//check we've not clicked on the arrow
			//(as this click is a toggle too)
			if(e.target){
				//this is for ns6
				blnAutoHide = !(e.target.id=="ddArrow") && !(e.target.parentElement.id=="ddTextLink")
				
			}
			if(e.srcElement){
			//this is for ie
				blnAutoHide = !(e.srcElement.id=="ddArrow") && !(e.srcElement.parentElement.id=="ddTextLink")

			}
		}	
		
		if(blnAutoHide){
			toggleDropDown(true)
		}
	}
}

document.onclick = checkDropDownOnClickOff


//end dropdown code

//subscribe code


if (document.images){
	var unSubImg = new Image;
	unSubImg.src = "images/check_box_off_icon.gif"

	var subImg = new Image;
	subImg.src = "images/check_box_on_icon.gif"
	

}

function openSubscribe(){
	objSubscribeDiv.show()
}

function closeSubscribe(){
	objSubscribeDiv.hide()
}

function toggleSubscribe(strCategory){
	var objFormEl, subscribeForm;
	//naming convention for checkbox button images
	var strImgName = strCategory+"But"

	subscribeForm=findForm("subscribeForm")
	
	objFormEl = subscribeForm[strCategory];
	
	
	
	if(objFormEl.value!="1"){
		objFormEl.value="1"
		rollWrapper(strImgName, subImg)
	}else{
		objFormEl.value="0"
		rollWrapper(strImgName, unSubImg)
	}

}

function rollWrapper(strImgName, oNewImage){
	if (eval("typeof "+strImgName+"Img=='object'")){
		roll(strImgName+'Img',oNewImage)
	}else{
		document.images[strImgName].src=oNewImage.src
	}
}

function getImg(strImgName){
	if (eval("typeof "+strImgName+"Img=='object'")){
		return eval(strImgName+'Img').ref
	}else{
		return document.images[strImgName]
	}
}


function submitSubscribe(){
	var subscribeForm;
	
	subscribeForm=findForm("subscribeForm")

	var email_no_regExp = /[^@\-'.\w]/
	var email_yes_regExp = /@.*\./

	if(email_no_regExp.test(subscribeForm.email.value)|| !email_yes_regExp.test(subscribeForm.email.value)){
		alert("please enter a valid e-mail address")
	}else if(subscribeForm.insights.value=="0" && subscribeForm.news.value=="0"){
		alert("please choose to subscribe to either news or insights")
	}else{	
		subscribeForm.submit();	
	}
}

function removeDefaultValue(strFormName, strElementName){
	var subscribeForm, objElement;
	
	subscribeForm=findForm("subscribeForm");
	objElement = subscribeForm[strElementName];
		
	if(objElement.value.indexOf('Enter  e-mail address here')!=-1){
		objElement.value="";
	}
}

subscribePresent=false;
var contactDetailsOn=false;
function showContactDetails(){
	if(contactDetailsOn)
	{
		hideContactDetails();
	}
	else
	{
		contactDetailsOn=true;
		objContactDetailsDiv.show();
		for(i=0;i<contactHideArr.length;i++)
		{
			contactHideArr[i].fadeOut();
		}
	}
	
}

function hideContactDetails(){
	contactDetailsOn=false;
	objContactDetailsDiv.hide();
	for(i=0;i<contactHideArr.length;i++)
	{
		contactHideArr[i].fadeIn();
	}

}

	function findForm(strFormName, oLayer){
		var oDocument, oForm
		
		if(ns4){
			if(oLayer)
				oDocument = oLayer.document
			else
				oDocument = document
			
			if(oDocument.forms[strFormName]){
				return oDocument.forms[strFormName]
			
			}else{
				for(var i=0; i< oDocument.layers.length;i++){
					oForm = findForm(strFormName, oDocument.layers[i])
					if(oForm) return oForm
				}
			}
		}else{
			return document.forms[strFormName]
		}
	}

function downloadPdf(){
	var oPdfForm = findForm("pdfForm")
	
	if(oPdfForm){
		if (oPdfForm.pdf.value!=""){
			window.open(oPdfForm.pdf.value)
		}else{
			alert("This article does not have a pdf version")
		}
	
	}
}

function openPP()
{
	var ppWin
	if(ns4)
	{
		ppWin=window.open('/flat/privacy_policy.html','privacyPolicy','width=415,height=508,title=PrivacyPolicy')
	}
	else
	{
		ppWin=window.open('/flat/privacy_policy.html','privacyPolicy','width=415,height=485,title=PrivacyPolicy')
	}
	
	ppWin.focus()
}

function goLink(url)
{
	window.open(url);
}