var $root = '';

(function($){
	init_datepicker();
	init_checkbox();
	

var isInternalLink = new RegExp('/medialibrary.climatecentral.org/'); 
var isInternalLink2 = new RegExp('/www.climatecentral.org/'); 

$('a[href*="http"]').each(function () { 
	if ( ! isInternalLink.test(this.href) && ! isInternalLink2.test(this.href) ) { 
		$(this).attr('target', '_blank'); 
	}
});

	var $hash = window.location.hash.replace('#', '');
	if ($hash == 'espanol'){
		$('a[href="#tb-espanol"]').trigger('click');
		toggle_language();
	}
	
	
	$.get('/dev/token',function(data){
		if(data.length > 0){
			var $val = $.trim( data );
			$('input[name="csrf_token"]').val( $val );
		}
	});
	
	$('.loader').each(function(i,itm){
		var $this = $(this), $url = $this.attr('data-load');
		if ($url.length){
			$this.load($url, function(response, status, xhr) {
  				init_datepicker();
				init_checkbox();
				if (response.trim().length == 0){$this.hide();}
			});
		}
		$this.removeClass('loader');
	});
	
	load_lazy_images();
	
	$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {toggle_language();});
	
	init_iframe_resize();

	// wrap iframes with bs embed tags
	$('iframe').each(function () {

        var $this = $(this), $src = $this.prop('src'), $parent = $this.parent(), $parent_type = $parent[0].tagName;
		
		if ( $src.indexOf('https') < 0 ){
			var $new_src = $src.replace('http://', 'https://');
			$this.prop('src', $new_src);
		}
		
		if ( $src.indexOf('outreach') == -1 && $src.indexOf('graphics-generator') == -1 && $src.indexOf('wgts') == -1){
			return true;
		}
		
		var $class = 'embed-responsive embed-responsive-16by9';
		
		if ($src.indexOf('wgts') > -1){
			$class = 'embed-responsive embed-responsive-72x64';
			if ($src.indexOf('SLR2015ComparisonSliders/SLR-ATT-Comparison') > -1){
				$class = $class + ' tall';
			}
			if ($src.indexOf('2015-lamm-sliders/pentagon') > -1){
				$class = $class + ' med-tall';
			}
			if ($src.indexOf('2015-lamm-sliders/durban') > -1){
				$class = $class + ' med-tall';
			}
		}		 
		
		if ($parent_type === 'DIV'){$parent.addClass($class);}
		else{
			$this.wrap( "<div class='"+$class+"'></div>" );
		}
		
    });

})(jQuery);

$(document).on('click', '.reveal', function(e){
	e.preventDefault();
	var $this = $(this), $target = $this.attr('data-reveal');
	console.log($target);
	$($target).toggle();
	return false;
});

/*
$(document).on('click', '#button-spanish', function(e){
	e.preventDefault();
	var $this = $(this);
	if ($this.hasClass('btn-default') ){
		$this.removeClass('btn-default');
		$this.addClass('btn-success');
	}
	else{
		$this.removeClass('btn-success');
		$this.addClass('btn-default');
	}
	return false;
});
*/

function init_datepicker(){
	$('input.datepicker').each(function(i,itm){$(this).datepicker({});
		$(this).removeClass('datepicker');
	});
}

function toggle_language(){
  $('[data-translate]').each(function(i,itm){
	var $this = $(this), $state = $this.attr('data-translate');
	if ($state == 'on'){
		$this.attr('data-translate', 'off');
		$this.hide();
	}else{
		$this.attr('data-translate', 'on');
		$this.show();
	}
  });
}


function load_lazy_images(){
	// replace transparent placeholder image with true image source
	var $count = 0;
	$('img[data-src]').each(function(i,itm){
		var $src = $(this).attr('data-src'), $src_alt = $(this).attr('data-src-alt');
		if ($src_alt && !$src)
			$src = $src_alt;
		if ($src){
			$(this).prop('src', $src).removeAttr('data-src');
			$count++;
		}			
	});
	console.log($count + ' images loaded');
}

function init_iframe_resize(){
	console.log('init_iframe_resize');
    var $allVideos = $("iframe[src^='//player.vimeo.com'], iframe[src^='//www.youtube.com'], object, embed"),
    $fluidEl = $("figure");

	$allVideos.each(function() {

	  $(this)
	    // jQuery .data does not work on object/embed elements
	    .attr('data-aspectRatio', this.height / this.width)
	    .removeAttr('height')
	    .removeAttr('width');

	});

	$(window).resize(function() {

	  var newWidth = $fluidEl.width();
	  $allVideos.each(function() {

	    var $el = $(this);
	    $el
	        .width(newWidth)
	        .height(newWidth * $el.attr('data-aspectRatio'));

	  });

	}).resize();
}

$(document).on('submit', '.ajax-post', function(e){
	e.preventDefault();
	var $this = $(this), $url = $this.prop('action'), $container = $this.attr('data-target');
	if ($this.hasClass('clicked') === false){
	  $this.addClass('clicked');
	  var $data = $this.serialize();
	  console.log($data);
	  $.get($root+$url, $data, function(data){
		  $($container).html(data);
		  $this.removeClass('clicked');
	  });
	}
	return false;
});

$(document).on('click', '.btn-load-more', function(e){
	e.preventDefault();
	var $this = $(this), $url = $this.prop('href'), $container = $this.attr('data-append-to');
	var $grab = $this.attr('data-load-grab');
	if ($this.hasClass('clicked') === false){
	  $this.addClass('clicked');
	  $.get($root+$url, function(data){
	      console.log($grab);
	  	  if ($grab){
		  	var htm = $.parseHTML(data);
			data = $(htm).find($grab).html();
		  }
		  $($container).append(data);
		  $this.closest('.load-more').remove();
	  });
	}
	return false;
});

function init_checkbox(){
	$('.button-checkbox').each(function () {
        // Settings
        var $widget = $(this),
            $button = $widget.find('button'),
            $checkbox = $widget.find('input:checkbox'),
            color = $button.data('color'),
            settings = {
                on: {
                    icon: 'glyphicon glyphicon-check'
                },
                off: {
                    icon: 'glyphicon glyphicon-unchecked'
                }
            };

        // Event Handlers
        $button.on('click', function () {
            $checkbox.prop('checked', !$checkbox.is(':checked'));
            $checkbox.triggerHandler('change');
            updateDisplay();
        });
        $checkbox.on('change', function () {updateDisplay();});

        // Actions
        function updateDisplay() {
            var isChecked = $checkbox.is(':checked');

            // Set the button's state
            $button.data('state', (isChecked) ? "on" : "off");

            // Set the button's icon
            $button.find('.state-icon')
                .removeClass()
                .addClass('state-icon ' + settings[$button.data('state')].icon);

            // Update the button's color
            if (isChecked) {
                $button
                    .removeClass('btn-default')
                    .addClass('btn-' + color + ' active');
            }
            else {
                $button
                    .removeClass('btn-' + color + ' active')
                    .addClass('btn-default');
            }
        }

        // Initialization
        function init() {

            updateDisplay();

            // Inject the icon if applicable
            if ($button.find('.state-icon').length == 0) {
                $button.prepend('<i class="state-icon ' + settings[$button.data('state')].icon + '"></i> ');
            }
        }
        init();
    });
}