﻿
 
 
 
 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 B  = {
    C:  true,
    D:  false,
    F:  400,
    morphingDisabled:  false,

    G:true,

    H:["IE",  "Gecko",  "Opera"],
    isOpera:(window.opera  ==  true),
    isIE:(navigator.userAgent.indexOf("MSIE") != -1) && !window.opera,
    isGecko:(navigator.userAgent.indexOf("Gecko") != -1),
    isSafari:(navigator.userAgent.indexOf("Safari") != -1),

    I:  function(J,  delay,  K)
   {
      return   setTimeout(B.L(J,  K),  delay);
   },
    M:  function(J,  N,  K)
   {
      return   setInterval(B.L(J,  K),  N);
   },
    O:  /^\s+|\s+$|(\s)\s+/g,
    P:  function(s)
   {
      return   s.replace(B.O,  "$1");
   },
    Q:  function(s,  R,  S)
   {
      var   T  =  s.indexOf(R);
      while  (T  != -1)
     {
        var   U  =  s.indexOf(S,  T);
        s  =  s.substring(0,  T) +  s.substring(U  +  S.length);
        T  =  s.indexOf(R);
     }
      return   s;
   },

    L:  function(J,  K)
   {
      return   function(){
        if  (!K)
          V.W("threadStart",  null,  null);
        J();
        if  (!K)
          V.W("threadEnd",  null,  null);
     };
   },
    X:  function(Y,  Z,  AB,  BB,  CB)
   {
      var   DB  =  null;
      do 
     {
        DB  =  EB.match(Y,  Z  +  "-\\w+");
        Y  =  Y.parentNode;
     }
      while  (!BB  &&  Y  &&  Y.nodeType  ==  1  && !DB);

      for  (var   i=0;  i<DB.length;  i++)
     {
        var   s  =  DB[i].substring(Z.length+1);
        if  (!CB  || !CB[s])
          return   s;
     }

      return   AB;
   },
    FB:  function(Y,  GB,  HB,  BB)
   {
     var   DB  =  null;
 try  {
      do 
     {
        DB  =  EB.match(Y,  GB  +  "-?\\d+");
        Y  =  Y.parentNode;
     }
      while  (!BB  &&  Y  &&  Y.nodeType  ==  1  && !DB);
}  catch(IB){
 //debugger;
}
      return  (DB?parseInt(DB[0].substring(GB.length)):HB);
   },
    JB:  function(Y,  KB,  LB)
   {
      var   MB  =  Y.NB;
      if  (!MB)
        MB  =  Y.NB  = {};

      MB[KB] =  LB;
   },
    OB:  function(Y,  KB)
   {
      var   MB  =  Y.NB;
      if  (!MB)
        return   null;
      else 
        return   MB[KB];
   },
    PB:  function(QB,  RB)
   {
      for  (var   i=0;  i<QB.length;  i++)
        if  (QB[i] !=  RB[i])
          return   false;

      return   true;
   }
};

 B.platform  = (B.isOpera?"opera":(B.isIE?"ie":(B.isGecko?"gecko":"unsupported")));

 B["setTimeoutHandler"] =  B.I;
 B["setIntervalHandler"] =  B.M;
 B["SUPPRESSEVENTS"] =  B.C;
 B["FIREEVENTS"] =  B.D;
 B["MORPHDURATION"] =  B.F;
 window["Q42Utils"] =  B;





 Function.prototype.SB  =  function(TB)
{
    
    if  (!window.UB)
   {
      window.UB  = [];
      window.VB  = [];
   }

    
    var   WB  =  this;

    
    var   XB  =  TB.YB;
    if  (!XB)
      UB[XB  =  TB.YB  =  UB.length] =  TB;

    
    var   ZB  =  WB.AC;
    if  (!ZB)
      VB[ZB  =  WB.AC  =  VB.length] =  WB;

    
    if  (!TB.BC)
      TB.BC  = [];

    
    var   CC  =  TB.BC[ZB];
    if  (CC)
      return   CC;

    
    TB  =  null;
    WB  =  null;

    
    return   UB[XB].BC[ZB] =  function()
   {
      return   VB[ZB].apply(UB[XB],  arguments);
   };
};

 if  (!Array.prototype.push)
{
    Array.prototype.push  =  function()
   {
      for  (var   i=0;  i<arguments.length;  i++)
        this[this.length] =  arguments[i];
   };
}

 if  (!Function.prototype.apply)
{
    Function.prototype.apply  =  function(TB,  DC)
   {
      TB.EC  =  this;
      var   FC  =  TB.EC(DC[0],  DC[1],  DC[2],  DC[3],  DC[4]);
      TB.EC  =  null;
      return   FC;
   }
}
 GC  = {
    HC:{
 
 
 
 
 
 
 
 
 
 
 
 
 
 
      "borderWidth":"borderpx",
      "borderTopWidth":"borderpx",
      "borderRightWidth":"borderpx",
      "borderBottomWidth":"borderpx",
      "borderLeftWidth":"borderpx",
 
 
 
 
      "clip":"cliprect",
      "width":"dimpx",
      "height":"dimpx",
      "scrollTop":"scrollpx",
      "scrollLeft":"scrollpx",
      "color":"rgb",
      "backgroundColor":"rgb",
      "borderColor":"rgb",
      "borderTopColor":"rgb",
      "borderRightColor":"rgb",
      "borderBottomColor":"rgb",
      "borderLeftColor":"rgb",
      "opacity":"opacity",
      "zoom":"%",
      "matrix":"matrix",
      "display":"string",
      "overflow":"string",
      "visibility":"string",
      "zIndex":"int" 
   },
    IC:{
      "width":["offsetWidth"],
      
      
      "height":["offsetHeight"]
      
      
   },

    JC:  function(KB)
   {
      return   GC.HC[KB] ||  "csspx";
   },

    KC:  function(Y,  KB)
   {
      var   LC  =  GC.JC(KB);
      if  (!B.isIE)
     {
        var   MC  =  GC.NC(KB);
        var   OC  =  getComputedStyle(Y,  "");
        switch  (LC)
       {
          case   "dimpx":
            if  (B.isOpera)
           {
              var   LB  =  Y[PC[0]];
              for  (var   i=1;  i<PC.length;  i++)
                LB  -=  parseInt(Y.currentStyle[PC[i]]);
              return   LB;
           }
          case   "borderpx":
            if  (OC.getPropertyValue(MC.replace(/width/,  "style")) ==  "none")
              return   0;
          case   "int":
          case   "csspx":
          case   "%":
            var   LB  =  OC.getPropertyValue(MC);
            var   QC  =  parseInt(LB);
            if  (isNaN(QC))
              switch  (LB)
             {
                case   "auto":  return   0;
             }
            return   QC;
          case   "opacity":
            return   OC.getPropertyValue(MC);
          case   "scrollpx":
            return   Y[KB];
            break;
          case   "cliprect":
            return  [
              parseInt(OC.getPropertyValue('clip-top')),
              parseInt(OC.getPropertyValue('clip-right')),
              parseInt(OC.getPropertyValue('clip-bottom')),
              parseInt(OC.getPropertyValue('clip-left'))
           ];
          case   "matrix":
            return  [1,  1,  0,  0,  1,  0,  0,  1];
          case   "rgb":
            if  (
              MC.indexOf("border") != -1 
             &&  OC.getPropertyValue(MC.replace(/color/,  "style")) ==  "none" 
           )
              return   null;
            return   GC.RC(OC.getPropertyValue(MC));
          case   "string":
            return   OC.getPropertyValue(MC);
          default:
            return   null;
       }
     }
      else 
     {
        switch  (LC)
       {
          case   "dimpx":
            var   LB  =  Y.currentStyle[KB];
            var   QC  =  parseInt(LB);
            if  (isNaN(QC) ||  LB.indexOf("px") == -1)
           {
              var   PC  =  GC.IC[KB];
              QC  =  Y[PC[0]];
              for  (var   i=1;  i<PC.length;  i++)
                QC  -=  GC.KC(Y,  PC[i]);
           }
            return   QC;
          case   "scrollpx":
            return   parseInt(Y[KB]);
            break;
          case   "cliprect":
            return  [
              parseInt(Y.currentStyle.clipTop),
              parseInt(Y.currentStyle.clipRight),
              parseInt(Y.currentStyle.clipBottom),
              parseInt(Y.currentStyle.clipLeft)
           ];
          case   "matrix":
            try 
           {
              var   SC  =  Y.filters.item("DXImageTransform.Microsoft.Matrix");
              with  (SC)
             {
                var   TC  =  Math.sqrt(UC  *  UC  +  VC  *  VC);
                var   WC  =  Math.sqrt(XC  *  XC  +  YC  *  YC);
                var   ZC   =  Math.acos(UC  /  TC);
                var   AD   =  Math.acos(YC  /  WC) -  ZC;
 
                return  [TC,  WC,  ZC,  AD,  UC,  XC,  VC,  YC];
             }
           }
            catch(IB)
           {
              return  [1,  1,  0,  0,  1,  0,  0,  1];
           }
          case   "opacity":
            try 
           {
              var   BD  =  Y.filters.item("DXImageTransform.Microsoft.Alpha");
              return   BD.opacity;
           }
            catch(IB)
           {
              return   100;
           }
            break;
          case   "rgb":
            if  (
              KB.indexOf("border") != -1 
             &&  Y.currentStyle[KB.replace(/Color/,  "Style")] ==  "none" 
           )
              return   null;
            return   GC.RC(Y.currentStyle[KB]);
          case   "string":
            return   Y.currentStyle[KB];
          case   "borderpx":
            if  (Y.currentStyle[KB.replace(/Width/,  "Style")] ==  "none")
              return   0;
          case   "int":
            return   parseInt(Y.currentStyle[KB]);
          case   "csspx":
          case   "%":
            var   LB  =  Y.currentStyle[KB];

            if  (LB.indexOf("%") != -1)
           {
              var   CD  =  parseInt(LB) /  100;
              switch  (KB)
             {
                case   "top":
                case   "bottom":
                  LB  =  Math.floor(CD  *  GC.KC(Y.parentNode,  "height"));
                  break;
                case   "left":
                case   "right":
                  LB  =  Math.floor(CD  *  GC.KC(Y.parentNode,  "width"));
                  break;
             }
           }

            var   QC  =  parseInt(LB);

            if  (isNaN(QC))
              switch  (LB)
             {
                case   "auto":  return   0;
                case   "thin":  return   2;
                case   "medium":  return   4;
                case   "thick":return   6;
                default:  return   parseInt(LB);
             }

            return   QC;
       }
     }
   },

    DD:  function(Y,  KB,  LB)
   {
      var   LC  =  GC.JC(KB);
      switch  (LC)
     {
        case   "rgb":
          Y.style[KB] =  "rgb("  +  LB.join(",") +  ")";
          break;
        case   "matrix":
          if  (B.isIE)
         {
            var   SC  =  Y.filters.item("DXImageTransform.Microsoft.Matrix");
            SC.UC  =  LB[4];
            SC.XC  =  LB[5];
            SC.VC  =  LB[6];
            SC.YC  =  LB[7];
         }
          break;
        case   "string":
        case   "int":
          Y.style[KB] =  LB;
          break;
        case   "dimpx":
        case   "%":
        case   "borderpx":
        case   "csspx":
          Y.style[KB] =  LB  +  "px";
          break;
        case   "scrollpx":
          Y[KB] =  LB  +  "px";
          break;
     }
   },

    ED:  function(Y,  KB)
   {
      if  (B.isIE)
        Y.style.removeAttribute(KB);
      else 
        Y.style.removeProperty(KB);
   },

    NC:  function(KB)
   {
      return   KB.replace(/([A-Z])/g,  function(FD){  return   '-'  +  FD.toLowerCase(); });
   },
    GD: {
      "aqua":"#00FFFF","azure":"#F0FFFF","beige":"#F5F5DC",
      "black":"#000000","blue":"#0000FF","brown":"#A52A2A",
      "cyan":"#00FFFF","darkblue":"#00008B","darkcyan":"#008B8B",
      "darkgray":"#A9A9A9","darkgreen":"#006400","darkred":"#8B0000",
      "fuchsia":"#FF00FF","gold":"#FFD700","gray":"#808080",
      "green":"#008000","indigo":"#4B0082","lightblue":"#ADD8E6",
      "lightcyan":"#E0FFFF","lightgreen":"#90EE90","lightgrey":"#D3D3D3",
      "lightyellow":"#FFFFE0","lime":"#00FF00","magenta":"#FF00FF",
      "maroon":"#800000","navy":"#000080","orange":"#FFA500",
      "pink":"#FFC0CB","purple":"#800080","red":"#FF0000",
      "silver":"#C0C0C0","steelblue":"#4682B4","turquoise":"#40E0D0",
      "violet":"#EE82EE","white":"#FFFFFF","yellow":"#FFFF00" 
    },

    RC:  function(HD)
   {
      HD  =  GC.GD[HD] ||  HD;

      if  (typeof(HD) ==  'object')
        return   HD;
      if  (HD.indexOf('#') ==  0)
     {
        if  (HD.length  ==  7)
          return  [
            parseInt(HD.substring(1,  3),  16),
            parseInt(HD.substring(3,  5),  16),
            parseInt(HD.substring(5,  7),  16)
         ];
        else 
          return  [
            17*parseInt(HD.substring(1,  2),  16),
            17*parseInt(HD.substring(2,  3),  16),
            17*parseInt(HD.substring(3,  4),  16)
         ];
     }
      if  (HD.indexOf('rgb(') ==  0)
     {
        var   ID  =  HD.substring(4,  HD.length  -  1).split(',');
        return  [
          parseInt(ID[0]),
          parseInt(ID[1]),
          parseInt(ID[2])
       ];
     }

      return  [255,  255,  255];
   }
};

 GC["getComputedStyleProperty"] =  GC.KC;
 GC["setStyleProperty"] =  GC.DD;
 GC["removeStyleProperty"] =  GC.ED;
 GC["translateColorToArray"] =  GC.RC;

 window["StyleUtils"] =  GC;
 JD  = {
    KD:  1,
    LD:{},
    MD:  function(Y)
   {
      if  (!Y.id)
     {
        var   id  =  'qid_'  +  JD.KD++;
        Y.id  =  id;
        JD.LD[id] =  true;
     }

      return   Y.id;
   },

    ND:  function(Y,  s,  K)
   {
      if  (K  !=  true)
        V.W("beforeHtmlChanged",  Y, {  toValue:s  });
      Y.innerHTML  =  s;
      if  (K  !=  true)
        V.W("afterHtmlChanged",  Y, {  toValue:s  });
      return   true;
   },

    OD:  function(Y,  K)
   {
      if  (K  !=  true)
     {
        var   PD  =  Y.parentNode;
        V.W("beforeHtmlChanged",  PD);
     }
      Y.parentNode.removeChild(Y);
      if  (K  !=  true)
        V.W("afterHtmlChanged",  PD);
      return   true;
   },

    QD:  function(Y)
   {
      var   RD  = [];

      if  (Y.id  && !JD.LD[Y.id])
        RD[0] =  Y;

      var   SD  =  Y.getElementsByTagName("*");
      var   TD  =  SD.length;
      for  (var   i=0;  i<TD;  i++)
     {
        var   Y  =  SD[i];
        if  (Y.id  && !JD.LD[Y.id])
          RD[RD.length] =  Y;
     }

      return   RD;
   },
    UD:  function(Y,  VD)
   {
      var   WD  = [];

      if  (EB.contains(Y,  VD))
        WD[0] =  Y;

      var   SD  =  Y.getElementsByTagName("*");
      var   TD  =  SD.length;
      for  (var   i=0;  i<TD;  i++)
        if  (EB.contains(SD[i],  VD))
          WD[WD.length] =  SD[i];

      return   WD;
   },
    XD:  function(Y,  VD)
   {
      var   WD  = [];

      while  (Y.nodeType  ==  1)
     {
        if  (EB.contains(Y,  VD))
          WD[WD.length] =  Y;

        Y  =  Y.parentNode;
     }

      return  (WD.length>0)?WD:null;
   },
    YD:  function(Y,  ZD)
   {
      while  (Y.nodeType  ==  1)
     {
        if  (Y.nodeName.toLowerCase() ==  ZD)
          return   Y;

        Y  =  Y.parentNode;
     }

      return   null;
   },
    AE:  function(Y)
   {
      var   BE  =  Y.target;
      if  (!BE)
        while  (Y.nodeType  ==  1)
       {
          var   VD  =  EB.match(Y,  "target-\\w+");
          if  (VD)
            return   VD[0].substring(7);
          Y  =  Y.parentNode;
       }
      return   BE;
   },
    CE:  function(DE,  EE)
   {
      while  (EE)
        if  (EE  ==  DE)
          return   true;
        else 
          EE  =  EE.parentNode;
      return   false;
   },
    FE:  function(Y)
   {
      if  (Y.ownerDocument  !=  document)
        return   false;

      if  (B.isIE)
        return   Y.parentTextEdit  !=  null;

      while  (Y.parentNode  &&  Y  !=  document.body)
        if  (Y.parentNode.nodeType  ==  11)
          return   false;
        else 
          Y  =  Y.parentNode;
      return  (Y  ==  document.body);
   }
};

 window["HtmlDomUtils"] =  JD;
 JD["acquireIdForHtmlElement"] =  JD.MD;
 JD["setInnerHtml"] =  JD.ND;
 JD["removeElement"] =  JD.OD;
 Animator  =  _a  = {
    SG:{},
    animate:  function(TG,  UG)
   {
      
      if  (B.isOpera)
     {
        document.body.scrollTop  -=  1;
        document.body.scrollTop  +=  1;
     }

 
 
 
 
 
 
 
 
 
      var   VG  =  10;
      var   WG  =  1  <<  VG;

      var   XG  =  7;
      var   YG  =  1  <<  XG;

      var   code  = [
        '  var tPhase = Math.min(1, (t - TSTART)/DURATION);\n',
        'if (tPhase>=0){\n',
        '  var f = ',  _a.ZG[UG.profile],  ';\n',
        '\n' 
     ];

      var   AH  = [];
      var   BH  = [];
      var   CH  = [];

      var   DH  =  TG.length;

      for  (var   i=0;  i<DH;  i++)
     {
        var   EH  =  TG[i];
        var   Y  =  EH.element;
        var   id  =  JD.MD(Y);
        var   FH  =  EH.targetState;

        for  (var   GH   in   FH)
       {
          var   HH  =  GH;
          if  (!B.isIE)
            HH  =  GH.replace(/([A-Z])/g,  function(FD){  return   '-'  +  FD.toLowerCase(); });

          var   IH  =  FH[GH];

          
          var   JH  =  EH.currentState?EH.currentState[GH]:GC.KC(Y,  GH);

          if  (GH  ==  'zoom')
         {
            
            JH  *=  100;
            IH  *=  10000;
         }

          
          switch  (GC.JC(GH))
         {
            case   'scrollpx':
                _a[id  +  'el'] = (Y  !=  document.body  ||  document.compatMode  ==  "BackCompat")?Y:document.documentElement;
              break;
            case   'matrix':
              if  (B.isIE)
                _a[id  +  'matrix'] =  Y.filters.item("DXImageTransform.Microsoft.Matrix");
              break;
            case   'opacity':
              if  (B.isIE)
             {
                _a[id  +  'opacity'] =  Y.filters.item("DXImageTransform.Microsoft.Alpha");
                break;
             }
              else 
                JH  *=  100;
                
            default:
              _a[id  +  'elStyle'] =  Y.style;

              if  (UG.removeAfterwards)
                CH.push("_a[\"",  id,  "elStyle\"][\"", (document.documentElement.style.removeAttribute?'removeAttribute':'removeProperty'),  "\"](\""  +  HH  +  "\");\n");
         }

          
          if  (GC.JC(GH) ==  "rgb")
            IH  =  GC.RC(IH);

          if  (IH.constructor  ==  Array)
         {
            var   KH  = [];
            for  (var   LH=0;  LH<IH.length;  LH++)
              KH[LH] =  Math.floor(IH[LH] -  JH[LH]);
         }
          else   if  (!isNaN(IH))
         {
            var   KH  =  Math.floor(IH-JH);
         }

          
          switch  (GC.JC(GH))
         {
            case   'rgb':
              if  (B.isIE)
             {
                if  (GH  ==  "borderColor")
                  BH.push(
                    '_a["',  id,  'elStyle"].',  GH,  '=["rgb(",',
                    '(',  Math.floor(YG*(JH[0]+0.5)),  '+colorPhase*',  KH[0],  ')>>',  XG,  ',",", ',
                    '(',  Math.floor(YG*(JH[1]+0.5)),  '+colorPhase*',  KH[1],  ')>>',  XG,  ',",", ',
                    '(',  Math.floor(YG*(JH[2]+0.5)),  '+colorPhase*',  KH[2],  ')>>',  XG,  ', ")"].join("");\n' 
                 );
                else 
                  BH.push(
                    '_a["',  id,  'elStyle"].',  GH,  '=',
                    '((',  Math.floor(YG*(JH[0]+0.5)),  '+colorPhase*',  KH[0],  ')>>',  XG,  '<<16) | ',
                    '((',  Math.floor(YG*(JH[1]+0.5)),  '+colorPhase*',  KH[1],  ')>>',  XG,  '<<8) | ',
                    '((',  Math.floor(YG*(JH[2]+0.5)),  '+colorPhase*',  KH[2],  ')>>',  XG,  ');\n' 
                 );
             }
              else 
                BH.push(
                  '_a["',  id,  'elStyle"].',  GH,  '=["rgb(",',
                  '(',  Math.floor(YG*(JH[0]+0.5)),  '+colorPhase*',  KH[0],  ')>>',  XG,  ',",", ',
                  '(',  Math.floor(YG*(JH[1]+0.5)),  '+colorPhase*',  KH[1],  ')>>',  XG,  ',",", ',
                  '(',  Math.floor(YG*(JH[2]+0.5)),  '+colorPhase*',  KH[2],  ')>>',  XG,  ', ")"].join("");\n' 
               );
              break;
            case   'opacity':
              BH.push('_a["',  id, (Y.currentStyle?'opacity"].opacity=(':'elStyle"].opacity=(('),  YG*(JH+0.5),  '+colorPhase*',  KH,  ')>>',  XG, (Y.currentStyle?';':')/100;'),  "\n");
              break;
            case   'matrix':
                AH.push(
                  'var scaleX=',  JH[0],  '+f*',  KH[0],  ';',
                  'var scaleY=',  JH[1],  '+f*',  KH[1],  ';',
                  'var angle=',  JH[2],  '+f*',  KH[2],  ';',
                  'var shear=',  JH[3],  '+f*',  KH[3],   ';',
                  'with(_a["',  id,  'matrix"]) {M11=scaleX*Math.cos(angle);M12=-scaleY*Math.sin(shear+angle);M21=scaleX*Math.sin(angle);M22=scaleY*Math.cos(shear+angle);}\n' 
               );
              break;
            case   'scrollpx':
              AH.push('_a["',  id,  'el"].',  GH,  '=(',  WG*(JH+0.5),  '+normalPhase*',  KH,  ')>>',  VG,  ';\n');
              break;
            case   'cliprect':
              AH.push(
                '_a["',  id,  'elStyle"].clip=["rect(", ',
                '"auto", " "+',
                '"auto", " "+',
                '((',  WG*(JH[2]+0.5),  '+normalPhase*',  KH[2],  ')>>',  VG,  '), " "+',
                '"auto", ")"].join("");\n' 
 
 
 
 
 
             );

              break;
            case   "%":
              AH.push('_a["',  id,  'elStyle"].',  GH,  '=((',  Math.floor(WG*(JH+0.5)),  '+normalPhase*',  KH,  ')>>',  VG,  ')/10000;\n');
            case   "string":
              switch  (GH)
             {
                case   "display":
                  AH.push('_a["',  id,  'elStyle"].display = "', (IH=='none'?JH:IH) ,  '";\n');
                  break;
                case   "overflow":
                  AH.push('_a["',  id,  'elStyle"].overflow = "hidden";');
                  break;
             }
              break;
            case   "int":
              AH.push('_a["',  id,  'elStyle"].',  GH,  '=((',  Math.floor(WG*(JH+0.5)),  '+normalPhase*',  KH,  ')>>',  VG,  ')\n');
            default:
              AH.push('_a["',  id,  'elStyle"].',  GH,  '=((',  Math.floor(WG*(JH+0.5)),  '+normalPhase*',  KH,  ')>>',  VG,  ')', (GH=='zoom'?'/10000':''),  _a.MH,  "\n");
         }

       }
     }

      if  (AH.length  >  0)
     {
        code.push(
          'var normalPhase=Math.round(',  WG,  '*f);\n',
 
 
 
          AH.join("")
 
 
       );
     }
      if  (BH.length  >  0)
     {
        code.push(
          'var colorPhase=Math.round(',  YG,  '*f);\n',
 
 
 
         BH.join("")
 
 
       );
     }

      if  (UG.removeAfterwards)
        code.push(
          "",
          "if(t>=TSTOP)",
          "{",
          CH.join(""),
          "}\n");

      code.push("}\n\n");

      _a.NH(code,  UG.delay,  UG.duration,  TG,  UG.onFinish);
   },

    ZG: [
      'tPhase',
      'tPhase*tPhase',
      '(2-tPhase)*tPhase',
      '(1-Math.cos('  +  Math.PI  +  '*tPhase)/2.0)',
      '(tPhase<0.5?Math.exp(3*Math.log(tPhase*2))/2:1-Math.exp(3*Math.log((1-tPhase)*2))/2)',
      '(-Math.cos('  +  4*Math.PI  +  '*tPhase) + 1)/2',
      '(Math.sin('  +  2*Math.PI  +  '*tPhase)*0.4+0.6)*Math.sin('  +  4*Math.PI  +  '*tPhase)*0.5+0.5' 
   ],

    MH: (document.defaultView?" + 'px';\n":";\n"),
    OH:  0,
    PH:  null,
    QH:  1,
    RH:  0,
    SH:  Infinity,
    TH:  500,
    UH:  "",
    NH:  function(VH,  delay,  duration,  TG,  onFinish)
   {
      _a.OH++;
      _a.QH++;

      for  (var   i=0;  i<TG.length;  i++)
        Animator.SG[TG[i].element.id] =  _a.QH++;

      if  (onFinish)
     {
        _a["__onFinish"  +  _a.QH] =  onFinish;
        _a["__anims"  +  _a.QH] =  TG;
     }

      WH  = [
        "/*** ",  _a.QH,  " ***/\n",
        "var t=Math.min(tNow, TSTOP);\n",
        VH.join(""),
        "if(t==TSTOP)\n",
        "{\n",
        "_a.__rC(",  _a.QH,  ");\n",
       (onFinish?("_a.__onFinish"  +  _a.QH  +  "(_a.__anims"  +  _a.QH  +  ");"):""),
        "\n}\n",
        "/*** /",  _a.QH,  " ***/\n"].join("");

      var   XH  = +new   Date() +  delay  -  _a.RH;
      var   YH  =  XH  +  duration;
      WH  =  WH.replace(/TSTART/g,  XH);
      WH  =  WH.replace(/DURATION/g,  duration);
      WH  =  WH.replace(/TSTOP/g,  YH);
      WH  =  WH.replace(/RUNINDEX/g,  _a.QH);

      if  (_a.PH)
        _a.ZH(TG);

      _a.UH  =  _a.UH  +  WH;

 

      _a.AI  =  Function("tNow",  _a.UH);

 

      if  (!_a.PH)
     {
        _a.RH  =  0;
        _a.SH  =  Infinity;

 _a.BI  =  0;
 _a.CI  = +new   Date() -  _a.RH;

        _a.PH  =  setInterval(_a.DI,  1);
        _a.DI();
     }
   },
    DI:  function()
   {
      var   BE  = +new   Date() -  _a.RH;

      var   EI  =  BE  -  _a.SH;
      if  (EI  >  _a.TH)
     {
        _a.RH  +=  EI;
        BE  -=  EI;
     }

      _a.SH  =  BE;

 
 

      _a.AI(BE);
   },
    "__rC":  function(FI)
   {
      var   GI  =  "/*** "  +  FI  +  " ***/";
      var   HI    =  "/*** /"  +  FI  +  " ***/";
      _a.UH  =  _a.UH.substring(0,  _a.UH.indexOf(GI)) +  _a.UH.substring(_a.UH.indexOf(HI) +  HI.length);

      _a.AI  =  Function("tNow",  _a.UH);

      _a.II(FI);

      _a.OH--;
      if  (_a.OH  ==  0)
     {
        clearInterval(_a.PH);
        _a.SG  = {};
        _a.PH  =  null;
     }
   },
    II:  function(FI)
   {
      for  (var   id   in   _a.SG)
        if  (_a.SG[id] ==  FI)
          delete   _a.SG[id];
   },
    ZH:  function(TG)
   {
      var   JI  = ["xxx"];
      var   DH  =  TG.length;
      for  (var   i=0;  i<DH;  i++)
     {
        var   EH  =  TG[i];
        var   id  =  EH.element.id;
        var   FH  =  EH.targetState;

        for  (var   GH   in   FH)
       {
          
          switch  (GH)
         {
            case   'scrollTop':
            case   'scrollLeft':
              JI.push("|_a\\[\"",  id,  "el\"\\].",  GH,  "[^\\n]+\\n");
              break;
            case   'matrix':
              JI.push("|_a\\[\"",  id,  "matrix\"\\][^\\n]+\\n");
              break;
            case   'opacity':
              JI.push("|_a\\[\"",  id,  "opacity\"\\][^\\n]+\\n");
              break;
            default:
              JI.push("|_a\\[\"",  id,  "elStyle\"\\].",  GH,  "[^\\n]+\\n");
         }
       }
     }

      var   KI  =  JI.join("");
      if  (KI)
        _a.UH  =  _a.UH.replace(new   RegExp(KI,  "g"),  "");
   }
};


 function   Modifiers()
{
    this.delay  =  0;
    this.duration  =  300;
    this.profile  =  this["SLOWFASTSLOW"];
    this.removeAfterwards  =  false;
    this.onFinish  =  null;
}

 Modifiers.prototype  = {
    "LINEAR":0,
    "ACCELERATING":1,
    "DECELERATING":2,
    "NORMAL":3,
    "SLOWFASTSLOW":4,
    "BLINK":5,
    "HEARTBEAT":6 
};

 Animator["animate"] =  Animator.animate;
 window["Animator"] =  Animator;
