// -----------------------------------------------------------------------------------------
// 1 - Clique na Imagem faz aparecer/desaparecer o panel. O aparecimento é fixo anulando 
//     o efeito onmouseout do SourceControl e do Panel.
// 2 - Clique no Panel anula o efeito do onmouseoout no Panel. No caso do SourceControl,
//     o onmouseout desaparece com o Panel.

var vimgctrl = new Array(); // false;  // Flag indicador de clique no Imagem SourceControl.
var vfix = new Array(); // true;       // Flag que permite desaparecer o Panel = true
var vclear = new Array(); // true;     // Flag que indica se houve click no Panel.
var vobjimgMulti = new Array();        // Flag que indica se a posição do array esta ocupada.
var vyHiddenTF = new Array();          // Viewstate true ou false
var vyHiddenTop = new Array();         // ViewState posição Top ( somente preenchido para IQPabelViewBack = True )
var vyHiddenLeft = new Array();        // ViewState posição Left ( somente preenchido para IQPabelViewBack = True )
var vyGrupo = new Array();             // Grupos de SourceControls com sincronização do evento onclick
var vySourceClId = new Array();        // ClientID dos SourceControls
var vyPanelClId = new Array();         // ClientID dos Panels controlados pelos respectivos SourceControls
var vyObjKey = new Array();            // Índice dos MostrerControls Ativos
var vyImageOver = new Array();         // BacgGround-Imagem a ser utilizada no evento onmouseover.
var vyImageOut = new Array();          // BacgGround-Imagem a ser utilizada no evento onmouseoout.
var vyMPanelIn = new Array();          // Indica que o Panel esta Ativo através da propriedade IQSourceJsKey ou não = ""
var vniContadorObj = 0;                // Contador da posição do próximo IQMonster a ser inicializado
var vInRunGrupo = false;               // Variável que indica processo de click nos membros do Grupo = True
var vPanelShow = new Array();

var vMonsterBrowser = iqf_GetBrowser();
var vMonsterBrowserTipo = vMonsterBrowser.browserName;

// -----------------------------------------------------------------------------------------------------------------
// Função para inicialização dos Arrays chamada a partir ClintScript no Render do Código VB.Net

function iq_InitMonster(vkey,vPanelViewBack,vHiddenTF,vHiddenTop,vHiddenLeft,vSourceClientID,vGrupo,vImageover,vImageout,vpanel)
{

if (typeof(vobjimgMulti[vkey]) == "undefined")
   {
    vimgctrl[vkey] = false;
    vfix[vkey] = true;
    vclear[vkey] = true;
    vobjimgMulti[vkey] = true;
    vyMPanelIn[vkey] = "";
    vyGrupo[vkey] = vGrupo;                    // -------------------------------
    vySourceClId[vkey] = vSourceClientID;      //
    vyPanelClId[vkey] = vpanel;                // Estrutura de dados que só faz
    vyImageOver[vkey] = vImageover;            // sentido para IQIndex diferentes
    vyImageOut[vkey] = vImageout;              // 
    vyObjKey[vniContadorObj] = vkey;           // -------------------------------
    vPanelShow[vkey] = true;
    vniContadorObj = vniContadorObj + 1;
   }
if (vPanelViewBack == true) // Atualiza somente para os Controles com IQPanelViewBack = true
   {
    vyHiddenTF[vkey] = vHiddenTF;
    vyHiddenTop[vkey] = vHiddenTop;
    vyHiddenLeft[vkey] = vHiddenLeft;
   }
   
}

// -----------------------------------------------------------------------------------------------------------------
// Eventos nos controles SourceControl e Panel

// onmouseover do SourceControl ------------------------------------------------------------------------------------

