var diaryHolder; //gets used in resize
var marginTopNews = 10;

function setNewsArrows()
{
	jQuery('#news-arrow-down').click(function()
	{
		onNewsArrowDown();
	});
	
	jQuery('#news-arrow-up').click(function()
	{
		onNewsArrowUp();
	});
}



function setNewsBaseBtns()
{
	jQuery('.news-base-btn a').click(function()
	{
		var yearStr 		= jQuery(this).html();
		var titleStr		= jQuery(this).attr('title');
		var yearArr 		= titleStr.split('|-|');
		
		var btnID = jQuery('.news-base-btn a').index( this );
		
		pressNewsBase( yearStr, yearArr, btnID )
	});
}


function pressNewsBase( yearStr, yearArr, btnID )
{
	if( yearStr == '. . .' )	changeNewsBaseYears( yearArr, btnID );
	else						moveNews( yearStr );
}


function changeNewsBaseYears( yearArr, btnID )
{
	var dir = 1; 				//if LAST btn is clicked (and html text equals dotStr), goes FORWARDS
	if( btnID == 0 ) dir = -1; //if FIRST btn is clicked (and html text equals dotStr), goes BACKWARDS
	
	var btnAmt = 5;
	var dotStr = '. . .';
	var newsBaseBtn = jQuery('.news-base-btn a');
	
	//these change depending on whether or not btn5.html() == dotStr
	var counter;
	var startAmt;
	var endAmt;
	var thisID;
	
	var firstBtn = newsBaseBtn.eq(0);
	var secondBtn = newsBaseBtn.eq(1);
	var lastBtn = newsBaseBtn.eq(4);
	
	if( dir == 1 ) //goes FORWARDS
	{
		var startPlusAmt;
		var endPlusAmt;
		
		if( firstBtn.html() == dotStr )
		{
			startPlusAmt = 0;
			endPlusAmt = 0;
			thisID = yearArr.indexOf( secondBtn.html() );
		}
		else
		{
			startPlusAmt = -1;
			endPlusAmt = -1;
			thisID = yearArr.indexOf( firstBtn.html() );
		}
		
		firstBtn.html( dotStr );
		counter = 1;
		startAmt = thisID + btnAmt  + startPlusAmt;
		endAmt   = startAmt + btnAmt + endPlusAmt;
		
		if( endAmt < yearArr.length ) // DO show dotStr on last btn, if under max year amount
		{
			endAmt -= 1;
			lastBtn.html( dotStr );
		}
		else // do NOT show dotStr on last btn, if max year amount reached
		{
			startAmt = yearArr.length - (btnAmt - 1);
			endAmt = yearArr.length;
		}
		
	}
	else if( dir == -1 ) //goes BACKWARDS
	{
		thisID = yearArr.indexOf( secondBtn.html() );
		
		lastBtn.html( dotStr );
		counter = 0;
		startAmt = thisID - btnAmt;
		endAmt   = startAmt + btnAmt;
		
		if( startAmt > 0 ) // DO show dotStr on first btn, if under max year amount
		{
			counter = 1;
			startAmt += 1;
			firstBtn.html( dotStr );
		}
		else // do NOT show dotStr on first btn, if max year amount reached
		{
			startAmt = 0;
			endAmt = btnAmt-1;
		}
	}
	
	
	//Apply conditional changes
	for( var i = startAmt; i < endAmt; i++ )
	{
		var btn = newsBaseBtn.eq( counter );
		var thisYear = yearArr[i];
		btn.html( String( thisYear ) );
		
		counter += 1;
	}
}


