/* click: Position relativ zum Click-Event */
/* doc: Position relativ zum linken/oberen Rand des Dokuments */
/* docinverse: Position relativ zum rechten/unteren Rand des Dokuments */
/* docmiddle: Position relativ zum Dokumenten-Mittelpunkt */
/* screen: Position relativ zum linken/oberen Rand des Bildschirms [DEFAULT] */
/* screeninverse: Position relativ zum rechten/unteren Rand des Bildschirms */
/* screenmiddle: Position relativ zum Bildschirm-Mittelpunkt */
/* refimg: Position relativ zum linken/oberen Rand eines Bildes namens refimg */

var WIN;
function openWindow(winURL,winX,posModeX,winY,posModeY,winWidth,winHeight,refimg,moveFlag,winOptions,clickEvent) {
	var posX = getPos(winX,winWidth,"X",posModeX,refimg,clickEvent);
	var posY = getPos(winY,winHeight,"Y",posModeY,refimg,clickEvent);
	if(winOptions=="") {
		winOptions = "scrollbars=1,resizable=1";
	}
	WIN = window.open(winURL,'POP','width='+winWidth+',innerWidth='+winWidth+',height='+winHeight+',innerHeight='+winHeight+',left='+posX+',top='+posY+','+winOptions);
	if(moveFlag==true) {
		WIN.moveTo(posX,posY);
	}
	positionCorrection(WIN,"X",posModeX,winWidth);
	positionCorrection(WIN,"Y",posModeY,winHeight);
	WIN.focus();
}

function getPos(relPos,popDimension,dir,posMode,refimg,clickEvent) {
	var eventAbsPos = (window.event)? window.event["screen"+dir] : clickEvent["screen"+dir];
	var eventDocPos = (window.event)? window.event["client"+dir] : ((clickEvent["client"+dir])? clickEvent["client"+dir]:clickEvent["page"+dir]);
	var dimension = (dir=="X")? "Width":"Height";
	var docDimension = (window["inner"+dimension])? window["inner"+dimension] : ((document.documentElement["client"+dimension])? document.documentElement["client"+dimension] : document.body["client"+dimension]);
	var screenDimension = screen[dimension.toLowerCase()];
	switch (posMode) {
		case "click":
			relPos += eventAbsPos;
		break;
		case "doc":
			relPos += eventAbsPos - eventDocPos;
		break;
		case "docinverse":
			relPos += eventAbsPos - eventDocPos + docDimension - popDimension;
		break;
		case "docmiddle":
			relPos += eventAbsPos - eventDocPos + docDimension/2 - popDimension/2;
		break;
		case "screen":
			relPos += 0;
		break;
		case "screeninverse":
			relPos += screenDimension - popDimension;
		break;
		case "screenmiddle":
			relPos += screenDimension/2 - popDimension/2;
		break;
		case "refimg":
			relPos += eventAbsPos - eventDocPos + ((dir=="X")? leftPos(refimg) : topPos(refimg));
		break;
		default:
			relPos += 0;
		break;
	}
	//alert("dir:"+dir+"/screenDimension:"+screenDimension);
	return relPos;
}

function positionCorrection(WIN,dir,posMode,popDimension) {
	if(posMode=="docmiddle" || posMode=="screenmiddle") {
		if(WIN.outerHeight) {
			var relX =(dir=="X")? (WIN.outerWidth - popDimension)/2 : 0;
			var relY =(dir=="Y")? (WIN.outerHeight - popDimension)/2 : 0;
			WIN.moveBy(-relX,-relY);
		}
	}
	if(posMode=="docinverse" || posMode=="screeninverse") {
		if(WIN.outerHeight) {
			var relX =(dir=="X")? (WIN.outerWidth - popDimension) : 0;
			var relY =(dir=="Y")? (WIN.outerHeight - popDimension) : 0;
			WIN.moveBy(-relX,-relY);
		}
	}
}