// border-radius
// Jonah Fox
// MIT Licensed
// Use like : $(".myClass").borderRadius() will attempt to apply curved corners as per the elements -moz-border-radius attribute
// Good:
//   - supports textured forgrounds and backgrounds
//   - maintains layouts
//   - very easy to use
//   - IE6 and IE7
// Bad: 
//   - not fluid. Reapply if the dimensions change 
//   - only supports rounding all corners
//   - no hover
//   - no Opera

;(function($){

  if($.browser.msie && document.namespaces["v"] == null) {
    document.namespaces.add("v", "urn:schemas-microsoft-com:vml");
    var ss = document.createStyleSheet().owningElement;
    ss.styleSheet.cssText = "v\\:*{behavior:url(#default#VML);}"
  }

  function RR(o) {
    var html = '<div id="roundedBox" class="ie_border_radius" style="position: absolute; left: 0px; top: 0px; z-index: -1; width:' + (o.width) + "px;height:" + (o.height) + 'px;">'
    html += '<v:roundrect arcsize="' + o.arcSize + '" strokecolor="' + o.strokeColor + '" strokeweight="' + o.strokeWeight + '" style="behavior: url(#default#VML); position:absolute;  antialias: true; width:' + (o.width) + "px;height:" + (o.height) + 'px;' + "" + '" >';
    html += '<v:fill color="' + o.fillColor + '" src="' + o.fillSrc + '" type="tile" style="behavior: url(#default#VML);" />';
    html += '</v:roundrect>';
    html += "</div>"
	return html;
  }

  $.fn.borderRadius = !$.browser.msie ? function() {} : function(options){    
	 
  	  var options = options || {}
   
      return this.each(function() {
        
        var opts = {}
        
	    	if(this._border_radius_opts) {
    			opts = this._border_radius_opts
    		  $(this).find(".ie_border_radius").remove();
    		}
        else
        {
    			opts.strokeColor = this.currentStyle.borderColor; 
    			opts.strokeWeight = this.currentStyle.borderWidth; 

    			opts.fillColor = this.currentStyle.backgroundColor; 
    			opts.fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1'); 

    			this.style.border = 'none'; // perhaps add onto padding?
    			this.style.background = 'transparent';
    			this._border_radius_opts = opts
    		}

    		opts.width = $(this).outerWidth() 
    		opts.height = $(this).outerHeight() 
    		
    		var r = options.radius || parseInt( this.currentStyle['-ie-border-radius'] ||  this.currentStyle['-moz-border-radius'] || this.currentStyle['moz-border-radius'] );

    		opts.arcSize = Math.min( r / Math.min(opts.width, opts.height), 1);
   
        this.innerHTML +=  RR(opts);
        
        if(this.currentStyle.position != "absolute")
          this.style.position = "relative";
          
     	  
        this.style.zoom = 1; // give it a layout 
      });
    }
})(jQuery);