/* Javascript source file for "Doris EPaper"
Thomas Axelsson
Copyright 2004 Anygraaf Oy
http://www.anygraaf.fi
anygraaf@anygraaf.fi */

// simple browser check
var whichbrowser = navigator.userAgent.toLowerCase();
var isnetscape = false;
var isie = false;
var isie55up = false;
var isopera = false;

var isphp;

if (whichbrowser.indexOf("msie") != -1) {
  isie = true;
  if (parseInt(navigator.appVersion) > 3 && whichbrowser.indexOf("msie 5.0") != 
	    -1 && whichbrowser.indexOf("msie 4") != -1)
  {
    isie55up = true;
  }
} 
else if (whichbrowser.indexOf('mozilla')!=-1) {
  isnetscape = true;
}
else if (whichbrowser.indexOf('opera')!=-1) {
  isie = true;
	isopera = true;
}


var arrpagenumbers =new Array();
// handle spreads in the the paper
function missingpages(pagenumbers) {
	if (editionpageid > 0) // change page numbers if we use editions
	{
		arrtemppages = pagenumbers.split(",");
		for (pagecounter=0;pagecounter < currentEditionDetails.length;pagecounter++ )
		{
			for (missingcounter=0;missingcounter < arrtemppages.length;missingcounter++ )
			{
				if (currentEditionDetails[pagecounter] == arrtemppages[missingcounter])
				{
					arrpagenumbers.push(parseInt(pagecounter)+1);
				}
			}
		}
	}
	else
		arrpagenumbers = pagenumbers.split(","); // split into pages

	if (arrpagenumbers.length == 0)
		arrpagenumbers[0] = "";
	
}

// check if the current number is in a spread
// things to check: section navigation, page navigation, <> navigation and thumbnail navigation
function checkspread(currentnumber) {
 
  var blnisspread = false;
  var numcounter; 
  if (arrpagenumbers[0].length > 0) { // we have spreaded pages
    for (numcounter=0; numcounter < arrpagenumbers.length; numcounter++) { // loop the pagearray
      if (currentnumber == arrpagenumbers[numcounter]) { // currentpage is a spread number 
        blnisspread = true;
		break;
      }
    }
  }
  return blnisspread;

}

// Handle cookies
  var bites = document.cookie.split("; "); // break cookie into array of bites

  function getCookie(name) {
    for (i=0; i < bites.length; i++) {
      nextbite = bites[i].split("="); // break into name and value
      if (nextbite[0] == name) // if name matches
        return unescape(nextbite[1]); // return value
    }
    return null; // if no match return null
  }

  var today = new Date();
  var expiry = new Date(today.getTime() + 5 * 365 * 24 * 60 * 60 * 1000); // plus 5 * 365 days - cookie set for 5 years

  function setCookie(name, value) { // use: setCookie("name", value);
    if (value != null && value != "")
      document.cookie=name + "=" + escape(value) + "; expires=" + expiry.toGMTString();
    bites = document.cookie.split("; "); // update cookie bites
  }

  var userData = getCookie("userData") || "-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1!-1"; // retrieve values or use default
  var data = userData.split("!"); // convert cookie value to array
	
	var stickytop = "-1";
	var showdefault = "-1";

	var moveablezoomid = "-1";
	var moveablezoomvisible = "-1";
	var zoomwindowLeft = "-1";
	var zoomwindowTop = "-1";
	var zoomwindowWidth = "-1";
	var zoomwindowHeight = "-1";
	var stickyzoomid = "-1";

	var moveablethumbid = "-1";
	var moveablethumbvisible = "-1";
	var thumbwindowLeft = "-1";
	var thumbwindowTop = "-1";
	var thumbwindowWidth = "-1";
	var thumbwindowHeight = "-1";
	var stickythumbid = "-1";

	var currentcss = "-1";
	var edition = "-1";

	stickytop  = data[0];
	showdefault = data[1];
	moveablezoomid = data[2]
	moveablezoomvisible = data[3];
	zoomwindowLeft = data[4];
	zoomwindowTop = data[5];
	zoomwindowWidth = data[6];
	zoomwindowHeight = data[7];
	stickyzoomid = data[8];
	moveablethumbid = data[9];
	moveablethumbvisible = data[10];
	thumbwindowLeft = data[11];
	thumbwindowTop = data[12];
	thumbwindowWidth = data[13];
	thumbwindowHeight = data[14];
	stickythumbid = data[15];
	currentcss = data[16];
	edition = data[17];

	function deleteCookie (name) {
		if (getCookie(name)) {
			document.cookie = name + "=" +
			"; path=/" +
			"; expires=Fri, 01-Jan-70 00:00:01 GMT";
		}
	}
// End handle cookies

// Start handle editions

// create the drop down menu for the user to use when choosing edition
function createeditions(thelabel,editionnames,fontstyle) {

	if (thelabel.length > 0 && editionnames.length > 0 ) { // we have editions
		fulldropdowncode = '<select class="'+fontstyle+'" name="whichedition"><option value="0">'+thelabel+'</option>';
		editionname = editionnames.split("#"); // split into edition names
		arreditionlabels = editionname;
		editioncount = editionname.length;
		for (edcounter=0; edcounter < editioncount; edcounter++) { // loop the editions
			currentnumber = edcounter + 1;
			fulldropdowncode += '<option value="'+currentnumber+'">'+editionname[edcounter]+'</option>';
		}
		fulldropdowncode += '</select>';
		document.write(fulldropdowncode);
	}
}

//find a string in an array
function findarraystring(chosenArray, stringToFind) {
    var i = 0;
		var isFound = false;
    while (i < chosenArray.length) {
        if (chosenArray[i] == stringToFind) {
					isFound = true;
					break;
        } else {
            i++;
        }
    } return isFound;
}

var editionPageExists = false;
var currentEditionArray;
var editions = 0;
var arreditionparts;
var arreditiondetails;
var pageNumber = -1;
var arrEditionNames;
var currentEditionDetails = "";
var editionpageid = -1;
var editionpagenumber = -1;
var editionmaxpage = -1;

function handleeditions(currentPage,editionstring,thecaller) {
// editionstring example: 'Ed1,1,5,6,7,8,9,10,23,24#Ed2,2,4,6,8,9,10,23#Ed3,4,5,6,8,9,10,23,25#Ed4,1,2,4,9,10,23,25'

	pageNumber = currentPage;

	if (editionstring.length > 0) // we have an edition string
	{ 

		if (edition < 1) // If there is not edition set - use the first
			edition = 1;

	  arreditionparts = editionstring.split("#"); // split into section parts
		arrEditionNames = editionstring.split("#");
		editions = arreditionparts.length;

    for (edcounter=0; edcounter < editions; edcounter++) // loop the editions
		{ 
			arreditiondetails = arreditionparts[edcounter].split(","); // edition data
			arrEditionNames[edcounter] = arreditiondetails[0];
			arreditiondetails.splice(0,1);
			if (edcounter+1 == edition)
				currentEditionDetails = arreditiondetails;
		}

		if (thecaller == 'edition') // the calling page is a not base page
		{
			editionpageid	= geteditionid(window.location.href);
			editionpagenumber = geteditionpagenumber(editionstring,editionpageid,edition,pageNumber);
			arrcurrentedition = arreditionparts[edition-1].split(",");
			editionmaxpage = arrcurrentedition.length - 1; // -1 because the first item is the edition name.
			document.title = document.title.replace("#PAGE",editionpagenumber);
			setCookie('editionData',editionpagenumber+"!"+editionpageid+"!"+editionmaxpage);
		}
		else if (thecaller == 'image' || thecaller == 'article') // Article or image page calling, get data
		{
			var editionData = getCookie("editionData") || "-1!-1!-1"; // retrieve values or use default
			var edData = editionData.split("!"); // convert cookie value to array
			editionpagenumber = edData[0];			
			editionpageid = edData[1];
			editionmaxpage = edData[2];
			if (editionpagenumber == -1 && editionpageid == -1 && editionmaxpage == -1) // No referrer from a page - default to edition 1
			{
				arrtemped = arreditionparts[0].split(","); // edition data
				editionpageid	= arrtemped[1];
				editionpagenumber = 1;
				editionmaxpage = arrtemped.length - 1; // -1 because the first item is the edition name.
				setCookie('editionData',editionpagenumber+"!"+editionpageid+"!"+editionmaxpage);
			}
			document.title = document.title.replace("#PAGE",editionpagenumber);
		}

		// we have a chosen edition and we have editions and its the base page calling
		if (thecaller == 'base' && edition > 0 && typeof editions != 'undefined' && currentEditionDetails.length > 0) { 
			if (editions > 1)	{ // we have editions to choose from
				var currentPageString = geteditionpage(pageNumber,arrEditionNames[edition-1],arreditionparts);
				if (window.location.href.indexOf(currentPageString) < 0) { // the page is not the one that is already loaded 
					window.location = currentPageString;
				}
				else if (window.location.href.indexOf("page"+pageNumber+".htm") < 0 && window.location.href.indexOf(currentPageString) < 0) {
					window.location = "page"+pageNumber+".htm";	
				}
			}
			else if (window.location.href.indexOf("page"+pageNumber+".htm") < 0) { // default page
				window.location = "page"+pageNumber+".htm";
			}
			else if (edition < 1 && window.location.href.indexOf("page"+pageNumber+".htm") < 0)
				window.location = "page"+pageNumber+".htm";
		}
	}
}

// Get the real page file name and other data
function geteditionpage(pagenum,editionname,arreditionstrings) 
{
	editionpage = "";
	for (edcounter=0; edcounter < arreditionstrings.length; edcounter++) { // loop the editionstrings
		arreditiondetails = arreditionparts[edcounter].split(","); // edition data
		if (arreditiondetails[0] == editionname) // we have the correct edition
		{
			editionpage = "page"+arreditiondetails[pagenum]+".htm";
			break;
		}
	}
	editionpageid =	arreditiondetails[pagenum];
	return editionpage;
}

// Get the edition page id
function geteditionid(url) 
{
	id = url.substr(url.lastIndexOf("/") + 1);
	id = id.replace("page","");
	id = id.replace(".htm","");
	return id;
}

// Get the edition page number
function geteditionpagenumber(arreditionstrings,theeditionpageid,ednum,givenpagenumber) 
{
	pagenumber = "";
	arredition = arreditionstrings.split("#"); // split into section parts
	arrcurrentedstring = arredition[ednum-1].split(",");
	for (edcounter=0; edcounter < arrcurrentedstring.length; edcounter++) { // loop the editionstring
		if (arrcurrentedstring[edcounter] == theeditionpageid) // we have the correct edition
		{
			pagenumber = edcounter;
			break;
		}
	}
	return pagenumber;
}


// Handle sectiuon data when using editions
function handlesectiondata(sectionstring) {

	arrcurrented = arreditionparts[edition-1].split(",");
	arrcurrented = arrcurrented.splice(1,arrcurrented.length); // remove the edition name
	arrsectiondata = sectionstring.split("#");
	newsectionstring = "";
	templabel = "";
	currentstart = -1;
	currentend = -1;
	tempstring = "";

	for (edcounter=0;edcounter < arrcurrented.length;edcounter++ )
	{
		for (sectioncounter=0;sectioncounter < arrsectiondata.length;sectioncounter++ )
		{
			tempsection = arrsectiondata[sectioncounter].split(":");
			currentid = tempsection[0];
			currentlabel = tempsection[1];
			if (arrcurrented[edcounter] == currentid)
			{
				newsectionstring += edcounter+1+":"+currentlabel+"#";
			}
		}
	}

	// clean the ending
	newsectionstring = newsectionstring.substring(0,newsectionstring.length-1);

	arrnewsections = newsectionstring.split("#");
	for (sectioncounter=0;sectioncounter < arrnewsections.length;sectioncounter++ )
	{
		tempsection = arrnewsections[sectioncounter].split(":");
		currentpage = tempsection[0];
		currentlabel = tempsection[1];

		if (currentstart == -1)
		{
			currentstart = currentpage;
			currentend = currentpage;
		}

		if (templabel.length > 0) 
		{
			if (templabel == currentlabel) 
			{
				currentend = currentpage;
			}
			else
			{
				tempstring += currentstart+":"+currentend+":"+templabel+"#";
								
				currentstart = currentpage;
				currentend = currentpage;
			}
				
		}

		if (sectioncounter == arrnewsections.length-1) // last item
		{
			if (templabel == currentlabel)
			{
				tempstring += currentstart+":"+currentend+":"+templabel+"#";
			}
			else
				tempstring += currentpage+":"+currentpage+":"+currentlabel+"#";
		}

		templabel = currentlabel;
						
		if (sectioncounter == 0)
		{
			currentstart = currentpage;
		}

	}

	// clean the ending
	newsectionstring = tempstring.substring(0,tempstring.length-1);

	return newsectionstring;
}

