  /* Grey Goose Core
   ========================================================================== */
/**
* The Grey Gooze global namespace object.
* @namespace
* @class GG
* @static
*/
var GG = GG || {};

GG.data = GG.data || {};
    
/**
 * Cached global elements.
 * @module elm
 * @title Elements
 */
GG.elm = {
  win         : $(window)
, doc         : $(document)
, body        : $('body')
, secAnchors  : $('.nav-section a')
, panels      : $('section.panel')
, nav         : $('nav')
, footer      : $('footer')
};

/* Utilities
   ========================================================================== */
GG.util = {
  hasTouch        : Modernizr.touch
, hasPosFixed     : Modernizr.positionfixed
, videoH624       : Modernizr.video.h264
, viewportWidth   : function() { return GG.elm.win.width();     }
, viewportHeight  : function() { return GG.elm.win.height()     }
, docHeight       : function() { return GG.elm.doc.height();    }
, scrollPos       : function() { return GG.elm.win.scrollTop(); }
, mobileMode      : function() {
    return (GG.util.viewportWidth() <= 760)? true : false;
}
, orientation     : function() {
  if (typeof orientation != 'undefined') {
    return (Math.abs(window.orientation) === 90)? "landscape" : "portrait";
  } else {
    return (GG.util.viewportWidth() >= GG.util.viewportHeight()) ? "landscape" : "portrait";
  }
}
, queryString     : function(name, url) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)"
      , regex = new RegExp(regexS)
      , results = regex.exec((url)? url : window.location.href);
    if (results == null) {
      return false;
    } else {
      return results[1];
    };
}
, replaceAll: function (txt, replace, with_this) {
  return txt.replace(new RegExp(replace, 'g'),with_this);
}
};

/* Webtrends Tagging
   ========================================================================== */
GG.track = function(tag){
  var defaults = { 
        name:    '',
        type:    '',
        cg:      '',
        scg:     ''
      }
    , tag = $.extend({}, defaults, tag);

    tag.name = tag.scg + '_' + escape(tag.name.toUpperCase()) + GG.track.deviceType;
    tag.name = GG.util.replaceAll(tag.name, '%20', '_'); 
    tag.name = GG.util.replaceAll(tag.name, '%2C', '');
    tag.name = GG.util.replaceAll(tag.name, '%u2013', '');
    tag.name = GG.util.replaceAll(tag.name, '%2520', '');
    tag.name = GG.util.replaceAll(tag.name, '%7C', '_');

    // GG.track({type:'PAGE', name: 'HOMEPAGE_LANDING', cg: 'HOMEPAGE', scg: 'HOMEPAGE'});
    // GG.track({type:'EVENT', name: 'SCROLL_HP_FIELD_TO_BOTTLE', cg: 'HOMEPAGE', scg: 'HOMEPAGE'});
    
    // DCS.dcsuri = Page Tag Name
    // WT.action  = Event Tage Name 
    // WT.cg_n    = Content Group
    // WT.cg_s    = Sub Content Group

    if (typeof _tag != 'undefined') {
      if(tag.type == 'PAGE') {
        if (typeof GG.track.referrer != 'undefined') {
          _tag.dcsMultiTrack('DCS.dcsuri', tag.name,'WT.action', '', 'WT.cg_n', tag.cg + GG.track.deviceType, 'WT.cg_s', tag.scg + GG.track.deviceType, 'WT.ti', tag.name, 'DCS.dcsref', GG.track.referrer);
          GG.track.referrer = undefined;
        } else {
          _tag.dcsMultiTrack('DCS.dcsuri', tag.name,'WT.action', '', 'WT.cg_n', tag.cg + GG.track.deviceType, 'WT.cg_s', tag.scg + GG.track.deviceType, 'WT.ti', tag.name);
        }
        log("GG_TRACK_PAGE_" + tag.name);
      } else if (tag.type == 'EVENT') {
        _tag.dcsMultiTrack('DCS.dcsuri', 'CUSTOM_EVENT.event','WT.action', tag.name,'DCS.dcssip', 'www.greygoose.com', 'WT.cg_n', null, 'WT.cg_s', null, 'WT.ti', null);
        log("GG_TRACK_EVENT_" + tag.name);
      }
      
      
    }
};
GG.track.getReferrer = function(){
  if($.cookie('GG_REFERRER') !=  null) {
    GG.track.referrer = $.cookie('GG_REFERRER');
    $.cookie('GG_REFERRER', null);
  }
}
GG.track.getDeviceType = function(){
  GG.track.deviceType = "|DESKTOP";
  if($.cookie('GG_DEVICETYPE') ===  null) {
    if (GG.util.hasTouch) {
        GG.track.deviceType = "|MOBILE"
      if (!GG.util.mobileMode()){
        GG.track.deviceType = "|TABLET" 
      }
    }
    $.cookie('GG_DEVICETYPE', GG.track.deviceType, { expires: null });
  } else {
    GG.track.deviceType = $.cookie('GG_DEVICETYPE');
  }
}

GG.track.flags = {
    pageSCG : ''
  , pageCG  : ''
  , footerFired : false
  , lastPanelViewed : $(GG.elm.secAnchors[0]).attr('href')
}

/* Scrolling Page Menu
   ========================================================================== */
