var intCurrPos = 0, intContainerWidth, intColumnHeight, intGutter, intColumns, intFontSize, strContentID, strColumnsID, intLineHeight, objTextSize, intCurrTextSize, arrContentSpan = new Array();

var isIE = (navigator.appName == 'Microsoft Internet Explorer') ? true : false;
var isSafari = (navigator.appVersion.indexOf('Safari') >= 0) ? true : false;

function getHeight(strObject) {
	if(strObject == 'window') {
		if(window.innerHeight)
			return(window.innerHeight);
		else
			return(document.getElementById('bodyNode').offsetHeight);
	}
	else {
		objObject = document.getElementById(strObject);
		if(objObject.offsetHeight)
			return(objObject.offsetHeight);
	}
}

function articleSetup(){
	var parentDiv = document.getElementById(strColumnsID);
	var intCurrPos = 0;
	for(var intCount = 0; intCount < intColumns; intCount++) {
		var objContent = document.getElementById(strContentID);
		var objColumn = objContent.cloneNode(true);
		objColumn.setAttribute('id', 'column'+ intCount);
		objColumn.style.position = 'absolute';
		objColumn.style.top = '0px';
		objColumn.style.fontSize = intFontSize +'px';
		objColumn.style.display = 'block';
		if(isIE)
			objColumn.style.lineHeight = intLineHeight +'px';
		else
			objColumn.style.lineHeight = '16px';
		parentDiv.appendChild(objColumn);
	}
}

function layoutArticles() {
	var intContainerHeight = getHeight(strColumnsID);
	for(var intCount = 0; intCount < intColumns; intCount++) {
		var objColumn = document.getElementById('column'+ intCount);
		objColumn.style.top = -1 * (intContainerHeight * (intCount + intCurrPos)) +'px';
		
		var arrSpan = objColumn.getElementsByTagName('span');
		for(intSpanCount = 0; intSpanCount < arrSpan.length; intSpanCount++) {
			if(arrSpan[intSpanCount].offsetHeight > 0) {
				arrSpan[intSpanCount].style.marginTop = '0px';
				var intColumnPos = Math.floor(arrSpan[intSpanCount].offsetTop / setSnap(intColumnHeight));
				var intTopLines = arrSpan[intSpanCount].offsetTop / intLineHeight;
				var intTotalLines = setSnap(intColumnHeight) / intLineHeight;
				var intLimitLines = intTotalLines - (arrSpan[intSpanCount].offsetHeight / intLineHeight);
				if(intTopLines > (intColumnPos * intTotalLines) + intLimitLines)
					arrSpan[intSpanCount].style.marginTop = intLineHeight +'px';
			}
		}
	}
	createColumnPages();
}

function setSnap(intHeight){
	if(intHeight == null)
		intHeight = 0;
	return(intLineHeight * Math.round(intHeight / intLineHeight));
}

function setArticleHeight(){
	if(document.getElementById(strContentID) != null) {
		document.getElementById(strColumnsID).style.height = setSnap(intColumnHeight) +'px';
		var intTextHeight = getHeight('column0');
		var intContainerHeight = getHeight(strColumnsID);
		while((intContainerHeight * (intCurrPos + (intColumns - 1))) > intTextHeight && intCurrPos > 0) {
			intCurrPos = intCurrPos - 1;
		}
	}
}

function createColumnPages() {
	var intContainerHeight = getHeight(strColumnsID);
	var intTextHeight = getHeight('column0');
	var intTotalColumns = Math.ceil(intTextHeight / intContainerHeight);
	var intTotalPages = Math.ceil(intTotalColumns / intColumns);
	if(intTotalPages > 1) {
		var arrPages = new Array(intTotalPages);
		for(var intCount = 0; intCount < intTotalPages; intCount++) {
			arrPages[intCount] = '<a href="#" title="go to: page '+ (intCount + 1) +'" onclick="jumpToPage('+ intCount +');"><span class="pagenumber" style="background-image: url(/files/images/pages/'+ (intCount + 1) +'.gif);"><span class="hidden"> '+ (intCount + 1) +' </span></span></a>';
		}
		var strPages = arrPages.join('<span class="hidden"> | </span>');
		document.getElementById('pagenumbers').innerHTML = '<span id="pagetext">page </span>'+ strPages;
	}
	else
		document.getElementById('pagenumbers').innerHTML = '';
}

function jumpToPage(intPageNumber) {
	var intContainerHeight = getHeight(strColumnsID);
	var intTextHeight = getHeight('column0');
	if((intContainerHeight * (intPageNumber * intColumns)) < intTextHeight) {
		intCurrPos = intPageNumber * intColumns;
		layoutArticles();
	}
}

function layoutColumns(){
	intCurrPos = 0;
	intColumnWidth = Math.floor((intContainerWidth / intColumns) - (intGutter * (intColumns - 1)));
	for(var intCount = 0; intCount < intColumns; intCount++) {
		var objColumn = document.getElementById('column'+ intCount);
		objColumn.style.zIndex = 5;
		objColumn.style.display = 'block';
		objColumn.style.width = intColumnWidth +'px';
		objColumn.style.left = (intCount * (intColumnWidth + intGutter)) +'px';
	}
}

