var Loading = function(){
};

Loading.prototype.initOpen = function(){

	var self = this;
};

Loading.prototype.open = function(callback){

	if(this.isOpen) return callback();

	var self = this;

	this.isOpen = true;

	callback && callback();
};

Loading.prototype.initClose = function(callback){

	var self = this;

	this.isOpen = false;
	
	callback && callback();


};

Loading.prototype.close = function(callback){

	if(!this.isOpen) return;

	var self = this;
	
	this.isOpen = false;
	
	callback && callback();
	
};

Loading.prototype.createSpinner = function(holderid, R1, R2, count, stroke_width, colour) {

	$(holderid).fade('hide');

	var sectorsCount = count || 12,
	color = colour || "#fff",
	width = stroke_width || 15,
	r1 = Math.min(R1, R2) || 35,
	r2 = Math.max(R1, R2) || 60,
	cx = r2 + width,
	cy = r2 + width,
	r = Raphael(holderid, r2 * 2 + width * 2, r2 * 2 + width * 2),

	sectors = [],
	opacity = [],
	beta = 2 * Math.PI / sectorsCount,

	pathParams = {stroke: color, "stroke-width": width, "stroke-linecap": "round"};

	Raphael.getColor.reset();

	for (var i = 0; i < sectorsCount; i++) {
		var alpha = beta * i - Math.PI / 2,
		cos = Math.cos(alpha),
		sin = Math.sin(alpha);
		opacity[i] = 1 / sectorsCount * i;
		sectors[i] = r.path([["M", cx + r1 * cos, cy + r1 * sin], ["L", cx + r2 * cos, cy + r2 * sin]]).attr(pathParams);
		if (color == "rainbow") {
			sectors[i].attr("stroke", Raphael.getColor());
		}
	}

	var tick;

	(function ticker() {
		opacity.unshift(opacity.pop());
		for (var i = 0; i < sectorsCount; i++) {
			sectors[i].attr("opacity", opacity[i]);
		}
		r.safari();
		tick = setTimeout(ticker, 1000 / sectorsCount);
	})();

	$(holderid).fade(1);

	return function () {
		clearTimeout(tick);
		r.remove();
	};
};
