
TRF = function() {

  var $D = YAHOO.util.Dom;
  var $E = YAHOO.util.Event;
  var $A = YAHOO.util.Anim;
  var $M = YAHOO.util.Motion;
  var $P = YAHOO.photoViewer;
  var $ = $D.get;

  var carousel, fadeInterval, flow;

  return {

    /**
    * Create/activate mask, player stage and flash object
    */
    video: function(href) {

      var r = $D.getClientRegion(),
          mask, stage, stageClose, video;

      if(!$('mask')) {
        mask = document.createElement('div');
        mask.id = 'mask';
        $D.setStyle(mask, 'opacity', 0.5);
        document.body.appendChild(mask);
        stage = document.createElement('div');
        stage.id = 'video-stage';
        document.body.appendChild(stage);
        stageClose = new Image();
        stageClose.id = 'video-stage-close';
        stageClose.src = '/assets/i/close.png';
        document.body.appendChild(stageClose);

        $E.on(window, 'resize', function(e) {
          $D.setStyle('mask', 'width', $D.getDocumentWidth()+'px');
          $D.setStyle('mask', 'height', $D.getDocumentHeight()+'px');
          $D.setStyle('stage', 'top', $D.getDocumentScrollTop()+100+'px');
          $D.setStyle('stageClose', 'top', $D.getDocumentScrollTop()+80+'px');
        });

      } else {
        mask = $('mask');
        stage = $('video-stage');
        video = $('the-video');
        stageClose = $('video-stage-close');
        $D.setStyle('mask', 'display', 'block');
        $D.setStyle('video-stage', 'display', 'block');
        $D.setStyle('video-stage-close', 'display', 'block');
        $D.setStyle('video', 'display', 'block');
      }

      if (YAHOO.env.ua.ie && YAHOO.env.ua.ie <= 7) {
        video = document.createElement('div');
        $D.setStyle(video, 'width', '650px');
        $D.setStyle(video, 'height', '492px');
        stage.appendChild(video);
        flow = flowplayer(video, '/assets/flowplayer/flowplayer-3.2.5.swf', {
          clip: {
            url: '/assets/treffpunkt-video.mp4',
            autoPlay: true,
            autoBuffering: true
          }
        });
      } else {
        video = $('video-intro').cloneNode(true);
        video.id = 'the-video';
        stage.appendChild(video);
        $D.setStyle(video, 'display', 'block');
      }

      $D.setStyle(mask, 'width', $D.getDocumentWidth()+'px');
      $D.setStyle(mask, 'height', $D.getDocumentHeight()+'px');
      $D.setStyle(stage, 'top', $D.getDocumentScrollTop()+100+'px');
      $D.setStyle(stageClose, 'top', $D.getDocumentScrollTop()+80+'px');
      clearInterval(fadeInterval);

      var kl;
      var closeVideo = function() {
        $D.setStyle('mask', 'display', 'none');
        $D.setStyle('video-stage', 'display', 'none');
        $D.setStyle('video-stage-close', 'display', 'none');
        if (YAHOO.env.ua.ie && YAHOO.env.ua.ie <= 7) {
          flow.unload();
        } else {
          while (stage.childNodes.length >= 1 ) {
            stage.removeChild(stage.firstChild);
          }
        }
        kl.disable();
        fadeInterval = setInterval(TRF.fader, 6000);
      };

      kl = new YAHOO.util.KeyListener(document, { keys:27 },
        { fn: closeVideo });
      kl.enable();

      $E.on(stageClose, 'click', closeVideo);

    }, // end video()

    fader: function() {

      var Images = $('slideshow').getElementsByTagName('li');

      var Cur = 0;
      var Next = 0;
      
      for(var i = 0; i < Images.length; i++) {
        if($D.getStyle(Images[i], 'opacity') > 0) {
          Cur = i;
        } else {
          $D.setStyle(Images[i], 'opacity', 0);
        }
      }
      
      if(Cur != Images.length - 1) {
        Next = Cur + 1;
      }

      var ImageOut = new YAHOO.util.ColorAnim(Images[Cur], {opacity: { from: 1, to: 0 }});

      ImageOut.onComplete.subscribe(function(e, anim) { 
        $D.removeClass(Images[Cur], 'active');
        $D.addClass(Images[Next], 'active');
        var ImageIn = new YAHOO.util.ColorAnim(Images[Next], {opacity: { from: 0, to: 1 }});
        ImageIn.animate();
      });

      ImageOut.animate();

    },

    init: function() {

      $E.onAvailable('video-intro', function(e) {
        $D.addClass(this, 'dynamic');
        $E.on(this, 'click', function(e) {
          $E.stopEvent(e);
          TRF.video(this.href);
        });
      });

      if (YAHOO.env.ua.ie == 6) {
        var sfEls = $('first').getElementsByTagName('li');
        for (var i = 0; i < sfEls.length; i++) {
          sfEls[i].onmouseover=function() {
            this.className+=" hover";
          };
          sfEls[i].onmouseout=function() {
            this.className=this.className.replace(new RegExp(" hover\\b"), "");
          };
        }
      }

      if($('options-on')) {
        $E.on(['options-on', 'options-off'], 'click', function(e) {
          $E.stopEvent(e);
          var form = $D.getAncestorByTagName(this, 'form');
          var items = $D.getElementsByClassName('optional', 'li', form, function() {
            if($D.hasClass(this, 'show')) {
              $D.replaceClass(this, 'show', 'hide');
            } else if(!$D.hasClass(this, 'hide')) {
              $D.addClass(this, 'show');
            } else {
              $D.replaceClass(this, 'hide', 'show');
            }
          });
          if($D.getStyle('options-on', 'display') == 'block') {
            $('options-state').value = '1';
            $D.setStyle('options-on', 'display', 'none');
            $D.setStyle('options-off', 'display', 'block');
          } else {
            $('options-state').value = '0';
            $D.setStyle('options-on', 'display', 'block');
            $D.setStyle('options-off', 'display', 'none');
          }
        });
      }

      if($('sidebar')) {

        var hidden_dates = $D.getElementsByClassName('hidden', 'li', 'sidebar');
        if(hidden_dates.length > 0) {
          $D.setStyle(hidden_dates, 'display', 'none');
          var li = document.createElement('li');
          var a = document.createElement('a');
          a.innerHTML = 'alle Termine...';
          $D.addClass(a, 'more');
          li.appendChild(a);
          hidden_dates[0].parentNode.appendChild(li);
          $E.on(a, 'click', function(e) {
            $E.stopEvent(e);
            $D.setStyle(hidden_dates, 'display', 'block');
            $D.setStyle(this, 'display', 'none');
          });
        }
      }

      if($('slideshow')) {

        var Images = $('slideshow').getElementsByTagName('li');
        var Start = Math.floor(Math.random() * (Images.length));

        $D.setStyle(Images, 'opacity', 0);
        $D.removeClass(Images, 'hidden');

        $D.setStyle(Images[Start], 'opacity', 1);
        $D.addClass(Images[Start], 'active');

        $D.removeClass($('next'), 'hidden');

        fadeInterval = setInterval(TRF.fader, 6000);

      }
      
      if($('gallery')) {

        if($('next') && $('previous') && (
              YAHOO.env.ua.ie >= 8 
              || YAHOO.env.ua.webkit
              || YAHOO.env.ua.opera
              || YAHOO.env.ua.gecko)) {

          $D.setStyle($('gallery').getElementsByTagName('li'), 'display', 'block');
          $D.setStyle(['next', 'previous'], 'display', 'block');

          var carousel = new YAHOO.widget.Carousel($('gallery'), {
            numVisible: 1,
            animation: { speed: 0.5, effect: YAHOO.util.Easing.easeOut },
            navigation: { prev: 'previous', next: 'next' },
            isCircular: true
          });
          carousel.render();
          carousel.show();

          $E.on('next', 'click', function(e) {
            $E.stopEvent(e);
            carousel.scrollForward();
          });

          $E.on('previous', 'click', function(e) {
            $E.stopEvent(e);
            carousel.scrollBackward();
          });

        }

        $P.config = {
          viewers: {
            "carousel" : {
              properties: {
                id: "carousel",
                grow: 0.2,
                fade: 0.2,
                modal: true,
                dragable: false,
                fixedcenter: true,
                loadFrom: "html",
                position: "absolute",
                buttonText: { next: "nächstes Bild", prev: "vorheriges Bild", close: "schließen" }, 
                easing: YAHOO.util.Easing.easeBothStrong
              }
            }
          }
        };
        $P.controller.init();
      }

    }

  };

}();

YAHOO.util.Event.onDOMReady(TRF.init);

