function openPopUp(url,target,attributes) 
	{
		popup = window.open(url,target,attributes);
		popup.moveTo((window.screen.availWidth -  640) / 2, (window.screen.availHeight - 480) / 2);//c
							popup.focus();blur();
				}





// subscribes a function to the window.onload event
// addLoadEvent(openNewsPopup)
function addLoadEvent(func) {
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.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);
		}
	}
	return (arrReturnElements)
}


// opens popup window
// <a href="page.aspx" target="_blank" onclick="return openWindow(this.href, 'newwindow', 250, 400, true);">link</a>
function openWindow(URL, name, width, height, scrollbar) {
	var strScrollbar = scrollbar ? 'yes' : 'no';
	window.open(URL,name,'scrollbars='+ strScrollbar +',width=' + width + ',height=' + height);
	return false;  
} 

// adds page url to favourites
// <a href="#" onclick="return createBookmarkLink();">Save Link</a>

function createBookmarkLink() {
title = document.title; 
url = location.href;

if (window.sidebar) { // firefox
	window.sidebar.addPanel(title, url, "");
	}
else if(document.all) {// ie 
	window.external.AddFavorite(url, title);
	}
}


// NAVIGATION TREE FUNCTIONS
 function setNavigationItems(){
	var obj = document.getElementById('leftnav');
	if (obj==null) return false; 
	var ul = obj.getElementsByTagName('ul');		
	var expandableLinks = obj.getElementsByTagName('a');
	for(var i=0; i<expandableLinks.length;i++){
		if(expandableLinks[i].rel.substring(0,10).toLowerCase()=='expandable'){
			expandableLinks[i].onclick=function(){Toggle(this.id.substring(1,this.id.length) + "_title",this.id.substring(1,this.id.length));return false;};
		}
	}
}

function Toggle(selected,item) {
   if(document.getElementById(replaceHTMLChars(item))){
	   obj=document.getElementById(replaceHTMLChars(item));
	   objSelected = document.getElementById("x" + replaceHTMLChars(selected));
	   visible=obj.className.indexOf('navhidden') > -1 ? false : true;
	   key=document.getElementById("x" + replaceHTMLChars(item));
	   var classname = obj.className.substring(0, obj.className.indexOf('hidden') -1);
	   classname = classname == "" ? obj.className : classname;
	   if (visible) {
			obj.className= 'navhidden';

			//key.innerHTML='<img src="/Images/plus.gif" width="9" height="9" alt="Expand ' + splitString(key.rel,'-',1) + '" />';
			//key.title='Expand ' + splitString(key.rel,'-',1);

			var html = '<img src="/Images/plus.gif" width="9" height="9" alt="Expand ' + splitString(key.rel,'-',1) + '" />';
			var title = 'Expand ' + splitString(key.rel,'-',1);

			setTimeout(function(){setHtmlAndTitle(key, html, title)},100);

			objSelected.className = '';
	   } 
	   else {
			obj.className= 'navvisible';
			
			//key.innerHTML='<img src="/Images/minus.gif" width="9" height="9" alt="Contract ' + splitString(key.rel,'-',1) + '" />';
			//key.title='Contract ' +  splitString(key.rel,'-',1);

			var html = '<img src="/Images/minus.gif" width="9" height="9" alt="Contract ' + splitString(key.rel,'-',1) + '" />';
			var title = 'Contract ' +  splitString(key.rel,'-',1);

			setTimeout(function(){setHtmlAndTitle(key, html, title)},100);

			objSelected.className = 'navselected';
	   }
   }
}

// Paul Ashley ->
// Extracted the setting of the key.innerHTML in the above function.
// There seems to be a bug in IE whereby the setting of certain HTML objects needs to be delayed
// so that AJAX can do it's initialising. The AJAX code that was failing was in MicrosoftAjox.js.
function setHtmlAndTitle(key, html, title)
{
	key.innerHTML=html;
	key.title=title;
}
// <- Paul Ashley.

