(function(){ /*** Start root closure ***/
eval( JELLY.unpack() );

// Footer panel functionality
var panelSlider = function () {
	
	if ( !getElement( 'footer' ) ) {
		return;
	}
 
	var panelState = getCookie( 'panelState' ) || 'collapsed',
		
		textSnippets = {
			collapsed: "I'm interested and want to know more...",
			expanded: "Collapse..."
		},
		
		panelBranch = createBranch( 
			'a#footer-panel-toggle href: "action: Toggle panel"', 
				'span @:innerSpan' ),
		
		footer = getElement( 'footer' ),
		footerCollapsedHeight = 42,
		footerExpandedHeight = 153 + footerCollapsedHeight,
				
		panelToggle = panelBranch.root,
		panelText = panelBranch.innerSpan,
		panelTextTween = new Tween( panelText, { duration: 100 } ),
		setPanelText = function () {
			panelText.innerHTML = textSnippets[ panelState ];
			panelText.className = '';
			addClass( panelText, panelState );
		},
		
		storePanelState = function ( state ) {
			panelTextTween.onComplete = function () {
				delete panelTextTween.onComplete;
				panelState = state;
				setPanelText();		
				panelTextTween.start( 'opacity', 1 );
			}
			panelTextTween.start( 'opacity', 0 );
			setCookie( 'panelState', state );
		},
			
		inTransition = false,
		panelTween = new Tween( footer, { duration: 500 } ),
		
		handleToggle = function ( e ) {
			if ( inTransition ) {
				return false;
			} 
			inTransition = true;

			if ( panelState === 'expanded' ) {
				Q( '#footer-panels a' ).setAttribute( 'tabIndex', '-1' );
				panelTween.onComplete = function () {
					inTransition = false;
					storePanelState( 'collapsed' );
				};
				panelTween.start( 'height', footerCollapsedHeight ); 
			}
			else {
				Q( '#footer-panels a' ).setAttribute( 'tabIndex', '0' );
				panelTween.onComplete = function () {
					inTransition = false;
					storePanelState( 'expanded' );
				};
				panelTween.start( 'height', footerExpandedHeight );
			}	
			return false;
		};

	// Preview the collapsable feature panel
	if ( !getCookie( 'panelPreviewed' ) ) {	
		panelState = 'expanded';
		setCookie( 'panelPreviewed', 1 );
		setTimeout( handleToggle, 3000 );
	}	
	
	if ( panelState === 'expanded' ) {
		Q( '#footer-panels a' ).setAttribute( 'tabIndex', '0' );
		setStyle( footer, 'height', footerExpandedHeight + 'px' );
		setStyle( doc.body, 'padding-bottom', ( footerExpandedHeight - footerCollapsedHeight ) + 'px' );
	}
	else {
		Q( '#footer-panels a' ).setAttribute( 'tabIndex', '-1' );
		setStyle( footer, 'height', footerCollapsedHeight + 'px' );
	}
	
	setPanelText();
	panelToggle.onclick = handleToggle;
	insertTop( panelToggle, footer );
	
	// Emulate fixed positioning for ie6
	if ( browser.ie6 ) {
		var scrollTimer;
		window.attachEvent( 'onscroll', function () {
			clearTimeout( scrollTimer );
			scrollTimer = setTimeout( function () {
				// need to shake it for reflow
				footer.style.display = 'none';
				footer.style.display = '';
			}, 20 );
		});
	}
	
};

panelSlider();


////////////////////////////////////////////////////////////////////////////////


// Make dropdown navs keyboard accessible.
// uses event delegation ( http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html )
(function () {
	var onBlur = function ( e ) {
			removeClass( this, 'hover' );
		},
		onFocus = function ( e ) {
			addClass( this, 'hover' );
		};
	Q( '#nav-1 > li' ).each( function ( li ) {
		if ( getElements( li, 'ul' ).length ) {
			if ( 'addEventListener' in li ) {
				li.addEventListener( 'focus', onFocus, true );
				li.addEventListener( 'blur', onBlur, true );
			} 
			else {
				li.onfocusin = onFocus;
				li.onfocusout = onBlur;
			}
		}
	});
})();


////////////////////////////////////////////////////////////////////////////////


// Fix dropdown nav for IE6
if ( browser.ie6 ) {
	Q( '#nav-1 div' ).each( function ( el ) {
		var parentLi = el.parentNode;
		parentLi.attachEvent( 'onmouseenter', function ( e ) {
			addClass( parentLi, 'hover' );
		});
		parentLi.attachEvent( 'onmouseleave', function ( e ) {
			removeClass( parentLi, 'hover' );
		});
	});
}


////////////////////////////////////////////////////////////////////////////////
//  Introduction ( home page ) slides
////////////////////////////////////////////////////////////////////////////////
(function () { 

	var slides = Q( '#slideshow .slideshow-slide' );

	if ( !slides[0] ) { return; } 
		
	var getInnerText = function ( el ) { 
			return el.textContent || el.innerText || ""; 
		},
		updatePager = function ( index ) {
			Q( pager, 'li' ).remove();
			for ( var i = 0; i < slideCount; i++ ) {
				var readIndex = i + 1;
				if ( i === index ) {
					pager.appendChild( createBranch( 'li', 'strong text:' + readIndex ).root );
				} 
				else {
					pager.appendChild( createBranch( 'li', 'a href:"action: Move to slide ' + readIndex + '", text:' + readIndex ).root )
				}
			} 
		},
		moveTo = function ( index, animate ) {
			if ( inTransition ) {
				return;
			}
			updatePager( index );
			if ( animate ) {
				inTransition = true;
				cancelPeriodical();
				stripTween.onComplete = function () { 
					inTransition = false; 
					startPeriodical();
				};
				stripTween.start( 'left', -( index * slideWidth ) );	
			} 
			else {
				strip.style.left = -( index * slideWidth ) + 'px';
			}
			// shuffle tabindexes so that hidden slides links cannot recieve focus
			slideshowLinks.setAttribute( 'tabIndex', '-1' );
			Q( slides[0], 'a' ).setAttribute( 'tabIndex', '0' );
			currentSlideIndex = index;
		},	

		slideshow = getElement( 'slideshow' ),
		strip = getElement( 'slideshow-strip' ),
		slideshowLinks = Q( strip, 'a' ),
		inTransition = false,
		
		currentSlideIndex = 0,
		slideWidth = slides[0].offsetWidth,
		slideCount = slides.length,

		stripTween = new Tween( strip, { duration: 1000, easing: easings.backInOut } );

	// Tweak the easing behaviour
	easings.backOffset = .6;
			
	// Create and insert pager
	var pager = createElement( 'ul#slideshow-pager' );
	insertElement( pager, slideshow );

	// Create and insert fade masks
	insertElement( createElement( '.fade-mask.fade-mask-left' ), slideshow );
	insertElement( createElement( '.fade-mask.fade-mask-right' ), slideshow );

	// Delegate event handling
	addEvent( pager, 'click', function ( e ) {
		stopEvent( e );
		var target = e.target;
		if ( target.nodeName.toUpperCase() === 'A' ) {
			moveTo( parseInt( getInnerText( target ), 10 ) - 1, true );
		} 
	});

	var periodical,
		slideSpeed = 4000,
		startPeriodical = function () {
			var handler = function () {
				var newIndex;
				if ( currentSlideIndex >= slideCount-1 ) {
					newIndex = 
					currentSlideIndex = 0;
				}
				else {
					newIndex = ++currentSlideIndex;
				}
				moveTo( newIndex, true );
			}
			periodical = setInterval( handler, slideSpeed );
		},
		cancelPeriodical = function () {
			clearInterval( periodical );
		};


	// Create first state and start the ball rolling
	moveTo( currentSlideIndex );
	startPeriodical();
	
})(); 


////////////////////////////////////////////////////////////////////////////////
//  League lists
////////////////////////////////////////////////////////////////////////////////
(function () { 

	var leagues = Q( 'ul.list-leagues > li' ),
		elementWrapper = createElement( '.ui-wrapper' );
		
	setStyle( elementWrapper, {
			overflow: 'hidden',
			padding: 0,
			margin: 0,
			zoom: 1
		});

	if ( empty( leagues ) ) { 
		return; 
	}

	var toggleItem = function ( listElement, animate ) {
		
			var wrapper = Q( listElement, 'div.ui-wrapper' ),
				nestedList = getElements( listElement, 'ul' );
			
			if ( !wrapper.length || !nestedList.length ) { return; }
			
			wrapper = wrapper[ 0 ];
			nestedList = nestedList[ 0 ];
			var offset = nestedList.offsetHeight;
			
			// Expanded
			if ( listElement.getAttribute( 'aria-expanded' ) === 'true' ) {
				if ( animate ) {
					listTween.setElement( nestedList ).start( 'margin-top', [ 0, -offset ] );
				}
				else {
					setStyle( nestedList, 'margin-top', -offset + 'px' );
				}	
				listElement.setAttribute( 'aria-expanded', 'false' );
			}
			// Collapsed
			else {
				if ( animate ) {
					listTween.setElement( nestedList ).start( 'margin-top', [ -offset, 0 ] );
				}
				else {
					setStyle( nestedList, 'margin-top', '' );
				}	
				listElement.setAttribute( 'aria-expanded', 'true' );
			}
		},
		
		listTween = new Tween( null, { duration: 200 } ),
		expandedIndex = 0;

	// Setup
	leagues.each( function ( li, index ) {
		addClass( li, 'slide-enabled' );
		var nestedUl = getElements( li, 'ul' );
		if ( nestedUl.length ) {
			nestedUl = nestedUl[0];
			var wrapper = elementWrapper.cloneNode( false );
			wrapElement( nestedUl, wrapper );
			setStyle( nestedUl, 'margin-top', -( nestedUl.offsetHeight ) + 'px' );
		}
		if ( li.getAttribute( 'aria-expanded' ) === 'true' ) {
			expandedIndex = index;
		} 
		else {
			li.setAttribute( 'aria-expanded', 'false' );
		}
	});

	toggleItem( leagues[ expandedIndex ] );

	addEvent( leagues[0].parentNode, 'click', function ( e ) {
		var target = e.target;
		if ( target.nodeName.toUpperCase() !== 'H2' ) { return; }
		toggleItem( target.parentNode, true );
	});

})(); 


////////////////////////////////////////////////////////////////////////////////
//  Column balancing
////////////////////////////////////////////////////////////////////////////////
(function () { 
	
	var list = Q( '.list-contacts li.lead' );
	list.sort( function ( a, b ) {
		return b.offsetHeight - a.offsetHeight;
	});
	list.each( function ( li ) {
		li.style.minHeight = list[0].offsetHeight + 'px';
	});
	
})(); 


})() /*** End root closure ***/
