-// Contributors \r
-// Ilkka Huotari at http://www.editsite.net\r
-// Mathieu 'p01' HENRI at http://www.p01.org/\r
-// http://seky.nahory.net/2005/04/rounded-corners/\r
-// Steven Wittens at http://www.acko.net/anti-aliased-nifty-corners\r
-// Original Nifty Corners by Alessandro Fulciniti at http://pro.html.it/esempio/nifty/\r
-function NiftyCheck() {\r
- if(!document.getElementById || !document.createElement) {\r
- return false;\r
- }\r
- var b = navigator.userAgent.toLowerCase();\r
- if (b.indexOf("msie 5") > 0 && b.indexOf("opera") == -1) {\r
- return false;\r
- }\r
- return true;\r
-}\r
-\r
-function Rounded(className, sizex, sizey, sizex_b, sizey_b) {\r
- var bk;\r
- if (!NiftyCheck()) return;\r
- if (typeof(sizex_b) == 'undefined')\r
- sizex_b = sizex;\r
- if (typeof(sizey_b) == 'undefined')\r
- sizey_b = sizey;\r
- var v = getElements(className);\r
- var l = v.length;\r
- for (var i = 0; i < l; i++) {\r
- color = get_current_style(v[i],"background-color","transparent");\r
- bk = get_current_style(v[i].parentNode,"background-color","transparent");\r
- AddRounded(v[i], bk, color, sizex, sizey, true);\r
- AddRounded(v[i], bk, color, sizex_b, sizey_b, false);\r
- }\r
-}\r
-\r
-Math.sqr = function (x) {\r
- return x*x;\r
-};\r
-\r
-function Blend(a, b, alpha) {\r
-\r
- var ca = Array(\r
- parseInt('0x' + a.substring(1, 3)), \r
- parseInt('0x' + a.substring(3, 5)), \r
- parseInt('0x' + a.substring(5, 7))\r
- );\r
- var cb = Array(\r
- parseInt('0x' + b.substring(1, 3)), \r
- parseInt('0x' + b.substring(3, 5)), \r
- parseInt('0x' + b.substring(5, 7))\r
- );\r
- return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16)\r
- + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16)\r
- + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16);\r
-\r
- return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16)\r
- + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16)\r
- + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16);\r
-}\r
-\r
-function AddRounded(el, bk, color, sizex, sizey, top) {\r
- if (!sizex && !sizey)\r
- return;\r
- var i, j;\r
- var d = document.createElement("div");\r
- d.style.backgroundColor = bk;\r
- var lastarc = 0;\r
- for (i = 1; i <= sizey; i++) {\r
- var coverage, arc2, arc3;\r
- // Find intersection of arc with bottom of pixel row\r
- arc = Math.sqrt(1.0 - Math.sqr(1.0 - i / sizey)) * sizex;\r
- // Calculate how many pixels are bg, fg and blended.\r
- var n_bg = sizex - Math.ceil(arc);\r
- var n_fg = Math.floor(lastarc);\r
- var n_aa = sizex - n_bg - n_fg;\r
- // Create pixel row wrapper\r
- var x = document.createElement("div");\r
- var y = d;\r
- x.style.margin = "0px " + n_bg + "px";\r
- x.style.height='1px';\r
- x.style.overflow='hidden';\r
- // Make a wrapper per anti-aliased pixel (at least one)\r
- for (j = 1; j <= n_aa; j++) {\r
- // Calculate coverage per pixel\r
- // (approximates circle by a line within the pixel)\r
- if (j == 1) {\r
- if (j == n_aa) {\r
- // Single pixel\r
- coverage = ((arc + lastarc) * .5) - n_fg;\r
- }\r
- else {\r
- // First in a run\r
- arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;\r
- coverage = (arc2 - (sizey - i)) * (arc - n_fg - n_aa + 1) * .5;\r
- // Coverage is incorrect. Why?\r
- coverage = 0;\r
- }\r
- }\r
- else if (j == n_aa) {\r
- // Last in a run\r
- arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;\r
- coverage = 1.0 - (1.0 - (arc2 - (sizey - i))) * (1.0 - (lastarc - n_fg)) * .5;\r
- }\r
- else {\r
- // Middle of a run\r
- arc3 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j) / sizex)) * sizey;\r
- arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;\r
- coverage = ((arc2 + arc3) * .5) - (sizey - i);\r
- }\r
- \r
- x.style.backgroundColor = Blend(bk, color, coverage);\r
- if (top)\r
- y.appendChild(x);\r
- else\r
- y.insertBefore(x, y.firstChild);\r
- y = x;\r
- var x = document.createElement("div");\r
- x.style.height='1px';\r
- x.style.overflow='hidden';\r
- x.style.margin = "0px 1px";\r
- }\r
- x.style.backgroundColor = color;\r
- if (top)\r
- y.appendChild(x);\r
- else\r
- y.insertBefore(x, y.firstChild);\r
- lastarc = arc;\r
- }\r
- if (top)\r
- el.insertBefore(d, el.firstChild);\r
- else\r
- el.appendChild(d);\r
-}\r
-\r
-function getElements(className) {\r
- var elements = [];\r
- var el = document.getElementsByTagName('DIV'); \r
- var regexp=new RegExp("\\b"+className+"\\b");\r
- for (var i = 0; i < el.length; i++) \r
- {\r
- if (regexp.test(el[i].className)) \r
- elements.push(el[i]);\r
- }\r
- return elements;\r
-}\r
-\r
-function get_current_style(element,property,not_accepted)\r
-{\r
- var ee,i,val,apr;\r
- try\r
- {\r
- var cs=document.defaultView.getComputedStyle(element,'');\r
- val=cs.getPropertyValue(property);\r
- }\r
- catch(ee)\r
- {\r
- if(element.currentStyle)\r
- {\r
- apr=property.split("-");\r
- for(i=1;i<apr.length;i++) apr[i]=apr[i].toUpperCase();\r
- apr=apr.join("");\r
- val=element.currentStyle.getAttribute(apr);\r
- }\r
- }\r
- if((val.indexOf("rgba") > -1 || val==not_accepted) && element.parentNode)\r
- {\r
- if(element.parentNode != document) \r
- val=get_current_style(element.parentNode,property,not_accepted);\r
- else\r
- val = '#FFFFFF';\r
- }\r
- if (val.indexOf("rgb") > -1 && val.indexOf("rgba") == -1)\r
- val = rgb2hex(val);\r
- if (val.length == 4)\r
- val = '#'+val.substring(1,1)+val.substring(1,1)+val.substring(2,1)+val.substring(2,1)+val.substring(3,1)+val.substring(3,1);\r
- return val;\r
-}\r
-\r
-function rgb2hex(value)\r
-{\r
- var x = 255;\r
- var hex = '';\r
- var i;\r
- var regexp=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;\r
- var array=regexp.exec(value);\r
- for(i=1;i<4;i++) hex += ('0'+parseInt(array[i]).toString(16)).slice(-2);\r
- return '#'+hex;\r
-}\r
+// Contributors
+// Ilkka Huotari at http://www.editsite.net
+// Mathieu 'p01' HENRI at http://www.p01.org/
+// http://seky.nahory.net/2005/04/rounded-corners/
+// Steven Wittens at http://www.acko.net/anti-aliased-nifty-corners
+// Original Nifty Corners by Alessandro Fulciniti at http://pro.html.it/esempio/nifty/
+function NiftyCheck() {
+ if(!document.getElementById || !document.createElement) {
+ return false;
+ }
+ var b = navigator.userAgent.toLowerCase();
+ if (b.indexOf("msie 5") > 0 && b.indexOf("opera") == -1) {
+ return false;
+ }
+ return true;
+}
+
+function Rounded(className, sizex, sizey, sizex_b, sizey_b) {
+ var bk;
+ if (!NiftyCheck()) return;
+ if (typeof(sizex_b) == 'undefined')
+ sizex_b = sizex;
+ if (typeof(sizey_b) == 'undefined')
+ sizey_b = sizey;
+ var v = getElements(className);
+ var l = v.length;
+ for (var i = 0; i < l; i++) {
+ color = get_current_style(v[i],"background-color","transparent");
+ bk = get_current_style(v[i].parentNode,"background-color","transparent");
+ AddRounded(v[i], bk, color, sizex, sizey, true);
+ AddRounded(v[i], bk, color, sizex_b, sizey_b, false);
+ }
+}
+
+Math.sqr = function (x) {
+ return x*x;
+};
+
+function Blend(a, b, alpha) {
+
+ var ca = Array(
+ parseInt('0x' + a.substring(1, 3)),
+ parseInt('0x' + a.substring(3, 5)),
+ parseInt('0x' + a.substring(5, 7))
+ );
+ var cb = Array(
+ parseInt('0x' + b.substring(1, 3)),
+ parseInt('0x' + b.substring(3, 5)),
+ parseInt('0x' + b.substring(5, 7))
+ );
+ return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16)
+ + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16)
+ + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16);
+
+ return '#' + ('0'+Math.round(ca[0] + (cb[0] - ca[0])*alpha).toString(16)).slice(-2).toString(16)
+ + ('0'+Math.round(ca[1] + (cb[1] - ca[1])*alpha).toString(16)).slice(-2).toString(16)
+ + ('0'+Math.round(ca[2] + (cb[2] - ca[2])*alpha).toString(16)).slice(-2).toString(16);
+}
+
+function AddRounded(el, bk, color, sizex, sizey, top) {
+ if (!sizex && !sizey)
+ return;
+ var i, j;
+ var d = document.createElement("div");
+ d.style.backgroundColor = bk;
+ var lastarc = 0;
+ for (i = 1; i <= sizey; i++) {
+ var coverage, arc2, arc3;
+ // Find intersection of arc with bottom of pixel row
+ arc = Math.sqrt(1.0 - Math.sqr(1.0 - i / sizey)) * sizex;
+ // Calculate how many pixels are bg, fg and blended.
+ var n_bg = sizex - Math.ceil(arc);
+ var n_fg = Math.floor(lastarc);
+ var n_aa = sizex - n_bg - n_fg;
+ // Create pixel row wrapper
+ var x = document.createElement("div");
+ var y = d;
+ x.style.margin = "0px " + n_bg + "px";
+ x.style.height='1px';
+ x.style.overflow='hidden';
+ // Make a wrapper per anti-aliased pixel (at least one)
+ for (j = 1; j <= n_aa; j++) {
+ // Calculate coverage per pixel
+ // (approximates circle by a line within the pixel)
+ if (j == 1) {
+ if (j == n_aa) {
+ // Single pixel
+ coverage = ((arc + lastarc) * .5) - n_fg;
+ }
+ else {
+ // First in a run
+ arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
+ coverage = (arc2 - (sizey - i)) * (arc - n_fg - n_aa + 1) * .5;
+ // Coverage is incorrect. Why?
+ coverage = 0;
+ }
+ }
+ else if (j == n_aa) {
+ // Last in a run
+ arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
+ coverage = 1.0 - (1.0 - (arc2 - (sizey - i))) * (1.0 - (lastarc - n_fg)) * .5;
+ }
+ else {
+ // Middle of a run
+ arc3 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j) / sizex)) * sizey;
+ arc2 = Math.sqrt(1.0 - Math.sqr((sizex - n_bg - j + 1) / sizex)) * sizey;
+ coverage = ((arc2 + arc3) * .5) - (sizey - i);
+ }
+
+ x.style.backgroundColor = Blend(bk, color, coverage);
+ if (top)
+ y.appendChild(x);
+ else
+ y.insertBefore(x, y.firstChild);
+ y = x;
+ var x = document.createElement("div");
+ x.style.height='1px';
+ x.style.overflow='hidden';
+ x.style.margin = "0px 1px";
+ }
+ x.style.backgroundColor = color;
+ if (top)
+ y.appendChild(x);
+ else
+ y.insertBefore(x, y.firstChild);
+ lastarc = arc;
+ }
+ if (top)
+ el.insertBefore(d, el.firstChild);
+ else
+ el.appendChild(d);
+}
+
+function getElements(className) {
+ var elements = [];
+ var el = document.getElementsByTagName('DIV');
+ var regexp=new RegExp("\\b"+className+"\\b");
+ for (var i = 0; i < el.length; i++)
+ {
+ if (regexp.test(el[i].className))
+ elements.push(el[i]);
+ }
+ return elements;
+}
+
+function get_current_style(element,property,not_accepted)
+{
+ var ee,i,val,apr;
+ try
+ {
+ var cs=document.defaultView.getComputedStyle(element,'');
+ val=cs.getPropertyValue(property);
+ }
+ catch(ee)
+ {
+ if(element.currentStyle)
+ {
+ apr=property.split("-");
+ for(i=1;i<apr.length;i++) apr[i]=apr[i].toUpperCase();
+ apr=apr.join("");
+ val=element.currentStyle.getAttribute(apr);
+ }
+ }
+ if((val.indexOf("rgba") > -1 || val==not_accepted) && element.parentNode)
+ {
+ if(element.parentNode != document)
+ val=get_current_style(element.parentNode,property,not_accepted);
+ else
+ val = '#FFFFFF';
+ }
+ if (val.indexOf("rgb") > -1 && val.indexOf("rgba") == -1)
+ val = rgb2hex(val);
+ if (val.length == 4)
+ val = '#'+val.substring(1,1)+val.substring(1,1)+val.substring(2,1)+val.substring(2,1)+val.substring(3,1)+val.substring(3,1);
+ return val;
+}
+
+function rgb2hex(value)
+{
+ var x = 255;
+ var hex = '';
+ var i;
+ var regexp=/([0-9]+)[, ]+([0-9]+)[, ]+([0-9]+)/;
+ var array=regexp.exec(value);
+ for(i=1;i<4;i++) hex += ('0'+parseInt(array[i]).toString(16)).slice(-2);
+ return '#'+hex;
+}