/* This source has been formatted by an unregistered SourceFormatX */
/* If you want to remove this info, please register this shareware */
/* Please visit http://www.textrush.com to get more information    */

// Global Javascript file for Lancaster

//version:   1.0
//author:    Paul Boag
//email:     paul.boag@headscape.co.uk
//website:   http://www.headscape.co.uk


// ADD FOOTNOTES  -------------------------------------------------------

var JQuery$ = jQuery.noConflict();

// Collects all of the links in a page and adds them as footnotes
function footnoteLinks(containerID, targetID) {
    if (!document.getElementById || !document.getElementsByTagName || !document.createElement) {
        return false;
    }
    if (!document.getElementById(containerID) || !document.getElementById(targetID)) {
        return false;
    }

    var container = document.getElementById(containerID);
    var target = document.getElementById(targetID);
    var h2 = document.createElement('h2');
    //addClass.apply(h2,['printOnly']); 
    h2.setAttribute('class', 'printOnly');
    var h2_txt = document.createTextNode('Links');
    h2.appendChild(h2_txt);
    //var coll = JQuery$container.getElementsByTagName('*');
    var coll = JQuery$(container).find("a");

    //var coll = JQuery$("#wrapper");
    //var coll = JQuery$(container);
    //var coll1 = coll.not("li");



    var ol = document.createElement('ol');
    //addClass.apply(ol,['printOnly']); 
    ol.setAttribute('class', 'printOnly');
    var myArr = [];
    var thisLink; var num = 1;

    for (var i = 0; i < coll.length; i++) {
        var thisClass = coll[i].className;

        if (JQuery$(coll[i]).parents("#breadcrumb").length == 0) {
            if ((coll[i].getAttribute('href') || coll[i].getAttribute('cite')) && (thisClass == '' || thisClass.indexOf('ignore') == -1)) {
                thisLink = coll[i].getAttribute('href') ? coll[i].href : coll[i].cite;
                var note = document.createElement('sup'); //addClass.apply(note,['printOnly']); 
                note.setAttribute('class', 'printOnly');
                var note_txt;
                //var j = inArray.apply(myArr,[thisLink]); 
                var j = jQuery.inArray(thisLink, myArr);

                if (j === 0) {
                    note_txt = document.createTextNode(j + 1);
                }
                else {

                    var li = document.createElement('li');
                    var li_txt = document.createTextNode(thisLink);
                    li.appendChild(li_txt); ol.appendChild(li);
                    myArr.push(thisLink);
                    note_txt = document.createTextNode(num);
                    num++;
                }
                note.appendChild(note_txt);
                if (coll[i].tagName.toLowerCase() == 'blockquote') {
                    var lastChild = lastChildContainingText.apply(coll[i]);
                    //lastChild.appendChild(note);
                }
                else {
                    coll[i].parentNode.insertBefore(note, coll[i].nextSibling);
                }
            }
        }
    }
    target.appendChild(h2);
    target.appendChild(ol);
    //addClass.apply(document.getElementsByTagName('html')[0],['noted']); 
    JQuery$(document.getElementsByTagName('html')[0]).addClass('noted');
    return true;
}

// Attches a ignore class to the img so they arent include in link list in IE
function imageClass() {
    if (!document.getElementsByTagName) {
        return false;
    }
    var imageList = document.getElementsByTagName("img");
    for (var i = 0; i < imageList.length; i++) {
        imageList[i].className = imageList[i].className + " ignore";
    }
}

function SetClass(elementId, className) {
    var obj = document.getElementById(elementId);

    obj.className = className;

}
function SetVisibility(elementId, visibility) {
    var obj = document.getElementById(elementId);
    obj.style.display = visibility;
}

function ImageSwap(image1, image2, elementId) {
    var obj = document.getElementById(elementId);

    if (obj.getAttributeNode("src").value.indexOf(image1) > -1) {
        obj.getAttributeNode("src").value = image2 + "?" + elementId;
    }
    else {
        obj.getAttributeNode("src").value = image1 + "?" + elementId;
    }

}
// RESIZING TEXT -------------------------------------------------------



// Writes cookie
// writeCookie("myCookie", "my name", 24);
// Stores the string "my name" in the cookie "myCookie" which expires after 24 hours.

