/* Javascript source file for "e-paper"
Copyright 2003 Anygraaf Oy
anygraaf@anygraaf.fi */

// simple browser check
var whichbrowser = navigator.userAgent.toLowerCase();
var isnetscape = false;
var isie = false;
var isie55up = false;

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;
}

// oman sivuvalikon tilan sailytys
function GetCookie (name) { 
	var arg = name + "="; 
	var alen = arg.length; 
	var clen = document.cookie.length; 
	var i = 0; 
	while (i < clen) { 
	var j = i + alen; 
	if (document.cookie.substring(i, j) == arg) 
	return getCookieVal (j); 
	i = document.cookie.indexOf(" ", i) + 1; 
	if (i == 0) break; } 
	return 0; } 
function SetCookie (name, value) { 
	var argv = SetCookie.arguments; 
	var argc = SetCookie.arguments.length; 
	var expires = (argc > 2) ? argv[2] : null; 
	var path = (argc > 3) ? argv[3] : null; 
	var domain = (argc > 4) ? argv[4] : null; 
	var secure = (argc > 5) ? argv[5] : false; 
	document.cookie = name + "=" + escape (value) + 
	((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + 
	((path == null) ? "" : ("; path=" + path)) + 
	((domain == null) ? "" : ("; domain=" + domain)) + 
	((secure == true) ? "; secure" : ""); }
function RememberScrollableArea(){ 
	var expdate = new Date (); 
	expdate.setTime(expdate.getTime() + (24 * 60 * 60 * 5)); 
	SetCookie('ScrollerPosE',document.getElementById('pagethumbslayer').scrollTop,expdate);}
function getCookieVal (offset) { 
	var endstr = document.cookie.indexOf (";", offset); 
	if (endstr == -1) 
	endstr = document.cookie.length; 
	return unescape(document.cookie.substring(offset, endstr)); } 
function SetScrollableArea(){ 
	document.getElementById('pagethumbslayer').scrollTop=GetCookie('ScrollerPosE'); } 
function changeHiresBg(changeImgTo){ 
	document.images['pageimg'].src=changeImgTo; } 	
	
// init page
function pageinit(noofpages,currentpage,createpagenum,pagenavpages,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") { // we have a top menu
    setInterval('makeStatic()',100);
  }
  // resize thumb layer to the same height as the main pic
 // if (document.getElementById(thumblayer) && thumblayer.length > 0) { // we have a thumbslayer
   // document.getElementById(thumblayer).style.height = parseInt(document.pageimg.height);
  //}
}

// 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) {
  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[0].length < 5) { //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' 
				sectionahrefelement.setAttribute('href','page'+arrsectiondetails[0]+'.htm');
				sectionnavid.appendChild(sectionahrefelement);
				appendtextnode(sectionahrefelement,sectiontext);
				//sectionnavid.appendChild(document.createElement('BR')); 
			}

		}
  }
  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) ');
  }
}

function missingpages(tmppages) {

}

