
/* Initialize */
jQuery(
  
  function ($) {
	  
	$('html').removeClass('no-js');
	$('[data-controller]').Instantiate();

  }
);

/* ---------------------------------- */

/* Instantiate */

(function($) {

  $.fn.Instantiate = function(settings) {
     
    var config = {};
 
    if (settings) $.extend(config, settings);
  
      this.each(function() { 

          var $self = $(this),
              $controller = $self.attr('data-controller');
                  
          if ($self[$controller]) $self[$controller]();
              
      });
      
  }
    
  

})(jQuery);

/* ---------------------------------- */

/* Random */

(function($) {

  $.fn.Random = function(settings) {
	  
	  var config = {};
      if (settings) $.extend(config, settings);
		
      this.each(function() { 
	  
        var $self = $(this);
        var $children = $self.children(); 
		var num = Math.floor(Math.random()*$children.size());
		$children.each(function(i){
				if(i!=num){ $(this).remove();
			}else{
				var img = $(this).find('img');
				img.attr('src', img.attr('data-src'));
			}
		});
			    
      });
      
      return this;
  }

})(jQuery); 
  
/* ---------------------------------- */

/* Sections */

(function($) {
  
  $.fn.Rotator = function(settings) {
   
     this.each(function() { 
      
        var $self = $(this),
			$images = $self.find('img'),
			$current = $images.first();
			_height = 0;
			_interval = 0,
			_index = 0;
				
		if($images.length>1){
			$images.each(function(i){
				var $image = $(this).css({position:'absolute', opacity:0});		
				if(i==0) $image.css({opacity:1}); 
				if($image.height() > _height) _height = $image.height();
			  });
			$self.height(_height+20);
			_interval = setInterval(next, 5000);
		}
		  
		function next(){
			var index = ($current.index() === ($images.length-1)) ? 0 : $current.index()+1;
			$current.stop().animate({opacity:0}, 2000, 'easeInOutSine');
			$current = $images.eq(index).animate({opacity:1}, 2000, 'easeOutSine');
		}
		
     });
     
    return this;
     
  } 
  
})(jQuery);  

/* ---------------------------------- */

/* Lazyload */
(function($){
	$.fn.lazyload=function(options){
		var settings = {threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};
		if(options){$.extend(settings,options);}
		
		var elements=this;
		if("scroll"==settings.event){
			$(settings.container).bind("scroll",
				function(event)
				{
					var counter=0;
					elements.each(
						function()
						{
							if(!$.belowthefold(this,settings)&&!$.rightoffold(this,settings))
							{
								$(this).trigger("appear");
							}else{
								if(counter++>settings.failurelimit)
								{
									return false;
								}
							}
						});
						var temp=$.grep(elements,
						function(element){
							return!element.loaded;
						});
						elements=$(temp);
					});
				}
		
					
		return this.each(
			function()
			{
				var self=this;
				if (undefined == $(self).attr("data-src")) {$(self).attr("data-src", $(self).attr("src"));}

				if("scroll"!=settings.event||$.belowthefold(self,settings)||$.rightoffold(self,settings))
				{
					if(settings.placeholder)
					{
						$(self).attr("src",settings.placeholder);
					}else{
						$(self).removeAttr("src");
					}
					self.loaded=false;
				}else{
					self.loaded=true;
				}
				$(self).one("appear",function()
				{
					if(!this.loaded){$("<img />").bind("load",
					function()
					{
						//$(self).hide().attr("src", $(self).attr("data-src"))[settings.effect](settings.effectspeed);
						$(self).attr("src", $(self).attr("data-src"))
						$(self).trigger("onload");
						self.loaded=true;
					}).attr("src",$(self).attr("data-src"));
				};
			});
					
			if("scroll"!=settings.event)
			{
				$(self).bind(settings.event,
				function(event)
				{
					if(!self.loaded)
					{
						$(self).trigger("appear");
					}
				});
			}
		});
	};
})(jQuery);
  
/* ---------------------------------- */

/* Worker */

(function($) {


    $.distancefromfold = function($element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).height() + $(window).scrollTop();
        } else {
            var fold = $(settings.container).offset().top + $(settings.container).height();
        }
        return (fold + settings.threshold) - $element.offset().top ;
    };
    
    $.belowthefold = function($element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).height() + $(window).scrollTop();
        } else {
            var fold = $(settings.container).offset().top + $(settings.container).height();
        }
        return fold <= $element.offset().top - settings.threshold;
    };
        
    $.abovethetop = function($element, settings) {
        if (settings.container === undefined || settings.container === window) {
            var fold = $(window).scrollTop();
        } else {
            var fold = $(settings.container).offset().top;
        }
        return fold >= $element.offset().top + settings.threshold  + $element.height();
    };
    
    $.inview = function($element, settings) {
        return ($.abovethetop($element,settings)!=true && $.belowthefold($element,settings)!=true)
    };
	
	$.extend($.expr[':'],{
		"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})",
		"above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})",
		"right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})",
		"left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"
	});
    
})(jQuery);  

/* ---------------------------------- */
