function mywinman(){
	var winman = this;
	this.stack = new Array();
	this.active = null;
	this.order = new Array();
	this.qbox;
	this.xc = null;

	this.useOverlay = true;

	this.overlay = false;
	this.overlayOpacity = 0.6;
	this.lastYPos = 0;
	
	this.animationSpeed = 600;
	
	this.useXMLConnector = false;

	
	this.initConnector = function(){
		if(window.XMLHttpRequest){ // Standard
			winman.xc = new XMLHttpRequest();
			return true;
			}
		else if(window.ActiveXObject){ // Microsoft
			try{
				winman.xc = new ActiveXObject("Msxml2.XMLHTTP");
				return true;
	            }catch(err){
					try{
						winman.xc = new ActiveXObject("Microsoft.XMLHTTP");
						return true;
					}catch(err){
					return false;
					}
				}
			}else{
			return false;
			}
		}

	this.destructConnector = function(){
		delete(winman.xc);
		return true;
		}

	this.buildQBox = function(){
		return;
		}
	
	this.appendOverlay = function(){
		var w = "100%";
		var h = window.innerHeight ? window.innerHeight : document.documentElement.offsetHeight;
		
		var overlay = document.createElement('div');
		overlay.id = "overlay";
		overlay.style.position = 'absolute';
		overlay.style.background = '#f7f8fb';
		overlay.style.top = '0';
		overlay.style.left = '0';
		overlay.style.width = w;
		overlay.style.height = h + 'px';
		overlay.style.opacity = this.overlayOpacity;
		overlay.style.filter = 'alpha(opacity='+(100 * winman.overlayOpacity)+')';
		overlay.style.zIndex = 99;

		// Store last Y Position
		if(document.documentElement.scrollTop){
			winman.lastYPos = document.documentElement.scrollTop;
			}else{
			winman.lastYPos = window.pageYOffset;
			}
		window.scrollTo(0,0);
		document.body.style.overflow = 'hidden';
		document.body.appendChild(overlay);
		overlay.style.display = 'none';
		
		// Fade in overlay and open the first window after animation complete
		//$(overlay).fadeIn(winman.animationSpeed, function(){winman.openWindow(); return true;});
		$(overlay).fadeIn(winman.animationSpeed, function(){return true;});
		return overlay;
		}
	this.detachOverlay = function(){
		$(winman.overlay).fadeOut(winman.animationSpeed,function(){		
			var olay = document.getElementById('overlay');
			document.body.removeChild(olay);
			document.body.style.overflow = '';
			window.scrollTo(0,winman.lastYPos);
			});
		winman.overlay = false;
		return;
		}

	this.addWindow = function(uri,windowname,scrollbars,moveable,resizeable,closeable,basics,classprefix){
		this.lastUri = uri;
		this.lastName = windowname;
		this.lastScrollbars = scrollbars;
		this.lastMoveable = moveable;
		this.lastResizable = resizeable;
		this.lastCloseable = closeable;
		this.lastBasics = basics;
		this.lastClass = classprefix;
		if(!this.overlay){
			this.overlay = this.appendOverlay();
			this.openWindow();
			}else{
			this.openWindow();
			return true;
			}
		}
		
	this.openWindow = function(){
		var windowW = (window.innerWidth ? window.innerWidth : document.documentElement.clientWidth);
		var windowH = (window.innerHeight ? window.innerHeight : document.documentElement.clientHeight);
		var w = windowW - (windowW * 0.1);
		var h = windowH - (windowH * 0.1);
		var x = (windowW * 0.1) / 2;
		var y = (windowH * 0.1) / 2;
		var z = 100 * (winman.stack.length + 1);
		var winid = winman.stack.length;

		if(winman.useXMLConnector){
			// Use XML Connector Object to load window content
			var container = document.createElement('div');
			container.style.display = "none";
			container.id = 'content'+winid;
			document.body.appendChild(container);

			var connector = winman.initConnector();
			if(connector){	
				winman.xc.onreadystatechange = function(){
					if(winman.xc.readyState == 4 && winman.xc.status == 200){
						container.innerHTML = winman.xc.responseText;
						void winman.destructConnector();
						}
					}
				winman.xc.open('GET',winman.lastUri,true);
				winman.xc.send(null);
				}
			}
		else{
			// Use iframe to load window content
			var container = document.createElement('iframe');
			container.id = 'content'+winid;
			container.style.display = 'none';
			container.style.borderWidth = '0';
			container.frameBorder = 0;
			container.frameborder = 0;
			document.body.appendChild(container);
			container.src = winman.lastUri;
			}

		var win = new mywindow(container.id,800,540,x,y,z,winman.lastName,winman.lastScrollbars,winman.lastMoveable,winman.lastResizable,winman.lastCloseable,winman.lastBasics,winman.lastClass);
		winman.stack[winman.stack.length] = win;
		win.win.id = winid;
		win.win.style.display = 'none';
		
		if(win.moveable){
			win._mclipzone.id = 'mclip'+winid;
			}
		if(win.resizeable){
			win._rclipzone.id = 'rclip'+winid;
			}
		if(win.basics){
			win._btnreset.id = 'btres'+winid;
			win._btnmax.id = 'btmax'+winid;
			win._btnmin.id = 'btmin'+winid;
	
			win._btnmax.style.display = 'none';
			win._btnmin.style.display = 'none';
			}
		if(win.closeable){
			win._btnclose.id = 'btcls'+winid;
			win._btnclose.style.display = 'none';
			}
		
		$(win.win).fadeIn(winman.animationSpeed);
		$(win._btnclose).fadeIn(winman.animationSpeed);
		$(win._btnmin).fadeIn(winman.animationSpeed);
		$(win._btnmax).fadeIn(winman.animationSpeed);
		
		if(win.win.attachEvent){
			//win.win.attachEvent('onclick',winman.activate);	<--- Das gibt einen boesen bug mit dem Stack!!!
			win._mclipzone.attachEvent('onmousedown',winman.activate);
			if(win.basics){
				win._btnreset.attachEvent('onmousedown',winman.activate);
				win._btnmax.attachEvent('onmousedown',winman.activate);
				win._btnmin.attachEvent('onmousedown',winman.activate);
				}
			if(win.moveable){
				win._mclipzone.attachEvent('onmousedown',winman.activate)
				}
			if(win.resizeable){
				win._rclipzone.attachEvent('onmousedown',winman.activate);
				}
			if(win.closeable){
				win._btnclose.attachEvent('onmousedown',winman.windowClosed);
				}
			}
		else{		
			//win.win.addEventListener('click',winman.activate,false);	<--- Das gibt einen boesen bug mit dem Stack!!!
			win._mclipzone.addEventListener('mousedown',winman.activate,false);		
			if(win.basics){
				win._btnreset.addEventListener('mousedown',winman.activate,false);		
				win._btnmax.addEventListener('mousedown',winman.activate,false);		
				win._btnmin.addEventListener('mousedown',winman.activate,false);
				}
			if(win.moveable){
				win._mclipzone.addEventListener('mousedown',winman.activate,false);
				}
			if(win.resizeable){
				win._rclipzone.addEventListener('mousedown',winman.activate,false);
				}
			if(win.closeable){
				win._btnclose.addEventListener('mousedown',winman.windowClosed,false);
				}
			}
		winman.active = win;
		}

	this.getWindowId = function(ev){
		var winno;
		if(ev.srcElement){ // Safari & IExplore
			if(navigator.appVersion.indexOf("MSIE") > -1){
				winno = ev.srcElement.parentNode.id; // IExplore
				if ( winno == '' ) {
					winno = ev.srcElement.id.substring(5,ev.srcElement.id.length);
					}
				}else{// Safari Workaround:
				winno = ev.srcElement.id;
				// Get Window Id:
				winno = winno.substring(5,winno.length);
				}
			}
		else{// Alle anderen
			if(ev.target.parentNode){
				winno = ev.target.parentNode.id;
				}
			if(winno == '' || winno == null){
				winno = ev.target.id.substring(5,ev.target.id.length);
				}
			}
		return winno;
		}

	this.resetIds = function(){
		var tmpw;
		for ( i = 0; i < winman.stack.length; i++ ) {
			tmpw = winman.stack[i];
			tmpw.win.id = i;
			
			if(tmpw.basics){
				tmpw._btnreset.id = 'btres'+i;
				tmpw._btnmax.id = 'btmax'+i;
				tmpw._btnmin.id = 'btmin'+i;
				}
			if(tmpw.closeable){
				tmpw._btnclose.id = 'btcls'+i;
				}
			if(tmpw.resizeable){
				tmpw._rclipzone.id = 'rclip'+i;
				}
			if(tmpw.moveable){
				tmpw._mclipzone.id = 'mclip'+i;
				}
			tmpw.setZ(((i + 1) * 100));
			}
		}
		
	this.windowClosed = function(ev){
		var affected = winman.getWindowId(ev);
		// Content Container loeschen
		var container = document.getElementById("content"+affected);
		
		if(container){
			var parent = container.parentNode;
			try{
				parent.removeChild(container);
				}
			catch(err){
				alert(err.description);
				}
			}
		// Fenster vom Stapel loeschen:
		winman.stack.splice(affected,1);
		if(winman.stack.length > 0){
			// Es sind noch Fenster offen -> Ids neu setzen...		
			winman.resetIds();
			}else{
			// Keine weiteren Fenster offen...
			winman.detachOverlay();
			}
		}
	
	this.activate = function (ev) {
		var winno = winman.getWindowId(ev);
		if ( winno == winman.stack.length -1 ) {
			return;
			}
		else {
			var win = winman.stack[winno];
			var nstck = new Array();
			for ( i = 0; i < winman.stack.length; i++ ) {
				if ( i == winno && (i + 1) < winman.stack.length ) {
					++i;
					nstck[nstck.length] = winman.stack[i];
					}
				else if (i != winno) {
					nstck[nstck.length] = winman.stack[i];
					}
				}
			nstck[nstck.length] = winman.stack[winno];
			winman.stack = nstck;
			void(delete(nstck));
			winman.resetIds();
			winman.active = winman.stack[winman.stack.length -1];
			return;
			}
		}
}

// Helper function to open a Window:
var winman = new mywinman();
function openMyWindow(par1,par2,scroll,skin){
	if(!scroll){
		scroll = false;
		}
		
	// uri,windowname,scrollbars,moveable,resizeable,closeable,basics,classprefix
	if(true){
		winman.addWindow(par1,par2,false,true,false,true,false,skin)

		var win = winman.stack[0];						
		// Zentrieren:
		var winWidth = window.innerWidth ? window.innerWidth : document.documentElement.clientWidth;
		var winHeight = window.innerHeight ? window.innerHeight : document.documentElement.clientHeight;

		var x = (winWidth / 2) - (win.w / 2);
		var y = (winHeight / 2) - (win.h / 2);
		win.moveTo(x,y);
		win.resizeTo(800,540);	

		}
	}