 /****************************************************************
  *                                                              *
  *  curvyCorners                                                *
  *  ------------                                                *
  *                                                              *
  *  This script generates rounded corners for your divs.        *
  *                                                              *
  *  Version 1.2.9                                               *
  *  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();
	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 = "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) {
								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.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;
													}
												}
											}
										}
										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";
										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;
														if(this.backgroundImage != "")
															newFillerBar.style.backgroundPosition = "-" + (topMaxRadius + this.borderWidth) + "px 0px";
														this.topContainer.appendChild(newFillerBar);
													}
													this.box.style.backgroundPosition = "0px -" + (topMaxRadius - this.borderWidth) + "px";
												}
												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; if(this.backgroundImage != "");
														newFillerBar.style.backgroundPosition = "-" + (botMaxRadius + this.borderWidth) + "px -" + (this.boxHeight + (topMaxRadius + this.borderWidth)) + "px";
														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;
														pixel.style.backgroundPosition = "-" + (this.boxWidth - (cornerRadius - intx) + this.borderWidth) + "px -" + ((this.boxHeight + topMaxRadius + inty) -this.borderWidth) + "px";
													}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)
}