GG.setupMenu = function() {
  
  if(!GG.util.hasTouch && !GG.util.mobileMode()) {
  
    var scrollingEvent = function(e){
      e.preventDefault();  
      var href   = $(this).attr('href')
        , time   = 2000
        , easing = 'easeInOutExpo'
        , newPos = $(href).position().top;
      $('html, body').stop().animate({scrollTop: newPos}, time, easing);

      var name = href.replace('#','');
      GG.track({type:'EVENT', name: 'SCROLL_CLICK_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    }
  
    GG.elm.secAnchors.bind('click', scrollingEvent);  
    GG.elm.secAnchors.mouseenter(function(){
      $h4 = $(this).prev();
      if(jQuery.support.opacity) {
        $h4.stop().css({display:'block'}).animate({
          right:30, opacity:1
        },450,'easeOutQuart');
      } else {
        $h4.stop().css({display:'block', right: 30});
      }
     }).mouseleave(function(){ 
        $h4 = $(this).prev();
        if(jQuery.support.opacity) {
          $h4.stop().animate({
            right:20,opacity:0
            },450,'easeOutQuart',
            function(){
              $(this).stop().css({display:'none'})
            });
        } else {
          $h4.stop().css({display:'none', right: 30});
        }
    });
    
    if($.cookie('GG_NAV_TRIGGERED') !=  'true') {
      var startTrigger =  setTimeout(function(){
        var triggerMenuIndex  = 0
          , triggerInterval   = function(){
            var toTrigger = GG.elm.secAnchors[triggerMenuIndex]
            if($(toTrigger).length > 0) {
              $(toTrigger).trigger('mouseenter');
              var triggerOff = setTimeout(function(){
                $(toTrigger).trigger('mouseleave');
              }, 700)
              triggerMenuIndex++;
            } else {
              triggerInterval = clearInterval(triggerInterval);
              $.cookie('GG_NAV_TRIGGERED', 'true', { expires: null });
            }
          }
          , triggerMenuHovers = setInterval(triggerInterval, 700);
      }, 1500);
    }

    GG.checkMenu();
    GG.fixedMenu();
    
    GG.elm.win.bind('mousewheel', function(){GG.elm.body.stop(true, true);});
    
    GG.elm.win.bind('resize', GG.fixedMenu);

  } else {
    
    GG.checkMenu();
    
  }
  
};

GG.checkMenu = function(){
  
  var panelPos = [];

  GG.elm.panels.each(function(index, value){
    panelPos[index] = $(this).offset().top;
  });

  var currentScrollPos = GG.util.scrollPos();
  
  var checkScrollPosInterval = function(){
    var newScrollPos = GG.util.scrollPos();
    if (currentScrollPos != newScrollPos) {
      GG.menuActive(panelPos);
    }
    currentScrollPos = newScrollPos;
  };
  
  var checkScrollPos = setInterval(checkScrollPosInterval, 600);
  
  GG.menuActive(panelPos);
  
};

GG.menuActive = function(panelPos) {
  var offset = 100
    , panelName = "#";
  GG.elm.secAnchors.removeClass('active');

  if (panelPos[4] <= GG.util.scrollPos()) {
    $(GG.elm.secAnchors[4]).addClass('active');
    panelName = $(GG.elm.secAnchors[4]).attr('href');
  } else if (panelPos[3] <= (GG.util.scrollPos() + offset)) {
    $(GG.elm.secAnchors[3]).addClass('active');
    panelName = $(GG.elm.secAnchors[3]).attr('href');
  } else if (panelPos[2] <= (GG.util.scrollPos() + offset)) {
    $(GG.elm.secAnchors[2]).addClass('active');
    panelName = $(GG.elm.secAnchors[2]).attr('href');
  } else if (panelPos[1] <= (GG.util.scrollPos() + offset)) {
    $(GG.elm.secAnchors[1]).addClass('active');
    panelName = $(GG.elm.secAnchors[1]).attr('href');
  } else if (panelPos[0] <= (GG.util.scrollPos() + offset)) {
    $(GG.elm.secAnchors[0]).addClass('active');
    panelName = $(GG.elm.secAnchors[0]).attr('href');
  }
  
  if(panelName != GG.track.flags.lastPanelViewed) {
    GG.track.flags.lastPanelViewed = panelName;
    panelName = panelName.replace('#','');
    GG.track({type:'EVENT', name: 'SCROLL_PANEL_' + panelName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
  }
};

GG.fixedMenu = function() {
  var max = 1440, $nav = $('ul.nav-section');
  if (GG.util.viewportWidth() >= max) {
    $nav.removeClass('fixed-right');
  } else {
    $nav.addClass('fixed-right'); 
  }
}

GG.fixedScroll =  function() {
  
  var trackFiredFooter = false;
  
  if(!GG.util.mobileMode() && GG.util.hasPosFixed && !GG.util.hasTouch) {
    if( (GG.util.scrollPos() + GG.util.viewportHeight()) <= (GG.elm.footer.offset().top + GG.elm.nav.height()) ) {
      GG.elm.nav.addClass('fixed');
      GG.track.flags.footerFired = false;
    } else {
      GG.elm.nav.removeClass('fixed');
      if(GG.track.flags.footerFired === false) {
        GG.track({type: 'PAGE', name: 'FOOTER_EXPAND', cg: 'GLOBAL_FOOTER', scg: 'FOOTER_EXPAND'});
        GG.track.flags.footerFired = true;
      }      
    }
  } else if (!GG.util.mobileMode() && !GG.util.hasPosFixed) {
    var footerHeight = 60;
    if($('.nav-secondary').length > 0) {
      footerHeight = 100;
    }
    GG.elm.nav.css({ top: GG.elm.win.height() + GG.elm.doc.scrollTop() - footerHeight });
  }
  
}

/* Ticker
   ========================================================================== */
GG.ticker = {
  prettyDate: function(time){
    var date = new Date((time || "")),
      diff = (((new Date()).getTime() - date.getTime()) / 1000),
      day_diff = Math.floor(diff / 86400);
      //.replace(/-/g,"/").replace(/[TZ]/g," ")
    if (isNaN(day_diff) || day_diff < 0) {
      return date;
    }
                  
    return day_diff == 0 && (
        diff < 60 && "just now" ||
        diff < 120 && "1&nbsp;minute&nbsp;ago" ||
        diff < 3600 && Math.floor( diff / 60 ) + "&nbsp;minutes&nbsp;ago" ||
        diff < 7200 && "1&nbsp;hour&nbsp;ago" ||
        diff < 86400 && Math.floor( diff / 3600 ) + "&nbsp;hours&nbsp;ago") ||
      day_diff == 1 && "Yesterday" ||
      day_diff < 7 && day_diff + " days&nbsp;ago" ||
      day_diff < 31 && Math.ceil( day_diff / 7 ) + "&nbsp;weeks&nbsp;ago" ||
      day_diff >= 31 && Math.ceil( day_diff / 30 ) + "&nbsp;months&nbsp;ago";
  },
  facebook : function(data, fbid, container) {
      var html = "";
      $.each(data,function(){
        var title
          , time = GG.ticker.prettyDate(this.updated_time)
          , picture = (this.picture)? '<img src="' + this.picture +'" class="thumb" />' : '';
        if(this.message){
          title = this.message;
        } else if (this.story) {
          title = this.story;
        } else {
          title = this.name;
        }
        html +='<a href="http://www.facebook.com/' + fbid + '" target="_blank">' + picture + ' ' + title.substring(0,140) + '&#8230;' + '</a><span class="time"> '+ time + '</span>';
      });
      $(container).append(html);
  },
  twitter : function(data, user, container) {
    var html = '';
    $.each(data,function(){
      var title = this.text
        , time  = GG.ticker.prettyDate(this.created_at);
          html += '<a href="http://www.twitter.com/' + user + '" target="_blank">' + title + '</a><br><span> '+ time + '</span>';
    })
    $(container).append(html);
  },
  youtube : function(data, user, container) {
    var title = data.YouTube.Title
      , time  = GG.ticker.prettyDate(data.YouTube.Date)
      , picture = '<span class="yt-video"><img src="http://i.ytimg.com/vi/' + data.YouTube.VideoID + '/1.jpg" /><span class="yt-play"></span></span>';
    $(container).append('<a href="http://www.youtube.com/watch?v=' + data.YouTube.VideoID + '" target="_blank" class="video">' + picture + ' ' + title + '</a><span class="time"> '+ time + '</span>');
  }
};

/* Media Gallery
   ========================================================================== */
GG.mediaLayer = function() {

    var mediaLayerHTML  = '<div id="videoplayer"><div id="jw-player"></div></div>';
        mediaLayerHTML += '<div id="photogallery"></div>';
        mediaLayerHTML += '<div id="layer-sidebar"><div id="layer-share"></div><div id="layer-comment"></div></div>';
        mediaLayerHTML += '<div id="layer-buttons"><a href="#" id="button-sidebar">SHARE & COMMENT</a><a href="#" id="button-close">CLOSE</a></div>';

    var $mediaLayer    = $('#medialayer');
        $mediaLayer.html(mediaLayerHTML);
        
    var $btnClose      = $('#button-close')
      , $btnSidebar    = $('#button-sidebar')
      , $sidebar       = $('#layer-sidebar')
      , $shareBox      = $('#layer-share')
      , $commentBox    = $('#layer-comment')
      , $videoPlayer   = $('#videoplayer')
      , $photoGallery  = $('#photogallery')
      , $videoLinks    = $('a.video')
      , $photosLinks   = $('a.photos')
      , galleryId      = $('#galleries div').attr('id')
      , sidebarOn      = false
      , shareURL       = ''
      , showtitle      = !GG.util.mobileMode()
      , gHeight        = GG.util.viewportHeight()
      , gWidth         = GG.util.viewportWidth()
      , onGalleria     = function(todo){
        if(typeof Galleria != 'undefined') {
          $.each(Galleria.get(), function(){ this[ todo ](); });
        }
      };
      
      GG.mediaLayer.shareComment   = function(url){
        shareURL = url;
        if(sidebarOn === true) {
          var mediaDeepLink  = window.location.href.split('#');
          if(!isNaN(url)) {
            mediaDeepLink  = mediaDeepLink[0] + '#gallery='+ galleryId + '&photo=' + url;
            GG.track({type:'EVENT', name: 'COMMENT_EVENT_OPEN_GALLERY_' + galleryId + '_PHOTO_' + url, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
          } else {
            mediaDeepLink  = mediaDeepLink[0] + '#video=' + url;
            GG.track({type:'EVENT', name: 'COMMENT_EVENT_OPEN_VIDEO_' + url, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
          }
          var socialButtons  = '<div class="social-buttons">';
              socialButtons += '<div class="fb-like" data-href="'+ mediaDeepLink + '" data-send="true" data-layout="button_count" data-width="120" data-show-faces="false" data-font="arial"></div>'
              socialButtons += '<a href="https://twitter.com/share" class="twitter-share-button" data-url="'+ mediaDeepLink + '">Tweet</a>';
              socialButtons += '<g:plusone size="medium" annotation="none" width="120" href="'+ mediaDeepLink + '"></g:plusone>';
              socialButtons += '<p class="disclaimer">Our materials are intended only for individuals of legal drinking age in your country of residence.  Please do not forward to anyone under the legal drinking age.</p>';
              socialButtons += '</div>';
              
          var commentIframe  = '<iframe class="comment-iframe" src="/comments.aspx?id=' + mediaDeepLink.replace('#','?') +'" scrolling="no" frameborder="0" allowTransparency="true"></iframe>';
          
          log('comments/share:' + mediaDeepLink);
                    
          $shareBox.html(socialButtons);
          $commentBox.html(commentIframe);
        
          var d = new Date()
            , rand = d.getTime()
            , fbsdk = 'facebook-jssdk' + rand
            , twsdk = 'twitter-jssdk' + rand
            , gpsdk = 'gplus-jssdk' + rand;
        
          (function(d, s, id) {
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) {return;}
            js = d.createElement(s); js.id = id;
            js.src = "//platform.twitter.com/widgets.js";
            fjs.parentNode.insertBefore(js, fjs);
          }(document, 'script', twsdk));
        
          (function(d, s, id) {
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) return;
            js = d.createElement(s); js.id = id;
            js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=169940546420798";
            fjs.parentNode.insertBefore(js, fjs);
          }(document, 'script', fbsdk));
        
          (function(d, s, id) {
            var js, fjs = d.getElementsByTagName(s)[0];
            if (d.getElementById(id)) {return;}
            js = d.createElement(s); js.id = id;
            js.src = "//apis.google.com/js/plusone.js";
            fjs.parentNode.insertBefore(js, fjs);
          }(document, 'script', gpsdk));
        
        }
        
      }
      
    if(GG.util.hasTouch) {
      GG.elm.win.bind('orientationchange', function(){ onGalleria('rescale'); });    
    }
    if(GG.util.mobileMode()) {
      gHeight = gHeight + 120;
    }

    var clickSidebar = function(e){
          e.preventDefault();
            if ($mediaLayer.hasClass('sidebar')) {
              $sidebar.hide();
              $mediaLayer.removeClass('sidebar');
              $btnSidebar.removeClass('active');
              sidebarOn = false;
            } else {
              $mediaLayer.addClass('sidebar');
              $sidebar.fadeIn(200);
              $btnSidebar.addClass('active');
              if(sidebarOn === false) {
                sidebarOn = true;
                GG.mediaLayer.shareComment(shareURL);
              }
            }
          onGalleria('rescale');
      }
      , clickClose     = function(e){
          e.preventDefault();
          $btnSidebar.removeClass('active');
          $mediaLayer.removeClass('sidebar').fadeOut(200);
          $videoPlayer.html('<div id="jw-player"></div>').hide();
          $photoGallery.empty().hide();
          $sidebar.hide();
          $shareBox.empty();
          $commentBox.empty();
//          $.bbq.removeState();
      }
      , clickPhotos    = function(galleryID){
          $($('#' + galleryID).html()).appendTo($photoGallery)
          $photoGallery.show().height(gHeight);
          $mediaLayer.fadeIn(200);
          $photoGallery.galleria({
            width: gWidth,
            height: gHeight,
            debug: false,
            fullscreenCrop: false,
            imageCrop: false,
            showInfo: showtitle
          });
          if(!GG.util.hasPosFixed) {
            window.scrollTo(0, 0);
          }
          GG.track({type:'EVENT', name: 'PHOTO_GALLERY_EVENT_START_' + galleryID, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
      }
      , clickVideos    = function(youtubeID){
          $videoPlayer.show();
          $mediaLayer.fadeIn(200);
          if (GG.util.hasTouch) {
            $('#jw-player').html('<iframe class="youtube-player" type="text/html" src="http://www.youtube.com/embed/' + youtubeID + '?rel=0&amp;autoplay=1&amp;autohide=1&amp;showinfo=0&amp;color=white" frameborder="0"></iframe>') 
            if(!GG.util.hasPosFixed) {
              window.scrollTo(0,0);
            }
          } else {
              var flag25 = false , flag50 = false , flag75 = false, flagReplay = false
              , onTimeTrack = function(e){
                  var percent = parseInt((e.position/e.duration) * 100);
                  if(percent > 75) {
                    if(!flag75) {
                      flag75 = true;
                      GG.track({type:'EVENT', name: 'VIDEO_EVENT_75_' + youtubeID, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
                    }
                  } else if (percent > 50) {
                    if(!flag50) {
                      flag50 = true;
                      GG.track({type:'EVENT', name: 'VIDEO_EVENT_50_' + youtubeID, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
                    }
                  } else if (percent > 25) {
                    if(!flag25) {
                      flag25 = true;
                      GG.track({type:'EVENT', name: 'VIDEO_EVENT_25_' + youtubeID, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
                    }
                  }
              }
              , onStartTrack = function(e){
                if(flagReplay == false) {
                  GG.track({type:'EVENT', name: 'VIDEO_EVENT_START_' + youtubeID, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
                } else {
                  GG.track({type:'EVENT', name: 'VIDEO_EVENT_REPLAY_' + youtubeID, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
                }
              }
              , onCompleteTrack = function(e){
                flagReplay = true;
                GG.track({type:'EVENT', name: 'VIDEO_EVENT_COMPLETE_' + youtubeID, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
              }

            jwplayer('jw-player').setup({
              'flashplayer': '/mediaplayer/player.swf',
              'skin': '/mediaplayer/skewd.zip',
              'width': '100%',
              'autoplay': true,
              'height': GG.util.viewportHeight() - 45,
              'image' : '/img/video-preview-black.jpg',
              'file': 'http://www.youtube.com/watch?v=' + youtubeID,
              'events' : {
                'onTime' : $.throttle(2000, onTimeTrack),
                'onPlay' : onStartTrack,
                'onComplete' : onCompleteTrack
               }
            });
          }
          GG.track({type:'EVENT', name: 'VIDEO_EVENT_LOAD_' + youtubeID, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});             
          GG.mediaLayer.shareComment(youtubeID);
      }
      , checkMediaHash = function(e){
          var hashValue = $.deparam.fragment()
            , video   = hashValue.video
            , gallery = hashValue.gallery;
          if (video != undefined) {
            clickVideos(video);
          } else if (gallery != undefined) {
            clickPhotos(gallery);
          } else {
            if($mediaLayer.is(':visible')) {
              $btnClose.trigger('click');
            }
          }
      }
  
      $btnSidebar.click(clickSidebar);
      $btnClose.click(clickClose);
      $photosLinks.click(function(e){
        e.preventDefault();
        var galleryID = $(this).attr('href').replace('#','');
        $.bbq.pushState({'gallery': galleryID});
      });
      $videoLinks.click(function(e){
        e.preventDefault();
        var youtubeID = GG.util.queryString('v', $(this).attr('href'));
        $.bbq.pushState({'video': youtubeID});
      });
  
      if(GG.elm.body.attr('id') != 'allrecipes') {
        GG.elm.win.bind('hashchange', checkMediaHash);
        GG.elm.win.trigger('hashchange');
      }

};

/* Recipe Filtering
   ========================================================================== */
GG.allRecipesFilters = function() {

    var filterPrefix   = '#ctl00_plcMain_searchfilters_ddlFilter'
        inputPrefix    = '#ctl00_plcMain_searchfilters_'
      , ajaxUrl        = '/searchfilter.aspx?'
      , $filterType    = $(filterPrefix + 'Type')
      , $filters       = $('.filters select').not($filterType)
      , $filtersHolder = $('.filters')
      , $filterSubmit  = $(inputPrefix + 'btnFilter')
      , $filterClear   = $(inputPrefix + 'btnClear')
      , $searchInput   = $(inputPrefix + 'txtSearch')
      , $searchSubmit  = $(inputPrefix + 'btnSearch')
      , $resultsDiv    = $('#results')
      , $paginationDiv = $('#recipe-pagination')
      , selectType     = undefined
      , selectFilter   = undefined
      , loadedBefore   = false
      , loadMore       = false
      , pagecount      = 1
      , pagesize       = 30
      , resultsCount   = '<span id="total-results"></span>'
      , loadMoreBtn    = '<a href="#load-more" id="load-more">Display More Cocktails</a>'
      , loaderSpinner  = '<div id="loading-spinner">Loading...</div>';

    $paginationDiv.html(loadMoreBtn);
    $resultsDiv.before(loaderSpinner);
    $filtersHolder.prepend(resultsCount).fadeIn(250);
    $filters.parents('.selector').hide();
    $filterSubmit.hide();
    $filterClear.hide();
    
    $searchInput.keypress(function(e){
      if ( e.which == 13 ) {
        e.preventDefault();
        $searchSubmit.trigger("click");
       }
    });
    
    $searchSubmit.click(function(e){
      e.preventDefault();
      var inputVal = $searchInput.val();   
      if (inputVal != '' && inputVal != 'Search for ingredient, name, occasion, etc.') {
        selectType = 'keyword';
        selectFilter = inputVal;
        $.bbq.pushState({type: selectType, filter : selectFilter, page : 1});
      }
      return false;
    });
    
    $filterType.change(function(e){
      selectType = $(this).val();
      if(selectType === 'AllCocktails') {
        $.bbq.pushState({type: 'AllCocktails', filter : 'AllCocktails', page : 1});
      } else {
        $filters.parents('.selector').hide();
        $filters.val('');
        $.uniform.update();
        $(filterPrefix + selectType).parents('.selector').fadeIn();
      }
    });
    
    $filters.change(function(e){
      selectFilter = escape($(this).val());
      if(selectFilter != '') {
        $.bbq.pushState({type: selectType, filter : selectFilter, page : 1 }); 
      }
    });
    
    $filterClear.click(function(e){
      $filterType.val('AllCocktails').change();
      $searchInput.val('');
      return false;
    });
    
    $('#load-more').live('click', function(e){  
      
      e.preventDefault();
      loadMore = true;
      
      if(selectType === undefined) {
        selectType = 'AllCocktails'
      }
      if(selectFilter === undefined) {
        selectFilter = 'AllCocktails'
      }
      pagecount =  (pagecount === undefined) ? 2 : parseInt(pagecount) + 1; 
      
      $.bbq.pushState({type: selectType, filter : selectFilter, page : pagecount }); 
            
    });
    
    var getResults = function(){
      
      var hashValue  = $.deparam.fragment()
        , requestURL =  ajaxUrl;
    
        selectType   = hashValue.type;
        selectFilter = hashValue.filter;
        pagecount    = hashValue.page;

      if (selectType != undefined || loadedBefore === true) {

        if(loadMore === false) {
          
          $('#loading-spinner').slideDown(250);
          $resultsDiv.fadeOut(250);
          $filterClear.fadeOut(250);
          
          if(selectType == 'AllCocktails') {
            requestURL += 'type=AllCocktails';
            requestURL += '&filter=AllCocktails';  
            requestURL +=  (pagecount > 1) ? '&pagesize=' + (pagesize * pagecount) : '&pagesize=' + pagesize;
            requestURL += '&page=1';
            $filterType.val(selectType);
            $filterType.parents('.selector').fadeIn(250);
            $filters.parents('.selector').hide();
            $.uniform.update();
          } else if (selectType == 'keyword') {
            requestURL += 'type='    + escape(selectType);
            requestURL += '&filter=' + escape(selectFilter);
            requestURL +=  (pagecount > 1) ? '&pagesize=' + (pagesize * pagecount) : '&pagesize=' + pagesize;
            requestURL += '&page=1';
            $filterType.parent('.selector').hide();
            $filters.parents('.selector').hide();
          } else {
            requestURL += 'type='    + escape(selectType);
            requestURL += '&filter=' + escape(selectFilter);
            requestURL +=  (pagecount > 1) ? '&pagesize=' + (pagesize * pagecount) : '&pagesize=' + pagesize;
            requestURL += '&page=1';
            $filterType.val(selectType);
            $filterType.parents('.selector').fadeIn(250)
            $(filterPrefix + selectType).val(unescape(selectFilter));
            $(filterPrefix + selectType).parents('.selector').fadeIn();
            $filterClear.fadeIn();
            $.uniform.update();
          }
        
          $.ajax({url: requestURL,
            success: function(data) {
              log(requestURL);
              $resultsDiv.html(data).fadeIn(500);
              $('#loading-spinner').slideUp(500);
              var totalResults = $('input[name="TotalResults"]:last').val();
              var isLastPage = $('input[name="LastPage"]:last').val();
              if(selectType == 'keyword') {
                $("#total-results").html('Showing <strong>' + totalResults + '</strong> cocktails for <strong>' + selectFilter + '</strong>').fadeIn(500);
                $filterClear.val('CLEAR SEARCH').fadeIn(250);
              } else if (selectType == 'AllCocktails'){
                $("#total-results").fadeOut(500).html('');
                $filterClear.val('CLEAR FILTERS').fadeOut(250);
              } else {
                $("#total-results").fadeOut(500).html('');
                $filterClear.val('CLEAR FILTERS').fadeIn(250);
              }
          
              if(isLastPage === 'false') {
                $paginationDiv.fadeIn(250);
              } else {
                $paginationDiv.fadeOut(250);
              }
              
              GG.track({type:'EVENT', name: selectType + '_' + selectFilter + '_' + pagecount , cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
              
            }
          });
      
        } else {
     
          var requestURL  =  ajaxUrl;
              requestURL += 'type='      + escape(selectType);
              requestURL += '&filter='   + escape(selectFilter);
              requestURL += '&pagesize=' + pagesize;
              requestURL += '&page='     + pagecount;

          $.ajax({url: requestURL,
            success: function(data) {
              log(requestURL);
              $resultsDiv.append(data);
              $('#loading-spinner').slideUp(500);
              var isLastPage = $('input[name="LastPage"]:last').val();
              if(isLastPage === 'false') {
                $paginationDiv.fadeIn(250);
              } else {
                $paginationDiv.fadeOut(250);
              }
              GG.track({type:'EVENT', name: selectFilter + '|' + selectFilter + '|' + pagecount , cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
            }
          }); 
          loadMore = false;
        }

        loadedBefore = true;
        
      } else {
        loadedBefore = true;
      }
      
    };
    
    GG.elm.win.bind('hashchange', getResults)
    GG.elm.win.trigger('hashchange');
};

/* Initialize/Fire
   ========================================================================== */
GG.fire = {
  init : function () {

    $('a[href="#"]').click(function(e){ e.preventDefault(); });

    GG.track.getDeviceType();

    if(GG.elm.body.attr('id') != 'agegate') {
      GG.track.getReferrer();
    }

    if(!GG.util.mobileMode()) {
      $('.carousel').each(function(i, el) {
        $(this).after('<div id="pager-'+ i +'" class="pager"></div>').cycle({ 
                fx:       'scrollHorz', 
                speed:    600, 
                timeout:  8000,
                pause:    true,
                containerResize: false,
                slideResize: false,
                fit: 1,
                easing:   'easeOutCubic',
                pager:    '#pager-' + i,
                onPagerEvent : function(currSlideElement, nextSlideElement, options, forwardFlag){
                  var name = $(nextSlideElement).find('h3').text();
                    if(name == '') name = 'QUOTE';
                  GG.track({type:'EVENT', name: 'CAROUSEL_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
                }
            }).cycle('pause');
      });
    }
    if(!GG.util.hasTouch) {
      $('a.overlay').fancybox({
        scrolling: 'none',
        padding: 0,
        type: 'iframe',
        margin: 0,
        overlayOpacity: .7,
        overlayColor: '#000',
        autoDimensions: false,
        width: '100%',
        height: 500
      });
    }
    
    if(GG.elm.panels.length > 0) {
      GG.setupMenu();
    }
    if(GG.elm.footer.length > 0) {
      GG.elm.win.bind('resize scroll', GG.fixedScroll);
      
      if(!GG.util.mobileMode() && !GG.util.hasPosFixed && GG.util.hasTouch) {
        document.addEventListener('touchmove', function(e){
          if($(e.target).parents('nav').length == 0) {
            GG.elm.nav.hide();
          }
        }, false);
        document.addEventListener('touchend', function(e){
          if(!GG.elm.nav.is(':visible')) {
            GG.elm.nav.fadeIn(350);
          }
        }, false);
      }

      $('#main-footer .column a').click(function(e){
        var name = $(this).text()
        GG.track({type: 'EVENT', name: 'CLICK_' + name, cg: 'GLOBAL_FOOTER', scg: 'FOOTER_LINK'});
      });
      $('.nav-primary a').click(function(e){
        var name = $(this).text()
        GG.track({type: 'EVENT', name: 'CLICK_NAV_' + name, cg: 'GLOBAL_FOOTER', scg: 'FOOTER_LINK'});
      });
      $('.nav-secondary a').click(function(e){
        var name = $(this).text()
        GG.track({type: 'EVENT', name: 'CLICK_SUBNAV_' + name, cg: 'GLOBAL_FOOTER', scg: 'FOOTER_LINK'});
      });
      
    }
    
  },
  agegate : function() {
    
    GG.track.flags.pageCG  = 'AGE_GATE';
    GG.track.flags.pageSCG = 'AGE_GATE';
    
    GG.track({type:'PAGE', name: 'AGE_GATE_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    GG.track({type:'EVENT', name: 'AGE_GATE_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});

    $('input.enter').click(function(e){
      var country = $('select.country').val();
      GG.track({type:'EVENT', name: 'CLICK_TO_ENTER_' + 'COUNTRY_CHOSEN_' + country, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });

    if (!Modernizr.input.placeholder) {
      $("input[placeholder]").placeholder();
    }
    
    $(".country-input select").uniform();
    $(".rememberme-input input").uniform();
    
    var dobCookie     = 'GG_DOB'
      , remeberCookie = 'GG_REMEMBER'
      , $month     = $('input.month')
      , $day       = $('input.day')
      , $year      = $('input.year')
      , $inputsDOB = $('input.month, input.day, input.year')
      , $submit    = $('input.enter')
      , $remember  = $(".rememberme-input input")
      , getDOB     = function(){
        return $month.val() + '/' + $day.val() + '/' + $year.val();
      }
      , loadDOB    = function(){
        var dob = $.cookie(dobCookie);
          if(dob){
            dob = dob.split('/');
            $month.val(dob[0]);
            $day.val(dob[1]);
            $year.val(dob[2]);
            $remember.prop('checked', true);
            $.uniform.update(); 
          }
      }
      , setDOB     = function(){
        if($remember.prop('checked') == true) {
          $.cookie(remeberCookie, 'true', { expires: 30 });
          $.cookie(dobCookie, getDOB(), { expires: 30 });
        } else {
          $.cookie(remeberCookie, 'false', { expires: 30 });
          $.cookie(dobCookie, null);
        }
      }
      if($.cookie(remeberCookie) === 'true') {
        loadDOB();
        $remember.prop('checked', true);
        $.uniform.update(); 
      }
      $remember.click(setDOB);
      $inputsDOB.change(setDOB)
    
      if(!GG.util.hasTouch) {
        $inputsDOB.autotab_magic().autotab_filter('numeric');
      } else {
        $inputsDOB.prop('type','tel').autotab_filter('numeric');
      }

  },
  home : function() {

    GG.track.flags.pageCG  = 'HOMEPAGE';
    GG.track.flags.pageSCG = 'HOMEPAGE';
    GG.track({type:'PAGE', name: 'HOMEPAGE_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    
    if(!GG.util.mobileMode() && !GG.util.hasTouch) {
      GG.elm.panels.backgroundScroll({height: 1100, speed: 3});
    }
    
    $('.panel a').click(function(e){
      var name = $(this).parents('.panel').find('h1 a').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_HP_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  ourprocess: function() {
    
    GG.track.flags.pageCG  = 'INTRINSICS';
    GG.track.flags.pageSCG = 'INTRINSICS';
    GG.track({type:'PAGE', name: 'INTRINSICS_LANDING', cg: 'INTRINSICS', scg: 'INTRINSICS'});
    
    if(!GG.util.mobileMode() && !GG.util.hasTouch) {
      $('.wrapper').backgroundScroll({height: 2660, speed: .9});
      GG.elm.panels.backgroundScroll({height: 1100, speed: 3});
    }
    
    $('.vodka-buttons a').click(function(e){
      var name = $(this).text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  vodkaoriginal: function() {
    
    GG.track.flags.pageCG  = 'VODKAS';
    GG.track.flags.pageSCG = 'ORIGINAL';
    GG.track({type:'PAGE', name: 'ORIGINAL_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    
    if(!GG.util.mobileMode() && !GG.util.hasTouch) {
      $('.wrapper').backgroundScroll({height: 2660, speed: .9});
      $('.parallax').backgroundScroll({height: 1100, speed: 3});
    }
    
    $('.sub-callout a').click(function(e){
      var name = $(this).parents('.sub-callout').find('h3').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.carousel-panel a').click(function(e){
      var name = $(this).parents('.carousel-panel').find('h3').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.vodka-buttons a').click(function(e){
      var name = $(this).text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  vodkaorange: function() {
    
    GG.track.flags.pageCG  = 'VODKAS';
    GG.track.flags.pageSCG = 'ORANGE';
    GG.track({type:'PAGE', name: 'ORANGE_LANDING', cg: 'VODKAS', scg: 'ORANGE'});
    
    if(!GG.util.mobileMode() && !GG.util.hasTouch) {
      $('.wrapper').backgroundScroll({height: 2660, speed: .9});
      $('.parallax').backgroundScroll({height: 1100, speed: 3});
    }
    
    $('.sub-callout a').click(function(e){
      var name = $(this).parents('.sub-callout').find('h3').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.carousel-panel a').click(function(e){
      var name = $(this).parents('.carousel-panel').find('h3').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.vodka-buttons a').click(function(e){
      var name = $(this).text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  vodkalemon: function() {
    
    GG.track.flags.pageCG  = 'VODKAS';
    GG.track.flags.pageSCG = 'LEMON';
    GG.track({type:'PAGE', name: 'LEMON_LANDING', cg: 'VODKAS', scg: 'LEMON'});
    
    if(!GG.util.mobileMode() && !GG.util.hasTouch) {
      $('.wrapper').backgroundScroll({height: 2660, speed: .9});
      $('.parallax').backgroundScroll({height: 1100, speed: 3});
    }
    
    $('.sub-callout a').click(function(e){
      var name = $(this).parents('.sub-callout').find('h3').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.carousel-panel a').click(function(e){
      var name = $(this).parents('.carousel-panel').find('h3').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.vodka-buttons a').click(function(e){
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  vodkapear: function() {
    
    GG.track.flags.pageCG  = 'VODKAS';
    GG.track.flags.pageSCG = 'PEAR';
    GG.track({type:'PAGE', name: 'PEAR_LANDING', cg: 'VODKAS', scg: 'PEAR'});
    
    if(!GG.util.mobileMode() && !GG.util.hasTouch) {
      $('.wrapper').backgroundScroll({height: 2660, speed: .9});
      $('.parallax').backgroundScroll({height: 1100, speed: 3});
    }
    
    $('.sub-callout a').click(function(e){
      var name = $(this).parents('.sub-callout').find('h3').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.carousel-panel a').click(function(e){
      var name = $(this).parents('.carousel-panel').find('h3').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.vodka-buttons a').click(function(e){
      var name = $(this).text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  allrecipes: function() {
    
    GG.track.flags.pageCG  = 'RECIPES';
    GG.track.flags.pageSCG = 'RECIPE_FILTER';
    GG.track({type:'PAGE', name: 'RECIPE_FILTER_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    
    $("#search input[type=text]").val('').attr('placeholder','Search for ingredient, name, occasion, etc.').placeholder();

    $(".filters select").uniform();

    GG.allRecipesFilters();

    $('.recipe a').live('click', function(e){
      var recipeName;
        if($(this).hasClass('thumb')) {
          recipeName = $(this).parent().find('h5 a').text();
        } else {
          recipeName = $(this).text();
        }
      GG.track({type:'EVENT', name: 'CROSSLINK_ALL_COCKTAILS_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
    if(!GG.util.mobileMode() && !GG.util.hasTouch) {
      $('.recipe').live('mouseenter',function(){
        $(this).find('.ingredients-2').slideDown(100);
        $(this).find('.flavor').fadeIn(100);
      }).live('mouseleave',function(){
        $(this).find('.flavor, .ingredients-2').slideUp(250);
        $(this).find('.ingredients-2').slideUp(250);
        $(this).find('.flavor').fadeOut(250);
      });
    }
  },
  featuredcocktails : function(){
    GG.track.flags.pageCG  = 'RECIPES';
    GG.track.flags.pageSCG = 'FEATURED_COCKTAILS';
    GG.track({type:'PAGE', name: 'FEATURED_COCKTAILS_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    
    $('.card a').live('click', function(e){
      var recipeName = $(this).parents('.card').find('h2 a').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  recipedetail : function(){
    GG.track.flags.pageCG  = 'RECIPES';
    GG.track.flags.pageSCG = 'VIEW_RECIPE';

    var recipeName = $('.information h1').text();
      GG.track({type: 'PAGE', name: 'VIEW_RECIPE_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
      
    $('a.print-recipe').attr('onclick','window.print();').click(function(){
      GG.track({type: 'EVENT', name: 'PRINT_RECIPE_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
    $('a.email-recipe').click(function(){
      GG.track({type: 'attr', name: 'EMAIL_RECIPE_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    })
    
    $('.related .item a').live('click', function(e){
      var recipeName;
        if($(this).hasClass('thumb')) {
          recipeName = $(this).parent().find('h5 a').text()
        } else {
          recipeName = $(this).text()
        }
      GG.track({type:'EVENT', name: 'CROSSLINK_RELATED_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
      
      
    $('.lf_post').live('click',function(){
      GG.track({type: 'EVENT', name: 'POST_COMMENT_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.lf_follow_link').live('click',function(){
      GG.track({type: 'EVENT', name: 'FOLLOW_CONVERSATION_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  allevents: function() {
    GG.track.flags.pageCG  = 'EVENTS';
    GG.track.flags.pageSCG = 'EVENTS';
    GG.track({type: 'PAGE', name: 'EVENTS_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    
    $('.event a').live('click', function(e){
      var eventName;
        if($(this).hasClass('thumb')) {
          eventName = $(this).parent().find('h5 a').text();
        } else {
          eventName = $(this).text();
        }
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + eventName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  eventdetail: function() {
    GG.track.flags.pageCG  = 'EVENTS';
    GG.track.flags.pageSCG = 'VIEW_EVENT';
    
    var eventName = $('.event h1').text();

    GG.track({type:'PAGE', name: 'EVENT_DETAIL_' + eventName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    
    $('.card a').live('click', function(e){  
      var recipeName = $(this).parents('.card').find('h2 a').text();
      GG.track({type:'EVENT', name: 'CROSSLINK_EVENT_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
    $('.lf_post').live('click',function(){
      GG.track({type: 'EVENT', name: 'POST_COMMENT_' + eventName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    $('.lf_follow_link').live('click',function(){
      GG.track({type: 'EVENT', name: 'FOLLOW_CONVERSATION_' + eventName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
  },
  upcomingevents : function() {
    GG.track.flags.pageCG  = 'EVENTS';
    GG.track.flags.pageSCG = 'UPCOMINGEVENTS';
    GG.track({type: 'PAGE', name: 'UPCOMINGEVENTS_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
  },
  Advertising: function() {
    
    GG.track.flags.pageCG  = 'GLOBAL_FOOTER';
    GG.track.flags.pageSCG = 'ADVERTISING';
    GG.track({type: 'PAGE', name: 'ADS_LANDING', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    
    $('a.ads').fancybox({
      scrolling: 'none',
      padding: 0,
      margin: 0,
      overlayOpacity: .7,
      overlayColor: '#000',
      autoDimensions: false,
      onComplete: function(el){
        var name = $(el).parents('.item').find('.name').text();
        GG.track({type:'EVENT', name: 'PRINT_EVENT_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
      }
    });
    
  },
  SocialResponsibility : function(){
    GG.track({type: 'PAGE', name: 'SOCIAL_RESPONSIBILITY', cg: 'GLOBAL_FOOTER', scg: 'ABOUT_US'});
  },
  PrivacyPolicy : function(){
    GG.track({type: 'PAGE', name: 'PRIVACY POLICY', cg: 'GLOBAL_FOOTER', scg: 'ABOUT_US'});
  },
  TermsandConditions: function(){
    GG.track({type: 'PAGE', name: 'TERMS_CONDITIONS', cg: 'GLOBAL_FOOTER', scg: 'ABOUT_US'});
  },
  contactus : function(){
    GG.track.flags.pageCG  = 'GLOBAL_FOOTER';
    GG.track.flags.pageSCG = 'ABOUT_US';
        
    $('#ctl00_plcMain_pnlForm select, #ctl00_plcMain_pnlForm textarea').uniform();  
    $(' #ctl00_plcMain_pnlForm input').placeholder().uniform()
    
    $('#uniform-ctl00_plcMain_btnSubmit input').click(function(){
      GG.track({type: 'EVENT', name: 'CONTACT_US_SEND', cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    })
  },
  emailsend : function(){
    GG.track.flags.pageCG  = 'RECIPES';
    GG.track.flags.pageSCG = 'DOWNLOAD_PRINT_SHARE';
    
    $('#ctl00_plcMain_pnlForm select, #ctl00_plcMain_pnlForm textarea').uniform();  
    $(' #ctl00_plcMain_pnlForm input').placeholder().uniform()
    
    var recipeName = $('h4').text();
        recipeName = recipeName.replace('You are sharing "','').replace('"','');
    
    $('#uniform-ctl00_plcMain_btnSubmit input').click(function(){
      GG.track({type: 'EVENT', name: 'EMAIL_SEND_' + recipeName, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
    });
    
  },
  finalize : function() {
    
    if(!GG.util.mobileMode()) {
      if(typeof GG.data.fb != 'undefined')  GG.ticker.facebook(GG.data.fb.data, 'greygoose', '#social-facebook-ticker');      
//    if(typeof GG.data.tw != 'undefined')  GG.ticker.twitter(GG.data.tw, 'thegooseinsider', '#social-twitter-ticker');
      if(typeof GG.data.yt != 'undefined')  GG.ticker.youtube(GG.data.yt, 'greygoosevodka', '#social-youtube-ticker');
    } else {
       window.scrollTo(0,0);
    }
    
    GG.mediaLayer();
    
    if(GG.elm.footer.length > 0) {
      var d = new Date()
        , rand = d.getTime()
        , fbsdk = 'facebook-jssdk' + rand
        , twsdk = 'twitter-jssdk' + rand
        , gpsdk = 'gplus-jssdk' + rand;
    
      (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement(s); js.id = id;
        js.src = "//platform.twitter.com/widgets.js";
        fjs.parentNode.insertBefore(js, fjs);
      }(document, 'script', twsdk));
          
      (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) return;
        js = d.createElement(s); js.id = id;
        js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=169940546420798";
        fjs.parentNode.insertBefore(js, fjs);
      }(document, 'script', fbsdk));
          
      (function(d, s, id) {
        var js, fjs = d.getElementsByTagName(s)[0];
        if (d.getElementById(id)) {return;}
        js = d.createElement(s); js.id = id;
        js.src = "//apis.google.com/js/plusone.js";
        fjs.parentNode.insertBefore(js, fjs);
      }(document, 'script', gpsdk));
      
    }
    
  }
}

/* Document Ready
   ========================================================================== */
$(document).ready(function(){

  /* Parrallax Helper Functions
     ========================================================================== */
    $.fn.backgroundScroll = function(options) {
      var defaults = { 
            offsetX : 'center',
            height  : 1100
          }
        , options = $.extend({}, defaults, options);
      this.each(function(index, value) {
        var $self = $(this)
          , rate = (options.height / GG.util.docHeight()) * options.speed;
         $(GG.elm.win).bind('scroll', function(e) {
           var distance = $.elementoffset($self)
            ,  bpos = - (distance * rate);

           $self.css({'backgroundPosition': options.offsetX + ' ' + bpos  + 'px' });
         });
      });
      return this;
    };

    $.positionoffset = function($element) {
      var fold = $(GG.elm.win).scrollTop();
      return (fold) - $element.parent().offset().top;
    };

    $.elementoffset = function($element) {
      var fold = $(GG.elm.win).scrollTop();
      return (fold) - $element.offset().top;
    };

    $.distancefromfold = function($element) {
      var fold = $(GG.elm.win).scrollTop() + $(GG.elm.win).height();
      return (fold) - $element.offset().top;
    };
    $.belowthefold = function($element) {
      var fold = $(GG.elm.win).scrollTop() + $(GG.elm.win).height();
      return fold <= $element.offset().top;
    };
    $.abovethetop = function($element) {
      var fold = $(GG.elm.win).scrollTop();
      return fold >= $element.offset().top + $element.height();
    };
    $.inview = function($element) {
      return ($.abovethetop($element) != true && $.belowthefold($element) != true)
    };


  /* Galleria Theme + Mediaplayer handelers
     ========================================================================== */
  if (typeof Galleria != "undefined") {
    Galleria.addTheme({
        name: 'classic',
        author: 'GreyGoose',
        defaults: {
            transition: 'slide',
            thumbCrop:  'height'
        },
        init: function(options) {
          var touch = Galleria.TOUCH;
          var galleryID = $('#galleries div').attr('id');
          if (!touch) {
            this.addIdleState( this.get('image-nav-left'), { left:-50 });
            this.addIdleState( this.get('image-nav-right'), { right:-50 });
            this.addIdleState( this.get('image-nav-right'), { right:-50 });
            this.addIdleState( this.get('thumbnails-container'), { bottom: -100 });
            this.addIdleState( this.get('info'), { top: -100 });
            this.bind('idle_enter',function(e) {
              if(!$('#medialayer ').hasClass('sidebar')) {
                $('#layer-buttons').fadeOut(100);
              }
            });
            this.bind('idle_exit',function(e) {
              if(!$('#medialayer ').hasClass('sidebar')) {
                $('#layer-buttons').fadeIn(100);
              }
            });
          }
          this.bind('thumbnail', function(e) {
              if (! touch ) {
                  // fade thumbnails
                  $(e.thumbTarget).css('opacity', 0.6).parent().hover(function() {
                      $(this).not('.active').children().stop().fadeTo(100, 1);
                  }, function() {
                      $(this).not('.active').children().stop().fadeTo(400, 0.6);
                  });

                  if ( e.index === this.getIndex() ) {
                      $(e.thumbTarget).css('opacity',1);
                  }
              } else {
                  $(e.thumbTarget).css('opacity', this.getIndex() ? 1 : 0.6);
              }
          });
          this.bind('image', function(e) {
            var name = galleryID + '_PHOTO_' + e.index;
            GG.track({type:'EVENT', name: 'PHOTO_GALLERY_EVENT_SHOW_' + name, cg: GG.track.flags.pageCG, scg: GG.track.flags.pageSCG});
          }); 
          
          this.bind('loadstart', function(e) {
              if (!e.cached) {
                  this.$('loader').show().fadeTo(200, 0.4);
              }

              this.$('info').toggle( this.hasInfo() );

              $(e.thumbTarget).css('opacity',1).parent().siblings().children().css('opacity', 0.6);
          });
          this.bind('loadfinish', function(e) {
              this.$('loader').fadeOut(200);
          });

          this.$('container').css({position:'absolute', zindex: '20'});

          if(GG.util.mobileMode()) {
            this.$('info').hide();
            this.$('thumbnails-container').hide();
            this.$('stage').css({bottom:'0'});
          } else {
//            this.$('stage').css({width: 500, height:  500});
//            this.enterFullscreen();
          }
          this.bind("image", function(e) {
            GG.mediaLayer.shareComment(e.index);
          });

        }
    });
  }


/* Fire based on document ontext
   ========================================================================== */ 

  var namespace  = GG.fire, context = document.body.id;
  if (typeof namespace.init === 'function') namespace.init();
  if(namespace && namespace[ context ] && (typeof namespace[ context ] === 'function')) namespace[ context ]();
  if (typeof namespace.finalize === 'function') namespace.finalize();

});