function iq_panelInimgMulti(vCtrlObj,vpanel,i,vspaceX,vspaceY,vSourceY,vSourceX,vTargetY,vTargetX,vposestatica,vposabsoluta,
                            vContainer,vshowpanel,vDelayIn,vJsKey,vJsonmouseover)
{

if (! vimgctrl[i]) 
   {
    if (vJsonmouseover != "") { eval(vJsonmouseover); }
    
    vfix[i] = true;
    vclear[i] = true;
    document.getElementById(vpanel).style.zIndex = 100000; vPanelShow[i] = true;
    
    if (vshowpanel == true)
        {
        // iq_ShowMonsterControl(vCtrlObj,vpanel,vspaceX,vspaceY,vSourceY,vSourceX,vTargetY,vTargetX,vposestatica,vposabsoluta,vContainer);
        if ( vDelayIn == (-1) ) { vDelayIn = 1; }
        setTimeout("iq_ShowMonsterControl('" + vCtrlObj + "','" + vpanel + "'," + vspaceX + "," + vspaceY + "," + vSourceY + "," + vSourceX + "," + 
                               vTargetY + "," + vTargetX + "," + vposestatica + "," + vposabsoluta + ",'" + vContainer + "','" + i + "')",vDelayIn);
        vyMPanelIn[i] = vJsKey; // Liga o Panel
        }
    if (vyImageOver[i] != "") 
        {
        document.getElementById(vySourceClId[i]).style.backgroundImage = "url(" + vyImageOver[i] + ")";
        }
   }
}

// Clique no SourceControl -------------------------------------------------------------------------------------------------

function iq_clickimgMulti(vCtrlObj,vpanel,i,vtexto,vMeUniqueId,vtrigger,vspaceX,vspaceY,vSourceY,vSourceX,vTargetY,vTargetX,
                          vposestatica,vposabsoluta,vindexPanelView,vPanelViewBack,vContainer,vJsKey,vJsonclickOn,vJsonclickOff)                        
{

if ( ! vimgctrl[i] )
    {
    
      if (vJsonclickOn != "") { eval(vJsonclickOn); }
     
      document.getElementById(vpanel).style.zIndex = 1;
      
      // Verifica se a rotina esta atuando para grupo de clicks sincronizados
   
      if (vyGrupo[i] != "") {  iq_MonsterSimulaTabs(i,vyGrupo[i]); }

    
      // Exibe o Panel
      iq_ShowMonsterControl(vCtrlObj,vpanel,vspaceX,vspaceY,vSourceY,vSourceX,vTargetY,vTargetX,vposestatica,vposabsoluta,vContainer,i);
      vyMPanelIn[i] = vJsKey; // Liga o Panel
      if (vyImageOver[i] != "") 
            {
            // document.getElementById(vySourceClId[i]).style.background =  "background-image: url('" + vyImageOver[i] + "') "; 
            document.getElementById(vySourceClId[i]).style.backgroundImage = "url(" + vyImageOver[i] + ")";
            }
      
      vimgctrl[i] = true; // On-Off do click
      
      // Pega a posição em que o panel foi exibido e salve em vHiddenTop e vHiddenLeft
      
      var v_bl_Save = false;
      
      if (vindexPanelView == "-1") // Não tem PanelViewBack redirecionado
         { 
         if (vPanelViewBack == true) // É responsável pelo PanelViewBack
               {
                 var vHFtf = document.getElementById(vyHiddenTF[i]);     // HiddenFields do VB.Net
                 var vHTop = document.getElementById(vyHiddenTop[i]);
                 var vHLeft = document.getElementById(vyHiddenLeft[i]);
                 v_bl_Save = true;
               } 
         }
      else // Controle com PanelViewBack redirecionado
         {
         var vHFtf = document.getElementById(vyHiddenTF[vindexPanelView]); // HidenFields do IQIndex [ vindexPanelView ]
         var vHTop = document.getElementById(vyHiddenTop[vindexPanelView]);
         var vHLeft = document.getElementById(vyHiddenLeft[vindexPanelView]);
         v_bl_Save = true;
         }   

      // Pega as coordenadas atualizadas do Panel e salva nos HiddenFields do MonsterControl no Vb.Net marcando a aparição
      // como True.
      if ( v_bl_Save == true )  
         {
          var vSourceTopLeft = iqf_GetTopLeft(document.getElementById(vpanel));
          var vparTop = vSourceTopLeft.Top + "px";
          var vparLeft = vSourceTopLeft.Left + "px";
          vHTop.value = vparTop;
          vHLeft.value = vparLeft;
          vHFtf.value = "True";
         } 

      // Transfere o UniqueID do MonsterControl para o controle determinado ( caso exista ).
      if (! (vtexto == "")) { document.getElementById(vtexto).value = vMeUniqueId; }
      
      // Vai para a função que realizará o Trigger  ( caso exista ).
      iq_TriggerimgMulti(vtrigger,vpanel);
      
    }
else // Click Off - Desaparece com o Panel.
    {
    
     if (vJsonclickOff != "") { eval(vJsonclickOff); }
     
     if (vindexPanelView == "-1")   // Sequência de comandos análoga ao Click On.
     { if (vPanelViewBack == true) 
          {
           var vHFtf = document.getElementById(vyHiddenTF[i]);
           vHFtf.value = "False";
          }
     }
     else
     {
       var vHFtf = document.getElementById(vyHiddenTF[vindexPanelView]);
       vHFtf.value = "False";
     }
     
    document.getElementById(vpanel).style.visibility = "hidden";
    vyMPanelIn[i] = ""; // Desligamento do Panel
    if (vyImageOut[i] != "") 
          {
           document.getElementById(vySourceClId[i]).style.backgroundImage = "url(" + vyImageOut[i] + ")";
          }
    vimgctrl[i] = false; // On-Off do click
    }
}

