(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);}"
}
$.fn.cornerz = function(options){
function canvasCorner(t,l, r,bw,bc,bg){
var sa,ea,cw,sx,sy,x,y, p = 1.57, css="position:absolute;";
if(t)
{sa=-p; sy=r; y=0; css+="top:-"+bw+"px;"; }
else
{sa=p; sy=0; y=r; css+="bottom:-"+bw+"px;"; }
if(l)
{ea=p*2; sx=r; x=0; css+="left:-"+bw+"px;"}
else
{ea=0; sx=0; x=r; css+="right:-"+bw+"px;"; }
var canvas=$("");
var ctx=canvas[0].getContext('2d');
ctx.beginPath();
ctx.lineWidth=bw*2;
ctx.arc(sx,sy,r,sa,ea,!(t^l));
ctx.strokeStyle=bc;
ctx.stroke();
ctx.lineWidth = 0;
ctx.lineTo(x,y);
ctx.fillStyle=bg;
ctx.fill();
return canvas;
};
function canvasCorners(corners, r, bw,bc,bg) {
var hh = $("
");
$.each(corners.split(" "), function() {
hh.append(canvasCorner(this[0]=="t",this[1]=="l", r,bw,bc,bg));
});
return hh;
};
function vmlCurve(r,b,c,m,ml,mt, right_fix) {
var l = m-ml-right_fix;
var t = m-mt;
return "";
}
function vmlCorners(corners, r, bw, bc, bg, w) {
var h ="";
$.each($.trim(corners).split(" "), function() {
var css,ml=1,mt=1,right_fix=0;
if(this.charAt(0)=="t") {
css="top:-"+bw+"px;";
}
else {
css= "bottom:-"+bw+"px;";
mt=r+1;
}
if(this.charAt(1)=="l")
css+="left:-"+bw+"px;";
else {
css +="right:-"+(bw)+"px; ";
ml=r;
right_fix = 1;
}
h+="
";
h+= "";
h+= vmlCurve(r*3,r+bw,bg, -r/2,ml,mt,right_fix);
if(bw>0)
h+= vmlCurve(r*2-bw,bw,bc, Math.floor(bw/2+0.5),ml,mt,right_fix);
h+="";
h+= "
";
});
h += "
";
return h;
};
var settings = {
corners : "tl tr bl br",
radius : 10,
background: "white",
borderWidth: 0,
fixIE: true };
$.extend(settings, options || {});
var incrementProperty = function(elem, prop, x) {
var y = parseInt(elem.css(prop)) || 0 ;
elem.css(prop, x+y);
}
return this.each(function() {
var $$ = $(this);
var r = settings.radius*1.0;
var bw = (settings.borderWidth || parseInt($$.css("borderTopWidth")) || 0)*1.0;
var bg = settings.background;
var bc = settings.borderColor;
bc = bc || ( bw > 0 ? $$.css("borderTopColor") : bg);
var cs = settings.corners;
if($.browser.msie) {
h = vmlCorners(cs,r,bw,bc,bg, $(this).width() );
this.innerHTML += h;
} else
$$.append(canvasCorners(cs,r,bw,bc,bg));
if(this.style.position != "absolute")
this.style.position = "relative";
this.style.zoom = 1;
if($.browser.msie && settings.fixIE) {
var ow = $$.outerWidth();
var oh = $$.outerHeight();
if(ow%2 == 1) {
incrementProperty($$, "padding-right", 1);
incrementProperty($$, "margin-right", 1);
}
if(oh%2 == 1) {
incrementProperty($$, "padding-bottom", 1);
incrementProperty($$, "margin-bottom", 1);
}
}
}
);
}