if (typeof console == "undefined") {  window.console = { log: function () {} }; }

head.js(
  { jquery:   "/js/jquery-1.6.1.min.js"},
  { facebook: "//connect.facebook.net/en_US/all.js#appId=210279909017273&xfbml=1"},
  { plugins:  "/js/plugins.js"}
);

if (current_page === 'millennium_villages_project') {
  head.js(
    {gmap_api: "//maps.googleapis.com/maps/api/js?sensor=false&callback=gmap_initialize"},
    {infobubble: "/js/infobubble-compiled.js"}
  );

}

head.ready('plugins', function() {

//hook all modal classes
$('.modal_link').fancybox({ 'scrolling': 'no', 'overlayColor': '#000', 'overlayOpacity': .75 });

//add placeholders to older browsers
$('input[placeholder], textarea[placeholder]').placeholder();

// Slider
// ----------------------------------------

$.fn.ctSlider = function (options) {
  "use strict";
  this.defaults = {
    height: 540,
    easing_method: 'easeOutExpo',
    duration: 750,
    speed: 4000,
    timer: true,
    container_width: 960,
    css_classes: ''
  };

  options = $.extend(this.defaults, options);

  var container = this,
    timer, nav_item, old_slide, new_slide, current_pos,
    wrapper = $('<div class="slideshow_container '+options.css_classes+'"><div class="slideshow"></div></div>'),
    slide_holder = $('<div class="slide_holder"></div>'),
    slides = $('.slide', container),
    arrow_prev = $('<a class="slide_arrow prev">Previous</a>').click(function(){step_to(index - 1, true);}),
    arrow_next = $('<a class="slide_arrow next">Next</a>').click(function(){step_to(index + 1, true);}),
    nav_items = $('ul.slider > li'),
    num_slides = nav_items.length - 1,
    titles = $('h3', nav_items),
    nav_holder = $('<ul class="nav_holder"></ul>'),
    animating = 0,
    index = 0,
    paused = 0,
    autoplay = (container.hasClass('no_autoplay') ? false : true),
    centered_slides = (container.hasClass('centered_slides') ? true : false),
    direction;

  var init = function() {
    container.hide().wrap(wrapper);
    slide_holder.height(options.height).html(slides);

    $('.slideshow_container').width(options.container_width);

    $.each(nav_items, function(i, e) {
      nav_item = $(e);
      nav_item.attr('id','nav'+i);
      nav_item.data('index',i);

      if (i===0) {
        nav_item.addClass('selected');
      }

      var li_header = $('h3',nav_item);
      li_header.replaceWith(li_header.text());

      nav_item.click(function(){
        if (index !== $(this).data('index') && animating === 0) {
          clearInterval(timer);
          step_to($(this).data('index'), true);
        }
      });
    });


    nav_holder.html(nav_items)
    .css({
      width : nav_items.size() * (16+8)  + 12
      // force the container to a specific width so that margin: 0 auto will center it
      // the formula is the number of nav items time one nav item's width+margin
      // plus a little more for IE so it doesn't break the line
    });

    container.before(slide_holder);
    slide_holder.after(nav_holder);
    slide_holder.hover(
      function() { clearInterval(timer); },
      function() { start_timer(); }
    );

    $.each(slides, function(i,e) {
      //center slide content is centered_slides is true
      if(centered_slides === true) {
       $(e).wrapInner('<div class="centered_content"></div>');
       var slide_content = $(".centered_content", $(e));
       var offset_top = (options.height - slide_content.outerHeight())/2;
       slide_content.css({'top': offset_top});
      }

      //center story captions
      var caption = $(".caption", $(e));
      if (caption.hasClass('story_caption')) {
        var caption_left = (options.container_width - caption.outerWidth())/2;
        caption.css({'left' : caption_left});
      }
      else if(caption.hasClass('homepage_caption')) {
        var caption_top = (options.height - caption.outerHeight())/2;
        caption.css({'top': caption_top});
      }

      $(e).attr('id','slide'+i).css({'position':'absolute', 'top':0, 'height': options.height, 'display':(i==0?'block':'none')});
    });


    //add left / right arrows
    container.parent().parent().append(arrow_prev, arrow_next);
    container.remove();
    start_timer();
  };

  var start_timer = function(){
    if (autoplay === true) {
      clearInterval(timer);
      timer = setInterval(function(){
        step_to(index+1, false);
      },options.speed);
    }
  };

  var step_to = function(new_index, restart_timer) {
    if (animating === 1) {
      return false;
    }
    animating = 1;

    if (new_index < 0) {
      new_index = num_slides;
    }

    else if (new_index > num_slides) {
      new_index = 0;
    }

    $('#nav'+index).removeClass('selected');
    $('#nav'+new_index).addClass('selected');

    if (index === num_slides && new_index === 0) {
      direction = 'left';
    }
    else if ((index === 0 && new_index === num_slides) || (new_index < index)){
      direction = 'right';
    }
    else {
      direction = 'left';
    }

    slide_holder.css({'left':0});
    old_slide = $('#slide'+index).css({'left':0});
    new_slide = $('#slide'+new_index);

    current_pos = parseInt(old_slide.css('left'), 10);

    if (direction === 'left') {
      new_slide.css({ 'top':0, 'left': current_pos+options.container_width, 'display':'block' });
    }

    else {
      new_slide.css({ 'top':0, 'left':current_pos-options.container_width, 'display':'block' });
    }

    slide_holder.stop().animate(
      {'left': (direction==='left'?'-=':'+=')+options.container_width},
      options.duration,
      options.easing_method,
      function() {
        animating=0;
        old_slide.hide();
        // slide_holder.css({'left':0});
        //new_slide.css({'left':0});
        index = new_index;
        if (restart_timer === true) { start_timer(); }
      }
    );
  };

  init();

  return this.each(function(){});
};

if ($('.slider').is('*')) {
  if($('.slider').hasClass("slider_small")) {
    $('.slider').ctSlider({
      container_width: 794,
      height: 150,
      css_classes: 'small_nav_buttons white_buttons',
      speed: 10000
    });
  } else {
    $('.slider').ctSlider();
  }
}

// Flickr Gallery
// ----------------------------------------

if (current_page === 'resource_center') {
  var flickr_json = null;

  jsonFlickrFeed = function(response) {
    flickr_json = response;
    $('.flickr_gallery').flickr_gallery();

  }

  head.js('http://api.flickr.com/services/feeds/photos_public.gne?id=50429908@N04&format=json', function(){
  });

}

$.fn.flickr_gallery = function() {

  var gallery = this;

  var init = function() {
    gallery.find("img").each(function(index,item){
      //set photo obj
      var photo_obj = flickr_json.items[index];
      //set src, alt, and title attributes
      $(item).attr("src", photo_obj.media.m);
      $(item).attr("alt", photo_obj.description);
      $(item).attr("title", photo_obj.title);
      //create link
      var link = photo_obj.link;
      var anchor = $('<a href="'+link+'"></a>');
      //wrap img in new anchor tag
      $(item).wrap(anchor);
    });
  };


  if(flickr_json) {
    init();
  }

};



// On individual Story, What We Do, and Field Note pages, run the waypoints code
// for the sticky header
// ----------------------------------------
if ($('#sticky_header_wrapper').is('*') && !$('html').hasClass("ie7")) {
  var sticky_header = $('#sticky_header_wrapper');

  var sticky_header_wrapper_height = sticky_header.height();

  // Calculate how far to move the sticky header into view
  // If the user is logged in, stick it right to the top
  // If the user is not logged in, accomodate for the tack this / sign up CTA that is hidden there too
  var sticky_header_show_pos = ($('#sticky_create_account_cta').size()) ? '-90px' : '0px';

  $('#sticky_create_account_cta .btn_close').bind('click', function(event) {
    event.preventDefault();
    sticky_header.stop().animate({top: '-='+$('#sticky_create_account_cta').height()+'px' }, 500, 'easeOutExpo');
  })
  // var waypoint_element = $('<span id="waypoint_element"></span>');
  // $('#header').append(waypoint_element);

  // waypoint_element.waypoint(function(event, direction){
  $('#header').waypoint(function(event, direction){
    if (direction === 'down') {
      sticky_header.stop().animate({top: sticky_header_show_pos}, 500, 'easeOutExpo');
    }
    else{
      sticky_header.stop().animate({top: '-'+sticky_header_wrapper_height+'px' }, 500, 'easeOutExpo');
    }
  }, {offset: -135});

  $('.sticky_nav a').hover(
    function(){
      $(this).find('.sticky_dropdown').fadeIn(350, 'easeOutExpo');
    },
    function(){
      $(this).find('.sticky_dropdown').fadeOut(350, 'easeOutExpo');
    }
  );
}

// Run tweets code if there's a #tweets element
// ----------------------------------------
if ($('#tweets').is('*')) {
  var tweet_username = $("#tweets").attr('rel');
  $("#tweets").html('').tweet({
    username: tweet_username,
    retweets: false,
    fetch: 3,
    join_text: null,
    count: 1,
    loading_text: "loading tweets...",
    template: '{text}'
  }).append('<span class="via">via <a href="http://www.twitter.com/'+tweet_username+'">@'+tweet_username+'</a></span>');
}

// Dropkick.js code for Resource Center dropdowns
// ----------------------------------------

if ($('.filter_resources_form').is('*')) {
  var filter_form = $('.filter_resources_form');
  filter_form.find('input[type="submit"]').hide();

  $('select').dropkick({
    change: function (value, label) {
      filter_form.submit();
    }
  });

} else {
  $('select').each(function(idx,item){
    if($(item).hasClass("full_width")) {
      $(item).dropkick({
        width: '262'
      });
    } else {
      $(item).dropkick({});
    }
  });
}


if ($('.accordion').is('*')) {
  var definitions = $('.accordion dd'),
    links = $('.accordion dt a');

  definitions.hide();

  links.addClass('closed').click(function(){
    link = $(this);
    definitions.slideUp();

    if (link.hasClass('open') === false) {
      links.removeClass('open');
      link.removeClass('closed').addClass('open').parent().next().slideDown();
    }
    else {
      link.removeClass('open').addClass('closed');
    }
    return false;
  });
}

// Mailchimp AJAX submissions
// ----------------------------------------
if ($('.mailchimp').is('*')) {
  $('.mailchimp').submit(function() {
    var mail_form = $(this),
    mail_input = $('.mailchimp_email', mail_form),
    mail_submit = $('*[type=submit]', mail_form);
   // update user interface
    // $('.mailchimp input[type=submit]').hide();

    // $('.mailchimp .label').html('Adding...');

    $.ajax({
     type: 'POST',
     url: '/user/mailchimp/ajax',
     data: mail_form.serialize(),
     dataType: 'json',
     success: function(data) {
       //console.log(data.error_code);
       if (data.valid === false) {
         mail_input.val('').blur().attr('placeholder','Invalid e-mail address');
       }
       else if (data.error_code == 214) {
         // mail_submit.hide(300);
         mail_input.val('Already subscribed!');
       }
       else {
         // mail_submit.hide(300);
         mail_input.val('Thanks for signing up!');
       }
     }
    });

   return false;
 });
}

$('.email_share_link').click(function(){
  sticky_header.stop().animate({top: '0px'}, 500, 'easeOutExpo');
});

$('.share_link').click(function(){

  sticky_header.stop().animate({top: '0px'}, 500, 'easeOutExpo');

  var url = $(this).attr('href');
  openCenteredWindow(url);
  if (!$('body').hasClass('not_signed_in')) {
    $.ajax({
      type: 'POST',
      url: 'mypromise/share-click'
    });
  }

  return false;
});

// Random third module for Action Center
// ----------------------------------------
if ($('.donation_module.page_banner_module').is('*')) {
  var totalDonationModules = $('.donation_module.page_banner_module').size();

  var random = Math.floor(Math.random() * totalDonationModules);
  var randomModuleToShow = $('.donation_module:eq('+random+')');
  randomModuleToShow.css({display: 'block', visibility:'visible'});
}

// Close button for MyPromise Welcome message
// ----------------------------------------
if ($('.mypromise_initial_message .close_link').is('*')) {
  $('.mypromise_initial_message .close_link').click(function(){
    $.ajax({
     type: 'POST',
     url: '/welcome-clear',
     success: function(data) {
       $('.mypromise_initial_message').hide();
     }
    });

  });
}

if ($('#newsfeed_header').is('*')) {
  $('.pagination a').live('click',function(){
    $('.next_page_link').fadeOut({duration:300,easing:'easeOutExpo'});
    $('.page_links').stop().fadeOut(300,'easeOutExpo', function(){$(this).html('Loading Newsfeed...');}).fadeIn({duration:300,easing:'easeOutExpo'});
    var page_url = $(this).attr('href');
    $.ajax({
      url: page_url,
      complete: function(response) {
        $.scrollTo('#newsfeed_header', 800, {easing:'easeOutExpo'});
        $('.newsfeed_list').fadeOut(300,'easeOutExpo', function(){$(this).html(response.responseText);}).fadeIn({duration:300,easing:'easeOutExpo'});
      }
    });
    return false;
  });
}

if ($('#mypromise_register_form').is('*')) {

  $('#mypromise_signin_form').submit(function(){
    $('input[required]', '#mypromise_signin_form').css({'border-color':'#E5E5E5'});

    if ($('#convio_username').val() == "" || $('#convio_username').val() == $('#convio_username').attr('placeholder')) {
      $('#convio_username').css({'border-color':'red'});
      return false;
    }

    if ($('#convio_login_password').val() == "" || $('#convio_login_password').val() == $('#convio_login_password').attr('placeholder')) {
      $('#convio_login_password').css({'border-color':'red'});
      return false;
    }
  });

  $('#mypromise_register_form').submit(function(){
    $('input[required]', '#mypromise_register_form').css({'border-color':'#E5E5E5'}).placeholder();

    if ($('#convio_first_name').val() == "" || $('#convio_first_name').val() == $('#convio_first_name').attr('placeholder')) {
      $('#convio_first_name').css({'border-color':'red'});
      return false;
    }

    if ($('#convio_last_name').val() == "" || $('#convio_last_name').val() == $('#convio_last_name').attr('placeholder')) {
      $('#convio_last_name').css({'border-color':'red'});
      return false;
    }

    if ($('#convio_email').val() == "" || $('#convio_email').val() == $('#convio_email').attr('placeholder')) {
      $('#convio_email').css({'border-color':'red'});
      return false;
    }

    if ($('#convio_register_password').val() == "" || $('#convio_register_password').val() == $('#convio_register_password').attr('placeholder')) {
      $('#convio_register_password').css({'border-color':'red'});
      return false;
    }

    if ($('#convio_register_password2').val() == "" || $('#convio_register_password2').val() == $('#convio_register_password2').attr('placeholder')) {
      $('#convio_register_password2').css({'border-color':'red'});
      return false;
    }

  });

}

}); ////////////////////////////////////////////////////////////// end of head.ready for Plugins
////////////////////////////////////////////////////////////////////////////////////////////////

