
/*!
  jQuery corner plugin: simple corner rounding
  Examples and documentation at: http://jquery.malsup.com/corner/
  version 2.11 (15-JUN-2010)
  Requires jQuery v1.3.2 or later
  Dual licensed under the MIT and GPL licenses:
  http://www.opensource.org/licenses/mit-license.php
  http://www.gnu.org/licenses/gpl.html
  Authors: Dave Methvin and Mike Alsup
 */
;(function($){
var style=document.createElement('div').style,
moz=style['MozBorderRadius']!==undefined,
webkit=style['WebkitBorderRadius']!==undefined,
radius=style['borderRadius']!==undefined||style['BorderRadius']!==undefined,
mode=document.documentMode||0,
noBottomFold=$.browser.msie&&(($.browser.version<8&&!mode)||mode<8),
expr=$.browser.msie&&(function(){
var div=document.createElement('div');
try{div.style.setExpression('width','0+0');div.style.removeExpression('width');}
catch(e){return false;}
return true;
})();
$.support=$.support||{};
$.support.borderRadius=moz||webkit||radius;
function sz(el,p){
return parseInt($.css(el,p))||0;
};
function hex2(s){
var s=parseInt(s).toString(16);
return(s.length<2)?'0'+s:s;
};
function gpc(node){
while(node){
var v=$.css(node,'backgroundColor'),rgb;
if(v&&v!='transparent'&&v!='rgba(0, 0, 0, 0)'){
if(v.indexOf('rgb')>=0){
rgb=v.match(/\d+/g);
return'#'+hex2(rgb[0])+hex2(rgb[1])+hex2(rgb[2]);
}
return v;
}
if(node.nodeName.toLowerCase()=='html')
break;
node=node.parentNode;
}
return'#ffffff';
};
function getWidth(fx,i,width){
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'dogfold':
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'bevelfold':
case'bevel':return i+1;
}
};
$.fn.corner=function(options){
if(this.length==0){
if(!$.isReady&&this.selector){
var s=this.selector,c=this.context;
$(function(){
$(s,c).corner(options);
});
}
return this;
}
return this.each(function(index){
var $this=$(this),
o=[$this.attr($.fn.corner.defaults.metaAttr)||'',options||''].join(' ').toLowerCase(),
keep=/keep/.test(o),
cc=((o.match(/cc:(#[0-9a-f]+)/)||[])[1]),
sc=((o.match(/sc:(#[0-9a-f]+)/)||[])[1]),
width=parseInt((o.match(/(\d+)px/)||[])[1])||10,
re=/round|bevelfold|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dogfold|dog/,
fx=((o.match(re)||['round'])[0]),
fold=/dogfold|bevelfold/.test(o),
edges={T:0,B:1},
opts={
TL:/top|tl|left/.test(o),TR:/top|tr|right/.test(o),
BL:/bottom|bl|left/.test(o),BR:/bottom|br|right/.test(o)
},
strip,pad,cssHeight,j,bot,d,ds,bw,i,w,e,c,common,$horz;
if(!opts.TL&&!opts.TR&&!opts.BL&&!opts.BR)
opts={TL:1,TR:1,BL:1,BR:1};
if($.fn.corner.defaults.useNative&&fx=='round'&&(radius||moz||webkit)&&!cc&&!sc){
if(opts.TL)
$this.css(radius?'border-top-left-radius':moz?'-moz-border-radius-topleft':'-webkit-border-top-left-radius',width+'px');
if(opts.TR)
$this.css(radius?'border-top-right-radius':moz?'-moz-border-radius-topright':'-webkit-border-top-right-radius',width+'px');
if(opts.BL)
$this.css(radius?'border-bottom-left-radius':moz?'-moz-border-radius-bottomleft':'-webkit-border-bottom-left-radius',width+'px');
if(opts.BR)
$this.css(radius?'border-bottom-right-radius':moz?'-moz-border-radius-bottomright':'-webkit-border-bottom-right-radius',width+'px');
return;
}
strip=document.createElement('div');

$(strip).css({
overflow:'hidden',
height:'1px',
minHeight:'1px',
fontSize:'1px',
backgroundColor:sc||'transparent',
borderStyle:'solid'
});
pad={
T:parseInt($.css(this,'paddingTop'))||0,R:parseInt($.css(this,'paddingRight'))||0,
B:parseInt($.css(this,'paddingBottom'))||0,L:parseInt($.css(this,'paddingLeft'))||0
};
if(typeof this.style.zoom!=undefined)this.style.zoom=1;
if(!keep)this.style.border='none';
strip.style.borderColor=cc||gpc(this.parentNode);
cssHeight=$(this).outerHeight();
for(j in edges){
bot=edges[j];
if((bot&&(opts.BL||opts.BR))||(!bot&&(opts.TL||opts.TR))){
strip.style.borderStyle='none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
d=document.createElement('div');
$(d).addClass('jquery-corner');
ds=d.style;
bot?this.appendChild(d):this.insertBefore(d,this.firstChild);
if(bot&&cssHeight!='auto'){
if($.css(this,'position')=='static')
this.style.position='relative';
ds.position='absolute';
ds.bottom=ds.left=ds.padding=ds.margin='0';
if(expr)
ds.setExpression('width','this.parentNode.offsetWidth');
else
ds.width='100%';
}
else if(!bot&&$.browser.msie){
if($.css(this,'position')=='static')
this.style.position='relative';
ds.position='absolute';
ds.top=ds.left=ds.right=ds.padding=ds.margin='0';
if(expr){
bw=sz(this,'borderLeftWidth')+sz(this,'borderRightWidth');
ds.setExpression('width','this.parentNode.offsetWidth - '+bw+'+ "px"');
}
else
ds.width='100%';
}
else{
ds.position='relative';
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(i=0;i<width;i++){
w=Math.max(0,getWidth(fx,i,width));
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);
}
if(fold&&$.support.boxModel){
if(bot&&noBottomFold)continue;
for(c in opts){
if(!opts[c])continue;
if(bot&&(c=='TL'||c=='TR'))continue;
if(!bot&&(c=='BL'||c=='BR'))continue;
common={position:'absolute',border:'none',margin:0,padding:0,overflow:'hidden',backgroundColor:strip.style.borderColor};
$horz=$('<div/>').css(common).css({width:width+'px',height:'1px'});
switch(c){
case'TL':$horz.css({bottom:0,left:0});break;
case'TR':$horz.css({bottom:0,right:0});break;
case'BL':$horz.css({top:0,left:0});break;
case'BR':$horz.css({top:0,right:0});break;
}
d.appendChild($horz[0]);
var $vert=$('<div/>').css(common).css({top:0,bottom:0,width:'1px',height:width+'px'});
switch(c){
case'TL':$vert.css({left:width});break;
case'TR':$vert.css({right:width});break;
case'BL':$vert.css({left:width});break;
case'BR':$vert.css({right:width});break;
}
d.appendChild($vert[0]);
}
}
}
}
});
};
$.fn.uncorner=function(){
if(radius||moz||webkit)
this.css(radius?'border-radius':moz?'-moz-border-radius':'-webkit-border-radius',0);
$('div.jquery-corner',this).remove();
return this;
};
$.fn.corner.defaults={
useNative:true,
metaAttr:'data-corner'
};
})(jQuery);

