var isIE=navigator.userAgent.toLowerCase().indexOf("msie")>-1
var isMoz=document.implementation&&document.implementation.createDocument
var isSafari=((navigator.userAgent.toLowerCase().indexOf('safari')!=-1)&&(navigator.userAgent.toLowerCase().indexOf('mac')!=-1))?true:false
function curvyCorners(){
if(typeof(arguments[0])!="object")throw newCurvyError("First parameter of curvyCorners() must be an object.")
if(typeof(arguments[1])!="object"&&typeof(arguments[1])!="string")throw newCurvyError("Second parameter of curvyCorners() must be an object or a class name.")
if(typeof(arguments[1])=="string"){
var startIndex=0
var boxCol=getElementsByClass(arguments[1])}
else{
var startIndex=1
var boxCol=arguments}
var curvyCornersCol=new Array()
if(arguments[0].validTags)
var validElements=arguments[0].validTags
else
var validElements=["div"]
for(var i=startIndex,j=boxCol.length;i<j;i++){
var currentTag=boxCol[i].tagName.toLowerCase()
if(inArray(validElements,currentTag)!==false){
curvyCornersCol[curvyCornersCol.length]=new curvyObject(arguments[0],boxCol[i])}}
this.objects=curvyCornersCol
this.applyCornersToAll=function(){
for(var x=0,k=this.objects.length;x<k;x++){
this.objects[x].applyCorners()}}}
function curvyObject(){
this.box=arguments[1]
this.settings=arguments[0]
this.topContainer=null
this.bottomContainer=null
this.masterCorners=new Array()
this.contentDIV=null
var boxHeight=get_style(this.box,"height","height")
var boxWidth=get_style(this.box,"width","width")
var borderWidth=get_style(this.box,"borderTopWidth","border-top-width")
var borderColour=get_style(this.box,"borderTopColor","border-top-color")
var boxColour=get_style(this.box,"backgroundColor","background-color")
var backgroundImage=get_style(this.box,"backgroundImage","background-image")
var boxPosition=get_style(this.box,"position","position")
var boxPadding=get_style(this.box,"paddingTop","padding-top")
this.boxHeight=parseInt(((boxHeight !=""&&boxHeight !="auto"&&boxHeight.indexOf("%")==-1)? boxHeight.substring(0,boxHeight.indexOf("px")): this.box.scrollHeight))
this.boxWidth=parseInt(((boxWidth !=""&&boxWidth !="auto"&&boxWidth.indexOf("%")==-1)? boxWidth.substring(0,boxWidth.indexOf("px")): this.box.scrollWidth))
this.borderWidth=parseInt(((borderWidth !=""&&borderWidth.indexOf("px")!==-1)? borderWidth.slice(0,borderWidth.indexOf("px")): 0))
this.boxColour=format_colour(boxColour)
this.boxPadding=parseInt(((boxPadding !=""&&boxPadding.indexOf("px")!==-1)? boxPadding.slice(0,boxPadding.indexOf("px")): 0))
this.borderColour=format_colour(borderColour)
this.borderString=this.borderWidth+"px"+" solid "+this.borderColour
this.backgroundImage=((backgroundImage !="none")? backgroundImage : "")
this.boxContent=this.box.innerHTML
if(boxPosition !="absolute")this.box.style.position="relative"
this.box.style.padding="0px"
if(isIE&&boxWidth=="auto"&&boxHeight=="auto")this.box.style.width="100%"
if(this.settings.autoPad==true&&this.boxPadding>0)
this.box.innerHTML=""
this.applyCorners=function(){
for(var t=0;t<2;t++){
switch(t){
case 0:
if(this.settings.tl || this.settings.tr){
var newMainContainer=document.createElement("DIV")
newMainContainer.style.width="100%"
newMainContainer.style.fontSize="1px"
newMainContainer.style.overflow="hidden"
newMainContainer.style.position="absolute"
newMainContainer.style.paddingLeft=this.borderWidth+"px"
newMainContainer.style.paddingRight=this.borderWidth+"px"
var topMaxRadius=Math.max(this.settings.tl ? this.settings.tl.radius : 0,this.settings.tr ? this.settings.tr.radius : 0)
newMainContainer.style.height=topMaxRadius+"px"
newMainContainer.style.top=0-topMaxRadius+"px"
newMainContainer.style.left=0-this.borderWidth+"px"
this.topContainer=this.box.appendChild(newMainContainer)}
break
case 1:
if(this.settings.bl || this.settings.br){
var newMainContainer=document.createElement("DIV")
newMainContainer.style.width="100%"
newMainContainer.style.fontSize="1px"
newMainContainer.style.overflow="hidden"
newMainContainer.style.position="relative"
newMainContainer.style.paddingLeft=this.borderWidth+"px"
newMainContainer.style.paddingRight=this.borderWidth+"px"
var botMaxRadius=Math.max(this.settings.bl ? this.settings.bl.radius : 0,this.settings.br ? this.settings.br.radius : 0)
newMainContainer.style.height=botMaxRadius+"px"
newMainContainer.style.bottom=0-botMaxRadius+"px"
newMainContainer.style.left=0-this.borderWidth+"px"
this.bottomContainer=this.box.appendChild(newMainContainer)}
break}}
if(this.topContainer)this.box.style.borderTopWidth="0px"
if(this.bottomContainer)this.box.style.borderBottomWidth="0px"
var corners=["tr","tl","br","bl"]
for(var i in corners){
if(i>-1<4){
var cc=corners[i]
if(!this.settings[cc]){
if(((cc=="tr" || cc=="tl")&&this.topContainer !=null)||((cc=="br" || cc=="bl")&&this.bottomContainer !=null)){
var newCorner=document.createElement("DIV")
newCorner.style.position="relative"
newCorner.style.fontSize="1px"
newCorner.style.overflow="hidden"
if(this.backgroundImage=="")
newCorner.style.backgroundColor=this.boxColour
else
newCorner.style.backgroundImage=this.backgroundImage
switch(cc){
case "tl":
newCorner.style.height=topMaxRadius-this.borderWidth+"px"
newCorner.style.marginRight=this.settings.tr.radius-(this.borderWidth*2)+"px"
newCorner.style.borderLeft=this.borderString
newCorner.style.borderTop=this.borderString
newCorner.style.left=-this.borderWidth+"px"
break
case "tr":
newCorner.style.height=topMaxRadius-this.borderWidth+"px"
newCorner.style.marginLeft=this.settings.tl.radius-(this.borderWidth*2)+"px"
newCorner.style.borderRight=this.borderString
newCorner.style.borderTop=this.borderString
newCorner.style.left=this.borderWidth+"px"
break
case "bl":
newCorner.style.height=botMaxRadius-this.borderWidth+"px"
newCorner.style.marginRight=this.settings.br.radius-(this.borderWidth*2)+"px"
newCorner.style.borderLeft=this.borderString
newCorner.style.borderBottom=this.borderString
newCorner.style.left=-this.borderWidth+"px"
break
case "br":
newCorner.style.height=botMaxRadius-this.borderWidth+"px"
newCorner.style.marginLeft=this.settings.bl.radius-(this.borderWidth*2)+"px"
newCorner.style.borderRight=this.borderString
newCorner.style.borderBottom=this.borderString
newCorner.style.left=this.borderWidth+"px"
break}}}
else{
if(this.masterCorners[this.settings[cc].radius]){
var newCorner=this.masterCorners[this.settings[cc].radius].cloneNode(true)}
else{
var newCorner=document.createElement("DIV")
newCorner.style.height=this.settings[cc].radius+"px"
newCorner.style.width=this.settings[cc].radius+"px"
newCorner.style.position="absolute"
newCorner.style.fontSize="1px"
newCorner.style.overflow="hidden"
var borderRadius=parseInt(this.settings[cc].radius-this.borderWidth)
for(var intx=0,j=this.settings[cc].radius;intx<j;intx++){
if((intx+1)>=borderRadius)
var y1=-1
else
var y1=(Math.floor(Math.sqrt(Math.pow(borderRadius,2)-Math.pow((intx+1),2)))-1)
if(borderRadius !=j){
if((intx)>=borderRadius)
var y2=-1
else
var y2=Math.ceil(Math.sqrt(Math.pow(borderRadius,2)-Math.pow(intx,2)))
if((intx+1)>=j)
var y3=-1
else
var y3=(Math.floor(Math.sqrt(Math.pow(j,2)-Math.pow((intx+1),2)))-1)}
if((intx)>=j)
var y4=-1
else
var y4=Math.ceil(Math.sqrt(Math.pow(j,2)-Math.pow(intx,2)))
if(y1>-1)this.drawPixel(intx,0,this.boxColour,100,(y1+1),newCorner,-1,this.settings[cc].radius)
if(borderRadius !=j){
for(var inty=(y1+1);inty<y2;inty++){
if(this.settings.antiAlias){
if(this.backgroundImage !=""){
var borderFract=(pixelFraction(intx,inty,borderRadius)*100)
if(borderFract<30){
this.drawPixel(intx,inty,this.borderColour,100,1,newCorner,0,this.settings[cc].radius)}
else{
this.drawPixel(intx,inty,this.borderColour,100,1,newCorner,-1,this.settings[cc].radius)}}
else{
var pixelcolour=BlendColour(this.boxColour,this.borderColour,pixelFraction(intx,inty,borderRadius))
this.drawPixel(intx,inty,pixelcolour,100,1,newCorner,0,this.settings[cc].radius,cc)}}}
if(this.settings.antiAlias){
if(y3>=y2){
if(y2==-1)y2=0
this.drawPixel(intx,y2,this.borderColour,100,(y3-y2+1),newCorner,0,0)}}
else{
if(y3>=y1){
this.drawPixel(intx,(y1+1),this.borderColour,100,(y3-y1),newCorner,0,0)}}
var outsideColour=this.borderColour}
else{
var outsideColour=this.boxColour
var y3=y1}
if(this.settings.antiAlias){
for(var inty=(y3+1);inty<y4;inty++){
this.drawPixel(intx,inty,outsideColour,(pixelFraction(intx,inty,j)*100),1,newCorner,((this.borderWidth>0)? 0 :-1),this.settings[cc].radius)}}}
this.masterCorners[this.settings[cc].radius]=newCorner.cloneNode(true)}
if(cc !="br"){
for(var t=0,k=newCorner.childNodes.length;t<k;t++){
var pixelBar=newCorner.childNodes[t]
var pixelBarTop=parseInt(pixelBar.style.top.substring(0,pixelBar.style.top.indexOf("px")))
var pixelBarLeft=parseInt(pixelBar.style.left.substring(0,pixelBar.style.left.indexOf("px")))
var pixelBarHeight=parseInt(pixelBar.style.height.substring(0,pixelBar.style.height.indexOf("px")))
if(cc=="tl" || cc=="bl"){
pixelBar.style.left=this.settings[cc].radius-pixelBarLeft-1+"px"}
if(cc=="tr" || cc=="tl"){
pixelBar.style.top=this.settings[cc].radius-pixelBarHeight-pixelBarTop+"px"}
switch(cc){
case "tr":
break
case "tl":
break
case "bl":
break}}}}
if(newCorner){
switch(cc){
case "tl":
if(newCorner.style.position=="absolute")newCorner.style.top="0px"
if(newCorner.style.position=="absolute")newCorner.style.left="0px"
if(this.topContainer)this.topContainer.appendChild(newCorner)
break
case "tr":
if(newCorner.style.position=="absolute")newCorner.style.top="0px"
if(newCorner.style.position=="absolute")newCorner.style.right="0px"
if(this.topContainer)this.topContainer.appendChild(newCorner)
break
case "bl":
if(newCorner.style.position=="absolute")newCorner.style.bottom="0px"
if(newCorner.style.position=="absolute")newCorner.style.left="0px"
if(this.bottomContainer)this.bottomContainer.appendChild(newCorner)
break
case "br":
if(newCorner.style.position=="absolute")newCorner.style.bottom="0px"
if(newCorner.style.position=="absolute")newCorner.style.right="0px"
if(this.bottomContainer)this.bottomContainer.appendChild(newCorner)
break}}}}
var radiusDiff=new Array()
radiusDiff["t"]=Math.abs(this.settings.tl.radius-this.settings.tr.radius)
radiusDiff["b"]=Math.abs(this.settings.bl.radius-this.settings.br.radius)
for(z in radiusDiff){
if(z=="t" || z=="b"){
if(radiusDiff[z]){
var smallerCornerType=((this.settings[z+"l"].radius<this.settings[z+"r"].radius)? z+"l" : z+"r")
var newFiller=document.createElement("DIV")
newFiller.style.height=radiusDiff[z]+"px"
newFiller.style.width=this.settings[smallerCornerType].radius+"px"
newFiller.style.position="absolute"
newFiller.style.fontSize="1px"
newFiller.style.overflow="hidden"
newFiller.style.backgroundColor=this.boxColour
switch(smallerCornerType){
case "tl":
newFiller.style.bottom="0px"
newFiller.style.left="0px"
newFiller.style.borderLeft=this.borderString
this.topContainer.appendChild(newFiller)
break
case "tr":
newFiller.style.bottom="0px"
newFiller.style.right="0px"
newFiller.style.borderRight=this.borderString
this.topContainer.appendChild(newFiller)
break
case "bl":
newFiller.style.top="0px"
newFiller.style.left="0px"
newFiller.style.borderLeft=this.borderString
this.bottomContainer.appendChild(newFiller)
break
case "br":
newFiller.style.top="0px"
newFiller.style.right="0px"
newFiller.style.borderRight=this.borderString
this.bottomContainer.appendChild(newFiller)
break}}
var newFillerBar=document.createElement("DIV")
newFillerBar.style.position="relative"
newFillerBar.style.fontSize="1px"
newFillerBar.style.overflow="hidden"
if(this.backgroundImage=="")
newFillerBar.style.backgroundColor=this.boxColour
newFillerBar.style.backgroundImage=this.backgroundImage
switch(z){
case "t":
if(this.topContainer){
if(this.settings.tl.radius&&this.settings.tr.radius){
newFillerBar.style.height=topMaxRadius-this.borderWidth+"px"
newFillerBar.style.marginLeft=this.settings.tl.radius-this.borderWidth+"px"
newFillerBar.style.marginRight=this.settings.tr.radius-this.borderWidth+"px"
newFillerBar.style.borderTop=this.borderString
this.topContainer.appendChild(newFillerBar)}}
break
case "b":
if(this.bottomContainer){
if(this.settings.bl.radius&&this.settings.br.radius){
newFillerBar.style.height=botMaxRadius-this.borderWidth+"px"
newFillerBar.style.marginLeft=this.settings.bl.radius-this.borderWidth+"px"
newFillerBar.style.marginRight=this.settings.br.radius-this.borderWidth+"px"
newFillerBar.style.borderBottom=this.borderString
this.bottomContainer.appendChild(newFillerBar)}}
break}}}
if(this.settings.autoPad==true&&this.boxPadding>0){
var contentContainer=document.createElement("DIV")
contentContainer.style.position="relative"
contentContainer.innerHTML=this.boxContent
contentContainer.className="autoPadDiv"
var topPadding=Math.abs(topMaxRadius-this.boxPadding)
var botPadding=Math.abs(botMaxRadius-this.boxPadding)
if(topMaxRadius<this.boxPadding)
contentContainer.style.paddingTop=topPadding+"px"
if(botMaxRadius<this.boxPadding)
contentContainer.style.paddingBottom=botMaxRadius+"px"
contentContainer.style.paddingLeft=this.boxPadding+"px"
contentContainer.style.paddingRight=this.boxPadding+"px"
this.contentDIV=this.box.appendChild(contentContainer)}}
this.drawPixel=function(intx,inty,colour,transAmount,height,newCorner,image,cornerRadius){
var pixel=document.createElement("DIV")
pixel.style.height=height+"px"
pixel.style.width="1px"
pixel.style.position="absolute"
pixel.style.fontSize="1px"
pixel.style.overflow="hidden"
var topMaxRadius=Math.max(this.settings["tr"].radius,this.settings["tl"].radius)
if(image==-1&&this.backgroundImage !=""){
pixel.style.backgroundImage=this.backgroundImage}
else{
pixel.style.backgroundColor=colour}
if(transAmount !=100)
setOpacity(pixel,transAmount)
pixel.style.top=inty+"px"
pixel.style.left=intx+"px"
newCorner.appendChild(pixel)}}
function insertAfter(parent,node,referenceNode){
parent.insertBefore(node,referenceNode.nextSibling)}
function BlendColour(Col1,Col2,Col1Fraction){
var red1=parseInt(Col1.substr(1,2),16)
var green1=parseInt(Col1.substr(3,2),16)
var blue1=parseInt(Col1.substr(5,2),16)
var red2=parseInt(Col2.substr(1,2),16)
var green2=parseInt(Col2.substr(3,2),16)
var blue2=parseInt(Col2.substr(5,2),16)
if(Col1Fraction>1 || Col1Fraction<0)Col1Fraction=1
var endRed=Math.round((red1*Col1Fraction)+(red2*(1-Col1Fraction)))
if(endRed>255)endRed=255
if(endRed<0)endRed=0
var endGreen=Math.round((green1*Col1Fraction)+(green2*(1-Col1Fraction)))
if(endGreen>255)endGreen=255
if(endGreen<0)endGreen=0
var endBlue=Math.round((blue1*Col1Fraction)+(blue2*(1-Col1Fraction)))
if(endBlue>255)endBlue=255
if(endBlue<0)endBlue=0
return "#"+IntToHex(endRed)+IntToHex(endGreen)+IntToHex(endBlue)}
function IntToHex(strNum){
base=strNum/16
rem=strNum % 16
base=base-(rem/16)
baseS=MakeHex(base)
remS=MakeHex(rem)
return baseS+''+remS}
function MakeHex(x){
if((x>=0)&&(x<=9)){
return x}
else{
switch(x){
case 10: return "A"
case 11: return "B"
case 12: return "C"
case 13: return "D"
case 14: return "E"
case 15: return "F"}}}
function pixelFraction(x,y,r){
var pixelfraction=0
var xvalues=new Array(1)
var yvalues=new Array(1)
var point=0
var whatsides=""
var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(x,2)))
if((intersect>=y)&&(intersect<(y+1))){
whatsides="Left"
xvalues[point]=0
yvalues[point]=intersect-y
point=point+1}
var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(y+1,2)))
if((intersect>=x)&&(intersect<(x+1))){
whatsides=whatsides+"Top"
xvalues[point]=intersect-x
yvalues[point]=1
point=point+1}
var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(x+1,2)))
if((intersect>=y)&&(intersect<(y+1))){
whatsides=whatsides+"Right"
xvalues[point]=1
yvalues[point]=intersect-y
point=point+1}
var intersect=Math.sqrt((Math.pow(r,2)-Math.pow(y,2)))
if((intersect>=x)&&(intersect<(x+1))){
whatsides=whatsides+"Bottom"
xvalues[point]=intersect-x
yvalues[point]=0}
switch(whatsides){
case "LeftRight":
pixelfraction=Math.min(yvalues[0],yvalues[1])+((Math.max(yvalues[0],yvalues[1])-Math.min(yvalues[0],yvalues[1]))/2)
break
case "TopRight":
pixelfraction=1-(((1-xvalues[0])*(1-yvalues[1]))/2)
break
case "TopBottom":
pixelfraction=Math.min(xvalues[0],xvalues[1])+((Math.max(xvalues[0],xvalues[1])-Math.min(xvalues[0],xvalues[1]))/2)
break
case "LeftBottom":
pixelfraction=(yvalues[0]*xvalues[1])/2
break
default:
pixelfraction=1}
return pixelfraction}
function rgb2Hex(rgbColour){
try{
var rgbArray=rgb2Array(rgbColour)
var red=parseInt(rgbArray[0])
var green=parseInt(rgbArray[1])
var blue=parseInt(rgbArray[2])
var hexColour="#"+IntToHex(red)+IntToHex(green)+IntToHex(blue)}
catch(e){
alert("There was an error converting the RGB value to Hexadecimal in function rgb2Hex")}
return hexColour}
function rgb2Array(rgbColour){
var rgbValues=rgbColour.substring(4,rgbColour.indexOf(")"))
var rgbArray=rgbValues.split(", ")
return rgbArray}
function setOpacity(obj,opacity){
opacity=(opacity==100)?99.999:opacity
if(isSafari&&obj.tagName !="IFRAME"){
var rgbArray=rgb2Array(obj.style.backgroundColor)
var red=parseInt(rgbArray[0])
var green=parseInt(rgbArray[1])
var blue=parseInt(rgbArray[2])
obj.style.backgroundColor="rgba("+red+", "+green+", "+blue+", "+opacity/100+")"}
else if(typeof(obj.style.opacity)!="undefined"){
obj.style.opacity=opacity/100}
else if(typeof(obj.style.MozOpacity)!="undefined"){
obj.style.MozOpacity=opacity/100}
else if(typeof(obj.style.filter)!="undefined"){
obj.style.filter="alpha(opacity:"+opacity+")"}
else if(typeof(obj.style.KHTMLOpacity)!="undefined"){
obj.style.KHTMLOpacity=opacity/100}}
function inArray(array,value){
for(var i=0;i<array.length;i++){
if(array[i]===value)return i}
return false}
function inArrayKey(array,value){
for(key in array){
if(key===value)return true}
return false}
function addEvent(elm,evType,fn,useCapture){
if(elm.addEventListener){
elm.addEventListener(evType,fn,useCapture)
return true}
else if(elm.attachEvent){
var r=elm.attachEvent('on'+evType,fn)
return r}
else{
elm['on'+evType]=fn}}
function removeEvent(obj,evType,fn,useCapture){
if(obj.removeEventListener){
obj.removeEventListener(evType,fn,useCapture)
return true
}else if(obj.detachEvent){
var r=obj.detachEvent("on"+evType,fn)
return r
}else{
alert("Handler could not be removed")}}
function format_colour(colour){
var returnColour="#ffffff"
if(colour !=""&&colour !="transparent"){
if(colour.substr(0,3)=="rgb"){
returnColour=rgb2Hex(colour)}
else if(colour.length==4){
returnColour="#"+colour.substring(1,2)+colour.substring(1,2)+colour.substring(2,3)+colour.substring(2,3)+colour.substring(3,4)+colour.substring(3,4)}
else{
returnColour=colour}}
return returnColour}
function get_style(obj,property,propertyNS){
try{
if(obj.currentStyle){
var returnVal=eval("obj.currentStyle."+property)}
else{
if(isSafari&&obj.style.display=="none"){
obj.style.display=""
var wasHidden=true}
var returnVal=document.defaultView.getComputedStyle(obj,'').getPropertyValue(propertyNS)
if(isSafari&&wasHidden){
obj.style.display="none"}}}
catch(e){}
return returnVal}
function getElementsByClass(searchClass,node,tag){
var classElements=new Array()
if(node==null)
node=document
if(tag==null)
tag='*'
var els=node.getElementsByTagName(tag)
var elsLen=els.length
var pattern=new RegExp("(^|\s)"+searchClass+"(\s|$)")
for(i=0,j=0;i<elsLen;i++){
if(pattern.test(els[i].className)){
classElements[j]=els[i]
j++}}
return classElements}
function newCurvyError(errorMessage){
return new Error("curvyCorners Error:\n"+errorMessage)}