// End handle editions

// Open the correct pdf file
function openpdf(pdffile) {
  filetoopen = pdffile;
	if (editionpageid > 0)
		filetoopen = "page"+editionpageid+".pdf";
	window.open(filetoopen);
}

// Open the correct page file
function openpage(pagefile) {
  filetoopen = pagefile;
	if (editionpageid > 0)
		filetoopen = "page"+editionpageid+".htm";
	window.location = filetoopen;
}

// Open the correct page number
function insertpagenum(numstring) {
  number = numstring;
	if (editionpageid > 0)
		number = editionpagenumber;
	document.write(number);
}

// get radio button values 
function GetRadioValue(oRadioGrp)
{
 var sValue = null;

 if (typeof oRadioGrp.length == "undefined")
 {
  // get value for single radio button
  if (oRadioGrp.checked)
   sValue = oRadioGrp.value;
 }
 else
 {
  // get value for group of radio buttons
  for (var i=oRadioGrp.length-1; i>=0; i--)
   if (oRadioGrp[i].checked)
   {
    sValue = oRadioGrp[i].value;
    break;
   }
 }
 return sValue;
}

var zoomtimer;
var thumbtimer;

// init page
function pageinit(noofpages,currentpage,createpagenum,pagenavpages,sectiondata,unlinkedcoords) {

	if (editionmaxpage > -1) // We have editions 
	{
		noofpages = editionmaxpage;
		currentpage = editionpagenumber;
		sectiondata = handlesectiondata(sectiondata);
	}

  // create page navigation for the current page if we have a higher number that we want to show than 0
  if (pagenavpages > 0) {
		createpagenav(noofpages,currentpage,pagenavpages);
  }
  // create section navigation if chosen = sectiondata != ''
  if (sectiondata.length > 0) {
    createsectionnav(sectiondata);
  }
  // show page number layer 
  if (createpagenum.length > 0) {
    showpagenumber();
  }
  // make menu stay in place
  if (document.getElementById('topmenulayer') && self.name != "searchwin" && stickytop != "0") { // we have a top menu
    setInterval("makeStatic('topmenulayer')",100);
  }

	// make bottom menu stay in place
	if (document.getElementById('thumbslayer1') && self.name != "searchwin") { // we have a bottom menu
    thumbtimer = setInterval("makeBottomStatic('thumbslayer1',0)",100);
  }

	// make zoom layer stay at bottom
	if (document.getElementById('zoompiclayer') && self.name != "searchwin") { // we have a bottom menu and want to keep it at the bottom
    zoomtimer = setInterval("makeBottomStatic('zoompiclayer',0)",100);
  }

	// make watermark layer stay at bottom
	document.write('<div id="watermarklayer" style="width:auto; height:20px; visibility:visible; z-index:10000; position:absolute;"><table border="0" cellpadding="0" cellspacing="0"><tr><td align=center valign=top><a href="http://www.anygraaf.fi/products/epapere.htm" target="_blank"><img src="../epaperscript/epaper_watermark.gif" hspace=2 border=0></a></td></tr></table></div>');
	watermarktimer = setInterval("makeBottomStatic('watermarklayer',25)",100);

  // mark the unlinked images
  if (unlinkedcoords.length > 0) { // we have coordinates
    markunlinkedpics(unlinkedcoords);
  }

	// show zoom or thumbs as default?
	if (document.getElementById('zoompiclayer') && self.name != "searchwin" && showdefault == "2") { // we have a zoom layer and want to show it
    if (document.getElementById('thumbslayer1'))
    {
				hidelayer('thumbslayer1'); 
    }
		if (moveablezoomvisible != "visible") {
			showlayer('zoompiclayer');
			positionbottomlayers('zoompiclayer');
		}
		else
			hidelayer('zoompiclayer');
  }
	else if (document.getElementById('thumbslayer1') && self.name != "searchwin" && showdefault == "1") {
    if (document.getElementById('zoompiclayer'))
    {
				hidelayer('zoompiclayer'); 
    }

		if (moveablethumbvisible != "visible") {
			showlayer('thumbslayer1');
			positionbottomlayers('thumbslayer1');
		}
		else
			hidelayer('thumbslayer1');
	}
	else if (self.name != "searchwin" && showdefault == "3") {

		var layerstring = "";
 
		if (document.getElementById('thumbslayer1') && moveablethumbvisible != "visible")
    {
			showlayer('thumbslayer1'); 
			layerstring = "thumbslayer1";
    }
	   
		if (document.getElementById('zoompiclayer') && moveablezoomvisible != "visible")
    {
			showlayer('zoompiclayer'); 
			
			if (layerstring.length > 0)
				layerstring += ",zoompiclayer";
			else
				layerstring = "zoompiclayer";
    }

		positionbottomlayers(layerstring);
	}
	else if (self.name != "searchwin" && showdefault == "0") {

		if (document.getElementById('zoompiclayer'))
		{
			hidelayer('zoompiclayer'); 
		}
		if (document.getElementById('thumbslayer1'))
		{
			hidelayer('thumbslayer1'); 
		}
	}

	// show and position moveable zoom and thumb layers
	var templayerstyle 

	if (moveablezoomid != "-1") { // zoom
		if (document.getElementById(moveablezoomid)) {
			templayerstyle = document.getElementById(moveablezoomid).style;
			if (moveablezoomvisible != "-1")
				templayerstyle.visibility = moveablezoomvisible;
			if (document.getElementById(stickyzoomid) && moveablezoomvisible == 'visible')
				document.getElementById(stickyzoomid).style.visibility = 'hidden';
			if (zoomwindowLeft != "-1" && zoomwindowLeft != null)
				templayerstyle.left = zoomwindowLeft;
			if (zoomwindowTop != "-1" && zoomwindowTop != null)
				templayerstyle.top = zoomwindowTop;
			if (zoomwindowWidth != "-1" && zoomwindowWidth != null)
				templayerstyle.width = zoomwindowWidth;
			if (zoomwindowHeight != "-1" && zoomwindowHeight != null)
				templayerstyle.height = zoomwindowHeight;
		}
	}
	if (moveablethumbid != "-1") { // thumbs
		if (document.getElementById(moveablethumbid)) {
			templayerstyle = document.getElementById(moveablethumbid).style;
			if (moveablethumbvisible != "-1")
				templayerstyle.visibility = moveablethumbvisible;
			if (document.getElementById(stickythumbid) && moveablethumbvisible == 'visible')
				document.getElementById(stickythumbid).style.visibility = 'hidden';
			if (thumbwindowLeft != "-1" && thumbwindowLeft != null)
				templayerstyle.left = thumbwindowLeft;
			if (thumbwindowTop != "-1" && thumbwindowTop != null)
				templayerstyle.top = thumbwindowTop;
			if (thumbwindowWidth != "-1" && thumbwindowWidth != null)
				templayerstyle.width = thumbwindowWidth;
			if (thumbwindowHeight != "-1" && thumbwindowHeight != null)
				templayerstyle.height = thumbwindowHeight;
		}
	}
}

// Make the image map code with javascript - gives more flexibility than static image map directly from EPaper
function makeimagemap (imagemapdata) {
	
	var arrImageMapData = imagemapdata.split("%%");
	var currentPage = "";
	var arrMapSizes;
	var arrItemCoords;
	var arrMapContent;
	var itemFileName = "";
	var itemAltText = "";
	var itemHeaderText = "";
	var itemText1 = "";
	var itemText2 = "";
	var itemCaption = "";
	var fullMapCode = "";
	var itemLinkParts;
	var itemLinkStyle = "";
	var itemLinkTarget = "";
	var imageMapType = "";

	if (arrImageMapData.length > 2)	{
		currentPage = arrImageMapData[0];
		imageMapType = arrImageMapData[1];
		arrMapSizes = arrImageMapData[2].split(",");

		fullMapCode = "<IMG class=\"pagemap\" SRC=\"page"+currentPage+".jpg\" NAME=\"pageimg\" ID=\"pageimg\" ALT=\"\" WIDTH=\""+arrMapSizes[0]+"\" HEIGHT="+arrMapSizes[1]+"\" BORDER=\"1\" USEMAP=\"#imagepagemap\">\n<MAP NAME=\"imagepagemap\">\n";

		if (arrImageMapData.length > 3) {
			if (arrImageMapData[3].length > 0) {
				for (count=3; count < arrImageMapData.length; count++) { // loop the data
					arrMapContent = arrImageMapData[count].split("##");
					arrItemCoords = arrMapContent[0];
					itemLinkParts = arrMapContent[6].split(","); // file and "standardlink" or "adlink" (for linking to ads' websites) or "standardlink" id and type for debug
					itemHeaderText = arrMapContent[1];
					itemText1 = arrMapContent[2];
					itemText2 = arrMapContent[3];
					itemCaption = arrMapContent[4];
					itemLinkStyle = itemLinkParts[0];
					itemFileName = itemLinkParts[1];
					itemAltText = arrMapContent[5];

					// check if to use .php version
					if (isphp == true && itemLinkStyle != "adlink")
						itemFileName = itemFileName.replace('.htm','.php');

					if (itemLinkStyle == "adlink")
						itemLinkTarget = "target=\"_blank\"";
					else
						itemLinkTarget = "";

					if (imageMapType == "normal") {
						if (itemFileName.indexOf(".mpg") > -1 || itemFileName.indexOf(".mpeg") > -1 || itemFileName.indexOf(".mov") > -1 || itemFileName.indexOf(".avi") > -1)	{ //handle movie files	
							itemFileName = "javascript:handlemovie('"+itemFileName+"','pageimg','"+arrItemCoords+"');";
						}
						fullMapCode += "<AREA SHAPE=\"rect\" COORDS=\""+arrItemCoords+"\" onMouseOver=\"gettext('"+itemHeaderText+"','"+itemText1+"','"+itemText2+"','"+itemCaption+"'); return showborders("+arrItemCoords+");\" onMouseMove=\"showtext(event);\" onMouseOut=\"return notext(); noborders();\"  ALT=\"\" "+itemLinkTarget+" HREF=\""+itemFileName+"\">\n";
					}
					else if (imageMapType == "debug")
						fullMapCode += "<AREA SHAPE=\"rect\" COORDS=\""+arrItemCoords+"\" ALT=\"\" onMouseOver=\"showborders("+arrItemCoords+");\" onMouseOut=\"noborders();\" HREF=\"javascript:putborders('"+itemFileName+"','"+itemLinkParts[2]+"',"+arrItemCoords+");\">\n";
				}
			}
		}

		fullMapCode += "</MAP>\n";

	}
	document.write(fullMapCode);
}

// turn a file name into .php if needed
function makephp(file)
{
	if (isphp == true)
		file = file.replace('.htm','.php');
	window.location = file;
}

