
/*---------------------------------------
  Sitewide functions
---------------------------------------

/*  =======================
    Add rounded corners
    ======================= */

// Add the rounded corners to all classes specified
function setCorners() {

    var ne = "<span class='ne'>&nbsp;</span>";
    var nw = "<span class='nw'>&nbsp;</span>";
    var se = "<span class='se'>&nbsp;</span>";
    var sw = "<span class='sw'>&nbsp;</span>";

    // Gather elements
    var targetElems = $(".box, .button, #tvPicks .boxContent");
    // Add extra divs loop
    $(targetElems).each(function(i){
        var targetElement = $(targetElems[i]);
        if (targetElement.children("span.ne, span.sw, span.se, span.sw").length == 0) {
            if(targetElement[0].firstChild) { //get a bit more defensive for IE
                targetElement.prepend(nw).prepend(ne).append(se).append(sw);
            }
        }
    });

}



/*  =======================
    Add links to certain elements
    ======================= */

// Add extra 'links' (mouse only) to certain elements
function setLinks() {

    // Gather elements
    var targetContainers = $(".linkified-box, .linkified-heading, .linkified-image");

    // Stores linked elements
    var linkedContainers = new Array();

    // Add links loop
    $(targetContainers).each(function(i){
        var targetContainer = $(targetContainers[i]);

        linkedContainers.push(new linkContainer(targetContainer))
    });

    function linkContainer(targetContainer) {

        // Get the first link (although there should only really be one)
        var sourceLink = $(targetContainer.find("a")[0]);

        if (targetContainer.is(".linkified-box")) {
            // adding an onclick to the container element
            var targetElement = targetContainer;

            linkify(targetElement, sourceLink);
        }
        if (targetContainer.is(".linkified-heading")) {
            // adding a "linkified span" to the first and highest heading (prioritising highest over first)
            var heading = $(targetContainer.find("h1, h2, h3, h4, h5")[0]);
            // Add a span with the heading content
            var targetElement = $("<span></span>").html(heading.html());
            // Clear the heading content and replace it with the span
            heading.empty();
            heading.append(targetElement);

            linkify(targetElement, sourceLink);
        }
        if (targetContainer.is(".linkified-image")) {
            // adding an onclick to the first image
            var targetElement = $(targetContainer.find("img")[0]);
            linkify(targetElement, sourceLink);
        }


        // Linkify the element with the source link target
        function linkify(targetElement, sourceLink) {

            // Ensure there are no child links that would be rendered inaccessible (ignoring the source link)
            var noChildren = true;
            var allLinks = targetElement.find("a");
            if (allLinks.length > 0) {
                // There are child links

                if (allLinks.length > 1 || allLinks[0] != sourceLink[0]) {
                    // There is more than one child link, or the one link doesn't equal the source link
                    noChildren = false;
                }
            }

            // OK to proceed
            if (noChildren == true) {

                // Add class for styling
                targetElement.addClass("linkified");

                // Add and remove hover styles when hovering, also set window status to url
                targetElement.mouseover(function(){
                    // Apply to all linked elements
                    targetContainer.addClass("hover");
                    window.status = sourceLink[0];
                });
                targetElement.mouseout(function(){
                    // Apply to all linked elements
                    targetContainer.removeClass("hover");
                    window.status = window.defaultStatus;
                });

                // Map onClick Event to sourceLink Click handler
                targetElement.click(function(){
                    self.location.href = sourceLink[0];
                });
            }
        }


    }
}



/*  =======================
    Layout switcher, switches classes at different sizes
    ======================= */

function setLayoutSwitcher(switchArray) {

    var switchers = new Array();

    var Switcher = function(switchParams) {
        var jqTarget = $(switchParams.selector);
        var ranges = switchParams.ranges;
        var lastClass = "";

        var checkThreshold = function(point) {
            var rangeToApply = null;

            for (var i = 0; i < ranges.length; i++) {
                var thBegin = 0;
                var thEnd = 9999999999;

                if (i == 0 && ranges[i].th != 0) {
                    thBegin = ranges[i].th;
                } else if (i+1 < ranges.length) {
                    thBegin = ranges[i].th;
                    thEnd = ranges[i+1].th;
                } else {
                    thBegin = ranges[i].th;
                }

                if (point >= thBegin && point < thEnd) {
                    rangeToApply = i;
                }
            }


            if (rangeToApply == null) {
                applyClass("");
            } else {
                if (ranges[rangeToApply].className) {
                    applyClass(ranges[rangeToApply].className)
                } else {
                    applyClass("")
                }
            }
        }

        var applyClass = function(className) {
            if (lastClass != className) {
                if (lastClass != "") {
                    jqTarget.removeClass(lastClass);
                }

                if (className != "") {
                    jqTarget.addClass(className);
                }

                lastClass = className;
            }
        }

        return({
            checkThreshold:checkThreshold
        });
    }

    for (var i = 0; i < switchArray.length; i++) {
        switchers.push(new Switcher(switchArray[i]));
    }




    $(window).bind('resize', function() { checkWidth() } );

    checkWidth()

    function checkWidth(){

        var bodyWidth = $("body").width();

        for (var i = 0; i < switchers.length; i++) {
            //console.log(bodyWidth)
            switchers[i].checkThreshold(bodyWidth);
        }

    }
}


/*  =======================
    INITIALISE Scripts
    ======================= */

