$(document).ready(function(){
	var style = $('<style>').appendTo('head');
	function parseStyles(css)
	{
		$.each(css.replace(/\/\*[^\*]*\*\//g, '').replace(/\n+/g, ' ').replace(/\s+/g, ' ').split('}'), function(j, s)
		{
			s = s.split('{');
			if (s.length == 1) return;
			var selector = s[0];
			var rules = s[1];
			$.each(rules.split(';'), function(k, item)
			{
				item = item.split(':');
				var obj = {prop: $.trim(item[0]), value: $.trim(item[1])};
				if (!obj.value || obj.prop.match(/^\-/) || obj.value.match(/^\-/)) return;
				if (obj.prop == 'background' && obj.value.indexOf('gradient') != -1)
				{
					stack[selector] = stack[selector] || {};
					stack[selector][obj.prop] = obj.value;
				}
				else if ($.inArray(obj.prop, ['border-radius', 'box-shadow', 'box-sizing', 'column-count', 'column-gap']) != -1)
				{
					stack[selector] = stack[selector] || {};
					stack[selector][obj.prop] = obj.value;
				}
			});
		});
	}
	function compatStyles()
	{
		if (++sheetCtr != sheetLen) return;
		var html = '';
		var prefix = ' -o- -moz- -webkit- -khtml- '.split(' ');
		for (var sel in stack)
		{
			var rules = [];
			for (var prop in stack[sel])
			{
				var value = stack[sel][prop];
				if (prop == 'background')
				{
					var bg = value.match('^\s*(\#[0-9a-f]{3,6})?');
					bg = bg ? bg[1] : '';
					var tmp = value.match(/\(([^\)]+)\)/);
					var args = tmp[1].split(/,\s?/);
					var dir = 0, clrs = args;
					if (args.length > 2)
					{
						dir = parseInt(args[0]);
						clrs = [args[1], args[2]];
					}
					if (dir == 0)
						dir = 'left top, left bottom';
					else if (dir == -45)
						dir = 'left top, right bottom';
					rules.push('background: '+ bg +'; ');
					rules.push('background: '+ bg +' -moz-linear-gradient('+ tmp[1] +'); ');
					rules.push('background: '+ bg +' -webkit-gradient(linear, '+ dir +', from('+ clrs[0] +'), to('+ clrs[1] +')); ');
				}
				else
					rules.push(prefix.join(prop +': '+ value +'; '));
			}
			html += sel +'{ '+ rules.join('') + '}\n';
		}
		try {
			style.html(html);
		} catch(e) {
			var parts = html.split(/\s*[{}]\s*/);
			for (var i = 0; i < parts.length; i += 2)
				style.get(0).styleSheet.addRule(parts[i], parts[i + 1]);
		}
	}
	
	var sheets = document.styleSheets;
	var sheetLen = sheets.length;
	var sheetCtr = 0;
	var stack = {};
	for (var i = 0; i < sheets.length; i++)
	{
		var sheet = sheets[i];
		var el = sheet.ownerNode || sheet.owningElement;
		if ($(el).is('link'))
		{
			$.get(sheet.href, function(css)
			{
				parseStyles(css);
				compatStyles();
			}).error(function()
			{
				compatStyles();
			});
		}
		else
		{
			parseStyles(el.innerHTML);
			compatStyles();
		}
	}
});

