function PopupLayer ()
{
	this.offsetX = 16;	//菜单距连接文字最左端距离
	this.offsetY = 8;	//菜单距连接文字顶端距离
	this.vBobjects = new Array();
	this.fo_shadows = new Array();
	this.oldLayers = new Array();

	////No need to edit beyond here
	this.isIE = document.all && navigator.userAgent.indexOf("Opera") == -1;
	this.onDocumentClick; //保存原先的文档单击事件
	this.delayHideTimer;
	this.layer;
	this.newLayer;
	this.popupLayer = this;
}

PopupLayer.prototype.$ = function (objID, d)
{
	if(objID == null || objID == "")
		return null;

	if(d)
		return d.getElementById(objID);

	return document.getElementById(objID);
}

PopupLayer.prototype.getY = function (o)
{  
	var l = o.offsetTop - o.scrollTop;
	while(o = o.offsetParent)
		l = l + o.offsetTop - o.scrollTop;
	return l;
}

PopupLayer.prototype.getX = function (o)
{  
	var l = o.offsetLeft - o.scrollLeft;
	while(o = o.offsetParent)
		l = l + o.offsetLeft - o.scrollLeft;
	return l;
}

//setPosition (element, position, offX, offY, fixed)
PopupLayer.prototype.setPosition = function (element, position, offX, offY, fixed)
{
	var o, x, y;
	if (position == null)
		position = event;
	if (offX == null)
		offX = 0;
	if (offY == null)
		offY = 0;
	if(position.srcElement || position.currentTarget)
	{
		x = position.clientX;
		y = position.clientY;
		if (position.srcElement)
			position = position.srcElement;
		else
			position = position.currentTarget;
	}
	else if(typeof(position) == typeof(""))
	{
		position = this.$(position);
	}
	if(!x)
		x = this.getX(position);
	if(!y)
		y = this.getY(position);
	
	//if(offX == 0)
	//	offX = position.offsetWidth
	o = (this.isIE ? Math.max(document.body.clientWidth, document.documentElement.clientWidth) : window.innerWidth);
	o -= (this.isIE ? Math.max(document.body.scrollLeft, document.documentElement.scrollLeft) : window.pageXOffset);
	o = o - x - offX;
	if (o < element.offsetWidth && !fixed)
	{
		o = x - element.offsetWidth;
		/*
		if (window.pageXOffset)
			o = window.pageXOffset + x - element.offsetWidth;
		else if (document.documentElement)
			o = document.documentElement.scrollLeft + x - element.offsetWidth;
		if (this.isIE)
			o = document.body.scrollLeft + x - element.offsetWidth;
		else
			o = x - element.offsetWidth;
		*/
		if(o < 0)
			o = this.isIE ? x/* + offX*/ : window.pageXOffset + x;
	}
	else if (this.isIE)
	{
		o = /*Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) + */x + offX;
	}
	else
	{
		o = window.pageXOffset + x + offX;
	}
	element.style.left = o + 'px';

	if(offY == 0)
		offY = position.offsetHeight;
	if (this.isIE)
	{
		o = Math.max(document.body.clientHeight, document.documentElement.clientHeight);
		o -= Math.max(document.body.scrollTop, document.documentElement.scrollTop)
	}
	else
	{
		o = window.innerHeight;// + window.pageYOffset;
		//o = window.pageYOffset;// +*/ y;
	}
	o = o - y - offY;//
document.title = o + ";" + element.offsetHeight + ";" + y;
	if (o < element.offsetHeight && !fixed)
	{
		o = y - element.offsetHeight;
		/*
		if (window.pageYOffset)
			o = y - element.offsetHeight;
		else if (document.documentElement)
			o = document.documentElement.scrollTop + y - element.offsetHeight;
		else if (this.isIE)
			o = document.body.scrollTop + y - element.offsetHeight;
		else
			o = y - element.offsetHeight;
		*/
		if(o < 0)
			o = this.isIE ? y/* + offY*/ : window.pageYOffset + y;
	}
	else if (this.isIE)
	{
		o = /*Math.max(document.documentElement.scrollTop, document.body.scrollTop) + */y + offY;
	}
	else
	{
		o = window.pageYOffset + y + offY;
	}
	element.style.top = o + 'px';
}

//findObj (n, d)
PopupLayer.prototype.findObj = function (n, d)
{
	var p,i,x; 
	
	if(!d)
		d=document;
	
	if((p=n.indexOf("?")) > 0 && parent.frames.length)
	{
		d = parent.frames[n.substring(p+1)].document;
		n = n.substring(0,p);
	}
	
	if(!(x=d[n])&&d.all)
		x=d.all[n];
		
	for(i=0; !x && i < d.forms.length; i++)
		x = d.forms[i][n];
		
	for(i=0; !x && d.layers && i<d.layers.length; i++)
		x = this.findObj(n,d.layers[i].document);
		
	if(d.getElementById() && !x)
		x = d.getElementById(n);
		
	return x;
} 

PopupLayer.prototype.fetchObj = function (idname, forcefetch)
{
	if (typeof(this.vBobjects[idname]) == "undefined")
		this.vBobjects[idname] = this.findObj(idname);
	return this.vBobjects[idname];
}

PopupLayer.prototype.createLayer = function (id, name)
{
	var newLayer = document.createElement("div");//
	document.body.appendChild(newLayer);
	if (id)
		newLayer.setAttribute("id", id);
	if(name)
		newLayer.setAttribute("name", name);
	else if (id)
		newLayer.setAttribute("name", id);
	newLayer.style.padding = "10px";
	newLayer.style.textAlign  = "left";
	newLayer.style.whiteSpace = "nowrap";
	newLayer.style.fontSize = "12px";
	newLayer.style.fontFamily = "Verdana";
	newLayer.style.backgroundColor = "#FFFBF1";
	newLayer.style.borderColor = "#EDD48B";
	newLayer.style.borderWidth = "1px";
	newLayer.style.borderStyle = "solid";
	newLayer.style.filter = "Alpha(Opacity=100)";
	return newLayer;
}