// onmouseout do SourceControl -------------------------------------------------------------------------------------

function iq_panelOutimgMulti(vpanel,i,vdelay,vJsonmouseout) 

{

document.getElementById(vpanel).style.zIndex = 1; 

if (! vimgctrl[i]) 
   {
   if (vJsonmouseout != "") { eval(vJsonmouseout); }
   setTimeout("Func1imgMulti('" + vpanel + "','" + i +  "')", vdelay); 
   }  
   
}

// Função auxiliar que desaparece o Panel --------------------------------------------------------------------------

function Func1imgMulti(vpanel,i) 
{
if (vfix[i])
   {
   document.getElementById(vpanel).style.visibility = "hidden"; vPanelShow[i] = false;
   vyMPanelIn[i] = ""; // Desligamento do Panel
   if (vyImageOut[i] != "")
         {
            document.getElementById(vySourceClId[i]).style.backgroundImage = "url(" + vyImageOut[i] + ")";
         }
   }
}

// onmouseover do Panel --------------------------------------------------------------------------------------------

function iq_panelFiximgMulti(vpanel,i,vindexkeep,vJsKey,vJsonmouseover) 

{

if (vJsonmouseover != "") { eval(vJsonmouseover); }
 
if (vclear[i]) { vfix[i] = false; }

if (vyImageOver[i] != "") 
      {
      document.getElementById(vySourceClId[i]).style.backgroundImage = "url(" + vyImageOver[i] + ")";
      }
if (!(vindexkeep == "-1")) 
   { 
    if (vobjimgMulti[vindexkeep]) { vfix[vindexkeep]=false; }
   }

if (! vimgctrl[i])
   {
   if (vclear[i])
      {
       document.getElementById(vpanel).style.visibility = "visible";   
       // vyMPanelIn[i] = vJsKey; // Liga o Panel do Panel
      } 
   }
}

// onmouseout do panel ---------------------------------------------------------------------------------------------

function iq_panelFixOutimgMulti(vpanel,i,vdelay,vJsonmouseout) 

{
  if (! vimgctrl[i])
     {
      if (vclear[i])
         {
          if (vJsonmouseout != "") { eval(vJsonmouseout);}
          vfix[i] = true;
          setTimeout("Func1imgMulti('" + vpanel + "','" + i + "')", vdelay); 
         }
     }
}