head.ready('facebook', function(){

window.fbAsyncInit = function() {
  FB.init({
    //appId:'210279909017273',
    appId: '210279909017273',
    cookie:true,
    status:true,
    xfbml:true
  });

  $('.fb_login').click(function () {
    fbLogin();
    // $('.fb_login').hide();
    // $('.fb_unlink').fadeIn();
    return false;
  });

  $('.fb_unlink').click(function () {
    $('.fb_id').val(0);
    // $('.fb_unlink').hide();
    // $('.fb_login').fadeIn();
    return false;
  });

  $('#fb_register').click(function() {
    FB.getLoginStatus(function (response) {
      if(response.session) {
        //$('#facebook_login').text('Your info has been loaded from Facebook!');
        populateForm(response);
      }
      else {
        fbLogin(true);
      }
    }); //FB.getLoginStatus
  }); //$('#fb_register').click
};

if ($('.fb_unlink').is('*')) {
  var fb_answer;
  $('.fb_unlink').click(function(){
    fb_answer = confirm("Do you want to unlink your Facebook Account?");
    if (fb_answer) {
      FB.login(
      function (response) {
        if(response.session) {
          $.ajax({
            url: '/facebook/unlink?access_token='+response.session.access_token,
            type: 'POST',
            success: function(result) {location.reload();}
          });
        }
      },
      {scope:'email,read_stream,publish_stream'}
      );
    }
    return false;
  });
}

if ($('.tw_unlink').is('*')) {
  var tw_answer;
  $('.tw_unlink').click(function(){
    tw_answer = confirm("Do you want to unlink your Twitter Account?");
    if (tw_answer) {
      $.ajax({
        url: '/twitter/unlink',
        success: function(result) {location.reload();}
       });
    }
    return false;
  });
}

}); ///////////////////////////////////////////////////////////// end of head.ready for Facebook
////////////////////////////////////////////////////////////////////////////////////////////////

