function EFFECTS()
{
   this.objSELF = "";
   this.objDATA = null;

   this.arrOpacity  = Array();
   this.StepOpacity = 0;
   this.Speed       = 0;
   this.Delay       = 0;
   this.Handler     = null;
   
   this.FADE  = 0;
   this.SLIDE = 1;
   this.BARN  = 2;

   //
   // fade
   // 

   this.GetOpacityProperty = function()
     {
        var OpacityProp = false; 

        if (typeof document.body.style.opacity == "string")
               OpacityProp = "opacity";
          else if (typeof document.body.style.MozOpacity == "string")
                      OpacityProp = "MozOpacity";
                 else if (typeof document.body.style.KhtmlOpacity == "string")
                             OpacityProp = "KhtmlOpacity";
                        else if (document.body.filters && (navigator.appVersion.match(/MSIE ([\d.]+);/)[1] >= 5.5)) 
                               OpacityProp = "filter";

         return OpacityProp;
     }

   //+---

   this.SetOpacity = function(BlockID, Opacity)
     {
        var objBlock    = objCore.GetObjectByID(BlockID);
        var OpacityProp = this.GetOpacityProperty();
        
        if (OpacityProp == "filter")  
          {
             var objAlpha = (objBlock.filters["DXImageTransform.Microsoft.alpha"] || objBlock.filters.alpha);

             if (objAlpha) 
                    objAlpha.opacity = Opacity;
               else objBlock.style.filter+= "progid:DXImageTransform.Microsoft.alpha(opacity="+Opacity+")";
          }
          else objBlock.style[OpacityProp] = Opacity/100;
     }

   //+---

   this.FadeSingle = function(BlockID, isOut, isDisplay, arrOpacity, isReturnStatus)
     {
        if (isDisplay)
          {
             if (!isOut)
               objCore.BlockShow(BlockID);
          }

        this.SetOpacity(BlockID, this.objDATA.arrPhotos[BlockID]["OPACITY"]);

        var OpacityNew = this.objDATA.arrPhotos[BlockID]["OPACITY"]+this.Speed*((isOut) ? -1 : 1);
        this.objDATA.arrPhotos[BlockID]["OPACITY"] = OpacityNew;

        var OpacityFrom = ((arrOpacity == undefined) ? this.arrOpacity[0] : arrOpacity[0]);
        var OpacityTo   = ((arrOpacity == undefined) ? this.arrOpacity[1] : arrOpacity[1]);

        if ((OpacityNew >= OpacityFrom) && (OpacityNew <= OpacityTo))
          {
             var Func = this.objSELF+'.FadeSingle("'+BlockID+'",'+isOut+','+isDisplay+
                        ',['+OpacityFrom+','+OpacityTo+'],'+isReturnStatus+')';

             this.objDATA.arrPhotos[BlockID]["HANDLER"] = setTimeout(Func, this.Delay);
          }
          else 
          {
             if (isDisplay)
               {
                  if (isOut)
                    objCore.BlockHide(BlockID);
               }

             this.objDATA.arrPhotos[BlockID]["OPACITY"] = ((isOut) ? OpacityFrom : OpacityTo);

             if (isReturnStatus)
               this.objDATA.arrPhotos[BlockID]["TRANSITION"] = true;
          }
     }

   //+---

   this.Fade = function(IDPhotoCurr, IDPhotoNext, isReturnStatus)
     { 
        this.FadeSingle(IDPhotoCurr, true, true);
        this.FadeSingle(IDPhotoNext, false, true, null, isReturnStatus);
     }

   //
   // slide
   //

   this.Slide = function(IDPhotoCurr, IDPhotoNext, isOnceSet, Ycurr, isReturnStatus)
     {
        var objPhotoCurr = objCore.GetObjectByID(IDPhotoCurr);
        var objPhotoNext = objCore.GetObjectByID(IDPhotoNext);
      
        if (!isOnceSet) 
          {
             isOnceSet = true;

             objCore.BlockShow(IDPhotoNext);
             this.SetOpacity(IDPhotoNext, 100);

             objPhotoCurr.style.left = "0px";
             objPhotoCurr.style.top  = "0px";

             objPhotoNext.style.left = "0px";
             objPhotoNext.style.top  = -parseInt(objPhotoNext.offsetHeight)+"px";
 
             Ycurr = 0;
          }

        var PhotoHeight = parseInt(objPhotoNext.offsetHeight); 

        if (Ycurr < PhotoHeight)
          { 
             Ycurr+= this.Speed; 

             objPhotoCurr.style.top = Ycurr+"px";
             objPhotoNext.style.top = (-PhotoHeight+Ycurr)+"px";

             var Func = this.objSELF+'.Slide("'+IDPhotoCurr+'","'+IDPhotoNext+'",'+
                        isOnceSet+','+Ycurr+','+isReturnStatus+')';

             this.Handler = setTimeout(Func, this.Delay);
          }
          else 
          {
             if (isReturnStatus)
               this.objDATA.arrPhotos[IDPhotoNext]["TRANSITION"] = true;
          }
     }

   //
   // barn
   //

   this.Barn = function(IDPhotoCurr, IDPhotoNext, IDImageNext, isOnceSet, Hcurr, isReturnStatus)
     {
        var objPhotoCurr = objCore.GetObjectByID(IDPhotoCurr);
        var objPhotoNext = objCore.GetObjectByID(IDPhotoNext);
        var objImageNext = objCore.GetObjectByID(IDImageNext);
      
        if (!isOnceSet) 
          {
             isOnceSet = true;

             objCore.BlockShow(IDPhotoCurr);
             this.SetOpacity(IDPhotoCurr, 100);

             objCore.BlockShow(IDPhotoNext);
             this.SetOpacity(IDPhotoNext, 100);

             objPhotoCurr.style.zIndex = 100;
             objPhotoNext.style.zIndex = 101;

             objPhotoNext.style.height = "0px";
             objPhotoNext.style.top    = objImageNext.height/2+"px";
             objImageNext.style.top    = "0px";

             Hcurr = 0;
          }

        var PhotoHeight = parseInt(objImageNext.height); 

        if (Hcurr < PhotoHeight)
          { 
             Hcurr+= this.Speed; 

             objPhotoNext.style.height = Hcurr+"px";
             objPhotoNext.style.top    = (PhotoHeight-Hcurr)/2+"px";
             objImageNext.style.top    = -(PhotoHeight-Hcurr)/2+"px";

             var Func = this.objSELF+'.Barn("'+IDPhotoCurr+'","'+IDPhotoNext+'","'+IDImageNext+
                        '",'+isOnceSet+','+Hcurr+','+isReturnStatus+')';

             this.Handler = setTimeout(Func, this.Delay);
          }
          else 
          {
             objCore.BlockHide(IDPhotoCurr);

             if (isReturnStatus)
               this.objDATA.arrPhotos[IDPhotoNext]["TRANSITION"] = true;
          }
     }

   //+---

   this.Init = function(objSelf, objData, recEffect, arrOpacity)
     {
        this.objSELF    = objSelf;
        this.objDATA    = objData;
        this.arrOpacity = arrOpacity;
        this.Type       = recEffect.Type; 
        this.Speed      = recEffect.Speed;      
     }
}