function moveNews( yearStr )
{
	yearStr = 'year-' + yearStr;//adds prefix, as id cannot start with number (for HTML validation)
	
	var yPos = Math.round( jQuery('#' + yearStr).position().top );
	yPos *= -1;
	//alert( 'pressed ' + yearStr + ' - yPos: ' + yPos );
	
	var marginTopNews = 0;
	
	var newsBottomMask = jQuery('#news-bottom-mask');
	var bgHeight = newsBottomMask.height();
	
	var assetSet = jQuery('#news-asset-set');
	var minYPos = assetSet.height() * -1;
	minYPos += bgHeight;
	
	var arrowUp = jQuery('#news-arrow-up');
	var arrowDown = jQuery('#news-arrow-down');
	
	if( yPos !== false )
	{
		if( yPos <= minYPos )
		{
			arrowUp.css('cursor','pointer');
			arrowUp.animate({ opacity: 1 }, "fast");
			
			arrowDown.animate({ opacity: 0.3 }, "fast");
			arrowDown.css('cursor','default');
			
			yPos += marginTopNews;
		}
		else if( yPos >= -marginTopNews )
		{
			arrowDown.css('cursor','pointer');
			arrowDown.animate({ opacity: 1 }, "fast");
			
			arrowUp.animate({ opacity: 0.3 }, "fast");
			arrowUp.css('cursor','default');
			
			yPos += marginTopNews;
		}
		else
		{
			arrowUp.css('cursor','pointer');
			arrowUp.animate({ opacity: 1 }, "fast");
			
			arrowDown.css('cursor','pointer');
			arrowDown.animate({ opacity: 1 }, "fast");
			
			yPos += marginTopNews;
		}
		
		assetSet.animate( { top: yPos +'px' }, 500 );
	}
}


function setProjectImageArrows()
{
	jQuery('#project-image-arrow-left').click(function()
	{
		onProjectImageArrow( 1 );
	});
	
	jQuery('#project-image-arrow-right').click(function()
	{
		onProjectImageArrow( -1 );
	});
	
	//this is so it sets scroller h2 text
	onProjectImageArrow( 1 );
}


function setProjectAssetArrows()
{
	jQuery('#project-asset-arrow-left').click(function()
	{
		onProjectAssetArrow( -1 );
	});
	
	jQuery('#project-asset-arrow-right').click(function()
	{
		onProjectAssetArrow( 1 );
	});
}




function onNewsArrowDown()
{
	var assetSet = jQuery('#news-asset-set');
	var arrowUp = jQuery('#news-arrow-up');
	var arrowDown = jQuery('#news-arrow-down');
	
	var assetTop = assetSet.position().top;
	
	var yPos = getNextNewsAssetYPos( 1 ) - marginTopNews;
	
	if( yPos !== false )
	{
		var assetH = assetSet.height();
		var bottomH = jQuery('#news-bottom-mask').height();
		
		if( isIE6() ) bottomH -= 25;
	
		if( yPos <= -assetH + bottomH  )
		{
			arrowDown.animate({ opacity: 0.3 }, "fast");
			arrowDown.css('cursor','default');
			//yPos = -assetH + bottomH;
		}
		
		arrowUp.css('cursor','pointer');
		arrowUp.animate({ opacity: 1 }, "fast");
		
		assetSet.animate( { top: yPos +'px' }, 500 );
	}
}


function onNewsArrowUp()
{
	var assetSet = jQuery('#news-asset-set');
	var arrowUp = jQuery('#news-arrow-up');
	var arrowDown = jQuery('#news-arrow-down');
	
	var assetTop = assetSet.position().top;
	var yPos = getNextNewsAssetYPos( -1 ) - marginTopNews;
	
	if( yPos !== false )
	{
		if( yPos >= 0 )
		{
			arrowUp.animate({ opacity: 0.3 }, "fast");
			arrowUp.css('cursor','default');
			//yPos = 0;
		}
		
		arrowDown.css('cursor','pointer');
		arrowDown.animate({ opacity: 1 }, "fast");
		
		assetSet.animate( { top: yPos +'px' }, 500 );
	}
}


