
function ExWinInit(name,  offsetLeft, offsetTop, alignment, anyIter, anyTime, 
					staticHover, popupHover, popupLatency, hideLatency, maxHeight, onPopup, onHide)
{
  var ExWin = document.getElementById(name); 
  
  if( ExWin == null )
  {
     setTimeout("ExWinInit('"+name+"',"+offsetLeft+","+offsetTop+","+alignment+","+anyIter+","+anyTime+","
                    +"'"+staticHover+"','"+popupHover+"',"+popupLatency+","+hideLatency+","+maxHeight+",'"+onPopup+"','"+onHide+"');",500);
     return;
  } 
  
  ExWin.alignment = alignment;
  ExWin.DT = document.getElementById(name+"Popup")
  ExWin.F = document.getElementById(name+"Anim")
    
  ExWin.oX = offsetLeft
  ExWin.oY = offsetTop;

  ExWin.AnyIter = anyIter;
  ExWin.AnyTime = anyTime;

  ExWin.popupLatency = popupLatency;
  ExWin.hideLatency = hideLatency;
  ExWin.onPopup = onPopup;
  ExWin.onHide = onHide;
  
  ExWin.IsHover=false;
  
  ExWin.className_ = ExWin.className;
  ExWin.DT.className_=ExWin.DT.className
   
  // ExWin.DT.onmouseover = function(){ ExWin.IsHover=true; if(popupHover!=''){ExWin.DT.className=popupHover;};ExWinPopup(ExWin,true);}
  // ExWin.DT.onmouseout = function(){ if(popupHover!=''){ExWin.DT.className=ExWin.DT.className_};ExWinPopup(ExWin,false);ExWin.IsHover=false; }

  var overflow = (ExWin.DT.clientHeight > maxHeight);
    ExWin.DT.style.height = ((overflow) ? maxHeight : ExWin.DT.scrollHeight) + "px";
    ExWin.DT.style.width = ExWin.DT.scrollWidth + ((overflow) ? 20 :0) + "px";

  ExWin.DT.maxHeight = maxHeight;
    
  if(overflow) try { ExWin.DT.style.overflow="none"; } catch(e) { }

  ExWin.Initialized = true;
}

function ExWinReposition(ExWin)
{
  var clientWidth = document.body.clientWidth - 20;
  var width = ExWin.DT.offsetWidth;
  var absX = ExWin.DT.offsetLeft 
  var d = ExWin.DT
  while(d = d.offsetParent)
    absX += d.offsetLeft

  if(clientWidth<(absX+width))
  {
    var diff = clientWidth - absX -width
    ExWin.DT.style.left = ExWin.DT.offsetLeft + diff + "px"
  }
}

function ExWinCallClientFunction(name, ExWin)
{
    if(name!=null &&  name!="")
      eval( name + "(ExWin);");
}

function ExWinSetPosition(ExWin, obj)
{
  obj.style.top = ExWin.oY + (ExWin.offsetHeight-20) + "px";
  obj.style.left = ExWin.oX + (ExWin.offsetWidth - obj.offsetWidth )*(1+ExWin.alignment)/2 + "px";
}

function ExWinPopup(ExWin,value)
{
  if(ExWin.timer!=null ) window.clearTimeout(ExWin.timer)
  if(value){
    if(ExWin.status=="on") return;
    var timeout = (ExWin.status=="active") ? 0 : ExWin.popupLatency
    if(ExWin.AnyIter>0 && ExWin.AnyTime>0)
      ExWin.timer = window.setTimeout(function(){ExWinAnimateStart(ExWin,true,ExWin.F.curIter);},timeout)
    else
      ExWin.timer = window.setTimeout(function(){ExWinSetVisibility(ExWin,true);},timeout)
  }else{
    if(ExWin.status=="off") return;
    var timeout = (ExWin.status=="active") ? 0 : ExWin.hideLatency
    if(ExWin.AnyIter>0 && ExWin.AnyTime>0)
      ExWin.timer = window.setTimeout(function(){ExWinAnimateStart(ExWin,false,ExWin.F.curIter);},timeout)
    else
      ExWin.timer = window.setTimeout(function(){ExWinSetVisibility(ExWin,false);},timeout)
  }
}

