 
var Nifty = new Class({
 
    Implements : Options,
   
    options : {
        sameHeight:false, //true,false
        fixedHeight:false, //true,false
        top:'both', //both,left,right,none
        bottom:'both', //both,left,right,none
        transparent:false, //true,false
        radius:'normal' //small,normal,big
    },
   
    initialize : function(selector,options){
		
        this.elements = $$(selector);
        if($type(options)=='object'){
            this.setOptions(options);
        }
        if(!$('nifty-css')){
            var css = new Asset.css('niftyCorners.css',{'id':'nifty-css'});
        }
        this.elements.each(this.rounded,this);
        if(this.options.fixedHeight){
            this.maxHeight = this.elements[0].getSize().y;
        }else{
            this.maxHeight = 0;
        }
        if(this.options.sameHeight||this.options.fixedHeight){
            this.elements.each(function(el){
                var height = el.getSize().y;
                if(height>this.maxHeight){
                    this.maxHeight=height;
                }
                el.setStyle('height','auto');
            },this);
            this.elements.each(function(el){
                var gap=this.maxHeight-el.getSize().y;
                if(gap>0){
                    var t = new Element('b',{
                        'class':'niftyfill',
                        'styles':{
                            'height':gap+'px'
                        }
                    });
                    if(el.getLast().hasClass('niftycorners')){
                        t.inject(el.getLast(),'before');
                    }else{
                        t.inject(el);
                    }
                }
            },this);
        }
    },
   
    rounded : function(el){
        if(this.options.transparent || el.getStyle('background-color')=="transparent"){
            var color = "transparent";
            var bk = "transparent";
            var border = this.getParentBG(el);
            var btype="t";
        }
        else{
            var color = el.getStyle('background-color');
            var bk = this.getParentBG(el);
            var border = this.mix(color,bk);
            var btype="r";
        }
        var paddingTop = el.getStyle('padding-top').toInt();
        var paddingBottom = el.getStyle('padding-bottom').toInt();
        switch(this.options.radius){
            case 'small':
                paddingTop -= 2;
                paddingBottom -= 2;
                btype+="s";
                var lim=2;
            break;
            case 'big':
                paddingTop -= 10;
                paddingBottom -= 10;
                btype+="b";
                var lim=8;
            break;
            default:
                paddingTop -= 5;
                paddingBottom -= 5;
                var lim=4;
            break;
        }
        var i;
        if(this.options.top != 'none'){
            var t = new Element('b',{
                'class':'niftycorners',
                'styles':{
                    'margin-left': -el.getStyle('padding-left').toInt() + 'px',
                    'margin-right': -el.getStyle('padding-right').toInt() + 'px',
                    'margin-bottom': paddingTop + 'px',
                    'background-color':bk
                }
            });
            for(i=1;i<=lim;i++){
                t.adopt(this.createStrip(i,this.options.top,color,border,btype));
            }
            el.setStyle('padding-top',0);
            t.inject(el,'top');
        }
        if(this.options.bottom != 'none'){
            var b = new Element('b',{
                'class':'niftycorners',
                'styles':{
                    'margin-left': -el.getStyle('padding-left').toInt() + 'px',
                    'margin-right': -el.getStyle('padding-right').toInt() + 'px',
                    'margin-top': paddingBottom + 'px',
                    'background-color':bk
                }
            });
            for(i=lim;i>0;i--){
                b.adopt(this.createStrip(i,this.options.bottom,color,border,btype));
            }
            el.setStyle('padding-bottom',0);
            b.inject(el);
        }
        if(Browser.Engine.trident){
            this.fixIE(el);
        }
    },
   
    getParentBG : function(el){
        do{
            el=el.getParent();
        }while(el.get('tag')!='html' && el.getStyle('background-color')=="transparent")
        var color=el.getStyle('background-color');
        if(color=="transparent"){
            color="#FFFFFF";
        }
        return(color);
    },
   
    mix : function(color1,color2){
        var result = new Color(color1);
        return result.mix(color2,50);
    },
   
    createStrip : function(index,side,color,border,btype){
        var x = new Element('b',{
            'class':btype+index,
            'styles':{
                'background-color':color,
                'border-color':border
            }
        });
        if(side=="left"){
            x.setStyles({
                'border-right-width':0,
                'margin-right':0
            });
        }
        else{
            if(side=="right"){
                x.setStyles({
                    'border-left-width':0,
                    'margin-left':0
                });
            }
        }
        return(x);
    },
   
    fixIE :function(el){
    if(el.currentStyle!=null && el.currentStyle.hasLayout!=null && el.currentStyle.hasLayout==false)
        el.setStyle('display','inline-block');
    }
});
 