/*
Copyright (c) 2008, Blue Fish Development Group. All rights reserved.
base.js relies on the YUI library and provides custom functionality
*/

/**
 * Function: rotateHomeContent
 * Rotates the content on the homage page
 */

function rotateHomeContent(e) {

    // gather the elements
    var content = YAHOO.util.Dom.getElementsByClassName('news','div', document.getElementById('colAnim'));
    var badges = YAHOO.util.Dom.getElementsByClassName('badge', 'a', document.getElementById('badges'));
    
    // if a badge is clicked
    if (e !== undefined) {
        // clear the timer
        clearInterval(homeContentInterval);
        
        // reset the index
        curHomeContentIndex = this.rel - 1;
        
        // reset the timer
        if (homeContentInterval !== null) {
            homeContentInterval = setInterval("rotateHomeContent()", 7000);
        }
        
        // prevent default link from firing
        YAHOO.util.Event.preventDefault(e);
    }
    
    // hide the previous content and change the old badge color
    content[prevHomeContentIndex].style.display = 'none';
    YAHOO.util.Dom.removeClass(badges[prevHomeContentIndex],'here');
    
    // show the current content and change the current badge color
    content[curHomeContentIndex].style.display = 'block';
    YAHOO.util.Dom.addClass(badges[curHomeContentIndex],'here');

    // reset the current index if we're at the end
    if (curHomeContentIndex == content.length - 1) {
        curHomeContentIndex = 0;
        prevHomeContentIndex = content.length -1;
    }
    else {
        prevHomeContentIndex = curHomeContentIndex;
        curHomeContentIndex++;
    }
            
}

/**
 * Function: toggleAnimation
 * Allows the user to play and pause the home page animation.
 */

function toggleAnimation(e) {
    
    var controller = document.getElementById('controller');
    
    if (homeContentInterval !== null) {
        clearInterval(homeContentInterval);
        homeContentInterval = null;
        controller.style.backgroundImage = "url('includes/i/icon-play.png')";
        controller.title = "play animation";
    }
    else {
        homeContentInterval = setInterval("rotateHomeContent()", 7000);
        controller.style.backgroundImage = "url('includes/i/icon-pause.png')";
        controller.title = "pause animation";
    }
    
    // prevent default link from firing
    YAHOO.util.Event.preventDefault(e);
}

/**
 * Function: initHomeContentBadges
 * Add event listeners to content rotation badges
 */
 
function initNewsBadges() {
    
    var badgesContainer = document.getElementById('badges');
    YAHOO.util.Dom.setStyle(badgesContainer, 'display', 'block');
    
    var badges = YAHOO.util.Dom.getElementsByClassName('badge','a',document.getElementById('badges'));
    
    // assign onclick listeners to the badges
    for (var i=0; i<badges.length; i++) {
        YAHOO.util.Event.addListener(badges[i], 'click', rotateHomeContent);
    }
    
    var controller = document.getElementById('controller');
    YAHOO.util.Event.addListener(controller, 'click', toggleAnimation);
    
}

/**
 * Function: initBottomNews
 * Loops through the headers and sets all the heights equal to the tallest
 * so that the content begins on a consistent horizontal axis.
 * If one of the headlines is exceedingly long, then we do not resize any of them
 * otherwise the vertical gaps are too large.
 */

function initBottomNews() {
    
    var regions = YAHOO.util.Dom.getElementsByClassName('headline', 'a', document.getElementById('newsboxBottom'));

    for (var i=0; i < regions.length; i++) {
        var maxHeight = 0;
        var minHeight = 1000;
        for (var j=0; j < regions.length; j++) {
            var elmRegion = YAHOO.util.Dom.getRegion(regions[j]);
            var elmHeight = elmRegion.bottom - elmRegion.top;
            if (elmHeight > maxHeight) {
                maxHeight = elmHeight;
            }
            if (elmHeight < minHeight) {
                minHeight = elmHeight;
            }
        }
    }
    if ((maxHeight / minHeight) < 3.5) {
        for (var i=0; i < regions.length; i++) {
            var newElmHeight = YAHOO.util.Dom.setStyle(regions[i], 'height', maxHeight + 'px');
        }
    }
    
}

