var Nifty = new Class({
							  
	getOptions: function(){
		return {
			radius: 2,
			TL : true,
			TR : true,
			BL : true,
			BR : true,
			inTopColor: false,
			inBottomColor: false,			
			outColor: false
		};
	},

	initialize: function(targets, options){
		this.setOptions(this.getOptions(), options);
		this.boxes = $$(targets);
		this.boxes.each(function(el){this.setup(el);}, this);
	},
	
	setup: function(box){
		
		inTopColor = this.options.inTopColor ? this.options.inTopColor : box.getStyle('background-color');
		inBottomColor = this.options.inBottomColor ? this.options.inBottomColor : box.getStyle('background-color');
		outColor = this.options.outColor ? this.options.outColor : box.getParent().getStyle('background-color');
		step = Math.round(Math.log(this.options.radius)*Math.LOG2E);
		loop = this.options.radius - (step*(step-1)/2);
	
		var container = new Element('div').setStyles({
			margin: box.getStyle('margin')
		}).inject(box, 'before').adopt(box.setStyle('margin','0px'));
		
		
		var TB = new Element('b').setStyles({
			display: 'block',
			height: this.options.radius,
			background: outColor
		});
		var BB = TB.clone();
		
		for (i = BStep = TStep = 1; i <= loop; i++) {
		
			if (BStep != step && i == BStep) {M = i; H = step+1-i; BStep++; TStep++}
			else if(i == loop-TStep+1) {M += step-(loop-i); TStep--}
			else {M = i; H= 1};
			
			new Element('b').setStyles({
				display: 'block',
				overflow: 'hidden',
				height: H+'px',
				marginRight: (this.options.TR ? M : 0)+'px',
				marginLeft: (this.options.TL ? M : 0)+'px',
				background: inTopColor
			}).inject(TB, 'top').clone().setStyles({
				marginRight: (this.options.BR ? M : 0)+'px',
				marginLeft: (this.options.BL ? M : 0)+'px',							
				background: inBottomColor
			}).inject(BB);
		}
			
		if (this.options.BL || this.options.BR) BB.inject(container);
		if (this.options.TL || this.options.TR) TB.inject(container, 'top');	
	}

});
Nifty.implement(new Options);