/*
  == roundBorder - 12/28/2008 - "Cowboy" Ben Alman - http://benalman.com/ ==
  
*/
jQuery.fn.roundBorder = function(size, border_color_arg, bg_color_arg) {
  if (size == undefined) size = 10;
  
  return this.each(function(){
    border_color = border_color_arg != undefined ? border_color_arg : $(this).css('borderTopColor');
    bg_color = bg_color_arg != undefined ? bg_color_arg : $(this).css('backgroundColor');
    
    var inner = $('<div class="curved_border-inner"/>');
    var top = $('<div class="curved_border-cap">');
    var bottom = top.clone();
    
    $(this)
      .wrapInner(inner)
      .prepend(top)
      .append(bottom);
    
    inner = $(this).find('div.curved_border-inner');
    
    var position = $(this).css('position');
    $(this).css({position: 'relative'});
    
    var paddingTop = inner.position().top;
    var paddingBottom = $(this).innerHeight() - inner.height() - paddingTop;
    
    paddingTop = Math.max(0, paddingTop - size + 1);
    paddingBottom = Math.max(0, paddingBottom - size + 1);
    
    $(this).css({ position:position });
    
    inner.css({
      background: bg_color,
      borderLeft: '1px solid ' + border_color,
      borderRight: '1px solid ' + border_color,
      paddingLeft: $(this).css('paddingLeft') || 0,
      paddingRight: $(this).css('paddingRight') || 0,
      paddingTop: paddingTop + 'px',
      paddingBottom: paddingBottom + 'px'
    });
    
    $(this).addClass('curved_border')
      .css({
        border: 'none',
        background: 'none',
        padding: '0'
      });
    
    var m, points = [];
    for (var i = 0; i < size; i++) {
      m = Math.round(size * (1 - Math.cos(Math.asin(i / size))));
      p = points[points.length - 1] || {};
      if (m == p.m) {
        p.h++;
      } else {
        var point = {m:m, w:1, h:1};
        if (m > p.m + 1) {
          p.w = m - p.m;
        }
        points.push(point);
      }
    }
    
    for (var i = 0; i < points.length; i++) {
      var m = points[i].m;
      var w = points[i].w;
      var h = points[i].h;
      
      var div = $('<div/>');
      top.prepend(div);
      
      var props = {
        overflow: 'hidden',
        fontSize: '1px',
        background: bg_color,
        margin: '0 ' + m + 'px',
        borderLeft: w + 'px solid ' + border_color,
        borderRight: w + 'px solid ' + border_color,
        height: h + 'px'
      };
      
      if (i == points.length - 1) {
        props.background = border_color;
      }
      
      div.css(props);
      
      bottom.append(div.clone());
    }
  });
};
