var xmlDoc;
var xmlNew;
var html;
var page;
var pages;
var footnote;
var footnotes;
var objNodeList;
var formatInterval;
var cookiePage;
var pagewidth;
var browser;
var files;
var fileno;

function go(no)
{
	page = 0;
	pages = null;
	pages = new Array();
	
	footnote = 0;
	footnotes = null;
	footnotes = new Array();
	
	files = no;
	fileno = 0;
	
	
	if (!(document.getElementById || document.all || document.layers))
	{
		alert('Your browser can\'t handle DHTML');
		return;	
	}
	
	if (window.ActiveXObject)
		// IE
		browser = "IE";
	else if (document.implementation && document.implementation.createDocument)
		// MOZILLA
		browser = "Mozilla";
	else
	{
		alert('Your browser can\'t handle this script');
		return;
	}
	
	
	
	pagewidth = parseInt(document.getElementById('LeftPage').style.width);
	
	
	var cookieSize = getCookie('fontSize');
	document.getElementById('Sizes').value = ((isNaN(cookieSize) || cookieSize == null) ? 16 : cookieSize);
	change_size();
	
	
	var cookieFont = getCookie('fontType');
	document.getElementById('Fonts').value = ((cookieFont == null || cookieFont == '') ? 'Verdana' : cookieFont);	
	change_font();
	
	
	cookiePage = getCookie('bookPage');
	cookiePage = (isNaN(cookiePage) || cookiePage == null ? 0 : cookiePage);
	
	clearInterval(formatInterval);
	
	
	xmlDoc = null;
	
	if (browser == "Mozilla")
	{
		xmlDoc = document.implementation.createDocument('', 'Book', null);
	}
	else
	try
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.loadXML('<Book></Book>');
	}
	catch (err) 
	{
		alert('Your browser can\'t run ActiveX');
		return;
	}
		
	xmlNew = null;
	
	load();
	
}
function load()
{	
	buttons(false);
	document.body.style.cursor = 'wait';
	
	if (xmlNew != null)
	{
		xmlDoc.documentElement.appendChild(xmlNew.documentElement);
		xmlNew = null;
	}
	
	if (fileno < files)
	{
		var filename = 'Kjrlighetsfolket.xml';
		fileno++;
	}
	else
	{
		pager();
		document.body.style.cursor = 'default';
		return;
	}		
	
	if (browser == "Mozilla")
	{
		xmlNew = document.implementation.createDocument('', '', null);
		xmlNew.load(filename);
		xmlNew.onload = load;
	}
	else
	try
	{
		xmlNew = new ActiveXObject("Microsoft.XMLDOM");
		xmlNew.onreadystatechange = 
			function () 
			{
				if (xmlNew.readyState == 4)
					load();
			};
		xmlNew.load(filename);
 	}
	catch (err) {}
 	
}
function pager()
{
	objNodeList = null;
	objNodeList = xmlDoc.getElementsByTagName('Book')[0];
	
	center();
	document.getElementById('LeftPage').innerHTML = '';
	document.getElementById('RightPage').innerHTML = '';
	document.getElementById('RightNumber').value = '';
	document.onkeydown = noevents;
	document.getElementById('LeftNumber').onkeydown = noevents;
	buttons(false);
	
	formatInterval = setInterval('makepages(' + cookiePage.toString() + ')', 100);
}
function pagetop(node)
{
	if (node.tagName != null)
		if (node.tagName.toLowerCase() == 'p')
		{
			var style = node.getAttribute('style');
				node.setAttribute('style', 
					'MARGIN-TOP: 0px; ' + ((style == null) ? "" : style));
				
			return;
		}
		
	if (node.hasChildNodes())
		pagetop(node.childNodes[0]);		
}
function pagebottom(node)
{
	if (node != null)
		if (node.tagName != null)
			if (node.tagName.toLowerCase() == 'p')
			{
				var style = node.getAttribute('style');
				node.setAttribute('style', 
					'TEXT-INDENT: 0px; ' + ((style == null) ? "" : style));
				return;
			}
	
	if (node != null)	
		if (node.parentNode != null)
			pagebottom(node.parentNode);
}
function makepages(toPage)
{
	if (objNodeList.hasChildNodes() && pages.length < toPage)
	{
		document.getElementById('wait').style.display = 'block';
		document.getElementById('pageNumber').value = pages.length;
		makepage();
	}
	else 
	{
		clearInterval(formatInterval);
	
		buttons(true);
		document.onkeydown = paging;
		document.getElementById('LeftNumber').onkeydown = seek;
		document.getElementById('wait').style.display = 'none';
		page = pages.length;
		if (!objNodeList.hasChildNodes())
			page = page - 2 + (page % 2);
		next();
	}	
}
function makepage()
{	
	if (objNodeList.hasChildNodes())
	{
		document.getElementById('LeftPage').style.overflow = 'auto';
		
		html = '';
		eop = false;
		stop = false;
		pagetop(objNodeList);
		fillNodes(objNodeList,true);		
		pages[pages.length] = html;
		
		document.getElementById('LeftPage').style.overflow = 'hidden';
	}
}
function render(obj,num)
{
	var str;
	
	if (page < pages.length)
	{
		str = pages[page];
		if (page > 0)
			num.value = page;
		else
			num.value = '';
		page++;
	}
	else
		return;
	
	
	var tag = /(<\/p>)+(<[^>]+>)*\s*$/i;
	var arr = str.match(tag);
	if (arr != null) 
	{
		var index = arr.index;
		
		str = str.substring(0,index) +
				' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' +
				str.substring(index,str.length);
				
		obj.innerHTML = str;
	}
	else
		obj.innerHTML = str + 
				' &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
}
function next()
{
	if (page == pages.length)
	{
		makepage();
		makepage();		
	}
	

	render(document.getElementById('LeftPage'),document.getElementById('LeftNumber'));
	render(document.getElementById('RightPage'),document.getElementById('RightNumber'));
	
	
	if (page == pages.length && page % 2 != 0)
	{
		document.getElementById('RightPage').innerHTML = '';
		document.getElementById('RightNumber').value = '';
	}
}
function previous()
{
	if (page <= 2)
		return;
	else
		if (page % 2 != 0)
			page -= 3;
		else
			page -= 4;
		
	render(document.getElementById('LeftPage'),document.getElementById("LeftNumber"));
	render(document.getElementById('RightPage'),document.getElementById("RightNumber"));	
}
function contained(str)
{
	if (browser == "IE")
		str = str.replace(/- (\S+)/g,'<nobr>-&nbsp;&nbsp;</nobr>$1');
	else
		str = str.replace(/- (\S+)/g,'&minus;$1');
	
		
	document.getElementById('LeftPage').innerHTML = html + str;
	document.getElementById('LeftPage').clientWidth; // recompute
	
	
	
	if (document.getElementById('LeftPage').clientWidth == pagewidth)
	{
		html = html + str;
		
		document.getElementById('LeftPage').innerHTML = '';	
		document.getElementById('LeftPage').scrollWidth; // recompute
		
		return true;
	}
	else
	{
		document.getElementById('LeftPage').innerHTML = 'xxx';
		document.getElementById('LeftPage').scrollWidth; // recompute
		
		document.getElementById('LeftPage').innerHTML = '';
		document.getElementById('LeftPage').scrollWidth; // recompute
		
		return false;	
	}
}
function fillText(str)
{	
	if (str == '')
		return '';
		
	if (!contained(str))
	{
		var dummy = str.replace(/\n/g,' ');
		if (browser == "IE")
			dummy = dummy.replace(/- /g,'--');
			
		if (/^\s+$/.test(dummy))
			return str;
		if (/^\s*\S+\s*$/.test(dummy))
			return str;
		
		var rest = dummy.length % 2;
		var half = (dummy.length - rest) / 2;
		var index = dummy.indexOf(' ',half);	
		if (index == -1) index = dummy.lastIndexOf(' ',half);
		if (index == -1) return str;
		var first = str.substring(0, index);
		var last = str.substring(index,str.length);
	
		var left = fillText(first);
		if (left == '')
			return fillText(last);
		else
			return left + last;
	}
	else
		return '';		
}

