var pulldowns;
var switchTo5x=true;

var wrtmc_scroll_to_nav = false;

var wrtmc_dontmiss_event_timer = null;
var wrtmc_dontmiss_event_timeout = 4000;

var wrtmc_feature_event_timer = null;
var wrtmc_feature_event_timeout = 4000;


function wrtmc_has_analytics() {
   return ('object' == eval('typeof _gaq') );
}

function wrtmc_track_event( options ) {
   if( wrtmc_has_analytics() ) {
      _gaq.push( ['_trackEvent', options['category'], options['action'], options['label'] ] );
   }
}


function wrtmc_get_below_pulldown( x, y ) {
   for( var i=0; i < pulldowns.length; i++ ) {
      var element = $(pulldowns[i]);
      var pos = element.offset();
      var w = element.width();
      var h = element.height();

      if( x > pos.left && x < pos.left + w && y > pos.top && y < pos.top + h ) {
         return element;
      }
   }

   return false;
}


// Event Calendar 
(function( $ ) {

   $.widget('ui.wrtmc_event_calendar', {
      data: undefined,
      data_cache: {},
      startDate: null,
      endDate: null,

      options: {
         id:      null,
         start:   null,
         end:     null
      },

      _create: function() {
         if( !this.options.id || !this.options.start || !this.options.end ) { return; }

         var self = this;

         this.data = null;
         this.calendar = null;
         this.data_cache = {};

         this.refreshData( this.options.start, this.options.end );


         this.calendar = $('.calendar', this.element );
         this.calendar.datepicker({
            autoSize:   true,
            dateFormat: 'yy-mm-dd',
            showOtherMonths: true,
            dayNamesMin: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],

            beforeShowDay: function( d ) {
               var year    = d.getFullYear();
               var month   = d.getMonth() + 1;
               var day     = d.getDate();

               if( 10 > month )  { month = '0'+ month; }
               if( 10 > day )    { day = '0' + day; }

               var dateText   = year +'-'+ month +'-'+ day;
               var hasEvents  = undefined !== self.data[dateText];
               var ret = [
                  hasEvents,
                  ( hasEvents ) ? 'wrtmc-has-event' : '',
                  ( hasEvents ) ? self.data[dateText].length +' events(s)' : ''
               ];

               return ret;
            },

            onChangeMonthYear: function( year, month, inst ) {
               var startDate = year +"-"+ month +"-01";

               if( month == 12 ) { 
                  month = 1;
                  year++;
               } else {
                  month++;
               }

               var endDate  = year +"-"+ month +"-01";

               self.options.start = startDate;
               self.options.end   = endDate;

               if( !self._loadFromCache( startDate, endDate ) ) {
                  self.refreshData( startDate, endDate );
               }
            },

            onSelect: function( dateText, inst ) {
               self.selectDate( dateText, inst, self );
            }
         });

         var d = new Date();

         month = d.getMonth() + 1;
         day   = d.getDate();

         if( 10 > month )  { month = '0'+ month; }
         if( 10 > day )    { day = '0' + day; }

         var s = d.getFullYear() +'-'+ month +'-'+ day;
         this.selectDate( s, null, this );
      },


      selectDate: function( dateText, inst, self ) {
         if( undefined != self.data && undefined !== self.data[dateText] ) {
            $('.calendar-content', self.element ).html('<ul class="events"></ul>');
            for( var i=0; i < self.data[dateText].length; i++ ) {
               var content = $('<li><a href="'+ self.data[dateText][i].url +'" class="event-calendar-date">'+ dateText +'</a> '+ self.data[dateText][i].name +'</li>');
               $('.calendar-content ul.events', self.element ).append( content );
            }

            $('.calendar-content', self.element ).append('<a href="/events" class="more">More <span class="go">&gt;&gt;</span></a>');
            $('.calendar-content', self.element ).show();
         }
      },

      invalidate: function()
      {
         this.data = undefined;
         this.data_cache = {};
         
         $('.content', this.element ).hide();
      },

      refresh: function()
      {
         var currentDate = this.calendar.datepicker('getDate');

         if( !this._loadFromCache( this.options.start, this.options.end ) ) {
            this.refreshData( this.options.start, this.options.end );
         }

         this.calendar.datepicker('refresh');
         this.calendar.datepicker('setDate', currentDate );
      },

      refreshData: function( start, end )
      {
         var self = this;

         $.ajax({
            url:   '/cell/user_event_calendar/getitems',
            async: false,
            data: {
               'id':    this.options.id,
               'start': start,
               'end':   end
            },

            success: function( data ) {
               var token = self._generateCacheToken( start, end );
               self.data_cache[token] = data;
               self.data = data;
            }
         });
      },

      _loadFromCache: function( startDate, endDate ) {
         var token = this._generateCacheToken( startDate, endDate );

         if( undefined !== this.data_cache[token] ) {
            this.data = this.data_cache[token];
            return true;
         }

         return false;
      },

      _generateCacheToken: function( start, end ) {
         return start +":"+ end;
      }
   });

}( jQuery ) );



