'use strict';

var spinners = [];

$(".mg-spin").each(function (i, s) {
	spinners.push(s);
	s.rotation = 0;
	s.spinning = false;
});

$(".mg-spin").hover(
	function(e) {
		e.target.spinning = true;
	},
	function(e) {
		e.target.spinning = false;
		}
	);

setInterval(function () {
	spinners.forEach(function (s) {
		if (s.spinning) {
			rotate(s, 0.9);
		} else if (s.rotation > 0) {
			rotate(s, (s.rotation > 180) ? 0.45 : -0.45);
		}
	}, 1);
});

var rotate = function(s, degrees) {
	s.rotation += degrees;
	if (s.rotation > 360) s.rotation -= 360;

    $(s).css({'-webkit-transform' : 'rotate('+ s.rotation +'deg)',
                 '-moz-transform' : 'rotate('+ s.rotation +'deg)',
                 '-ms-transform' : 'rotate('+ s.rotation +'deg)',
                 'transform' : 'rotate('+ s.rotation +'deg)'});
};
@@ -122,16 +122,50 @@
  false;%0A
+%09s.momentum = 0;%0A%09s.spinTime = 0;%0A
 %7D);%0A%0A$(%22
@@ -368,37 +368,256 @@
 %0A%09%09%09
-rotate(s, 0.9);%0A%09%09%7D else if (
+if (s.momentum %3C 0.9) s.momentum = 0.9;%0A%09%09%09var speed = s.momentum;%0A%09%09%09rotate(s, 0.9 * speed);%0A%09%09%09s.spinTime++;%0A%09%09%09if (s.spinTime %3E 1000) %7B%0A%09%09%09%09s.momentum += 0.001;%0A%09%09%09%7D%0A%09%09%7D else %7B%0A%09%09%09s.spinTime = 0;%0A%09%09%09s.momentum *= 0.98;%0A%09%09%09if (s.rotation %3C -1 %7C%7C 
 s.ro
@@ -629,61 +629,256 @@
 n %3E 
-0
+1
 ) %7B%0A%09%09%09
-rotate(s, (s.rotation %3E 180) ? 0.45 : -0.45);
+%09s.momentum += (s.rotation %3E 180) ? 0.07 : -0.07;%0A%09%09%09%7D%0A%09%09%09rotate(s, s.momentum);%0A%09%09%09//settle%0A%09%09%09if (s.rotation %3E -1 && s.rotation %3C 1 && s.momentum %3E -0.2 && s.momentum %3C 0.2) %7B%0A%09%09%09%09s.momentum = 0;%0A%09%09%09%09s.rotation = 0;%0A%09%09%09%09rotate(s, 0);%0A%09%09%09%7D
 %0A%09%09%7D
@@ -952,18 +952,21 @@
 grees;%0A%09
-if
+while
  (s.rota
@@ -995,16 +995,59 @@
  -= 360;
+%0A%09while (s.rotation %3C 0) s.rotation += 360;
 %0A%0A    $(

improve pointless spinny things!