converted to unix-style eol
[www-register-wizard.git] / rounded.js
index 546502a..91ba02c 100644 (file)
-// 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;
+}