// create page thumbnail navigation
function createpagethumbs(thumbwidth,thumbheight,allpages,thumbslayer,orientation) {
  var pagecounter;
  var thumbnaildiv = document.getElementById(thumbslayer);
  var htmltext;
  var sivuNimi = self.location.href;

  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)+45;
      htmltext = '<table id=pagethumbtableid cellpadding=2 cellspacing=0><tr>';
	}
	else {
      thumbnaildiv.style.width = parseInt(thumbwidth)+192;
      htmltext = '';
	  // <table id=pagethumbtableid cellpadding=4 cellspacing=0 width='+thumbwidth+'>
	  // <td colspan="3"><img height="14" src="/epaperscript/pix.gif"></td></tr><tr><td><img width="12" src="/epaperscript/pix.gif"></td>
	  // <table id=pagethumbtableid cellpadding=2 border=0 cellspacing=0><tr><td>
	}
	for (pagecounter=1;pagecounter<=allpages;pagecounter++) {
  	  if (orientation == 'horizontal') {
        htmltext = htmltext + ('<td><a class="pagethumblink" href="page'+pagecounter+'.htm">Pagina '+pagecounter+'<br><img class="pagethumbpic" width='+thumbwidth+' height='+thumbheight+' src="page'+pagecounter+'_64.gif" vspace=3 alt="Pagina '+pagecounter+'" border=0></a></td>');
	  }
	  else {
		
		if (sivuNimi.indexOf('page'+pagecounter+'.htm') == -1) {
			htmltext = htmltext + ('<a class="pagethumblink" href="page'+pagecounter+'.htm"><img name="thm'+pagecounter+'" class="pagethumbpic" width='+thumbwidth+' height='+thumbheight+' src="pagethumb'+pagecounter+'.jpg" vspace=3 alt="Pagina '+pagecounter+'" border=0 onMouseOver=thm'+pagecounter+'.src="../epaperscript/page_over.gif" onMouseOut=thm'+pagecounter+'.src="pagethumb'+pagecounter+'.jpg"></a> ');
			}
		else	
			{ htmltext = htmltext + ('<img name="thm'+pagecounter+'" class="pagethumbpic" width='+thumbwidth+' height='+thumbheight+' src="../epaperscript/page_on.gif" vspace=3 alt="Pagina '+pagecounter+'" border=0 onMouseOver=thm'+pagecounter+'.src="../epaperscript/oage_on.gif" onMouseOut=thm'+pagecounter+'.src="../epaperscript/page_on.gif"> ');
		}
		//  onMouseOver=pageimg.src="page'+pagecounter+'_256.gif"
		//htmltext = htmltext + ('<tr><td><a class="pagethumblink" href="page'+pagecounter+'.htm">Pagina '+pagecounter+'<br><img class="pagethumbpic" width='+thumbwidth+' height='+thumbheight+' src="page'+pagecounter+'_64.gif" vspace=3 alt="Pagina '+pagecounter+'" border=0></a></td></tr>');
	 	
	  }
    }
	if (orientation == 'horizontal') {
      htmltext = htmltext + '</tr>';
	}
    htmltext = htmltext + '';
	//< /td><td><img width="2" src="/epaperscript/pix.gif"></td></tr></table>
	// htmltext = htmltext + '</table>';
	// document.write(htmltext);
	document.getElementById("pagethumbslayer").innerHTML = 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;

  if (orientation == 'horizontal') {
    thumbspace = parseInt(thumbwidth)+6; // thumbwidth = width of thumbnail + 6 (vspace*2)
    var offset = thumbspace*currentpage; 
  }
  else {
    var thumbspace = parseInt(thumbheight)+28;
    var 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;

  if (pagenavelement) { // we have the page navigation in the html page

      // create left and right arrow if needed
      if (thispage > 1) { // left arrow
        removeallchildnodes(leftarrowelement);
        var newleftimage = document.createElement('img');
        newleftimage.src = '../epaperscript/bl_leftarrow.gif';
        newleftimage.id = 'leftarrowimage';
        newleftimage.border = '0';
        newleftimage.vspace = '0';
        newleftimage.align = 'absmiddle';
		newleftlink = document.createElement('a');
        newleftlink.href = 'page'+parseInt(thispage-1)+'.htm';
        newleftlink.appendChild(newleftimage);
		leftarrowelement.appendChild(newleftlink);
      }
	  if (thispage < allpages) { // right arrow
        removeallchildnodes(rightarrowelement);
        var newrightimage = document.createElement('img');
        newrightimage.src = '../epaperscript/bl_rightarrow.gif';
        newrightimage.id = 'rightarrowimage';
        newrightimage.border = '0';
        newrightimage.vspace = '0';
        newrightimage.align = 'absmiddle';
        newrightlink = document.createElement('a');
        newrightlink.href = 'page'+parseInt(thispage+1)+'.htm';
        newrightlink.appendChild(newrightimage);
		rightarrowelement.appendChild(newrightlink);
	  }

      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,' ');
			inserthrefelement(arrahrefelement,nextahrefelement,'page'+parseInt(thispage+1)+'.htm','>',pagenavelement);
			appendtextnode(pagenavelement,' ');
			nextahrefelement++;
			// create a maxpagestoshow skip link '>>'
			inserthrefelement(arrahrefelement,nextahrefelement,'page'+pagecounter+'.htm','>>',pagenavelement);
			appendtextnode(pagenavelement,' ');
			nextahrefelement++;
			// create a link to the last page
			inserthrefelement(arrahrefelement,nextahrefelement,'page'+parseInt(allpages)+'.htm','Loppu',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 = ' ';
					currentnumber = 1;
				}
				else if (pagecounter != thispage) { // this page - no link, just text
					pagetext = ' ';
					currentnumber = pagecounter;
				}
				else { // create dummy
					pagetext = ' ';
					currentnumber = pagecounter;
				}
				if (makepreviousarrow == true && pagetext != 'Alku') {
					// we create the first href element with the previous page link
					arrahrefelement[0] = document.createElement('A');
					arrahrefelement[0].className = 'pagenavlink' 
					arrahrefelement[0].setAttribute('href','page'+(thispage-1)+'.htm');
					pagenavelement.appendChild(arrahrefelement[0]);
					//appendtextnode(arrahrefelement[0],'<');
					//appendtextnode(pagenavelement,' ');
					nextahrefelement++;
					// we create the page number link
					//inserthrefelement(arrahrefelement,nextahrefelement,'page'+currentnumber+'.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' 
					arrahrefelement[0].setAttribute('href','page'+currentnumber+'.htm');
					pagenavelement.appendChild(arrahrefelement[0]);
					appendtextnode(arrahrefelement[0],pagetext);
					appendtextnode(pagenavelement,' ');
					nextahrefelement++;
				}
				if (pagetext == 'Alku') { // create a maxpagestoshow skip link '<<'
					inserthrefelement(arrahrefelement,nextahrefelement,'page'+(pagestartcount-maxpagestoshow)+'.htm','<<',pagenavelement);
					//appendtextnode(pagenavelement,' ');
					nextahrefelement++;
					// we create element with the previous page link
					//inserthrefelement(arrahrefelement,nextahrefelement,'page'+(thispage-1)+'.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
				//inserthrefelement(arrahrefelement,nextahrefelement,'page'+allpages+'.htm','Loppu',pagenavelement);
				//appendtextnode(fontelement,pagecounter);
				nextahrefelement++;
		  }
		  else if (pagecounter > 1 && pagecounter != thispage) { // all other pages
				//inserthrefelement(arrahrefelement,nextahrefelement,'page'+pagecounter+'.htm',pagecounter,pagenavelement);
				//appendtextnode(pagenavelement,' ');
				nextahrefelement++;
		  }
		}


	  }
	  // create a next page ">" link if needed  
	  /*
	  if (thispage != allpages && (pagecounter <= maxpagestoshow*currentstartnumber || allpages <= maxpagestoshow)) {
		  appendtextnode(pagenavelement,' ');
		  inserthrefelement(arrahrefelement,nextahrefelement,'page'+parseInt(thispage+1)+'.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};
  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 sectionheadTDleftelement = document.getElementById('sectionheadtdleft');
  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 maxtextwidth = '150px';

  textElementstyle.left = 0;
  textElementstyle.top = 0;
  textElementstyle.width = maxtextwidth;
  textElementstyle.height = 'auto';
  textElementstyle.overflow = 'hidden';
 // sectionheadTDleftelement.style.width= maxtextwidth;

  // show the different text parts
  if (sectionheadTDelement != null)
  {
    if (sectionheadtxt.length > 0) {
	  showtextpart(sectionheadTRelement, sectionheadTDelement, sectionheadtxt);
	}
	else {
      sectionheadTRelement.style.display='none'; // hide table row
    }
  }

  if (mainheadTDelement != null)
  {
    if (mainheadtxt.length > 0) {
      showtextpart(mainheadTRelement, mainheadTDelement, mainheadtxt);
    }
    else {
      mainheadTRelement.style.display='none';
    }
  }

  if (phototextTDelement != null)
  {
    if (photocredtxt.length > 0) {
      showtextpart(phototextTRelement, phototextTDelement, photocredtxt);
    }
    else {
      phototextTRelement.style.display='none';
    }
  }

  if (newstextTDelement != null)
  {
    if (newstxt.length > 0) {
      showtextpart(newstextTRelement, newstextTDelement, newstxt);
    }
    else {
      newstextTRelement.style.display='none';
    }
  }

  // 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 = parseInt(textElement.offsetWidth);
  var textareaheight = parseInt(textElement.offsetHeight);
  var imagemapwidth = parseInt(document.pageimg.width);
  var imagemapheight = parseInt(document.pageimg.height);
  var screenwidth;
  var screenheight;

  if (isnetscape == true) {
    mouseoffsetX = catchedevent.pageX; 
    mouseoffsetY = catchedevent.pageY;
    screenwidth = window.innerWidth;
    screenheight = window.innerWidth;
  }
  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+defaultoffsetvalueY+textareaheight+imagemapoffsetY > imagemapoffsetY+imagemapheight) {
  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 = 0;
  var currentborderstyle = 'none';

  // 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 = 'double';
    }
  }
  else {
    smallWidthHeight = 1;
	bottomhory = parseInt(markHeight+markTop-borderWidth+2);
  }

  // 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.top = parseInt(bottomhory-2)+'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
  var VertBorderTop;
  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+2)+'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() {
  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';
}

// 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('Anna hakusana');
    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 (isPosInteger(pagenum) == true) {
	if (pagenum <= maxpages && pagenum > 0) {
	  isok = true;
	}
  }

  if (isok == true) {
    self.location.href='page'+pagenum+'.htm';
    return false;
  }
  else {
    alert('Sivunumeron täytyy olla välillä 1-'+maxpages+'.');
    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) {
  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
} 

// 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';
  }
} 

// Put menu at top
function makeStatic() {
  var topposition;

  if (typeof window.pageXOffset != 'undefined'){
    topposition = window.pageYOffset;
  }
  else {
    topposition = window.document.body.scrollTop;
  }
  document.getElementById('topmenulayer').style.top = topposition + 'px';
}

//open image page from article page in a layer
function openimagepage(picname) {
  var picnum;
  var piclayer;
  var newimage;
  var picelement;
  var picturediv;
  var topposition;
  var leftposition;
  var rightposition;
  var bottomposition;
  var screenwidth;
  var screenheight;
  var currentleft;
  var currenttop;
  var currentright;
  var currentbottom;

  piclayer = document.getElementById("largepiclayer");
  picturediv = document.getElementById("largepic");

  picturediv.innerHTML = "<img class=photo border=0 src="+picname+">"; 
  

  if (typeof window.pageXOffset != 'undefined'){
	topposition = window.pageYOffset;
	leftposition = window.pageXOffset;
  }
  else {
	topposition = window.document.body.scrollTop;
	leftposition = window.document.body.scrollLeft;
  }

  if (isnetscape == true) {
    screenwidth = window.innerWidth;
    screenheight = window.innerHeight;
  }
  else {
    screenwidth = document.body.clientWidth;
	screenheight = document.body.clientHeight;
  }

  currentleft = parseInt(piclayer.style.left);
  currenttop = parseInt(piclayer.style.top);
  currentright = currentleft + parseInt(piclayer.style.width);
  currentbottom = currenttop + parseInt(picturediv.offsetHeight);

  if (!currentleft || currentleft > (screenwidth-leftposition) || currentright < leftposition  || currenttop > (screenheight-topposition) || currentbottom < topposition )
  {
	  topposition = topposition + 10;
	  leftposition = leftposition + 10;
	 
	  piclayer.style.left = leftposition + 'px';
	  piclayer.style.top= topposition + 'px';
   }
   piclayer.style.visibility = "visible";
}

// used by dragLayer
function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

// make a layer dragable
function dragLayer(objName,x,hL,hT,hW,hH,toFront,dropBack,cU,cD,cL,cR,targL,targT,tol,dropJS,et,dragJS) { //v3.6
  //Copyright 1998 Macromedia, Inc. All rights reserved.
  var i,j,aLayer,retVal,curDrag=null,NS=document.layers, MZ=(!document.all && document.getElementById),curLeft, curTop;
  if (!document.all && !document.layers && !document.getElementById) return false;
  retVal = true; if(!NS && !MZ && event) event.returnValue = true;
  if (dragLayer.arguments.length > 1) {
    curDrag = (MZ)?document.getElementById(objName):MM_findObj(objName); if (!curDrag) return false;
    if (!document.allLayers) { document.allLayers = new Array();
      with (document) if (NS) { for (i=0; i<layers.length; i++) allLayers[i]=layers[i];
        for (i=0; i<allLayers.length; i++) if (allLayers[i].document && allLayers[i].document.layers)
          with (allLayers[i].document) for (j=0; j<layers.length; j++) allLayers[allLayers.length]=layers[j];
      } else if(MZ){
            var mzall = getElementsByTagName("div");
            for (i=0;i<mzall.length;i++) if (mzall[i].style&&mzall[i].style.position) allLayers[allLayers.length]=mzall[i];
          } else {
                for (i=0;i<all.length;i++) if (all[i].style&&all[i].style.position) allLayers[allLayers.length]=all[i];
          }}
    curDrag.MM_dragOk=true; curDrag.MM_targL=targL; curDrag.MM_targT=targT;
    curDrag.MM_tol=Math.pow(tol,2); curDrag.MM_hLeft=hL; curDrag.MM_hTop=hT;
    curDrag.MM_hWidth=hW; curDrag.MM_hHeight=hH; curDrag.MM_toFront=toFront;
    curDrag.MM_dropBack=dropBack; curDrag.MM_dropJS=dropJS;
    curDrag.MM_everyTime=et; curDrag.MM_dragJS=dragJS;
    curDrag.MM_oldZ = (NS)?curDrag.zIndex:curDrag.style.zIndex;
    curLeft= (NS)?curDrag.left:(MZ)?curDrag.style.left.replace("px","")/1:curDrag.style.pixelLeft;
        curDrag.MM_startL = curLeft;
    curTop = (NS)?curDrag.top:(MZ)?curDrag.style.top.replace("px","")/1:curDrag.style.pixelTop;
        curDrag.MM_startT = curTop;
    curDrag.MM_bL=(cL<0)?null:curLeft-cL; curDrag.MM_bT=(cU<0)?null:curTop -cU;
    curDrag.MM_bR=(cR<0)?null:curLeft+cR; curDrag.MM_bB=(cD<0)?null:curTop +cD;
    curDrag.MM_LEFTRIGHT=0; curDrag.MM_UPDOWN=0; curDrag.MM_SNAPPED=false; //use in your JS!
    document.onmousedown = dragLayer; document.onmouseup = dragLayer;
    if (NS||MZ) document.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP);
  } else {
    var theEvent = ((NS||MZ)?objName.type:event.type);
    if (theEvent == 'mousedown') {
      var mouseX = (NS||MZ)?objName.pageX : event.clientX + document.body.scrollLeft;
      var mouseY = (NS||MZ)?objName.pageY : event.clientY + document.body.scrollTop;
      var maxDragZ=null; document.MM_maxZ = 0;
      for (i=0; i<document.allLayers.length; i++) { aLayer = document.allLayers[i];
        var aLayerZ = (NS)?aLayer.zIndex:aLayer.style.zIndex/1;
        if (aLayerZ > document.MM_maxZ) document.MM_maxZ = aLayerZ;
        var isVisible = (((NS)?aLayer.visibility:aLayer.style.visibility).indexOf('hid') == -1);
        if (aLayer.MM_dragOk != null && isVisible) with (aLayer) {
          var parentL=0; var parentT=0;
          if (!NS) { parentLayer = (MZ)?aLayer.parentNode:aLayer.parentElement;
            while (parentLayer != null && parentLayer.style.position) {
              parentL += parentLayer.offsetLeft/1; parentT += parentLayer.offsetTop/1;
              parentLayer = (MZ)?parentLayer.parentNode:parentLayer.parentElement;
          } }
          var tmpX=mouseX-(((NS)?pageX:((MZ)?style.left.replace("px","")/1:style.pixelLeft)+parentL)+MM_hLeft);
          var tmpY=mouseY-(((NS)?pageY:((MZ)?style.top.replace("px","")/1:style.pixelTop) +parentT)+MM_hTop);
          var tmpW = MM_hWidth;  if (tmpW <= 0) tmpW += ((NS)?clip.width :offsetWidth);
          var tmpH = MM_hHeight; if (tmpH <= 0) tmpH += ((NS)?clip.height:offsetHeight);
          if ((0 <= tmpX && tmpX < tmpW && 0 <= tmpY && tmpY < tmpH) && (maxDragZ == null
              || maxDragZ <= aLayerZ)) { curDrag = aLayer; maxDragZ = aLayerZ; } } }
      if (curDrag) {
        document.onmousemove = dragLayer; if (NS) document.captureEvents(Event.MOUSEMOVE);
        curLeft = (NS)?curDrag.left:(MZ)?curDrag.style.left.replace("px","")/1:curDrag.style.pixelLeft;
        curTop = (NS)?curDrag.top:(MZ)?curDrag.style.top.replace("px","")/1:curDrag.style.pixelTop;
        MM_oldX = mouseX - curLeft; MM_oldY = mouseY - curTop;
        document.MM_curDrag = curDrag;  curDrag.MM_SNAPPED=false;
        if(curDrag.MM_toFront) {
          eval('curDrag.'+((NS)?'':'style.')+'zIndex=document.MM_maxZ'+((MZ)?'':'+1') );
          if (!curDrag.MM_dropBack) document.MM_maxZ++; }
        retVal = false; if(!NS&&!MZ) event.returnValue = false;
    } } else if (theEvent == 'mousemove') {
      if (document.MM_curDrag) with (document.MM_curDrag) {
        var mouseX = (NS||MZ)?objName.pageX : event.clientX + document.body.scrollLeft;
        var mouseY = (NS||MZ)?objName.pageY : event.clientY + document.body.scrollTop;
        newLeft = mouseX-MM_oldX; newTop  = mouseY-MM_oldY;
        if (MM_bL!=null) newLeft = Math.max(newLeft,MM_bL);
        if (MM_bR!=null) newLeft = Math.min(newLeft,MM_bR);
        if (MM_bT!=null) newTop  = Math.max(newTop ,MM_bT);
        if (MM_bB!=null) newTop  = Math.min(newTop ,MM_bB);
        MM_LEFTRIGHT = newLeft-MM_startL; MM_UPDOWN = newTop-MM_startT;
        if (NS) {left = newLeft; top = newTop;}
                else if (MZ){style.left = newLeft; style.top = newTop;}
        else {style.pixelLeft = newLeft; style.pixelTop = newTop;}
        if (MM_dragJS) eval(MM_dragJS);
        retVal = false; if(!NS&&!MZ) event.returnValue = false;
    } } else if (theEvent == 'mouseup') {
      document.onmousemove = null;
      if (NS||MZ) document.releaseEvents(Event.MOUSEMOVE);
      if (NS||MZ) document.captureEvents(Event.MOUSEDOWN); //for mac NS
      if (document.MM_curDrag) with (document.MM_curDrag) {
        if (typeof MM_targL =='number' && typeof MM_targT == 'number' &&
            (Math.pow(MM_targL-((NS)?left:(MZ)?style.left.replace("px","")/1:style.pixelLeft),2)+
             Math.pow(MM_targT-((NS)?top:(MZ)?style.top.replace("px","")/1:style.pixelTop),2))<=MM_tol) {
          if (NS) {left = MM_targL; top = MM_targT;}
                  else if(MZ){style.left = MM_targL; style.top = MM_targT;}
          else {style.pixelLeft = MM_targL; style.pixelTop = MM_targT;}
          MM_SNAPPED = true; MM_LEFTRIGHT = MM_startL-MM_targL; MM_UPDOWN = MM_startT-MM_targT; }
        if (MM_everyTime || MM_SNAPPED) eval(MM_dropJS);
        if(MM_dropBack) {if (NS) zIndex = MM_oldZ; else style.zIndex = MM_oldZ;}
        retVal = false; if(!NS&&!MZ) event.returnValue = false; }
      document.MM_curDrag = null;
    }
    if (NS||MZ) document.routeEvent(objName);
  } return retVal;
}

// open palaute window
function avaaIkkuna(URL, width, height, scroll, resize, TITLE) {
    if (URL != "") { 
		// oletusarvoja
		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);
    }
    //return false;
}

// create to see if there is any info box (tietolaatikko) text on the page, if not then make the table invisible
function checktietolaatikko(laatikko,emptytietolaatikkotd) {

//  var boxtable  = document.getElementById('tietolaatikkotableid');
//  var boxtd = document.getElementById('tietolaatikkotdid');
 // var boxtextid = document.getElementById(laatikko);
  //var childcount = boxtextid.childNodes.length;
  //var childcounter;

 /* for (childcounter=0; childcounter < childcount; childcounter++) { // loop the children

if (boxtd.childNodes(childcounter).childType == 3) { // text node

  alert(boxtd.childNodes(childcounter).text);

}
	}


 // if (document.getElementById(laatikkolayer) != null) { 

	//  alert('inside');
      //  boxtd.className = "emptytietolaatikkotd";
//  } */

}


