--Do not remove this if you are using--

Original Author: Remiz Rahnas

Original Author URL: http://www.htmlremix.com

Published date: 2008/09/24



Changes by Nick Fetchak:

- IE8 standards mode compatibility

- VML elements now positioned behind original box rather than inside of it - should be less prone to breakage

Published date : 2009/11/18





<public:attach event="oncontentready" onevent="oncontentready('v08vnSVo78t4JfjH')" />

<script type="text/javascript">



// findPos() borrowed from http://www.quirksmode.org/js/findpos.html

function findPos(obj) {

	var curleft = curtop = 0;



	if (obj.offsetParent) {

		do {

			curleft += obj.offsetLeft;

			curtop += obj.offsetTop;

		} while (obj = obj.offsetParent);

	}



	return({

		'x': curleft,

		'y': curtop

	});

}



function oncontentready(classID) {

  if (this.className.match(classID)) { return(false); }



	if (!document.namespaces.v) { document.namespaces.add("v", "urn:schemas-microsoft-com:vml"); }



	this.className = this.className.concat(' ', classID);

	var arcSize = Math.min(parseInt(this.currentStyle['-moz-border-radius'] ||

	                                this.currentStyle['-webkit-border-radius'] ||

	                                this.currentStyle['border-radius'] ||

	                                this.currentStyle['-khtml-border-radius']) /

	                       Math.min(this.offsetWidth, this.offsetHeight), 1);

	var fillColor = this.currentStyle.backgroundColor;

	var fillSrc = this.currentStyle.backgroundImage.replace(/^url\("(.+)"\)$/, '$1');

	var strokeColor = this.currentStyle.borderColor;

	var strokeWeight = parseInt(this.currentStyle.borderWidth);

	var stroked = 'true';

	if (isNaN(strokeWeight)) {

		strokeWeight = 0;

		strokeColor = fillColor;

		stroked = 'false';

	}



	this.style.background = 'transparent';

	this.style.borderColor = 'transparent';



	// Find which element provides position:relative for the target element (default to BODY)

	var el = this;

	var limit = 100, i = 0;

	while ((typeof(el) != 'unknown') && (el.currentStyle.position != 'relative') && (el.tagName != 'BODY')) {

		el = el.parentElement;

		i++;

		if (i >= limit) { return(false); }

	}

	var el_zindex = parseInt(el.currentStyle.zIndex);

	if (isNaN(el_zindex)) { el_zindex = 0; }

	//alert('got tag '+ el.tagName +' with pos '+ el.currentStyle.position);



	var rect_size = {

		'width': this.offsetWidth - strokeWeight,

		'height': this.offsetHeight - strokeWeight

	};

	var el_pos = findPos(el);

	var this_pos = findPos(this);

	this_pos.y = this_pos.y + (0.5 * strokeWeight) - el_pos.y;

	this_pos.x = this_pos.x + (0.5 * strokeWeight) - el_pos.x;



	var rect = document.createElement('v:roundrect');

	rect.arcsize = arcSize +'px';

	rect.strokecolor = strokeColor;

	rect.strokeWeight = strokeWeight +'px';

	rect.stroked = stroked;

	rect.style.display = 'block';

	rect.style.position = 'absolute';

	rect.style.top = this_pos.y +'px';

	rect.style.left = this_pos.x +'px';

	rect.style.width = rect_size.width +'px';

	rect.style.height = rect_size.height +'px';

	rect.style.antialias = true;

	rect.style.zIndex = el_zindex - 1;



	var fill = document.createElement('v:fill');

	fill.color = fillColor;

	fill.src = fillSrc;

	fill.type = 'tile';



	rect.appendChild(fill);

	el.appendChild(rect);



	var css = el.document.createStyleSheet();

	css.addRule("v\\:roundrect", "behavior: url(#default#VML)");

	css.addRule("v\\:fill", "behavior: url(#default#VML)");



	isIE6 = /msie|MSIE 6/.test(navigator.userAgent);

	// IE6 doesn't support transparent borders, use padding to offset original element

	if (isIE6 && (strokeWeight > 0)) {

		this.style.borderStyle = 'none';

		this.style.paddingTop = parseInt(this.currentStyle.paddingTop || 0) + strokeWeight;

		this.style.paddingBottom = parseInt(this.currentStyle.paddingBottom || 0) + strokeWeight;

	}



	if (typeof(window.rounded_elements) == 'undefined') {

		window.rounded_elements = new Array();



		if (typeof(window.onresize) == 'function') { window.previous_onresize = window.onresize; }

		window.onresize = window_resize;

	}

	this.element.vml = rect;

	window.rounded_elements.push(this.element);

}



function window_resize() {

	if (typeof(window.rounded_elements) == 'undefined') { return(false); }



	for (var i in window.rounded_elements) {

		var el = window.rounded_elements[i];



		var strokeWeight = parseInt(el.currentStyle.borderWidth);

		if (isNaN(strokeWeight)) { strokeWeight = 0; }



		var parent_pos = findPos(el.vml.parentNode);

		var pos = findPos(el);

		pos.y = pos.y + (0.5 * strokeWeight) - parent_pos.y;

		pos.x = pos.x + (0.5 * strokeWeight) - parent_pos.x;



		el.vml.style.top = pos.y +'px';

		el.vml.style.left = pos.x +'px';

	}



	if (typeof(window.previous_onresize) == 'function') { window.previous_onresize(); }

}

</script>