﻿/// <reference name="MicrosoftAjax.js"/>

var FloatCardID = "FloatCard";
var FloatCardContentID = "FloatCardContent";
var FloatCardInitialContent = null;

function FloatCard_MMove(event, handler)
{
  event = new Sys.UI.DomEvent(event);
  this.LastMousePos = new Sys.UI.Point(event.clientX, event.clientY);
}

function FloatCard_MEnter(event, contentPath, parameters) {
  event = new Sys.UI.DomEvent(event);
  var fromElement = event.rawEvent.relatedTarget ? event.rawEvent.relatedTarget : event.rawEvent.fromElement;
  
  if (this == fromElement || containsElement(this, fromElement))
    return;
  
  var floatCard = $get(FloatCardID);
  
  try{$removeHandler(floatCard, "mouseover", FloatCard_CardMEnter);}catch(ex){}
  $addHandler(floatCard, "mouseover", FloatCard_CardMEnter);
  try{$removeHandler(floatCard, "mouseout", FloatCard_CardMOut);}catch(ex){}
  $addHandler(floatCard, "mouseout", FloatCard_CardMOut);
     
  if (floatCard.FCHideTimeoutID)
  {
    clearTimeout(floatCard.FCHideTimeoutID);
    floatCard.FCHideTimeoutID = null;
  }
     
  if (floatCard.ShownFor != this || floatCard.style.display == "none") {
    var _this = this;
    floatCard.FCShowTimeoutID = setTimeout(function(){FloatCard_ShowFloatCard.call(_this, contentPath, parameters)}, 700);
  }
}

function FloatCard_MOut(event)
{
  event = new Sys.UI.DomEvent(event);
  var toElement = event.rawEvent.relatedTarget ? event.rawEvent.relatedTarget : event.rawEvent.toElement;
  
  if (this == toElement || containsElement(this, toElement))
    return;
 
  var floatCard = $get(FloatCardID);
  
  if (floatCard == toElement || containsElement(floatCard, toElement))
    return;
  
  if (floatCard.FCShowTimeoutID)
  {
    clearTimeout(floatCard.FCShowTimeoutID);
    floatCard.FCShowTimeoutID = null;
  }
  
  if (floatCard.style.display != "none")
    floatCard.FCHideTimeoutID = setTimeout(FloatCard_HideFloatCard, 700);
}

function FloatCard_CardMEnter(event)
{
  if (this.FCHideTimeoutID)
  {
    clearTimeout(this.FCHideTimeoutID);
    this.FCHideTimeoutID = null;
  }
}

function FloatCard_CardMOut(event)
{
  var toElement = event.rawEvent.relatedTarget ? event.rawEvent.relatedTarget : event.rawEvent.toElement;
  
  if (this == toElement || containsElement(this, toElement))
    return;
  
  var floatCard = $get(FloatCardID);
  
  if (floatCard.ShownFor == toElement || containsElement(floatCard.ShownFor, toElement))
    return;
  
  FloatCard_MOut(event, floatCard.ShownFor);
}

function FloatCard_ShowFloatCard(appRelativeFilePath, parameters)
{
  if (typeof(parameters) === "undefined")
    parameters = null;
  
  var floatCard = $get(FloatCardID);

  if (FloatCardInitialContent == null)
    FloatCardInitialContent = $get(FloatCardContentID, floatCard).innerHTML;
  else
    $get(FloatCardContentID, floatCard).innerHTML = FloatCardInitialContent;
  OS.TC.Portal.WebSite.Modules.Core.WebServices.ControlRenderer.RenderControl(appRelativeFilePath, parameters, FloatCard_OnDynamicContentReceived);
  floatCard.style.position = "absolute";
  floatCard.style.display = "block";
  
  var loc = this.LastMousePos;
  var bodyHeight = document.documentElement.offsetHeight || document.body.offsetHeight;
  var bodyWidth = document.documentElement.offsetWidth || document.body.offsetWidth;
  var bodyScrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
  var bodyScrollTop = document.documentElement.scrollTop || document.body.scrollTop;

  floatCard._xpos = loc.x + bodyScrollLeft;
  floatCard.style.left = floatCard._xpos + "px";
  floatCard._ypos = loc.y + bodyScrollTop;
  floatCard.style.top = floatCard._ypos + "px";
  floatCard.ShownFor = this;
  
}

function FloatCard_HideFloatCard()
{
  var floatCard = $get(FloatCardID);

  floatCard.ShownFor = null;
  floatCard.style.display = "none";
}

function FloatCard_OnDynamicContentReceived(result, userContext, methodName) {
  var floatCard = $get(FloatCardID);
  floatCard.style.display = "none";
  $get(FloatCardContentID, floatCard).innerHTML = result;

  var bodyHeight = document.documentElement.offsetHeight || document.body.offsetHeight;
  var bodyWidth = document.documentElement.offsetWidth || document.body.offsetWidth;
  var bodyScrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
  var bodyScrollTop = document.documentElement.scrollTop || document.body.scrollTop;
  var totalHeight = bodyHeight + bodyScrollTop;
  floatCard.style.display = "block";

  var xPos = floatCard._xpos;
  var yPos = floatCard._ypos;
  if ((Sys.Browser.agent == Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
    floatCard.style.width = 300 + "px";
    xPos -= 20;
    yPos -= 20;
  }
  var cardWidth = Math.max(floatCard.offsetWidth, 300);
  var cardHeight = Math.max(floatCard.offsetHeight, 160);

  if (xPos + cardWidth > bodyWidth) xPos = bodyWidth - cardWidth;
  if (yPos + cardHeight > totalHeight) yPos = totalHeight - cardHeight;

  floatCard.style.left = xPos + "px";
  floatCard.style.top = yPos + "px";
}