;(function($) {
	$.fn.rotate = function(options) {
		var settings = {
			degree: 8,
			speed: 133
		};
		if (options) $.extend(settings, options);
		
		var _this = $(this);
		var target = _this.get(0);
		
		var ua = navigator.userAgent;
		var isIE = /msie/i.test(ua) && !window.opera;
		var dir = -1, sinDeg = 0, cosDeg = 0, timer = null;
		var pointer, beyond, orginW, orginH;
		
		var rotate = function() {
			orginW = target.clientWidth, orginH = target.clientHeight;
			pointer = settings.degree;
			beyond = 0 - pointer;
			run(pointer);
			clearInterval(timer);
			
			timer = setInterval(function() {
				pointer = pointer + dir;
				if ( pointer < beyond ) {
					dir = 1;
				}
				if ( pointer > settings.degree ) {
					dir = -1;
				}
				run(pointer);
			}, settings.speed); 
		};
		
		var run = function(angle) {
			if (isIE) { // IE
				cosDeg = Math.cos(angle * Math.PI / 180);
				sinDeg = Math.sin(angle * Math.PI / 180);
				with(target.filters.item(0)) {
					M11 = M22 = cosDeg; M12 = -(M21 = sinDeg); 
				}
				target.style.top = (orginH - target.offsetHeight) / 2 + 'px';
				target.style.left = (orginW - target.offsetWidth) / 2 + 'px';
			} else if (target.style.MozTransform !== undefined) {  // Mozilla
				target.style.MozTransform = 'rotate(' + angle + 'deg)';
			} else if (target.style.OTransform !== undefined) {   // Opera
				target.style.OTransform = 'rotate(' + angle + 'deg)';
			} else if (target.style.webkitTransform !== undefined) { // Chrome Safari
				target.style.webkitTransform = 'rotate(' + angle + 'deg)';
			} else {
				target.style.transform = "rotate(" + angle + "deg)";
			}
		};
		
		rotate();
	};
})(jQuery);