function checkTextSize(event) {
	var intNewTextSize = (isIE) ? parseFloat(objTextSize.currentStyle.fontSize.replace('pt', '')) : parseFloat(document.defaultView.getComputedStyle(objTextSize,null).fontSize.replace('px', ''));
	if(intCurrTextSize != intNewTextSize || (isSafari && ((event.which == '189' && event.ctrlKey) || (event.which == '187' && event.ctrlKey)))) {
		if(intCurrTextSize != intNewTextSize) {
			intCurrPos = 0;
			if(isIE) {
				intFontSize = intFontSize + (intNewTextSize - intCurrTextSize);
				intLineHeight = intFontSize + Math.round(.3 * intFontSize);
				for(var intCount = 0; intCount < intColumns; intCount++) {
					objText = document.getElementById('column'+ intCount);
					objText.style.fontSize = intFontSize +'px';
					objText.style.lineHeight = intLineHeight +'px';
				}
			}
			else {
				intLineHeight = intNewTextSize;
			}
			intCurrTextSize = intNewTextSize;
		}
		if(isSafari) {
			if(event.which == '189' && event.ctrlKey)
				intFontSize = intFontSize - 2;
			else if(event.which == '187' && event.ctrlKey)
				intFontSize = intFontSize + 2;
			intLineHeight = intFontSize + Math.round(.3 * intFontSize);
			for(var intCount = 0; intCount < intColumns; intCount++) {
				objText = document.getElementById('column'+ intCount);
				objText.style.fontSize = intFontSize +'px';
				objText.style.lineHeight = intLineHeight +'px';
			}
		}
		
		for(var intColCount = 0; intColCount < intColumns; intColCount++) {
			var objText = document.getElementById('column'+ intColCount);
			var arrPara = objText.getElementsByTagName('p');
			for(intCount = 0; intCount < arrPara.length; intCount++)
				arrPara[intCount].style.marginBottom = intLineHeight +'px';
			
			var arrList = objText.getElementsByTagName('ul');
			for(intCount = 0; intCount < arrList.length; intCount++)
				arrList[intCount].style.marginBottom = intLineHeight +'px';
			
			var arrSpan = objText.getElementsByTagName('span');
			for(intCount = 0; intCount < arrSpan.length; intCount++) {
				if(arrSpan[intCount].offsetHeight > 0)
					arrSpan[intCount].style.height = (intLineHeight * Math.ceil(arrContentSpan[intCount] / intLineHeight)) +'px';
			}
		}
		
		setArticleHeight();
		layoutArticles();
	}
}

function initColumns(intWidth, intHeight, intIGutter, intIColumns, intIFontSize, strIContentID, strIColumnsID) {
	if(document.getElementById(strIContentID) != null) {
		intContainerWidth = intWidth;
		intColumnHeight = intHeight;
		intGutter = intIGutter;
		intColumns = intIColumns;
		intFontSize = intIFontSize;
		strContentID = strIContentID;
		strColumnsID = strIColumnsID;
		objTextSize = document.getElementById('textsize');
		intCurrTextSize = (isIE) ? parseFloat(objTextSize.currentStyle.fontSize.replace('pt', '')) : parseFloat(document.defaultView.getComputedStyle(objTextSize,null).fontSize.replace('px', ''));
		if(isIE) {
			intFontSize = intCurrTextSize - 1;
			intLineHeight = intFontSize + Math.round(.3 * intFontSize);
		}
		else {
			intFontSize = intCurrTextSize - 5;
			intLineHeight = intCurrTextSize;
		}
		
		var arrPara = document.getElementById(strIContentID).getElementsByTagName('p');
		for(intCount = 0; intCount < arrPara.length; intCount++)
			arrPara[intCount].style.marginBottom = intLineHeight +'px';
		
		var arrList = document.getElementById(strIContentID).getElementsByTagName('ul');
		for(intCount = 0; intCount < arrList.length; intCount++)
			arrList[intCount].style.marginBottom = intLineHeight +'px';
		
		var arrSpan = document.getElementById(strIContentID).getElementsByTagName('span');
		for(intCount = 0; intCount < arrSpan.length; intCount++) {
			arrContentSpan[intCount] = arrSpan[intCount].offsetHeight;
			if(arrSpan[intCount].offsetHeight > 0)
				arrSpan[intCount].style.height = (intLineHeight * Math.ceil(arrSpan[intCount].offsetHeight / intLineHeight)) +'px';
		}
		
		document.getElementById(strContentID).style.display = 'none';
		document.getElementById(strIColumnsID).style.width = intContainerWidth +'px';
		document.getElementById(strIColumnsID).style.overflow = 'hidden';
		document.getElementById(strIColumnsID).style.position = 'absolute';
		
		articleSetup();
		setArticleHeight();
		layoutColumns();
		layoutArticles();

		if(document.addEventListener) {
			document.addEventListener('keyup', checkTextSize, true);
			if(!isSafari)
				document.addEventListener('mousemove', checkTextSize, true);
		}
		else if(document.attachEvent) {
			document.attachEvent('onkeyup', checkTextSize);
			if(!isSafari)
				document.attachEvent('onmousemove', checkTextSize);
		}
		else {
			document.onkeyup = checkTextSize;
			if(!isSafari)
				document.onmousemove = checkTextSize;
		}
	}
}