var eop;
var stop;
var newpart;
var newpage;
var newline;

function getNodeTag(node)
{
	var arr;
	
	arr = '<' + node.tagName;
	
	for (var i = 0; i < node.attributes.length; i++)
		arr += ' ' + node.attributes.item(i).nodeName  + '=' + 
			  '\"' + node.attributes.item(i).nodeValue + '\"';
		
	arr += '>';
	
	return arr;
}

function fillNodes(node,f) 
{ 	
	var result = false;
	var oldHtml = html;
	
	newpart = false;
	newpage = false;
	newline = false;


	if (node.tagName != null)
	{
		//var tag = /^<\w+(>|[^>]+>)/;
		//var arr = node.xml.match(tag);alert('Match: ' + arr[0]);
		var arr = getNodeTag(node);
		
		newpart = (node.tagName.toLowerCase() == 'newpart');
		newpage = (node.tagName.toLowerCase() == 'newpage');
		newline = (node.tagName.toLowerCase() == 'br');
		
		if (newpage || newpart)
			stop = true;
		else
			html = html + arr;
	}

	if (node.hasChildNodes())
	{ 
		f = true;
		
		for (var i = 0; i < node.childNodes.length; i++)
		{
		
			if (node.childNodes[i].tagName != null)
			{
				if (node.childNodes[i].tagName.toLowerCase() == 'ss')
					node.replaceChild(makefootnote(node.childNodes[i]),node.childNodes[i]);
			}
			
			result = fillNodes(node.childNodes[i],f) || result;
			
			
			if (!eop && (!newpart || (pages.length % 2) == 0))
			{
				node.removeChild(node.childNodes[i]);
				f = false;
				i--;
			}
				
			if (stop || eop)
			{
				eop = true;
				break;
			}
				
		} // for
	}
	else
	{
		if (node.nodeValue == null || node.nodeValue == "")
			result = true;
		else
		{
			var str = fillText(node.nodeValue);
			
			if (str == node.nodeValue)
			{
				eop = true;
				if (!f)
					pagebottom(node);
				result = false;
			}
			else
			{
				node.nodeValue = str;
				if (str != '')
				{
					eop = true;
					pagebottom(node);
				}
				result = true;
			}
		}
	}
	
	
	if (!result)
	{
		html = oldHtml;
		return false;
	}
	else
	{	
		if (!newline && !newpage && !newpart && node.tagName != null)
			html = html + '</' + node.tagName + '>';
		return true;
	}
}
function change_size()
{ 
	var size  = parseInt(document.getElementById('Sizes').value);
	var low = size + 2;
	var tall  = size + 4;
	var newlineHeight = ((size == 14 || size == 16) ? low : tall);
	
	document.getElementById('LeftPage').innerHTML = '';
	document.getElementById('RightPage').innerHTML = '';
	
	document.getElementById('LeftPage').style.fontSize = size.toString() + 'px';
	document.getElementById('LeftPage').style.lineHeight = newlineHeight.toString() + 'px';
		
	document.getElementById('RightPage').style.fontSize = document.getElementById('LeftPage').style.fontSize;
	document.getElementById('RightPage').style.lineHeight = document.getElementById('LeftPage').style.lineHeight;
	
	var rest = 489 % newlineHeight;
	document.getElementById('LeftPage').height = (document.getElementById('LeftPage').style.pixelHeight - rest + newlineHeight).toString() + 'px'; 
	document.getElementById('RightPage').height = document.getElementById('LeftPage').height;
	
	
	var newsuperscript = ((size == 12 || size == 14) ? 10 : 12);
	if (browser == "Mozilla")
	{
		document.styleSheets[0].cssRules[1].style.marginTop = newlineHeight.toString() + 'px';
		document.styleSheets[0].cssRules[2].style.fontSize = newsuperscript.toString() + 'px';
	}
	else
	{
		document.styleSheets[0].rules[1].style.marginTop = newlineHeight.toString() + 'px';		
		document.styleSheets[0].rules[2].style.fontSize = newsuperscript.toString() + 'px';
	}
}
function change_font()
{
	var font = document.getElementById('Fonts').value;
	
	if (font != '')
	{	
		if (browser == "Mozilla")
			document.styleSheets[0].cssRules[0].style.fontFamily = font;
		else
			document.styleSheets[0].rules[0].style.fontFamily = font;
	}
}
function getCookie(name)
{
    var re = new RegExp(name + "=([^;]+)");
    var value = re.exec(document.cookie);
    return (value != null) ? unescape(value[1]) : null;
}
var today = new Date();
var expiry = new Date(today.getTime() + 100 * 24 * 60 * 60 * 1000);
function setCookie(name, value)
{ 
	document.cookie = name + '=' + escape(value) + '; expires=' + expiry.toGMTString();
}
function setCookies(reset)
{
	var size  = parseInt(document.getElementById('Sizes').value);
	setCookie('fontSize', size);
	var font = document.getElementById('Fonts').value;
	setCookie('fontType', font);
	if (reset)
		setCookie('bookPage', 0);
	else
	{
		if (page % 2 != 0)
			setCookie('bookPage', page-1);
		else
			setCookie('bookPage', page-2);
	}
}
function disabletext()
{
	return false
}
function reEnable()
{
	return true
}

