module TinyMCE
  module ClassMethods
    attr_accessor :editors
    def uses_tiny_mce(options = {})
      tiny_mce_options = options.delete(:options) || nil
      proc = Proc.new do |c|
      	c.instance_variable_set(:@tiny_mce_options, []) unless c.instance_variable_defined?(:@tiny_mce_options)
        c.instance_variable_set(:@tiny_mce_options, c.instance_variable_get(:@tiny_mce_options) + [tiny_mce_options])
        c.instance_variable_set(:@uses_tiny_mce, true)
      end
      before_filter(proc, options)
    end
    alias uses_text_editor uses_tiny_mce
  end
  
  module OptionValidator
    class << self
      cattr_accessor :plugins
      
      def load
        @@valid_options = File.open(File.dirname(__FILE__) + "/../tiny_mce_options.yml") { |f| YAML.load(f.read) }
      end
      
      def valid?(option)
        @@valid_options.include?(option.to_s) || (plugins && plugins.include?(option.to_s.split('_')[0])) || option.to_s =~ /theme_advanced_container_/
      end
    
      def options
        @@valid_options
      end
    end
  end
  
  def self.included(base)
    base.extend(ClassMethods)
    base.helper TinyMCEHelper
  end
end