function getNextNewsAssetYPos( dir )
{
	var assetSet = jQuery('#news-asset-set');
	//getElementsByClassName is initialised in init-page.js
	var assetArr = document.getElementsByClassName('news-asset');
	
	for( var i = 0; i < assetArr.length; i++ )
	{
		var id = i + dir;
		if( id < 0 ) id = 0;
		else if( id > assetArr.length-1 ) id = assetArr.length-1;
		
		var limitY = assetSet.position().top + marginTopNews;
		
		if( dir == 1 )
		{
			limitY += assetArr[id].offsetTop;
			if( limitY > marginTopNews ) return -assetArr[id].offsetTop + marginTopNews;
		}
		else if( dir == -1 )
		{
			limitY += assetArr[i].offsetTop; //purposely i, not id
			if( limitY >= marginTopNews ) return -assetArr[id].offsetTop + marginTopNews;
		}
	}
	
	return false;
}


function onProjectAssetArrow( dir )
{
	var viewMax = parseFloat( jQuery('#project-asset-scroller').attr( 'title' ) ); //gets asset amount
	
	var currURLArr = window.location.toString().split('&id=');
	
	var currID = parseFloat( currURLArr[1] ) + dir;
	if( currID < 0 ) currID = viewMax-1;
	else if( currID > viewMax-1 ) currID = 0;
	
	var newURL = currURLArr[0] + '&id=' + currID;
	
	window.location = newURL;
}


function onProjectImageArrow( dir )
{
	var colOutterW = jQuery('#project-columns-outter').width() + 30 - 4; //4 is for border width 2x2px
	var colInner = jQuery('#project-columns-inner');
	var leftPos = colInner.position().left;
	var id = Math.floor( leftPos / colOutterW ) + dir;
	var xPos = id * colOutterW;
	var scrollText = jQuery('#project-image-scroller h2');
	
	id = -id;
	var viewAmt = ((id+1)*4);
	var viewMax = colInner.children().size();
	
	if( xPos < -colInner.width() + colOutterW )
	{
		xPos = -colInner.width() + colOutterW;
		viewAmt = viewMax;
	}
	else if( xPos > 0 )
	{
		xPos = 0;
		viewAmt = 4;
	}
	
	colInner.animate({ left: xPos }, 500 );
	
	var arrowRight = jQuery('#project-image-arrow-right');
	var arrowLeft = jQuery('#project-image-arrow-left');
	
	if( viewAmt >= viewMax )
	{
		arrowRight.css('opacity',0.3);
		arrowRight.css('cursor','default');
		
		arrowLeft.css('opacity',1);
		arrowLeft.css('cursor','pointer');
	}
	else if( viewAmt <= 4 )
	{
		arrowRight.css('opacity',1);
		arrowRight.css('cursor','pointer');
		
		arrowLeft.css('opacity',0.3);
		arrowLeft.css('cursor','default');
	}
	else
	{
		arrowRight.css('opacity',1);
		arrowRight.css('cursor','pointer');
		
		arrowLeft.css('opacity',1);
		arrowLeft.css('cursor','pointer');
	}
		
	scrollText.text('Showing ' + (viewAmt-3) + '-'+ viewAmt + ' of ' + viewMax );
}


function setDiaries()
{
	var assetArr = document.getElementsByClassName('diary-asset');
	var gap = 10;
	
	for( var i = 0; i < assetArr.length; i++ )
	{
		var thisAsset = assetArr[i];
		
		fixTextWidth( thisAsset );
		
		var h1 = thisAsset.getElementsByTagName('h1')[0];
		var h2 = thisAsset.getElementsByTagName('h2')[0];
		var minH = h1.offsetHeight + h2.offsetHeight + gap;
		
		thisAsset.style.height = minH + 'px';
		
	}
}


