//
// Popup Previewer
//
// This module requires core.js
//

function CPopupPreview(a_szSelector, a_optPreviewImageWidth, a_optPreviewImageHeight)
{
   //
   // Public Variables
   //
   var m_szSelector = a_szSelector;
   this.m_szSelector = m_szSelector;

   var m_iPreviewImageWidth = (a_optPreviewImageWidth)? a_optPreviewImageWidth : 400;
   this.m_iPreviewImageWidth = m_iPreviewImageWidth;

   var m_iPreviewImageHeight = (a_optPreviewImageHeight) ? a_optPreviewImageHeight : 400;
   this.m_iPreviewImageHeight = m_iPreviewImageHeight;
   //
   // Private Variables
   //
   var m_arrElements = null;
   var m_oContainer = null;
   var m_oBody = null;

   var m_szTag = null;
   var m_szClass = null;
   
   var m_iStartDelayPopupTime = null;
   var m_iPopupPreviewDelay = 500;

   var m_iBorderLeft = 10;
   var m_iBorderRight = 10;
   var m_iBorderTop = 10;
   var m_iBorderBottom = 10;
   var m_iMouseOffsetTop = 15;
   var m_iMouseOffsetLeft = 30;
   //
   // Constructor
   //
   if(m_szSelector)
   {
      if( -1 == m_szSelector.indexOf('.') )
      {
         return;
      }

      m_szTag = m_szSelector.split(".")[0];
      m_szClass = m_szSelector.split(".")[1];

      addByTagClass(m_szTag,m_szClass);
   }
   function refresh()
   {
      addByTagClass(m_szTag,m_szClass);
   }
   this.refresh = refresh;

   function setMouseOffsetTop(a_iNewMouseOffsetTop)
   {
      m_iMouseOffsetTop = a_iNewMouseOffsetTop;
   }
   this.setMouseOffsetTop = setMouseOffsetTop;

   function setMouseOffsetLeft(a_iNewMouseOffsetLeft)
   {
      m_iMouseOffsetLeft = a_iNewMouseOffsetLeft;
   }
   this.setMouseOffsetLeft = setMouseOffsetLeft;

   function displayPopupPreview(a_e)
   {
      var oe = getElementFromEvent(a_e);
      if(!oe) return;
      var oPathInfo;
      if("img" == oe.tagName.toLowerCase())
      {
         if(-1 == oe.src.search(/spacer.gif/))
         {
            oPathInfo = getPathInfo(oe.src);
         }
         else
         {
            var szPath = oe.style.backgroundImage;
            szPath = szPath.replace(/url[(][']?/i, '');
            szPath = szPath.replace(/[']?[)]/i, '');
            oPathInfo = getPathInfo(szPath);
         }
      }
      else
      {
         var szPath = oe.style.backgroundImage;
         szPath = szPath.replace(/url[(][']?/i, '');
         szPath = szPath.replace(/[']?[)]/i, '');
         oPathInfo = getPathInfo(szPath);
      }
      if(!oPathInfo) return;

      m_oBody.style.backgroundImage = "url('"+ oPathInfo.dirname + oPathInfo.filename + '_preview.' + oPathInfo.ext +"')"

      m_iStartDelayPopupTime = (new Date()).getTime();

      oe.onmousemove = movePopupPreview;
   }

   function hidePopupPreview(a_e)
   {
      var oe = getElementFromEvent(a_e);
      if(!oe) return;

      oe.onmousemove = null;
      m_oContainer.style.display = 'none';
   }

   function movePopupPreview(a_e)
   {
      var iElapsedDelayPopupTime = (new Date()).getTime() - m_iStartDelayPopupTime;
      if(m_iPopupPreviewDelay > iElapsedDelayPopupTime)
      {
         //Do nothing
         return;
      }

      var oe = getElementFromEvent(a_e);
      if(!oe) return;

      var iMouseX = getMouseX(a_e);
      var iMouseY = getMouseY(a_e);

      var iClientWidth = getClientWidth();
      var iClientHeight = getClientHeight();

      m_oContainer.style.left = Math.min(iMouseX-0 + m_iMouseOffsetLeft, iClientWidth - m_oContainer.offsetWidth);
      m_oContainer.style.top = Math.min(iMouseY-0 + m_iMouseOffsetTop, iClientHeight - m_oContainer.offsetHeight);

      if('none' == m_oContainer.style.display)
      {
         m_oContainer.style.display = 'block';
      }
   }

   function addByTagClass(a_szTag,a_szClass)
   {
      m_oContainer = ei(a_szClass + '_container');
      m_oBody = ei(a_szClass + '_body');

      m_arrElements = etc(a_szTag,a_szClass);
      m_szTag = a_szTag;
      m_szClass = a_szClass;

      if(m_arrElements && m_oContainer && m_oBody)
      {
         for(var i = 0; i < m_arrElements.length; i++)
         {
            m_arrElements[i].onmouseover = displayPopupPreview;
            m_arrElements[i].onmouseout = hidePopupPreview;
         }
      }
   }

} //End of function CRoundedCorners()

