function closePicturePreview() {
	var previewFrame = document.getElementById("picpreview");
	if (!previewFrame) return;
	previewFrame.style.visibility='hidden';
}

function downloadPicture(href) {
	window.location.href='download.php?filename='+href;
}

function setupPicturePreview(refNode, imgsrc) {
	
		var previewFrame = document.getElementById("picpreview");
		if (!previewFrame) return;
		previewFrame.style.visibility='hidden';
		document.getElementById("picpreviewimg").src = imgsrc;
		document.getElementById("picpreviewdlink").href = "javascript:downloadPicture('"+imgsrc+"')";

		// contentpane
		var cp = document.getElementById("contentpane");
		// showcase-container (div.attachment)
		var scc = refNode;
		do {
			scc = scc.parentNode;
		} while (scc.className != "attachment");
		
		// find out left position of scc
		/*
		var sccLeft = 0;
		var obj = scc;
		do {
			sccLeft += obj.offsetLeft;
		} while ((obj = obj.offsetParent) && obj != cp);
		*/
		
		// find out left position of refNode
		var refLeft = 0;
		obj = refNode;
		do {
			refLeft += obj.offsetLeft;
		} while ((obj = obj.parentNode) && obj != scc);
		var refTop = 0;
		obj = refNode;
		do {
			refTop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		
		
		/* scroll attachment board if space between actived object and nearest
		 * boarder is smaller than object's width
		 */ 
		
		var offset = 0;
	
		if (refNode.parentNode.offsetLeft-scc.scrollLeft<refNode.scrollWidth) {
			offset = -refNode.scrollWidth;
		} else if (scc.clientWidth-refNode.parentNode.offsetLeft+scc.scrollLeft<2*refNode.scrollWidth+50) {
			offset = 1.5*refNode.scrollWidth;
		}
		
		// middle of visible showcase area
		// var sccAbsMiddle = sccLeft+scc.scrollLeft + scc.clientWidth/2;
		
		// calculate offset to middle
		// var offset = refLeft+refNode.scrollWidth/2-sccAbsMiddle; 
		//console.log("refL, refW", refLeft, refNode.scrollWidth);
		//console.log("calc: (scrL,sccL,refC,midd,offs) ",scc.scrollLeft,sccLeft,refLeft+refNode.scrollWidth/2, sccAbsMiddle, offset);
		// trim 
		// offset = offset<0?Math.max(0-scc.scrollLeft,offset):Math.min(scc.scrollWidth-scc.clientWidth,offset);
				
		// scroll
		for (var j=20,i=offset/j; j>0;j--) {
			//console.log(scc.scrollLeft,offset,i,j);
			scc.scrollLeft += i;
		}
		
		// adjust position
		refLeft -= scc.scrollLeft;
		// set y position of frame
		var top = (refTop-refNode.offsetParent.scrollHeight-previewFrame.scrollHeight);
		previewFrame.style.top=top+'px';
		// adjust vertical scroll position of body to show complete preview frame
		previewFrame.scrollIntoView();
		
		// usual x position of frame
		var left = refLeft+0-previewFrame.scrollWidth/2+refNode.scrollWidth/2;
		/*
		// check if frame doesn't exceed content pane's borders
		var sccRight = sccLeft+scc.clientWidth;
		if (left < sccLeft) {
			left = sccLeft;
		} else if (left+previewFrame.offsetWidth > sccRight) {
			left = sccRight-previewFrame.offsetWidth;
		}*/
		// set x position
		previewFrame.style.left=left+'px'; //(left+cp.offsetLeft)+'px';
		previewFrame.style.visibility='visible';
	
}

function absolutePos(node) {
	var i = 0;
	var j= 0;
	while (node && node.offsetParent) {
		i += node.offsetTop;
		j += node.offsetLeft;
		node = node.offsetParent;
	}
	return [i,j];
}
