﻿// JScript source code
var popupArray = [];

document.onclick=check;

function check(e){
  var target = (e && e.target) || (event && event.srcElement);
  
  var divs = getElementsByClassName('PopUp');
  var i = 0;
  var obj; 

   if (popupArray.length > 0)
   {
      for (i=0; i<popupArray.length; i++)
      {
        if (!target.floater)
        {
           obj=document.getElementById(popupArray[i]);
           obj.style.visibility='hidden';
           removeArrItem(popupArray, popupArray[i]);
        }
      }
   }
}

function checkParent(t, id){
    while(t.parentNode)
    {
        if(t==document.getElementById(id))
        {
           return false
         }
        t=t.parentNode
     }
   return true
}

function initializeFloater(triggerID, floaterID, click, mouseout, Xoffset, Yoffset) 
{
    if (!offset) var offset = 0;
    if (mouseout == 'undefined') var mouseout = true;
	var trigger = document.getElementById(triggerID);
	var floater = document.getElementById(floaterID);
		
	if (trigger && floater)
	{   
		trigger.floater = floater;
		floater.isFocused = false;
		floater.isFloater = true;
		floater.Xoffset = Xoffset;
		floater.Yoffset = Yoffset;
		
		if (click)
		{
		    trigger.onclick = function() {
		     var i = 0;
             for (i =0; i < popupArray.length; i++)
             {
                 if (popupArray[i] !=floater.id)
                 {
                     hideFloater(popupArray[i], true);
                     removeArrItem(popupArray, popupArray[i]);
                 }
             }
		        return false;
		    }
		}
		
		var divs = floater.getElementsByTagName('div');

		for (var i=0; i < divs.length; i++)
		{
		    if (divs[i].className == "button")
		    {
		        addAREventListener(divs[i],
		            'click',
		            function() { hideFloater(floater.id, true);
		                         removeArrItem(popupArray, popupArray[i]);});
		    }
		}
		
		addAREventListener(trigger, 
		    click ? 'click' : 'mouseover',
		    trigger_onfire);
		addAREventListener(floater,
		    'mouseover',
		    floater_onmouseover);
		    
//		if(mouseout)
//		{
//		    addAREventListener(trigger,
//			    'mouseout',
//			    trigger_onmouseout);

//		    addAREventListener(floater,
//                'mouseout',
//                floater_onmouseout);
//		}
	}
}

function floater_onmouseover(e)
{
	if (!e) var e = window.event;
	
    var element = getEventTarget(e);
    if (element)
    {
        if (element.isFloater)
        {
            element.isFocused = true;
        }
        else
        {
            while (element)
            {
                element = element.parentNode;
                
                if (element.isFloater)
                {
                    element.isFocused = true;
                    break;
                }
            }
        }
    }    
}


//function floater_onmouseout(e)
//{
//    if (!e) var e = window.event;

//    var element = getEventTarget(e);
//  
//	if (element.isFloater)
//        {
//            element.isFocused = false;
//	    setTimeout("hideFloater('" + element.id+ "')",100);
//        }
//        else
//        {
//            while (element)
//            {
//                element = element.parentNode;
//                
//                if (element.isFloater)
//                {
//                    element.isFocused = false;
//		             setTimeout("hideFloater('" + element.id+ "')",100);
//                    break;
//                }
//            }
//        }
//     
//    e.cancelBubble = true;
//}

function hideFloater(elementID, forceClose)
{
    var element = document.getElementById(elementID);
    if (element) 
    {
        if (forceClose)
        {
            element.isFocused = false;
        }
        if (!element.isFocused)
        {
            element.style.visibility = "hidden";
        }
    }
}

function trigger_onfire(e) 
{
    if (!e) var e = window.event;
    
    //close popup if the popup is not target and open.
    var element = getEventTarget(e);
    var divs = getElementsByClassName('PopUp');
    var i = 0;

     if (popupArray.length > 0)
     {
        for (i=0; i <popupArray.length; i++)
        {
            hideFloater(popupArray[i], true);
            removeArrItem(popupArray, popupArray[i]);
        }
     }

    
    if (element && element.floater)
    {
        var floater = element.floater;
        var floaterWidth = floater.offsetWidth;
        var floaterHeight = floater.offsetHeight;
        var Xoffset = floater.Xoffset ? floater.Xoffset : 240;
        var Yoffset = floater.Yoffset ? floater.Yoffset : -100;
        
        //standard position
        var x = findX(element) + Xoffset;
        var y = findY(element) + element.offsetHeight + Yoffset;
                
        var browserWidth = getClientWidth();
        var browserHeight = getClientHeight();
        var scrollLeft = getScrollLeft();
        var scrollTop = getScrollTop();   
                
        if (browserWidth > floaterWidth)
        {
            if (x < scrollLeft)
            {
                x = scrollLeft;
            }
            else if (x + floaterWidth > browserWidth + scrollLeft)
            {
                x = browserWidth - floaterWidth + scrollLeft;                    
            }
        }
        
        if (browserHeight > floaterHeight)
        {
            if (y + floaterHeight > browserHeight + scrollTop)
            {
                y = y - floaterHeight - element.offsetHeight - (2*Yoffset);
                y = y > scrollTop ? y : scrollTop;
            }
        }
             
        floater.style.left = x + "px";
        floater.style.top = y + "px";
        floater.style.visibility = "visible";
        
        popupArray[popupArray.length] = floater.id;
    }
}

//function trigger_onmouseout(e)
//{
//	if (!e) var e = window.event;
//	
//    var element = getEventTarget(e);
//    
//    if (element && element.floater)
//    {
//       setTimeout("hideFloater('" + element.floater.id + "')",100);
//    }
//}

function removeArrItem(arr, id)
{
   if (id)
   {
       for (var i = arr.length - 1; i >= 0; i -= 1)
       {
            if (arr[i]==id)
            {
                arr.splice(i, 1);
            }
       }
   }
}