function changevol(changevalue) {
	if (document.themovie) {
		nowvol = document.themovie.GetVolume();
		nowvol = nowvol+changevalue;

		if(nowvol < 0) { 
			nowvol = 0;
			document.themovie.SetVolume(nowvol);
		}
		else if(nowvol > 255) { 
			nowvol = 255;
			document.themovie.SetVolume(nowvol);
		}
		else
			document.themovie.SetVolume(nowvol);

		if (document.themovie.GetMute() == false ) {
			document.getElementById('movievolumelineimage').src = "../epaperscript/playline.gif";
			maxlinewidth = parseInt(document.getElementById('movievolumelinetd').style.width);
			linewidth = parseInt(document.themovie.GetVolume()/255*maxlinewidth);
			document.getElementById('movievolumelineimage').style.width = linewidth;
		}
		else {
			document.getElementById('movievolumelineimage').src = "../epaperscript/playlinemute.gif";
		}
	}
}

function jumpmovie(jumpinsecs) {
	if (document.themovie) {
		movietimescale = document.themovie.GetTimeScale();
		movietime = document.themovie.GetTime();
		document.themovie.SetTime(movietime+parseInt(movietimescale*jumpinsecs));
		document.themovie.Play();
	}
}

function handlemute() {
	if (document.themovie) {
		document.themovie.SetMute(!document.themovie.GetMute());
	}
}

var playlinetimer = "";
var volumelinetimer = "";

function playmovie() {
	if (document.themovie) {
		document.themovie.Play(); 
		playlinetimer = setInterval("updateplayline('movieplaylineimage')",100);
	}
}

function stopmovie() {
	if (document.themovie) {
		document.themovie.Stop(); 
	  clearInterval("playlinetimer");
	}
}

function updateplayline(playlineid) {
	if (document.getElementById('movieplaylinetd') && document.themovie && document.getElementById(playlineid)) {
		maxlinewidth = parseInt(document.getElementById('movieplaylinetd').style.width);
		linewidth = parseInt(document.themovie.GetTime()/document.themovie.GetEndTime()*maxlinewidth);
		
		document.getElementById(playlineid).style.width = linewidth;
	}
}

// show movie layer at the correct position
function handlemovie (movieName,imageMap,coordsString) {
	var movieLayer =	document.getElementById('movielayer');
	var movieContentLayer = document.getElementById('movieid');
	var movieobject = document.getElementById('themovie');
	//var movieembedded = document.getElementById('movieembed');
	var movieplaylinetd = document.getElementById('movieplaylinetd');
  var mapPos = getMapCoords(imageMap);
  var imagemapoffsetX = mapPos.x;
  var imagemapoffsetY = mapPos.y;
	var movieCoords = coordsString.split(",");
	var movieHtmlCode = "";
	var movieWidth = parseInt(movieCoords[2])-parseInt(movieCoords[0]);
	var movieHeight = parseInt(movieCoords[3])-parseInt(movieCoords[1]);
	var leftCoord = imagemapoffsetX+parseInt(movieCoords[0]);
	var topCoord = imagemapoffsetY+parseInt(movieCoords[1]);

	movieHtmlCode = '<OBJECT classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" width="'+movieWidth+'" height="'+movieHeight+'" id="themovie" ><PARAM name="src" id="srcparam" value="'+movieName+'"><PARAM name="autoplay" value="false"><PARAM name="controller" value="false"><PARAM name="pluginspage" value="http://www.apple.com/quicktime/download/"><PARAM name="scale" value="tofit"><EMBED id="movieembed" width="'+movieWidth+'" height="'+movieHeight+'" src="'+movieName+'" name="themovie" enablejavascript="true" autoplay="false" controller="false" pluginspage="http://www.apple.com/quicktime/download/" scale="tofit"></EMBED></OBJECT>';

	movieplaylinetd.style.width = movieWidth;
	movieLayer.style.top = topCoord-2;
	movieLayer.style.left = leftCoord-2;
	movieLayer.style.width = movieWidth;
	movieLayer.style.height = movieHeight;
	movieContentLayer.innerHTML = movieHtmlCode;

	movieLayer.style.visibility = "visible";

	
	setTimeout("playmovie();changevol(0);",1000); // let the innerhtml build

 // playlinetimer = setInterval("updateplayline('movieplaylineimage')",100);
}

// show movie layer on a article page
function handlemovieinarticle (movieName) {
	var movieLayer =	document.getElementById('movielayer');
	var movieContentLayer = document.getElementById('movieid');
	var movieobject = document.getElementById('themovie');
	var movieplaylinetd = document.getElementById('movieplaylinetd');
	var movieHtmlCode = "";
	var movieWidth = 400;
	var movieHeight = 400;
	var leftCoord = 300;
	var topCoord = 100;

	movieHtmlCode = '<OBJECT classid="clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B" codebase="http://www.apple.com/qtactivex/qtplugin.cab" width="'+movieWidth+'" height="'+movieHeight+'" id="themovie" ><PARAM name="src" id="srcparam" value="'+movieName+'"><PARAM name="autoplay" value="false"><PARAM name="controller" value="false"><PARAM name="pluginspage" value="http://www.apple.com/quicktime/download/"><PARAM name="scale" value="aspect"><EMBED id="movieembed" width="'+movieWidth+'" height="'+movieHeight+'" src="'+movieName+'" name="themovie" enablejavascript="true" autoplay="false" controller="false" pluginspage="http://www.apple.com/quicktime/download/" scale="tofit"></EMBED></OBJECT>';

	movieplaylinetd.style.width = movieWidth;
	movieLayer.style.top = topCoord-2;
	movieLayer.style.left = leftCoord-2;
	movieLayer.style.width = movieWidth;
	movieLayer.style.height = movieHeight;
	movieContentLayer.innerHTML = movieHtmlCode;

	movieLayer.style.visibility = "visible";

	
	setTimeout("playmovie();changevol(0);",1000); // let the innerhtml build

 // playlinetimer = setInterval("updateplayline('movieplaylineimage')",100);
 
}

// if we show more than 1 layer at the bottom of the screen at the same time then place them beside each other
function positionbottomlayers(layerNames) {

	var arrLayerNames = layerNames.split(","); // split layer names
  var numOfLayers = arrLayerNames.length;
  var numofvisiblelayers = 0;
  var startX = 0;
  var currentLeft;
  var prevRight = 0;
  var screenwidth;

	if (isnetscape == true) {
		screenwidth = window.innerWidth - 24;
	}
	else {
		screenwidth = document.body.clientWidth;
	}

	if (layerNames.length > 0) { // we have layers
		if (numOfLayers > 1)
		{
			for (layercount=0; layercount < numOfLayers; layercount++) { // loop the layers
				currentLayerStyle = document.getElementById(arrLayerNames[layercount]).style;
				if (currentLayerStyle.visibility == 'visible')
					numofvisiblelayers++;
			}

			for (layercount=0; layercount < numOfLayers; layercount++) { // loop the layers
				currentLayerStyle = document.getElementById(arrLayerNames[layercount]).style;

				if (currentLayerStyle.visibility == 'visible')
				{
					currentLayerStyle.width = ((screenwidth/numofvisiblelayers) - 2) + 'px';
					currentLeft = prevRight + 2;
					
					if (isnetscape == true && prevRight != 0) {
						currentLeft += 8;
						currentLayerStyle.width = parseInt(currentLayerStyle.width) - 6;
					}
					else if (numofvisiblelayers == 1 && isnetscape == false)
						currentLeft = currentLeft - 2;

					currentLayerStyle.left = currentLeft;
					prevRight = parseInt(currentLayerStyle.width) + currentLeft - 1;
				}
			}
		} 
		else if (document.getElementById(layerNames))
		{
			document.getElementById(layerNames).style.left = 2;
			document.getElementById(layerNames).style.width = (screenwidth - 4) + 'px';
			if (isnetscape == true)
				document.getElementById(layerNames).style.width = parseInt(document.getElementById(layerNames).style.width) + 2;
		}
	}
}

// show pagenumber layer at the left top position of the imagemap
function showpagenumber() {
  var mapoffsetx = 2;
  var mapoffsety = 4;
  var pagenumlayer = document.getElementById('pagenumberid');
  var pagenumlayerstyle;
  
  var mapPos = getMapCoords('pageimg');
  var pagepicLeft = mapPos.x;
  var pagepicTop = mapPos.y;

  if (pagenumlayer) { // there is a page number id found on the html page
    pagenumlayerstyle = pagenumlayer.style;
    pagenumlayerstyle.top = (pagepicTop+mapoffsety) + 'px';
    pagenumlayerstyle.left = (pagepicLeft+mapoffsetx)  + 'px';
    pagenumlayerstyle.visibility = 'visible';
  }
  else { // no page number id found
  //  alert('Page number id (\'pagenumberid\') not found on page, but was called in pageinit function (third parameter should be empty = \'\' if no page number should be shown)');
  }
}

