var nPopup={
	newPopup:function(settings){	
		//einmalig initialisieren
		if(!nPopup.init){
			//css laden
			var path=nUtils.getScriptPath('nPopup.js');
			var css=document.createElement('link');
			css.rel="stylesheet";
			css.href=path+'/css/nPopup.css';
			document.getElementsByTagName('head')[0].appendChild(css);
			
			nPopup.popups=[];
			nPopup.startZIndex=nPopup.maxZIndex=50;
			nPopup.init=true;
		}
		
		var newPopup=new nPopup.popup(settings);
		this.popups.push(newPopup);
		return newPopup;		
	},
	bringToTop:function(popup){
		if(nPopup.popups.length > 1){
			if(!popup) var popup=this;
			if(popup.mainDiv.nShadowDiv){
				with(popup.mainDiv.nShadowDiv.style){
					opacity=1.0;
				}
			}
			with(popup.mainDiv.style){
				zIndex=nPopup.maxZIndex++;
			}
			for(var i=0; i< nPopup.popups.length; i++){
				if(nPopup.popups[i] != popup && nPopup.popups[i].mainDiv.nShadowDiv){
					with(nPopup.popups[i].mainDiv.nShadowDiv.style){
						opacity=0.3;
					}
				}
			}
		}
	}
}



nPopup.popup=Class.create();
nPopup.popup.prototype={
	initialize:function(user_settings){
		//Settings
		this.settings={
			mainDivId:false,
			mainDivClassName:'nPopupMainDiv',
			createInCertainDomEl:false,
			title:'&nbsp;',
			titleHeight:'20px',
			contentDiv:'',
			titleSpan:'',
			width:'200px',
			height:'200px',
			top:'30px',
			left:'30px',
			shadow:true,
			visible:true,
			dragable:true,
			scrollable:true,
			closeFunc:this.hide.bindAsEventListener(this)
		}
		if(typeof(user_settings)=='object'){
			for(var i in user_settings){
				this.settings[i]=user_settings[i];
			}
		}
		
		//Main Div
		var div=this.mainDiv=document.createElement('div');
		
		this.zIndex=nPopup.popups.length > 0 ? nPopup.popups[nPopup.popups.length-1].zIndex+1 : nPopup.startZIndex;
		nPopup.maxZIndex++;
		with(div.style){
			position='absolute';
			left=this.settings.left;
			top=this.settings.top;
			width=this.settings.width;
			//height=this.settings.height;
			visibility=this.settings.visible==true ? 'auto' : 'hidden';
			zIndex=this.zIndex;
		}
		div.className=this.settings.mainDivClassName;
		if(this.settings.mainDivId) div.id=this.settings.mainDivId;
		if(this.settings.width=='auto' && ! window.opera) this.autoResize=true;
		//if(this.settings.width=='auto' ) this.autoResize=true;
		
		var createInDomEl;
		if(this.settings.createInCertainDomEl && $(this.settings.createInCertainDomEl)) createInDomEl=$(this.settings.createInCertainDomEl);
		else createInDomEl=document.getElementsByTagName('body')[0];
		
		//Title Div
		var titleDiv=document.createElement('div');
		titleDiv.className='nPopupTitleDiv';
		titleDiv.innerHTML="<span class='nPopupTitleSpan'>"+this.settings.title+"</span>";
		div.appendChild(titleDiv);
		this.titleSpan=titleDiv.getElementsByTagName('span')[0];
		with(titleDiv.style){
			/*position='absolute';
			top='0px';
			left='0px';*/
		}			
		
		//Drag Div
		var dragDiv=document.createElement('div');
		dragDiv.innerHTML='&nbsp;';
		 dragDiv.className='nPopupDragDiv';
		with(dragDiv.style){
			position='absolute';
			top='0px';
			left='0px';
			width="100%";
			height=this.settings.titleHeight;
		}	
		titleDiv.appendChild(dragDiv);
		if(this.settings.dragable) nDrag.enableDrag(dragDiv, div);		
		
		//Close Div
		var closeDiv=document.createElement('div');
		with(closeDiv.style){
			position="absolute";
			top="0px";
			right="0px";
		}
		closeDiv.className='nPopupCloseDiv';
		closeDiv.innerHTML="<span class='nPopupCloseSpan'>close</span>";
		
		//if(!this.settings.closeFunc) this.settings.closeFunc=this.hide.bindAsEventListener(this);
		Event.observe(closeDiv, 'click', this.settings.closeFunc);
		div.appendChild(closeDiv);
		
		var contentDiv=document.createElement('div');
		if(this.content) contentDiv.innerHTML=this.content;
		contentDiv.className="nPopupContentDiv";
		div.appendChild(contentDiv);
		this.contentDiv=contentDiv;
		createInDomEl.appendChild(div);		
		if(this.settings.shadow) nShadow.init(div);
		if(this.settings.scrollable){
			this.scrollObj=nScroll.init(contentDiv, parseInt(contentDiv.style.width), parseInt(contentDiv.style.height));
		}
		Event.observe(div, 'mousedown', function(){nPopup.bringToTop(this);}.bindAsEventListener(this));
	},
	hide:function(){
		this.mainDiv.style.visibility='hidden';
	},
	clearContent:function(){
		this.contentDiv.innerHTML='';
		if(this.scrollObj){
			nScroll.update(this.scrollObj);
		}
		if(this.settings.shadow){
					nShadow.resize(this.mainDiv);
			}
	},
	addContent:function(content, resize){
			if(this.autoResize){
					$(this.mainDiv).setStyle({width:'auto'});
			}
			//alert(typeof(content));
			//alert(content.nodeType);
			if(typeof(content)=='string') this.contentDiv.innerHTML+=content;
			else this.contentDiv.appendChild(content);
			//else this.contentDiv.innerHTML+=content;
			if(this.autoResize){
				var newWidth=$(this.contentDiv).getWidth();
				$(this.mainDiv).setStyle({width:newWidth+'px'});
			}
			
			if(this.scrollObj){
				nScroll.update(this.scrollObj);
			}
			if(this.settings.shadow){
					nShadow.resize(this.mainDiv);
			}
	},
	setTitle:function(title){
			this.titleSpan.innerHTML=title;
	},
	isVisible:function(){
		return this.mainDiv.style.visibility=='visible' ? true : false;
	},
	show:function(){		
		if((Position.page(this.mainDiv)[1] < 0) || (document.viewport.getHeight() -this.mainDiv.getHeight() -this.mainDiv.viewportOffset().top) < 0){
			this.mainDiv.style.top=(parseInt(this.mainDiv.style.top)+10+(-Position.page(this.mainDiv)[1]))+"px";
		}
		this.mainDiv.style.visibility='visible';
		nPopup.bringToTop(this);
	}
}


