text: var Node = require("./node"),
      Paren = require("./paren"),
      Combinator = require("./combinator");
  
  var Element = function (combinator, value, index, currentFileInfo) {
      this.combinator = combinator instanceof Combinator ?
                        combinator : new Combinator(combinator);
  
      if (typeof value === 'string') {
          this.value = value.trim();
      } else if (value) {
          this.value = value;
      } else {
          this.value = "";
      }
      this.index = index;
      this.currentFileInfo = currentFileInfo;
  };
  Element.prototype = new Node();
  Element.prototype.type = "Element";
  Element.prototype.accept = function (visitor) {
      var value = this.value;
      this.combinator = visitor.visit(this.combinator);
      if (typeof value === "object") {
          this.value = visitor.visit(value);
      }
  };
  Element.prototype.eval = function (context) {
      return new Element(this.combinator,
                               this.value.eval ? this.value.eval(context) : this.value,
                               this.index,
                               this.currentFileInfo);
  };
  Element.prototype.genCSS = function (context, output) {
      output.add(this.toCSS(context), this.currentFileInfo, this.index);
  };
  Element.prototype.toCSS = function (context) {
      context = context || {};
      var value = this.value, firstSelector = context.firstSelector;
      if (value instanceof Paren) {
          // selector in parens should not be affected by outer selector
          // flags (breaks only interpolated selectors - see #1973)
          context.firstSelector = true;
      }
      value = value.toCSS ? value.toCSS(context) : value;
      context.firstSelector = firstSelector;
      if (value === '' && this.combinator.value.charAt(0) === '&') {
          return '';
      } else {
          return this.combinator.toCSS(context) + value;
      }
  };
  module.exports = Element;
  