/**
 * author Remy Sharp
 * url http://remysharp.com/2009/01/26/element-in-view-event-plugin/
 */
(function ($) {
    function getViewportHeight() {
        var height = window.innerHeight; // Safari, Opera
        var mode = document.compatMode;

        if ( (mode || !$.support.boxModel) ) { // IE, Gecko
            height = (mode == 'CSS1Compat') ?
            document.documentElement.clientHeight : // Standards
            document.body.clientHeight; // Quirks
        }

        return height;
    }
	
	// Modified to handle resize as well as scroll
	
	$(window).scroll(handleViewportChange);
	$(window).bind('resize', handleViewportChange);

	function handleViewportChange() {
		var vpH = getViewportHeight(),
		  scrolltop = (document.documentElement.scrollTop ?
			  document.documentElement.scrollTop :
			  document.body.scrollTop),
		  elems = [];
		
		// naughty, but this is how it knows which elements to check for
		$.each($.cache, function () {
			if (this.events && this.events.inview) {
			  elems.push(this.handle.elem);
			}
		});
		
		if (elems.length) {
			$(elems).each(function () {
			  var $el = $(this),
				  top = $el.offset().top,
				  height = $el.height(),
				  inview = $el.data('inview') || false;
			
			  if (scrolltop > (top + height) || scrolltop + vpH < top) {
				if (inview) {
				  $el.data('inview', false);
				  $el.trigger('inview', [ false ]);
				}
			  } else if (scrolltop < (top + height)) {
				if (!inview) {
				  $el.data('inview', true);
				  $el.trigger('inview', [ true ]);
				}
			  }
			});
		}
	}
    
    // kick the event to pick up any elements already in view.
    // note however, this only works if the plugin is included after the elements are bound to 'inview'
    $(function () {
        $(window).scroll();
    });
})(jQuery);