function writeCookie(name, value, hours) {
    var expire = "";
    if (hours != null) {
        expire = new Date((new Date()).getTime() + hours * 3600000);
        expire = "; expires=" + expire.toGMTString();
    }
    document.cookie = name + "=" + escape(value) + expire;
}


// Read Cookie
// alert( readCookie("myCookie") );
function readCookie(name) {
    var cookieValue = "";
    var search = name + "=";
    if (document.cookie.length > 0) {
        offset = document.cookie.indexOf(search);
        if (offset != -1) {
            offset += search.length;
            end = document.cookie.indexOf(";", offset);
            if (end == -1) {
                end = document.cookie.length;
            }
            cookieValue = unescape(document.cookie.substring(offset, end));
        }
    }
    return cookieValue;
}

///adds image to external links to indicate they are external
function externalLinks() {
    if (!document.getElementsByTagName) {
        return false;
    }
    var links = document.getElementsByTagName("a");
    for (var i = 0; i < links.length; i++) {
        if (links[i].href.substring(0, 7) != "mailto:") {
            var addy = links[i].href;
            var classes = links[i].className;
            if (addy != "") {

                if (addy.indexOf(window.location.hostname) == -1 && classes.indexOf("rss") == -1
                && classes.indexOf("importantLink") == -1 && addy.indexOf("javascript") == -1) {
                    if (links[i].className == "") {
                        links[i].className = "externalLink";
                    }
                    else {
                        links[i].className = links[i].className + " externalLink";
                    }
                    if (links[i].title == "") {
                        links[i].title = "(external site)";
                    }
                    else {
                        links[i].title = links[i].title + " (external site)";
                    }
                }
            }
        }
    }
}

function contextSearchEdited(t) {
    document.getElementById('whichSearch').value = "context";
    if (t.value == "Enter your search") {
        t.value = "";
    }
}

function headerSearchEdited(t) {
    document.getElementById('whichSearch').value = "header";
    if (t.value == "Enter your search") {
        t.value = "";
    }
}


// creates an element with a defined CSS class
function CreateElementWithClass(tagName, className) {
    var element = document.createElement(tagName);
    var att = document.createAttribute("class");
    att.value = className;
    element.setAttributeNode(att);
    return element;
}

// rounds all elements that have a certain tag
function RoundCornersOnElementsByTagName(tagName) {
    var elements = document.getElementsByTagName(tagName);

    for (var i = 0; i < elements.length; i++) {
        RoundCornersOnElement(elements[i]);
    }
}

//creates alternating colour bands on a table
function GetTables() {
    var obj = JQuery$(this);
    var parent = JQuery$(obj.parent().get(0));
    
    
    //See if there is an expandingTable element present on the page, then
    var expandingTable = JQuery$('.expandingTable');
    //loop though each one found to see if the CMS has applied the class
    //to something that is not a div, if it has then we need to ensure that
    //the table expander works correctly for whatever element has been inserted.
    for (var expandingTableCounter = 0; expandingTableCounter < expandingTable.size(); expandingTableCounter++) {
        if (expandingTable[expandingTableCounter].nodeName != "DIV") {
            var expandedNonDivElement = expandingTable[expandingTableCounter].nextElementSibling;
            if (expandedNonDivElement.nodeName == "TABLE") {
                TableExpanderHideRows(expandedNonDivElement);
            }
            
        }
    }
    
    //now we can check each of the tables to see if the 
    //expanding table class has been applied
    var tables = document.getElementsByTagName("table");
    for (var i = 0; i < tables.length; i++) {
        var currentTable = tables[i];
        ColourBandTable(currentTable);

        var newObj = JQuery$(currentTable);
        var tableParent = JQuery$(newObj.parent().get(0));
        if (tableParent[0].nodeName == "DIV") {
            if (tableParent[0].className.indexOf('expandingTable') > -1) {
                TableExpanderHideRows(currentTable);
            }
        }

    }
}



function ColourBandTable(element) {
    if (element.className.indexOf('noColourBands') == -1) {

        for (var i = 0; i < element.rows.length; i++) {
            if ((i % 2) == 0) {
                element.rows[i].className += " even";
            }
            else {
                element.rows[i].className += " odd";
            }
        }
    }
}

