
jQuery.fn.corner=function(o){
function hex2(s){
var s=parseInt(s).toString(16);
return(s.length<2)?'0'+s:s;};
function gpc(node){
for(;node&&node.nodeName.toLowerCase()!='html';node=node.parentNode){
var v=jQuery.css(node,'backgroundColor');
if(v.indexOf('rgb')>=0){
if($.browser.safari&&v=='rgba(0, 0, 0, 0)')
continue;
var rgb=v.match(/\d+/g);
return'#'+ hex2(rgb[0])+ hex2(rgb[1])+ hex2(rgb[2]);}
if(v&&v!='transparent')
return v;}
return'#ffffff';};
function getW(i){
switch(fx){
case'round':return Math.round(width*(1-Math.cos(Math.asin(i/width))));
case'cool':return Math.round(width*(1+Math.cos(Math.asin(i/width))));
case'sharp':return Math.round(width*(1-Math.cos(Math.acos(i/width))));
case'bite':return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
case'slide':return Math.round(width*(Math.atan2(i,width/i)));
case'jut':return Math.round(width*(Math.atan2(width,(width-i-1))));
case'curl':return Math.round(width*(Math.atan(i)));
case'tear':return Math.round(width*(Math.cos(i)));
case'wicked':return Math.round(width*(Math.tan(i)));
case'long':return Math.round(width*(Math.sqrt(i)));
case'sculpt':return Math.round(width*(Math.log((width-i-1),width)));
case'dog':return(i&1)?(i+1):width;
case'dog2':return(i&2)?(i+1):width;
case'dog3':return(i&3)?(i+1):width;
case'fray':return(i%2)*width;
case'notch':return width;
case'bevel':return i+1;}};
o=(o||"").toLowerCase();
var keep=/keep/.test(o);
var cc=((o.match(/cc:(#[0-9a-f]+)/)||[])[1]);
var sc=((o.match(/sc:(#[0-9a-f]+)/)||[])[1]);
var width=parseInt((o.match(/(\d+)px/)||[])[1])||10;
var re=/round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dog/;
var fx=((o.match(re)||['round'])[0]);
var edges={T:0,B:1};
var opts={
TL:/top|tl/.test(o),TR:/top|tr/.test(o),
BL:/bottom|bl/.test(o),BR:/bottom|br/.test(o)};
if(!opts.TL&&!opts.TR&&!opts.BL&&!opts.BR)
opts={TL:1,TR:1,BL:1,BR:1};
var strip=document.createElement('div');
strip.style.overflow='hidden';
strip.style.height='1px';
strip.style.backgroundColor=sc||'transparent';
strip.style.borderStyle='solid';
return this.each(function(index){
var pad={
T:parseInt(jQuery.css(this,'paddingTop'))||0,R:parseInt(jQuery.css(this,'paddingRight'))||0,
B:parseInt(jQuery.css(this,'paddingBottom'))||0,L:parseInt(jQuery.css(this,'paddingLeft'))||0};
if(jQuery.browser.msie)this.style.zoom=1;
if(!keep)this.style.border='none';
strip.style.borderColor=cc||gpc(this.parentNode);
var cssHeight=jQuery.curCSS(this,'height');
for(var j in edges){
var bot=edges[j];
strip.style.borderStyle='none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
var d=document.createElement('div');
var ds=d.style;
bot?this.appendChild(d):this.insertBefore(d,this.firstChild);
if(bot&&cssHeight!='auto'){
if(jQuery.css(this,'position')=='static')
this.style.position='relative';
ds.position='absolute';
ds.bottom=ds.left=ds.padding=ds.margin='0';
if(jQuery.browser.msie)
ds.setExpression('width','this.parentNode.offsetWidth');
else
ds.width='100%';}
else{
ds.margin=!bot?'-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px':
(pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';}
for(var i=0;i<width;i++){
var w=Math.max(0,getW(i));
var e=strip.cloneNode(false);
e.style.borderWidth='0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
bot?d.appendChild(e):d.insertBefore(e,d.firstChild);}}});};