function newStyleSheet ()
{
	var $s;
	
	if (document.createStyleSheet)
	{
		try
		{
			$s = document.createStyleSheet();
		}
		catch ($e)
		{
			// There is a limit of 30 style tags in Internet Explorer
			$s = document.styleSheets[document.styleSheets.length - 1];
		}
	}
	else
	{
		$s = document.createElement('style');
		$s.type = 'text/css';
		var $head = document.getElementsByTagName('head')[0];
		if (!$head) $head = document.documentElement;

		if ($head)
		{
			$head.appendChild($s);
		}
		else if (document.styleSheets)
		{
			$s = document.styleSheets[document.styleSheets.length - 1];
		}
	}
	
	return $s;
}

function addRule ($sheet, $selector, $properties)
{
	if (!$sheet)
		return false;
	
	try
	{
		if (document.createStyleSheet)
		{
			$sheet.cssText += $selector + ' { ' + $properties + ' }';
		}
		else if ($sheet.insertRule)
		{
			$sheet.insertRule($selector+" { "+$properties+" }", $sheet.cssRules.length);
		}
		else if ($sheet.addRule)
		{
			$sheet.addRule($selector, $properties);
		}
		else
		{ 
			$sheet.appendChild(
				document.createTextNode($selector + ' { ' + $properties + ' }')
			);
		}
	}
	catch ($e)
	{
		window.alert('Error!');
	}
		
	return true;
}

// Adapted from http://web.nickshanks.com/stylesheets/ruby.css
function rubyStyles ()
{
	var $r = newStyleSheet();
	
	// IE actually has built-in support for ruby.
	if (document.all && !window.opera) return true;
	
	/*
		ruby
		{
			display: inline-table;
			text-align: center;
			white-space: nowrap;
			text-indent: 0;
			margin: 0;
			vertical-align: -10%;
		}
	*/
	addRule($r, 'ruby', 'display:inline-table;');
	addRule($r, 'ruby', 'text-align:center;');
	addRule($r, 'ruby', 'white-space:nowrap;');
	addRule($r, 'ruby', 'text-indent: 0;');
	addRule($r, 'ruby', 'margin: 0;');
	if (window.opera)
		addRule($r, 'ruby', 'vertical-align: 60%;');
	else
		addRule($r, 'ruby', 'vertical-align: -10%;');
	
	/*
		ruby > rb, ruby > rbc
		{
			display: table-row-group;
			line-height: 90%;
			font-size: 90%;
		}
	*/
	addRule($r, 'ruby>rb,ruby>rbc', 'display:table-row-group;');
	addRule($r, 'ruby>rb,ruby>rbc', 'line-height:90%;');
	addRule($r, 'ruby>rb,ruby>rbc', 'font-size:90%;');
	
	/*
		ruby > rt, ruby > rbc + rtc
		{
			display: table-header-group;
			font-size: 40%;
			line-height: 40%;
			letter-spacing: 0;
		}
	*/
	addRule($r, 'ruby>rt,ruby>rbc+rtc', 'display:table-header-group;');
	addRule($r, 'ruby>rt,ruby>rbc+rtc', 'font-size:40%;');
	addRule($r, 'ruby>rt,ruby>rbc+rtc', 'line-height:40%;');
	addRule($r, 'ruby>rt,ruby>rbc+rtc', 'letter-spacing:0;');
	
	/*
		ruby > rbc + rtc + rtc
		{
			display: table-footer-group;
			font-size: 40%;
			line-height: 40%;
			letter-spacing: 0;
		}
	*/
	addRule($r, 'ruby>rbc+rtc+rtc', 'display:table-footer-group;');
	addRule($r, 'ruby>rbc+rtc+rtc', 'font-size:40%;');
	addRule($r, 'ruby>rbc+rtc+rtc', 'line-height:40%;');
	addRule($r, 'ruby>rbc+rtc+rtc', 'letter-spacing:0;');
	
	/*
		rbc > rb, rtc > rt
		{
			display: table-cell;
			letter-spacing: 0;
		}	
	*/
	addRule($r, 'rbc>rb, rtc>rt', 'display:table-cell;');
	addRule($r, 'rbc>rb, rtc>rt', 'letter-spacing:0;');
	
	/* rt[rbspan] should be transformed into td[colspan] but that requires xslt */
	/*
		rtc > rt[rbspan] { display: table-caption; }
	*/
	addRule($r, 'rtc > rt[rbspan]', 'display: table-caption;');
	
	/*
		rp { display: none; }
	*/
	addRule($r, 'rp', 'display:none;');
	
	return true;
}

YAHOO.util.Event.onDOMReady(rubyStyles); 