//hides rows on marked up tables
function TableExpanderHideRows(element) {

    if (element.id == "") {
        element.id = "tbl" + Math.random();
    }
    element.id = "tbl" + Math.random();
    if (element.rows.length > 20) {
        for (var i = 20; i < element.rows.length; i++) {

            element.rows[i].style.display = 'none';
        }


        element.insertRow(element.rows.length);

        var expandRow = element.rows[element.rows.length - 1];
        var cell = document.createElement('td');
        var a = document.createElement('a');
        a.href = "javascript:TableExpanderExpandRows('" + element.id + "');";
        a.innerHTML = "Expand Table";

        cell.appendChild(a);
        expandRow.appendChild(cell);
        cell.colSpan = element.rows[element.rows.length - 2].cells.length;

    }
}
function TableExpanderExpandRows(elementId) {
    var element = document.getElementById(elementId);
    for (var i = 19; i < element.rows.length; i++) {
        element.rows[i].style.display = '';
    }
    element.rows[element.rows.length - 1].style.display = 'none';

}

//** this ifs fired when the page loads
JQuery$(function() {

    //Hide ASP.NET and hidden fields at top of page which disrupts print view
    JQuery$("#__VIEWSTATE").parent().css("display", "none");
    JQuery$("#__EVENTVALIDATION").parent().css("display", "none");
    JQuery$("#whichSearch").parent().css("display", "none");



    imageClass();

    externalLinks();

    GetTables();


    var cookie = new CookieManager();

    // START - Dynamically expand content area
    var mainNav = JQuery$("#main-nav");
    var mainNavInnerDiv = JQuery$("#main-nav > div");
    var mainContent = JQuery$("#main-content");
    var secondaryContent = JQuery$("#secondary-content");
    var secondaryContentInnerDiv = JQuery$("#secondary-content > div");

    var mainNavMissing = (mainNav == null) ||
            (mainNav.html() == null) ||
            (/\w/.test(mainNav.html()) == false) ||
            (mainNavInnerDiv == null) ||
            (mainNavInnerDiv.html() == null) ||
            (/\w/.test(mainNavInnerDiv.html()) == false);

    var secondaryContentMissing = (secondaryContent == null) ||
            (secondaryContent.html() == null) ||
            (/\w/.test(secondaryContent.html()) == false) ||
            (secondaryContentInnerDiv == null) ||
            (secondaryContentInnerDiv.html() == null) ||
            (/\w/.test(secondaryContentInnerDiv.html()) == false);

    if (mainNavMissing && secondaryContentMissing) {
        mainContent.addClass("main-content-fullWidth");
        mainNav.css("display", "none");
        secondaryContent.css("display", "none");
    }
    else if (mainNavMissing) {
        mainContent.addClass("main-content-largerWidth");
        mainNav.css("display", "none");
    }
    else if (secondaryContentMissing) {
        mainContent.addClass("main-content-largerWidth");
        secondaryContent.css("display", "none");
    }
    else {
        mainContent.addClass("main-content-normalWidth");
    }
    // END - Dynamically expand content area 

    JQuery$("#stIncrease").click(function() {
        var currentFontSize = JQuery$('body').css('font-size');
        var currentFontSizeNum = parseFloat(currentFontSize, 10);
        var newFontSize = currentFontSizeNum + 2;
        JQuery$('body').css('font-size', newFontSize);
        cookie.create("fontSize", newFontSize, "99");
        return false;

    });
    // Decrease Font Size
    JQuery$("#stDecrease").click(function() {
        var currentFontSize = JQuery$('body').css('font-size');
        var currentFontSizeNum = parseFloat(currentFontSize, 10);
        var newFontSize = currentFontSizeNum - 2;
        JQuery$('body').css('font-size', newFontSize);
        cookie.create("fontSize", newFontSize, "99");
        return false;
    });
    JQuery$("#stReset").click(function() {
        cookie.erase("fontSize");
        window.location = window.location;
    });
    if (cookie.read("fontSize") != null) { JQuery$('body').css('font-size', parseFloat(cookie.read("fontSize"), 10)); }

    //    //fancy checkboxes
    //    JQuery$('input[type=checkbox]').checkbox({
    //        cls:'jquery-safari-checkbox',
    //        empty: '/images/empty.png'
    //    });

    // START - Rounded corner Gradiant Boxes
    JQuery$(".grad").roundedCorners({
        maxHeight: 99,
        minHeight: 1,
        backgroundClass: "grad100",
        leftTopClass: "gradLeftTop",
        rightTopClass: "gradRightTop",
        leftBottomClass: "gradLeftBottom",
        rightBottomClass: "gradRightBottom"
    }
         );
    JQuery$(".grad").roundedCorners({
        maxHeight: 199,
        minHeight: 100,
        backgroundClass: "grad200",
        leftTopClass: "gradLeftTop",
        rightTopClass: "gradRightTop",
        leftBottomClass: "gradLeftBottom",
        rightBottomClass: "gradRightBottom"
    }
         );
    JQuery$(".grad").roundedCorners({
        maxHeight: 299,
        minHeight: 200,
        backgroundClass: "grad300",
        leftTopClass: "gradLeftTop",
        rightTopClass: "gradRightTop",
        leftBottomClass: "gradLeftBottom",
        rightBottomClass: "gradRightBottom"
    }
         );
    JQuery$(".grad").roundedCorners({
        maxHeight: 399,
        minHeight: 300,
        backgroundClass: "grad400",
        leftTopClass: "gradLeftTop",
        rightTopClass: "gradRightTop",
        leftBottomClass: "gradLeftBottom",
        rightBottomClass: "gradRightBottom"
    }
         );
//    JQuery$(".grad").roundedCorners({
//        maxHeight: 499,
//        minHeight: 400,
//        backgroundClass: "grad500",
//        leftTopClass: "gradLeftTop",
//        rightTopClass: "gradRightTop",
//        leftBottomClass: "gradLeftBottom",
//        rightBottomClass: "gradRightBottom"
//    }
//         );
    JQuery$(".grad").roundedCorners({
        maxHeight: 599,
        minHeight: 400,
        backgroundClass: "grad600",
        leftTopClass: "gradLeftTop",
        rightTopClass: "gradRightTop",
        leftBottomClass: "gradLeftBottom",
        rightBottomClass: "gradRightBottom"
    }
         );
    JQuery$(".grad").roundedCorners({
        maxHeight: 1500,
        minHeight: 600,
        backgroundClass: "grad700",
        leftTopClass: "gradLeftTop",
        rightTopClass: "gradRightTop",
        leftBottomClass: "gradLeftBottom",
        rightBottomClass: "gradRightBottom"
    }
         );


    // END - Rounded corner Gradiant Boxes
    JQuery$("blockquote").roundedCorners({
        maxHeight: 1000,
        minHeight: 0,
        backgroundClass: "blockquoteBg",
        leftTopClass: "indentTopLeft",
        rightTopClass: "indentTopRight",
        leftBottomClass: "indentBottomLeft",
        rightBottomClass: "indentBottomRight"
    }
         );



    JQuery$("#main-content").children("ol").bracketList();
    JQuery$(".expandingElement").expandingElement({ expandText: ">> show more", contractText: "<< show less" });

    //Generate footnotes last
    footnoteLinks("main-content", "footnotes");

});








//uses jQuery
//check and uncheck checkboxes beneath and item
function CheckAllCheckboxes(selector) {
    var JQuery$checkboxes = JQuery$(selector + " input[type='checkbox']");
    JQuery$checkboxes.attr("checked", "checked");
}
function UnCheckAllCheckboxes(selector) {
    var JQuery$checkboxes = JQuery$(selector + " input[type='checkbox']");

    JQuery$checkboxes.removeAttr("checked");


}
(function(JQuery$) {
    JQuery$.fn.bracketList = function(parentLevelNumber) {
        var defaults = {
    };

    if (parentLevelNumber) {

    }
    else {
        parentLevelNumber = "";
    }

    return this.each(function() {

        var obj = JQuery$(this);
        obj.addClass("orderedList");

        var children = obj.children("li");
        for (var i = 0; i < children.length; i++) {
            var levelValue = parentLevelNumber + (i + 1);

            JQuery$(children[i]).children("ol").bracketList(levelValue + ".");
            JQuery$(children[i]).wrapInner("<span class=\"item\"></span>");
            JQuery$(children[i]).prepend("<span class=\"number\">" + levelValue + ")</span>");

        }

    }); //this.each

} //function


})(jQuery);