// replace encoded text with readable text
function replaceencodedtext(textstring) {
  textstring = textstring.replace(/##39##/gi,"\'"); // insert '
  textstring = textstring.replace(/##34##/gi,"\""); // insert "
  return textstring;
}

// remove possible childnodes from object
function removeallchildnodes(currentobj) {
  while(currentobj.childNodes.length > 0) {
    var oChild=currentobj.childNodes[0];
    currentobj.removeChild(oChild);
  }
}

// append a new text node to the text to show
function appendtextnode(parent,currenttext) {
	if (currenttext.length > 0)
	{
		brIndex = currenttext.indexOf('<br>');
	}
	else
	brIndex = -1;

	// If there is <br> in the text then create a line break 
	if (brIndex > -1)
	{
		while (brIndex > -1)
		{
			tempText = currenttext.substring(0, brIndex);
			parent.appendChild(document.createTextNode(''));
			parent.lastChild.data= tempText;		
			tempBr = document.createElement('BR');
			parent.appendChild(tempBr);
			currenttext = currenttext.substring(parseInt(brIndex+4),currenttext.length+tempText.length-brIndex);
		
			if (currenttext.length > 0)
			{
				brIndex = currenttext.indexOf('<br>');
			}	
			else
				brIndex = -1;

		}
		if (currenttext.length > 0)
		{
			parent.appendChild(document.createTextNode(''));
			parent.lastChild.data= currenttext;
		}
	}
	else
	{
		parent.appendChild(document.createTextNode(''));
		parent.lastChild.data= currenttext;
	}
}

// create navigation html elements
function inserthrefelement(hrefelement,nextelement,hrefstring,linktext,parentnavelement) {
	hrefelement[nextelement] = hrefelement[0].cloneNode(true);
    hrefelement[nextelement].href = hrefstring;
	parentnavelement.appendChild(hrefelement[nextelement]);
	hrefelement[nextelement].lastChild.data = linktext;
}

//create page navigation for the current page
function createsectionnav(sectiondata) {

  var arrsectionparts = sectiondata.split("#"); // split into section parts
  var arrsectiondetails = new Array();
  var sectioncounter;
  var sectiondatacounter;
  var sectiontext = '';
  var sectionnavid = document.getElementById('sectionnavid');
  var sectionahrefelement;
  var secondsecpagetext = '';

  if (sectionnavid) {  // we have section navigation id on html page
    removeallchildnodes(sectionnavid);
    for (sectioncounter=0; sectioncounter < arrsectionparts.length; sectioncounter++) { // loop the sections
	  arrsectiondetails = arrsectionparts[sectioncounter].split(":"); // section data

		if (arrsectiondetails.length > 2) { //We do not have an edition - make the nav. Remove when Edition support is implemented

			if (arrsectiondetails[1] == arrsectiondetails[0]) { //check if the section is more than 1 page
				secondsecpagetext = '';
			}
			else {
				secondsecpagetext = '-'+arrsectiondetails[1];
			}
				sectiontext = arrsectiondetails[2]+' ('+arrsectiondetails[0]+secondsecpagetext+')';
				sectionahrefelement = document.createElement('A');
				sectionahrefelement.className = 'sectionnavlink';
			if (checkspread(arrsectiondetails[0]) == true) { // check if the current page is a right side spread number
				--arrsectiondetails[0];
			} 
				sectionahrefelement.setAttribute('href','page'+arrsectiondetails[0]+'.htm');
				sectionnavid.appendChild(sectionahrefelement);
				appendtextnode(sectionahrefelement,sectiontext);
			}
		}
  }
  else { // no section nav element found
   // alert('Section navigation id (\'sectionnavid\') not found on page, but was called in pageinit function (fifth parameter should be empty = \'\' if no section navigation should be shown) ');
  }
}

// create page thumbnail navigation
function createpagethumbs(thumbwidth,thumbheight,allpages,thumbslayer,orientation) {
  var pagecounter;
  var thumbnaildiv = document.getElementById(thumbslayer);
  var htmltext;
  var tempnumber; // used to keep track on spread pages
	var thumbpicname;

	if (editionmaxpage > -1) // We have editions
		allpages = editionmaxpage;

	if (thumbwidth<1 || !(parseInt(thumbwidth))) {
    thumbnaildiv.style.visibility = 'hidden';
    thumbnaildiv.style.height = 'auto';
    thumbnaildiv.style.width = 'auto';
  }
  else {
	if (orientation == 'horizontal') {
      thumbnaildiv.style.height = parseInt(thumbheight) + 36;
      htmltext = '<table id=pagethumbtableid cellpadding=2 cellspacing=0><tr>';
	}
	else {
      thumbnaildiv.style.width = parseInt(thumbwidth)+40;
      htmltext = '<table id=pagethumbtableid cellpadding=4 cellspacing=0 width='+thumbwidth+'>';
	}
	for (pagecounter=1;pagecounter<=allpages;pagecounter++) {
		tempnumber = pagecounter;

		if (editionPageExists && findarraystring(currentEditionDetails, pagecounter)) // we use editions and the an image exists for the chosen edition
			thumbpicname = "pagethumb" + pagecounter + "_" + arrEditionNames[edition-1] + ".jpg"
		else
			thumbpicname = "pagethumb" + pagecounter + ".jpg"

  	if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
			--tempnumber;
	  }  
  	if (orientation == 'horizontal') {
			htmltext = htmltext + ('<td class=pagethumbtd nowrap><a class="pagethumblink" href="page'+tempnumber+'.htm">'+pagecounter+'<img align=texttop class="pagethumbpic" width='+thumbwidth+' height='+thumbheight+' src="'+thumbpicname+'" vspace=3 alt="Sida '+pagecounter+'" border=0></a></td>');
		}
	  else {
			htmltext = htmltext + ('<tr><td class=pagethumbtd><a class="pagethumblink" href="page'+tempnumber+'.htm">Sida '+pagecounter+'<br><img class="pagethumbpic" width='+thumbwidth+' height='+thumbheight+' src="'+thumbpicname+'" vspace=3 alt="Sida '+pagecounter+'" border=0></a></td></tr>');
	  }
  }
	if (orientation == 'horizontal') {
      htmltext = htmltext + '</tr>';
	}
    htmltext = htmltext + '</table>';
	document.write(htmltext);
  }
}

// move layer so that the current page thumb is at the left of the visible layer section
function movethumbs(id,currentpage,thumbwidth,thumbheight,orientation){
  var thumbspace;
	var offset;

  if (editionpagenumber > 0) // It not a base page, get the page number from the edition
  {
    currentpage = editionpagenumber;
  }

	if (document.getElementById(id))
	{

		if (orientation == 'horizontal') {
			thumbspace = parseInt(thumbwidth)+6; // thumbwidth = width of thumbnail + 6 (vspace*2)
			offset = thumbspace*currentpage; 
		}
		else {
			thumbspace = parseInt(thumbheight)+18;
			offset = thumbspace*currentpage+20; 
		}
  
		if (currentpage > 1) {
			if (typeof window.scrollLeft != 'undefined'){ // for example netscape 6 still don't support scrollleft on elements
			}
			else {
				if (orientation == 'horizontal') {
					document.getElementById(id).scrollLeft= offset;
				}
				else {
					document.getElementById(id).scrollTop = offset;
				}
			}
		}
	}
}

//create page navigation for the current page
function createpagenav(allpages,thispage,pagenavnumber) {

  var leftarrowelement = document.getElementById('leftpagenavid');
  var rightarrowelement = document.getElementById('rightpagenavid');
  var pagenavelement = document.getElementById('pagenavid');
  var pagethumbtr = document.getElementById('pagethumbtrid');
  var fontelement = document.createElement('FONT');
  var pagecounter;
  var nextahrefelement = 0;
  var arrahrefelement = new Array();
  var maxpagestoshow = pagenavnumber; // max amount of page number to show at the same time in the nav bar.
  var pagetext;
  var currentstartnumber;
  var remainder = thispage%maxpagestoshow;
  var quotient = parseInt(thispage/maxpagestoshow);
  var makepreviousarrow = false;
  var arrowcounter;
  var newleftimage;
  var newleftlink;
  var newrightimage;
  var newrightlink;
  var newpagethumb;
  var newpagethumbtd;
  var tempnumber; // used to keep track on spread pages
	var	firstString = 'First';
	var	lastString = 'Last';

	if (leftarrowelement)
	{
		// create left arrow
		removeallchildnodes(leftarrowelement);
    var newleftimage = document.createElement('img');
    newleftimage.src = '../epaperscript/shim.gif'; // the arrow image is set in the .css file used, see class below
    newleftimage.className = 'leftarrowimage'; // class used for the arrow image in the .css
    newleftimage.id = 'leftarrowimage';
    newleftimage.border = '0';
    newleftimage.vspace = '0';
    newleftimage.align = 'absmiddle';
	  newleftlink = document.createElement('a');

	  if (thispage == 1) {
			tempnumber = allpages;
	  }
	  else {
			tempnumber = parseInt(thispage)-1;
	  }

  	if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
			--tempnumber;
	  }  

    newleftlink.href = 'page'+parseInt(tempnumber)+'.htm';
    newleftlink.appendChild(newleftimage);
	  leftarrowelement.appendChild(newleftlink);
	}

  if (rightarrowelement)
  {
		// create right arrow
    removeallchildnodes(rightarrowelement);
    var newrightimage = document.createElement('img');
    newrightimage.src = '../epaperscript/shim.gif'; // the arrow image is set in the .css file used, see class below
    newrightimage.className = 'rightarrowimage'; // class used for the arrow image in the .css
    newrightimage.id = 'rightarrowimage';
    newrightimage.border = '0';
    newrightimage.vspace = '0';
    newrightimage.align = 'absmiddle';
    newrightlink = document.createElement('a');

	  if (thispage == allpages) {
			tempnumber = 1;
	  }
	  else {
			tempnumber = parseInt(thispage)+1;
	  }

	  if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
	    ++tempnumber;
	  }  

    newrightlink.href = 'page'+parseInt(tempnumber)+'.htm';
    newrightlink.appendChild(newrightimage);
	  rightarrowelement.appendChild(newrightlink);
  }

	if (pagenavelement) { // we have the page navigation in the html page

		removeallchildnodes(pagenavelement);
	  // get the pagestart for the current navigation bar
  	if (thispage <= maxpagestoshow) {
			currentstartnumber = 1;
	  }
	  else if (remainder != 0) {
			currentstartnumber = quotient+1;
	  }
	  else {
			currentstartnumber = quotient;
	  }
	  
		pagestartcount = (currentstartnumber*maxpagestoshow+1)-maxpagestoshow;

	  // create the navigation bar
	  for (pagecounter=pagestartcount;pagecounter<=allpages;pagecounter++) { // we have created all visible page links
			if (pagecounter > maxpagestoshow*currentstartnumber) { // we have links left not shown 
				// insert link to the next page
				// appendtextnode(pagenavelement,' ');
		   
	      tempnumber = parseInt(thispage)+1; // check spread
  	    
				if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
					++tempnumber;
	      }  

				inserthrefelement(arrahrefelement,nextahrefelement,'page'+parseInt(tempnumber)+'.htm','>',pagenavelement);
				appendtextnode(pagenavelement,' ');
				nextahrefelement++;
				// create a maxpagestoshow skip link '>>'

	      tempnumber = pagecounter; // check spread
  	    
				if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
					--tempnumber;

					if (thispage == tempnumber) { // we are at the current spread - move to next available page
						tempnumber = tempnumber+2
					} 
				}  

				inserthrefelement(arrahrefelement,nextahrefelement,'page'+tempnumber+'.htm','>>',pagenavelement);
				appendtextnode(pagenavelement,' ');
				nextahrefelement++;
				// create a link to the last page

				tempnumber = allpages; // check spread

				if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
					--tempnumber;
				}  

				inserthrefelement(arrahrefelement,nextahrefelement,'page'+parseInt(tempnumber)+'.htm',lastString,pagenavelement);
				pagecounter = allpages+1;
			}
			else { // create the visible page links
				if (pagecounter ==  pagestartcount && allpages > 1){ // beginning
					if (thispage != '1') { // insert "<" if we are not on the first page
						makepreviousarrow = true;
					}
					if (thispage > maxpagestoshow)	 { // "start" page 
						pagetext = firstString;
						currentnumber = 1;
					}
					else if (pagecounter != thispage) { // this page - no link, just text
						pagetext = pagecounter;
						currentnumber = pagecounter;
					}
					else { // create dummy
						pagetext = ' ';
						currentnumber = pagecounter;
					}
				
					if (makepreviousarrow == true && pagetext != firstString) {
						// we create the first href element with the previous page link
						arrahrefelement[0] = document.createElement('A');
						arrahrefelement[0].className = 'pagenavlink' 
						tempnumber = parseInt(thispage)-1; // check spread
  	
						if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
							--tempnumber;
						}  

						arrahrefelement[0].setAttribute('href','page'+tempnumber+'.htm');
						pagenavelement.appendChild(arrahrefelement[0]);
						appendtextnode(arrahrefelement[0],'<');
						appendtextnode(pagenavelement,' ');
						nextahrefelement++;
					
						// we create the page number link
						tempnumber = currentnumber; // check spread
  	      
						if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
							--tempnumber;
						}  

						inserthrefelement(arrahrefelement,nextahrefelement,'page'+tempnumber+'.htm',pagetext,pagenavelement);
						appendtextnode(pagenavelement,' ');
						nextahrefelement++;
					}
					else {
					
						// we create the first href element with page number link
						arrahrefelement[0] = document.createElement('A');
						arrahrefelement[0].className = 'pagenavlink' 

						tempnumber = currentnumber; // check spread
  	      
						if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
							--tempnumber;
						} 

						arrahrefelement[0].setAttribute('href','page'+tempnumber+'.htm');
						pagenavelement.appendChild(arrahrefelement[0]);
						appendtextnode(arrahrefelement[0],pagetext);
						appendtextnode(pagenavelement,' ');
						nextahrefelement++;
					}
					
					if (pagetext == firstString) { // create a maxpagestoshow skip link '<<'

						tempnumber = pagestartcount-maxpagestoshow; // check spread
  					
						if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
							--tempnumber;
						} 

						inserthrefelement(arrahrefelement,nextahrefelement,'page'+tempnumber+'.htm','<<',pagenavelement);
						appendtextnode(pagenavelement,' ');
						nextahrefelement++;

						// we create element with the previous page link
						tempnumber = parseInt(thispage)-1; // check spread
  
						if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
							--tempnumber;
						} 

						inserthrefelement(arrahrefelement,nextahrefelement,'page'+tempnumber+'.htm','<',pagenavelement);
						appendtextnode(pagenavelement,' ');
						nextahrefelement++;
					}
				}
				if (pagecounter == thispage) { // current page, no link, just text
					pagenavelement.appendChild(fontelement); 
					fontelement.className = 'pagenavfont' 
					appendtextnode(fontelement,pagecounter);
					appendtextnode(pagenavelement,' ');
				}

				if (pagecounter == allpages && allpages > 1 && thispage < (allpages-maxpagestoshow)) { // last page to show

					tempnumber = allpages; // check spread
  	    
					if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
						--tempnumber;
					} 

					inserthrefelement(arrahrefelement,nextahrefelement,'page'+tempnumber+'.htm',lastString,pagenavelement);
					appendtextnode(fontelement,pagecounter);
					nextahrefelement++;
				}
				else if (pagecounter > 1 && pagecounter != thispage) { // all other pages

					tempnumber = pagecounter; // check spread
  	    
					if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
						--tempnumber;
					} 

					inserthrefelement(arrahrefelement,nextahrefelement,'page'+tempnumber+'.htm',pagecounter,pagenavelement);
					appendtextnode(pagenavelement,' ');
					nextahrefelement++;
				}
			}
		}
	
		// create a next page ">" link if needed  
		if (thispage != allpages && (pagecounter <= maxpagestoshow*currentstartnumber || allpages <= maxpagestoshow)) {
			appendtextnode(pagenavelement,' ');

			tempnumber = parseInt(thispage)+1; // check spread
  	
			if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
				++tempnumber;
			} 

			inserthrefelement(arrahrefelement,nextahrefelement,'page'+parseInt(tempnumber)+'.htm','>',pagenavelement);
			appendtextnode(pagenavelement,' ');
			nextahrefelement++;
		}
	
		// a short error message if there is anything wrong
		if (thispage > allpages) {
			pagenavelement.appendChild(fontelement); 
			fontelement.className = 'pagenavlink' 
			appendtextnode(fontelement,'ERROR IN HTML FILE: The current page number can not be larger than the total amount of pages!');
		}

	}
	else { // no page nav element found
		//  alert('Page navigation id (\'pagenavid\') not found on page, but was called in pageinit function (fourth parameter should be 0 (a zero) if no page navigation should be shown)');
	}
}