// Centered popup function for Share Links
// ----------------------------------------
function openCenteredWindow(url) {
    'use strict';
    var wWidth = screen.width;
    var wHeight = screen.height;
    var popupWidth = 500;
    var popupHeight = 250;
    var leftPos = (wWidth - popupWidth)/2;
    var topPos = (wHeight - popupHeight)/2;
    window.open(url, "SocialShare", "width=" + popupWidth + ",height=" + popupHeight + ",resizable=1,status=0,menubar=0,location=0,toolbar=0,scrollbars=0,top=" + topPos + ",left=" + leftPos).focus();
    return true;
}

// Facebook login / linking
// ----------------------------------------
function fbLogin(populate){
  FB.login(function (response) {
    if(response.authResponse) {
        $('.fb_id').val(response.authResponse.userID);
        updateFriendCount(response, populate);
    }
        // user is logged in and granted some permissions.
        // perms is a comma separated list of granted permissions
    else {
        // user is logged in, but did not grant any permissions
    }


  },
  {scope:'email,read_stream,publish_stream'});
}

// Facebook signup form population
// ----------------------------------------
function populateForm(response){
  FB.api(
    { method: 'fql.query', query: 'SELECT uid, first_name, last_name, email FROM user WHERE uid=' + response.authResponse.userID },
    function(name_response) {
      $('#convio_fb_id').val(name_response[0].uid);
      $('#convio_first_name').val(name_response[0].first_name);
      $('#convio_last_name').val(name_response[0].last_name);
      $('#convio_email').val(name_response[0].email);
    }
  );

  FB.api(
    { method: 'fql.query', query: 'SELECT uid2 FROM friend WHERE uid1=' + response.authResponse.userID },
    function(name_response) {
      //alert($(name_response).length);
      $('.fb_friend_count').val($(name_response).length);
    }
  );
}

