//.CommonJS var CSSOM = {

CSSStyleDeclaration: require("./CSSStyleDeclaration").CSSStyleDeclaration,
CSSRule: require("./CSSRule").CSSRule

}; ///CommonJS

/**

* @constructor
* @see http://dev.w3.org/csswg/cssom/#cssstylerule
* @see http://www.w3.org/TR/DOM-Level-2-Style/css.html#CSS-CSSStyleRule
*/

CSSOM.CSSStyleRule = function CSSStyleRule() {

CSSOM.CSSRule.call(this);
this.selectorText = "";
this.style = new CSSOM.CSSStyleDeclaration();
this.style.parentRule = this;

};

CSSOM.CSSStyleRule.prototype = new CSSOM.CSSRule(); CSSOM.CSSStyleRule.prototype.constructor = CSSOM.CSSStyleRule; CSSOM.CSSStyleRule.prototype.type = 1;

Object.defineProperty(CSSOM.CSSStyleRule.prototype, “cssText”, {

get: function() {
        var text;
        if (this.selectorText) {
                text = this.selectorText + " {" + this.style.cssText + "}";
        } else {
                text = "";
        }
        return text;
},
set: function(cssText) {
        var rule = CSSOM.CSSStyleRule.parse(cssText);
        this.style = rule.style;
        this.selectorText = rule.selectorText;
}

});

/**

* NON-STANDARD
* lightweight version of parse.js.
* @param {string} ruleText
* @return CSSStyleRule
*/

CSSOM.CSSStyleRule.parse = function(ruleText) {

var i = 0;
var state = "selector";
var index;
var j = i;
var buffer = "";

var SIGNIFICANT_WHITESPACE = {
        "selector": true,
        "value": true
};

var styleRule = new CSSOM.CSSStyleRule();
var name, priority="";

for (var character; (character = ruleText.charAt(i)); i++) {

        switch (character) {

        case " ":
        case "\t":
        case "\r":
        case "\n":
        case "\f":
                if (SIGNIFICANT_WHITESPACE[state]) {
                        // Squash 2 or more white-spaces in the row into 1
                        switch (ruleText.charAt(i - 1)) {
                                case " ":
                                case "\t":
                                case "\r":
                                case "\n":
                                case "\f":
                                        break;
                                default:
                                        buffer += " ";
                                        break;
                        }
                }
                break;

        // String
        case '"':
                j = i + 1;
                index = ruleText.indexOf('"', j) + 1;
                if (!index) {
                        throw '" is missing';
                }
                buffer += ruleText.slice(i, index);
                i = index - 1;
                break;

        case "'":
                j = i + 1;
                index = ruleText.indexOf("'", j) + 1;
                if (!index) {
                        throw "' is missing";
                }
                buffer += ruleText.slice(i, index);
                i = index - 1;
                break;

        // Comment
        case "/":
                if (ruleText.charAt(i + 1) === "*") {
                        i += 2;
                        index = ruleText.indexOf("*/", i);
                        if (index === -1) {
                                throw new SyntaxError("Missing */");
                        } else {
                                i = index + 1;
                        }
                } else {
                        buffer += character;
                }
                break;

        case "{":
                if (state === "selector") {
                        styleRule.selectorText = buffer.trim();
                        buffer = "";
                        state = "name";
                }
                break;

        case ":":
                if (state === "name") {
                        name = buffer.trim();
                        buffer = "";
                        state = "value";
                } else {
                        buffer += character;
                }
                break;

        case "!":
                if (state === "value" && ruleText.indexOf("!important", i) === i) {
                        priority = "important";
                        i += "important".length;
                } else {
                        buffer += character;
                }
                break;

        case ";":
                if (state === "value") {
                        styleRule.style.setProperty(name, buffer.trim(), priority);
                        priority = "";
                        buffer = "";
                        state = "name";
                } else {
                        buffer += character;
                }
                break;

        case "}":
                if (state === "value") {
                        styleRule.style.setProperty(name, buffer.trim(), priority);
                        priority = "";
                        buffer = "";
                } else if (state === "name") {
                        break;
                } else {
                        buffer += character;
                }
                state = "selector";
                break;

        default:
                buffer += character;
                break;

        }
}

return styleRule;

};

//.CommonJS exports.CSSStyleRule = CSSOM.CSSStyleRule; ///CommonJS