// get the top and left position of the imagemap
function getMapCoords(mapName) {
  var mapElement = document.getElementById(mapName);
  var coords = {x:0 ,y:0};
  if (mapElement != null)
  {
		do {coords.x += parseInt(mapElement.offsetLeft);
      coords.y += parseInt(mapElement.offsetTop);
      mapElement = mapElement.offsetParent;
		} while (mapElement);
  }
  return coords
}

// show the calling text part of the text box
function showtextpart(textpartTR, textpartTD, text) {

  var newtextnode;
  var paragraphelement;
  var linebreakelement;
  var paragraphpos = text.toLowerCase().indexOf("<p>");
  var linebreakpos = text.toLowerCase().indexOf("<br>");
  var newtextnode;
  var charcounter;
  var tempstring = "";
  var foundspecialchars = false;
  var texttoadd; 

  // remove possible childnodes from newstext object
  removeallchildnodes(textpartTD);
  
	// replace encoded text with readable text
	text = replaceencodedtext(text);

	// insert html elements
  for (charcounter=0; charcounter < text.length; charcounter++) {
    tempstring = tempstring+text.charAt(charcounter);
		if (tempstring.toLowerCase().indexOf("<p>") > -1) {
      texttoadd = tempstring.substring(0, tempstring.length-3);
			if (texttoadd.length > 0) {
				appendtextnode(textpartTD,texttoadd);
			}
			textpartTD.appendChild(document.createElement('P')); 
			tempstring = "";
			foundspecialchars = true;
		}
		else if (tempstring.toLowerCase().indexOf("<br>") > -1) {
			texttoadd = tempstring.substring(0, tempstring.length-4);
		  if (texttoadd.length > 0) {
  			appendtextnode(textpartTD,texttoadd);
		  }
		  textpartTD.appendChild(document.createElement('BR')); 
		  tempstring = "";
		  foundspecialchars = true;
		}
	}

  if (foundspecialchars == false) // no special characters have been found
  {
  	appendtextnode(textpartTD,text);
  }
  else if (tempstring.length > 0)	{
		appendtextnode(textpartTD,tempstring);
  }

  textpartTR.style.display=''; // show table row
}

// gets the onMouseOver text related to the specific part of the page
// and puts it into the text box
function gettext(sectionheadtxt,mainheadtxt,newstxt,photocredtxt) {

  var sectionheadfontelement = document.getElementById('sectionheadfont');
  var sectionheadTDelement = document.getElementById('sectionheadtd');
  var sectionheadTRelement = document.getElementById('sectionheadtr');
  var mainheadTDelement = document.getElementById('mainheadtd');
  var mainheadTRelement = document.getElementById('mainheadtr');
  var phototextTDelement = document.getElementById('phototexttd');
  var phototextTRelement = document.getElementById('phototexttr');
  var newstextTDelement = document.getElementById('newstexttd');
  var newstextTRelement = document.getElementById('newstexttr');
  var textElementstyle = document.getElementById('headertext').style;

	var sectionCount = 0;
  var innernewstextcontainerElement = document.getElementById('innernewstextcontainer');

  textElementstyle.left = 0;
  textElementstyle.top = 0;
  textElementstyle.height = 'auto';
  textElementstyle.overflow = 'hidden';

  // show the different text parts
  if (sectionheadTDelement != null && sectionheadTRelement != null)
  {
    if (sectionheadtxt.length > 0) {
			showtextpart(sectionheadTRelement, sectionheadTDelement, sectionheadtxt);
		}
		else {
			sectionheadTRelement.style.display='none'; // hide table row
		}
  }

  if (mainheadTDelement != null && mainheadTRelement != null)
  {
    if (mainheadtxt.length > 0) {
      showtextpart(mainheadTRelement, mainheadTDelement, mainheadtxt);
    }
    else {
      mainheadTRelement.style.display='none';
			++sectionCount;
    }
  }

  if (phototextTDelement != null && phototextTRelement != null)
  {
    if (photocredtxt.length > 0) {
      showtextpart(phototextTRelement, phototextTDelement, photocredtxt);
    }
    else {
      phototextTRelement.style.display='none';
			++sectionCount;
    }
  }

  if (newstextTDelement != null && newstextTRelement != null)
  {
    if (newstxt.length > 0) {
      showtextpart(newstextTRelement, newstextTDelement, newstxt);
    }
    else {
      newstextTRelement.style.display='none';
			++sectionCount;
    }
  }

	if (innernewstextcontainerElement != null) {
	  if (sectionCount >= 3)
			innernewstextcontainerElement.style.display='none';
		else
			innernewstextcontainerElement.style.display='';
	}

  // call showtext on MouseOver to get IE to move the text before mousemove 
  if (isie == true) {
    showtext(event);
  }
}

// moves and shows the news header layer on onMouseMove 
function showtext(catchedevent) {

  var mapPos = getMapCoords('pageimg');
  var imagemapoffsetX = mapPos.x;
  var imagemapoffsetY = mapPos.y;
  var offsetvalueX;
  var offsetvalueY;
  var mouseoffsetX;
  var mouseoffsetY;
  var defaultoffsetvalueX = 20;
  var defaultoffsetvalueY = 20;
  var textElement = document.getElementById('headertext'); 
  var textareawidth; 
  var textareaheight;
  var imagemapwidth;
  var imagemapheight;
  var screenwidth;
  var screenheight;

	if (textElement != null)
	{

		textareawidth = parseInt(textElement.offsetWidth);
		textareaheight = parseInt(textElement.offsetHeight);
		imagemapwidth = parseInt(document.pageimg.width);
		imagemapheight = parseInt(document.pageimg.height);

		if (isnetscape == true) {
			mouseoffsetX = catchedevent.pageX; 
			mouseoffsetY = catchedevent.pageY;
			screenwidth = window.innerWidth;
			screenheight = window.innerHeight;
		}
		else {
			screenwidth = document.body.clientWidth;
			screenheight = document.body.clientHeight;
			mouseoffsetX = catchedevent.x + window.document.body.scrollLeft;
			mouseoffsetY = catchedevent.y + window.document.body.scrollTop;
		}

		// offsetvalues used for moving the text a little bit away from the mouse pointer 
		// and on a good position on the screen. Set the text box layer at the right position
		if (mouseoffsetX > imagemapoffsetX + (imagemapwidth-textareawidth-defaultoffsetvalueX) || 
			mouseoffsetX > screenwidth-textareawidth-defaultoffsetvalueX) { 
			textElement.style.left = parseInt(mouseoffsetX - textareawidth - defaultoffsetvalueX) + 'px';
		}
		else {
			textElement.style.left = parseInt(mouseoffsetX + defaultoffsetvalueX) + 'px';
		}

		if (mouseoffsetY > imagemapoffsetY + (imagemapheight-textareaheight-defaultoffsetvalueY)) { 
			textElement.style.top = parseInt(mouseoffsetY - textareaheight - defaultoffsetvalueY) + 'px';
		}
		else {
			textElement.style.top = parseInt(mouseoffsetY + defaultoffsetvalueY) + 'px';
		}

		// show the text box when it is moved to the right position
		textElement.style.visibility = 'visible';
	}
}

// marks the selected area on the page with a border
function showborders(left, top, right, bottom) {
  var mapPos = getMapCoords('pageimg');
  var pagepicLeft = mapPos.x;
  var pagepicTop = mapPos.y;
  var markLeft = parseInt(left)+parseInt(pagepicLeft);
  var markTop = parseInt(top)+parseInt(pagepicTop);
  var markHeight = parseInt(bottom)-parseInt(top);
  var markWidth = parseInt(right)-parseInt(left);
  var vertObj;
  var vertCount;
  var horCount;
  var smallWidthHeight;
  var bottomhory;
  var borderWidth = 1;
  var currentborderstyle = 'solid';

  // set border style to work with the current browser. 
  // Dashed border only works with IE6 or higher for IE browsers
  if (isie == true) {
    smallWidthHeight = 3;
		bottomhory = parseInt(markHeight+markTop-borderWidth+1);
    if (isie55up == false){
      currentborderstyle = 'solid';
    }
  }
  else {
    smallWidthHeight = 1;
		bottomhory = parseInt(markHeight+markTop-borderWidth+2);
		markHeight = markHeight - 1;
  }

  // handle horizontal picture frame lines
  for (horCount = 1; horCount <= 2; horCount++) {
    if (horCount == 1) { // 1 = topline, 2 = bottomline
      horObj = document.getElementById('topborder').style;      
      horObj.top = markTop+'px';
    }
    else {
      horObj = document.getElementById('bottomborder').style; 
      horObj.top = bottomhory+'px';
    }
    horObj.left = markLeft+'px';
    horObj.width = markWidth;
    horObj.height = smallWidthHeight;
    horObj.overflow = 'hidden';
    horObj.borderWidth = borderWidth;
    horObj.borderStyle = currentborderstyle;
    horObj.visibility = 'visible';
  }

  // handle vertical picture frame lines
  for (vertCount = 1; vertCount <= 2; vertCount++) {
    if (vertCount == 1) { // 1 = leftopborder, 2 = rightopborder
      vertObj = document.getElementById('leftborder').style;      
      vertObj.left = markLeft+'px';
    }
    else {
      vertObj = document.getElementById('rightborder').style; 
      vertObj.left = parseInt(markLeft+markWidth-smallWidthHeight)+'px';
    }
    vertObj.top = markTop+'px';
    vertObj.width = smallWidthHeight;
    vertObj.height = parseInt(markHeight+borderWidth+2);
    vertObj.borderWidth = borderWidth;
    vertObj.overflow = 'hidden';
    vertObj.borderStyle = currentborderstyle;
    vertObj.visibility = 'visible';
  }

}

// hides the text related to the specific part of the page
function notext() {

  var sectionheadTRelement = document.getElementById('sectionheadtr');
  var mainheadTRelement = document.getElementById('mainheadtr');
  var phototextTRelement = document.getElementById('phototexttr');
  var newstextTRelement = document.getElementById('newstexttr');

  if (sectionheadTRelement != null)
  {
    sectionheadTRelement.style.display='none'; // hide table row
  }
  if (mainheadTRelement != null)
  {
    mainheadTRelement.style.display='none'; // hide table row
  }
  if (phototextTRelement != null)
  {
    phototextTRelement.style.display='none'; // hide table row
  }
  if (newstextTRelement != null)
  {
    newstextTRelement.style.display='none'; // hide table row
  }
  document.getElementById('headertext').style.visibility = 'hidden';
  noborders();
}