function splitString(strString, strDelimiter, intPosition) {
    return strString.split(strDelimiter)[intPosition];
}

function replaceHTMLChars(sText){
	sText = sText.replace(/&amp;/g, '&');
	return sText;
}

function changeTab(id){
    var obj = document.getElementById('tabList');
    var listitems = obj.getElementsByTagName('li');
    for(var i=0; i<listitems.length; i++){
        var links = listitems[i].getElementsByTagName('a');
        for(var j=0; j<links.length; j++){
            if (links[j].id==id){
                listitems[i].className = 'on'; 
            }else{
                listitems[i].className = 'off';
            }
        }
    }
    return true;
}


var currentanswerid = "";

function displayFAQ(divid){
	var answerid = divid.substr(divid.indexOf('#')+1, divid.length);
	var answer = document.getElementById(answerid);
	if (answer==null) return false;
	answer.style.display = 'block';
	
	if (currentanswerid!=""){
		var currentanswer = document.getElementById(currentanswerid);
		currentanswer.style.display = 'none';
	}
	
	currentanswerid = answerid;
	return false;
}

// GET DATE FOR PAGE FOOTER

function GetMonth(nMonth)
{
	var Months = new Array("January","February","March","April","May","June",
	                       "July","August","September","October","November","December");
	return Months[nMonth] 	  	 
}

function DateString()
{
	var Today = new Date();
	var suffix = "th";
	switch (Today.getDate())
	{
		case 1:
		case 21:
		case 31: 
			suffix = "st"; break;
		case 2:
		case 22:
			suffix = "nd"; break;
		case 3:
		case 23:
			suffix = "rd"; break;
	};

	var strDate = Today.getDate();
	strDate += suffix + " " + GetMonth(Today.getMonth()) + " " + Today.getFullYear();
	return strDate
}

// Generic re-sizing function - © 2007 The Watchmaker Project 

function colarr() {
	var elements = new Array();
	for (var i=0;i<arguments.length;i++) {
		var element = arguments[i];
		if (typeof element == 'string') element = document.getElementById(element);
		if (arguments.length == 1) return element;
		elements.push(element);
	}
	return elements;
}

var BoxHeights = {
	maxh: 0,
	boxes: Array(),
	num: 0,
	op_test: false,
	equalise: function() {
		this.num = arguments.length;
		for (var i=0;i<this.num;i++) if (!colarr(arguments[i])) return;
		this.boxes = arguments;
		this.maxheight();
		for (var i=0;i<this.num;i++) colarr(arguments[i]).style.height = this.maxh+"px";
	},
	maxheight: function() {
		var heights = new Array();
		for (var i=0;i<this.num;i++) {
			if (navigator.userAgent.toLowerCase().indexOf('opera') == -1) {
				heights.push(colarr(this.boxes[i]).scrollHeight);
			} else {
				heights.push(colarr(this.boxes[i]).offsetHeight);
			}
		}
		heights.sort(this.sortNumeric);
		this.maxh = heights[this.num-1];
	},
	sortNumeric: function(f,s) {
		return f-s;
	}
}

//ICT Evolution of a Website Autentication

// Keep user from entering more than maxLength characters
function doKeypress(control){
    maxLength = control.attributes["maxLength"].value;
    value = control.value;
     if(maxLength && value.length > maxLength-1){
          event.returnValue = false;
          maxLength = parseInt(maxLength);
     }
}
// Cancel default behavior
function doBeforePaste(control){
    maxLength = control.attributes["maxLength"].value;
     if(maxLength)
     {
          event.returnValue = false;
     }
}
// Cancel default behavior and create a new paste routine
function doPaste(control){
    maxLength = control.attributes["maxLength"].value;
    value = control.value;
     if(maxLength){
          event.returnValue = false;
          maxLength = parseInt(maxLength);
          var oTR = control.document.selection.createRange();
          var iInsertLength = maxLength - value.length + oTR.text.length;
          var sData = window.clipboardData.getData("Text").substr(0,iInsertLength);
          oTR.text = sData;
     }
}