(function(){
  var yuiDom = YAHOO.util.Dom;
  var yuiEvent = YAHOO.util.Event;
  var yuiConnect = YAHOO.util.Connect;

  var homepagePromo= (function(){
      var backgroundContainer, liveVideoLink, propertyNameLink, propertyWeather, centerPropertyLink, crisisMessage;
      var currentIndex = 0;
      var properties;
      var offersContainer, offerTopMax = 845, offerTopMin = 565, offerTopOffset = 105;
      var isAnimating = false;
      var isOfferAnimating = false;
      var autoPlay = true;
      var hideOffersTimer = null;
      var self= {
          init:function(){
              backgroundContainer = yuiDom.get('background');
              liveVideoLink = yuiDom.get('liveVideoLink');
              propertyNameLink = yuiDom.get('propertyNameLink');
              propertyWeather = yuiDom.get('propertyWeather');
              centerPropertyLink = yuiDom.get('centerPropertyLink');
              crisisMessage = yuiDom.get('crisisMessageContainer');

              properties = propertiesArray;

              if(crisisMessage){
                  offerTopMax+=crisisMessage.offsetHeight;
                  offerTopMin+=crisisMessage.offsetHeight;
              }

              yuiEvent.addListener('centerArea',"click",self.centerAreaLink);
              if (liveVideoLink) yuiEvent.addListener(liveVideoLink,"click",self.showVideoLink);
              var nextPropControl = yuiDom.getElementsByClassName("nextProp","div",document)[0];
              yuiEvent.addListener(nextPropControl,"click",self.nextPropertyBridge);
              var previousPropControl = yuiDom.getElementsByClassName("previousProp","div",document)[0];
              yuiEvent.addListener(previousPropControl,"click",self.previousPropertyBridge);
              self.setupOffers();

              setTimeout(function() {
                self.nextPropertyAutoPlay();
              }, 15000);

              var closedInterestSelector = yuiDom.get('primaryInterest');

              yuiEvent.addListener('primaryInterest',"click",self.clickExpandInterestSelector);
              yuiEvent.addListener('secondaryInterest',"click",self.clickExpandInterestSelector);
              yuiEvent.addListener('primaryInterest',"mouseover",self.expandInterestSelector);
              yuiEvent.addListener('findPerfectResort',"mouseout",self.closeInterestSelector);
            //  yuiEvent.addListener('closeFindResort',"click",self.closeInterestSelector);

              // yuiEvent.addListener(closedInterestSelector,"mouseover",self.expandInterestSelector);
              SW.domWidget.bodyClickHandler.add(self.clickCloseInterestSelector,yuiDom.get('findPerfectResort'));

          },
          clickExpandInterestSelector:function(){
              yuiEvent.removeListener('primaryInterest',"mouseover",self.expandInterestSelector);
              yuiEvent.removeListener('findPerfectResort',"mouseout",self.closeInterestSelector);
              self.expandInterestSelector();
          },
          expandInterestSelector:function(){
              if (SW.local.interestSelector.primaryInterest!=''){
                  yuiEvent.removeListener('primaryInterest',"mouseover",self.expandInterestSelector);
                  yuiEvent.removeListener('findPerfectResort',"mouseout",self.closeInterestSelector);
              }
              var container = yuiDom.getElementsByClassName("closed","div","findPerfectResort")[0];
              yuiDom.addClass(container,"expanded");
              yuiDom.removeClass(container,"closed");
              yuiDom.removeClass(container,"closed");
              yuiDom.addClass('findPerfectResort','opened')
          //    yuiDom.removeClass('closeFindResort',"hide");

          },
          clickCloseInterestSelector:function(e){
              var mousedOut = yuiDom.isAncestor(yuiDom.get('findPerfectResort'),yuiEvent.getTarget(e));

              if (yuiDom.get('findPerfectResort') == yuiEvent.getTarget(e)){
                  mousedOut=false;
              }
              if (!mousedOut){
                var container = yuiDom.getElementsByClassName("expanded","div","findPerfectResort")[0];
                  yuiDom.addClass(container,"closed");
                  yuiDom.removeClass(container,"expanded");
                  yuiDom.removeClass('findPerfectResort','opened')

                  yuiDom.getElementsByClassName("show","div","findPerfectResort").forEach(function(select){
                      yuiDom.removeClass(select,"show");
                  })
                  yuiEvent.addListener('primaryInterest',"mouseover",self.expandInterestSelector);
                  yuiEvent.addListener('findPerfectResort',"mouseout",self.closeInterestSelector);
              }
            //  yuiDom.addClass('closeFindResort',"hide");
          },
          closeInterestSelector:function(e){
              var mousedOut = yuiDom.isAncestor(yuiDom.get('findPerfectResort'),yuiEvent.getTarget(e));

              if (yuiDom.get('findPerfectResort') == yuiEvent.getTarget(e)){
                  mousedOut=false;
              }
              if (!mousedOut){
                var container = yuiDom.getElementsByClassName("expanded","div","findPerfectResort")[0];
                  yuiDom.addClass(container,"closed");
                  yuiDom.removeClass(container,"expanded");
                  yuiDom.removeClass('findPerfectResort','opened')

                  yuiDom.getElementsByClassName("show","div","findPerfectResort").forEach(function(select){
                      yuiDom.removeClass(select,"show");
                  })
              }
            //  yuiDom.addClass('closeFindResort',"hide");

          },
          updatePropertyInfo:function(property){
              if (property.liveVideoUrl != ''){
                  yuiDom.removeClass('liveVideoContainer',"hide");
              }else{
                  yuiDom.addClass('liveVideoContainer',"hide");
              }
              liveVideoLink.href = property.liveVideoUrl;
              propertyNameLink.innerHTML = (property.propertyName ? property.propertyName : '&nbsp');
              propertyNameLink.href = property.propertyLink;
              if (property.weather.farenheit.hi != ''){
                  yuiDom.removeClass('weatherContainer',"hide");
                  yuiDom.get('hiF').innerHTML = property.weather.farenheit.hi;
                  yuiDom.get('lowF').innerHTML = property.weather.farenheit.low;
                  yuiDom.get('hiC').innerHTML = property.weather.celcius.hi;
                  yuiDom.get('lowC').innerHTML = property.weather.celcius.low;
                  propertyWeather.setAttribute('class','');
                  yuiDom.addClass(propertyWeather,property.weather.cloudCover);
              }else{
                  yuiDom.addClass('weatherContainer',"invisible");
              }
          },
          showVideoLink:function(e){
              yuiEvent.preventDefault(e);
              autoPlay = false;
              var url = this.href;

                SW.tools.popupPanel.show({
                    url: url,
                    width: "960",
                    height:"514",
                    panelClass: "liveVideo",
                    frameContainer:"liveVideoFrameContainer"
                })
          },
          centerAreaLink:function(e){
              if(yuiEvent.getTarget(e).id=='centerArea'){
                // omniture tracking
                  self.tracking('event41','Big Promo Link');
                location.href=properties[currentIndex].promoLink;
              }
          },
          showNewBackground:function(params){
              var animateOut = new yuiAnim(params.current, {opacity:{from:1,to:0}},1);
              animateOut.onComplete.subscribe(function(){
                  yuiDom.removeClass(params.current,"currentImg");
                  yuiDom.addClass(params.current,params.nextClass);

                  yuiDom.setStyle(params.current,"background-image","url(\'"+properties[params.nextIndex].imgUrl+"\')");

                  isAnimating = false;
              });

              var animateIn = new yuiAnim(params.next, {opacity:{from:0,to:1}},.75);
              animateIn.onComplete.subscribe(function(){
                   yuiDom.removeClass(params.next,params.nextClass);
                   yuiDom.addClass(params.next,"currentImg");
              });

              animateIn.onStart.subscribe(function(){
                  isAnimating = true;
                  yuiDom.setStyle(params.next,"opacity","0");
                  yuiDom.setStyle(params.next,"visibility","visible");
                  animateOut.animate();
              });
              animateIn.animate();

              yuiDom.setStyle(params.previous,"background-image","url(\'"+properties[params.previousIndex].imgUrl+"\')");

              self.updatePropertyInfo(properties[params.currentIndex]);
          },
          nextProperty:function(){
              var previousIndex = currentIndex;

              currentIndex++;
              if (currentIndex==properties.length){
                  currentIndex =  0;
              }
              var nextIndex = currentIndex+1;
              if (nextIndex==properties.length){
                  nextIndex =  0;
              }

               var background = {
                  nextIndex: nextIndex,
                  currentIndex: currentIndex,
                  current : yuiDom.getElementsByClassName("currentImg","div",backgroundContainer)[0],
                  next :  yuiDom.getElementsByClassName("nextImg","div",backgroundContainer)[0],
                  nextClass: "nextImg",
                   previous: yuiDom.getElementsByClassName("previousImg","div",backgroundContainer)[0],
                   previousIndex: previousIndex
              }

               self.showNewBackground(background);

          },
          nextPropertyBridge:function(e){
              yuiEvent.preventDefault(e);
              autoPlay = false;
              if (!isAnimating){
                self.nextProperty();
                // omniture tracking
                self.tracking('event39','Next Promo');
              }
          },
          nextPropertyAutoPlay:function(){
               if (autoPlay){
                   self.nextProperty();
                   
                   setTimeout(function() {
                    self.nextPropertyAutoPlay();
                  }, 10000);
               }
          },
          previousProperty:function(){
             var previousIndex = currentIndex;
             currentIndex--;

              if (currentIndex <0){
                  currentIndex =  properties.length-1;
              }
              
              var nextIndex = currentIndex-1;
              if (nextIndex <0){
                  nextIndex =  properties.length-1;
              }

               var background = {
                  nextIndex: nextIndex,
                  currentIndex: currentIndex,
                  current : yuiDom.getElementsByClassName("currentImg","div",backgroundContainer)[0],
                  next :  yuiDom.getElementsByClassName("previousImg","div",backgroundContainer)[0],
                  nextClass: "previousImg",
                   previous: yuiDom.getElementsByClassName("nextImg","div",backgroundContainer)[0],
                   previousIndex: previousIndex
              }

               self.showNewBackground(background);

          },
          previousPropertyBridge:function(e){
              yuiEvent.preventDefault(e);
              autoPlay = false;
              if (!isAnimating){
                  self.previousProperty();
                  // omniture tracking
                  self.tracking('event40','Previous Promo');
              }
          },
          setupOffers:function(){
              offersContainer = yuiDom.get('siteOffers');
              yuiEvent.addListener(window,"scroll",self.updateOfferPosition);
              yuiEvent.addListener(window,"resize",self.updateOfferPosition);
              self.updateOfferPosition();
          },
          updateOfferPosition:function(){
              var scrollTop = (document.documentElement.scrollTop ?
                  document.documentElement.scrollTop :
                  document.body.scrollTop);

                var viewportSize = yuiDom.getViewportHeight();

                viewportSize+=scrollTop;
                var topLocation = 0;
                if (viewportSize>offerTopMax){
                    topLocation = offerTopMax-offerTopOffset;
                }else if (viewportSize<offerTopMin){
                    topLocation = offerTopMin-offerTopOffset;
                }else{
                    topLocation =  viewportSize-offerTopOffset;
                }

                if (crisisMessage){
                    topLocation-=crisisMessage.offsetHeight;
                }
                yuiDom.setStyle(offersContainer,'top',parseInt(topLocation)+'px');
          },
          tracking:function(eventId,eventDesc){
                if (typeof s != 'undefined') {
                    s.linkTrackVars = 'events';
                    s.linkTrackEvents=eventId;
                    s.events = eventId;
                    s.tl(this, 'o', eventDesc);
                }
          }
      }
      return self;
  })();
  YAHOO.namespace("SW.local.homepagePromo");
  SW.local.homepagePromo = homepagePromo;

  yuiEvent.onDOMReady(function(){
      SW.local.homepagePromo.init();
  },true);
})();