document.onselectstart = new Function("return false");

function center()
{
	var win = parseInt(document.body.clientWidth);
	var box = parseInt(document.getElementById('wait').style.width);
	var left = Math.round((win - box)/2);
	document.getElementById('wait').style.left = left;
}
function gotopage(val)
{
	var no = parseInt(val);
	 
	if (!isNaN(no))
	{
		if (no % 2 != 0)
			no--;
		
		if (no >= 0 && no < pages.length)
		{
			page = no;
			next();		
		}
		else
			if (no >= 0)
			{
				cookiePage = no;
				pager(null);
			}
	}
}
function noevents()
{	
	if (browser == "IE")
		event.returnValue = true;
}
function nodefault(e)
{
	if (browser == "Mozilla")
		e.preventDefault();
	else
		event.returnValue = false;
}
function paging(e)
{
	if (browser == "Mozilla")
		var key = e.which;
	else
		var key = event.keyCode;
		
	if (key == 33 || key == 39)
	{
		next();
		nodefault(e);
		return;
	}
	if (key == 34 || key == 37)
	{
		previous();
		nodefault(e);
		return;
	}
	noevents();
}
function seek(e)
{
	if (browser == "Mozilla")
		var key = e.which;
	else
		var key = event.keyCode;
	
	if (key == 13)
	{
		gotopage(document.getElementById('LeftNumber').value);
		nodefault(e);
	}	
}
function hideall(e)
{
	if (browser == "Mozilla")
		var key = e.which;
	else
		var key = event.keyCode;

		
	if (key == 13)
	{
		document.getElementById('Sizes').style.display = 'none';
		document.getElementById('Fonts').style.display = 'none';
		document.getElementById('Marked').style.display = 'none';
	}
}
function buttons(show)
{
	document.getElementById('LeftArrow').style.display = show ? 'block' : 'none';
	document.getElementById('RightArrow').style.display = show ? 'block' : 'none';
	document.getElementById('LeftNumber').style.display = show ? 'block' : 'none';
	document.getElementById('font').style.display = show ? 'block' : 'none';
	document.getElementById('size').style.display = show ? 'block' : 'none';
	document.getElementById('bookmark').style.display = show ? 'block' : 'none';
}
function superscript(no)
{
	var thenotebox = document.getElementById('notebox');
	var clientX;
	var clientY;
	
	var win = parseInt(document.body.clientWidth);
	var box = parseInt(thenotebox.style.width);
	var center = Math.round(win/2);
	
	if (browser == "Mozilla")
	{
		clientX = parseInt(document.getElementById('RightNumber').style.left) - 20;
		clientY = parseInt(document.getElementById('RightNumber').style.top) + 10;
		thenotebox.style.top = clientY;
		thenotebox.style.left = clientX;
	}
	else
	{
		clientX = event.clientX + document.body.scrollLeft;	
		clientY = event.clientY + document.body.scrollTop;
		
		thenotebox.style.top = clientY + 10;
		if (clientX < center)
			thenotebox.style.left = clientX + 10;
		else
			thenotebox.style.left = clientX - box - 10;
	}
	
	
	thenotebox.innerHTML = footnotes[no];
		
	thenotebox.style.fontSize = 
		document.getElementById('LeftPage').style.fontSize;
	thenotebox.style.lineHeight = 
		document.getElementById('LeftPage').style.lineHeight;
	
	var size = parseInt(thenotebox.style.fontSize);
	if (!isNaN(size))
	{
		if (size*thenotebox.innerHTML.length < 2200)
			thenotebox.style.height = 'auto';
		else
			thenotebox.style.height = '80px';
	}
	
	thenotebox.scrollTop = 0;
	thenotebox.style.display = 'block';
}
var nums = 0;
function hidefootnote()
{
	if (browser == "Mozilla") // HACK
	{
		if (nums == 0)
			nums++;
		else
		{	
	
			document.getElementById('notebox').style.display = 'none';
			nums = 0;
		}
	}
	else
		document.getElementById('notebox').style.display = 'none';
}
function innerAll(node)
{
	var str = (node.nodeValue == null ? '' : node.nodeValue);
	
	for (var i = 0; i < node.childNodes.length; i++)
	{
		var begintag = (node.childNodes[i].tagName == null ? '' : '<' +  node.childNodes[i].tagName + '>');
		var endtag = (node.childNodes[i].tagName == null ? '' : '</' +  node.childNodes[i].tagName + '>');
		str = str + begintag + innerAll(node.childNodes[i]) + endtag;
	}
		
	return str;
}
function makefootnote(node)
{
	var newChild = xmlDoc.createElement('sup');
	var newText = xmlDoc.createTextNode((++footnote).toString());
	var str = innerAll(node);
	str = str.replace(/<br><\/br>/gi,'<br>');
	footnotes[footnotes.length] = str;
	newChild.setAttribute('onClick','superscript(' + (footnotes.length-1).toString() + ');');
	newChild.setAttribute('class','ss');
	newChild.appendChild(newText);
	
	return newChild;
}
function makemarked()
{
	document.getElementById('Marked').style.fontSize = document.getElementById('LeftPage').style.fontSize; 
	document.getElementById('Marked').style.display = 'block'; 
	setCookies(false);
}




