var dragObject  = null;
var mouseOffset = null;

var popupContent = null;
var popupTitle = null;
var popupId = null;

var popupWidth = null;
var popupHeight = null;
var popupDragable = true;
var popupCloseable = true;

function dynamic_popup_by_id(contentID,title)
{
  if (document.getElementById && document.getElementById(contentID))
  {
    setPopupContent(document.getElementById(contentID).innerHTML);
  }
  else if (document.all && document.all[contentID])
  {
    setPopupContent(document.all[contentID].innerHTML);
  }
  setPopupTitle(title);
  dynamic_popup_init();
}

function dynamic_popup_by_content(content,title)
{
  setPopupContent(content);
  setPopupTitle(title);
  dynamic_popup_init()
}

function dynamic_popup_init()
{
  if ((document.getElementById && !document.getElementById("popupWindow")) || (document.all && !document.all.popupWindow))
  {
    var windowSize = getWindowSize();
    
    document.onmousemove = mouseMove;
    document.onmouseup = mouseUp;
    
    include_css("frontend-g4/inc/css/dynamic_popup.css");
    
    // Create PopupWindow
    var popupElementWindow = document.createElement("div");
    popupElementWindow.setAttribute("id","popupWindow");
    popupElementWindow.setAttribute("class","popup");
    popupElementWindow.setAttribute("className","popup");
    popupElementWindow.style.position = "absolute";
        
    if (popupWidth != null)
    {
      popupElementWindow.style.width = popupWidth + 'px';
    }
    
    if (popupHeight != null)
    {
      popupElementWindow.style.height = popupHeight + 'px';
    }

    // Create Inner Window
    var popupElementInnerWindow = document.createElement("div");
    popupElementInnerWindow.setAttribute("id","popupInnerWindow");
    popupElementInnerWindow.setAttribute("class","innerPopup");
    popupElementInnerWindow.setAttribute("className","innerPopup");
    
    // Create Header Div
    var popupElementHeader = document.createElement("div");
    popupElementHeader.setAttribute("id","popupHeader");

    if (popupCloseable)
    {
      // Create Close Button
      var popupElementCloseButton = document.createElement("div");
      popupElementCloseButton.setAttribute("className","closeButton");
      popupElementCloseButton.setAttribute("class","closeButton");
      popupElementCloseButton.onclick = closePopup;
      popupElementHeader.appendChild(popupElementCloseButton);
    }
        
    if (typeof popupTitle != "undefined")
    {
      // Create Header Title Div
      var popupElementHeaderTitle = document.createElement("div");
      popupElementHeaderTitle.setAttribute("id","popupHeaderTitle");
      popupElementHeaderTitle.setAttribute("className","title");
      popupElementHeaderTitle.setAttribute("class","title");
      
      if (popupDragable)
      {
        // Set Onmouseover to enable draging the popup
        popupElementHeaderTitle.onmouseover = function() { setDragObject(this,popupElementWindow) };
        popupElementHeaderTitle.style.cursor = "move";
      }
      
      popupElementHeaderTitle.innerHTML = popupTitle;
      popupElementHeader.appendChild(popupElementHeaderTitle);
    }
    
    popupElementInnerWindow.appendChild(popupElementHeader);

    if (typeof popupContent != "undefined")
    {
      // Create Content Div
      var popupElementContent = document.createElement("div");
      popupElementContent.setAttribute("className","content");
      popupElementContent.setAttribute("class","content");
      popupElementContent.innerHTML = popupContent;
      popupElementInnerWindow.appendChild(popupElementContent);
    }

    popupElementWindow.appendChild(popupElementInnerWindow);
    
    document.body.appendChild(popupElementWindow);
    
    // Position the popup in the center of the screen
    var left = ((windowSize[0] - popupElementWindow.offsetWidth) / 2)  + document.documentElement.scrollLeft;
    var top  = ((windowSize[1] - popupElementWindow.offsetHeight) / 2.5)  + document.documentElement.scrollTop;
    
    popupElementWindow.style.top       = top + 'px';
    popupElementWindow.style.left      = left + 'px';
  }
}

function positionCenter(elementID)
{
  var element = document.getElementById(elementID);
  var windowSize = getWindowSize();
  
  // Position the popup in the center of the screen
  var left = ((windowSize[0] - element.offsetWidth) / 2)  + document.documentElement.scrollLeft;
  var top  = ((windowSize[1] - element.offsetHeight) / 2.5)  + document.documentElement.scrollTop;
  
  element.style.top       = top + 'px';
  element.style.left      = left + 'px';
}

function setPopupContent(content)
{
  popupContent = content;
}

function setPopupTitle(title)
{
  popupTitle = title;
}

function setPopupWidth(width)
{
  popupWidth = width;
}

function setPopupHeight(height)
{
  popupHeight = height;
}

function setPopupDragable(bool)
{
  popupDraggable = bool;
}

function setPopupCloseable(bool)
{
  popupCloseable = bool;
}

function closePopup()
{
  removeElement("popupWindow");
}

function getMouseOffset(target, ev){
	ev = ev || window.event;
  
	var docPos    = getPosition(target);
	var mousePos  = mouseCoords(ev);
	return {x:mousePos.x - docPos.x, y:mousePos.y - docPos.y};
}

function getPosition(e){
	var left = 0;
	var top  = 0;

	while (e.offsetParent){
		left += e.offsetLeft;
		top  += e.offsetTop;
		e     = e.offsetParent;
	}

	left += e.offsetLeft;
	top  += e.offsetTop;

	return {x:left, y:top};
}

function mouseMove(ev){
	ev           = ev || window.event;
	var mousePos = mouseCoords(ev);

	if(dragObject){
		dragObject.style.position = 'absolute';
    
    var windowSize = getWindowSize();
        
    var topMargin = document.documentElement.scrollTop;
    var leftMargin = document.documentElement.scrollLeft;
    
    var leftPos = (mousePos.x - mouseOffset.x) - leftMargin;
    var topPos  = (mousePos.y - mouseOffset.y) - topMargin;
    
    if(leftPos<0)
    {
      leftPos = 0;
    }
    else if((leftPos+dragObject.offsetWidth)>windowSize[0])
    {
      leftPos = windowSize[0] - dragObject.offsetWidth; 
    }
    
    if (topPos<0)
    {
      topPos = 0;
    } 
    else if ((topPos+dragObject.offsetHeight)>windowSize[1])
    {
      topPos = windowSize[1] - dragObject.offsetHeight;
    }
    
		dragObject.style.top      = (topMargin + topPos) + 'px';
		dragObject.style.left     = (leftMargin + leftPos) + 'px';

		return false;
	}
}

function setDragObject(dragHandler,dragContainer){

  if(!dragHandler) return;

	dragHandler.onmousedown = function(ev){
		dragObject = dragContainer;
		mouseOffset = getMouseOffset(this, ev);
		return false;
	}
}

function mouseUp(ev){
	dragObject = null;
}

function mouseCoords(ev){
	if(ev.pageX || ev.pageY){
		return {x:ev.pageX, y:ev.pageY};
	}
	return {
		x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
		y:ev.clientY + document.body.scrollTop  - document.body.clientTop
	};
}
