(function( $ ) {

	var test = $("<div>");
	function supports(prop,testValue) {
		var v = test.css(prop,"").css(prop,testValue).css("transform");
		return !(!v || v=="none" || v=="");
	}
	var supportsTransforms = supports("transform", "rotate(0)");
	var supports3dTransforms = supports("transform", "rotate3d(0,0,0,0)");
	
	
	function repaint() {
		var y = document.documentElement.scrollTop || document.body.scrollTop || window.scrollY || 0
		var h = document.documentElement.clientHeight - animBleed
		var x = [], transformValue, css
		for (var c=stack.length-1; node=stack[c--];) {
			if (y >= node.top-h && y-node.height + animBleed<node.top) {
				css = node.handler(y-node.top, node.height)
				if (supports3dTransforms && ((transformValue = css["transform"]) || css["opacity"])) {
					css["transform"] = (transformValue || "") + " translateZ(0)"
				}
				node.nodes.css( css );
			}
		}
	}

	var animBleed = 0
	
	var stack = []
	
	$.fn.parallax = function( params ) {
		
		this.each( function(i,x) {
			var y = $(this)
			for (var selector in params) {
				stack.push({
					top:		y.offset().top,
					height:		y.height(),
					nodes: 		(selector == "." ? y : $(selector, y)),
					handler:	params[selector]
				});
			}
		});
	}
	


	$(window).scroll( function() {
		repaint();
	})
	
	$(document).ready( function() {
		repaint()
	})

})(jQuery);


/*
Firefox super responsive scroll (c) Keith Clark - MIT Licensed
*/

(function(doc) {

  var root = doc.documentElement;

  // Not ideal, but better than UA sniffing.
  if ("MozAppearance" in root.style) {

    // determine the vertical scrollbar width
    var scrollbarWidth = root.clientWidth;
    root.style.overflow = "scroll";
    scrollbarWidth -= root.clientWidth;
    root.style.overflow = "";

    // create a synthetic scroll event
    var scrollEvent = doc.createEvent("UIEvent")
    scrollEvent.initEvent("scroll", true, true);

    // event dispatcher
    function scrollHandler() {
      doc.dispatchEvent(scrollEvent)
    }

    // detect mouse events in the document scrollbar track
    doc.addEventListener("mousedown", function(e) {
      if (e.clientX > root.clientWidth - scrollbarWidth) {
        doc.addEventListener("mousemove", scrollHandler, false);
        doc.addEventListener("mouseup", function() {
          doc.removeEventListener("mouseup", arguments.callee, false);
          doc.removeEventListener("mousemove", scrollHandler, false);
        }, false)
      }
    }, false)

    // override mouse wheel behaviour.
    doc.addEventListener("DOMMouseScroll", function(e) {
      // Don't disable hot key behaviours
      if (!e.ctrlKey && !e.shiftKey) {
        root.scrollTop += e.detail * 16;
        scrollHandler.call(this, e);
        e.preventDefault()
      }
    }, false)

  }
})(document);