function expandDiary( thisAsset )
{	
	var resultArr = getHTMLElementArray( thisAsset, 'div', 'diary-img-holder' );
	diaryHolder = resultArr[0];
	var currHolder = diaryHolder;
	var imgArr = resultArr[1];
	
	var gap = 10;
	var h1 = thisAsset.children('h1');
	var h2 = thisAsset.children('h2');
	var p = thisAsset.children('p');
	
	
	var minH = h1.height() + h2.height() + gap;
	var maxH = minH + p.height() + 1; //needs the 1, so that it isn't the same as minH, when there is no body
	
	
	if( thisAsset.height() != maxH )
	{
		currHolder.style.visibility = 'visible';
		loadImages( imgArr );
		activateImages( imgArr, true );
		thisAsset.animate( { height: maxH }, 500, function(){ onAnimateBodyHeightComplete( thisAsset ); } );
	}
	else
	{
		currHolder.style.visibility = 'hidden';
		diaryHolder = null; //stops resize to diaryHolder height
		activateImages( imgArr, false );
		thisAsset.animate( { height: minH }, 500, function(){ onAnimateBodyHeightComplete( thisAsset ); } );
	}
	
	closeActiveDiaries( currHolder );
}


function getHTMLElementFromJQuery( obj, objType )
{
	var classSyntax = 'class';
	if( isIE6()  ||  isIE7() ) classSyntax = 'className';
	
	className = obj.attr( 'class' );
	
	var resultArr = getHTMLElementArray( obj.parent(), objType, className );
	
	return resultArr[1][0];
}


function onAnimateBodyHeightComplete( thisAsset )
{
	resizeContainer(); 
}


// gets HTML Element Array From JQuery Object By Tag And Class Name
function getHTMLElementArray( obj, tagName, className )
{
	var classSyntax = 'class';
	if( isIE6()  ||  isIE7() ) classSyntax = 'className';
	
	var arr;
	
	for( var i = 0; i < obj.children().length; i++ )
	{
		var htmlEl = obj.children()[i];
		//alert( htmlEl.getAttribute( classSyntax ) );
		
		if( htmlEl.getAttribute( classSyntax ) == className )
		{
			arr = htmlEl.getElementsByTagName( tagName );
			break;
		}
	}
	
	return new Array( htmlEl, arr );
}


function getDiaryHeaderWidth()
{
	return jQuery('#diary-header').width();
}



//this is an IE6/7 fix. Stops width from resizing with width
function fixTextWidth( thisAsset ) 
{
	var h2 = thisAsset.getElementsByTagName('h2')[0];
	var body = thisAsset.getElementsByTagName('p')[0];
	var newWidth = getDiaryHeaderWidth();
	
	h2.style.width = newWidth + 'px';
	body.style.width = newWidth + 'px';
}


function closeActiveDiaries( currHolder )
{
	var assetArr = document.getElementsByClassName('diary-asset');
	
	for( var i = 0; i < assetArr.length; i++ )
	{
		var thisAsset = assetArr[i];
		
		var gap = 10;
		var headerW = document.getElementById('diary-header').offsetWidth;
		var h1 = thisAsset.getElementsByTagName('h1')[0];
		var h2 = thisAsset.getElementsByTagName('h2')[0];
		var p = thisAsset.getElementsByTagName('p')[0];
		var imgArr = thisAsset.getElementsByTagName('div');
		
		var minH = h1.offsetHeight + h2.offsetHeight + gap;
		var maxH = minH + p.offsetHeight + 1; //needs the 1, so that it isn't the same as minH, when there is no body
		var thisHolder = thisAsset.getElementsByTagName('div')[0];

		if( thisHolder != currHolder   &&   thisAsset.offsetHeight == maxH )
		{
			
			thisHolder.style.visibility = 'hidden';
			diaryHolder = null; //stops resize to diaryHolder height
			activateImages( imgArr, false );
			thisAsset.style.height = minH + 'px';
			
			fixTextWidth( thisAsset );
		}
	}
}


function loadImages( imgArr )
{
	for( var i = 0; i < imgArr.length; i++ )
	{
		var div = imgArr[i];
		var img = div.getElementsByTagName('img')[0];
		
		if( img.src != img.getAttribute('title') ) img.src = img.getAttribute('title');
	}
}

function activateImages( imgArr, activate )
{
	var pos = 'absolute';
	if( activate ) pos = 'relative';
	
	for( var i = 0; i < imgArr.length; i++ )
	{
		var div = imgArr[i];
		var img = div.getElementsByTagName('img')[0];
		
		img.style.position = pos;
	}
}



