
 /****************************************************************
  *                                                              *
  *  curvyCorners                                                *
  *  ------------                                                *
  *                                                              *
  *  This script generates rounded corners for your divs.        *
  *                                                              *
  *  Version 1.2.7                                               *
  *  Copyright (c) 2006 Cameron Cooke                            *
  *  By: Cameron Cooke and Tim Hutchison.                        *
  *                                                              *
  *                                                              *
  *  Website: http://www.curvycorners.net                        *
  *  Email:   info@totalinfinity.com                             *
  *  Forum:   http://www.curvycorners.net/forum/                 *
  *                                                              *
  *                                                              *
  *  This library is free software; you can redistribute         *
  *  it and/or modify it under the terms of the GNU              *
  *  Lesser General Public License as published by the           *
  *  Free Software Foundation; either version 2.1 of the         *
  *  License, or (at your option) any later version.             *
  *                                                              *
  *  This library is distributed in the hope that it will        *
  *  be useful, but WITHOUT ANY WARRANTY; without even the       *
  *  implied warranty of MERCHANTABILITY or FITNESS FOR A        *
  *  PARTICULAR PURPOSE. See the GNU Lesser General Public       *
  *  License for more details.                                   *
  *                                                              *
  *  You should have received a copy of the GNU Lesser           *
  *  General Public License along with this library;             *
  *  Inc., 59 Temple Place, Suite 330, Boston,                   *
  *  MA 02111-1307 USA                                           *
  *                                                              *
  ****************************************************************/

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(); for(var i = startIndex, j = 
boxCol.length; i < j; i++)
{ if(boxCol[i].tagName.toLowerCase() == "div")
{ 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 = "absolute"; 
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)
{ 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.backgroundPosition = "-" + (topMaxRadius + 
this.borderWidth) + "px 0px"; 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"; 
newCorner.style.backgroundPosition = "-" + (this.borderWidth) + "px -" + 
(this.boxHeight + (botMaxRadius + 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"
newCorner.style.backgroundPosition = "-" + (botMaxRadius + 
this.borderWidth) + "px -" + (this.boxHeight + (botMaxRadius + 
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":
pixelBar.style.backgroundPosition = "-" + Math.abs((this.boxWidth - 
this.settings[cc].radius + this.borderWidth) + pixelBarLeft) + "px -" + 
Math.abs(this.settings[cc].radius -pixelBarHeight -pixelBarTop - 
this.borderWidth) + "px"; break; case "tl":
pixelBar.style.backgroundPosition = "-" + 
Math.abs((this.settings[cc].radius -pixelBarLeft -1) - this.borderWidth) 
+ "px -" + Math.abs(this.settings[cc].radius -pixelBarHeight 
-pixelBarTop - this.borderWidth) + "px"; break; case "bl":
pixelBar.style.backgroundPosition = "-" + 
Math.abs((this.settings[cc].radius -pixelBarLeft -1) - this.borderWidth) 
+ "px -" + Math.abs((this.boxHeight + this.settings[cc].radius + 
pixelBarTop) -this.borderWidth) + "px"; break;}
}
}
}