/**
 * Function: initTopNews
 * Initialization functions triggered when content is ready, sets some different styles,
 * then begins the content rotation
 */
 
function initTopNews(e) {
    YAHOO.util.Dom.setStyle(document.getElementById('colAnim'), 'height', '145px');
    YAHOO.util.Dom.setStyle(document.getElementById('newsbar-container'), 'background', '#E2E6EF url("includes/i/newsbarBkgrd2colShort.png") bottom center no-repeat');
    YAHOO.util.Dom.setStyle(document.getElementById('newsbar'), 'background', 'none');
    var news = YAHOO.util.Dom.getElementsByClassName('news', 'div');
    if (news.length > 1) {
        initNewsBadges();
        homeContentInterval = setInterval("rotateHomeContent()", 7000);
    }
}

/**
 * Function: initMainNav
 * Inititalizes the main nav by looping through menu items and adjusting them to fit the width
 */
 
function initMainNav() {
    var menuItemsWidth = 0;
    var nav = document.getElementById("nav");
    var navWidth = nav.offsetWidth;
    var menuItems = YAHOO.util.Selector.query('ul#nav li:not(ul#nav li ul li)');
    for (var i=0; i < menuItems.length; i++) {
        menuItemsWidth = menuItemsWidth + menuItems[i].offsetWidth;
    }
    var navDiff = navWidth - menuItemsWidth;
    var anchor = YAHOO.util.Dom.getFirstChild(menuItems[0]);
    var menuItemPadding = YAHOO.util.Dom.getStyle(anchor, 'padding-left');
    menuItemPadding = parseInt(menuItemPadding.replace("px",""));
    
    while (navDiff > 0) {    
        menuItemPadding = menuItemPadding + 1;
        for (var i=0; i < menuItems.length; i++) {
            var anchor = YAHOO.util.Dom.getFirstChild(menuItems[i]);
            if (navDiff > 0) {
                YAHOO.util.Dom.setStyle(anchor, 'padding-left', menuItemPadding + "px");
                navDiff = navDiff - 1;
            }
            if (navDiff > 0) {
                YAHOO.util.Dom.setStyle(anchor, 'padding-right', menuItemPadding + "px");
                navDiff = navDiff - 1;
            }
        }
    }    
    while (navDiff < 0) {    
        menuItemPadding = menuItemPadding - 1;
        for (var i=0; i < menuItems.length; i++) {
            var anchor = YAHOO.util.Dom.getFirstChild(menuItems[i]);
            if (navDiff < 0) {
                YAHOO.util.Dom.setStyle(anchor, 'padding-left', menuItemPadding + "px");
                navDiff = navDiff + 1;
            }
            if (navDiff < 0) {
                YAHOO.util.Dom.setStyle(anchor, 'padding-right', menuItemPadding + "px");
                navDiff = navDiff + 1;
            }
        }
    }
    
}

/**
 * Function: goToUrl
 * Redirect the user to a URL from a form submission
 */
 
function goToUrl(e) {

    // prevent default event from firing
    YAHOO.util.Event.preventDefault(e);
    
    var select = this.getElementsByTagName('select')[0];
    var url = select.options[select.options.selectedIndex].value;
    if (url != "") {
        window.location.href = url;
    }
    
}

/**
 * Function: initForms
 * Adds event listeners to navigation form elements
 */

function initForms() {
    var selectForms = YAHOO.util.Dom.getElementsByClassName('select-form', 'form')
    for (var i=0; i<selectForms.length; i++) {
        YAHOO.util.Event.addListener(selectForms[i], 'submit', goToUrl);
    }
}

/**
 * Declare globals for rotation script and initialize functions when content is ready
 * 
 */

var homeContentInterval = null;
var homeContentIndex = null;
var curHomeContentIndex = 1;
var prevHomeContentIndex = 0; 

YAHOO.util.Event.onContentReady('nav', initMainNav);
YAHOO.util.Event.onContentReady('colAnim',initTopNews);
YAHOO.util.Event.onContentReady('newsboxBottom',initBottomNews);
YAHOO.util.Event.onDOMReady(initForms);