function Rotate(_id, _sourceElementId, _startAngle, _endAngle, _fps, _duration, _direction) {
	var self = this;
	this.cntElementStyle;
	this.sourceElement;
	this.unsignedStep;
	this.step;
	this.cntAngle;
	this.active = 0;
	this.id = _id;
	this.sourceElementId = _sourceElementId;
	this.startAngle = _startAngle; //deg
	this.endAngle = _endAngle; //deg
	this.fps = _fps;
	this.duration = _duration; //ms
	this.direction = _direction;
	
	setTimeout (function () { self.rotate(); }, 100);
	
	this.rotating = function() {
		self.cntAngle += self.step;
		if (self.direction == '+') {
			if (self.cntAngle > self.endAngle)
				self.cntAngle = self.endAngle;
			if (self.cntAngle < self.startAngle)
				self.cntAngle = self.startAngle;
		}
		else {
			if (self.cntAngle < self.endAngle)
				self.cntAngle = self.endAngle;
			if (self.cntAngle > self.startAngle)
				self.cntAngle = self.startAngle;
		}
		self.cntElementStyle.webkitTransform = "rotate(" + self.cntAngle + "deg)";
		self.cntElementStyle.OTransform = "rotate(" + self.cntAngle + "deg)";
		self.cntElementStyle.MozTransform = "rotate(" + self.cntAngle + "deg)";
		if (self.cntAngle==self.startAngle || self.cntAngle==self.endAngle) {
			self.active = 0;
			return;
		}
		else
			setTimeout(function() { self.rotating(); }, Math.round(1000/self.fps));
	}
	
	this.enable = function() {
		self.step = self.unsignedStep;
		if (!self.active) {
			self.active = 1;
			self.rotating();
		}
	}
	
	this.disable = function() {
		self.step = -self.unsignedStep;
		if (!self.active) {
			self.active = 1;
			self.rotating();
		}
	}
	
	this.rotate = function() {
		self.cntElementStyle = document.getElementById(self.id).style;
		self.sourceElement = document.getElementById(self.sourceElementId);
		self.cntAngle = self.startAngle;
		self.cntElementStyle.webkitTransform = "rotate(" + self.cntAngle + "deg)";
		self.cntElementStyle.OTransform = "rotate(" + self.cntAngle + "deg)";
		self.cntElementStyle.MozTransform = "rotate(" + self.cntAngle + "deg)";
		
		if (self.direction == '+')
			while (self.endAngle < self.startAngle)
				self.endAngle += 360;
		else
			while (self.endAngle > self.startAngle)
				self.endAngle -= 360;
		self.unsignedStep = (self.endAngle - self.startAngle)/self.duration*Math.round(1000/self.fps);
		
		self.sourceElement.addEventListener("mouseover", self.enable, true);
		self.sourceElement.addEventListener("mouseout", self.disable, true);
	}
}