// removes the border created by the onMouseOver
function noborders() {
  document.getElementById('topborder').style.visibility = 'hidden';
  document.getElementById('bottomborder').style.visibility = 'hidden';
  document.getElementById('rightborder').style.visibility = 'hidden';
  document.getElementById('leftborder').style.visibility = 'hidden';
}

// Position something relative to the mouse pointer
function positionbesidemouse(catchedevent,currentid,xPos,Ypos) {

  var mouseoffsetX;
  var mouseoffsetY;
  var defaultoffsetvalueX = xPos;
  var defaultoffsetvalueY = Ypos;
  var currentElement = document.getElementById(currentid); 

	if (currentElement != null)
	{
	  if (isnetscape == true) {
		  mouseoffsetX = catchedevent.pageX; 
			mouseoffsetY = catchedevent.pageY;
		}
		else {
			mouseoffsetX = catchedevent.clientX + window.document.body.scrollLeft;
			mouseoffsetY = catchedevent.clientY + window.document.body.scrollTop;
		}

		currentElement.style.top = parseInt(mouseoffsetY + defaultoffsetvalueY) + 'px';
    currentElement.style.left = parseInt(mouseoffsetX + defaultoffsetvalueX) + 'px';
		
		currentContainer=currentid; // put the layer at top
		handleContainerMouseDown();

		currentElement.style.visibility = 'visible';
	}
}

// global variable for use when checking for open searchwindow
var newsearchwin;

// open a search in a search window
function opensearchwin(query,winwidth,winheight,winname) {

  var winopts;
  var winxpos;
  var winypos;
  var screenoffsets = 10;

  if (query.length < 1)  {
    alert('Please enter a search string');
    return false; // cancel form submission
  }
  else {
    if(!newsearchwin || newsearchwin.closed) {           
      winxpos = screen.width - winwidth - screenoffsets -10;
      winypos = screenoffsets;
      winopts = 'width='+winwidth+',height='+winheight+',resizable=1,scrollbars=1,status=0,left='+winxpos+',top='+winypos;
  	  newsearchwin = window.open('',winname,winopts);
    }
    newsearchwin.focus();
  }
 
}

// go to the specific page
function changepage(maxpages,pagenum) {
  var isok = false;
	
	if (editionmaxpage > -1) // We have editions
		maxpages = editionmaxpage;

	var alertString = 'The page number must be between 1 and '+maxpages+'.';

  if (isPosInteger(pagenum) == true) {
		if (pagenum <= maxpages && pagenum > 0) {
			isok = true;
		}
  }

  if (isok == true) {

		tempnumber = pagenum; // check spread
  	
		if (checkspread(tempnumber) == true) { // check if the current page is a right side spread number
			--tempnumber;
		}
	             
    self.location.href='page'+tempnumber+'.htm';
    return false;
  }
  else {
    alert(alertString);
    return false;
  }
}

var timer = ''; // timer for focus 
var lastcaller; // keeps tracks on the latest caller

// do the windows focusing
function dofocus(prevcaller) { 
  if (prevcaller != "query") {
    timer = setTimeout('window.focus()',0);
  }
  else if (prevcaller != "mainwindow") {
    clearTimeout(timer);
  }
}

// check if the search window is open, and give it focus if it is
function searchwinfocus(onoff, timer, time, caller) {

  if (onoff == "off") {
    clearTimeout(timer);
  }
  else {
    timer = setTimeout('dofocus(lastcaller)', time);
  }
  lastcaller = caller;
}

// Check if the value is a postive integer
function isPosInteger(inputVal) {
  var inputStr = inputVal.toString()
  for (var i=0; i<inputStr.length; i++) {
    var oneChar = inputStr.charAt(i)
    if (oneChar < "0" || oneChar > "9") {
      return false
    }
  }
  return true
} 

var downEffect = "revealTrans(Duration=0.2,Transition=5)";
var upEffect = "revealTrans(Duration=0.2,Transition=4)";

// Open menu item
function showhidelayer(chosenlayer) {
  if (document.getElementById(chosenlayer).style.visibility == 'hidden') {
		document.getElementById(chosenlayer).style.visibility = 'visible';  
  }
  else {
		document.getElementById(chosenlayer).style.visibility = 'hidden';
  }
} 

// hides a layer
function hidelayer(layer) {
	document.getElementById(layer).style.visibility = 'hidden';
}

// shows a layer
function showlayer(layer) {
	document.getElementById(layer).style.visibility = 'visible'; 
}

// changes a layers width, height, top and left dimensions
function switchLayerDimensions(chosenlayer,width1,width2,height1,height2,top1,top2,left1,left2) {
	
  var layerstyle = document.getElementById(chosenlayer).style;
  
	// width switch
	if (width1 != -1)	{
		if (parseInt(layerstyle.width) == width1)
			layerstyle.width = width2;
		else
			layerstyle.width = width1;		
	}
	// height switch
	if (height1 != -1)	{
		if (parseInt(layerstyle.height) == height1)
			layerstyle.height = height2;
		else
			layerstyle.height = height1;		
	}
	// top switch
	if (top1 != -1)	{
		if (parseInt(layerstyle.top) == top1)
			layerstyle.top = top2;
		else
			layerstyle.top = top1;		
	}
	// left1 switch
	if (left1 != -1)	{
		if (parseInt(layerstyle.left) == left1)
			layerstyle.left = left2;
		else
			layerstyle.left = left1;		
	}
}

// check if an object is visible on the screen, if not then reposition it
function setobjectonscreen(layername,xoffset,yoffset) {

  var layername;
	var layerstyle = document.getElementById(layername).style;
  var topposition;
  var leftposition;
  var screenwidth;
  var screenheight;
  var currentleft;
  var currenttop;

	if (typeof window.pageXOffset != 'undefined'){
		topposition = window.pageYOffset;
		leftposition = window.pageXOffset;
  }
  else {
		if((!window.document.compatMode)|| (window.document.compatMode == 'BackCompat')){
			leftposition = window.document.body.scrollLeft;
      topposition = window.document.body.scrollTop;
    }
		else
		{
			leftposition = window.document.documentElement.scrollLeft;
			topposition = window.document.documentElement.scrollTop;
    }
  }

  if (isnetscape == true) {
    screenwidth = window.innerWidth;
    screenheight = window.innerHeight;
  }
  else {
    screenwidth = document.body.clientWidth;
		screenheight = document.body.clientHeight;
  }

  currentleft = parseInt(layerstyle.left);
  currenttop = parseInt(layerstyle.top);

	if (!currentleft || currentleft > (screenwidth-leftposition) || currentleft < leftposition || !currenttop || currenttop> (screenheight-topposition) || currenttop < topposition)
	{
	  topposition = topposition + yoffset;
	  leftposition = leftposition + xoffset;
	 
	  layerstyle.left = leftposition + 'px';
	  layerstyle.top= topposition + 'px';
	} 
}

// hide the cover layer
function hidecoverlayer(layerid) {
	document.getElementById(layerid).style.width = "0px";
	document.getElementById(layerid).style.height = "0px";
	document.getElementById(layerid).style.visibility = "hidden";
}

// Put menu at top
function makeStatic(layername) {
  var topposition;
  var screenwidth;

  if (typeof window.pageXOffset != 'undefined'){
    topposition = window.pageYOffset + 2;
  }
  else {
    topposition = window.document.body.scrollTop + 2;
  }

	if (document.getElementById(layername).style.top != topposition + 'px')	 // we need to move the layer
		document.getElementById(layername).style.top = topposition + 'px';
}

// Put menu at the bottom
function makeBottomStatic(layername,bottomoffset) {
  var bottomposition;
  var screenheight;
  var layerToStay = document.getElementById(layername);
  var newbottompos;
  var startOverflow;

	if (layerToStay != null)
	{
		if (layerToStay.style.visibility == "visible")
		{
			if (isnetscape == true) 
				screenheight = window.innerHeight - 6;
			else 
				 screenheight = document.body.clientHeight;

			if (typeof window.pageXOffset != 'undefined')
				bottomposition = window.pageYOffset;
			else 
				bottomposition = window.document.body.scrollTop;

			newbottompos = (screenheight + bottomposition ) -	parseInt(document.getElementById(layername).style.height) - bottomoffset;

			if (layerToStay.style.top != newbottompos+"px") { // we need to move the layer
				startOverflow = layerToStay.style.overflow;
				if (startOverflow != "hidden")
					layerToStay.style.overflow = "hidden"; 
				layerToStay.style.top = newbottompos + "px";
				if (startOverflow != "hidden")
					layerToStay.style.overflow = startOverflow;
			}
		}
	}
}


// make a layer dragable and resizable
var y,x;
var mDown = false;
var mResize = false;
var isMaximized = false;
var isMinimized = false;
var currentContainer;
var currentContentArea;
var originalWidth;
var originalHeight;
var prevZindex;
var prevContainer;

function setCurrentWindow (container, contentarea) {
	currentContainer = container;
	currentContentArea = contentarea;
}

function resizeCaptureOnMouseDown(e) {
	mResize=true;
	captureClientXY(e);
	originalWidth = parseInt(document.getElementById(currentContainer).style.width);
	originalHeight = parseInt(document.getElementById(currentContainer).style.height);
}

function windowTitleMouseUp() {
	mDown = false;
}

function windowTitleMouseDown(e) {

	mDown=true;
	captureOffsetXY(e);
}

function initDrag(e) {

	var leftposition;
  var topposition;

	if(!mDown)return;
	if(document.all) {
		x2 = window.event.clientX-(x+5);
		y2 = window.event.clientY-(y+5);
	} else {
		x2 = e.clientX - (x+5);
		y2 = e.clientY - (y+5);
	}

	if (typeof window.pageXOffset != 'undefined'){
		topposition = window.pageYOffset;
		leftposition = window.pageXOffset;
  }
  else {
		topposition = window.document.body.scrollTop;
		leftposition = window.document.body.scrollLeft;
  }

	x2 += leftposition;
	y2 += topposition;

	if (currentContainer == prevContainer)
	{
		document.getElementById(currentContainer).style.top = y2 + "px";
		document.getElementById(currentContainer).style.left = x2 + "px";
	}
}

function doResize(nX,nY) {
	nWidth = nX - x;
	nHeight = nY- y;

	if (originalWidth && originalHeight)
	{
		cWidth = originalWidth; 
		cHeight = originalHeight;
		cWidth+=nWidth; 
		cHeight+=nHeight;

		if(cWidth<=75 || cHeight <= 75) return;

		document.getElementById(currentContainer).style.width = cWidth + "px";
		document.getElementById(currentContainer).style.height = cHeight + "px";
		document.getElementById(currentContentArea).style.width = cWidth + "px";
		document.getElementById(currentContentArea).style.height = cHeight + "px";

	}
	else
		return
}

function handleContainerMouseDown() {
	var currentZindex = document.getElementById(currentContainer).style;
	if (prevContainer != currentContainer) {
		if (prevZindex)	
			currentZindex.zIndex = parseInt(prevZindex) + 1;
		++currentZindex.zIndex;
		++currentZindex.zIndex;
		prevZindex = parseInt(currentZindex.zIndex);
	}
	prevContainer = currentContainer;
}

function handleMouseUpEvents() {
	if(mDown) {
		mDown=false;
		return;
	}
	if(mResize) 
		mResize=false;
}

function handleMouseMoveEvents(e) {

	if(mDown) {
		initDrag(e);
		return;
	}
	if(mResize) {
		if (isnetscape == true)
			doResize(e.pageX,e.pageY);
		else 
			doResize(window.event.clientX,window.event.clientY);
	}
}

function captureOffsetXY(e) {

	if (isnetscape == true) {
		x = e.layerX;
		y = e.layerY;
	}
	else {
		x=window.event.offsetX;
		y=window.event.offsetY;
	}

}

function captureClientXY(e) {
	if (isnetscape == true) {
		x = e.clientX;
		y = e.clientY;
	}
	else {
		x = window.event.clientX;
		y = window.event.clientY;
	}

}
// End make a layer dragable and resizable