// Update Facebook Friend Count
// ----------------------------------------
function updateFriendCount(response, populate){
  FB.api(
    '/me/friends',
    function(name_response) {
      // alert($(name_response).length);
      //console.log(name_response);
      $('.fb_friend_count').val($(name_response.data).length);
      if(populate == null) {
        if ($('#fb_login_form').is('*')) {
          $('#fb_login_form').submit();
        }
        else if ($('#account_preferences_form').is('*')) {
          $('#account_preferences_form').submit();
        }
      }
      else {
        populateForm(response);
      }
    }
  );
}

function gmap_initialize() {
  head.ready('infobubble', function() {
    var latlng = new google.maps.LatLng(4.915832801313164, 20.0390625);
    var myOptions = {
      zoom: 3,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.SATELLITE,
      mapTypeControl: false,
      streetViewControl: false,
      panControl: false,
      zoomControl: true,
      scrollwheel: false,
      zoomControlOptions: {
        style: google.maps.ZoomControlStyle.SMALL
      }
    };


    var map = new google.maps.Map(document.getElementById("map"), myOptions);

    //custom marker & shadow
    var map_marker = new google.maps.MarkerImage('/images/gmap_marker.png',
         // This marker is 20 pixels wide by 32 pixels tall.
         new google.maps.Size(26, 38),
         // The origin for this image is 0,0.
         new google.maps.Point(0,0),
         // The anchor for this image
         new google.maps.Point(13, 38));

    var map_marker_shadow = new google.maps.MarkerImage('/images/gmap_marker_shadow.png',
        // This marker is 20 pixels wide by 32 pixels tall.
        new google.maps.Size(34, 22),
        // The origin for this image is 0,0.
        new google.maps.Point(0,0),
        // The anchor for this image
        new google.maps.Point(2, 22));

    var infoBubbles = [];

        $('#millennium_villages > li').each(function(index, item){
        var myLatLng, myMarker, contentString, infoBubble;
          village = $(this);
          myLatLng = new google.maps.LatLng(village.attr('data-latitude'), village.attr('data-longitude'));
          myMarker = new google.maps.Marker({
              position: myLatLng,
              map: map,
              icon: map_marker,
              shadow: map_marker_shadow
          });

          contentString = '<div class="gmap_info_window">'+ village.html() +'</div>';

          infoBubble = new InfoBubble({
                    content: contentString,
                    shadowStyle: 1,
                    padding: 20,
                    minWidth:213,
                    maxWidth:213,
                    minHeight:100,
                    backgroundColor: 'rgb(255,255,255)',
                    borderRadius: 4,
                    arrowSize: 5,
                    borderRadius: 2,
                    borderWidth: 0,
                    arrowPosition: 50,
                    arrowStyle: 0,
                    disableAutoPan: false,
                    disableAnimation: true
                  });
          infoBubbles.push(infoBubble);

          google.maps.event.addListener(myMarker, 'click', function() {
              if (!infoBubble.isOpen()) {
                $(infoBubbles).each(function(){
                  this.close();
                });
                var infoBubbleContent = $('#millennium_villages > li:eq('+index+')').html();
                // console.log(infoBubbleContent)
                infoBubbleContent = '<div class="gmap_info_window">'+ infoBubbleContent +'</div>';
                infoBubble.setContent(infoBubbleContent);
                infoBubble.open(map, myMarker);
              }

          });

        });

        $('#millennium_villages').css({'display': 'none'});
  });
}