//sender:事件或事件源;,objLayer DIV数据ID，fixed:关闭浏览器自适应，用于版面导航菜单
PopupLayer.prototype.show = function (sender, objLayer, fixed)
{
	var o = this.layer;
	var eventX = 0;
	var eventY = 0;

	if(!objLayer && !o)
		return;

	if(o && o.innerHTML == objLayer && this.layer.style.visibility == "visible")
	{
		//if(this.layer.style.visibility != "visible")
		//	this.layer.style.visibility = "visible";
		return;
	}

	if(objLayer)
	{
		if(typeof(objLayer) == typeof(""))
			this.layer = this.$(objLayer);
		else
			this.layer = objLayer;

		if(this.layer != null)
		{
			if(this.layer == o && this.layer.style.visibility == "visible")
			{
				//if(this.layer.style.visibility != "visible")
				//	this.layer.style.visibility = "visible";
				return;
			}

			for(objLayer = 0; objLayer < this.oldLayers.length; objLayer++)
			{
				if(this.oldLayers[objLayer] == this.layer)
					break;
			}
			if(objLayer >= this.oldLayers.length)
				this.oldLayers[this.oldLayers.length] = this.layer;
			objLayer = null;
			this.layer.style.position = "absolute";
			this.layer.style.display = "block";
			this.layer.style.zIndex = "100";
			this.layer.onmouseover = this.clearHide;
			this.layer.onmouseout = this.dynamicHide;
		}
	}

	this.hide ();
	this.clearHide ();
	this.clearShadow ();
	this.onDocumentClick = document.onclick;
	document.onclick = function ()
	{
		popupLayer.hide();
		if(this.onDocumentClick)
			document.onclick = this.onDocumentClick;
	}

	if(!this.layer)
	{
		if(!this.newLayer)//添加菜单层
		{
			this.newLayer = this.createLayer();
			this.newLayer.style.position = "absolute";
			this.newLayer.style.display = "block";
			this.newLayer.style.zIndex = "100";
			this.newLayer.onmouseover = this.clearHide;
			this.newLayer.onmouseout = this.dynamicHide;
			this.oldLayers[this.oldLayers.length] = this.newLayer;
		}
		this.layer = this.newLayer;
	}
	this.layer.popupLayer = this;
	this.layer.style.overflow = "visible";

	if(objLayer && objLayer != this.layer && objLayer != this.layer.innerHTML)
		this.layer.innerHTML = objLayer;
	
//	if(this.layer.offsetHeight > 100)
//	{
//		this.layer.onmousemove = function ()
//		{
//			if(e.offsetY - this.scrollTop > this.offsetHeight / 2)
//				this.scrollTop++;
//			else
//				this.scrollTop--;
//		}
//		this.layer.style.width = this.layer.offsetWidth;// + 100;
//		this.layer.style.height = 100;
//		this.layer.style.overflow = "hidden";//scroll
//		this.layer.offsetHeight = 100;
//	}
	
	this.setPosition(this.layer, sender, this.offsetX, this.offsetY, fixed);
	this.layer.style.visibility = "visible";
	this.dropShadow(this.layer, "#999999", 3);
	return false;
}

PopupLayer.prototype.dropShadow = function (el, color, size)
{
	var i, rect, rs, opacity;
	for (i = size; i > 0; i--)
	{
		rect = document.createElement('div');
		rs = rect.style
		rs.position = 'absolute';
		rs.left = (el.style.posLeft + i) + 'px';
		rs.top = (el.style.posTop + i) + 'px';
		rs.width = el.offsetWidth + 'px';
		rs.height = el.offsetHeight + 'px';
		rs.zIndex = el.style.zIndex - i;
		rs.backgroundColor = color;
		opacity = 1 - i / (i + 1);
		rs.filter = 'alpha(opacity=' + (100 * opacity) + ')';
		//el.insertAdjacentElement('afterEnd', rect);
		this.fo_shadows[this.fo_shadows.length] = rect;
	}
}

PopupLayer.prototype.clearShadow = function ()
{
	for(var i = 0; i < this.fo_shadows.length; i++)
	{
		if (this.fo_shadows[i])
			this.fo_shadows[i].style.display = "none";
	}
	this.fo_shadows = new Array();
}

PopupLayer.prototype.containsNS6 = function (a, b)
{
	while (b.parentNode)
	{
		b = b.parentNode;
		if (b == a)
			return true;
	}

	return false;
}

PopupLayer.prototype.hide = function ()
{
	if(!this.popupLayer)
		return;

	for(var i = 0; i < this.popupLayer.oldLayers.length; i++)
		this.popupLayer.oldLayers[i].style.visibility = "hidden";
	this.popupLayer.clearShadow();
}

PopupLayer.prototype.dynamicHide = function (e)
{
	if(!this.popupLayer)
		return;

	if(e == null)
		e = event;
	if (this.popupLayer.isIE && !this.popupLayer.layer.contains(e.toElement))
		this.popupLayer.hide();
	else if(e.currentTarget != e.relatedTarget && !this.popupLayer.containsNS6(e.currentTarget, e.relatedTarget))
		this.popupLayer.hide();
}

PopupLayer.prototype.delayHide = function ()
{
	this.delayHideTimer = window.setTimeout("popupLayer.hide()", 500);
}

PopupLayer.prototype.clearHide = function ()
{
	if (this.delayHideTimer)
		window.clearTimeout(this.delayHideTimer);
}

var popupLayer = new PopupLayer()