// Disable Text Select Functions
(function($) {
   if ($.browser.mozilla) {
      $.fn.disableTextSelect = function() {
         return this.each(function() {
            $(this).css({
               'MozUserSelect' : 'none'
            });
         });
      };
      $.fn.enableTextSelect = function() {
         return this.each(function() {
            $(this).css({
               'MozUserSelect' : ''
            });
         });
      };
   } else if ($.browser.msie) {
      $.fn.disableTextSelect = function() {
         return this.each(function() {
            $(this).bind('selectstart.disableTextSelect', function() {
               return false;
            });
         });
      };
      $.fn.enableTextSelect = function() {
         return this.each(function() {
            $(this).unbind('selectstart.disableTextSelect');
         });
      };
   } else {
      $.fn.disableTextSelect = function() {
         return this.each(function() {
            $(this).bind('mousedown.disableTextSelect', function() {
               return false;
            });
         });
      };
      $.fn.enableTextSelect = function() {
         return this.each(function() {
            $(this).unbind('mousedown.disableTextSelect');
         });
      };
   }
})(jQuery);





$( function() {
   // Create the text shadow underneat the main navigation
   $('#b_main_nav li').each( function() {
      var item = $(this);
      item.append('<span class="shadow">'+ item.text() +'</span>');
   });




   // Create the "peek" effect on the pulldown navigation
   pulldowns = $('#b_under_nav li');
   pulldowns.mouseover( function() {
      if( !$(this).hasClass('pulled-down') ) {
         $(this).stop().animate({'top': 0 }, 200 );
      }
   }).mouseout( function() {
      if( !$(this).hasClass('pulled-down') ) {
         $(this).stop().animate({'top': -8 }, 200 );
      }
   });


   // Pulldowns close on mouse out
   pulldowns.each( function() {
      var self = $(this);
      var link = $('> a', this);
      var id = $.trim( link.attr('class').replace('first-of-type', '').replace(' on', '') );
      var pulldown = $('#'+ id );

      pulldown.mouseleave( function() {
         if( parseInt( $(this).css('top') ) < 100 ) {
            self.click();
         }
      });
   });


   // Pulldown functionality for pulldown navigation
   pulldowns.click( function( e ) {
      var link = $('> a', this);
      var list_item = $(this);
      
      // Match navigation element classes with the pulldown classes to make
      // a link between the navigation element and the pulldown menu
      var id = $.trim( link.attr('class').replace('first-of-type', '').replace(' on', '') );
      var pulldown = $('#'+ id );

      // If a pulldown is found, determine it's state as down or up, then 
      // create the animation accordingly
      if( pulldown.length ) {
         var pulldown_height = pulldown.height();
         var tracking = {
            'category': 'Pulldown', 
            'action': '',
            'label': link.text()
         };

         if( list_item.hasClass('pulled-down') ) {
            pulldown.animate({'top': -1 * pulldown_height }, 500 );
            list_item.animate({'top': -8 }, 500, function() {
               list_item.removeClass('pulled-down');
            });


            // Track Event
            tracking.action = 'Close';
            wrtmc_track_event( tracking );
         } else {
            list_item.addClass('pulled-down');

            pulldown.css('top', -1 * pulldown_height );
            pulldown.show();

            pulldown.animate({'top': 0 }, 500 );
            list_item.animate({'top': pulldown_height - 8 }, 500 );


            // Track Event
            tracking.action = 'Open';
            wrtmc_track_event( tracking );
         }
      }

      // Prevent the pulldown click from bumping to the top of the page
      e.preventDefault();
   });

   // Make sure that the full pulldown element is clickable 
   $('.pulldown > ul > li, #whats-happening .event-listing').click( function() {
      var url = $('a.go', this ).attr('href');
      window.location = url;
   });

   $('.under-nav-shadow').click( function( e ) {
      var element = wrtmc_get_below_pulldown( e.pageX, e.pageY );
      if( element ) { element.click(); }
   }).mousemove( function( e ) {
      var element = wrtmc_get_below_pulldown( e.pageX, e.pageY );
      if( element ) { 
         pulldowns.mouseout();
         element.mouseover(); 
      } else {
         pulldowns.mouseout();
      }
   }).mouseout( function() {
      pulldowns.mouseout();
   });



   // Automatically replace default serach prompts in input boxes
   $('input.replace').each( function() {
      var self = $(this);
      self.data('default_string', $(this).val() );
      self.focus( function() {
         var val = self.val();
         if( val == self.data('default_string') ) {
            self.addClass('active').val('');
         }
      }).blur( function() {
         var val = self.val();
         if( $.trim( val ) == '') {
            self.removeClass('active').val( self.data('default_string') );
         }
      });
   });



   // Package "more details" button
   $('.package-content .more-details').click( function() {
      var button = $(this);
      var parent = button.parent();
      var tracking = {
         'category': 'Packages',
         'label':    $('h3', $(this).closest('.package-content') ).text()
      };

      if( button.hasClass('open') ) {
         $('.long', parent ).hide();
         $('.short', parent ).show();

         button.text('More Details');
         button.removeClass('open');

         tracking.action = 'Close';
         wrtmc_track_event( tracking );
      } else {
         $('.short', parent ).hide();
         $('.long', parent ).show();
         button.text('Less Details');
         button.addClass('open');

         tracking.action = 'Open';
         wrtmc_track_event( tracking );
      }
   });



   // Don't Miss Events Functionality
   $('.events-dontmiss .event-dates li').click( function( e ) {
      var self  = $(this);
      if( !self.hasClass('on') ) {
         var parent  = self.closest('.events-dontmiss');
         var index   = self.prevAll().length + 1;
         var current = $('.event-listing.on', parent );
         var next    = $('.event-listing:nth-child('+ index +')', parent );

         self.addClass('on').siblings().removeClass('on');

         next.addClass('on');
         current.removeClass('on');
      }
         
      if( wrtmc_dontmiss_event_timer )  { clearTimeout( wrtmc_dontmiss_event_timer ); }

      if( undefined == e.pageX ) {
         wrtmc_dontmiss_event_timer = setTimeout( function() {
            var next = $('.events-dontmiss .event-dates li.on').next();
            if( !next.length ) { next = $('.events-dontmiss .event-dates li:first'); }

            next.click();
         }, wrtmc_dontmiss_event_timeout )
      }
   });
   
   $('.events-dontmiss .event-dates li:first').click();



   $('.events-sidebar').each( function() {
      var self = $(this);
      var listing = $('.event-listing', self );

      $( listing[0] ).addClass('on').show();

      if( listing.length > 1 ) {
         self.append('<ul class="nav" />');
         for( var i=0; i < listing.length; i++ ) {
            $('.nav', self ).append('<li>'+ i +'</li>');
         }

         $('.nav li', self ).live('click', function( e ) {
            var index   = $(this).prevAll().length + 1;
            var current = $('.event-listing.on', self );
            var next    = $('.event-listing:nth-child('+ index +')', self );

            current.removeClass('on').hide();
            next.addClass('on').show();

            $(this).siblings().removeClass('on');
            $(this).addClass('on');

            if( wrtmc_feature_event_timer )  { clearTimeout( wrtmc_feature_event_timer ); }
            if( undefined == e.pageX ) {
               wrtmc_feature_event_timer = setTimeout( function() {
                  var next = $('.events-sidebar .nav li.on').next();
                  if( !next.length ) { next = $('.events-sidebar .nav li:first'); }

                  next.click();
               }, wrtmc_feature_event_timeout )
            }
         });

         $('.nav li:first', self ).click();
      }
   });





   // Load Event Calendars
   $('.event-calendar').each( function() {
      var self = $(this);
      var id   = self.attr('id').substring( 15 );

      self.wrtmc_event_calendar({ 'id': id });
   });



   // Load Facebook
   $('body').prepend('<div id="fb-root" />');
   window.fbAsyncInit = function() {
      FB.init({
         appId:      '326537504033971',
         channelUrl: '//wrtmc.barefootinteractive.ca/channel.html',
         status:     true,
         cookie:     true,
         xfbml:      true
      });
   };

   (function(d) {
      var js, id='facebook-jssdk'; if (d.getElementById(id)) {return;}
      js = d.createElement('script'); js.id = id; js.async = true;
      js.src = "//connect.facebook.net/en_US/all.js";
      d.getElementsByTagName('head')[0].appendChild(js);
   }(document));



   // Load Google Plus
   (function() {
      var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true;
      po.src = 'https://apis.google.com/js/plusone.js';
      var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s);
   })();



   // Load Twitter
   !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");



   // Event Tracking
   $('#b_header_social ul a').click( function() {
      wrtmc_track_event({
         'category': 'Social Media',
         'action':   'Visit Website',
         'label':    $(this).attr('class').replace(' first-of-type', '')
      });
   });

   $('.contest-submit').click( function() {
      wrtmc_track_event({
         'category': 'Contest',
         'action':   'Entry',
         'label': $('#contest-id').val()
      });
   });
});


