//some functions for showing and hiding marks while mouseover a thumb
var doc = ""
var sty = ""
if (document.layers) doc = "document.", sty = ".";
if (document.all) doc = "document.all.", sty = ".style.";
var mouseOverEvent; 
var showingInfo = false;


function saveMouseOverEvent(e) {
  if(!e) mouseOverEvent = window.event;
  else mouseOverEvent = e;
}
if(window.addEventListener) window.addEventListener("mouseover", saveMouseOverEvent, false);



function toggleInfo() {
	if (!showingInfo) {
		unhideElement("folderinfo");
		showingInfo = true;
	}else{
		hideElementPM("folderinfo");
		showingInfo = false;
	}
}


function toggleMap() {
		
	if (!showingMap) {
		var rd = getXYcoord("worldMap");
		if(rd.x==0 || rd.y==0){
			rd = getXYcoord("imgToggleMap");
			var h = Number(document.images.imgToggleMap.height);
   		var w = Number(document.images.imgToggleMap.width);
			setElement(rd.x + w, rd.y + h, "divOfWorldMap");
		}
		
		unhideElement("divOfWorldMap");
		showingMap = true;
		toggleImage("imgToggleMap", imgToogleMapMinus);
	}else {
		hideElementPM("divOfWorldMap");
		showingMap = false;
		toggleImage("imgToggleMap", imgToogleMapPlus);
	}
}


function showMark(x, y, elem) {
	
	var rd;
	
	if(!showingMap){
		rd = getWhereToShowMap();
		setElement(rd.x, rd.y, "divOfWorldMap");
		unhideElement("divOfWorldMap");
	}else{
		rd = getXYcoord("worldMap");
	}	
	
	showMarkWrapped(x, y, elem, rd);
	
}

function showMarkWrapped(x, y, elem, offsetPos) {
	
	var hp = 0;
	var wp = 0;
	
	if(elem == "divOfPoint"){
		hp = Number(document.images.imgOfPoint.height)/Number(2); //center height of point image
	   wp = Number(document.images.imgOfPoint.width)/Number(2); //center width of point image
	}
	
	var imgx = offsetPos.x + Number(x) - Number(wp);
	var imgy = offsetPos.y + Number(y) - Number(hp);

	setElement(imgx, imgy, elem)
	
	unhideElement(elem)
}

function hideMark(elem) {
   hideElementPM(elem);
   if(!showingMap){
   	hideElementPM("divOfWorldMap");
   }	
}


function unhideElement(elem) {
    if (ns4 == 1) {
		eval(doc + elem + sty + "visibility='show'");
	} else if ((ns6 == 1) || (ns7 == 1) || (mz7 == 1)) {
		var elm = document.getElementById(elem);
		elm.style.visibility="visible";
	} else {
		eval(doc + elem + sty + "visibility='visible'");
	}
}	

	
function hideElementPM(elem) {
   if (ns4 == 1) {
		eval(doc + elem + sty + "visibility='hide'");
	} else if ((ns6 == 1) || (ns7 == 1) || (mz7 == 1)) {
		var elm = document.getElementById(elem)
		elm.style.visibility="hidden"
	} else {
		eval(doc + elem + sty + "visibility='hidden'");
	}
}	



function setElement(x, y, elem) {

    if (ns4 == 1) {
		eval(doc + elem + sty + 'moveToAbsolute(Number(x), Number(y))');
	} else if ((ns6 == 1) || (ns7 == 1) || (mz7 == 1)) {
		var elm = document.getElementById(elem)
		elm.style.left=Number(x)
		elm.style.top=Number(y)
	} else {
		eval(doc + elem + sty + 'left=Number(x)');
		eval(doc + elem + sty + 'top=Number(y)');
	}	
}

function getXYcoord ( nvn ) {
   var elm = document.images[nvn];
   if ( document.layers ) return elm;     // NS4 images contain x and y values
   var rd = { x:0 ,y:0 };
   if(elm!=null){
	   do { rd.x += parseInt( elm.offsetLeft );
	        rd.y += parseInt( elm.offsetTop );
	        elm = elm.offsetParent;
	   } while ( elm );
	}   
   return rd
}

function getCursorXY(){
	var rd = { x:0, y:0 };
	var e;
	
	if (mouseOverEvent) e = mouseOverEvent;
	else e = window.event;
	
	if (e.pageX || e.pageY){
		rd = { x:e.pageX, y:e.pageY };
	}else if (e.clientX || e.clientY){
		rd = { x:e.clientX + document.body.scrollLeft, y:e.clientY + document.body.scrollTop };
	}
	return rd;
} 

function getWindowDim() {
  var rd = { x:0, y:0 };
  if( typeof( window.innerWidth ) == 'number' ) {
    //Non-IE
    rd.x = window.innerWidth;
    rd.y = window.innerHeight;
  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    //IE 6+ in 'standards compliant mode'
    rd.x = document.documentElement.clientWidth;
    rd.y = document.documentElement.clientHeight;
  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    //IE 4 compatible
    rd.x = document.body.clientWidth;
    rd.y = document.body.clientHeight;
  }
  return rd;
}

function getScrollXY() {
  var rd = { x:0, y:0 };
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    rd.y = window.pageYOffset;
    rd.x = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    rd.y = document.body.scrollTop;
    rd.x = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    rd.y = document.documentElement.scrollTop;
    rd.x = document.documentElement.scrollLeft;
  }
  return rd;
}