function ExWinSetVisibility(ExWin, value)
{
      if(value==true){
        ExWinSetPosition(ExWin,ExWin.DT);
        if( ExWin.ShowBorder )
        {
            ExWin.DT.style.borderWidth = "1px";
        }
        else
        {
            ExWin.DT.style.borderWidth = "0px";
        }
        if( ExWin.ShowOutline )
        {
            ExWin.DT.style.visibility = "visible";        
        }
        ExWin.style.zIndex = "999"
        ExWinReposition(ExWin);
      }else{
        ExWin.DT.style.visibility = "hidden"
        ExWin.style.zIndex = "0"
        ExWin.DT.style.left = "-10000px"
      }
}

function ExWinAnimateStart(ExWin, inout, curIter)
{
    if(ExWin.F.timer!=null) window.clearTimeout(ExWin.F.timer);
    if(curIter==null) curIter=0;
    if(ExWin.status !="active"){
        ExWin.status ="active";
        ExWin.F.style.visibility = "visible";
        ExWin.DT.style.visibility="hidden";
    }
    if(curIter<0 || curIter>ExWin.AnyIter ){
        ExWin.F.curIter = (curIter<1) ? 0 : ExWin.AnyIter;
        ExWin.status = (ExWin.F.curIter==ExWin.AnyIter) ? "on": "off";
        ExWin.F.style.visibility = "hidden";
        ExWinSetPosition(ExWin,ExWin.DT);
        ExWin.style.zIndex=(ExWin.F.curIter==ExWin.AnyIter) ? "999" : "0";
        if(ExWin.F.curIter==ExWin.AnyIter){
          ExWin.status = "on";
          ExWinSetVisibility(ExWin,true);
  
          ExWinCallClientFunction(ExWin.onPopup, ExWin);

          var winHeight = ( window.innerHeight || document.body.clientHeight );
          if( ExWin.DT.maxHeight > winHeight - ExWin.YPos )
          {
            var scrollYPos = ( window.pageYOffset || document.body.scrollTop );
            window.scrollTo(0,(ExWin.DT.maxHeight - (winHeight - ExWin.YPos)) + scrollYPos + 30);
          }
        }else{
          ExWin.status = "off";
          ExWinSetVisibility(ExWin,false);
          ExWinCallClientFunction(ExWin.onHide, ExWin);
        }
    }else{
        var per = curIter*(95/ExWin.AnyIter)+ 5;
        ExWin.F.style.visibility = "hidden";
        ExWin.F.style.width=ExWin.DT.offsetWidth/100*per + "px";
        ExWin.F.style.height=ExWin.DT.offsetHeight/100*per + "px";
        ExWinSetPosition(ExWin, ExWin.F);
        ExWin.F.style.visibility = "visible";
        var timeout = (per==100 ) ? 0 : ExWin.AnyTime - (ExWin.AnyTime/(ExWin.AnyIter)*(curIter)); 
        curIter += (inout) ? 1:-1;
        ExWin.F.timer = window.setTimeout(function(){ExWinAnimateStart(ExWin, inout, curIter)},timeout);
        ExWin.F.curIter = curIter;
    }
}

function ExWinOpen(yPos,name,showBorder,showOutline)
{
   var ExWin = document.getElementById(name); 
   if( ExWin != null && ExWin.Initialized == true)
   {
       ExWin.YPos = yPos;
       ExWinPopup(ExWin,true);
       ExWin.IsHover=false;
       ExWin.ShowBorder=(showBorder == null || showBorder == true);
       ExWin.ShowOutline=(showOutline == null || showOutline == true);
   }
}

function ExWinClose(name,bAnim)
{  
    var ExWin = document.getElementById(name); 
    if( ExWin != null )
    {
        if( bAnim )
        {
           ExWinPopup(ExWin,false);
           ExWin.IsHover=false;    
        }
        else
        {
           ExWin.status = "off";
           ExWin.F.style.visibility = "hidden";
           ExWin.F.style.width = "0px";   
           ExWin.F.style.height = "0px";
           ExWin.F.curIter = 0;
           ExWinSetVisibility(ExWin,false);
           ExWin.IsHover=false;    
           ExWinCallClientFunction(ExWin.onHide, ExWin);        
        }
    }
}
