
//requires jQuery


//wait for the DOM to be loaded
jQuery( document ).ready( function() {
								   
	//GENERIC SITE ELEMENTS
	GenSiteElements.init();
	
	//Set tables
	$( 'tr:odd' ).addClass( 'alt' );
	
	//NAVIGATION
	MainNavigation.init();
	
	//CONTENT
	$( 'div#content h1' ).wrap( '<div id="header1"></div>' );
	$( 'div#header1' ).append( '<div class="right"></div>' );
	$( 'div#content h1' ).append( '<span class="left"></span><span class="right"></span>' );
	$( 'div#header1' ).after( '<div class="clearAll"></div>' );
	
	$( 'div#content div#contentNav ul li a' ).append( '<span class="icon"></span><span class="left"></span><span class="right"></span>' );
	
	$( 'a.linkBtn' ).append( '<span class="icon"></span><span class="left"></span><span class="right"></span>' );
	
	//Look for FAQ list to extend.
	TocList.init();
	
	//Check for TIME TABLE LIST
	TimeTableList.init();
	
	//Order form (Bulk Buy)
	if( $( 'body' ).hasClass( 'order' ) )
	{
		$( 'legend' ).each( function( pmIndex ){
			//$( this ).replaceWith( '<h3>' + $(this).text() + '</h3>' );
		});
	}
	
	//Home page
	if( $( 'body' ).hasClass( 'home' ) )
	{
		//Tool tips.
		ToolTips.init();
	}
	
} );

MainNavigation = 
{
	init : function()
	{
		//Setup main navigation links.
		$( 'div#nav > ul > li > a' ).each( function( pmIndex ){
			//Add graphic elements to each link.
			$( this ).append( '<span class="left"></span><span class="right"></span>' );
		} );
		
		//Add UI functionality.
		$('div#nav > ul > li').mouseover(function() {
			MainNavigation.sort();
			$(this).addClass( 'active' );
			$( this ).css( 'z-index', 100 );
		});
	
		$('div#nav > ul > li').mouseleave(function() {
			MainNavigation.sort();
			$(this).removeClass( 'active' );
		});
		
		MainNavigation.sort();
	}
	,
	sort : function()
	{
		$( 'div#nav > ul > li' ).each( function( pmIndex ){
			//Check for selected section.
			var myClassList = $( this ).attr( 'class' ).split( ' ' );
			if( $( 'body' ).hasClass( myClassList[0] ) )
			{
				$( this ).addClass( 'selected' );
				$( this ).css( 'z-index', 50 );
			}
			else
			{
				$( this ).removeClass( 'selected' );
			};//end if
			
			//$(this).removeClass( 'active' );
			
			//Dont sort if section is selected.
			if( $( this ).hasClass( 'selected' ) ){ return; };
			//if( $( this ).hasClass( 'active' ) ){ return; };
			
			//Resort link lists top to bottom.
			$( this ).css( 'z-index', $( 'div#nav ul li' ).size() - pmIndex );
		} );
	}
};//end MainNavigation