// Clique no Panel --------------------------------------------------------------------------------------------------

function iq_panelFixVisimgMulti(i,vhidepanel,vpanel,vHiddenTF,vindexPanelView,vPanelViewBack,vJsonmouseClick)

{

if (vDragSwit == false)
   {  vIQDrag = false;
      vDragMvFirst = true;
      
      if (! vimgctrl[i]) 
      {
         if (vJsonmouseClick != "") { eval(vJsonmouseClick); }
         if(vhidepanel == true)
         {
           iq_panelFixClose(vpanel,i,vHiddenTF,vindexPanelView,vPanelViewBack)
         }
         else
         {
           vfix[i] = false;
           vclear[i] = false; 
         }
      }
   }
else
   {
   vDragSwit = false;
   }   
}

// Função que simula um clique no objecto designado na propriedade ---------------------------------------------------

function iq_TriggerimgMulti(vtrigger,vpanel) {
if (! (vtrigger == "") ) {
     var vobj = document.getElementById(vtrigger);
     vobj.click(); 
     }
}

// -------------------------------------------------------------------------------------------------------------------

// Função de posicionamento de um objeto em função de outro objeto
//
// Parâmetros
// 1 - vsourceobj - Objeto origem
// 2 - vtargetobj - Obejeto a ser posicionado em função de vsourceobj ( Panel )
// 3 - vespacoY - Espaço em px a ser deixa entre os objetos na Altura
// 4 - vespacoX - Espaço em px a ser deixa entre os objetos na Largura
// 5 - vsourceshowH - Referência a altura do objeto source ( Top[1], Bottom[2],Middle[3] )
// 6 - vsourceshowW - Referência a largura do objeto source ( Left[1], Right[2],Center[3] )
// 7 - vtargetshowH - Referência a altura do objeto target ( Left[1], Right[2],Middle[3] )
// 8 - vtargetshowW - Referência a largura do objeto target ( Left[1], Right[2],Center[3] )
// 9 - vposestatica - Indica se o objeto target (absolte position) não sofre ajustes de posição
//                    em função do tamanho da página. (True = estático)
// 10 - vposabsoluta -  Indica que o objeto não tem posicionamento em realção ao objeto Source
// 11 - vContainer - ClientID do Container do SourceControl o qual será a referência primária para Top-Left.
//