$(function(){
    // Add corner spans to elements with class .rounded
    setCorners();
   
    // Linkify boxes with classes .linkified-box"
    setLinks();
    externalise();
    
    var $divs = $('.boxA');
	$.each($divs, function() {
		var $p = $(this).find('p');
		$.each($p, function () {
			$content = $(this).find('>*');
			if($content.length == 1 && $content.is('a')) {
				$content.parent().addClass('styleLinkOne');
			}
		})
		
	});
    
    setLayoutSwitcher([{
        selector:".threeColumnLayout", ranges:new Array(
             // The default will be no class at 0-500
            {th:0},
            {th:950, className:"js-threeColumnLayout"}  
    )},{
        selector:".faqPage .contentBlockInner .twoColumnLayout", ranges:new Array(
            {th:0},
            {th:950, className:"js-twoColumnLayout"}
    )},{    
        selector:".skyMagazinePage .contentBlockInner", ranges:new Array(
            {th:0}, // Default, although not required (0-300)
            {th:950, className:"js-twoColumnLayout"}
    )},{
        selector:".contentBlock .boxB .boxInner", ranges:new Array(
            {th:0},
            {th:950, className:"layout1024"}
    )},{
        selector:".boxD", ranges:new Array(
            {th:0},
            {th:950, className:"js-boxD"}
    )},{
        selector:".widePage .twoColumnLayout", ranges:new Array(
            {th:0},
            {th:950, className:"js-twoColumnLayout"}
    )},{    
        selector:".formPage #formSuccess", ranges:new Array(
            {th:0},
            {th:950, className:"js-formSuccess"}
    )},{        
        selector:".formPage .formGroup3", ranges:new Array(
            {th:0},
            {th:950, className:"js-formGroup3"}
    )}]);
});

/* SKYMAG SHOW/HIDE - AUDIO TRACKS */

$(function(){   
    $("#pageWrap").addClass('js')
});

$(function(){
    var linkTitle1 = 'List all tracks';
    var $trackList = $('.skyMagazinePage .magazineContents1 ul li');
    var list1 = $('.skyMagazinePage .magazineContents1 li:gt(4)');  
    if ($trackList.length > 5) {        
        list1.hide();
        $(".magazineContents1 .boxA").addClass('show');
        $(".magazineContents1 .boxA").wrapInner('<div class="borderWrap"></div>');
        $(".magazineContents1 .boxA").append('<div class="fileList"><a class="showTracks" href="">'+ linkTitle1 + '</a><span class="se">&nbsp;</span><span class="sw">&nbsp;</span></div>');
        
        $(".magazineContents1 .fileList a").click(function() {
        list1.slideToggle('500');
        var $link1 = $(this);
        if ( $link1.text() == "List all tracks" ) {
          $link1.text('Hide tracks');     
            $link1.removeClass().addClass('hideTracks');
        } else {
          $link1.text('List all tracks');
        $link1.removeClass().addClass('showTracks');
        }
            return false;
        });
    }
});


/* pdfs to open in new window */
function externalise() {
	var targetElems = $("a[class='icon pdf'],a[class=external]");
	$(targetElems).each(function(){
		if($(this).children('img').length) { 
			$image = $(this).children('img');
			$(this).attr('title', 'Opens in new window.');
			$image.attr('alt', $image.attr('alt')+' (Opens in new window)');
		} else {
			$(this).html($(this).text() + ' (Opens in new window)');
		}
		$(this).attr('target', '_blank');
	});
}



/* arrows getting added to links */
$(function(){$(".contentBlock li > a").parent().parent().addClass("styleLinkOne");});
$(function(){$(".sideWrapOne li > a").parent().parent().addClass("styleLinkOne");});
$(function(){$(".contentBlock .searchResults li > a").parent().parent().removeClass("styleLinkOne");});
$(function(){$(".contentBlock .pagination li > a").parent().parent().removeClass("styleLinkOne");});

/* SKYMAG SHOW/HIDE PDF TRACKS */
$(function(){
    var linkTitle2 = 'List all PDF documents';
    var $fileList = $('.skyMagazinePage .magazineContents2 ul li');
    var list2 = $('.skyMagazinePage .magazineContents2 li:gt(4)');
    if ($fileList.length > 5) { 
        list2.hide()
        $(".magazineContents2 .boxA").addClass('show');
        $(".magazineContents2 .boxA").wrapInner('<div class="borderWrap"></div>');
        $(".magazineContents2 .boxA").append('<div class="fileList"><a class="showTracks" href="">'+ linkTitle2 + '</a><span class="se">&nbsp;</span><span class="sw">&nbsp;</span></div>');
        
        $(".magazineContents2 .fileList a").click(function() {
        list2.slideToggle('500');
        var $link2 = $(this);
        if ( $link2.text() == "List all PDF documents" ) {
          $link2.text('Hide PDF documents');   
    $link2.removeClass().addClass('hideTracks');   
        } else {
          $link2.text('List all PDF documents');
    $link2.removeClass().addClass('showTracks');
        }
            return false;
        });
    }
}); 


/* SKYMAG GET HELP FORM EMAIL AND PHONE TOGGLE SWITCH */
$(function(){
    if ($(".formGroup2 .formRadio #id_contact_type_0").is(":checked")) {
        $(".formGroup3 .phoneNumInput").hide();
    }
    if ($(".formGroup2 .formRadio #id_contact_type_1").is(":checked")) {
        $(".formGroup3 .emailInput").hide();
        $(".formGroup3 .emailConfInput").hide();
    }
    
    $(".formGroup2 .formRadio #id_contact_type_0").click(function() {
        $(".formGroup3 .emailInput").show();
        $(".formGroup3 .emailConfInput").show();
        $(".formGroup3 .phoneNumInput").hide();
    });
    
    $(".formGroup2 .formRadio #id_contact_type_1").click(function() {
        $(".formGroup3 .emailInput").hide();
        $(".formGroup3 .emailConfInput").hide();
        $(".formGroup3 .phoneNumInput").show();
    });
}); 