/*
    Args
    menuContainer:domElt
    menuBoxClass:CSS class
    parentItem:domElt, node to activate
    showEvent:'over','click';
    hideDelay:default:1000ms;  use when mouse out
    topPlus: add to top pos menu def: parentItem.height()
    leftPlus: add to left pos menu def: 0
    showSpeed: speed to animate show|hide events default 'normal' values: 'slow' 'fast' 'normal' X in miliseconds
    close: call back where menu is hides
    closeSelector: selector to handle click event default:(base area);
    baseContainer: containe to append menu container default: body
	checkPosition - проверка положения курсора default:true;
*/
function FlyoutMenu(Args)
{
	var fn=new Object();
	
    var menuContainer=Args.menuContainer==undefined?null:$(Args.menuContainer);
    var menuBoxClass=Args.menuBoxClass==undefined?'menu_box':Args.menuBoxClass;
    var parentItem=Args.parentItem==undefined?null:$(Args.parentItem);
    var showEvent=Args.showEvent==undefined?'over':Args.showEvent;
    var hideDelay=Args.hideDelay==undefined?1000:Args.hideDelay;
    var showSpeed=Args.showSpeed==undefined?'normal':Args.showSpeed;
    var baseContainer=Args.baseContainer==undefined?document.body:Args.baseContainer;
    
    var topPlus=Args.topPlus==undefined?(parentItem==null?0:parentItem.height()):Args.topPlus;
    var leftPlus=Args.leftPlus==undefined?0:Args.leftPlus;
    
    var close=Args.close==undefined?null:Args.close;
	
	var checkPosition=Args.checkPosition==undefined?true:Args.checkPosition;
	
    
    var me=this;
    var BaseContainer=document.createElement('DIV');
    var Visible=false;
    
    var closeElement=Args.closeSelector==undefined?$(BaseContainer):menuContainer.find(Args.closeSelector);
    
    BaseContainer.style.position='absolute';
    BaseContainer.style.display='none';
    BaseContainer.className=menuBoxClass;
    baseContainer.appendChild(BaseContainer);
    
    BaseContainer=$(BaseContainer);
    
    var curHideInterval=null;
    
    fn.Item=function(pItem)
    {
        if(pItem==undefined) return parentItem;
        parentItem=pItem;
        fn.InitItem();
    }
    fn.CheckOver=function(e)
    {
        if(!Visible || !checkPosition) return;
        
        var pos=BaseContainer.position();
        
        if(e.pageX>=pos.left && e.pageX<=pos.left+BaseContainer.outerWidth())
            if(e.pageY>=pos.top && e.pageY<=pos.top+BaseContainer.outerHeight()) 
            {
                if(curHideInterval!=null)  clearTimeout(curHideInterval);
                curHideInterval=null;
                return;
            }
        if(curHideInterval!=null) return;
        
        //alert('start_hide '+e.pageX+' '+e.pageY+' '+pos.left+' '+pos.top+' '+BaseContainer.width()+' '+BaseContainer.height());
        
        curHideInterval=setTimeout(fn.HideMenu,hideDelay);       
        
    }
    fn.ShowMenuEnd=function()
    {
		Visible=true;
		//alert("ShowMenuEnd "+Visible);
    }
    fn.ShowMenu=function()
    {
		if(Visible)
		{			
			fn.HideMenu();
			return;
		}
		
        menuContainer.show();
        BaseContainer.append(menuContainer);
        
        closeElement.click(fn.HideMenu);
        
        var pos=parentItem.position();
        //var height=parentItem.height();
        BaseContainer.css("top",pos.top+topPlus);
        BaseContainer.css("left",pos.left+leftPlus);
        BaseContainer.show(showSpeed,fn.ShowMenuEnd);
        //Visible=true;
        
        return false;
        
    }
    fn.HideMenu=function()
    {
        Visible=false;
        if(curHideInterval!=null)  clearTimeout(curHideInterval);
        curHideInterval=null;
        BaseContainer.hide(showSpeed);
        
        //if(menuContainer.attr("oldPrev").length>0) menuContainer.attr("oldPrev").after(menuContainer);
        //else menuContainer.attr("oldParent").append(menuContainer);
        if(close!=null) close();
    }
    fn.InitItem=function()
    {
        if(parentItem!=null)
        {
            if(showEvent=='over') parentItem.mouseover(fn.ShowMenu);
            if(showEvent=='click') parentItem.click(fn.ShowMenu);
        }
    }
    fn.Init=function()
    {
        $(document.body).mousemove(fn.CheckOver);
        closeElement.click(fn.HideMenu);
        //BaseContainer.click(fn.HideMenu);
        fn.InitItem();
    }
    fn.Init();
    
}