TimeTableList =
{
	pSpeed : 800
	,
	pThList : $()
	,
	init : function()
	{
		//Check time table list exists on this page.
		if( $( 'div#timeTableList' ).size() == 0 ){ return; };
		
		//Hide default scrolling on times.
		//$( 'div#timeTableList div#timeTableTimes' ).css( 'overflow', 'hidden' );
		
		//Setup indexOf method on Arrays for those browsers that dont support it.
		if(!Array.prototype.indexOf){
    		Array.prototype.indexOf=function(obj,start){
        	for(var i=(start||0),j=this.length;i<j;i++){
            	if(this[i]==obj){return i;}
        	}
        		return -1;
    		}
		}
		
		//Hold Table header list.
		TimeTableList.pThList = $( 'div#timeTableTimes th' );
		
		var myThList = TimeTableList.pThList;//$( 'div#timeTableTimes th' );
		var myColCount = $( myThList ).size();
		for ( i = 0; i < myColCount; i++)
		{
			//Determine if column is AM or PM.
			var myColTimeStamp = $( myThList ).eq(i).text();
			
			//Determine min and max times.
			var myTdList = $( 'div#timeTableTimes td:nth-child(' + (i+1) + ')' );
			var myMin = $( myTdList ).eq(0).text();
			myMin = TimeTableList.getTimeCode( myMin, myColTimeStamp );
			var myLength = $( myTdList ).size();
			var myMax = $( myTdList ).eq(myLength-1).text();
			myMax = TimeTableList.getTimeCode( myMax, myColTimeStamp );
			
			//Record values as attributes.
			$( myThList ).eq(i).attr( 'timeStamp', myColTimeStamp );
			$( myThList ).eq(i).attr( 'min', myMin );
			$( myThList ).eq(i).attr( 'max', myMax );
		};//end for
		
		//Setup UI.
		TimeTableList.initInterface();
		
		//Get start column.
		var myDate = new Date();
		var myTimeCode = myDate.getHours() + "" + myDate.getMinutes();
		var myColIndex = ( TimeTableList.findColumnIndex( myTimeCode ) == -1 ) ? 0 : TimeTableList.findColumnIndex( myTimeCode );
		//console.log( "TIME" , ":", myColIndex );
		$( 'div#timeTableTimes th:nth-child(' + myColIndex + ')' ).addClass( 'start' );
		
		//Send time table to start column.
		TimeTableList.goToColumnId( 'div#timeTableTimes th.start' );
	}
	,
	getTimeCode : function( pmTime, pmTimeStamp )
	{
		myTimeCode = pmTime.replace( 'am', '' );
		myTimeCode = pmTime.replace( 'pm', '' );
		myTimeCode = pmTime.replace( ':', '' );
		if( pmTimeStamp == 'pm' && parseInt(myTimeCode) < 1200 ){ myTimeCode = parseInt(myTimeCode) + 1200; };
		if( pmTimeStamp == 'am' && parseInt(myTimeCode) >= 1200 ){ myTimeCode = parseInt(myTimeCode) - 1200; };
		return(myTimeCode);
	}
	,
	goToColumnId : function( pmJqueryId )
	{
		var myOffset = ( (TimeTableList.getWidth()/2) - ($( pmJqueryId ).width()) ) * -1;
		$( 'div#timeTableTimes' ).scrollTo( $( pmJqueryId ), TimeTableList.pSpeed, { axis: 'x', onAfter: TimeTableList.setInterface, offset: myOffset } );
	}
	,
	goToColumnIndex : function( pmIndex )
	{
		var mySelector = $( TimeTableList.pThList ).eq( pmIndex );
		var myOffset = ( (TimeTableList.getWidth()/2) - ($( mySelector ).width()) ) * -1;
		$( 'div#timeTableTimes' ).scrollTo( $( mySelector ), TimeTableList.pSpeed, { axis: 'x', onAfter: TimeTableList.setInterface, offset: myOffset } );
	}
	,
	goPrev : function()
	{
		var myIteration = TimeTableList.getWidth()/2;
		$( 'div#timeTableTimes' ).scrollTo( '-=' + myIteration + 'px', TimeTableList.pSpeed, { axis: 'x', onAfter: TimeTableList.setInterface } );
	}
	,
	goNext : function()
	{
		var myIteration = TimeTableList.getWidth()/2;
		$( 'div#timeTableTimes' ).scrollTo( '+=' + myIteration + 'px', TimeTableList.pSpeed, { axis: 'x', onAfter: TimeTableList.setInterface } );
	}
	,
	getWidth : function()
	{
		return( $( 'div#timeTableTimes' ).width() );
	}
	,
	initInterface : function()
	{
		$( 'a.print' ).click( function(){ TimeTableList.print(); } );
		
		//Set button functionality.
		$( 'a#earlierTrains' ).click( function(){ TimeTableList.goPrev(); } );
		$( 'a#laterTrains' ).click( function(){ TimeTableList.goNext(); } );
		
		//Set keyboard functionality.
		$( document ).keyup( function( event ){
    		if( event.keyCode == 37){ TimeTableList.goPrev(); }; //back arrow
			if( event.keyCode == 39){ TimeTableList.goNext(); }; //forward arrow
		});
		
		$( 'a:contains("12:00am")' ).click( function(){
			var myTimeCode = TimeTableList.getTimeCode( '12:00', 'am' );
			var myIndex = TimeTableList.findColumnIndex( myTimeCode );
			if( myIndex > -1 ){ TimeTableList.goToColumnIndex( myIndex ); };
		} );
		
		$( 'a:contains("6:00am")' ).click( function(){
			var myTimeCode = TimeTableList.getTimeCode( '6:00', 'am' );
			var myIndex = TimeTableList.findColumnIndex( myTimeCode );
			if( myIndex > -1 ){ TimeTableList.goToColumnIndex( myIndex ); };
		} );
		
		$( 'a:contains("9:00am")' ).click( function(){
			var myTimeCode = TimeTableList.getTimeCode( '9:00', 'am' );
			var myIndex = TimeTableList.findColumnIndex( myTimeCode );
			if( myIndex > -1 ){ TimeTableList.goToColumnIndex( myIndex ); };
		} );
		
		$( 'a:contains("12:00pm")' ).click( function(){
			var myTimeCode = TimeTableList.getTimeCode( '12:00', 'pm' );
			var myIndex = TimeTableList.findColumnIndex( myTimeCode );
			if( myIndex > -1 ){ TimeTableList.goToColumnIndex( myIndex ); };
		} );
		
		$( 'a:contains("3:00pm")' ).click( function(){
			var myTimeCode = TimeTableList.getTimeCode( '3:00', 'pm' );
			var myIndex = TimeTableList.findColumnIndex( myTimeCode );
			if( myIndex > -1 ){ TimeTableList.goToColumnIndex( myIndex ); };
		} );
		
		$( 'a:contains("6:00pm")' ).click( function(){
			var myTimeCode = TimeTableList.getTimeCode( '6:00', 'pm' );
			var myIndex = TimeTableList.findColumnIndex( myTimeCode );
			if( myIndex > -1 ){ TimeTableList.goToColumnIndex( myIndex ); };
		} );
		
		$( 'a:contains("9:00pm")' ).click( function(){
			var myTimeCode = TimeTableList.getTimeCode( '9:00', 'pm' );
			var myIndex = TimeTableList.findColumnIndex( myTimeCode );
			if( myIndex > -1 ){ TimeTableList.goToColumnIndex( myIndex ); };
		} );
	}
	,
	findColumnIndex : function( pmTimeCode )
	{
		var myColIndex = -1;
		
		var myTimeCode = parseInt( pmTimeCode );
		var myColCount = $( TimeTableList.pThList ).size();
		for ( i = 0; i < myColCount; i++)
		{
			var myThMinTimeCode = $( TimeTableList.pThList ).eq(i).attr('min');
			myThMinTimeCode = parseInt( myThMinTimeCode );
			//var myThMaxTimeCode = $( TimeTableList.pThList ).eq(i).attr('max');
			//myThMaxTimeCode = parseInt( myThMaxTimeCode );
			var myColFound = myTimeCode <= myThMinTimeCode;
			if( myColFound ){ myColIndex = i; break; };
			
		};//end for
		
		return( myColIndex );
	}
	,
	setInterface : function()
	{		
		var myPrevVis = ( $( 'div#timeTableTimes' ).scrollLeft() == 0 ) ? "hidden" : "visible";
		var myNextVis = ( $( 'div#timeTableTimes' ).scrollLeft() == ($( 'div#timeTableTimes table' ).width() - $( 'div#timeTableTimes' ).width()) ) ? "hidden" : "visible";
		$( 'a#earlierTrains' ).css( 'visibility', myPrevVis );
		$( 'a#laterTrains' ).css( 'visibility', myNextVis );
		
		var myVisibleCols = TimeTableList.getVisibleCols();
		var myColCount = $( TimeTableList.pThList ).size();
		for ( i = 0; i < myColCount; i++)
		{
			var myMin = $( TimeTableList.pThList ).eq(i).attr( 'min' );
			var myTag = ( myVisibleCols.indexOf( myMin ) > -1 ) ? "shown" : "hidden";
			$( TimeTableList.pThList ).eq(i).removeClass( "shown" );
			$( TimeTableList.pThList ).eq(i).removeClass( "hidden" );
			$( TimeTableList.pThList ).eq(i).addClass( myTag );
			var myTdList = $( 'div#timeTableTimes td:nth-child(' + (i+1) + ')' );
			$( myTdList ).removeClass( "shown" );
			$( myTdList ).removeClass( "hidden" );
			$( myTdList ).addClass( myTag );
			//console.log( myVisibleCols, " : ", myMin, " : ", myVisibleCols.indexOf( myMin ) > -1 );
		}
		//console.log( myVisibleCols, " : ", " : " , myScrollLeft, " , " , $( 'div#timeTableTimes' ).scrollLeft() == 0, myFinish );
	}
	,
	getVisibleCols : function()
	{
		var myScrollLeft = $( 'div#timeTableTimes' ).scrollLeft();
		var myMaskLeft = $( 'div#timeTableTimes' ).offset().left;
		var myMaskRight = myMaskLeft + $( 'div#timeTableTimes' ).width();
		
		var myColCount = $( TimeTableList.pThList ).size();
		
		//var myVisibleList = "";
		var myVisibleList = new Array();
		for ( i = 0; i < myColCount; i++)
		{
			var myThLeft = $( TimeTableList.pThList ).eq(i).offset().left;
			var myVisible = ( myThLeft >= myMaskLeft ) && ( myThLeft <= myMaskRight );
			if( myVisible )
			{
				//if( myVisibleList != "" ){ myVisibleList += " ; " };
				//myVisibleList += $( TimeTableList.pThList ).eq(i).attr( 'min' );
				//myVisibleList.push( i );
				myVisibleList.push( $( TimeTableList.pThList ).eq(i).attr( 'min' ) );
			};
		};//end for
		
		return( myVisibleList );
	}
	,
	print : function()
	{
		//var myVisCols = TimeTableList.getVisibleCols();
		window.print();
	}
};


