--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 fillType	= this.currentStyle.backgroundRepeat;					// A.D. added
	var fillPos	= this.currentStyle.backgroundPosition;					// A.D. added
	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  < 0) ? "0" : rect_size.width ) +'px';
	rect.style.height		= ((rect_size.height < 0) ? "0" : rect_size.height) +'px';
	rect.style.antialias		= true;
	rect.style.zIndex		= el_zindex - 1;

//	rect.style.backgroundRepeat	= fillType;	// A.D. added
//	rect.style.backgroundPosition	= fillPos;	// A.D. added

	var fill = document.createElement('v:fill');
	    fill.color = fillColor;
	    fill.src   = (fillSrc.toLowerCase()=='none') ? '' : fillSrc;

	/* fill.type may be "solid | gradient | gradientradial | tile | pattern | frame" "Tile", "pattern" and "frame" require
	   the image attributes to be supplied. "Gradient", "gradientradial" and "gradienttitle" requires the gradient
	   attributes to be supplied. Types beyond these are specified using sub-elements.
	   http://msdn.microsoft.com/en-us/library/bb229619(v=vs.85).aspx
	   http://www.w3.org/TR/NOTE-VML#_Toc416858394
	   A.D. I was able to get some interesting effects with 'gradient' and 'gradientradial', however it works only in IE
	   therefore not practical.
	*/
	switch(fillType) {	// was hardwired to 'tile'
	case 'no-repeat':
		fill.type = 'frame';		// The image is stretched to fill the shape
		break;
	case 'repeat-x'	:
		fill.type = 'tile';
		fill.size = '100%,';		// width, height (px|pt|%)
//		fill.opacity  = '100%';
//		fill.color = 'green';
//		fill.color2= 'blue';
//		fill.method= 'sigma';
		break;
	case 'repeat-y'	:
		fill.type = 'tile';
		fill.size = ', 100%';		// width, height (px|pt|%)
		break;
	default 	:
		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>