function popup_box(id){	
	this.dragging = false;
	this.id = id;		
		
	return this;
}
	
popup_box._C = null;

popup_box.stopEvent=function(ev){
	ev||(ev=window.event);
	if(is_ie){
		ev.cancelBubble=true;
		ev.returnValue=false;
	}
	else{
		ev.preventDefault();
		ev.stopPropagation();
	}
	return false;
}

popup_box.addEvent=function(el,evname,func){
	if(el.attachEvent){
		el.attachEvent("on"+evname,func);
	}
	else if(el.addEventListener){
		el.addEventListener(evname,func,true);
	}
	else{
		el["on"+evname]=func;
	}
}

popup_box.removeEvent=function(el,evname,func){
	if(el.detachEvent){
		el.detachEvent("on"+evname,func);
	}
	else if(el.removeEventListener){
		el.removeEventListener(evname,func,true);
	}
	else{
		el["on"+evname]=null;
	}
}	
	
popup_box.prototype._dragStart=function(ev){
	if(this.dragging){
		return;
	}	
	this.dragging=true;	
	var posX;var posY;
	if(is_ie){
		posY=window.event.clientY+document.body.scrollTop;
		posX=window.event.clientX+document.body.scrollLeft;
	}
	else{
		posY=ev.clientY+window.scrollY;
		posX=ev.clientX+window.scrollX;
	}
	var st=this.element.style;
	this.xOffs=posX-parseInt(st.left);
	this.yOffs=posY-parseInt(st.top);		
	with(popup_box){
		addEvent(document,"mousemove",dragIt);		
		addEvent(document,"mouseup",dragEnd);
		_C = this;
	}
}
	
popup_box.dragIt=function(ev){
	var cal=popup_box._C;
	if(!(cal&&cal.dragging)){
		return false;
	}
	var posX;
	var posY;
	if(is_ie){
		posY=window.event.clientY+document.body.scrollTop;
		posX=window.event.clientX+document.body.scrollLeft;
	}
	else{
		posX=ev.pageX;
		posY=ev.pageY;
	}
	cal.hideShowCovered();
	var st=cal.element.style;
	st.left=(posX-cal.xOffs)+"px";
	st.top=(posY-cal.yOffs)+"px";
	return popup_box.stopEvent(ev);
}

popup_box.dragEnd=function(ev){
	var cal=popup_box._C;
	if(!cal){
		return false;
	}
	cal.dragging=false;
	with(popup_box){
		removeEvent(document,"mousemove",dragIt);
		removeEvent(document,"mouseup",dragEnd);
	}
	cal.hideShowCovered();
	popup_box._C = null;	
};	

popup_box.prototype.open = function (obj,id){		   
	this.element = document.getElementById(id);			  
	this.element.style.display='';			  			 
	
	if(!this.width)
		this.width = this.element.clientWidth;
				 
	x = getPageOffsetLeft(obj) - eval( this.width ) + 20;
	y = getPageOffsetTop(obj);
			 						 			  
	this.element.style.left = x;
	this.element.style.top = y;
  this.element.style.visibility='';
  this.hideShowCovered();	
}
		   
popup_box.prototype.close = function (){		
	this.element.style.display='none';
	this.element.style.visibility='hidden';		
	show_all_combos();	     
}		   


popup_box.getAbsolutePos=function(el){
	var SL=0,ST=0;
	var is_div=/^div$/i.test(el.tagName);
	if(is_div&&el.scrollLeft)
		SL=el.scrollLeft;
	if(is_div&&el.scrollTop)
		ST=el.scrollTop;
	var r={x:el.offsetLeft-SL,y:el.offsetTop-ST};
	if(el.offsetParent){
		var tmp=this.getAbsolutePos(el.offsetParent);
		r.x+=tmp.x;r.y+=tmp.y;
	}
	return r;
}

popup_box.prototype.hideShowCovered=function(){
  if( !is_ie )
     return;
	var self=this;
	function getVisib(obj){
		var value=obj.style.visibility;
		if(!value){
			if(document.defaultView&&typeof(document.defaultView.getComputedStyle)=="function"){
					value='';
			}
			else if(obj.currentStyle){
				value=obj.currentStyle.visibility;
			}
			else value='';
		}
		return value;
	};
		
	var tags=new Array("applet","iframe","select");
	var el=self.element;
	var p=popup_box.getAbsolutePos(el);
	var EX1=p.x;
	var EX2=el.offsetWidth+EX1;
	var EY1=p.y;
	var EY2=el.offsetHeight+EY1;
	for(var k=tags.length;k>0;){
		var ar=document.getElementsByTagName(tags[--k]);
		var cc=null;
		for(var i=ar.length;i>0;){
			cc=ar[--i];
			p=popup_box.getAbsolutePos(cc);
			var CX1=p.x;
			var CX2=cc.offsetWidth+CX1;
			var CY1=p.y;
			var CY2=cc.offsetHeight+CY1;
			if(self.hidden||(CX1>EX2)||(CX2<EX1)||(CY1>EY2)||(CY2<EY1)){
				if(!cc.__msh_save_visibility){
					cc.__msh_save_visibility=getVisib(cc);
				}
				cc.style.visibility=cc.__msh_save_visibility;
			}
			else{
				if(!cc.__msh_save_visibility){
					cc.__msh_save_visibility=getVisib(cc);
				}
				cc.style.visibility="hidden";
			}
		}
	}
}