//Handles allowing TOC header link selection to reflect in answer content.
TocList =
{
	init : function()
	{
		//Reset all answers to normal
		TocList.resetAllAnswers();
		
		//Set TOC links to style approriate answer.
		jQuery( 'ul.tocList li a' ).click( function(){
			TocList.resetAllAnswers();
			var myId = jQuery( this ).attr( 'href' );
			jQuery( 'ul.tocAnswerList ' + myId ).addClass( 'active' );
		} );
		
		//Set top buttons to reset all answers.
		jQuery( 'ul.tocAnswerList li a[href = "#faqList"]' ).click( function(){
			TocList.resetAllAnswers();
		} );
	}
	,
	//Resets all answer elements to normal. 
	resetAllAnswers : function()
	{
		jQuery( 'ul.tocAnswerList li' ).removeClass( 'active' );
	}
};//end object literal faqList


//handles setting site elements
GenSiteElements =
{
	//handles setting up site elements
	init : function()
	{
		GenSiteElements.setBlockquotes();
		GenSiteElements.setOrderedLists();
		GenSiteElements.setExternalLinks();
	}//end function init
	,
	//handles setting up block quotes
	setBlockquotes : function()
	{
		jQuery( 'blockquote' ).each( function(){
			var myTitle = jQuery( this ).attr( 'title' );
			var myCite = jQuery( this ).attr( 'cite' );
			jQuery( this ).prepend( '<h3>' + myTitle + '</h3>' );
			jQuery( this ).append( '<p class="cite"><a href=\"' + myCite + '\">Source</a></p>' );
		} );
	}//end function setBlockquotes
	,
	//handles setting ordered list
	setOrderedLists : function()
	{
		//edit ordered list dom to allow styling
		jQuery( 'ol li' ).wrapInner( '<span class="olItemContent"></span>' );
		//activate ordered list styling via adding class - edit styles in stylesheet
		jQuery( 'ol' ).addClass( 'javaScriptStyled' );
	}
	,
	//handles external links
	setExternalLinks : function()
	{
		jQuery( 'a[rel="external"]' ).each( function(){
			jQuery( this ).addClass( 'externalLink' );
			
		} );
		
		//jQuery( 'a[rel="external"]' ).click( function(){
			
			//window.open( jQuery( this ).attr( 'href' ) );
			//return( false );
		//} );
	}//end function setExternalLinks
	
	
};//end object literal siteElements

