var contentBlockMargin = 4;

setIEgetElementsByClassName();

//should be called first, so that setIEgetElementsByClassName() is set
function moveContentBlocks()
{
	var contentBlockHTMLCol = document.getElementsByClassName( 'contentBlock' );
	var projectContentBlockHTMLCol = document.getElementsByClassName( 'projectContentBlock' );
	
	contentBlockArr = concatHTMLCollection( contentBlockHTMLCol, projectContentBlockHTMLCol );
	
	var columnW = getColumnWidth( contentBlockArr );
	
	if( viewportwidth >= (columnW*2) )	setContentBlocksPos( contentBlockArr );
	else								removeJS( contentBlockArr );
}


function showContentBlocksByID( id, doShow )
{
	var thisContentBlock = document.getElementById( id );
	
	var cssRule = 'visibility:visible;';
	if( !doShow ) cssRule = 'visibility:hidden;';
	
	setIESafeCSS( thisContentBlock, cssRule );
}


function showBody( doShow )
{
	var thisBody = document.body;
	
	var cssRule = 'visibility:visible;';
	if( !doShow ) cssRule = 'visibility:hidden;';
	
	setIESafeCSS( thisBody, cssRule );
}
	

function showContentBlocks( doShow )
{
	var contentBlockHTMLCol = document.getElementsByClassName( 'contentBlock' );
	var projectContentBlockHTMLCol = document.getElementsByClassName( 'projectContentBlock' );
	
	contentBlockArr = concatHTMLCollection( contentBlockHTMLCol, projectContentBlockHTMLCol );
	
	var cssRule = 'visibility:visible;';
	if( !doShow ) cssRule = 'visibility:hidden;';
	
	for( var i = 0; i < contentBlockArr.length; i++ )
	{
		var thisContentBlock = contentBlockArr[i];
		setIESafeCSS( thisContentBlock, cssRule );
	}
}


function removeJS( contentBlockArr )
{
	for( var i = 0; i < contentBlockArr.length; i++ )
	{
		var thisContentBlock = contentBlockArr[i];
		setIESafeCSS( thisContentBlock, 'float:none; position:static');
	}
}


function getColumnWidth( contentBlockArr )
{
	var firstContentBlock = contentBlockArr[0];
	var totalW = firstContentBlock.offsetWidth + contentBlockMargin;
	
	return totalW;
}



function setContentBlocksPos( contentBlockArr )
{
	var xPos = 0;
	var yPos = 0;
	var skipSet = false;
	
	for( var i = 0; i < contentBlockArr.length; i++ )
	{
		var thisContentBlock = contentBlockArr[i];
		
		if( !skipSet )
		{
			setCSSPos( thisContentBlock, xPos, yPos );
			
			var thisContentBlockTotalH = getThisContentBlockTotalHeight( thisContentBlock );
			
			if( thisContentBlockTotalH >= viewportheight )
			{
				xPos += thisContentBlock.offsetWidth + contentBlockMargin;
				yPos = 0;
			}
			else
			{
				yPos += thisContentBlock.offsetHeight + contentBlockMargin;
			}
			
		}
		
		var nextContentBlockTotalW = xPos + thisContentBlock.offsetWidth + contentBlockMargin;
		
		if( nextContentBlockTotalW >= viewportwidth   &&   i < contentBlockArr.length )
		{
			var dimsArr = getShortestColumnDims( contentBlockArr, i );
			var newXPos = dimsArr[0];
			var newYPos = dimsArr[1];
			
			setCSSPos( thisContentBlock, newXPos, newYPos );
			skipSet = true;
		}
		else
		{
			skipSet = false;
		}
	}
}


function setCSSPos( thisContentBlock, xPos, yPos )
{
	var leftVal = xPos + 'px';
	var topVal = yPos + 'px';
	setIESafeCSS( thisContentBlock, 'position:absolute; left:' + leftVal + '; top:' + topVal );
}


function getShortestColumnDims( contentBlockArr, id )
{
	var colDimMultiArr = [];
	
	for( var i = 0; i < id; i++ ) //id represents only those before the thisContentBlock 
	{
		var thisContentBlock = contentBlockArr[i];
		var xPos = thisContentBlock.offsetLeft;
		var thisColumnTotalH = getTotalColumnHeightByXPos( contentBlockArr, xPos, id );
		
		//console.log( 'getShortestColumnDims:: - xPos: ' + xPos + ' - thisColumnTotalH: ' + thisColumnTotalH );
		
		colDimMultiArr.push( [ xPos, thisColumnTotalH ] );
	}
	
	var dimsArr = getDimsFromShortestColumn( colDimMultiArr, id );
	
	return dimsArr;
}


function getDimsFromShortestColumn( colDimMultiArr, id )
{
	var lowestYPos = 100000; //just a very large number so that everything is less than it
	var currXPos = 0;
	
	for( var i = 0; i < id; i++ )
	{
		var dimsArr = colDimMultiArr[i];
		var thisYPos = dimsArr[1];
		
		if( thisYPos < lowestYPos )
		{
			lowestYPos = thisYPos;
			currXPos = dimsArr[0];
		}
	}
	
	return [ currXPos, lowestYPos ];
}


function getTotalColumnHeightByXPos( contentBlockArr, xPos, id )
{
	var totalH = 0;
	
	for( var i = 0; i < id; i++ )
	{
		var thisContentBlock = contentBlockArr[i];
		var thisContentBlockLeft = thisContentBlock.offsetLeft;
		var thisContentBlockTotalH = getThisContentBlockTotalHeight( thisContentBlock );
		
		if( xPos == thisContentBlockLeft   &&   thisContentBlockTotalH > totalH )
		{
			totalH = thisContentBlockTotalH;
			//console.log( 'xPos: ' + xPos + ' - totalH: ' + totalH );
		}
	}
	
	return totalH;
}


function getThisContentBlockTotalHeight( thisContentBlock )
{
	var thisContentBlockTotalH = thisContentBlock.offsetTop + thisContentBlock.offsetHeight + contentBlockMargin;
	
	return thisContentBlockTotalH;
}