// open window
function avaaIkkuna(URL, width, height, scroll, resize, TITLE) {

    if (URL != "") { 
			if (URL.indexOf("archive.htm") > -1 && isphp == true)
				URL = URL.replace('.htm','.php');

			if (editionpageid > 0 && URL.indexOf('bigpage') > -1 && URL.indexOf('.jpg') > -1)
				URL = "bigpage"+editionpageid+".jpg";

			if (width == ""){
				width = 400
				}
			if (height == ""){
				height = 400
				}
			if (scroll == "" || scroll == null ) {
				scroll = 1
				}
					if (resize == "" || resize == null ) {
				resize = 1
				}
			if (TITLE == ""){
				TITLE = 'TEST'
				}
			mainWinParams = 'toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=' + scroll + ',resizable=' + resize + ',width=' + width + ',height=' + height + ',left=10, top=10';
			var mainWindow = window.open(URL, TITLE, mainWinParams);

			mainWindow.focus();

    }
}

// open window
function avaaPicIkkuna(URL, width, height, scroll, resize, TITLE) {
    if (URL != "") { 

			if (width == ""){
				width = 400
				}
			if (height == ""){
				height = 400
				}
			if (scroll == "" || scroll == null ) {
				scroll = 1
				}
					if (resize == "" || resize == null ) {
				resize = 1
				}
			if (TITLE == ""){
				TITLE = 'TESTI'
				}
			mainWinParams = 'toolbar=0,location=0,directories=0,status=1,menubar=0,scrollbars=' + scroll + ',resizable=' + resize + ',width=' + width + ',height=' + height + ',left=10, top=10';
			var mainWindow = window.open(URL, TITLE, mainWinParams);

			mainWindow.focus();

    }
}

// zoom page image on mouseover
function dozoomimage(catchedevent, bigpicname, resizevalue, varzoomlayer, varouterzoomlayer, imageid) {

  var zoomlayer = document.getElementById(varzoomlayer);
  var outerzoomlayer = document.getElementById(varouterzoomlayer);
  var mapPos = getMapCoords('pageimg');
  var imagemapoffsetX = mapPos.x;
  var imagemapoffsetY = mapPos.y;
  var imagemapwidth;
  var imagemapheight;
  var xPos;
  var yPos;

	// change image name if we use editions
	if (editionpageid > 0)
	{
		bigpicname = bigpicname.substr(0, bigpicname.lastIndexOf(".")) + editionpageid + "." + bigpicname.substr(bigpicname.lastIndexOf(".")+1, bigpicname.length);
		bigpicname = bigpicname.replace("#PAGE","");
	}

	if (document.pageimg)	{
		imagemapwidth = parseInt(document.pageimg.width);
		imagemapheight = parseInt(document.pageimg.height);
	}

  if (zoomlayer != null && outerzoomlayer != null && imagemapwidth && imagemapheight) // we have the zoomlayer!
  {
		if (outerzoomlayer.style.visibility == "visible") {
	    if (isnetscape == true) {
		    mouseoffsetX = catchedevent.pageX; 
			  mouseoffsetY = catchedevent.pageY;
			}
			else 
			{
				mouseoffsetX = catchedevent.x + window.document.body.scrollLeft;
				mouseoffsetY = catchedevent.y + window.document.body.scrollTop;
			}
		
			xPos = ((mouseoffsetX - imagemapoffsetX) * resizevalue) - 70;
			yPos = ((mouseoffsetY - imagemapoffsetY) * resizevalue) + 10;

			if ((mouseoffsetX >=  imagemapoffsetX &&  mouseoffsetX <=  imagemapoffsetX+imagemapwidth) && (mouseoffsetY >=  imagemapoffsetY &&  mouseoffsetY <=  imagemapoffsetY+imagemapheight)) {
			
				if (document.getElementById(imageid).src.indexOf(bigpicname) == -1) // image not loaded
					document.getElementById(imageid).src = bigpicname;

				var tempstring = yPos + ""; // make it a string

				if (tempstring.indexOf("-") == -1) 
					zoomlayer.style.top = "-"+yPos+"px"; // up
				else
					zoomlayer.style.top = yPos+"px"; // down

				tempstring = xPos + ""; // make it a string

				if (tempstring.indexOf("-") == -1) 
					zoomlayer.style.left = "-"+xPos+"px"; // to left
				else
					zoomlayer.style.left = xPos+"px"; // to right
			}
		}
	}
}

// Stuff for debug version below

// image already is linked to an article 
function picislinked(picname, left, top, right, bottom) {
 alert('This image is already linked to an article');	
}

// insert a border layer element
function insertlayerelement(parentelement, thislayerid) {
  var newlayerelement;

  newlayerelement = parentelement.cloneNode(true);
  newlayerelement.id = thislayerid;
	document.body.appendChild(newlayerelement);
  newlayerelement.style.visibility = 'hidden';
  return newlayerelement;
}

var currentpic = ''; // current picture file name
var currentarticle = ''; // current article file name
var previouspicdebugid = ''; // unique number for previous picture caller
var previousarticledebugid = ''; // unique number for previous article caller
var mainarticlemarked = ''; // check to see if the main article is selected or not
var arrarticles = new Array(); // array of articles to connect to the main article
var arrpics = new Array(); // array of pictures to connect to the main article

// put a copy of the borders marking the selection selected
function putborders(callerfile, callkind, left, top, right, bottom) {
	
	var mapPos = getMapCoords('pageimg');
  var pagepicLeft = mapPos.x;
  var pagepicTop = mapPos.y;
  var markLeft = parseInt(left)+parseInt(pagepicLeft);
  var markTop = parseInt(top)+parseInt(pagepicTop);
  var markHeight = parseInt(bottom)-parseInt(top);
  var markWidth = parseInt(right)-parseInt(left);
  var vertObj;
  var horBordObj;
  var vertBordCount;
  var horCount;
  var smallWidthHeight;
  var bottomhory;
  var borderWidth = 1;
  var currentborderstyle = 'solid';
  var currentidstring = ""+left+""+top+""+right+""+bottom;
  var horbordlayer = document.getElementById('bottomborder');
  var vertbordlayer = document.getElementById('leftborder');
  var debugpictext = document.getElementById('debugpictextid');
  var debugarticletext = document.getElementById('debugarticletextid');
  var templayer;
  var layercount;
  var templayername;
  var markedopiccolor = '#00FF00';
  var markedarticlecolor = '#00FF00';
  var markedmainarticlecolor = '#0000FF';
  var arraycounter;

  var temphortoplayer;
  var temphorbottomlayer;
  var tempvertleftlayer;
  var tempvertrightlayer;
  var tempdebugarticletext;
  var tempdebugpictext;

  if (document.getElementById(currentidstring+'v1')) { // insert new layers if we do not already have created them
    tempvertleftlayer = document.getElementById(currentidstring+'v1');
    tempvertrightlayer = document.getElementById(currentidstring+'v2');
    temphortoplayer = document.getElementById(currentidstring+'h1');
    temphorbottomlayer = document.getElementById(currentidstring+'h2');
    tempdebugarticletext = document.getElementById(currentidstring+'arttext');
    tempdebugpictext = document.getElementById(currentidstring+'pictext');
    tempdebugarticletext.style.zIndex = 25;
		tempdebugpictext.style.zIndex = 25;
    tempvertleftlayer.style.zIndex = 20;
    tempvertrightlayer.style.zIndex = 20;
    temphortoplayer.style.zIndex = 20;
    temphorbottomlayer.style.zIndex = 20;
  }
  else {
    tempdebugpictext = insertlayerelement(debugpictext,currentidstring+'pictext');
    tempvertleftlayer = insertlayerelement(vertbordlayer,currentidstring+'v1');
    tempvertrightlayer = insertlayerelement(vertbordlayer,currentidstring+'v2');
    temphortoplayer = insertlayerelement(horbordlayer,currentidstring+'h1');
    temphorbottomlayer = insertlayerelement(horbordlayer,currentidstring+'h2');
    tempdebugarticletext = insertlayerelement(debugarticletext,currentidstring+'arttext');
    tempdebugarticletext.style.zIndex = 25;
		tempdebugpictext.style.zIndex = 25;
    tempvertleftlayer.style.zIndex = 20;
    tempvertrightlayer.style.zIndex = 20;
    temphortoplayer.style.zIndex = 20;
    temphorbottomlayer.style.zIndex = 20;

    if (callkind == 'pic') {
  	  setdebugbordercolor(temphortoplayer, temphorbottomlayer, tempvertleftlayer, tempvertrightlayer, markedopiccolor);
    }  
  }

  // set border style to work with the current browser. 
  // Dashed border only works with IE6 or higher for IE browsers
  if (isie == true) {
		smallWidthHeight = 3;
		bottomhory = markHeight+markTop-borderWidth+1;
		if (isie55up == false){
			currentborderstyle = 'solid';
		}
  }
  else {
		smallWidthHeight = 1;
		bottomhory = markHeight+markTop-borderWidth+2;
		currentborderstyle = 'solid';
  }

  // handle horizontal picture frame lines
  for (horCount = 1; horCount <= 2; horCount++) {
    if (horCount == 1) { // 1 = topline, 2 = bottomline
  	  horBordObj = temphortoplayer.style;
      horBordObj.top = markTop+'px';
    }
    else {
			horBordObj = temphorbottomlayer.style;
  	  horBordObj.top = bottomhory+'px';
    }
	
		horBordObj.left = markLeft+'px';
		horBordObj.width = markWidth;
		horBordObj.height = smallWidthHeight;
  	horBordObj.overflow = 'hidden';
		horBordObj.borderWidth = borderWidth;
    horBordObj.borderStyle = currentborderstyle;
  }

  // handle vertical picture frame lines
	// var VertBorderTop;
  for (vertCount = 1; vertCount <= 2; vertCount++) {
		if (vertCount == 1) { // 1 = leftopborder, 2 = rightopborder 
			vertBordObj = tempvertleftlayer.style;
 			vertBordObj.left = markLeft+'px';
		}
		else {
			vertBordObj = tempvertrightlayer.style;
  		vertBordObj.left = (markLeft+markWidth-smallWidthHeight+1)+'px';
		}
		
		vertBordObj.top = markTop+'px';
    vertBordObj.width = smallWidthHeight;
		vertBordObj.height = markHeight+borderWidth+1;
		vertBordObj.borderWidth = borderWidth;
		vertBordObj.overflow = 'hidden';
    vertBordObj.borderStyle = currentborderstyle;
  }

  // set current caller file name and hide/show current item's borders
  if (callkind == 'pic') {
    showhideborders(temphortoplayer, temphorbottomlayer, tempvertleftlayer, tempvertrightlayer, tempdebugpictext);

		if (temphortoplayer.style.visibility == 'hidden') {
			for (arraycounter = 0; arraycounter < arrpics.length; arraycounter++) { // remove pic from array
				if (arrpics[arraycounter] == callerfile) {
					arrpics.splice(arraycounter,1);
  				break;
				}
			}		
			if (document.getElementById(currentidstring+'islinkedpictext')) { // is it marked as unlinked
				document.getElementById(currentidstring+'islinkedpictext').style.visibility = 'visible';
			}
      
			currentpic  = '';
			previouspicdebugid = '';
			tempdebugpictext.style.visibility = 'hidden';
		}
		else {
			if (document.getElementById(currentidstring+'islinkedpictext')) { // is it marked as unlinked
				document.getElementById(currentidstring+'islinkedpictext').style.visibility = 'hidden';
			}
    
			arrpics[arrpics.length] = callerfile; // add pic to array
			tempdebugpictext.style.top = markTop+'px';
			tempdebugpictext.style.left = markLeft+'px';
			tempdebugpictext.style.visibility = 'visible';
			currentpic  = callerfile;
			previouspicdebugid = currentidstring;
		}
  }
  else {
    showhideborders(temphortoplayer, temphorbottomlayer, tempvertleftlayer, tempvertrightlayer, tempdebugarticletext);
    if (temphortoplayer.style.visibility == 'hidden') {
      if (mainarticlemarked == callerfile) { // set article to nothing if the current main article is this one
				mainarticlemarked = '';
      }
			else { // remove article from array
				for (arraycounter = 0; arraycounter < arrarticles.length; arraycounter++) {
          if (arrarticles[arraycounter] == callerfile) {
						arrarticles.splice(arraycounter,1);
  					break;
          }
				}
			}
      
			currentarticle  = '';
      previousarticledebugid = '';
			tempdebugarticletext.style.visibility = 'hidden';
		}
		else {
      if (mainarticlemarked == '') { // set article to nothing if the current main article is this one
        mainarticlemarked = callerfile;
		    tempdebugarticletext.lastChild.nodeValue = 'main article marked';
        setdebugbordercolor(temphortoplayer, temphorbottomlayer, tempvertleftlayer, tempvertrightlayer, markedmainarticlecolor);
      }
      else {
        arrarticles[arrarticles.length] = callerfile; // add article to array
		    tempdebugarticletext.lastChild.nodeValue = 'article marked';
        setdebugbordercolor(temphortoplayer, temphorbottomlayer, tempvertleftlayer, tempvertrightlayer, markedarticlecolor);
      }
	  
			tempdebugarticletext.style.top = markTop+'px';
			tempdebugarticletext.style.left = markLeft+'px';
			tempdebugarticletext.style.visibility = 'visible';
			currentarticle  = callerfile;
      previousarticledebugid = currentidstring;
		}
  }
}