ToolTips =
{
	init : function()
	{	
		//Inject tooltip dom elements.
		$( 'body' ).append( '<div id="tooltip"></div>' );
		
		
		$( 'div#languageInfo ul a' ).tooltip( { tip: 'div#tooltip', position: 'bottom center', offset: [10,0], delay: 0, onBeforeShow: function(){ ToolTips.setToolTip(); } } );
		//$( 'a.tooltip' ).tooltip( { tip: 'div#tooltip', position: 'top center', offset: [-10,0], delay: 0, onBeforeShow: function(){ ToolTips.setToolTip(); } } );
		//$( 'table tr.new' ).tooltip( { tip: 'div#tooltip', position: 'top center', offset: [-10,0], delay: 0, onBeforeShow: function(){ ToolTips.setToolTip( { ttClass: 'alert' } ); } } );
	}
	,
	setToolTip : function( pmParams )
	{
		//Check for parameters.
		if( pmParams == undefined ){ pmParams = { ttClass: '' }; };
		var myClass = pmParams.ttClass;
		$( 'div#tooltip' ).attr( 'class', myClass );
		
		//Add tooltip pointer.
		$( 'div#tooltip' ).append( '<div class="pointer"></div>' );
		//Position pointer.
		var myPosX = ( $( 'div#tooltip' ).outerWidth()/2 ) - 8;
		$( 'div#tooltip div.pointer' ).css( { "left" : myPosX + "px" } );
	}
}//end ToolTips