function getNoOverlap(winSize, cursorPos, scrollOffset, mapSize, margin){
   cursorPos -= scrollOffset; //transform to relative position
   var result = cursorPos + margin; //default position is cursor position + margin
   var overlapMax = cursorPos + mapSize + margin - winSize;
   if(overlapMax > 0){//overlaps max
   	var overlapMin = cursorPos - mapSize - margin;
   	if(overlapMin < 0){//overlaps min too
   		if(Math.abs(overlapMin) < overlapMax){//overlaps less min than max
  				result = 0;
  			}else{
  				if(winSize - mapSize > margin) result = winSize - mapSize - margin;
   			else result = 0;
  			}	
   	}else{//doesn't overlap min, so take its position
   		result = overlapMin;
   	}
   }
   result += scrollOffset; //transform back to absolute position
   return result;
} 

function getWhereToShowMap(){
	var win = getWindowDim(); //visible screen area
	var cur = getCursorXY(); //absolute cursor position
	var srl = getScrollXY(); //offset to absolute position
	var mapW = Number(document.images.worldMap.width);
   var mapH = Number(document.images.worldMap.height);
   var margin = 12; //margin between map and cursor
   var resultX = getNoOverlap(win.x, cur.x, srl.x, mapW, margin);
	var resultY = getNoOverlap(win.y, cur.y, srl.y, mapH, margin);
   
	return { x:resultX, y:resultY };
}

function toggleImage(imgId, newImg) {
	var img = document.getElementById(imgId);
	img.src = newImg.src;
	
}

//used to align tooltip in the most visible area of the window
function getTTWidth(tt){
	var result=1;
	var toSearch="width=\""
	var pos = tt.indexOf(toSearch);
	
	if(pos!=-1){
		pos += toSearch.length;
		var posEnd = tt.indexOf("\" ", pos);
		if(posEnd!=-1){
			tt=tt.substring(pos, posEnd);
			if(!isNaN(tt)) result = Number(tt);
		}
	}
	return result;
}


//sets size of folder info box only if begin- and end-images exist
//mode=0 no limit 
//mode=1 always page height
//mode=2 max page height
function applyFolderInfoSizeMode(mode, minHeight){
	var elem			= "folderinfo";
	var fiBegin		= "folderinfoBegin";
	var fiEnd		= "folderinfoEnd";
	var thumbEnd	= "thumbEnd";
	var fiBeginXY	= getXYcoord(fiBegin);
	var fiEndXY		= getXYcoord(fiEnd);
	var thumbEndXY	= getXYcoord(thumbEnd);
	
	
	if(fiEndXY.y!=0 && fiBeginXY.y!=0 && thumbEndXY.y!=0){
		var folderInfoHeight = fiEndXY.y - fiBeginXY.y;	
		var pageHeight = thumbEndXY.y - fiBeginXY.y;	
		var setNewHeight = false;
		var result=0;
		
		if(mode==0){
			result = folderInfoHeight;	
		}else if(mode==1){
			result = pageHeight;
			setNewHeight=true;
		}else if(mode==2){
			if(folderInfoHeight > pageHeight){
				result = pageHeight;
				setNewHeight=true;
			}else result = folderInfoHeight;
		}	
		
		if(result < minHeight){
			result=minHeight;
			setNewHeight=true;
		}	
		
		if(setNewHeight){
			if ((ns6 == 1) || (ns7 == 1) || (mz7 == 1)) {
				var elm = document.getElementById(elem);
				elm.style.height=result-22;//2 x 10px (padding) + 2 x 1px (border) = 22px
			} else {
				eval(doc + elem + sty + "height=" + result);
			}	
		}	
	}
}

function setFolderInfoSize(w, h){
		var elem = "folderinfo";
		if ((ns6 == 1) || (ns7 == 1) || (mz7 == 1)) {
			var elm = document.getElementById(elem);
			elm.style.width=w-22;//2 x 10px (padding) + 2 x 1px (border) = 22px
			elm.style.height=h-22;//2 x 10px (padding) + 2 x 1px (border) = 22px
		} else {
			eval(doc + elem + sty + "width=" + w);
			eval(doc + elem + sty + "height=" + h);
		}	
}

function adaptThumbLineHeight(){
	var thumbBegin=getXYcoord("thumbBegin");
	var thumbEnd=getXYcoord("thumbEnd");
	var thumbLine = parent.document.getElementsByName("thumbLine");//there may be top and bottom thumb line
	
	if(thumbBegin!=null && thumbEnd!=null && thumbLine!=null){
		var thumbHeight = thumbEnd.y -thumbBegin.y;
		//alert("thumbHeight: " + thumbHeight);
		for(x=0; x<thumbLine.length; x++){
			thumbLine[x].height=thumbHeight+17;//17=width of scrollbar (if omitted, right scrollbars would be displayed when bottom scrollbar appears)
		}
	}
}

function preloadBorderImages(resPath){
		var top_left = new Image();
		var top_middle = new Image();
		var top_right = new Image();
		var border_left = new Image();
		var border_right = new Image();
		var bottom_left = new Image();
		var bottom_middle = new Image();
		var bottom_right = new Image();
		var spacer = new Image();
		
		top_left.src = resPath + "/borders/thumbs/border_top_left.gif";
		top_middle.src = resPath + "/borders/thumbs/border_top_middle.gif";
		top_right.src = resPath + "/borders/thumbs/border_top_right.gif";
		border_left.src = resPath + "/borders/thumbs/border_left.gif";
		border_right.src = resPath + "/borders/thumbs/border_right.gif";
		bottom_left.src = resPath + "/borders/thumbs/border_bottom_left.gif";
		bottom_middle.src = resPath + "/borders/thumbs/border_bottom_middle.gif";
		bottom_right.src = resPath + "/borders/thumbs/border_bottom_right.gif";
		spacer.src = resPath + "/spacer.gif";
}
