1 --Do not remove this if you are using--
\r
2 Original Author: Remiz Rahnas
\r
3 Original Author URL: http://www.htmlremix.com
\r
4 Published date: 2008/09/24
\r
6 Changes by Nick Fetchak:
\r
7 - IE8 standards mode compatibility
\r
8 - VML elements now positioned behind original box rather than inside of it - should be less prone to breakage
\r
9 Published date : 2009/11/18
\r
12 <public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />
\r
13 <script type="text/javascript">
\r
15 // findPos() borrowed from http://www.quirksmode.org/js/findpos.html
\r
16 function findPos(obj) {
\r
17 var curleft = curtop = 0;
\r
19 if (obj.offsetParent) {
\r
21 curleft += obj.offsetLeft;
\r
22 curtop += obj.offsetTop;
\r
23 } while (obj = obj.offsetParent);
\r
32 function oncontentready(classID) {
\r
33 if (this.className.match(classID)) { return(false); }
\r
35 if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }
\r
37 this.className = this.className.concat(' ', classID);
\r
38 var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||
\r
39 this.currentStyle['-webkit-border-radius'] ||
\r
40 this.currentStyle['border-radius'] ||
\r
41 this.currentStyle['-khtml-border-radius']) /
\r
42 Math.min(this.offsetWidth, this.offsetHeight), 1);
\r
43 var fillColor = this.currentStyle.backgroundColor;
\r
44 var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');
\r
45 var strokeColor = this.currentStyle.borderColor;
\r
46 var strokeWeight = parseInt(this.currentStyle.borderWidth);
\r
47 var stroked = 'true';
\r
48 if (isNaN(strokeWeight)) {
\r
50 strokeColor = fillColor;
\r
54 this.style.background = 'transparent';
\r
55 this.style.borderColor = 'transparent';
\r
57 // Find which element provides position:relative for the target element (default to BODY)
\r
59 var limit = 100, i = 0;
\r
60 while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {
\r
61 el = el.parentElement;
\r
63 if (i >= limit) { return(false); }
\r
65 var el_zindex = parseInt(el.currentStyle.zIndex);
\r
66 if (isNaN(el_zindex)) { el_zindex = 0; }
\r
67 //alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);
\r
70 'width': this.offsetWidth - strokeWeight,
\r
71 'height': this.offsetHeight - strokeWeight
\r
73 var el_pos = findPos(el);
\r
74 var this_pos = findPos(this);
\r
75 this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;
\r
76 this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;
\r
78 var rect = document.createElement('v:roundrect');
\r
79 rect.arcsize = arcSize +'px';
\r
80 rect.strokecolor = strokeColor;
\r
81 rect.strokeWeight = strokeWeight +'px';
\r
82 rect.stroked = stroked;
\r
83 rect.style.display = 'block';
\r
84 rect.style.position = 'absolute';
\r
85 rect.style.top = this_pos.y +'px';
\r
86 rect.style.left = this_pos.x +'px';
\r
87 rect.style.width = rect_size.width +'px';
\r
88 rect.style.height = rect_size.height +'px';
\r
89 rect.style.antialias = true;
\r
90 rect.style.zIndex = el_zindex - 1;
\r
92 var fill = document.createElement('v:fill');
\r
93 fill.color = fillColor;
\r
97 rect.appendChild(fill);
\r
98 el.appendChild(rect);
\r
100 var css = el.document.createStyleSheet();
\r
101 css.addRule("v\\:roundrect", "behavior: url(#default#VML)");
\r
102 css.addRule("v\\:fill", "behavior: url(#default#VML)");
\r
104 isIE6 = /msie|MSIE 6/.test(navigator.userAgent);
\r
105 // IE6 doesn't support transparent borders, use padding to offset original element
\r
106 if (isIE6 && (strokeWeight > 0)) {
\r
107 this.style.borderStyle = 'none';
\r
108 this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;
\r
109 this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;
\r
112 if (typeof(window.rounded_elements) == 'undefined') {
\r
113 window.rounded_elements = new Array();
\r
115 if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }
\r
116 window.onresize = window_resize;
\r
118 this.element.vml = rect;
\r
119 window.rounded_elements.push(this.element);
\r
122 function window_resize() {
\r
123 if (typeof(window.rounded_elements) == 'undefined') { return(false); }
\r
125 for (var i in window.rounded_elements) {
\r
126 var el = window.rounded_elements[i];
\r
128 var strokeWeight = parseInt(el.currentStyle.borderWidth);
\r
129 if (isNaN(strokeWeight)) { strokeWeight = 0; }
\r
131 var parent_pos = findPos(el.vml.parentNode);
\r
132 var pos = findPos(el);
\r
133 pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;
\r
134 pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;
\r
136 el.vml.style.top = pos.y +'px';
\r
137 el.vml.style.left = pos.x +'px';
\r
140 if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }
\r