var Styles = {};
Object.extend(Styles, {
	/* Stylesheet manipulation - addRule code based on http://www.thescripts.com/forum/thread98428.html, */
	/*   others from yui-ext 0.33 (C) Copyright(c) 2006, Jack Slocum. */
	cache: [],
	mustRefresh: true,
	addRule: function(selector, rule) {
		var styleSheet;
		if (document.styleSheets) {
			if (document.styleSheets.length === 0) {
				var styleElement;
				if (document.createElement && (styleElement = document.createElement('style'))) {
					styleElement.type = 'text/css';
					document.getElementsByTagName('head')[0].appendChild(styleElement);
					styleSheet = styleElement.sheet;
				}
			}
			if (document.styleSheets.length > 0) {
				styleSheet = document.styleSheets[document.styleSheets.length - 1];
				if (styleSheet.insertRule) {
					styleSheet.insertRule(selector + ' { ' + rule + ' }', styleSheet.cssRules.length);
				} else if (styleSheet.addRule) {
					styleSheet.addRule(selector, rule);
				}
			}
		}
		this.mustRefresh = true;
	},
	getRules: function(refresh){
		if(this.mustRefresh || refresh){
			this.cache = {};
			var ds = document.styleSheets;
			for(var i = 0, len = ds.length; i < len; i++) {
				try{
					var ss = ds[i];
					var ssRules = ss.cssRules || ss.rules;
					for(var j = ssRules.length - 1; j >= 0; --j){
						this.cache[ssRules[j].selectorText] = ssRules[j];
					}
				} catch(e) {} // try catch for cross domain access issue
			}
		}
		return this.cache;
	},
	getRule: function(selector, refresh){
		var rs = this.getRules(refresh);
		if(!(selector instanceof Array)) {
			return rs[selector];
		}
		for(var i = 0; i < selector.length; i++) {
			if(rs[selector[i]]){
				return rs[selector[i]];
			}
		}
		return null;
	},
	updateRule: function(selector, name, value) {
   		if(!(selector instanceof Array)) {
   			var rule = this.getRule(selector);
   			if(rule){
   				rule.style[name.camelize()] = value;
   				return true;
   			}
   		} else {
   			for(var i = 0; i < selector.length; i++) {
   				if(this.updateRule(selector[i], property, value)) {
   					return true;
   				}
   			}
   		}
   		return false;
	}
});
