var userAgent = navigator.userAgent.toLowerCase();
var is_opera  = (userAgent.indexOf('opera') != -1);
var is_saf    = ((userAgent.indexOf('applewebkit') != -1) || (navigator.vendor == "Apple Computer, Inc."));
var is_webtv  = (userAgent.indexOf('webtv') != -1);
var is_ie     = ((userAgent.indexOf('msie') != -1) && (!is_opera) && (!is_saf) && (!is_webtv));

function $()
{
    var elements = new Array();
    for (var i = 0; i < arguments.length; i++)
    {
        var element = arguments[i];
        if (typeof element == 'string')
            element = document.getElementById(element);
        if (arguments.length == 1)
            return element;
        elements.push(element);
    }
    return elements;
}


function getEvent(e)
{
    e = e || window.event;
    return e;
}

function addEvent(obj, evenTypeName, fn){
    if (obj.addEventListener){
        obj.addEventListener(evenTypeName, fn, true);
        return true;
    } else if (obj.attachEvent){
        return obj.attachEvent("on"+evenTypeName, fn);
    } else {
        return false;
    }
}

function removeEvent(obj, evenTypeName, fn){
    if (obj.removeEventListener){
        obj.removeEventListener(evenTypeName, fn, true);
        return true;
    } else if (obj.detachEvent){
        var r = obj.detachEvent("on"+evenTypeName, fn);
        return r;
    } else {
        alert("Error.");
    }
}

function findPos(obj) {
    this.top=0;
    this.left=0;
    this.width=obj.offsetWidth;
    this.height=obj.offsetHeight;
    if (obj.offsetParent) {
        while (obj.offsetParent) {
            this.top += obj.offsetTop;
            this.left += obj.offsetLeft;
            obj = obj.offsetParent;
        }
    }
}


function removeElement(element)
{
    if (element.parentNode)
    {
        element.parentNode.removeChild(element);
    }
}

/* 菜单 */
function DivMenu()
{
    var oM = this; 

	this.mouseX;
    this.mouseY; 

	this.divObj;
	this.titleObj; 
    this.winObj;

	this.div_left;
	this.div_top;
	this.div_width;
	this.div_height;

    this.offset_x = 10;
    this.offset_y = 10; 

	// 点击打开一个菜单
	this.openMenu = function(e, menu_id, title_id, w, h)
	{
		var evt = getEvent(e);
        this.docCloseDiv(evt);
        this.titleObj = $(title_id);
        this.divObj   = $(menu_id);
        evt.cancelBubble = true; 

        if (oM.divObj && oM.divObj.style.display == "none") 
        {
            oM.divObj.style.display = "block";
        }

        oM.winObj = document.body?document.body:document.documentElement;
                
        var cw = oM.winObj.clientWidth;
        var ch = oM.winObj.clientHeight;
        var sw = oM.winObj.scrollWidth;
        var sh  = oM.winObj.scrollHeight;
        var sch = window.screen.height;
        var sl = oM.winObj.scrollLeft;
        var st = oM.winObj.scrollTop;
        var och = this.divObj.clientHeight;

        if (sh < sch) 
        {
            sh = sch;
        }
        
        // 取得菜单层宽高
		this.div_width  = w;
		this.div_height = h; 

        if (h == 0) 
        {
            h = och;
        } 

        // 定位
        this.div_left = parseInt((cw - w)/2);
        this.div_top  = parseInt(sh/2 - h) - 50; 

        // 显示菜单
		oM.divObj.style.width  = w + "px"; 

		oM.divObj.style.height = h + "px"; 

		oM.divObj.style.left = this.div_left+"px";
		oM.divObj.style.top  = this.div_top+"px"; 

		addEvent(oM.titleObj, "mousedown", oM.dragDiv);
        return false;
	}

	this.dragDiv = function (e)
	{
		var evt = getEvent(e);
		oM.divObj.startDrag=true;

		var elmL = oM.divObj.style.left ? oM.divObj.style.left : 0;
		var elmT = oM.divObj.style.top  ? oM.divObj.style.top  : 0;

		oM.mouseX = evt.clientX - parseInt(elmL);
        oM.mouseY = evt.clientY - parseInt(elmT);

		addEvent(document, "mousemove", oM.startMove);
		addEvent(document, "mouseup", oM.endMove);
	}

	this.startMove = function(e)
	{
		var evt = getEvent(e);

		oM.divObj.style.left = (evt.clientX - oM.mouseX) + "px";
		oM.divObj.style.top  = (evt.clientY - oM.mouseY) + "px";
 
		return false;
	}

	this.endMove = function(e)
	{
		var evt = getEvent(e);
		oM.divObj.startDrag=false;

        removeEvent(document,"mousemove",oM.startMove);
        removeEvent(document,"mouseup",oM.endMove);
	}

    this.closeDiv = function(e)
    {
        if (oM.divObj)
        {
            oM.divObj.style.display = 'none';
        } 
        return false;
    }

	// 关菜单
	this.docCloseDiv = function(e)
	{
		var evt = getEvent(e);

        // 取光标坐标
		var mouse_x = is_ie?evt.x:evt.clientX;
		var mouse_y = is_ie?evt.y:evt.clientY;
		//mouse_x += oM.winObj.scrollLeft;
		//mouse_y += oM.winObj.scrollTop;

		if (oM.divObj)
		{
			var div_width  = parseInt(oM.divObj.style.width);
			var div_height = parseInt(oM.divObj.style.height);
			var div_left = parseInt(oM.divObj.style.left);
			var div_top  = parseInt(oM.divObj.style.top);            

            if(mouse_x < div_left - oM.offset_x 
            || mouse_x > div_left + div_width + oM.offset_x
            || mouse_y < div_top - oM.offset_y 
            || mouse_y > div_top + div_height + oM.offset_y)
            {   
                oM.divObj.style.display = 'none';
            }
        }
	}
}

var DivMenu = new DivMenu();