function iq_ShowMonsterControl(vsourceobj,vtargetobj,vespacoX,vespacoY,vsourceshowH,vsourceshowW,vtargetshowH,vtargetshowW,
         vposestatica,vposabsoluta,vContainer,i)
{

if (vposabsoluta) 
 
 {
    var vSourceTopLeft = iqf_GetTopLeft(document.getElementById(vsourceobj)); // (Top,Left do objeto source)
    var vsourceOrigTop =  parseInt(vSourceTopLeft.Top);
    var vsourceOrigLeft =  parseInt(vSourceTopLeft.Left);
        
    var vsourceWidth = iqf_calculawidth(vsourceobj);   // Largura do objeto source
    var vsourceHeight = iqf_calculaheight(vsourceobj); // Altura do objeto source
    var vtargetWidth = iqf_calculawidth(vtargetobj);   // Largura do objeto target (panel)
    var vtargetHeight = iqf_calculaheight(vtargetobj); // Altura do objeto target (panel)
    
    if (vsourceshowW == 1) { vsourceNewLeft = vsourceOrigLeft; } // Ajuste na posição horizontal
    if (vsourceshowW == 2) { vsourceNewLeft = vsourceOrigLeft + vsourceWidth; } 
    if (vsourceshowW == 3) { vsourceNewLeft = vsourceOrigLeft + parseInt(vsourceWidth/2); } 
     
    if (vsourceshowH == 1) { vsourceNewTop = vsourceOrigTop; }   // Ajuste na posição vertical
    if (vsourceshowH == 2) { vsourceNewTop = vsourceOrigTop + vsourceHeight; }
    if (vsourceshowH == 3) { vsourceNewTop = vsourceOrigTop + parseInt(vsourceHeight/2); }
    
    var vCoordTop,vCoordLeft
    
    // Calculo da coordenada Left de plotagem do objeto target
    if (vtargetshowW == 1) { vCoordLeft = vsourceNewLeft + vespacoX; }
    if (vtargetshowW == 2) { vCoordLeft = vsourceNewLeft - vespacoX- vtargetWidth; }
    if (vtargetshowW == 3) { vCoordLeft = vsourceNewLeft - parseInt(vtargetWidth/2); }
    
     // Calculo da coordenada Top de plotagem do objeto target
    if (vtargetshowH == 1) { vCoordTop = vsourceNewTop + vespacoY ; } 
    if (vtargetshowH == 2) { vCoordTop = vsourceNewTop - vespacoY - vtargetHeight; }
    if (vtargetshowH == 3) { vCoordTop = vsourceNewTop - parseInt(vtargetHeight/2); }
    
    // Análise de overflow da página para vposestatica = False
    
    if (vposestatica ) 
    {
    var vhWindow = parseInt(window.screen.height);
    var vwWindow = parseInt(iqf_getBrowserWidth());
    
    if (vsourceOrigLeft < vCoordLeft) 
        {
        if ( (vsourceNewLeft + vtargetWidth + vespacoX) > vwWindow ) 
           vCoordLeft = vsourceOrigLeft - vtargetWidth;
        }
    else
        {
        if ( (vCoordLeft + vtargetWidth + vespacoX) > vwWindow ) 
           vCoordLeft = vsourceOrigLeft - vtargetWidth;
        }
        
    if (vCoordLeft < 0) { vCoordLeft = vsourceOrigLeft; } 
    
    
    if (vsourceOrigTop < vCoordTop) 
        {
        if ( (vsourceNewTop + vtargetHeight + vespacoY) > vhWindow ) 
           vCoordTop = vsourceOrigTop - vtargetHeight;
        }
    else
        {
        if ( (vCoordTop + vtargetHeight + vespacoY) > vhWindow ) 
           vCoordTop = vsourceOrigTop - vtargetHeight;
        }
        
    if (vCoordTop < 0) { vCoordTop = vsourceOrigTop + vsourceHeight; } 
    }
    
    if (vContainer != "") {
       var vxypanel = iqf_GetTopLeft(document.getElementById(vContainer)); }
    else {
       var vxypanel =  {Top:0, Left:0}; }
    
    document.getElementById(vtargetobj).style.top = vCoordTop - vxypanel.Top + 'px';
    document.getElementById(vtargetobj).style.left = vCoordLeft - vxypanel.Left + 'px';
    
 }   
    if (vPanelShow[i] == true) // Proteção para o delay de onmouseover do SourceControl
       { document.getElementById(vtargetobj).style.visibility = "visible"; }
   
}

// ------------------------------------------------------------------------------------------------------------------
//
// Função que simula o fechamento do Panel --------------------------------------------------------------------------

function iq_panelFixClose(vpanel,i,vHiddenTF,vindexPanelView,vPanelViewBack)
{

     if (vindexPanelView == "-1") // Análogo ao Click Off no SourceControl.
     { if (vPanelViewBack == true) 
          {
           var vHFtf = document.getElementById(vyHiddenTF[i]);
           vHFtf.value = "False";
          }
     }
     else
     {
       var vHFtf = document.getElementById(vyHiddenTF[vindexPanelView]);
       vHFtf.value = "False";
     }
     
    document.getElementById(vpanel).style.visibility = "hidden";
    vyMPanelIn[i] = ""; // Desligamento do Panel
    if (vyImageOut[i] != "") 
          {
          document.getElementById(vySourceClId[i]).style.backgroundImage = "url(" + vyImageOut[i] + ")";
          }
    vimgctrl[i] = false; 

}

// Função para simulação de tabs ---------------------------------------------------------------------------------

