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;
}

function FadeIn(element) {
    var Panel = document.getElementById(element)
    Panel.style.display = 'none';
}

// 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;
    }
}

function ReWriteDLlinks(containingID) {
    var ElmentToReplace = document.getElementById(containingID);
    var downloadLinksItems = $('#' + containingID + ' .download-item');
    var LabelID = 'lbl' + containingID;
    var optionHTML = "";
    for (var i = 0; i < downloadLinksItems.length; i++) {
        optionHTML += '<option value="' + downloadLinksItems[i].getAttribute('href') + '">' + downloadLinksItems[i].innerHTML + '</option>';
    }
    var ReplaceHTML = '<label class="dlabel" for="' + LabelID + '">Choose file type:</label><select id="' + LabelID + '" name="' + LabelID + '">' + optionHTML + '</select><input type="button" onclick="startdownload(\'' + LabelID + '\')" value="download" />';
    ElmentToReplace.innerHTML = ReplaceHTML;
}

function accordion(containerRef, animationRate, setFirstOpen) {
    
    var container = containerRef;
    var animRate = animationRate;
    var firstOpen;

    if (setFirstOpen == null) { firstOpen = false } else { firstOpen = setFirstOpen; }

    var accordionArray = new Array();

    $(container).each(function(evt) {
        var accordionElem = new AccordionElem($(this), animRate);
        accordionArray.push(accordionElem);
    });

    if (firstOpen) {
        accordionArray[0].setOpen();
    }

    function AccordionElem(elem, animSpeed) {
        this.target = elem;
        this.openElem = openElem;
        this.closeElem = closeElem;
        this.setOpen = setOpen;
        this.hidden = elem.find(".acc-content");
        this.title = elem.find("h3");
        this.open = false;
      
        var thisTarget = this.target;
        var thisTitle = this.title;
        var hiddenContent = this.hidden;
        var hiddenContentHeight = hiddenContent.height();
        var speed = animSpeed;

        hiddenContent.css({ "display": "none", "height": "0px" });

        (this.target).find(".accordionLink").bind("click", function(evt) {
            evt.preventDefault();
            selectElem(thisTarget);
        });

        function openElem() {
            this.open = true;
            if (!thisTitle.hasClass("open")) {
                thisTitle.addClass("open")
                hiddenContent.stop();
                hiddenContent.css({ "display": "block" })
                hiddenContent.animate({ "height": String(hiddenContentHeight + "px") }, speed, function(evt) { hiddenContent.css({ "height": "auto" }) });
            }
            else {
                closeElem();
            }
        }

        function closeElem() {
            this.open = false;
            if (thisTitle.hasClass("open")) { thisTitle.removeClass("open") };
            hiddenContent.stop();
            hiddenContent.animate({ "height": "0px" }, speed, function(evt) { hiddenContent.css({ "display": "none" }) });
        }

        function setOpen() {
            this.open = true;
            thisTitle.addClass("open");
            hiddenContent.css({ "display": "block", "height": String(hiddenContentHeight + "px") });
        }
    }

    function selectElem(target) {
        var targetElem = target;

        for (var i = 0; i < accordionArray.length; i++) {
            if (target == accordionArray[i].target) {
                accordionArray[i].openElem();
            }
            else {
                accordionArray[i].closeElem();
            }
        }
    }
}

function ClearField(txtField) { if (txtField.value == txtField.defaultValue) { txtField.value = "" } }

//Tracking Code jQuery Dependent
function trackPageHit(pagetcmid, pagecategory, pagehometabs, pagecttcmid) {
    $.post("/site-tools/page-tracker.ashx", { tcmid: pagetcmid, category: pagecategory, hometabs: pagehometabs, cttcmid: pagecttcmid });
}
