RB=(typeof RB=='undefined'?{}:RB);
RB.classes=(typeof RB.classes=='undefined'?{}:RB.classes);

RB.classes.roundedCorners = function()
{
	var test = document.getElementById('surround');
	if(!(typeof test.style.MozBorderRadius == 'undefined' && typeof test.style.WebkitBorderRadius == 'undefined' && typeof test.style.borderRadius == 'undefined')) return;
	this.imagePath = '/templates/rb/images/global/corners/';
	this.lteIE6 = (Shine.browser.isIE && Shine.browser.ieVersion < 7);
	var elements = [];
	var bodyClasses = document.getElementsByTagName('body')[0].className;
	var home = bodyClasses.indexOf('home') != -1;
	var department = bodyClasses.indexOf('department') != -1;
	var product = bodyClasses.indexOf('product') != -1;
	var account = bodyClasses.indexOf('account') != -1;
	var signup = bodyClasses.indexOf('signup') != -1;
	if(home)
	{
		if((masthead = document.getElementById('hp-masthead')))
		{
			var _this = this;
			// Wait til the rotating panels are created by panels.js script
			this.interval = setInterval(function() { _this.cycle(); }, 250);
//			elements.push({element: element, dimension: '6', image: 'masthead-corners.png'});
		}
		if((element = document.getElementById('special-offer'))) elements.push({element: element, dimension: '6', image: 'main-content-corners.gif'});
	}
	else if(product && (product = document.getElementById('product')))
	{
		if((element = product.getElementsByTagName('form')[0])) elements.push({element: element, dimension: '6', image: 'main-content-corners.gif'});
		var ie8 = ($.browser.msie && $.browser.version[0] == '8');
		$.each($('#overview-tabs li a'), function(key, value)
		{
			elements.push({element: value, dimension: '6', image: 'product-tabs-inactive-corners.gif', bl: false, br: false});
		});
		if((element = Shine.getElementsByClass(product, 'div', 'shine-tab-pages')[0])) elements.push({element: element, dimension: '6', image: 'main-content-corners.gif'});
		if((element = document.getElementById('product-related'))) elements.push({element: element, dimension: '6', image: 'main-content-corners.gif'});
		if((element = document.getElementById('product-also-bought'))) elements.push({element: element, dimension: '6', image: 'main-content-corners.gif'});
	}
	else
	{
		if((element = document.getElementById('main-content'))) elements.push({element: element, dimension: '6', image: 'main-content-corners.gif'});
	}
	if(department && (element = document.getElementsByTagName('h1')[0])) elements.push({element: element, dimension: '6', image: 'h1-corners.gif'});
	var panels = Shine.getElementsByClass(document.getElementById('sub-content'), 'div', 'panel');
	for(var i in panels)
	{
		if(signup || account || panels[i].className.indexOf('newsletter') != -1) elements.push({element: panels[i], dimension: '6', image: 'main-content-corners.gif'});
		else elements.push({element: panels[i], dimension: '6', image: 'panel-corners.gif'});
	}
	this.make(elements);
}
RB.classes.roundedCorners.prototype.cycle = function()
{
	// Wait til the rotating panels are created by panels.js script
	if((masthead = document.getElementById('hp-masthead')) && masthead.parentNode.className.indexOf('panel-container') == -1) return;
	clearInterval(this.interval);

	var panelContainer = masthead.parentNode;
	var elements = [];
	elements.push({element: panelContainer, dimension: '6', image: 'masthead-multi-corners.png'});
	var list = Shine.getElementsByClass(panelContainer, 'ul', 'CMSPanelList')[0];
	var listItems = list.getElementsByTagName('li');
	for(var i = 0 ; i < listItems.length ; i++)
	{
		var listItem = listItems[i];
		elements.push({element: listItem, dimension: '6', image: 'masthead-multi-corners.png'});
		if(this.lteIE6 && i == 0)
		{
			listItem.style.marginLeft = '0';
		}
	}
	this.make(elements);
	var corners = Shine.getElementsByClass(panelContainer, 'span', 'rounded-corner');
	for(var j = 0 ; j < corners.length ; j++)
	{
		if(corners[j].parentNode == panelContainer)
		{
			if(corners[j].className.indexOf('bottom') != -1)
			{
				corners[j].parentNode.removeChild(corners[j]);
			}
			else
			{
				corners[j].style.zIndex = '3';
			}
		}
		if(corners[j].parentNode.parentNode == list && corners[j].className.indexOf('top') != -1)
		{
			corners[j].parentNode.removeChild(corners[j]);
		}
	}
}
RB.classes.roundedCorners.prototype.createCornerSpan = function(horizontal, vertical)
{
	var span = Shine.createHTMLElement('span');
	Shine.addElementClass(span, 'rounded-corner');
	span.style.position = 'absolute';
	span.style.backgroundRepeat = 'no-repeat';
	span.style.backgroundPosition = horizontal + ' ' + vertical;
	Shine.addElementClass(span, horizontal);
	Shine.addElementClass(span, vertical);
	if(this.lteIE6)
	{
		span.style.fontSize = '0';
		Shine.addElementClass(span, vertical + '-' + horizontal);
	}
	return span;
}
RB.classes.roundedCorners.prototype.make = function(corners)
{
	var tl = this.createCornerSpan('left', 'top');
	var tr = this.createCornerSpan('right', 'top');
	var bl = this.createCornerSpan('left', 'bottom');
	var br = this.createCornerSpan('right', 'bottom');

	for(var i in corners)
	{
		var corner = corners[i];

		var position;
		if(window.getComputedStyle) position = window.getComputedStyle(corner.element, null).getPropertyValue('position');
		else if(corner.element.currentStyle) position = corner.element.currentStyle['position'];
		if(typeof position == 'undefined' || !position || position == 'static') corner.element.style.position = 'relative';

		// we're naively assuming each border (left, right, bottom & top) has the same width
		var borderWidth = 0;
		if(window.getComputedStyle) borderWidth = window.getComputedStyle(corner.element, null).getPropertyValue('border-top-width');
		else if(corner.element.currentStyle) borderWidth = corner.element.currentStyle['borderTopWidth'];
		borderWidth = parseInt(borderWidth) | 0;
		borderWidth = '-' + borderWidth + 'px';

		if(corner.tl !== false)
		{
			tl.style.left = borderWidth;
			tl.style.top = borderWidth;
			corner.element.appendChild(tl.cloneNode(false));
		}
		if(corner.tr !== false)
		{
			tr.style.right = borderWidth;
			tr.style.top = borderWidth;
			corner.element.appendChild(tr.cloneNode(false));
		}
		if(corner.bl !== false)
		{
			bl.style.left = borderWidth;
			bl.style.bottom = borderWidth;
			corner.element.appendChild(bl.cloneNode(false));
		}
		if(corner.br !== false)
		{
			br.style.right = borderWidth;
			br.style.bottom = borderWidth;
			corner.element.appendChild(br.cloneNode(false));
		}

		var spans = Shine.getElementsByClass(corner.element, 'span', 'rounded-corner');
		for(var j in spans)
		{
			var span = spans[j];
			if(span.parentNode == corner.element)
			{
				if(this.lteIE6)
				{
					if(Shine.hasElementClass(span, 'bottom') && span.offsetParent.clientHeight % 2) span.style.bottom = parseInt(borderWidth) -1 + 'px';
					if(Shine.hasElementClass(span, 'right') && span.offsetParent.clientWidth % 2) span.style.right = parseInt(borderWidth) -1 + 'px';
				}				
				// we're assuming the corner is a perfect round shape and isn't oval (same width, same height)
				span.style.width = corner.dimension + 'px';
				span.style.height = corner.dimension + 'px';
				span.style.backgroundImage = 'url(' + this.imagePath + corner.image + ')';
			}
		}
	}
}
if(typeof document.loadHooks == 'undefined') document.loadHooks = [];
document.loadHooks.push(function(){new RB.classes.roundedCorners();});