function iq_MonsterSimulaTabs(vkey,vGrupo)
{

var vNomeKey = "";
var vHFtf = "";

for (var i = 0; i < vyObjKey.length; i++)
  {  
  if ( vyObjKey[i] != vkey)
     {
     vNomeKey = vyObjKey[i];
     if (vyGrupo[vNomeKey] == vGrupo)
        {
        
        vHFtf = document.getElementById(vyHiddenTF[vNomeKey]);
        vHFtf.value = "False";
     
        document.getElementById(vyPanelClId[vNomeKey]).style.visibility = "hidden";
        vyMPanelIn[vNomeKey] = ""; // Desligamento do Panel
        if (vyImageOut[vNomeKey] != "") 
           {
           document.getElementById(vySourceClId[vNomeKey]).style.backgroundImage = "url(" + vyImageOut[vNomeKey] + ")";
           }
        vimgctrl[vNomeKey] = false; // On-Off do click
        
        }
     }
  }
}

// ---------------------------------------------------------------------------------------------

// ------------------------------------------------ Fim -------------------------------------------------------------

// Função para mover um objeto em função das coordenadas do Mouse.
// A variável Pública "vIQDrag" ( boolean ) é usada para contralar a execução do mivimento.
// o Controle a ser movido devrá ter seu ClientId na variável pública "vIQPanelDrag"

function iqf_MoveCrtlFromMousePos(e)
{
 if (vIQDrag == true) 
    { 
      var posx = 0;
	  var posy = 0;

	  if (!e) { var e = window.event; }

	  if (e.pageX || e.pageY)
	     { posx = e.pageX;
		   posy = e.pageY;
	     }
	  else if (e.clientX || e.clientY)	
	     { posx = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		   posy = e.clientY + document.body.scrollTop  + document.documentElement.scrollTop;
	     }

	// posx e posy contem a posição do mouse no documento
	
     var vwidth = iqf_calculawidth(vIQPanelDrag);
     var vheight = iqf_calculaheight(vIQPanelDrag);
   
     if (vDragMvFirst == true) 
        {  
         var vPnTopLeft = iqf_GetTopLeft(document.getElementById(vIQPanelDrag))
         vPnheight = posy - vPnTopLeft.Top;
         vPnwidth = posx - vPnTopLeft.Left;
         vDragMvFirst = false;
        }
        
     document.getElementById(vIQPanelDrag).style.top = posy - vPnheight + "px";
     document.getElementById(vIQPanelDrag).style.left = posx - vPnwidth + "px";
     
    }
}

// Funções auxiliares de movimentação de um objeto em função da pos~ição do mouse -----------------

document.onmousemove = iqf_MoveCrtlFromMousePos; // Ativação do mousemove para o documento como um todo
var vIQDrag = false; // Indiga modo Drag = true
var vIQtimeDrag = ""; // Variável do set time out do drag. É desativada em onmouseup
var vIQPanelDrag = ""; // ClientId do Objeto que sofrerá o Drag
var vDragSwit = false; // Permissão de Clique no Panel do IQMosnster = false click ativo.

var vDragMvFirst = true;
var vPnheight = 0;
var vPnwidth = 0;

// Função que controla o onmousedown e onmousup ----------------------------------------------------           
function iqf_drag(vtp,vPn,vCl)
{
if (vtp == "down")
   { vIQPanelDrag = vPn;
    if (vCl == "0") { vIQtimeDrag = setTimeout("iqf_dragtrue()",100); }
    else {iqf_dragtrue(); }
   }
else
   { clearTimeout(vIQtimeDrag);
     document.getElementById(vIQPanelDrag).style.cursor = "Default";
     vIQDrag = false;
     vDragMvFirst = true;
   }
}

// Temporizador para a ativação do onmousedown -----------------------------------------------------
function iqf_dragtrue() 
{ 
 vIQDrag = true; 
 vDragSwit = true;
 vDragMvFirst = true;
}