function makeconnection(debugwinname) {
  
  var confirmtext = 'Click OK to link chosen images/articles to main article.';
  var arraycount;
  var articletext = '';
  var imagetext = '';
  var winopts;
  var winxpos;
  var winypos;
  var winwidth = 400;
  var winheight = 200;
  var screenoffsets = 10;
  var arrtemp;

  if (mainarticlemarked == '') { // we do not have a main article
    alert('Please mark a main article to connect other articles and images to.');
    return false; // cancel form submission
  }
  if (arrarticles.length == 0 && arrpics.length == 0) { // no articles or pics to link to main article
    alert('Please mark at least one article or image to connect to the main article.');
    return false; // cancel form submission
  }
  else {
    if (!confirm(confirmtext)) { // cancel the connection
      return false; // cancel form submission
    }
		else { // insert picture and article values into html page
 			for (arraycount = 0; arraycount < arrpics.length; arraycount++) { // the chosen images
				imagetext = imagetext + arrpics[arraycount];
				if (arraycount < arrpics.length-1) { // put divider
					imagetext = imagetext + ',';
				}
			}
 			for (arraycount = 0; arraycount < arrarticles.length; arraycount++) { // the chosen articles
				articletext = articletext + arrarticles[arraycount];
				if (arraycount < arrarticles.length-1) { // put divider
					articletext = articletext + ',';
				}
			}
			document.connectform.imagearray.value  = imagetext;
			document.connectform.articlearray.value  = articletext;
			document.connectform.mainarticle.value  = mainarticlemarked;
		}

		// show connection data in a new window
		winxpos = screen.width - winwidth - screenoffsets -10;
		winypos = screenoffsets;
		winopts = 'width='+winwidth+',height='+winheight+',resizable=1,scrollbars=1,status=0,left='+winxpos+',top='+winypos;
		newdebugwin = window.open('',debugwinname,winopts);
		newdebugwin.focus();
	}
}

// set debug borders' color
function setdebugbordercolor(topbord, bottombord, leftbord, rightbord, bordcolor) {
  topbord.style.borderColor = bordcolor;
  bottombord.style.borderColor = bordcolor;
  leftbord.style.borderColor = bordcolor;
  rightbord.style.borderColor = bordcolor; 
}

// hide or show debug borders
function showhideborders(topbord, bottombord, leftbord, rightbord, textlayer) {
  if (topbord.style.visibility == 'hidden') {
    topbord.style.visibility = 'visible';
    bottombord.style.visibility = 'visible';
    leftbord.style.visibility = 'visible';
    rightbord.style.visibility = 'visible'; 
		textlayer.style.visibility = 'visible'; 
  }
  else {
    topbord.style.visibility = 'hidden';
    bottombord.style.visibility = 'hidden';
    leftbord.style.visibility = 'hidden';
    rightbord.style.visibility = 'hidden';
		textlayer.style.visibility = 'hidden'; 
  } 
}

// marked the unlinked images
function markunlinkedpics(unlinkedarray) {
  var arrpicoord = unlinkedarray.split(":"); // each picture's coordinates
  var arrtempcoords;
  var arraycounter;
  var tempislinkedleft;
  var tempislinkedright;
  var tempislinkedtop;
  var tempislinkedbottom;
  var tempislinkedtext;
  var horbordlayer = document.getElementById('bottomborder');
  var vertbordlayer = document.getElementById('leftborder');
  var islinkedpictext = document.getElementById('debugpictextid');
  var mapPos = getMapCoords('pageimg');
  var pagepicLeft = mapPos.x;
  var pagepicTop = mapPos.y;
  var markLeft;
  var markTop;
  var markHeight;
  var markWidth;
  var currentidstring;
  var smallWidthHeight;
  var bottomhory;
  var currentborderstyle; 
  var borderWidth = 1;
  var islinkedbordercolor = '#FFFF00';

  for (arraycounter = 0; arraycounter < arrpicoord.length; arraycounter++) { // mark the images
    
		arrtempcoords = arrpicoord[arraycounter].split(",");
    currentidstring = ""+arrtempcoords[0]+""+arrtempcoords[1]+""+arrtempcoords[2]+""+arrtempcoords[3];

    markLeft = parseInt(arrtempcoords[0])+parseInt(pagepicLeft);
    markTop = parseInt(arrtempcoords[1])+parseInt(pagepicTop);
    markHeight = parseInt(arrtempcoords[3])-parseInt(arrtempcoords[1]);
    markWidth = parseInt(arrtempcoords[2])-parseInt(arrtempcoords[0]);

    // set border style to work with the current browser. 
    // Dashed border only works with IE6 or higher for IE browsers
    if (isie == true) {
  	  smallWidthHeight = 3;
			bottomhory = markHeight+markTop-borderWidth+1;
			if (isie55up == false){
				currentborderstyle = 'solid';
			}
    }
    else {
			smallWidthHeight = 1;
			bottomhory = markHeight+markTop-borderWidth+2;
    }
 
    if (document.getElementById(islinkedpictext,currentidstring+'islinkedpictext')) { // insert new layers if we do not already have created them   
			tempislinkedtext = document.getElementById(currentidstring+'islinkedpictext');
      tempislinkedleft = document.getElementById(currentidstring+'islinkedv1');
      tempislinkedright = document.getElementById(currentidstring+'islinkedv2');
      tempislinkedtop = document.getElementById(currentidstring+'islinkedh1');
      tempislinkedbottom = document.getElementById(currentidstring+'islinkedh2');
    }
    else {
      tempislinkedtext = insertlayerelement(islinkedpictext,currentidstring+'islinkedpictext');
      tempislinkedleft = insertlayerelement(vertbordlayer,currentidstring+'islinkedv1');
      tempislinkedright = insertlayerelement(vertbordlayer,currentidstring+'islinkedv2');
      tempislinkedtop = insertlayerelement(horbordlayer,currentidstring+'islinkedh1');
      tempislinkedbottom = insertlayerelement(horbordlayer,currentidstring+'islinkedh2');
    }
    tempislinkedtext.style.zIndex = 24;
    tempislinkedleft.style.zIndex = 20;
    tempislinkedright.style.zIndex = 20;
    tempislinkedtop.style.zIndex = 20;
    tempislinkedbottom.style.zIndex = 20;

    // set border color
		setdebugbordercolor(tempislinkedtop, tempislinkedbottom, tempislinkedleft, tempislinkedright, islinkedbordercolor);

	// put and show textlayer
    tempislinkedtext.lastChild.nodeValue = 'unlinked image';
    tempislinkedtext.style.top = markTop+'px';
    tempislinkedtext.style.left = markLeft+'px';
    tempislinkedtext.style.visibility = 'visible';

    // put format and top layer
    tempislinkedtop.style.top = markTop+'px';
    tempislinkedtop.style.left = markLeft+'px';
    tempislinkedtop.style.height = smallWidthHeight;
		tempislinkedtop.style.width = markWidth;
    tempislinkedtop.style.overflow = 'hidden';
    tempislinkedtop.style.borderWidth = borderWidth;
    tempislinkedtop.style.borderStyle = currentborderstyle;
    tempislinkedtop.style.visibility = 'visible';

    // put format and bottom layer
    tempislinkedbottom.style.top = bottomhory+'px';
    tempislinkedbottom.style.left = markLeft+'px';
    tempislinkedbottom.style.height = smallWidthHeight;
		tempislinkedbottom.style.width = markWidth;
    tempislinkedbottom.style.overflow = 'hidden';
    tempislinkedbottom.style.borderWidth = borderWidth;
    tempislinkedbottom.style.borderStyle = currentborderstyle;
    tempislinkedbottom.style.visibility = 'visible';

    // put format and left layer
    tempislinkedleft.style.top = markTop+'px';
    tempislinkedleft.style.left = markLeft+'px';
    tempislinkedleft.style.height = markHeight+borderWidth+1;
		tempislinkedleft.style.width = smallWidthHeight;
    tempislinkedleft.style.overflow = 'hidden';
    tempislinkedleft.style.borderWidth = borderWidth;
    tempislinkedleft.style.borderStyle = currentborderstyle;
    tempislinkedleft.style.visibility = 'visible';

    // put format and right layer
    tempislinkedright.style.top = markTop+'px';
    tempislinkedright.style.left = (markLeft+markWidth-smallWidthHeight+1)+'px';
    tempislinkedright.style.height = markHeight+borderWidth+1;
		tempislinkedright.style.width = smallWidthHeight;
    tempislinkedright.style.overflow = 'hidden';
    tempislinkedright.style.borderWidth = borderWidth;
    tempislinkedright.style.borderStyle = currentborderstyle;
    tempislinkedright.style.visibility = 'visible';
  }

}

// Show archive link for only given amount of days. days > 0 = given days, days = 0 not show at all; days <= -1 always show
function handlearchivelink(days,datestring,archivefile,linkcode)
{
	if (isphp == true && archivefile.indexOf('.htm') > -1)
	{
		archivefile = archivefile.substring(0,archivefile.indexOf('.htm')) + '.php';
	}

	htmlcode = '<a href=\'javascript:avaaIkkuna("'+archivefile+'", 350, 250, 1, 0, "Arkisto");\'>'+linkcode+'</a>';
	if (days < 0) // always show
	{
		htmlcode = '<a href=\'javascript:avaaIkkuna("'+archivefile+'", 350, 250, 1, 0, "Arkisto");\'>'+linkcode+'</a>';
	}
	else if (days == 0) // do not show ever
	{
		htmlcode = "";
	}
	else // show if in date range
	{
		var publishdate;
		if (datestring.indexOf('-') > -1) // swedish
		{
			dateparts = datestring.split('-');
			publishdate = new Date(dateparts[0], dateparts[1]-1, dateparts[2]);
		}
		else if (datestring.indexOf('.') > -1) // finnish
		{
			dateparts = datestring.split('.');
			publishdate = new Date(dateparts[2], dateparts[1]-1, dateparts[0]);
		}
		lastday = daysFromNow(-days);
		difference = publishdate.getTime() - lastday.getTime();
		daydifference = difference/(1000*60*60*24);
		daydifference = Math.ceil(daydifference);
		if ((daydifference > days) || (daydifference <= 0) )
			htmlcode = "";
	}
	document.write(htmlcode);
}

function daysFromNow(num) {// num=integer 
	var d=new Date(); 
	d.setDate(d.getDate()+num) 
	return d; 
} 

