imported all files from old cms

Hesham E committed Aug 20, 2010
commit 63bf12b6023c3690324b7d8ff125fd7dacab04a8
Showing 149 changed files with 7504 additions and 407 deletions
Gemfile +1 -0
@@ @@ -7,6 +7,7 @@ gem 'rails', '3.0.0.rc'
gem 'sqlite3-ruby', :require => 'sqlite3'
gem 'haml'
+ gem 'active_link_to'
# Use unicorn as the web server
# gem 'unicorn'
Gemfile.lock +77 -0
@@ @@ -0,0 +1,77 @@
+ GEM
+ remote: http://rubygems.org/
+ specs:
+ abstract (1.0.0)
+ actionmailer (3.0.0.rc)
+ actionpack (= 3.0.0.rc)
+ mail (~> 2.2.5)
+ actionpack (3.0.0.rc)
+ activemodel (= 3.0.0.rc)
+ activesupport (= 3.0.0.rc)
+ builder (~> 2.1.2)
+ erubis (~> 2.6.6)
+ i18n (~> 0.4.1)
+ rack (~> 1.2.1)
+ rack-mount (~> 0.6.9)
+ rack-test (~> 0.5.4)
+ tzinfo (~> 0.3.22)
+ active_link_to (0.0.6)
+ activemodel (3.0.0.rc)
+ activesupport (= 3.0.0.rc)
+ builder (~> 2.1.2)
+ i18n (~> 0.4.1)
+ activerecord (3.0.0.rc)
+ activemodel (= 3.0.0.rc)
+ activesupport (= 3.0.0.rc)
+ arel (~> 0.4.0)
+ tzinfo (~> 0.3.22)
+ activeresource (3.0.0.rc)
+ activemodel (= 3.0.0.rc)
+ activesupport (= 3.0.0.rc)
+ activesupport (3.0.0.rc)
+ arel (0.4.0)
+ activesupport (>= 3.0.0.beta)
+ builder (2.1.2)
+ erubis (2.6.6)
+ abstract (>= 1.0.0)
+ haml (3.0.17)
+ i18n (0.4.1)
+ mail (2.2.5)
+ activesupport (>= 2.3.6)
+ mime-types
+ treetop (>= 1.4.5)
+ mime-types (1.16)
+ polyglot (0.3.1)
+ rack (1.2.1)
+ rack-mount (0.6.9)
+ rack (>= 1.0.0)
+ rack-test (0.5.4)
+ rack (>= 1.0)
+ rails (3.0.0.rc)
+ actionmailer (= 3.0.0.rc)
+ actionpack (= 3.0.0.rc)
+ activerecord (= 3.0.0.rc)
+ activeresource (= 3.0.0.rc)
+ activesupport (= 3.0.0.rc)
+ bundler (>= 1.0.0.rc.1)
+ railties (= 3.0.0.rc)
+ railties (3.0.0.rc)
+ actionpack (= 3.0.0.rc)
+ activesupport (= 3.0.0.rc)
+ rake (>= 0.8.3)
+ thor (~> 0.14.0)
+ rake (0.8.7)
+ sqlite3-ruby (1.3.1)
+ thor (0.14.0)
+ treetop (1.4.8)
+ polyglot (>= 0.3.1)
+ tzinfo (0.3.22)
+
+ PLATFORMS
+ ruby
+
+ DEPENDENCIES
+ active_link_to
+ haml
+ rails (= 3.0.0.rc)
+ sqlite3-ruby
app/controllers/cms_admin/base_controller.rb +33 -0
@@ @@ -1,4 +1,37 @@
class CmsAdmin::BaseController < ApplicationController
+
+ before_filter :authenticate
+
layout 'cms_admin'
+ def index
+ # the jQuery in utilities.js uses the current path to define the scope (i.e: layouts vs. pages).
+ # So having /cms-admin as a path for pages will break the js.
+ redirect_to cms_admin_pages_path
+ end
+
+ def save_tree_state(object)
+ name = object.class.name.underscore.to_sym
+ session[name] ||= []
+ session[name] = if session[name].include?(object.id)
+ session[name] - [object.id]
+ else
+ session[name] + [object.id]
+ end
+ end
+
+ def js_helper_installed?(name, library = nil)
+ File.exists?(File.expand_path("public/javascripts/#{name}/#{library||name}.js", Rails.root))
+ end
+ helper_method :js_helper_installed?
+
+ protected
+
+ def authenticate
+ authenticate_or_request_with_http_basic do |username, password|
+ username == ComfortableMexicanSofa::Config.http_auth_username &&
+ password == ComfortableMexicanSofa::Config.http_auth_password
+ end if ComfortableMexicanSofa::Config.http_auth_enabled
+ end
+
end
app/controllers/cms_admin/categories_controller.rb +78 -0
@@ @@ -0,0 +1,78 @@
+ class CmsAdmin::CategoriesController < CmsAdmin::BaseController
+ before_filter :load_category, :except => [:create, :new, :index]
+
+ def index
+ @cms_categories = CmsCategory.roots
+ end
+
+ =begin
+ This was the old style of getting the children of the current note (old cms stuff)
+ def children
+ manage_session_array(:cms_category_tree, (params[:state] == 'open' ? :remove : :add), params[:id])
+ end
+ =end
+
+ def new
+ @cms_category = CmsCategory.new(params.slice(:parent_id))
+ end
+
+ def toggle
+ save_tree_state(@cms_category)
+ render :nothing => true
+ end
+
+ def create
+ @cms_category = CmsCategory.new(params[:cms_category])
+ @cms_category.save!
+
+ flash[:notice] = 'Category created'
+ respond_to do |format|
+ format.html { redirect_to edit_cms_admin_category_path(@cms_category) }
+ format.js
+ end
+
+ rescue ActiveRecord::RecordInvalid
+ respond_to do |format|
+ format.html { render :action => 'new' }
+ format.js
+ end
+ end
+
+ def edit
+ # ...
+ end
+
+ def update
+ @cms_category.update_attributes!(params[:cms_category])
+ flash[:notice] = 'Category updated'
+ respond_to do |format|
+ format.html { redirect_to edit_cms_admin_category_path(@cms_category)}
+ format.js
+ end
+
+ rescue ActiveRecord::RecordInvalid
+ respond_to do |format|
+ format.html { render :action => 'edit' }
+ format.js
+ end
+ end
+
+ def show
+
+ end
+
+ def destroy
+ @cms_category.destroy
+ flash[:notice] = 'Category deleted'
+ redirect_to cms_admin_categories_path
+ end
+
+ protected
+
+ def load_category
+ @cms_category = CmsCategory.find(params[:id])
+ rescue ActiveRecord::RecordNotFound
+ render :text => 'Item not found', :status => 404
+ end
+
+ end
app/controllers/cms_admin/layouts_controller.rb +66 -0
@@ @@ -1,2 +1,68 @@
class CmsAdmin::LayoutsController < CmsAdmin::BaseController
+ before_filter :load_layout, :only => [:toggle, :edit, :update, :destroy]
+ before_filter :build_layout, :only => [ :new, :create ]
+
+ def index
+ @cms_layouts = CmsLayout.roots
+ end
+
+ def toggle
+ save_tree_state(@cms_layout)
+ render :nothing => true
+ end
+
+ def new
+ end
+
+ def create
+ @cms_layout.save!
+
+ flash[:notice] = 'Layout created'
+ redirect_to edit_cms_admin_layout_path(@cms_layout)
+ rescue ActiveRecord::RecordInvalid
+ render :action => :new
+ end
+
+ def edit
+ # ...
+ end
+
+ def update
+ @cms_layout.update_attributes!(params[:cms_layout])
+
+ flash[:notice] = 'Layout updated'
+ redirect_to edit_cms_admin_layout_path(@cms_layout)
+
+ rescue ActiveRecord::RecordInvalid
+ render :action => :edit
+ end
+
+ def destroy
+ @cms_layout.destroy
+
+ flash[:notice] = 'Layout removed'
+ redirect_to cms_admin_layouts_path
+ end
+
+ def reorder
+ params[:cms_layout].each_with_index do |id, index|
+ CmsLayout.update_all(['position = %d', index], ['id = %d', id])
+ end
+
+ render :nothing => true
+ end
+
+ protected
+ def build_layout
+ params[:cms_layout] ||= {
+ :parent_id => params[:parent_id],
+ :content => '{{cms_page_block:default:text}}'
+ }
+
+ @cms_layout = CmsLayout.new(params[:cms_layout])
+ end
+
+ def load_layout
+ @cms_layout = CmsLayout.find_by_id(params[:id])
+ end
end
app/controllers/cms_admin/pages_controller.rb +84 -0
@@ @@ -1,5 +1,89 @@
class CmsAdmin::PagesController < CmsAdmin::BaseController
+ include CmsCommon::RenderPage
+
+ before_filter :load_page, :only => [:toggle, :edit, :update, :destroy, :reorder]
+ before_filter :build_page, :only => [ :new, :create ]
+
def index
+ if (ComfortableMexicanSofa::Config.multiple_sites)
+ @sites = CmsSite.all
+ @cms_pages = CmsPage.roots.group_by(&:cms_site_id)
+ else
+ params[:root] ? @cms_pages = CmsPage.find(params[:root]).children : @cms_pages = CmsPage.roots
+ end
+ end
+
+ def toggle
+ save_tree_state(@cms_page)
+ render :nothing => true
+ end
+
+ def new
+ @cms_page.cms_layout = @cms_page.parent.cms_layout if @cms_page.parent
+ end
+
+ def edit
+ # ...
+ end
+
+ def create
+ return render_page if !params[:preview].blank? && @cms_page.valid?
+
+ @cms_page.save!
+
+ flash[:notice] = 'Page created'
+ redirect_to edit_cms_admin_page_path(@cms_page)
+
+ rescue ActiveRecord::RecordInvalid
+ render :action => :new
+ end
+
+ def update
+ @cms_page.attributes = params[:cms_page]
+
+ return render_page if !params[:preview].blank? && @cms_page.valid?
+
+ @cms_page.save!
+
+ flash[:notice] = 'Page updated'
+ redirect_to edit_cms_admin_page_path(@cms_page)
+
+ rescue ActiveRecord::RecordInvalid
+ render :action => :edit
+ end
+
+ def destroy
+ @cms_page.destroy
+
+ flash[:notice] = 'Page removed'
+ redirect_to cms_admin_pages_path
+ end
+
+ def form_blocks
+ @cms_page = CmsPage.find_by_id(params[:id])
+ @layout = CmsLayout.find(params[:layout_id])
+ end
+
+ def reorder
+ params[:cms_page].each_with_index do |id, index|
+ CmsPage.update_all(['position = %d', index], ['id = %d', id])
+ end
+ render :nothing => true
+ end
+
+ protected
+ def load_page
+ @cms_page = CmsPage.find_by_id(params[:id])
+ end
+
+ def build_page
+ @parent_page = (params[:parent_id] and CmsPage.find_by_id(params[:parent_id]))
+
+ @cms_page = CmsPage.new(params[:cms_page])
+
+ if (@cms_page.parent ||= @parent_page)
+ @cms_page.cms_site = @cms_page.parent.cms_site
+ end
end
end
app/controllers/cms_admin/sites_controller.rb +63 -0
@@ @@ -0,0 +1,63 @@
+ class CmsAdmin::SitesController < CmsAdmin::BaseController
+ before_filter :load_site, :only => [ :edit, :update, :destroy ]
+ before_filter :build_site, :only => [ :new, :create ]
+
+ def index
+ @sites = CmsSite.all
+ end
+
+ def children
+ manage_session_array(:cms_site_tree, (params[:state] == 'open' ? :remove : :add), params[:id])
+ end
+
+ def new
+ if (CmsSite.count == 0)
+ @site.hostname = request.host
+ end
+ end
+
+ def edit
+ # ...
+ end
+
+ def create
+ @site.save!
+
+ flash[:notice] = 'Site created'
+
+ redirect_to edit_cms_admin_site_path(@site)
+
+ rescue ActiveRecord::RecordInvalid
+ render(:action => :new)
+ end
+
+ def update
+ @site.update_attributes!(params[:cms_site])
+
+ flash[:notice] = 'Site updated'
+
+ redirect_to edit_cms_admin_site_path(@site)
+
+ rescue ActiveRecord::RecordInvalid
+ render :action => :edit
+ end
+
+ def destroy
+ @site.destroy
+
+ flash[:notice] = 'Site removed'
+ redirect_to cms_admin_sites_path
+ end
+
+ protected
+ def load_site
+ @site = CmsSite.find_by_id(params[:id])
+ end
+
+ def build_site
+ params[:cms_site] ||= {
+ }
+
+ @site = CmsSite.new(params[:cms_site])
+ end
+ end
app/controllers/cms_common/render_page.rb +20 -0
@@ @@ -0,0 +1,20 @@
+ module CmsCommon::RenderPage
+
+ def render_page(options = { })
+ if @cms_page.blank?
+ if (@cms_page = CmsPage.published.find_by_full_path('404'))
+ render :inline => @cms_page.content, :layout => (@cms_page.cms_layout.app_layout || false), :status => 404
+ else
+ render :text => '404 Page Not Found', :status => 404
+ end
+ else
+ if @cms_page.redirect_to_page
+ redirect_to @cms_page.redirect_to_page.full_path
+ else
+ layout = (@cms_page.cms_layout.app_layout || false)
+ render :inline => @cms_page.content, :layout => layout
+ end
+ end
+ end
+
+ end
app/controllers/cms_content_controller.rb +27 -3
@@ @@ -1,7 +1,31 @@
class CmsContentController < ApplicationController
-
+ include CmsCommon::RenderPage
+
+ unloadable
+
+ before_filter :assign_cms_root
+
def show
- render :inline => '<h1>Hello World!</h1>'
+ #path = params[:path] || ""
+ page_path = params[:path] || ""
+ @cms_page = (@cms_site ? @cms_site.cms_pages : CmsPage).published.find_by_full_path(page_path)
+
+ render_page
end
-
+
+ def sitemap
+ respond_to do |format|
+ format.xml do
+ @cms_pages = CmsPage.published
+ end
+ end
+ end
+
+ protected
+ def assign_cms_root
+ if (ComfortableMexicanSofa::Config.multiple_sites)
+ @cms_site = CmsSite.find_by_hostname(request.host.downcase)
+ end
+ end
+
end
app/helpers/application_helper.rb +0 -2
@@ @@ -1,2 +0,0 @@
- module ApplicationHelper
- end
app/helpers/cms_helper.rb +27 -0
@@ @@ -0,0 +1,27 @@
+ module CmsHelper
+
+ def application_name
+ ComfortableMexicanSofa::Config.cms_title || 'CMS'
+ end
+
+ def tree_state(object)
+ name = object.class.name.underscore.to_sym
+ if session[name].present?
+ session[name].include?(object.id) ? '' : 'closed'
+ else
+ 'closed'
+ end
+ end
+
+ def link_to_toggle(object, children_count)
+ link_to_function(children_count, '', :class => ['tree_toggle', tree_state(object)].join(' '), :title => 'Expand/Collapse', :onclick => "object_id = '#{object.id}'")
+ end
+
+ def cms_form_for(record_or_name_or_array, *args, &proc)
+ options = args.extract_options!
+ options.merge!(:builder => CmsFormBuilder)
+ (options[:html] ||= {}).merge!(:class => (options[:html][:class].to_s + ' formatted'))
+ form_for(record_or_name_or_array, *(args << options), &proc)
+ end
+
+ end
app/models/cms_asset.rb +0 -2
@@ @@ -1,2 +0,0 @@
- class CmsAsset < ActiveRecord::Base
- end
app/models/cms_block.rb +13 -0
@@ @@ -1,2 +1,15 @@
class CmsBlock < ActiveRecord::Base
+
+ # -- Relationships --------------------------------------------------------
+ belongs_to :cms_page
+
+ # -- Validations ----------------------------------------------------------
+ validates_presence_of :label
+ validates_uniqueness_of :label, :scope => :cms_page_id
+
+ # -- Scopes ---------------------------------------------------------------
+ scope :with_label, lambda{ |name|{
+ :conditions => {:label => name}
+ }}
+
end
app/models/cms_category.rb +69 -0
@@ @@ -0,0 +1,69 @@
+ class CmsCategory < ActiveRecord::Base
+
+ # -- Relationships --------------------------------------------------------
+ acts_as_tree :counter_cache => :children_count
+
+ has_many :cms_page_categorizations, :dependent => :destroy
+
+ has_many :cms_pages, :through => :cms_page_categorizations
+
+ # -- Validations ----------------------------------------------------------
+ validates_presence_of :slug, :label
+ validates_uniqueness_of :slug, :scope => :parent_id
+
+ # -- Named Scopes ---------------------------------------------------------
+ default_scope :order => 'label'
+
+ # -- Callbacks ------------------------------------------------------------
+ before_validation :set_slug_if_blank
+
+ # -- Class Methods --------------------------------------------------------
+ def set_slug_if_blank
+ self.slug = self.label.slugify if self.slug.blank?
+ end
+
+ def self.categories_for_select(collection = CmsCategory.roots, level = 0)
+ out = []
+ collection.each do |category|
+ out += [["#{". . " * level} #{category.label}", category.id]]
+ out += self.categories_for_select(category.children, level+1) if category.children.count > 0
+ end
+ out
+ end
+
+ def self.categorized_model_names
+ model_names = []
+ CmsCategory.reflect_on_all_associations(:has_many).each do |model|
+ model_names << model.klass.to_s if model.through_reflection.present?
+ end
+ model_names
+ end
+
+ def self.categorized_model_types
+ models_types = []
+ CmsCategory.categorized_model_names.each do |model_name|
+ models_types << model_name.constantize
+ end
+ models_types
+ end
+
+ # -- Instance Methods -----------------------------------------------------
+ def number_of_records
+ # returns the number of records (of all types) under a certain category
+ count = 0
+ CmsCategory.categorized_model_names.each do |model_name|
+ count += self.send(model_name.underscore.pluralize.to_sym).length
+ end
+ count
+ end
+
+ def records
+ things = {}
+ CmsCategory.categorized_model_names.each do |model_name|
+ model_sym = model_name.underscore.pluralize.to_sym
+ things[model_sym] = self.send(model_sym)
+ end
+ things
+ end
+ end
+
app/models/cms_layout.rb +120 -0
@@ @@ -1,2 +1,122 @@
class CmsLayout < ActiveRecord::Base
+
+ # -- Relationships --------------------------------------------------------
+
+ acts_as_tree :counter_cache => :children_count
+ has_many :cms_pages, :dependent => :nullify
+
+ # -- Validations ----------------------------------------------------------
+
+ validates_presence_of :label
+ validates_uniqueness_of :label
+ validate :validate_block_presence,
+ :validate_proper_relationship
+
+ # -- AR Callbacks ---------------------------------------------------------
+
+ before_save :flag_as_extendable,
+ :update_page_blocks
+
+ # -- Scopes ---------------------------------------------------------------
+
+ default_scope :order => 'position ASC'
+
+ scope :extendable,
+ :conditions => { :is_extendable => true }
+
+ # -- Class Methods --------------------------------------------------------
+
+ def self.create_default_layout!(options = { })
+ create({
+ :label => "Default Layout",
+ :app_layout => "application",
+ :content => "{{cms_page_block:default:code}}",
+ :is_extendable => true
+ }.merge(options))
+ end
+
+ def self.options_for_select
+ CmsLayout.all(:select => 'id, label').collect { |l| [ l.label, l.id ] }
+ end
+
+ def self.app_layouts_for_select
+ path = "#{Rails.root}/app/views/layouts"
+ regex = /^([a-z0-9]\w+)\.html/i
+
+ app_layouts =
+ begin
+ Dir.entries(path).collect do |l|
+ l.match(regex).try(:captures)
+ end.compact.flatten
+ rescue
+ # No application layouts are present
+ end
+
+ [ [ '---', nil ] ] + (app_layouts.blank? ? [ ] : app_layouts)
+ end
+
+ # -- Instance Methods -----------------------------------------------------
+
+ def content
+ if parent
+ parent.content.gsub(/\{\{\s*cms_page_block:default:.*?\}\}/, self.read_attribute(:content))
+ else
+ read_attribute(:content)
+ end
+ end
+
+ def app_layout
+ this_layout = read_attribute(:app_layout)
+ if this_layout.blank?
+ parent && parent.app_layout
+ else
+ this_layout
+ end
+ end
+
+ def extendable_for_select
+ [['---', nil]] + CmsLayout.extendable.all.reject{|l| ([self]+self.descendants).member?(l)}.collect{ |l| [l.label, l.id] }
+ end
+
+ def tags(options = {})
+ CmsTag::parse_tags(self.content, options)
+ end
+
+ protected
+
+ def validate_block_presence
+ self.errors.add(:content, 'does not have any cms_blocks defined') if self.tags.empty?
+ end
+
+ def validate_proper_relationship
+ if self.descendants.member?(parent) || self.parent == self
+ self.errors.add(:parent_id, 'layout is invalid')
+ end
+ end
+
+ def validate_children_against_extendable
+ # todo
+ end
+
+ def flag_as_extendable
+ self.is_extendable = !self.tags.select{|t| t.tag_type == 'cms_page_block' && t.label == 'default'}.blank?
+ true
+ end
+
+ def update_page_blocks
+ return if new_record? || !content_changed?
+
+ old_tags = CmsTag::parse_tags(content_was).select{|t| ['cms_block', 'cms_page_block'].member?(t.tag_type)}.collect{|t| t.label}
+ new_tags = CmsTag::parse_tags(content).select{|t| ['cms_block', 'cms_page_block'].member?(t.tag_type)}.collect{|t| t.label}
+
+ # creating new cms_blocks for all pages using this layout
+ labels_for_blocks = new_tags - old_tags
+ if !labels_for_blocks.blank?
+ cms_pages.each do |cms_page|
+ labels_for_blocks.each do |label|
+ cms_page.cms_blocks.create(:label => label)
+ end
+ end
+ end
+ end
end
app/models/cms_page.rb +195 -0
@@ @@ -1,2 +1,197 @@
class CmsPage < ActiveRecord::Base
+
+ def initialize(options = {})
+ super(options)
+ # Set default page layout
+ if self.cms_layout.blank?
+ self.cms_layout = self.parent ? self.parent.cms_layout : CmsLayout.first
+ end
+ end
+
+ # -- Properties -----------------------------------------------------------
+
+ attr_accessor :rendered_content
+
+ # -- Relationships --------------------------------------------------------
+
+ acts_as_tree :counter_cache => :children_count
+ acts_as_categorized
+
+ belongs_to :cms_site
+ belongs_to :cms_layout
+ has_many :cms_blocks,
+ :dependent => :destroy
+ belongs_to :redirect_to_page,
+ :class_name => 'CmsPage',
+ :foreign_key => :redirect_to_page_id
+ has_one :redirected_from_page,
+ :class_name => 'CmsPage',
+ :foreign_key => :redirect_to_page_id
+
+ #-- Validations -----------------------------------------------------------
+
+ validates_presence_of :cms_layout_id,
+ :unless => lambda{|p| p.redirect_to_page}
+ validates_presence_of :label
+
+ validates_presence_of :slug,
+ :if => :slug_required?
+ validates_format_of :slug,
+ :if => :slug_required?,
+ :with => /^\w[a-z0-9_-]*$/i
+
+ validates_uniqueness_of :full_path,
+ :scope => :cms_site_id
+
+ validate :validate_redirect_to
+
+ # -- AR Callbacks ---------------------------------------------------------
+
+ before_validation :assign_full_path
+
+ before_save :assign_site
+
+ before_update :update_counter_cache
+
+ after_save :save_blocks, :sync_child_slugs
+
+ # -- Scopes ---------------------------------------------------------------
+
+ default_scope :order => 'position ASC'
+ scope :published,
+ :conditions => { :published => true }
+ scope :nav_visible,
+ :conditions => { :excluded_from_nav => false }
+
+ # -- Class Methods --------------------------------------------------------
+
+ def self.[](slug)
+ CmsPage.find_by_slug!(slug)
+ end
+
+ def self.repair_children_count
+ self.all.each do |pg|
+ self.connection.update(
+ "
+ UPDATE #{self.quoted_table_name}
+ SET children_count = #{pg.children.count}
+ WHERE id = #{pg.id}
+ "
+ )
+ end
+ end
+
+ # -- Instance Methods -----------------------------------------------------
+
+ def content
+ # TODO: Add column to cache the render output. pointless to run it all the time
+ render_content.html_safe
+ end
+
+ # FIX: Recursive Tag/Content Replacement
+ # Works, but potentionally dangerous and not particularly efficient
+ def render_content(content = nil)
+ content = cms_layout.content.dup if !content
+ while (!(tags = CmsTag::parse_tags(content, :page => self).sort_by{|t| t.class.render_priority}).blank?)
+ tags.each do |tag|
+ content.gsub!(tag.regex) { tag.render }
+ end
+ end
+ content
+ end
+
+ def blocks=(blocks)
+ blocks.each do |label, params|
+ if !self.new_record? && !(block = self.cms_blocks.select{|b| b.label == label}.first).blank?
+ block.attributes = params
+ else
+ self.cms_blocks.build({:label => label}.merge(params))
+ end
+ end
+ end
+
+ def pages_for_select(page = nil, level = 0, exclude_self = false)
+ page ||= self.cms_site ? self.cms_site.cms_pages.root : CmsPage.root
+
+ return [] if !page || (page == self && exclude_self)
+ out = [["#{". . " * level} #{page.label}", page.id]]
+ page.children.each do |child|
+ if child.children.count > 0
+ out += pages_for_select(child, level + 1, exclude_self)
+ else
+ unless (child == self && exclude_self)
+ out += [["#{". . " * (level + 1)} #{child.label}", child.id]]
+ end
+ end
+ end
+ out
+ end
+
+ def full_path
+ "/#{read_attribute(:full_path)}"
+ end
+
+ def full_path_with_site
+ (self.cms_site ? "http://#{self.cms_site.hostname}" : '') + full_path
+ end
+
+ def cms_block_content(label, content)
+ self.cms_blocks.select{|b| b.label.to_s == label.to_s}.first.try(content)
+ end
+
+ def slug_required?
+ if (self.cms_site_id?)
+ return !self.site_root?
+ else
+ return (self != CmsPage.root or CmsPage.count == 0)
+ end
+ end
+
+ def published_status
+ self.published? ? 'published' : 'draft'
+ end
+
+ protected
+ def assign_full_path
+ self.full_path = (self.ancestors.reverse.collect{ |p| p.slug }.reject { |p| p.blank? } + [ self.slug ]).join('/')
+ end
+
+ def assign_site
+ return if (self.cms_site_id.present?)
+
+ self.cms_site_id = (self.parent and self.parent.cms_site_id)
+ end
+
+ def validate_redirect_to
+ if self.redirect_to_page && (self == self.redirect_to_page || self.redirect_to_page.redirect_to_page)
+ self.errors.add(:redirect_to_page_id)
+ end
+ end
+
+ def save_blocks
+ self.cms_blocks.each do |b|
+ b.save! if b.changed?
+ end
+ end
+
+ def sync_child_slugs
+ if full_path_changed?
+ children.each do |child|
+ child.save!
+ end
+ end
+ end
+
+ def update_counter_cache
+ if self.changed? && self.parent_id_changed?
+
+ if self.parent_id_was.present?
+ CmsPage.decrement_counter(:children_count, self.parent_id_was)
+ end
+
+ if self.parent_id.present?
+ CmsPage.increment_counter(:children_count, self.parent_id)
+ end
+ end
+ end
end
app/models/cms_page_categorization.rb +7 -0
@@ @@ -0,0 +1,7 @@
+ class CmsPageCategorization < ActiveRecord::Base
+
+ acts_as_categorization
+
+ end
+
+
app/models/cms_site.rb +49 -0
@@ @@ -0,0 +1,49 @@
+ class CmsSite < ActiveRecord::Base
+ # -- Relationships --------------------------------------------------------
+
+ has_many :cms_pages,
+ :dependent => :destroy
+
+ has_many :hostnames,
+ :class_name => 'CmsSiteHostname',
+ :dependent => :destroy
+
+ accepts_nested_attributes_for :hostnames,
+ :allow_destroy => true,
+ :reject_if => proc { |attributes| attributes['hostname'].blank? }
+
+ # -- Validations ----------------------------------------------------------
+
+ validates_presence_of :label
+ validates_uniqueness_of :label
+
+ validates_presence_of :hostname
+ validates_uniqueness_of :hostname
+
+ # -- Scopes ---------------------------------------------------------------
+
+ default_scope :order => 'label ASC'
+
+ # -- Callbacks ------------------------------------------------------------
+
+ after_create :create_page
+
+ # -- Class Methods --------------------------------------------------------
+
+ def self.options_for_select
+ [ [ '---', nil ] ] + CmsSite.all.collect { |l| [ l.label, l.id ] }
+ end
+
+ # -- Instance Methods -----------------------------------------------------
+
+ protected
+ def create_page
+ self.cms_pages.create!(
+ :label => self.label,
+ :cms_layout => CmsLayout.first,
+ :site_root => true
+ )
+
+ self.save(false) if (self.changed?)
+ end
+ end
app/views/cms_admin/_flash_message.html.haml +3 -0
@@ @@ -0,0 +1,3 @@
+ - flash.each do |type, value|
+ .flash{ :class => type.to_s }
+ = value
\ No newline at end of file
app/views/cms_admin/categories/_category.html.haml +19 -0
@@ @@ -0,0 +1,19 @@
+ - item ||= nil
+ - if item.blank?
+ - is_checked = false
+ - else
+ - is_checked = item.cms_categories.collect(&:id).include?(category.id)
+ - item_type = item.class.to_s.underscore
+
+ %li
+ - field_name = "#{item_type}[attr_category_ids][#{category.id}]"
+ = hidden_field_tag field_name, 0, :id => nil
+ .form_element.check_box_element
+ .value
+ = check_box_tag field_name, 1, is_checked, :onchange => "$.CMS.toggle_category_selections(this)", :id => "cms_category_id_#{category.id}"
+ = label_tag "cms_category_id_#{category.id}", category.label
+
+ %ul{:id => dom_id(category)}
+ - unless category.children.empty?
+ - category.children.each do |sub_category|
+ = render :partial => 'cms_admin/categories/category', :locals => {:category => sub_category, :item => item }
app/views/cms_admin/categories/_category_subform.html.haml +12 -0
@@ @@ -0,0 +1,12 @@
+ .form_element_group.categories
+ %h2 Categories
+ .form_element
+ .label Categories
+ .field
+ %ul#root_categories
+ = render :partial => 'cms_admin/categories/category', :locals => { :item => item }, :collection => CmsCategory.roots
+
+ .form_element
+ .label Add Category
+ .field
+ = render :partial => 'cms_admin/categories/new', :locals => { :item_type => item.class.name.underscore }
app/views/cms_admin/categories/_form.html.haml +14 -0
@@ @@ -0,0 +1,14 @@
+ %h2= @cms_category.new_record? ? "New Category" : "Editing \"#{@cms_category.label}\""
+ = render :partial => 'cms_admin/flash_message'
+ = f.error_messages
+
+ .form_element_group.horizontal
+ = f.text_field :label
+ = f.text_field :slug, :label => 'slug'
+ = f.select :parent_id, [['---', nil]] + CmsCategory.categories_for_select
+ = f.text_area :description
+
+ .submit
+ = f.submit 'Save All Changes'
+ or
+ = link_to 'Return to List', cms_admin_categories_path
app/views/cms_admin/categories/_new.html.haml +10 -0
@@ @@ -0,0 +1,10 @@
+ #new_category
+ - if defined? @cms_category and @cms_category.errors.present?
+ = "Label #{@cms_category.errors[:label]}"
+ = text_field :cms_category, :label
+ = select :cms_category, :parent_id, [['---', nil]] + CmsCategory.categories_for_select
+ = hidden_field_tag 'item_type', item_type
+ /= submit_tag "Add Category"
+ = tag "input", :type => "button", :value => "Add Category"
+ or
+ = link_to 'Manage Categories', cms_admin_categories_path
app/views/cms_admin/categories/_toggle_link.html.haml +9 -0
@@ @@ -0,0 +1,9 @@
+ - category ||= toggle_link
+
+ - if category.children.count > 0
+
+ - if session[:cms_category_tree] && session[:cms_category_tree].member?(category.id.to_s)
+ = link_to_remote category.children.count, :url => {:action => 'children', :id => category.id, :state => 'open'}, :loading => "$('category_#{category.id}_children').show()", :html => {:id => "category_#{category.id}_link", :class => 'tree_toggle open'}
+
+ - else
+ = link_to_remote category.children.count, :url => {:action => 'children', :id => category.id, :state => 'closed'}, :loading => "$('category_#{category.id}_children').show()", :html => {:id => "category_#{category.id}_link", :class => 'tree_toggle closed'}
\ No newline at end of file
app/views/cms_admin/categories/_tree_branch.html.haml +30 -0
@@ @@ -0,0 +1,30 @@
+ - category = tree_branch
+ - children = category.children
+
+ %li[category]
+ - if children.size > 0
+ = link_to_toggle(category, children.size)
+ .item
+ .icon
+ - if category.siblings.size > 0
+ .dragger
+ = link_to category.label, edit_cms_admin_category_path(category), :class => 'label'
+
+ %span.action_links
+ [
+ = link_to 'Add Child Category', new_cms_admin_category_path(:parent_id => category.id)
+ |
+ = link_to 'Edit', edit_cms_admin_category_path(category)
+ |
+ = link_to 'Remove', cms_admin_category_path(category), :method => 'delete', :confirm => 'Are you sure you want to remove this category?'
+ ]
+
+ %br/
+ - if category.number_of_records == 0
+ Nothing in this category
+ - else
+ = link_to "#{pluralize(category.number_of_records,'thing')} in this category", cms_admin_category_path(category), :class => 'slug'
+
+ - if children.size > 0
+ %ul{:id => dom_id(category, :children), :class => "sortable #{tree_state(category)}"}
+ = render :partial => 'tree_branch', :collection => children
app/views/cms_admin/categories/children.js.rjs +10 -0
@@ @@ -0,0 +1,10 @@
+ case params[:state]
+ when 'closed'
+ page.replace "category_#{@cms_category.id}_link", :partial => 'toggle_link', :object => @cms_category, :locals => { :state => 'open' }
+ page.replace_html "category_#{@cms_category.id}_children", :partial => 'tree_branch', :object => @cms_category.children
+ when 'open'
+ page.replace "category_#{@cms_category.id}_link", :partial => 'toggle_link', :object => @cms_category, :locals => { :state => 'closed' }
+ page.hide "category_#{@cms_category.id}_children"
+ page.replace_html "category_#{@cms_category.id}_children", ''
+ end
+
app/views/cms_admin/categories/create.js.haml +7 -0
@@ @@ -0,0 +1,7 @@
+ - if @cms_category.valid?
+ - if @cms_category.parent.blank?
+ =raw '$("#root_categories").append("' + (render :partial => 'category', :locals => { :category => @cms_category, :item_type => params[:item_type] }).gsub(/\n/,'').gsub(/"/,'\\"') + '");'
+ - else
+ =raw '$("#' + dom_id(@cms_category.parent) + '").append("' + (render :partial => 'category', :locals => { :category => @cms_category, :item_type => params[:item_type] }).gsub(/\n/,'').gsub(/"/,'\\"') + '");'
+
+ =raw '$("#new_category").replaceWith("' + (render :partial => 'cms_admin/categories/new', :locals => {:item_type => params[:item_type]}).gsub(/\n/,'').gsub(/"/,'\\"') + '");'
app/views/cms_admin/categories/edit.html.haml +3 -0
@@ @@ -0,0 +1,3 @@
+ = cms_form_for @cms_category, :url => {:action => :update}, :html => {:method => :put } do |form|
+ = render :partial => "form", :locals => {:f => form}
+
app/views/cms_admin/categories/index.html.haml +9 -0
@@ @@ -0,0 +1,9 @@
+ = link_to 'Add New Category', new_cms_admin_category_path, :class => 'top_button'
+
+ %h2 Categories
+ = render :partial => 'cms_admin/flash_message'
+ - if @cms_categories.empty?
+ No Categories have been created yet
+ - else
+ %ul.tree_structure.sortable
+ = render :partial => 'tree_branch', :collection => @cms_categories
app/views/cms_admin/categories/new.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for @cms_category, :url => {:action => :create } do |form|
+ = render :partial => 'form', :locals => {:f => form}
app/views/cms_admin/categories/show.html.haml +14 -0
@@ @@ -0,0 +1,14 @@
+ %h2= "Category: #{@cms_category.label}"
+ - @cms_category.records.each_pair do |model_sym,records|
+ - model_type = model_sym.to_s
+ - content_for :head do
+ = stylesheet_link_tag model_type unless model_type == "cms_pages"
+ -# This requires that plugins have standardized names, like "cms_attachments.sass"
+
+ %h3
+ = "#{model_type[4..-1].humanize} (#{records.length})"
+
+ - records.each do |record|
+ = link_to record.label, {:controller => model_type[4..-1], :action => :edit, :id => record.to_param}, :class => model_type[4..-1].singularize
+ - if records.empty?
+ %p No #{model_type[4..-1]} in this category
app/views/cms_admin/layouts/_details.html.haml +10 -0
@@ @@ -0,0 +1,10 @@
+ - layout ||= details
+
+ %table{:class => 'details', :id => dom_id(layout, :details), :style => 'display: none'}
+ %tr
+ %th Last Updated:
+ %td
+ - if (layout.updated_at?)
+ #{time_ago_in_words(layout.updated_at)} ago
+ - else
+ Never
app/views/cms_admin/layouts/_form.html.haml +13 -0
@@ @@ -0,0 +1,13 @@
+ %h2= @cms_layout.new_record? ? "New Layout" : "Editing \"#{@cms_layout.label}\""
+ = render :partial => 'cms_admin/flash_message'
+ = f.error_messages
+ .form_left_column
+ .form_element_group.horizontal
+ = f.text_field :label, :label => 'Layout Name'
+ = f.select :parent_id, @cms_layout.extendable_for_select, :label => 'Parent Layout'
+ = f.select :app_layout, CmsLayout.app_layouts_for_select, :label => 'Application Layout'
+ = f.text_area :content
+ .submit
+ = f.submit 'Save All Changes'
+ or
+ = link_to 'Return to List', cms_admin_layouts_path
app/views/cms_admin/layouts/_tree_branch.html.haml +30 -0
@@ @@ -0,0 +1,30 @@
+ - layout = tree_branch
+ - children = layout.children
+
+ %li[layout]
+ - if children.size > 0
+ = link_to_toggle(layout, children.size)
+
+ .item
+ .icon
+ - if layout.siblings.size > 0
+ .dragger
+
+ = link_to layout.label, edit_cms_admin_layout_path(layout), :class => 'label'
+
+ %span.action_links
+ [
+ = link_to_function 'Toggle Details', "", :class => 'details_toggle'
+ |
+ - if layout.is_extendable?
+ = link_to 'Add Child Layout', new_cms_admin_layout_path(:parent_id => layout.id)
+ |
+ = link_to 'Edit', edit_cms_admin_layout_path(layout)
+ |
+ = link_to 'Remove', cms_admin_layout_path(layout), :method => 'delete', :confirm => 'Are you sure you want to remove this layout?'
+ ]
+ = render :partial => 'details', :object => layout
+
+ - if children.size > 0
+ %ul{:id => dom_id(layout, :children), :class => "sortable #{tree_state(layout)}"}
+ = render :partial => 'tree_branch', :collection => children
\ No newline at end of file
app/views/cms_admin/layouts/edit.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for @cms_layout, :url => cms_admin_layout_path(@cms_layout) do |form|
+ = render :partial => 'form', :locals => {:f => form}
app/views/cms_admin/layouts/index.html.haml +5 -0
@@ @@ -0,0 +1,5 @@
+ = link_to 'Add New Layout', new_cms_admin_layout_path, :class => 'top_button'
+ %h2 Layouts
+ = render :partial => 'cms_admin/flash_message'
+ %ul.tree_structure.sortable
+ = render(:partial => 'tree_branch', :collection => @cms_layouts)
app/views/cms_admin/layouts/new.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for @cms_layout, :url => cms_admin_layouts_path do |form|
+ = render :partial => 'form', :locals => {:f => form}
app/views/cms_admin/pages/_details.html.haml +25 -0
@@ @@ -0,0 +1,25 @@
+ - page ||= details
+
+ %table{:class => 'details', :id => "page_details_#{page.id}", :style => 'display: none'}
+
+ - if page.redirect_to_page
+ %tr
+ %th Redirecting To:
+ %td
+ = link_to page.redirect_to_page.label, cms_admin_page_path(page.redirect_to_page)
+ = "(#{link_to page.redirect_to_page.full_path, page.redirect_to_page.full_path})"
+
+ - if page.redirected_from_page
+ %tr
+ %th Redirected From:
+ %td
+ = link_to page.redirected_from_page.label, cms_admin_page_path(page.redirected_from_page)
+ = "(#{link_to page.redirected_from_page.full_path, page.redirected_from_page.full_path})"
+
+ - if page.cms_layout
+ %tr
+ %th Layout:
+ %td= link_to page.cms_layout.label, edit_cms_admin_layout_path(page.cms_layout)
+ %tr
+ %th Blocks:
+ %td= page.cms_blocks.collect(&:label).join(', ')
app/views/cms_admin/pages/_form.html.haml +37 -0
@@ @@ -0,0 +1,37 @@
+ - content_for :right_column do
+ .form_element_group.publishing
+ %h2 Publishing Options
+ = f.check_box :published, :label => 'Is Published?'
+ = f.check_box :excluded_from_nav, :label => 'Exclude from Navigation?'
+
+ .form_element_group
+ %h2 W3C Validation
+ - if (ComfortableMexicanSofa::Config.multiple_sites)
+ = link_to 'Check Validation', 'http://validator.w3.org/check?uri='+@cms_page.full_path_with_site, :target => "_new"
+ - else
+ = link_to 'Check Validation', 'http://validator.w3.org/check?uri=http://'+request.host+@cms_page.full_path, :target => "_new"
+
+ = render :partial => 'cms_admin/categories/category_subform', :locals => { :item => @cms_page }
+
+ %h2= @cms_page.new_record? ? "New Page" : "Editing \"#{@cms_page.label}\""
+ = render :partial => 'cms_admin/flash_message'
+ = f.error_messages
+ .form_element_group.vertical
+ = f.text_field :label, :id => (@cms_page.new_record? ? "slugify" : nil)
+ - unless CmsPage.count == 0 || @cms_page == CmsPage.root
+ = f.text_field :slug, :id => 'slug'
+ = f.custom_element('&nbsp;', link_to_function('Show more', '', :id => 'more_options'))
+ .form_element_group.vertical.advanced
+ - unless CmsPage.count == 0 || @cms_page == CmsPage.root
+ = f.select :parent_id, @cms_page.pages_for_select(nil, 0, true)
+ = f.select :redirect_to_page_id, [['---', nil]] + @cms_page.pages_for_select
+ = f.select :cms_layout_id, CmsLayout.options_for_select, {}
+ :javascript
+ page_id = #{@cms_page.new_record? ? 0 : @cms_page.id}
+ #form_blocks
+ = render :partial => 'form_blocks', :locals => {:f => f}
+ .submit
+ = f.submit 'Save All Changes', :id => 'save'
+ -# f.submit 'Preview Page', :id => 'preview', :name => 'preview'
+ or
+ = link_to 'Return to List', cms_admin_pages_path
app/views/cms_admin/pages/_form_blocks.html.haml +25 -0
@@ @@ -0,0 +1,25 @@
+ - @layout ||= @cms_page.cms_layout
+ - @layout && tags = @layout.tags(:view => self, :page => @cms_page).reject{|t| !t.class.has_form?}.group_by(&:tag_type)
+
+ - unless tags.blank?
+ - unless (cms_block_tags = tags.delete('cms_block')).blank?
+ .form_element_group.block
+ - cms_block_tags.each do |tag|
+ .form_element{:class => tag.format}
+ .label= tag.form_label
+ .value= tag.form_input
+
+ - unless (cms_page_block_tags = tags.delete('cms_page_block')).blank?
+ .form_element_group.page_block
+ - cms_page_block_tags.each do |tag|
+ .form_element{:class => tag.format}
+ .label= tag.form_label
+ .value= tag.form_input
+
+ - # outputting any other tag that has a form element
+ - tags.each do |type, tags|
+ .form_element_group{:class => type.to_s}
+ - tags.each do |tag|
+ .form_element
+ .label= tag.form_label
+ .value= tag.form_input
\ No newline at end of file
app/views/cms_admin/pages/_tree_branch.html.haml +37 -0
@@ @@ -0,0 +1,37 @@
+ - page = tree_branch
+ - children = page.children
+
+ %li[page]
+
+ - if children.size > 0
+ = link_to_toggle(page, children.size)
+
+ .item
+ .icon{:class => page.published_status}
+ - if page.siblings.size > 0
+ .dragger
+
+ = link_to page.label, edit_cms_admin_page_path(page), :class => 'label'
+
+ %span.action_links
+ [
+ = link_to_function 'Toggle Details', "", :class => 'details_toggle'
+ |
+ = link_to 'Add Child Page', new_cms_admin_page_path(:parent_id => page.id)
+ |
+ = link_to 'Edit', edit_cms_admin_page_path(page)
+ |
+ = link_to 'Remove', cms_admin_page_path(page), :method => 'delete', :confirm => 'Are you sure you want to remove this page?'
+ ]
+
+ %br/
+ %div.url
+ = link_to(page.full_path_with_site, page.full_path_with_site)
+ - unless (page.published?)
+ (Unpublished)
+
+ = render :partial => 'details', :object => page
+
+ - if children.size > 0
+ %ul{:id => dom_id(page, :children), :class => "sortable #{tree_state(page)}"}
+ = render :partial => 'tree_branch', :collection => children
\ No newline at end of file
app/views/cms_admin/pages/edit.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for @cms_page, :url => cms_admin_page_path(@cms_page) do |form|
+ = render :partial => 'form', :locals => {:f => form }
app/views/cms_admin/pages/form_blocks.js.erb +1 -0
@@ @@ -0,0 +1 @@
+ $('#form_blocks').html('<%= escape_javascript(render(:partial => "form_blocks")) %>')
\ No newline at end of file
app/views/cms_admin/pages/index.html.haml +21 -0
@@ @@ -0,0 +1,21 @@
+ = link_to 'Add New Page', new_cms_admin_page_path, :class => 'top_button'
+
+ %h2 Pages
+ = render :partial => 'cms_admin/flash_message'
+ - if (@sites)
+ - @sites.each do |site|
+ %h3= h(site.label)
+ %ul.tree_structure.sortable
+ - if (@cms_pages[site.id])
+ = render(:partial => 'tree_branch', :collection => @cms_pages[site.id])
+ - else
+ %li.empty_state
+ No pages defined.
+
+ - if (@cms_pages[nil])
+ %h3 Default Site
+ %ul.tree_structure.sortable
+ = render(:partial => 'tree_branch', :collection => @cms_pages[nil])
+ - else
+ %ul.tree_structure.sortable
+ = render(:partial => 'tree_branch', :collection => @cms_pages)
app/views/cms_admin/pages/new.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for @cms_page, :url => {:action => 'create'} do |form|
+ = render :partial => 'form', :locals => {:f => form }
app/views/cms_admin/sites/_form.html.haml +10 -0
@@ @@ -0,0 +1,10 @@
+ %h2= @site.new_record? ? "New Site" : "Editing \"#{@site.label}\""
+ = render :partial => 'cms_admin/flash_message'
+ = f.error_messages
+ .form_element_group.horizontal
+ = f.text_field :label, :label => "Site Name"
+ = f.text_field :hostname, :label => "Hostname"
+ .submit
+ = f.submit 'Save All Changes', :onclick => 'this.f.target = ""'
+ or
+ = link_to 'Return to List', cms_admin_sites_path
app/views/cms_admin/sites/_site.html.haml +14 -0
@@ @@ -0,0 +1,14 @@
+ %li[site]
+ .item
+ .icon
+ = link_to site.label, edit_cms_admin_site_path(site), :class => 'label'
+
+ %span.action_links
+ [
+ = link_to 'Edit', edit_cms_admin_site_path(site)
+ |
+ = link_to 'Remove', cms_admin_site_path(site), :method => 'delete', :confirm => 'Are you sure you want to remove this site?'
+ ]
+ .details
+ - url = "http://#{site.hostname}/"
+ = link_to(h(url), url)
\ No newline at end of file
app/views/cms_admin/sites/edit.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for(@site, :url => { :action => :update }) do |form|
+ = render :partial => 'form', :locals => {:f => form}
app/views/cms_admin/sites/index.html.haml +10 -0
@@ @@ -0,0 +1,10 @@
+ = link_to('Add New Site', new_cms_admin_site_path, :class => 'top_button')
+
+ %h2 Sites
+ = render :partial => 'cms_admin/flash_message'
+ %ul.tree_structure
+ - if @sites.blank?
+ %li No Sites Defined
+ - else
+ = render(:partial => 'site', :collection => @sites)
+
app/views/cms_admin/sites/new.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for(@site, :url => {:action => :create }) do |form|
+ = render :partial => 'form', :locals => {:f => form}
app/views/cms_admin/snippets/_form.html.haml +10 -0
@@ @@ -0,0 +1,10 @@
+ %h2= @cms_snippet.new_record? ? "New Snippet" : "Editing \"#{@cms_snippet.label}\""
+ = render :partial => 'cms_admin/flash_message'
+ = f.error_messages
+ .form_element_group.horizontal
+ = f.text_field :label, :label => "Snippet Name"
+ = f.text_area :content
+ .submit
+ = f.submit 'Save All Changes', :onclick => 'this.f.target = ""'
+ or
+ = link_to 'Return to List', cms_admin_snippets_path
app/views/cms_admin/snippets/edit.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for @cms_snippet, :url => {:action => :update}, :html => {:method => :put} do |form|
+ = render :partial => 'form', :locals => {:f => form}
app/views/cms_admin/snippets/index.html.haml +19 -0
@@ @@ -0,0 +1,19 @@
+ = link_to 'Add New Snippet', new_cms_admin_snippet_path, :class => 'top_button'
+
+ %h2 Snippets
+ = render :partial => 'cms_admin/flash_message'
+ %table.formatted
+ - if @cms_snippets.blank?
+ %tr
+ %td No Snippets Defined
+ - @cms_snippets.each do |snippet|
+ %tr
+ %td
+ .icon
+ %td.main
+ = link_to snippet.label.titleize, edit_cms_admin_snippet_path(snippet), :class => 'label'
+ %br/
+ = link_to snippet.label, edit_cms_admin_snippet_path(snippet), :class => 'slug'
+ %td.action_links
+ = link_to 'Edit', edit_cms_admin_snippet_path(snippet), :class => 'button'
+ = link_to 'Remove', cms_admin_snippet_path(snippet), :class => 'button', :method => 'delete', :confirm => 'Are you sure you want to remove this snippet?'
app/views/cms_admin/snippets/new.html.haml +2 -0
@@ @@ -0,0 +1,2 @@
+ = cms_form_for @cms_snippet, :url => {:action => :create } do |form|
+ = render :partial => 'form', :locals => {:f => form}
app/views/cms_content/sitemap.xml.rxml +16 -0
@@ @@ -0,0 +1,16 @@
+ xml.instruct!
+
+ xml.urlset(
+ "xmlns" => "http://www.google.com/schemas/sitemap/0.84",
+ "xmlns:xsi" => "http://www.w3.org/3004/XMLSchema-instance",
+ "xsi:schemaLocation" => "http://www.google.com/schemas/sitemap/0.84 http://www.google.com/schemas/sitemap/0.84/sitemap.xsd"
+ ) do
+
+ @cms_pages.each do |page|
+ xml.url do
+ xml.loc "http://#{request.host_with_port}" + page.full_path
+ xml.lastmod page.updated_at.utc.strftime("%Y-%m-%dT%H:%M:%S+00:00")
+ xml.changefreq 'daily'
+ end
+ end
+ end
\ No newline at end of file
app/views/complex_page/_example.html.haml +0 -0
app/views/layouts/cms_admin.html.haml +51 -9
@@ @@ -1,10 +1,52 @@
- !!! 5
- %head
- %title ComfortableMexicanSofa
- %meta{ 'http-equiv'=>"Content-Type", :content=>"text/html;charset=utf-8"}
- = stylesheet_link_tag :all
- = javascript_include_tag :defaults
- = csrf_meta_tag
+ !!!
+ %html
+ %head
+ %title= application_name
+ = stylesheet_link_tag 'cms_master'
+ = stylesheet_link_tag 'jquery_ui'
+ = javascript_include_tag 'cms/jquery', 'cms/jquery-ui', 'cms/cms'
+ = javascript_include_tag 'cms/rails'
- %body
- = yield
\ No newline at end of file
+ - if js_helper_installed?('ckeditor')
+ = javascript_include_tag 'ckeditor/ckeditor', 'ckeditor/adapters/jquery', 'cms/rteditor'
+ - if js_helper_installed?('codemirror')
+ = javascript_include_tag 'codemirror/codemirror', 'cms/codemirror'
+
+ = yield :head
+
+ %body{ :id => "#{params[:controller]}_#{params[:action]}".idify }
+ .content_wrapper
+ .left_column
+ .header
+ %h1
+ = h(application_name)
+ = link_to(image_tag(ComfortableMexicanSofa::Config.logo_path), cms_admin_pages_path)
+
+ %ul.primary
+ - if (ComfortableMexicanSofa::Config.multiple_sites)
+ %li= active_link_to 'Sites', cms_admin_sites_path
+ %li= active_link_to 'Layouts', cms_admin_layouts_path
+ %li= active_link_to 'Pages', cms_admin_pages_path, :active => {:when => [['cms_admin/pages'], %w(index new edit create update)]}
+ %li= active_link_to 'Snippets', cms_admin_snippets_path
+ %li= active_link_to 'Categories', cms_admin_categories_path
+
+ - if (tabs = ComfortableMexicanSofa::Config.extension_tabs)
+ %ul.secondary
+ - tabs.each do |label, url|
+ %li= active_link_to label, url
+
+ - unless ComfortableMexicanSofa::Config.additional_cms_tabs.blank?
+ %ul.secondary
+ - ComfortableMexicanSofa::Config.additional_cms_tabs.each do |label, url|
+ %li= active_link_to label, url
+
+ .content_column
+ .right_column
+ = yield :right_column
+ .center_column
+ = yield
+
+ .footer
+ = link_to('The Working Group', 'http://twg.ca/', :target => '_twg')
+ &copy;
+ = [ 2009, Date.today.year ].uniq.join(' - ')
app/views/stylesheets/cms_master.sass +0 -30
@@ @@ -1,30 +0,0 @@
- // -------------------------------------------------------------------- Reset
- html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td
- margin: 0
- padding: 0
- border: 0
- outline: 0
- font-size: 100%
- vertical-align: baseline
- background: transparent
- font-weight: normal
- body
- line-height: 1
- ol, ul
- list-style: none
- blockquote, q
- quotes: none
- blockquote:before, blockquote:after, q:before, q:after
- content: ''
- content: none
- *:focus
- outline: 0
- ins
- text-decoration: none
- del
- text-decoration: line-through
- table
- border-collapse: collapse
- border-spacing: 0
- caption, th
- text-align: left
\ No newline at end of file
config/initializers/cms.rb +15 -0
@@ @@ -0,0 +1,15 @@
+ require 'comfortable_mexican_sofa'
+ ### CMS Configuration
+ # Available configuration options:
+
+ # http_auth_enabled: enable authentication or not. Default: true
+ # http_auth_username: the username for /cms-admin. Default: username
+ # http_auth_password: the password for /cms-admin Default: password
+ # cms_title: If set, this overrides the randomly changing CMS title. Only set this if you're boring. Default: not set
+ #
+ ComfortableMexicanSofa.config do |config|
+ # #config.http_auth_enabled = true
+ # #config.http_auth_username = 'some_other_username'
+ # #config.http_auth_password = 'some_other_password'
+ # #config.cms_title = 'some_other_boring_title'
+ end
\ No newline at end of file
config/routes.rb +44 -7
@@ @@ -1,10 +1,47 @@
- ComfortableMexicanSofa::Application.routes.draw do
-
- namespace :cms_admin, :path => 'cms-admin' do
- match '/', :to => redirect('/cms-admin/pages')
- resources :layouts, :pages, :snippets, :assets
+ Rails.application.routes.draw do
+ scope '/cms-admin', :module => 'cms_admin', :as => 'cms_admin' do
+ match '/', :to => "base#index"
+ resources :layouts do
+ collection do
+ put :reorder
+ end
+
+ member do
+ match :toggle
+ match :children
+ end
+ end
+
+ resources :pages do
+ collection do
+ put :reorder
+ end
+
+ member do
+ match :toggle
+ match :form_blocks
+ end
+ end
+
+ resources :snippets do
+ collection do
+ put :reorder
+ end
+ end
+
+ resources :sites
+
+ resources :categories do
+ member do
+ match :toggle
+ match :children
+ end
+ end
end
- # Catch-all route
- match '*path' => 'cms_content#show', :via => :get
+ controller :cms_content do
+ match '/sitemap.xml', :to => :sitemap
+ match '*path', :to => :show
+ root :to => :show
+ end
end
development_structure.sql b/db/development_structure.sql +2 -0
@@ @@ -0,0 +1,2 @@
+ CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL);
+ CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version");
migrate/01_create_cms.rb b/db/migrate/01_create_cms.rb +77 -15
@@ @@ -1,43 +1,105 @@
class CreateCms < ActiveRecord::Migration
def self.up
- # -- Layouts ------------------------------------------------------------
+ create_table :cms_sites do |t|
+ t.string :label
+ t.string :hostname
+ end
+
+ add_index :cms_sites, :label
+ add_index :cms_sites, :hostname, :unique => true
+
create_table :cms_layouts do |t|
+ t.integer :cms_site_id
+ t.integer :parent_id
+ t.string :label
+ t.text :content
+ t.string :app_layout
+ t.integer :children_count, :null => false, :default => 0
+ t.boolean :is_extendable, :null => false, :default => false
+ t.integer :position, :null => false, :default => 0
t.timestamps
end
+ add_index :cms_layouts, :parent_id
+ add_index :cms_layouts, :label
- # -- Pages --------------------------------------------------------------
+ execute "INSERT INTO cms_layouts (id, label, app_layout, content) VALUES (1, 'Default Layout', 'application', '{{cms_page_block:default:text}}')"
create_table :cms_pages do |t|
+ t.integer :cms_site_id
+ t.integer :cms_layout_id
+ t.integer :parent_id
+ t.integer :redirect_to_page_id
+ t.string :label
+ t.string :slug
+ t.string :full_path
+ t.integer :children_count, :null => false, :default => 0
+ t.integer :position, :null => false, :default => 0
+ t.boolean :published, :null => false, :default => true
+ t.boolean :excluded_from_nav, :null => false, :default => false
+ t.boolean :site_root, :null => false, :default => false
t.timestamps
end
-
- # -- Blocks -------------------------------------------------------------
+ add_index :cms_pages, [:parent_id, :slug]
+ add_index :cms_pages, [ :cms_site_id, :full_path ], :unique => true
+ add_index :cms_pages, [:published, :full_path]
+ add_index :cms_pages, [:excluded_from_nav, :parent_id]
+
+ execute "INSERT INTO cms_pages (id, cms_layout_id, label, slug, full_path) VALUES (1, 1, 'Default Page', NULL, '')"
create_table :cms_blocks do |t|
+ t.integer :cms_page_id
+ t.string :label
+ t.text :content_text
+ t.string :content_string
+ t.integer :content_integer
+ t.boolean :content_boolean
+ t.datetime :content_datetime
t.timestamps
end
+ add_index :cms_blocks, [:cms_page_id, :label], :unique => true
+ add_index :cms_blocks, [:label, :content_string]
+ add_index :cms_blocks, [:label, :content_integer]
+ add_index :cms_blocks, [:label, :content_boolean]
+ add_index :cms_blocks, [:label, :content_datetime]
+
+ execute "INSERT INTO cms_blocks (id, cms_page_id, label, content_text) VALUES (1, 1, 'default', 'Default home page')"
+
+ create_table :cms_categories do |t|
+ t.integer :parent_id
+ t.string :slug
+ t.string :label
+ t.text :description
+ t.integer :children_count, :null => false, :default => 0
+ t.timestamps
+ end
+ add_index :cms_categories, :slug
+ add_index :cms_categories, [:parent_id, :slug]
- # -- Snippets -----------------------------------------------------------
+ create_table :cms_page_categorizations do |t|
+ t.integer :cms_category_id
+ t.integer :cms_page_id
+ t.timestamps
+ end
+ add_index :cms_page_categorizations, [:cms_category_id, :cms_page_id], :unique => true,
+ :name => 'index_page_categorizations_on_category_id_and_page_id' #auto-generated name was too long.
+
+
create_table :cms_snippets do |t|
t.string :label
t.text :content
t.timestamps
end
add_index :cms_snippets, :label, :unique => true
-
- # -- Assets -------------------------------------------------------------
-
- create_table :cms_assets do |t|
- t.timestamps
- end
end
-
+
def self.down
- drop_table :cms_assets
+ drop_table :cms_layouts
+ drop_table :cms_pages
drop_table :cms_snippets
drop_table :cms_blocks
- drop_table :cms_pages
- drop_table :cms_layouts
+ drop_table :cms_sites
+ drop_table :cms_categories
+ drop_table :cms_page_categorizations
end
end
comfortable_mexican_sofa.rb b/lib/comfortable_mexican_sofa.rb +41 -0
@@ @@ -0,0 +1,41 @@
+ %w(
+ cms_rails_extensions
+ cms_acts_as_tree
+ acts_as_categorized
+ cms_tag
+ cms_tags/block
+ cms_tags/page_block
+ cms_tags/snippet
+ cms_tags/partial
+ cms_tags/helper
+ cms_form_builder
+ engine
+ ).each do |req|
+ require File.join(File.dirname(__FILE__), 'comfortable_mexican_sofa', req)
+ end
+
+ ActiveSupport.on_load(:action_controller) do
+ ActionController::Base.helper CmsHelper
+ end
+
+ module ComfortableMexicanSofa
+ class Config
+ def self.cattr_accessor_with_default(name, value = nil)
+ cattr_accessor name
+ self.send("#{name}=", value) unless value === nil
+ end
+
+ cattr_accessor_with_default :http_auth_enabled, true
+ cattr_accessor_with_default :http_auth_username, 'username'
+ cattr_accessor_with_default :http_auth_password, 'password'
+ cattr_accessor_with_default :cms_title
+ cattr_accessor_with_default :additional_cms_tabs, { }
+ cattr_accessor_with_default :extension_tabs, { }
+ cattr_accessor_with_default :multiple_sites, false
+ cattr_accessor_with_default :logo_path, '/images/cms/default-logo.png'
+ end
+
+ def self.config(&block)
+ yield ComfortableMexicanSofa::Config
+ end
+ end
comfortable_mexican_sofa/acts_as_categorized.rb b/lib/comfortable_mexican_sofa/acts_as_categorized.rb +88 -0
@@ @@ -0,0 +1,88 @@
+ module ActsAsCategorized
+ module StubMethods
+
+ def acts_as_categorized
+
+ __categorized = self.to_s.underscore.to_sym
+ __categorizations = "#{__categorized}_categorizations".to_sym
+
+ # -- Attributes -------------------------------------------------------
+ attr_accessor :attr_category_ids # hash that comes from the form
+
+ # -- Relationships ----------------------------------------------------
+ has_many __categorizations,
+ :dependent => :destroy
+ has_many :cms_categories,
+ :through => __categorizations
+
+ # -- Callbacks --------------------------------------------------------
+ after_save :save_categorizations
+
+ # -- Named Scopes -----------------------------------------------------
+
+ scope :in_category, lambda { |category| {
+ :joins => __categorizations,
+ :conditions => { __categorizations => {:cms_category_id => (category.is_a?(CmsCategory) ? category.id : category) } }
+ }}
+
+ # -- Instance Methods -------------------------------------------------
+ define_method :save_categorizations do
+ return if attr_category_ids.blank?
+
+ category_ids_to_remove = attr_category_ids.select{ |k, v| v.to_i == 0}.collect{|k, v| k }
+ category_ids_to_create = attr_category_ids.select{ |k, v| v.to_i == 1}.collect{|k, v| k }
+
+ # removing unchecked categories
+ send(__categorizations).all(:conditions => { :cms_category_id => category_ids_to_remove}).collect(&:destroy)
+
+ # creating categorizations
+ category_ids_to_create.each do |category_id|
+ send(__categorizations).create(:cms_category_id => category_id)
+ end
+ end
+ end
+
+ def acts_as_categorization
+
+ __categorized = self.to_s.underscore.gsub('_categorization', '').to_sym
+ __categorized_id = "#{__categorized}_id".to_sym
+ __categorizations = "#{__categorized}_categorizations".to_sym
+
+ # -- Relationships --------------------------------------------------------
+ belongs_to __categorized.to_sym
+ belongs_to :cms_category
+
+ # -- Validations ----------------------------------------------------------
+ validates_presence_of __categorized_id,
+ :cms_category_id
+
+ validates_uniqueness_of __categorized_id, :scope => :cms_category_id
+
+ # -- AR Callbacks ---------------------------------------------------------
+ after_save :create_parent_categorization
+ after_destroy :destroy_children_categorizations
+
+ # -- Instance Methods -----------------------------------------------------
+ define_method :create_parent_categorization do
+ return unless cms_category.parent
+
+ params = {
+ :cms_category_id => cms_category.parent_id,
+ __categorized_id => send(__categorized).id
+ }
+ self.class.create!(params) unless self.class.exists?(params)
+ end
+
+ define_method :destroy_children_categorizations do
+ return if cms_category.children.blank?
+
+ cms_category.children.each do |c|
+ send(__categorized).send(__categorizations).first(:conditions => {"cms_category_id" => c.id }).try(:destroy)
+ end
+ end
+ end
+ end
+ end
+
+ ActiveRecord::Base.extend(ActsAsCategorized::StubMethods)
+
comfortable_mexican_sofa/cms_acts_as_tree.rb b/lib/comfortable_mexican_sofa/cms_acts_as_tree.rb +108 -0
@@ @@ -0,0 +1,108 @@
+ module ActiveRecord
+ module Acts
+ module Tree
+ def self.included(base)
+ base.extend(ClassMethods)
+ end
+
+ # Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children
+ # association. This requires that you have a foreign key column, which by default is called +parent_id+.
+ #
+ # class Category < ActiveRecord::Base
+ # acts_as_tree :order => "name"
+ # end
+ #
+ # Example:
+ # root
+ # \_ child1
+ # \_ subchild1
+ # \_ subchild2
+ #
+ # root = Category.create("name" => "root")
+ # child1 = root.children.create("name" => "child1")
+ # subchild1 = child1.children.create("name" => "subchild1")
+ #
+ # root.parent # => nil
+ # child1.parent # => root
+ # root.children # => [child1]
+ # root.children.first.children.first # => subchild1
+ #
+ # In addition to the parent and children associations, the following instance methods are added to the class
+ # after calling <tt>acts_as_tree</tt>:
+ # * <tt>siblings</tt> - Returns all the children of the parent, excluding the current node (<tt>[subchild2]</tt> when called on <tt>subchild1</tt>)
+ # * <tt>self_and_siblings</tt> - Returns all the children of the parent, including the current node (<tt>[subchild1, subchild2]</tt> when called on <tt>subchild1</tt>)
+ # * <tt>ancestors</tt> - Returns all the ancestors of the current node (<tt>[child1, root]</tt> when called on <tt>subchild2</tt>)
+ # * <tt>root</tt> - Returns the root of the current node (<tt>root</tt> when called on <tt>subchild2</tt>)
+ module ClassMethods
+ # Configuration options are:
+ #
+ # * <tt>foreign_key</tt> - specifies the column name to use for tracking of the tree (default: +parent_id+)
+ # * <tt>order</tt> - makes it possible to sort the children according to this SQL snippet.
+ # * <tt>counter_cache</tt> - keeps a count in a +children_count+ column if set to +true+ (default: +false+).
+ def acts_as_tree(options = {})
+ configuration = { :foreign_key => "parent_id", :order => nil, :counter_cache => nil }
+ configuration.update(options) if options.is_a?(Hash)
+
+ belongs_to :parent, :class_name => name, :foreign_key => configuration[:foreign_key], :counter_cache => configuration[:counter_cache]
+ has_many :children, :class_name => name, :foreign_key => configuration[:foreign_key], :order => configuration[:order], :dependent => :destroy
+
+ class_eval <<-EOV
+ include ActiveRecord::Acts::Tree::InstanceMethods
+
+ def self.roots
+ find(:all, :conditions => "#{configuration[:foreign_key]} IS NULL", :order => #{configuration[:order].nil? ? "nil" : %Q{"#{configuration[:order]}"}})
+ end
+
+ def self.root
+ find(:first, :conditions => "#{configuration[:foreign_key]} IS NULL", :order => #{configuration[:order].nil? ? "nil" : %Q{"#{configuration[:order]}"}})
+ end
+ EOV
+ end
+ end
+
+ module InstanceMethods
+ # Returns list of ancestors, starting from parent until root.
+ #
+ # subchild1.ancestors # => [child1, root]
+ def ancestors
+ node, nodes = self, []
+ nodes << node = node.parent while node.parent
+ nodes
+ end
+
+ # Returns all children and children of children
+ def descendants
+ nodes = []
+ self.children.each do |c|
+ nodes << c
+ nodes << c.descendants
+ end
+ nodes.flatten
+ end
+
+ # Returns the root node of the tree.
+ def root
+ node = self
+ node = node.parent while node.parent
+ node
+ end
+
+ # Returns all siblings of the current node.
+ #
+ # subchild1.siblings # => [subchild2]
+ def siblings
+ self_and_siblings - [self]
+ end
+
+ # Returns all siblings and a reference to the current node.
+ #
+ # subchild1.self_and_siblings # => [subchild1, subchild2]
+ def self_and_siblings
+ parent ? parent.children : self.class.roots
+ end
+ end
+ end
+ end
+ end
+
+ ActiveRecord::Base.send :include, ActiveRecord::Acts::Tree
\ No newline at end of file
comfortable_mexican_sofa/cms_form_builder.rb b/lib/comfortable_mexican_sofa/cms_form_builder.rb +165 -0
@@ @@ -0,0 +1,165 @@
+ class CmsFormBuilder < ActionView::Helpers::FormBuilder
+
+ %w{ date_select text_field password_field text_area file_field}.each do |selector|
+ src = <<-end_src
+ def #{selector}(method, options = {})
+ options.merge!(:size=> '') if #{%w{text_field password_field}.include?(selector)}
+ standard_field('#{selector}', method, options) { super(method, options) }
+ end
+ end_src
+ class_eval src, __FILE__, __LINE__
+ end
+
+ def standard_field(type, method, options={}, &block)
+ description = options.delete(:desc)
+ content = options.delete(:content)
+ label = options[:label] || label_for(method, options)
+ required = options.delete(:required)
+
+ output = "<div class='form_element #{type}_element'>"
+ if type != 'check_box'
+ output << "<div class='label'>#{label}"
+ output << "#{@template.content_tag(:span, '*', :class => 'required_ind') if required }"
+ output << "</div>"
+ end
+ output << "<div class='value'>"
+ output << "#{yield}#{content}"
+ output << "#{error_messages_for(method)}"
+ output << "#{description(description)}" if type != 'check_box'
+ output << "</div>"
+ output << "</div>"
+
+ output.html_safe
+ end
+
+ def custom_element(label, content, options={})
+ css_class = options[:css_class].blank? ? "text_field_element" : options[:css_class]
+ errors = if options[:method_name]
+ error_for(options.delete(:method_name))
+ elsif options[:method_names]
+ method_names = options.delete(:method_names)
+ method_names.collect{|method_name| error_for(method_name)}.uniq.join(' ')
+ end
+ %{
+ <div class='form_element #{css_class}'>
+ <div class='label'>
+ #{label}
+ </div>
+ <div class='value'>
+ #{content}
+ #{errors}
+ #{description(options.delete(:desc))}
+ </div>
+ </div>
+ }.html_safe
+ end
+
+ def check_box(method, options = {}, checked_value = "1", unchecked_value = "0")
+ options[:content] = label_for(method, options)
+ options[:label] = '&nbsp;'
+ standard_field('check_box', method, options) { super(method, options, checked_value, unchecked_value) }
+ end
+
+ # Example Usage
+ # form.radio_button :field_name, :foo_value
+ # form.radio_button :gender, %w(Male Female)
+ # form.radio_button :gender, [['Male','m'],['Female','f']]
+ # form.radio_button :gender, {'Male' => 'm', 'Female' => 'f'}, :checked => 'f'
+ def radio_button(method, tag_value, options = {})
+ if tag_value.is_a? Hash
+ tag_value_hash = tag_value
+ tag_value = []
+ tag_value_hash.each_pair do |label, value|
+ tag_value << [label,value]
+ end
+ end
+
+ if tag_value.is_a? Array
+ checked_value = options.delete(:checked)
+ radios = tag_value.collect do |choice|
+ if choice.is_a? Array
+ label, value = choice[0], choice[1]
+ else
+ label = value = choice
+ end
+
+ %(
+ #{super(method,value,options.merge({:checked => (value == checked_value)}))}
+ <label for='#{object_name}_#{method}_#{value.downcase}'>#{label}</label>
+ ).html_safe
+ end.join
+
+ standard_field('radio_button', method, {:label => method.to_s.humanize}.merge(options)) { radios }
+ else
+ standard_field('radio_button', method, options) { super(method, tag_value, options = {}) }
+ end
+ end
+
+ # Renders a jQuery UI datepicker on a text field
+ def datepicker(method, options = {})
+ text_field(method, ({'data-datepicker' => true}).merge(options))
+ end
+
+ def select(method, choices, options = {}, html_options = {})
+ standard_field('select', method, options) { super(method, choices, options, html_options) }
+ end
+
+ def hidden_field(method, options = {}, html_options = {})
+ super(method, options)
+ end
+
+ def submit(value, options={}, &block)
+ cancel_link = @template.capture(&block) if block_given?
+ cancel_link ||= options[:cancel_url] ? ' or ' + options.delete(:cancel_url) : ''
+ if options[:show_ajax_loader]
+ options[:onclick] = "$(this).parent().next().css('display', 'block');$(this).parent().hide();"
+ end
+ out = @template.content_tag(:div, super(value, options) + cancel_link, :class => 'form_element submit_element')
+ if options[:show_ajax_loader] === true
+ options[:show_ajax_loader] = %{
+ Sending.. <img src='/images/cms/spinner.gif' />
+ }
+ end
+
+ if options[:show_ajax_loader]
+ out << %{
+ <div class="form_element submit_element" style="display:none">
+ <div class="submit_ajax_loader">#{options[:show_ajax_loader]}</div>
+ </div>
+ }.html_safe
+ end
+ out.html_safe
+ end
+
+
+ def label_for(method, options)
+ label = options.delete(:label) || method.to_s.titleize.capitalize
+ "<label for=\"#{object_name}_#{method}\">#{label}</label>".html_safe
+ end
+
+ def description(description)
+ "<div class='description'>#{description}</div>".html_safe unless description.nil?
+ end
+
+ def error_messages
+ if @object && @object.errors.count > 0
+ if @object.errors[:base].present?
+ message = @object.errors[:base]
+ else
+ message = %(
+ There were some problems submitting this form. <br/>
+ Please correct all the highlighted fields and try again.
+ ).html_safe
+ end
+ @template.content_tag(:div, message, :class => 'errorExplanation')
+ end
+ end
+
+ def error_messages_for(method)
+ if (!@object.nil? and @object.respond_to?(:errors) and errors = @object.errors[method] and errors.present?)
+ "<div class='errors'>#{method.to_s.humanize} #{errors.is_a?(Array) ? errors.first : errors}</div>".html_safe
+ else
+ ''
+ end
+ end
+ end
comfortable_mexican_sofa/cms_rails_extensions.rb b/lib/comfortable_mexican_sofa/cms_rails_extensions.rb +12 -0
@@ @@ -0,0 +1,12 @@
+ class String
+
+ # Converts string to something suitable to be used as an element id
+ def idify
+ self.strip.gsub(/\W/, '_').gsub(/\s|^_*|_*$/, '').squeeze('_')
+ end
+
+ # Converts a string to something usable as a url slug
+ def slugify
+ self.downcase.gsub(/\W|_/, ' ').strip.squeeze(' ').gsub(/\s/, '-')
+ end
+ end
\ No newline at end of file
comfortable_mexican_sofa/cms_tag.rb b/lib/comfortable_mexican_sofa/cms_tag.rb +108 -0
@@ @@ -0,0 +1,108 @@
+ module CmsTag
+
+ class TagError < StandardError; end
+
+ # Initializes all tags found in the provided content
+ # Will ignore duplicate tags. Will use format definition of the first one.
+ def self.parse_tags(*args)
+ options = args.extract_options!
+ content = args.first
+
+ # bailing out if nothing was sent for parsing
+ return [] if content.blank?
+
+ tags = []
+ CmsTag::Tag.subclasses.each do |tag|
+ tags << tag.parse_tags(content).group_by{|s| s.split(':')[0...2].join(':')}.collect{|g, tag_signature| tag.new(tag_signature.first, options)}
+ end
+ tags.flatten
+ end
+
+ class Tag
+ attr_accessor :tag_signature, :label, :view, :page
+
+ # Returns tag type based on it's classname
+ # CmsTag::MyAwesomeTag.tag_type => 'cms_my_awesome_tag'
+ def self.tag_type
+ 'cms_' + to_s.split('::').last.underscore
+ end
+
+ def tag_type
+ self.class.tag_type
+ end
+
+ # regular expression that finds tag signature
+ def self.regex
+ 'tag regex not defined'
+ end
+
+ # regex needed for content substitution
+ def regex
+ 'tag regex not defined'
+ end
+
+ # Returns tag identifiers from passed content based on regex defined
+ # for the particular tag
+ def self.parse_tags(content)
+ content.scan(regex).flatten
+ end
+
+ # order at which tags get replaced with their content during page rendering
+ def self.render_priority
+ 0
+ end
+
+ def self.has_form?
+ false
+ end
+
+ def initialize(*args)
+ options = args.extract_options!
+ self.tag_signature = args.first
+
+ # provides access to action view methods for rendering form elements
+ if options[:view]
+ unless options[:view].is_a?(ActionView::Base)
+ raise TagError, "Expected ActionView::Base but got #{options[:view].class}"
+ end
+ self.view = options[:view]
+ end
+
+ # owner of the the tag
+ if options[:page]
+ unless options[:page].is_a?(CmsPage)
+ raise TagError, "Expected CmsPage but got #{options[:page].class}"
+ end
+ self.page = options[:page]
+ end
+
+ tokens = self.tag_signature.split(':')
+ self.label = tokens[1]
+
+ assign_accessors
+ end
+
+ def assign_accessors
+ # ... FIX: looks retarded
+ end
+
+ def form_label
+ "Label Undefined!"
+ end
+
+ def form_input
+ "Form Field Undefined!"
+ end
+
+ def content
+ 'Undefined Tag'
+ end
+
+ # when cms_page renders its content this is what tag outputs on the page
+ def render
+ content
+ end
+
+ end
+
+ end
comfortable_mexican_sofa/cms_tags/.partial.rb.swp b/lib/comfortable_mexican_sofa/cms_tags/.partial.rb.swp +0 -0
comfortable_mexican_sofa/cms_tags/block.rb b/lib/comfortable_mexican_sofa/cms_tags/block.rb +117 -0
@@ @@ -0,0 +1,117 @@
+ class CmsTag::Block < CmsTag::Tag
+
+ FORMAT = {
+ :text => {
+ :db_column => :content_text,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.text_area_tag "cms_page[blocks][#{tag.label}][content_text]", tag.content,
+ :rows => 20
+ }
+ },
+ :string => {
+ :db_column => :content_string,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.text_field_tag "cms_page[blocks][#{tag.label}][content_string]", tag.content
+ }
+ },
+ :rich_text => {
+ :db_column => :content_text,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.text_area_tag "cms_page[blocks][#{tag.label}][content_text]", tag.content,
+ :rows => 20,
+ :class => 'richText'
+ }
+ },
+ :code => {
+ :db_column => :content_text,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.content_tag :div, :class => 'codemirror' do
+ tag.view.text_area_tag "cms_page[blocks][#{tag.label}][content_text]", tag.content,
+ :rows => 20,
+ :class => 'codeTextArea'
+ end
+ }
+ },
+ :integer => {
+ :db_column => :content_integer,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.text_field_tag "cms_page[blocks][#{tag.label}][content_integer]", tag.content
+ }
+ },
+ :boolean => {
+ :db_column => :content_boolean,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.check_box_tag "cms_page[blocks][#{tag.label}][content_boolean]", tag.content
+ }
+ },
+ :date => {
+ :db_column => :content_datetime,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.fields_for "cms_page[blocks][#{tag.label}]" do |field|
+ field.date_select :content_datetime, :default => tag.content
+ end
+ }
+ },
+ :time => {
+ :db_column => :content_datetime,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.fields_for "cms_page[blocks][#{tag.label}]" do |field|
+ field.datetime_select :content_datetime, :default => tag.content
+ end
+ }
+ }
+ }
+
+ attr_accessor :format
+
+ def self.regex
+ /\{\{\s*?(cms_block:.*?)\s*?\}\}/
+ end
+
+ def regex
+ /\{\{\s*?cms_block:#{Regexp.escape(label)}.*?\s*?\}\}/
+ end
+
+ def self.render_priority
+ 1
+ end
+
+ def self.has_form?
+ true
+ end
+
+ def assign_accessors
+ tokens = self.tag_signature.split(':')
+ self.label = tokens[1]
+ self.format = tokens[2]
+ end
+
+ def form_label
+ view.label_tag label.titleize
+ end
+
+ def form_input
+ if FORMAT.has_key? self.format.to_sym
+ FORMAT[self.format.to_sym][:form_output].call(self)
+ else
+ 'Unknown tag format'
+ end
+ end
+
+ def content
+ page && page.cms_block_content(self.label, FORMAT[self.format.to_sym][:db_column])
+ end
+
+ def render
+ ''
+ end
+
+ end
\ No newline at end of file
comfortable_mexican_sofa/cms_tags/helper.rb b/lib/comfortable_mexican_sofa/cms_tags/helper.rb +3 -0
@@ @@ -0,0 +1,3 @@
+ class CmsTag::Helper < CmsTag::Tag
+
+ end
\ No newline at end of file
comfortable_mexican_sofa/cms_tags/page_block.rb b/lib/comfortable_mexican_sofa/cms_tags/page_block.rb +119 -0
@@ @@ -0,0 +1,119 @@
+ class CmsTag::PageBlock < CmsTag::Tag
+
+ FORMAT = {
+ :text => {
+ :db_column => :content_text,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.text_area_tag "cms_page[blocks][#{tag.label}][content_text]", tag.content,
+ :rows => 20
+ }
+ },
+ :rich_text => {
+ :db_column => :content_text,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.text_area_tag "cms_page[blocks][#{tag.label}][content_text]", tag.content,
+ :rows => 20,
+ :class => 'richText'
+ }
+ },
+ :code => {
+ :db_column => :content_text,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.content_tag :div, :class => 'codemirror' do
+ tag.view.text_area_tag "cms_page[blocks][#{tag.label}][content_text]", tag.content,
+ :rows => 20,
+ :class => 'codeTextArea'
+ end
+ }
+ },
+ :string => {
+ :db_column => :content_string,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.text_field_tag "cms_page[blocks][#{tag.label}][content_string]", tag.content
+ }
+ },
+ :integer => {
+ :db_column => :content_integer,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.text_field_tag "cms_page[blocks][#{tag.label}][content_integer]", tag.content
+ }
+ },
+ :boolean => {
+ :db_column => :content_boolean,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.check_box_tag "cms_page[blocks][#{tag.label}][content_boolean]", tag.content
+ }
+ },
+ :date => {
+ :db_column => :content_datetime,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.fields_for "cms_page[blocks][#{tag.label}]" do |field|
+ field.date_select :content_datetime, :default => tag.content
+ end
+ }
+ },
+ :time => {
+ :db_column => :content_datetime,
+ :description => '',
+ :form_output => lambda { |tag|
+ tag.view.fields_for "cms_page[blocks][#{tag.label}]" do |field|
+ field.datetime_select :content_datetime, :default => tag.content
+ end
+ }
+ }
+ }
+
+ attr_accessor :format
+
+ def self.regex
+ /\{\{\s*?(cms_page_block:.*?)\s*?\}\}/
+ end
+
+ def regex
+ /\{\{\s*?cms_page_block:#{Regexp.escape(label)}.*?\s*?\}\}/
+ end
+
+ # this shold be the most important tag to render, but let's leave space
+ # for some unforseen cases
+ def self.render_priority
+ 1
+ end
+
+ def self.has_form?
+ true
+ end
+
+ def assign_accessors
+ tokens = self.tag_signature.split(':')
+ self.label = tokens[1]
+ self.format = tokens[2]
+ end
+
+ def form_label
+ view.label_tag label.titleize
+ end
+
+ def form_input
+ if FORMAT.has_key? self.format.to_sym
+ FORMAT[self.format.to_sym][:form_output].call(self)
+ else
+ 'Unknown tag format'
+ end
+ end
+
+ def content
+ page && page.cms_block_content(self.label, FORMAT[self.format.to_sym][:db_column])
+ end
+
+ def render
+ content.to_s
+ end
+
+ end
\ No newline at end of file
comfortable_mexican_sofa/cms_tags/partial.rb b/lib/comfortable_mexican_sofa/cms_tags/partial.rb +19 -0
@@ @@ -0,0 +1,19 @@
+ class CmsTag::Partial < CmsTag::Tag
+
+ def self.regex
+ /\{\{\s*?(cms_partial:.*?)\s*?\}\}/
+ end
+
+ def self.render_priority
+ 3
+ end
+
+ def regex
+ /\{\{\s*?cms_partial:#{Regexp.escape(label)}\s*?\}\}/
+ end
+
+ def content
+ "<%= render :partial => '#{self.label}' %>"
+ end
+
+ end
comfortable_mexican_sofa/cms_tags/snippet.rb b/lib/comfortable_mexican_sofa/cms_tags/snippet.rb +19 -0
@@ @@ -0,0 +1,19 @@
+ class CmsTag::Snippet < CmsTag::Tag
+
+ def self.regex
+ /\{\{\s*?(cms_snippet:.*?)\s*?\}\}/
+ end
+
+ def self.render_priority
+ 2
+ end
+
+ def regex
+ /\{\{\s*?cms_snippet:#{Regexp.escape(label)}\s*?\}\}/
+ end
+
+ def render
+ CmsSnippet.content_for(label)
+ end
+
+ end
comfortable_mexican_sofa/engine.rb b/lib/comfortable_mexican_sofa/engine.rb +7 -0
@@ @@ -0,0 +1,7 @@
+ require 'comfortable_mexican_sofa'
+ require 'rails'
+
+ module ComfortableMexicanSofa
+ class Engine < Rails::Engine
+ end
+ end
generators/cms_generator.rb b/lib/generators/cms_generator.rb +65 -0
@@ @@ -0,0 +1,65 @@
+ require 'rails/generators'
+ require 'rails/generators/migration'
+
+ class CmsGenerator < Rails::Generators::Base
+ include Rails::Generators::Migration
+ include Thor::Actions
+ source_root File.expand_path('../templates', __FILE__)
+
+ def generate_migration
+ empty_directory 'db/migrate'
+ @cms_migration_number = 1
+ %w(create_cms fix_children_count).each do |fix_migration|
+ @cms_migration_number += 1
+ begin
+ migration_template "migrations/#{fix_migration}.rb", "db/migrate/#{fix_migration}.rb"
+ rescue Rails::Generators::Error => e
+ say_status :warning, "migration '#{fix_migration}' already exists - skipping", :red
+ end
+ end
+ end
+
+ def generate_stylesheets
+ if defined?(Sass)
+ sass_dir = Sass::Plugin.options[:template_location].gsub(Rails.root, '')
+ directory "stylesheets", sass_dir.gsub(/^\//,'')
+ else
+ say_status :warning, "HAML/SASS not installed", :red
+ end
+ end
+
+ def generate_javascript
+ directory 'javascripts', 'public/javascripts/cms'
+ end
+
+ def generate_initializers
+ directory 'initializers', 'config/initializers'
+ end
+
+ def generate_images
+ directory 'images', 'public/images/cms'
+ end
+
+ def show_readme
+ readme 'README'
+ end
+
+ # Implement the required interface for Rails::Generators::Migration.
+ # taken from http://github.com/rails/rails/blob/master/activerecord/lib/generators/active_record.rb
+ def self.next_migration_number(dirname)
+ ret = nil
+ if ActiveRecord::Base.timestamped_migrations
+ ret = Time.now.utc.strftime("%Y%m%d%H%M%S")
+ else
+ ret = "%.3d" % (current_migration_number(dirname) + 1)
+ end
+
+ while (Dir.entries(dirname).detect {|f| f.match /^#{ret}_/})
+ ret = (ret.to_i + 1).to_s
+ end
+
+ return ret
+ end
+
+ end
+
public/images/cms/arrow_bottom.gif +0 -0
public/images/cms/arrow_right.gif +0 -0
public/images/cms/background.png +0 -0
public/images/cms/bg-button-green-34.gif +0 -0
public/images/cms/default-logo.png +0 -0
public/images/cms/icon_category.gif +0 -0
public/images/cms/icon_draft.gif +0 -0
public/images/cms/icon_layout.gif +0 -0
public/images/cms/icon_move.gif +0 -0
public/images/cms/icon_regular.gif +0 -0
public/images/cms/icon_snippet.gif +0 -0
public/images/cms/jquery_ui/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
public/images/cms/jquery_ui/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
public/images/cms/jquery_ui/ui-bg_flat_10_000000_40x100.png +0 -0
public/images/cms/jquery_ui/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
public/images/cms/jquery_ui/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
public/images/cms/jquery_ui/ui-bg_glass_65_ffffff_1x400.png +0 -0
public/images/cms/jquery_ui/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
public/images/cms/jquery_ui/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
public/images/cms/jquery_ui/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
public/images/cms/jquery_ui/ui-icons_222222_256x240.png +0 -0
public/images/cms/jquery_ui/ui-icons_228ef1_256x240.png +0 -0
public/images/cms/jquery_ui/ui-icons_ef8c08_256x240.png +0 -0
public/images/cms/jquery_ui/ui-icons_ffd27a_256x240.png +0 -0
public/images/cms/jquery_ui/ui-icons_ffffff_256x240.png +0 -0
public/images/cms/spinner.gif +0 -0
public/images/rails.png +0 -0
public/javascripts/cms/cms.js +103 -0
@@ @@ -0,0 +1,103 @@
+ $.CMS = function(){
+ var current_path = window.location.pathname;
+
+ $(document).ready(function(){
+ // Slugify
+ $('input#slugify').bind('keyup.cms', function() {
+ $('input#slug').val( $.CMS.slugify( $(this).val() ) );
+ });
+
+ // Expand/Collapse tree function
+ $('a.tree_toggle').bind('click.cms', function() {
+ $(this).siblings('ul').toggle();
+ $(this).toggleClass('closed');
+ // object_id are set in the helper (check cms_helper.rb)
+ $.ajax({url: [current_path, object_id, 'toggle'].join('/')});
+ });
+
+ // Show/hide details
+ $('a.details_toggle').bind('click.cms', function() {
+ $(this).parent().siblings('table.details').toggle();
+ });
+
+ // Sortable trees
+ $('ul.sortable').each(function(){
+ $(this).sortable({ handle: 'div.dragger',
+ update: function() {
+ $.post(current_path + '/reorder', '_method=put&'+$(this).sortable('serialize'));
+ }
+ })
+ });
+
+ // Show/Hide Advanced
+ $('a#more_options').bind('click.cms', function() {
+ $(this).text(($(this).text() == 'Show more') ? 'Show less' : 'Show more');
+ $('.advanced').toggle();
+ })
+
+ // Load Page Blocks on layout change
+ $('select#cms_page_cms_layout_id').bind('change.cms', function() {
+ $.ajax({url: ['/cms-admin/pages', page_id, 'form_blocks'].join('/'), data: ({ layout_id: $(this).val()})})
+ })
+
+ // Datepicker
+ $('input[data-datepicker]').datepicker({dateFormat : 'yy-mm-dd'});
+
+ // Add Category Subform
+ $.CMS.category_subform_submit();
+ }); // End $(document).ready()
+
+
+
+ return {
+ slugify: function(str){
+ str = str.replace(/^\s+|\s+$/g, '');
+ var from = "ÀÁÄÂÈÉËÊÌÍÏÎÒÓÖÔÙÚÜÛàáäâèéëêìíïîòóöôùúüûÑñÇç·/_,:;";
+ var to = "aaaaeeeeiiiioooouuuuaaaaeeeeiiiioooouuuunncc------";
+ for (var i=0, l=from.length ; i<l ; i++) {
+ str = str.replace(new RegExp(from[i], "g"), to[i]);
+ }
+ str = str.replace(/[^a-zA-Z0-9 -]/g, '').replace(/\s+/g, '-').toLowerCase();
+ return str;
+ },
+ toggle_category_selections: function(obj) {
+ if (obj.checked == true){
+ $(obj).parents("ul#root_categories li")
+ .children("div.form_element")
+ .find("input[type=checkbox]")
+ .each(function() {
+ this.checked = true;
+ });
+ } else {
+ // NOT WORKING
+ $(obj).parent().parent().parent().find("input[type=checkbox]").each(function() {
+ this.checked = false;
+ });
+ }
+ },
+ category_subform_submit: function(){
+ $('#new_category input[type=button]').bind('click.cms', function() {
+ var currently_selected = [];
+ $.post(
+ '/cms-admin/categories.js',
+ $("#new_category [name^=cms_category]")
+ .add("input[name=item_type]")
+ .add("input[name='authenticity_token']")
+ .serialize(),
+ function(data) {
+ $("#cms_category_label").val("").focus();
+ $.CMS.category_subform_submit();
+ }
+ );
+ return false;
+ })
+
+ $('#new_category input[name^=cms_category]').bind('keypress.cms', function(event) {
+ if (event.keyCode == '13') {
+ event.preventDefault();
+ $('#new_category input[type=button]').trigger('click.cms');
+ }
+ })
+ }
+ }
+ }();
public/javascripts/cms/codemirror.js +21 -0
@@ @@ -0,0 +1,21 @@
+ $.CMS.CodeMirror = function(){
+
+ $(document).ready(function(){
+ $.CMS.CodeMirror.init();
+ }).ajaxSuccess(function(){
+ $.CMS.CodeMirror.init();
+ });
+
+ return {
+ init: function(){
+ $('.codeTextArea').each(function(i, el){
+ CodeMirror.fromTextArea(el, {
+ parserfile: ["parsexml.js", "parsecss.js", "tokenizejavascript.js", "parsejavascript.js", "parsehtmlmixed.js"],
+ stylesheet: ["/stylesheets/codemirror/xmlcolors.css", "/stylesheets/codemirror/jscolors.css", "/stylesheets/codemirror/csscolors.css"],
+ path: "/javascripts/codemirror/",
+ iframeClass: 'codeMirrorIframe'
+ });
+ });
+ }
+ }
+ }();
public/javascripts/cms/jquery-ui.js +354 -0
@@ @@ -0,0 +1,354 @@
+ /*!
+ * jQuery UI 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */ /*
+ * jQuery UI 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI
+ */
+ jQuery.ui||(function(a){a.ui={version:"1.8",plugin:{add:function(c,d,f){var e=a.ui[c].prototype;for(var b in f){e.plugins[b]=e.plugins[b]||[];e.plugins[b].push([d,f[b]])}},call:function(b,d,c){var f=b.plugins[d];if(!f||!b.element[0].parentNode){return}for(var e=0;e<f.length;e++){if(b.options[f[e][0]]){f[e][1].apply(b.element,c)}}}},contains:function(d,c){return document.compareDocumentPosition?d.compareDocumentPosition(c)&16:d!==c&&d.contains(c)},hasScroll:function(e,c){if(a(e).css("overflow")=="hidden"){return false}var b=(c&&c=="left")?"scrollLeft":"scrollTop",d=false;if(e[b]>0){return true}e[b]=1;d=(e[b]>0);e[b]=0;return d},isOverAxis:function(c,b,d){return(c>b)&&(c<(b+d))},isOver:function(g,c,f,e,b,d){return a.ui.isOverAxis(g,f,b)&&a.ui.isOverAxis(c,e,d)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};a.fn.extend({_focus:a.fn.focus,focus:function(b,c){return typeof b==="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus();(c&&c.call(d))},b)}):this._focus.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var b;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){b=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{b=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!b.length?a(document):b},zIndex:function(e){if(e!==undefined){return this.css("zIndex",e)}if(this.length){var c=a(this[0]),b,d;while(c.length&&c[0]!==document){b=c.css("position");if(b=="absolute"||b=="relative"||b=="fixed"){d=parseInt(c.css("zIndex"));if(!isNaN(d)&&d!=0){return d}}c=c.parent()}}return 0}});a.extend(a.expr[":"],{data:function(d,c,b){return !!a.data(d,b[3])},focusable:function(c){var d=c.nodeName.toLowerCase(),b=a.attr(c,"tabindex");return(/input|select|textarea|button|object/.test(d)?!c.disabled:"a"==d||"area"==d?c.href||!isNaN(b):!isNaN(b))&&!a(c)["area"==d?"parents":"closest"](":hidden").length},tabbable:function(c){var b=a.attr(c,"tabindex");return(isNaN(b)||b>=0)&&a(c).is(":focusable")}})})(jQuery);;/*!
+ * jQuery UI Widget 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Widget
+ */ /*
+ * jQuery UI Widget 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Widget
+ */
+ (function(b){var a=b.fn.remove;b.fn.remove=function(c,d){return this.each(function(){if(!d){if(!c||b.filter(c,[this]).length){b("*",this).add(this).each(function(){b(this).triggerHandler("remove")})}}return a.call(b(this),c,d)})};b.widget=function(d,f,c){var e=d.split(".")[0],h;d=d.split(".")[1];h=e+"-"+d;if(!c){c=f;f=b.Widget}b.expr[":"][h]=function(i){return !!b.data(i,d)};b[e]=b[e]||{};b[e][d]=function(i,j){if(arguments.length){this._createWidget(i,j)}};var g=new f();g.options=b.extend({},g.options);b[e][d].prototype=b.extend(true,g,{namespace:e,widgetName:d,widgetEventPrefix:b[e][d].prototype.widgetEventPrefix||d,widgetBaseClass:h},c);b.widget.bridge(d,b[e][d])};b.widget.bridge=function(d,c){b.fn[d]=function(g){var e=typeof g==="string",f=Array.prototype.slice.call(arguments,1),h=this;g=!e&&f.length?b.extend.apply(null,[true,g].concat(f)):g;if(e&&g.substring(0,1)==="_"){return h}if(e){this.each(function(){var i=b.data(this,d),j=i&&b.isFunction(i[g])?i[g].apply(i,f):i;if(j!==i&&j!==undefined){h=j;return false}})}else{this.each(function(){var i=b.data(this,d);if(i){if(g){i.option(g)}i._init()}else{b.data(this,d,new c(g,this))}})}return h}};b.Widget=function(c,d){if(arguments.length){this._createWidget(c,d)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(d,e){this.element=b(e).data(this.widgetName,this);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(e)[this.widgetName],d);var c=this;this.element.bind("remove."+this.widgetName,function(){c.destroy()});this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled")},widget:function(){return this.element},option:function(e,f){var d=e,c=this;if(arguments.length===0){return b.extend({},c.options)}if(typeof e==="string"){if(f===undefined){return this.options[e]}d={};d[e]=f}b.each(d,function(g,h){c._setOption(g,h)});return c},_setOption:function(c,d){this.options[c]=d;if(c==="disabled"){this.widget()[d?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",d)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(d,e,f){var h=this.options[d];e=b.Event(e);e.type=(d===this.widgetEventPrefix?d:this.widgetEventPrefix+d).toLowerCase();f=f||{};if(e.originalEvent){for(var c=b.event.props.length,g;c;){g=b.event.props[--c];e[g]=e.originalEvent[g]}}this.element.trigger(e,f);return !(b.isFunction(h)&&h.call(this.element[0],e,f)===false||e.isDefaultPrevented())}}})(jQuery);;/*!
+ * jQuery UI Mouse 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */ /*
+ * jQuery UI Mouse 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Mouse
+ *
+ * Depends:
+ * jquery.ui.widget.js
+ */
+ (function(a){a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(c){return b._mouseDown(c)}).bind("click."+this.widgetName,function(c){if(b._preventClickEvent){b._preventClickEvent=false;c.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(d){d.originalEvent=d.originalEvent||{};if(d.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(d));this._mouseDownEvent=d;var c=this,e=(d.which==1),b=(typeof this.options.cancel=="string"?a(d.target).parents().add(d.target).filter(this.options.cancel).length:false);if(!e||b||!this._mouseCapture(d)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){c.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(d)!==false);if(!this._mouseStarted){d.preventDefault();return true}}this._mouseMoveDelegate=function(f){return c._mouseMove(f)};this._mouseUpDelegate=function(f){return c._mouseUp(f)};a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(a.browser.safari||d.preventDefault());d.originalEvent.mouseHandled=true;return true},_mouseMove:function(b){if(a.browser.msie&&!b.button){return this._mouseUp(b)}if(this._mouseStarted){this._mouseDrag(b);return b.preventDefault()}if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,b)!==false);(this._mouseStarted?this._mouseDrag(b):this._mouseUp(b))}return !this._mouseStarted},_mouseUp:function(b){a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(b.target==this._mouseDownEvent.target);this._mouseStop(b)}return false},_mouseDistanceMet:function(b){return(Math.max(Math.abs(this._mouseDownEvent.pageX-b.pageX),Math.abs(this._mouseDownEvent.pageY-b.pageY))>=this.options.distance)},_mouseDelayMet:function(b){return this.mouseDelayMet},_mouseStart:function(b){},_mouseDrag:function(b){},_mouseStop:function(b){},_mouseCapture:function(b){return true}})})(jQuery);;/*
+ * jQuery UI Position 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Position
+ */ (function(f){f.ui=f.ui||{};var c=/left|center|right/,e="center",d=/top|center|bottom/,g="center",a=f.fn.position,b=f.fn.offset;f.fn.position=function(i){if(!i||!i.of){return a.apply(this,arguments)}i=f.extend({},i);var l=f(i.of),n=(i.collision||"flip").split(" "),m=i.offset?i.offset.split(" "):[0,0],k,h,j;if(i.of.nodeType===9){k=l.width();h=l.height();j={top:0,left:0}}else{if(i.of.scrollTo&&i.of.document){k=l.width();h=l.height();j={top:l.scrollTop(),left:l.scrollLeft()}}else{if(i.of.preventDefault){i.at="left top";k=h=0;j={top:i.of.pageY,left:i.of.pageX}}else{k=l.outerWidth();h=l.outerHeight();j=l.offset()}}}f.each(["my","at"],function(){var o=(i[this]||"").split(" ");if(o.length===1){o=c.test(o[0])?o.concat([g]):d.test(o[0])?[e].concat(o):[e,g]}o[0]=c.test(o[0])?o[0]:e;o[1]=d.test(o[1])?o[1]:g;i[this]=o});if(n.length===1){n[1]=n[0]}m[0]=parseInt(m[0],10)||0;if(m.length===1){m[1]=m[0]}m[1]=parseInt(m[1],10)||0;if(i.at[0]==="right"){j.left+=k}else{if(i.at[0]===e){j.left+=k/2}}if(i.at[1]==="bottom"){j.top+=h}else{if(i.at[1]===g){j.top+=h/2}}j.left+=m[0];j.top+=m[1];return this.each(function(){var r=f(this),q=r.outerWidth(),p=r.outerHeight(),o=f.extend({},j);if(i.my[0]==="right"){o.left-=q}else{if(i.my[0]===e){o.left-=q/2}}if(i.my[1]==="bottom"){o.top-=p}else{if(i.my[1]===g){o.top-=p/2}}f.each(["left","top"],function(t,s){if(f.ui.position[n[t]]){f.ui.position[n[t]][s](o,{targetWidth:k,targetHeight:h,elemWidth:q,elemHeight:p,offset:m,my:i.my,at:i.at})}});if(f.fn.bgiframe){r.bgiframe()}r.offset(f.extend(o,{using:i.using}))})};f.ui.position={fit:{left:function(h,i){var k=f(window),j=h.left+i.elemWidth-k.width()-k.scrollLeft();h.left=j>0?h.left-j:Math.max(0,h.left)},top:function(h,i){var k=f(window),j=h.top+i.elemHeight-k.height()-k.scrollTop();h.top=j>0?h.top-j:Math.max(0,h.top)}},flip:{left:function(i,j){if(j.at[0]==="center"){return}var l=f(window),k=i.left+j.elemWidth-l.width()-l.scrollLeft(),h=j.my[0]==="left"?-j.elemWidth:j.my[0]==="right"?j.elemWidth:0,m=-2*j.offset[0];i.left+=i.left<0?h+j.targetWidth+m:k>0?h-j.targetWidth+m:0},top:function(i,k){if(k.at[1]==="center"){return}var m=f(window),l=i.top+k.elemHeight-m.height()-m.scrollTop(),h=k.my[1]==="top"?-k.elemHeight:k.my[1]==="bottom"?k.elemHeight:0,j=k.at[1]==="top"?k.targetHeight:-k.targetHeight,n=-2*k.offset[1];i.top+=i.top<0?h+k.targetHeight+n:l>0?h+j+n:0}}};if(!f.offset.setOffset){f.offset.setOffset=function(l,i){if(/static/.test(f.curCSS(l,"position"))){l.style.position="relative"}var k=f(l),n=k.offset(),h=parseInt(f.curCSS(l,"top",true),10)||0,m=parseInt(f.curCSS(l,"left",true),10)||0,j={top:(i.top-n.top)+h,left:(i.left-n.left)+m};if("using" in i){i.using.call(l,j)}else{k.css(j)}};f.fn.offset=function(h){var i=this[0];if(!i||!i.ownerDocument){return null}if(h){return this.each(function(){f.offset.setOffset(this,h)})}return b.call(this)}}}(jQuery));;/*
+ * jQuery UI Draggable 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Draggables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */ (function(a){a.widget("ui.draggable",a.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;(c.cursorAt&&this._adjustOffsetFromHelper(c.cursorAt));if(c.containment){this._setContainment()}if(this._trigger("start",b)===false){this._clear();return false}this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();if(this._trigger("drag",b,c)===false){this._mouseUp({});return false}this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode){return false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){if(b._trigger("stop",c)!==false){b._clear()}})}else{if(this._trigger("stop",c)!==false){this._clear()}}return false},cancel:function(){if(this.helper.is(".ui-draggable-dragging")){this._mouseUp({})}else{this._clear()}return this},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(typeof b=="string"){b=b.split(" ")}if(a.isArray(b)){b={left:+b[0],top:+b[1]||0}}if("left" in b){this.offset.click.left=b.left+this.margins.left}if("right" in b){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if("top" in b){this.offset.click.top=b.top+this.margins.top}if("bottom" in b){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&a.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.Widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});a.extend(a.ui.draggable,{version:"1.8"});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(c,d){var f=a(this).data("draggable").options;var e=a.makeArray(a(f.stack)).sort(function(h,g){return(parseInt(a(h).css("zIndex"),10)||0)-(parseInt(a(g).css("zIndex"),10)||0)});if(!e.length){return}var b=parseInt(e[0].style.zIndex)||0;a(e).each(function(g){this.style.zIndex=b+g});this[0].style.zIndex=b+e.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
+ * jQuery UI Droppable 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Droppables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.widget.js
+ * jquery.ui.mouse.js
+ * jquery.ui.draggable.js
+ */ (function(a){a.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var c=this.options,b=c.accept;this.isover=0;this.isout=1;this.accept=a.isFunction(b)?b:function(e){return e.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};a.ui.ddmanager.droppables[c.scope]=a.ui.ddmanager.droppables[c.scope]||[];a.ui.ddmanager.droppables[c.scope].push(this);(c.addClasses&&this.element.addClass("ui-droppable"))},destroy:function(){var b=a.ui.ddmanager.droppables[this.options.scope];for(var c=0;c<b.length;c++){if(b[c]==this){b.splice(c,1)}}this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(b,c){if(b=="accept"){this.accept=a.isFunction(c)?c:function(e){return e.is(c)}}a.Widget.prototype._setOption.apply(this,arguments)},_activate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.addClass(this.options.activeClass)}(b&&this._trigger("activate",c,this.ui(b)))},_deactivate:function(c){var b=a.ui.ddmanager.current;if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}(b&&this._trigger("deactivate",c,this.ui(b)))},_over:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.addClass(this.options.hoverClass)}this._trigger("over",c,this.ui(b))}},_out:function(c){var b=a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return}if(this.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("out",c,this.ui(b))}},_drop:function(c,d){var b=d||a.ui.ddmanager.current;if(!b||(b.currentItem||b.element)[0]==this.element[0]){return false}var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var f=a.data(this,"droppable");if(f.options.greedy&&!f.options.disabled&&f.options.scope==b.options.scope&&f.accept.call(f.element[0],(b.currentItem||b.element))&&a.ui.intersect(b,a.extend(f,{offset:f.element.offset()}),f.options.tolerance)){e=true;return false}});if(e){return false}if(this.accept.call(this.element[0],(b.currentItem||b.element))){if(this.options.activeClass){this.element.removeClass(this.options.activeClass)}if(this.options.hoverClass){this.element.removeClass(this.options.hoverClass)}this._trigger("drop",c,this.ui(b));return this.element}return false},ui:function(b){return{draggable:(b.currentItem||b.element),helper:b.helper,position:b.position,offset:b.positionAbs}}});a.extend(a.ui.droppable,{version:"1.8"});a.ui.intersect=function(q,j,o){if(!j.offset){return false}var e=(q.positionAbs||q.position.absolute).left,d=e+q.helperProportions.width,n=(q.positionAbs||q.position.absolute).top,m=n+q.helperProportions.height;var g=j.offset.left,c=g+j.proportions.width,p=j.offset.top,k=p+j.proportions.height;switch(o){case"fit":return(g<e&&d<c&&p<n&&m<k);break;case"intersect":return(g<e+(q.helperProportions.width/2)&&d-(q.helperProportions.width/2)<c&&p<n+(q.helperProportions.height/2)&&m-(q.helperProportions.height/2)<k);break;case"pointer":var h=((q.positionAbs||q.position.absolute).left+(q.clickOffset||q.offset.click).left),i=((q.positionAbs||q.position.absolute).top+(q.clickOffset||q.offset.click).top),f=a.ui.isOver(i,h,p,g,j.proportions.height,j.proportions.width);return f;break;case"touch":return((n>=p&&n<=k)||(m>=p&&m<=k)||(n<p&&m>k))&&((e>=g&&e<=c)||(d>=g&&d<=c)||(e<g&&d>c));break;default:return false;break}};a.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(e,g){var b=a.ui.ddmanager.droppables[e.options.scope]||[];var f=g?g.type:null;var h=(e.currentItem||e.element).find(":data(droppable)").andSelf();droppablesLoop:for(var d=0;d<b.length;d++){if(b[d].options.disabled||(e&&!b[d].accept.call(b[d].element[0],(e.currentItem||e.element)))){continue}for(var c=0;c<h.length;c++){if(h[c]==b[d].element[0]){b[d].proportions.height=0;continue droppablesLoop}}b[d].visible=b[d].element.css("display")!="none";if(!b[d].visible){continue}b[d].offset=b[d].element.offset();b[d].proportions={width:b[d].element[0].offsetWidth,height:b[d].element[0].offsetHeight};if(f=="mousedown"){b[d]._activate.call(b[d],g)}}},drop:function(b,c){var d=false;a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(!this.options){return}if(!this.options.disabled&&this.visible&&a.ui.intersect(b,this,this.options.tolerance)){d=d||this._drop.call(this,c)}if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],(b.currentItem||b.element))){this.isout=1;this.isover=0;this._deactivate.call(this,c)}});return d},drag:function(b,c){if(b.options.refreshPositions){a.ui.ddmanager.prepareOffsets(b,c)}a.each(a.ui.ddmanager.droppables[b.options.scope]||[],function(){if(this.options.disabled||this.greedyChild||!this.visible){return}var e=a.ui.intersect(b,this,this.options.tolerance);var g=!e&&this.isover==1?"isout":(e&&this.isover==0?"isover":null);if(!g){return}var f;if(this.options.greedy){var d=this.element.parents(":data(droppable):eq(0)");if(d.length){f=a.data(d[0],"droppable");f.greedyChild=(g=="isover"?1:0)}}if(f&&g=="isover"){f.isover=0;f.isout=1;f._out.call(f,c)}this[g]=1;this[g=="isout"?"isover":"isout"]=0;this[g=="isover"?"_over":"_out"].call(this,c);if(f&&g=="isout"){f.isout=0;f.isover=1;f._over.call(f,c)}})}}})(jQuery);;/*
+ * jQuery UI Resizable 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Resizables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */ (function(c){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.after(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement);return this},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return !this.options.disabled&&f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8"});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),h=d.options;var g=function(i){c(i).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(h.alsoResize)=="object"&&!h.alsoResize.parentNode){if(h.alsoResize.length){h.alsoResize=h.alsoResize[0];g(h.alsoResize)}else{c.each(h.alsoResize,function(i,j){g(i)})}}else{g(h.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/*
+ * jQuery UI Selectable 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Selectables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */ (function(a){a.widget("ui.selectable",a.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var b=this;this.element.addClass("ui-selectable");this.dragged=false;var c;this.refresh=function(){c=a(b.options.filter,b.element[0]);c.each(function(){var d=a(this);var e=d.offset();a.data(this,"selectable-item",{element:this,$element:d,left:e.left,top:e.top,right:e.left+d.outerWidth(),bottom:e.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=c.addClass("ui-selectee");this._mouseInit();this.helper=a(document.createElement("div")).css({border:"1px dotted black"}).addClass("ui-selectable-helper")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(d){var b=this;this.opos=[d.pageX,d.pageY];if(this.options.disabled){return}var c=this.options;this.selectees=a(c.filter,this.element[0]);this._trigger("start",d);a(c.appendTo).append(this.helper);this.helper.css({"z-index":100,position:"absolute",left:d.clientX,top:d.clientY,width:0,height:0});if(c.autoRefresh){this.refresh()}this.selectees.filter(".ui-selected").each(function(){var e=a.data(this,"selectable-item");e.startselected=true;if(!d.metaKey){e.$element.removeClass("ui-selected");e.selected=false;e.$element.addClass("ui-unselecting");e.unselecting=true;b._trigger("unselecting",d,{unselecting:e.element})}});a(d.target).parents().andSelf().each(function(){var e=a.data(this,"selectable-item");if(e){e.$element.removeClass("ui-unselecting").addClass("ui-selecting");e.unselecting=false;e.selecting=true;e.selected=true;b._trigger("selecting",d,{selecting:e.element});return false}})},_mouseDrag:function(i){var c=this;this.dragged=true;if(this.options.disabled){return}var e=this.options;var d=this.opos[0],h=this.opos[1],b=i.pageX,g=i.pageY;if(d>b){var f=b;b=d;d=f}if(h>g){var f=g;g=h;h=f}this.helper.css({left:d,top:h,width:b-d,height:g-h});this.selectees.each(function(){var j=a.data(this,"selectable-item");if(!j||j.element==c.element[0]){return}var k=false;if(e.tolerance=="touch"){k=(!(j.left>b||j.right<d||j.top>g||j.bottom<h))}else{if(e.tolerance=="fit"){k=(j.left>d&&j.right<b&&j.top>h&&j.bottom<g)}}if(k){if(j.selected){j.$element.removeClass("ui-selected");j.selected=false}if(j.unselecting){j.$element.removeClass("ui-unselecting");j.unselecting=false}if(!j.selecting){j.$element.addClass("ui-selecting");j.selecting=true;c._trigger("selecting",i,{selecting:j.element})}}else{if(j.selecting){if(i.metaKey&&j.startselected){j.$element.removeClass("ui-selecting");j.selecting=false;j.$element.addClass("ui-selected");j.selected=true}else{j.$element.removeClass("ui-selecting");j.selecting=false;if(j.startselected){j.$element.addClass("ui-unselecting");j.unselecting=true}c._trigger("unselecting",i,{unselecting:j.element})}}if(j.selected){if(!i.metaKey&&!j.startselected){j.$element.removeClass("ui-selected");j.selected=false;j.$element.addClass("ui-unselecting");j.unselecting=true;c._trigger("unselecting",i,{unselecting:j.element})}}}});return false},_mouseStop:function(d){var b=this;this.dragged=false;var c=this.options;a(".ui-unselecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-unselecting");e.unselecting=false;e.startselected=false;b._trigger("unselected",d,{unselected:e.element})});a(".ui-selecting",this.element[0]).each(function(){var e=a.data(this,"selectable-item");e.$element.removeClass("ui-selecting").addClass("ui-selected");e.selecting=false;e.selected=true;e.startselected=true;b._trigger("selected",d,{selected:e.element})});this._trigger("stop",d);this.helper.remove();return false}});a.extend(a.ui.selectable,{version:"1.8"})})(jQuery);;/*
+ * jQuery UI Sortable 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Sortables
+ *
+ * Depends:
+ * jquery.ui.core.js
+ * jquery.ui.mouse.js
+ * jquery.ui.widget.js
+ */ (function(a){a.widget("ui.sortable",a.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000},_create:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}return this},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;(g.cursorAt&&this._adjustOffsetFromHelper(g.cursorAt));this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions();return this},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}return this},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(b){var d=null,k=null;for(var f=this.containers.length-1;f>=0;f--){if(a.ui.contains(this.currentItem[0],this.containers[f].element[0])){continue}if(this._intersectsWith(this.containers[f].containerCache)){if(d&&a.ui.contains(this.containers[f].element[0],d.element[0])){continue}d=this.containers[f];k=f}else{if(this.containers[f].containerCache.over){this.containers[f]._trigger("out",b,this._uiHash(this));this.containers[f].containerCache.over=0}}}if(!d){return}if(this.containers.length===1){this.containers[k]._trigger("over",b,this._uiHash(this));this.containers[k].containerCache.over=1}else{if(this.currentContainer!=this.containers[k]){var h=10000;var g=null;var c=this.positionAbs[this.containers[k].floating?"left":"top"];for(var e=this.items.length-1;e>=0;e--){if(!a.ui.contains(this.containers[k].element[0],this.items[e].item[0])){continue}var l=this.items[e][this.containers[k].floating?"left":"top"];if(Math.abs(l-c)<h){h=Math.abs(l-c);g=this.items[e]}}if(!g&&!this.options.dropOnEmpty){return}this.currentContainer=this.containers[k];g?this._rearrange(b,g,null,true):this._rearrange(b,null,this.containers[k].element,true);this._trigger("change",b,this._uiHash());this.containers[k]._trigger("change",b,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[k]._trigger("over",b,this._uiHash(this));this.containers[k].containerCache.over=1}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(typeof b=="string"){b=b.split(" ")}if(a.isArray(b)){b={left:+b[0],top:+b[1]||0}}if("left" in b){this.offset.click.left=b.left+this.margins.left}if("right" in b){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if("top" in b){this.offset.click.top=b.top+this.margins.top}if("bottom" in b){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.Widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}});a.extend(a.ui.sortable,{version:"1.8"})})(jQuery);;/*
+ * jQuery UI Effects 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/
+ */ jQuery.effects||(function(g){g.effects={};g.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(l,k){g.fx.step[k]=function(m){if(!m.colorInit){m.start=j(m.elem,k);m.end=i(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt((m.pos*(m.end[0]-m.start[0]))+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt((m.pos*(m.end[1]-m.start[1]))+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt((m.pos*(m.end[2]-m.start[2]))+m.start[2],10),255),0)+")"}});function i(l){var k;if(l&&l.constructor==Array&&l.length==3){return l}if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(l)){return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)]}if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(l)){return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55]}if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(l)){return[parseInt(k[1],16),parseInt(k[2],16),parseInt(k[3],16)]}if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(l)){return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)]}if(k=/rgba\(0, 0, 0, 0\)/.exec(l)){return a.transparent}return a[g.trim(l).toLowerCase()]}function j(m,k){var l;do{l=g.curCSS(m,k);if(l!=""&&l!="transparent"||g.nodeName(m,"body")){break}k="backgroundColor"}while(m=m.parentNode);return i(l)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};var e=["add","remove","toggle"],c={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};function f(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,o={},l,m;if(n&&n.length&&n[0]&&n[n[0]]){var k=n.length;while(k--){l=n[k];if(typeof n[l]=="string"){m=l.replace(/\-(\w)/g,function(p,q){return q.toUpperCase()});o[m]=n[l]}}}else{for(l in n){if(typeof n[l]==="string"){o[l]=n[l]}}}return o}function b(l){var k,m;for(k in l){m=l[k];if(m==null||g.isFunction(m)||k in c||(/scrollbar/).test(k)||(!(/color/i).test(k)&&isNaN(parseFloat(m)))){delete l[k]}}return l}function h(k,m){var n={_:0},l;for(l in m){if(k[l]!=m[l]){n[l]=m[l]}}return n}g.effects.animateClass=function(k,l,n,m){if(g.isFunction(n)){m=n;n=null}return this.each(function(){var r=g(this),o=r.attr("style")||" ",s=b(f.call(this)),q,p=r.attr("className");g.each(e,function(t,u){if(k[u]){r[u+"Class"](k[u])}});q=b(f.call(this));r.attr("className",p);r.animate(h(s,q),l,n,function(){g.each(e,function(t,u){if(k[u]){r[u+"Class"](k[u])}});if(typeof r.attr("style")=="object"){r.attr("style").cssText="";r.attr("style").cssText=o}else{r.attr("style",o)}if(m){m.apply(this,arguments)}})})};g.fn.extend({_addClass:g.fn.addClass,addClass:function(l,k,n,m){return k?g.effects.animateClass.apply(this,[{add:l},k,n,m]):this._addClass(l)},_removeClass:g.fn.removeClass,removeClass:function(l,k,n,m){return k?g.effects.animateClass.apply(this,[{remove:l},k,n,m]):this._removeClass(l)},_toggleClass:g.fn.toggleClass,toggleClass:function(m,l,k,o,n){if(typeof l=="boolean"||l===undefined){if(!k){return this._toggleClass(m,l)}else{return g.effects.animateClass.apply(this,[(l?{add:m}:{remove:m}),k,o,n])}}else{return g.effects.animateClass.apply(this,[{toggle:m},l,k,o])}},switchClass:function(k,m,l,o,n){return g.effects.animateClass.apply(this,[{add:m,remove:k},l,o,n])}});g.extend(g.effects,{version:"1.8",save:function(l,m){for(var k=0;k<m.length;k++){if(m[k]!==null){l.data("ec.storage."+m[k],l[0].style[m[k]])}}},restore:function(l,m){for(var k=0;k<m.length;k++){if(m[k]!==null){l.css(m[k],l.data("ec.storage."+m[k]))}}},setMode:function(k,l){if(l=="toggle"){l=k.is(":hidden")?"show":"hide"}return l},getBaseline:function(l,m){var n,k;switch(l[0]){case"top":n=0;break;case"middle":n=0.5;break;case"bottom":n=1;break;default:n=l[0]/m.height}switch(l[1]){case"left":k=0;break;case"center":k=0.5;break;case"right":k=1;break;default:k=l[1]/m.width}return{x:k,y:n}},createWrapper:function(k){if(k.parent().is(".ui-effects-wrapper")){return k.parent()}var l={width:k.outerWidth(true),height:k.outerHeight(true),"float":k.css("float")},m=g("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});k.wrap(m);m=k.parent();if(k.css("position")=="static"){m.css({position:"relative"});k.css({position:"relative"})}else{g.extend(l,{position:k.css("position"),zIndex:k.css("z-index")});g.each(["top","left","bottom","right"],function(n,o){l[o]=k.css(o);if(isNaN(parseInt(l[o],10))){l[o]="auto"}});k.css({position:"relative",top:0,left:0})}return m.css(l).show()},removeWrapper:function(k){if(k.parent().is(".ui-effects-wrapper")){return k.parent().replaceWith(k)}return k},setTransition:function(l,n,k,m){m=m||{};g.each(n,function(p,o){unit=l.cssUnit(o);if(unit[0]>0){m[o]=unit[0]*k+unit[1]}});return m}});function d(l,k,m,n){if(typeof l=="object"){n=k;m=null;k=l;l=k.effect}if(g.isFunction(k)){n=k;m=null;k={}}if(g.isFunction(m)){n=m;m=null}if(typeof k=="number"||g.fx.speeds[k]){n=m;m=k;k={}}k=k||{};m=m||k.duration;m=g.fx.off?0:typeof m=="number"?m:g.fx.speeds[m]||g.fx.speeds._default;n=n||k.complete;return[l,k,m,n]}g.fn.extend({effect:function(n,m,p,q){var l=d.apply(this,arguments),o={options:l[1],duration:l[2],callback:l[3]},k=g.effects[n];return k&&!g.fx.off?k.call(this,o):this},_show:g.fn.show,show:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]){return this._show.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="show";return this.effect.apply(this,k)}},_hide:g.fn.hide,hide:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]){return this._hide.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:g.fn.toggle,toggle:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]||typeof l=="boolean"||g.isFunction(l)){return this.__toggle.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(k){var l=this.css(k),m=[];g.each(["em","px","%","pt"],function(n,o){if(l.indexOf(o)>0){m=[parseFloat(l),o]}});return m}});g.easing.jswing=g.easing.swing;g.extend(g.easing,{def:"easeOutQuad",swing:function(l,m,k,o,n){return g.easing[g.easing.def](l,m,k,o,n)},easeInQuad:function(l,m,k,o,n){return o*(m/=n)*m+k},easeOutQuad:function(l,m,k,o,n){return -o*(m/=n)*(m-2)+k},easeInOutQuad:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m+k}return -o/2*((--m)*(m-2)-1)+k},easeInCubic:function(l,m,k,o,n){return o*(m/=n)*m*m+k},easeOutCubic:function(l,m,k,o,n){return o*((m=m/n-1)*m*m+1)+k},easeInOutCubic:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m+k}return o/2*((m-=2)*m*m+2)+k},easeInQuart:function(l,m,k,o,n){return o*(m/=n)*m*m*m+k},easeOutQuart:function(l,m,k,o,n){return -o*((m=m/n-1)*m*m*m-1)+k},easeInOutQuart:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m*m+k}return -o/2*((m-=2)*m*m*m-2)+k},easeInQuint:function(l,m,k,o,n){return o*(m/=n)*m*m*m*m+k},easeOutQuint:function(l,m,k,o,n){return o*((m=m/n-1)*m*m*m*m+1)+k},easeInOutQuint:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m*m*m+k}return o/2*((m-=2)*m*m*m*m+2)+k},easeInSine:function(l,m,k,o,n){return -o*Math.cos(m/n*(Math.PI/2))+o+k},easeOutSine:function(l,m,k,o,n){return o*Math.sin(m/n*(Math.PI/2))+k},easeInOutSine:function(l,m,k,o,n){return -o/2*(Math.cos(Math.PI*m/n)-1)+k},easeInExpo:function(l,m,k,o,n){return(m==0)?k:o*Math.pow(2,10*(m/n-1))+k},easeOutExpo:function(l,m,k,o,n){return(m==n)?k+o:o*(-Math.pow(2,-10*m/n)+1)+k},easeInOutExpo:function(l,m,k,o,n){if(m==0){return k}if(m==n){return k+o}if((m/=n/2)<1){return o/2*Math.pow(2,10*(m-1))+k}return o/2*(-Math.pow(2,-10*--m)+2)+k},easeInCirc:function(l,m,k,o,n){return -o*(Math.sqrt(1-(m/=n)*m)-1)+k},easeOutCirc:function(l,m,k,o,n){return o*Math.sqrt(1-(m=m/n-1)*m)+k},easeInOutCirc:function(l,m,k,o,n){if((m/=n/2)<1){return -o/2*(Math.sqrt(1-m*m)-1)+k}return o/2*(Math.sqrt(1-(m-=2)*m)+1)+k},easeInElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r)==1){return k+u}if(!q){q=r*0.3}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}return -(m*Math.pow(2,10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q))+k},easeOutElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r)==1){return k+u}if(!q){q=r*0.3}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}return m*Math.pow(2,-10*n)*Math.sin((n*r-o)*(2*Math.PI)/q)+u+k},easeInOutElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r/2)==2){return k+u}if(!q){q=r*(0.3*1.5)}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}if(n<1){return -0.5*(m*Math.pow(2,10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q))+k}return m*Math.pow(2,-10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q)*0.5+u+k},easeInBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}return p*(m/=o)*m*((n+1)*m-n)+k},easeOutBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}return p*((m=m/o-1)*m*((n+1)*m+n)+1)+k},easeInOutBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}if((m/=o/2)<1){return p/2*(m*m*(((n*=(1.525))+1)*m-n))+k}return p/2*((m-=2)*m*(((n*=(1.525))+1)*m+n)+2)+k},easeInBounce:function(l,m,k,o,n){return o-g.easing.easeOutBounce(l,n-m,0,o,n)+k},easeOutBounce:function(l,m,k,o,n){if((m/=n)<(1/2.75)){return o*(7.5625*m*m)+k}else{if(m<(2/2.75)){return o*(7.5625*(m-=(1.5/2.75))*m+0.75)+k}else{if(m<(2.5/2.75)){return o*(7.5625*(m-=(2.25/2.75))*m+0.9375)+k}else{return o*(7.5625*(m-=(2.625/2.75))*m+0.984375)+k}}}},easeInOutBounce:function(l,m,k,o,n){if(m<n/2){return g.easing.easeInBounce(l,m*2,0,o,n)*0.5+k}return g.easing.easeOutBounce(l,m*2-n,0,o,n)*0.5+o*0.5+k}})})(jQuery);;/*
+ * jQuery UI Effects Blind 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Blind
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.blind=function(b){return this.queue(function(){var d=a(this),c=["position","top","left"];var h=a.effects.setMode(d,b.options.mode||"hide");var g=b.options.direction||"vertical";a.effects.save(d,c);d.show();var j=a.effects.createWrapper(d).css({overflow:"hidden"});var e=(g=="vertical")?"height":"width";var i=(g=="vertical")?j.height():j.width();if(h=="show"){j.css(e,0)}var f={};f[e]=h=="show"?i:0;j.animate(f,b.duration,b.options.easing,function(){if(h=="hide"){d.hide()}a.effects.restore(d,c);a.effects.removeWrapper(d);if(b.callback){b.callback.apply(d[0],arguments)}d.dequeue()})})}})(jQuery);;/*
+ * jQuery UI Effects Bounce 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Bounce
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.bounce=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"up";var c=b.options.distance||20;var d=b.options.times||5;var g=b.duration||250;if(/show|hide/.test(k)){l.push("opacity")}a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var c=b.options.distance||(f=="top"?e.outerHeight({margin:true})/3:e.outerWidth({margin:true})/3);if(k=="show"){e.css("opacity",0).css(f,p=="pos"?-c:c)}if(k=="hide"){c=c/(d*2)}if(k!="hide"){d--}if(k=="show"){var h={opacity:1};h[f]=(p=="pos"?"+=":"-=")+c;e.animate(h,g/2,b.options.easing);c=c/2;d--}for(var j=0;j<d;j++){var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing);c=(k=="hide")?c*2:c/2}if(k=="hide"){var h={opacity:0};h[f]=(p=="pos"?"-=":"+=")+c;e.animate(h,g/2,b.options.easing,function(){e.hide();a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}else{var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
+ * jQuery UI Effects Clip 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Clip
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.clip=function(b){return this.queue(function(){var f=a(this),j=["position","top","left","height","width"];var i=a.effects.setMode(f,b.options.mode||"hide");var k=b.options.direction||"vertical";a.effects.save(f,j);f.show();var c=a.effects.createWrapper(f).css({overflow:"hidden"});var e=f[0].tagName=="IMG"?c:f;var g={size:(k=="vertical")?"height":"width",position:(k=="vertical")?"top":"left"};var d=(k=="vertical")?e.height():e.width();if(i=="show"){e.css(g.size,0);e.css(g.position,d/2)}var h={};h[g.size]=i=="show"?d:0;h[g.position]=i=="show"?0:d/2;e.animate(h,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){f.hide()}a.effects.restore(f,j);a.effects.removeWrapper(f);if(b.callback){b.callback.apply(f[0],arguments)}f.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Drop 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Drop
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.drop=function(b){return this.queue(function(){var e=a(this),d=["position","top","left","opacity"];var i=a.effects.setMode(e,b.options.mode||"hide");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e);var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true})/2:e.outerWidth({margin:true})/2);if(i=="show"){e.css("opacity",0).css(f,c=="pos"?-j:j)}var g={opacity:i=="show"?1:0};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Explode 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Explode
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.explode=function(b){return this.queue(function(){var k=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;var e=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?(a(this).is(":visible")?"hide":"show"):b.options.mode;var h=a(this).show().css("visibility","hidden");var l=h.offset();l.top-=parseInt(h.css("marginTop"),10)||0;l.left-=parseInt(h.css("marginLeft"),10)||0;var g=h.outerWidth(true);var c=h.outerHeight(true);for(var f=0;f<k;f++){for(var d=0;d<e;d++){h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*
+ * jQuery UI Effects Fold 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Fold
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/*
+ * jQuery UI Effects Highlight 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Highlight
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.highlight=function(b){return this.queue(function(){var d=a(this),c=["backgroundImage","backgroundColor","opacity"],f=a.effects.setMode(d,b.options.mode||"show"),e={backgroundColor:d.css("backgroundColor")};if(f=="hide"){e.opacity=0}a.effects.save(d,c);d.show().css({backgroundImage:"none",backgroundColor:b.options.color||"#ffff99"}).animate(e,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){(f=="hide"&&d.hide());a.effects.restore(d,c);(f=="show"&&!a.support.opacity&&this.style.removeAttribute("filter"));(b.callback&&b.callback.apply(this,arguments));d.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Pulsate 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Pulsate
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this),e=a.effects.setMode(d,b.options.mode||"show");times=((b.options.times||5)*2)-1;duration=b.duration?b.duration/2:a.fx.speeds._default/2,isVisible=d.is(":visible"),animateTo=0;if(!isVisible){d.css("opacity",0).show();animateTo=1}if((e=="hide"&&isVisible)||(e=="show"&&!isVisible)){times--}for(var c=0;c<times;c++){d.animate({opacity:animateTo},duration,b.options.easing);animateTo=(animateTo+1)%2}d.animate({opacity:animateTo},duration,b.options.easing,function(){if(animateTo==0){d.hide()}(b.callback&&b.callback.apply(this,arguments))});d.queue("fx",function(){d.dequeue()}).dequeue()})}})(jQuery);;/*
+ * jQuery UI Effects Scale 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Scale
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.puff=function(b){return this.queue(function(){var f=a(this),g=a.effects.setMode(f,b.options.mode||"hide"),e=parseInt(b.options.percent,10)||150,d=e/100,c={height:f.height(),width:f.width()};a.extend(b.options,{fade:true,mode:g,percent:g=="hide"?e:100,from:g=="hide"?c:{height:c.height*d,width:c.width*d}});f.effect("scale",b.options,b.duration,b.callback);f.dequeue()})};a.effects.scale=function(b){return this.queue(function(){var g=a(this);var d=a.extend(true,{},b.options);var j=a.effects.setMode(g,b.options.mode||"effect");var h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:(j=="hide"?0:100));var i=b.options.direction||"both";var c=b.options.origin;if(j!="effect"){d.origin=c||["middle","center"];d.restore=true}var f={height:g.height(),width:g.width()};g.from=b.options.from||(j=="show"?{height:0,width:0}:f);var e={y:i!="horizontal"?(h/100):1,x:i!="vertical"?(h/100):1};g.to={height:f.height*e.y,width:f.width*e.x};if(b.options.fade){if(j=="show"){g.from.opacity=0;g.to.opacity=1}if(j=="hide"){g.from.opacity=1;g.to.opacity=0}}d.from=g.from;d.to=g.to;d.mode=j;g.effect("size",d,b.duration,b.callback);g.dequeue()})};a.effects.size=function(b){return this.queue(function(){var c=a(this),n=["position","top","left","width","height","overflow","opacity"];var m=["position","top","left","overflow","opacity"];var j=["width","height","overflow"];var p=["fontSize"];var k=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];var f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"];var g=a.effects.setMode(c,b.options.mode||"effect");var i=b.options.restore||false;var e=b.options.scale||"both";var o=b.options.origin;var d={height:c.height(),width:c.width()};c.from=b.options.from||d;c.to=b.options.to||d;if(o){var h=a.effects.getBaseline(o,d);c.from.top=(d.height-c.from.height)*h.y;c.from.left=(d.width-c.from.width)*h.x;c.to.top=(d.height-c.to.height)*h.y;c.to.left=(d.width-c.to.width)*h.x}var l={from:{y:c.from.height/d.height,x:c.from.width/d.width},to:{y:c.to.height/d.height,x:c.to.width/d.width}};if(e=="box"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(k);c.from=a.effects.setTransition(c,k,l.from.y,c.from);c.to=a.effects.setTransition(c,k,l.to.y,c.to)}if(l.from.x!=l.to.x){n=n.concat(f);c.from=a.effects.setTransition(c,f,l.from.x,c.from);c.to=a.effects.setTransition(c,f,l.to.x,c.to)}}if(e=="content"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(p);c.from=a.effects.setTransition(c,p,l.from.y,c.from);c.to=a.effects.setTransition(c,p,l.to.y,c.to)}}a.effects.save(c,i?n:m);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(e=="content"||e=="both"){k=k.concat(["marginTop","marginBottom"]).concat(p);f=f.concat(["marginLeft","marginRight"]);j=n.concat(k).concat(f);c.find("*[width]").each(function(){child=a(this);if(i){a.effects.save(child,j)}var q={height:child.height(),width:child.width()};child.from={height:q.height*l.from.y,width:q.width*l.from.x};child.to={height:q.height*l.to.y,width:q.width*l.to.x};if(l.from.y!=l.to.y){child.from=a.effects.setTransition(child,k,l.from.y,child.from);child.to=a.effects.setTransition(child,k,l.to.y,child.to)}if(l.from.x!=l.to.x){child.from=a.effects.setTransition(child,f,l.from.x,child.from);child.to=a.effects.setTransition(child,f,l.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){if(i){a.effects.restore(child,j)}})})}c.animate(c.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(c.to.opacity===0){c.css("opacity",c.from.opacity)}if(g=="hide"){c.hide()}a.effects.restore(c,i?n:m);a.effects.removeWrapper(c);if(b.callback){b.callback.apply(this,arguments)}c.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Shake 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Shake
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.shake=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"left";var c=b.options.distance||20;var d=b.options.times||3;var g=b.duration||b.options.duration||140;a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var h={},o={},m={};h[f]=(p=="pos"?"-=":"+=")+c;o[f]=(p=="pos"?"+=":"-=")+c*2;m[f]=(p=="pos"?"-=":"+=")+c*2;e.animate(h,g,b.options.easing);for(var j=1;j<d;j++){e.animate(o,g,b.options.easing).animate(m,g,b.options.easing)}e.animate(o,g,b.options.easing).animate(h,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}});e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
+ * jQuery UI Effects Slide 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Slide
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.slide=function(b){return this.queue(function(){var e=a(this),d=["position","top","left"];var i=a.effects.setMode(e,b.options.mode||"show");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e).css({overflow:"hidden"});var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true}):e.outerWidth({margin:true}));if(i=="show"){e.css(f,c=="pos"?-j:j)}var g={};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
+ * jQuery UI Effects Transfer 1.8
+ *
+ * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * http://docs.jquery.com/UI/Effects/Transfer
+ *
+ * Depends:
+ * jquery.effects.core.js
+ */ (function(a){a.effects.transfer=function(b){return this.queue(function(){var f=a(this),h=a(b.options.to),e=h.offset(),g={top:e.top,left:e.left,height:h.innerHeight(),width:h.innerWidth()},d=f.offset(),c=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);;
+ /*
+ * jQuery UI Datepicker 1.8.4
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Datepicker
+ *
+ * Depends:
+ * jquery.ui.core.js
+ */
+ (function(d,G){function L(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
+ "ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
+ "Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
+ minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}function E(a,b){d.extend(a,
+ b);for(var c in b)if(b[c]==null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.4"}});var y=(new Date).getTime();d.extend(L.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=
+ f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}},
+ _connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&
+ b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==
+ ""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,
+ c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),
+ true);this._updateDatepicker(b);this._updateAlternate(b)}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});b=b&&b.constructor==
+ Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);
+ d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},
+ _enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=
+ d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
+ for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
+ this._hideDatepicker();var h=this._getDateDatepicker(a,true);E(e.settings,f);this._attachments(d(a),e);this._autoSize(e);this._setDateDatepicker(a,h);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&
+ !a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass,b.dpDiv).add(d("td."+d.datepicker._currentClass,b.dpDiv));c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();
+ return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||
+ a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,
+ a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));
+ var c=String.fromCharCode(a.charCode==G?a.keyCode:a.charCode);return a.ctrlKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||
+ a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);
+ d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&
+ d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=d.datepicker._getBorders(b.dpDiv);b.dpDiv.find("iframe.ui-datepicker-cover").css({left:-i[0],top:-i[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,
+ h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a)).find("iframe.ui-datepicker-cover").css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover");
+ this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");
+ this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);var e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
+ a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus()},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),
+ k=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>k&&k>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"];
+ a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():
+ "",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&
+ !a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;
+ b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=
+ this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=
+ d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,
+ "altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b==
+ "object"?b.toString():b+"";if(b=="")return null;for(var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,k=c=-1,l=-1,u=-1,j=false,o=function(p){(p=z+1<a.length&&a.charAt(z+1)==p)&&z++;return p},m=function(p){o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"?4:p=="o"?
+ 3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,w,H){p=o(p)?H:w;for(w=0;w<p.length;w++)if(b.substr(s,p[w].length)==p[w]){s+=p[w].length;return w+1}throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(z))throw"Unexpected literal at position "+s;s++},s=0,z=0;z<a.length;z++)if(j)if(a.charAt(z)=="'"&&!o("'"))j=false;else r();else switch(a.charAt(z)){case "d":l=m("d");break;case "D":n("D",f,h);break;
+ case "o":u=m("o");break;case "m":k=m("m");break;case "M":k=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();k=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();k=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else j=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){k=1;l=u;do{e=this._getDaysInMonth(c,
+ k-1);if(l<=e)break;k++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,k-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=k||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";
+ var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=j+1<a.length&&a.charAt(j+1)==o)&&j++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},k=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var j=0;j<a.length;j++)if(u)if(a.charAt(j)=="'"&&!i("'"))u=false;else l+=a.charAt(j);
+ else switch(a.charAt(j)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=k("D",b.getDay(),e,f);break;case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=k("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(j)}return l},
+ _possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==G?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=
+ a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,
+ this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,k=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,j=u.exec(h);j;){switch(j[2]||"d"){case "d":case "D":g+=parseInt(j[1],
+ 10);break;case "w":case "W":g+=parseInt(j[1],10)*7;break;case "m":case "M":l+=parseInt(j[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(k,l));break;case "y":case "Y":k+=parseInt(j[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(k,l));break}j=u.exec(h)}return new Date(k,l,g)};if(b=(b=b==null?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):b)&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;
+ a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||
+ a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),k=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?
+ new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),j=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=j&&n<j?j:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-k,1)),this._getFormatConfig(a));
+ n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', -"+k+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,
+ g+k,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', +"+k+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";k=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&
+ a.currentDay?u:b;k=!h?k:this.formatDate(k,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+y+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
+ y+".datepicker._gotoToday('#"+a.id+"');\">"+k+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;k=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),w=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var M=this._getDefaultDate(a),I="",C=0;C<i[0];C++){for(var N=
+ "",D=0;D<i[1];D++){var J=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",x="";if(l){x+='<div class="ui-datepicker-group';if(i[1]>1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?
+ f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,j,o,C>0||D>0,z,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var A=k?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;A+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}x+=A+"</tr></thead><tbody>";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
+ A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O<A;O++){x+="<tr>";var P=!k?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var F=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,K=B&&!H||!F[0]||j&&q<j||o&&q>o;P+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(B?" ui-datepicker-other-month":"")+(q.getTime()==J.getTime()&&g==a.selectedMonth&&
+ a._keyEvent||M.getTime()==q.getTime()&&M.getTime()==J.getTime()?" "+this._dayOverClass:"")+(K?" "+this._unselectableClass+" ui-state-disabled":"")+(B&&!w?"":" "+F[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!B||w)&&F[2]?' title="'+F[2]+'"':"")+(K?"":' onclick="DP_jQuery_'+y+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(B&&!w?"&#xa0;":K?'<span class="ui-state-default">'+q.getDate()+
+ "</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==J.getTime()?" ui-state-active":"")+(B?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=P+"</tr>"}g++;if(g>11){g=0;m++}x+="</tbody></table>"+(l?"</div>"+(i[0]>0&&D==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");N+=x}I+=N}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
+ "");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var k=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),j='<div class="ui-datepicker-title">',o="";if(h||!k)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+
+ a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(j+=o+(h||!(k&&l)?"&#xa0;":""));if(h||!l)j+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,
+ i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(j+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)j+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";j+="</select>"}j+=this._get(a,"yearSuffix");if(u)j+=(h||!(k&&l)?"&#xa0;":"")+o;j+="</div>";return j},_adjustInstDate:function(a,b,c){var e=
+ a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,
+ "onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
+ c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
+ "dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
+ function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));
+ return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new L;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.4";window["DP_jQuery_"+y]=d})(jQuery);
+ ;
+
public/javascripts/cms/jquery.js +154 -0
@@ @@ -0,0 +1,154 @@
+ /*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+ (function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+ e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+ j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
+ "&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
+ true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+ Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+ (d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+ a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+ "find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+ function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
+ c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
+ L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
+ "isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
+ a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
+ d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
+ a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
+ !c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
+ true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+ var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+ parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+ false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+ s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+ applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+ else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+ a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
+ w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
+ cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
+ i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
+ " ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
+ this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
+ e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
+ c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
+ a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
+ function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
+ k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
+ C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
+ null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
+ e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
+ f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
+ if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
+ fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
+ d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
+ "events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
+ a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
+ isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
+ {setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
+ if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
+ e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
+ "_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
+ d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
+ !a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
+ toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
+ u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
+ function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
+ if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
+ e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
+ t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
+ g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
+ for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
+ 1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
+ CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
+ relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
+ l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
+ h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
+ CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
+ g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
+ text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
+ setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
+ h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
+ m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
+ "="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
+ h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
+ !h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
+ h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
+ q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
+ if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
+ (function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
+ function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
+ gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
+ c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
+ {},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
+ "string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
+ d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
+ a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
+ 1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
+ a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
+ c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
+ wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
+ prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
+ this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
+ return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
+ ""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
+ this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
+ u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
+ 1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
+ return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
+ ""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
+ c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
+ c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
+ function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
+ Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
+ "border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
+ a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
+ a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
+ "string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
+ serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
+ function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
+ global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
+ e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
+ "&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
+ false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
+ false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
+ c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
+ d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
+ g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
+ 1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
+ "json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
+ if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
+ this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
+ "olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
+ animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
+ j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
+ this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
+ "number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
+ c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
+ this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
+ this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
+ e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
+ c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
+ function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
+ this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
+ k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
+ f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
+ a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
+ c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
+ d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
+ f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
+ "pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
+ e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
public/javascripts/cms/rails.js +132 -0
@@ @@ -0,0 +1,132 @@
+ jQuery(function ($) {
+ var csrf_token = $('meta[name=csrf-token]').attr('content'),
+ csrf_param = $('meta[name=csrf-param]').attr('content');
+
+ $.fn.extend({
+ /**
+ * Triggers a custom event on an element and returns the event result
+ * this is used to get around not being able to ensure callbacks are placed
+ * at the end of the chain.
+ *
+ * TODO: deprecate with jQuery 1.4.2 release, in favor of subscribing to our
+ * own events and placing ourselves at the end of the chain.
+ */
+ triggerAndReturn: function (name, data) {
+ var event = new $.Event(name);
+ this.trigger(event, data);
+
+ return event.result !== false;
+ },
+
+ /**
+ * Handles execution of remote calls firing overridable events along the way
+ */
+ callRemote: function () {
+ var el = this,
+ method = el.attr('method') || el.attr('data-method') || 'GET',
+ url = el.attr('action') || el.attr('href'),
+ dataType = el.attr('data-type') || 'script';
+
+ if (url === undefined) {
+ throw "No URL specified for remote call (action or href must be present).";
+ } else {
+ if (el.triggerAndReturn('ajax:before')) {
+ var data = el.is('form') ? el.serializeArray() : [];
+ $.ajax({
+ url: url,
+ data: data,
+ dataType: dataType,
+ type: method.toUpperCase(),
+ beforeSend: function (xhr) {
+ el.trigger('ajax:loading', xhr);
+ },
+ success: function (data, status, xhr) {
+ el.trigger('ajax:success', [data, status, xhr]);
+ },
+ complete: function (xhr) {
+ el.trigger('ajax:complete', xhr);
+ },
+ error: function (xhr, status, error) {
+ el.trigger('ajax:failure', [xhr, status, error]);
+ }
+ });
+ }
+
+ el.trigger('ajax:after');
+ }
+ }
+ });
+
+ /**
+ * confirmation handler
+ */
+ $('a[data-confirm],input[data-confirm]').live('click', function () {
+ var el = $(this);
+ if (el.triggerAndReturn('confirm')) {
+ if (!confirm(el.attr('data-confirm'))) {
+ return false;
+ }
+ }
+ });
+
+
+ /**
+ * remote handlers
+ */
+ $('form[data-remote]').live('submit', function (e) {
+ $(this).callRemote();
+ e.preventDefault();
+ });
+
+ $('a[data-remote],input[data-remote]').live('click', function (e) {
+ $(this).callRemote();
+ e.preventDefault();
+ });
+
+ $('a[data-method]:not([data-remote])').live('click', function (e){
+ var link = $(this),
+ href = link.attr('href'),
+ method = link.attr('data-method'),
+ form = $('<form method="post" action="'+href+'"></form>'),
+ metadata_input = '<input name="_method" value="'+method+'" type="hidden" />';
+
+ if (csrf_param != null && csrf_token != null) {
+ metadata_input += '<input name="'+csrf_param+'" value="'+csrf_token+'" type="hidden" />';
+ }
+
+ form.hide()
+ .append(metadata_input)
+ .appendTo('body');
+
+ e.preventDefault();
+ form.submit();
+ });
+
+ /**
+ * disable-with handlers
+ */
+ var disable_with_input_selector = 'input[data-disable-with]';
+ var disable_with_form_remote_selector = 'form[data-remote]:has(' + disable_with_input_selector + ')';
+ var disable_with_form_not_remote_selector = 'form:not([data-remote]):has(' + disable_with_input_selector + ')';
+
+ var disable_with_input_function = function () {
+ $(this).find(disable_with_input_selector).each(function () {
+ var input = $(this);
+ input.data('enable-with', input.val())
+ .attr('value', input.attr('data-disable-with'))
+ .attr('disabled', 'disabled');
+ });
+ };
+
+ $(disable_with_form_remote_selector).live('ajax:before', disable_with_input_function);
+ $(disable_with_form_not_remote_selector).live('submit', disable_with_input_function);
+
+ $(disable_with_form_remote_selector).live('ajax:complete', function () {
+ $(this).find(disable_with_input_selector).each(function () {
+ var input = $(this);
+ input.removeAttr('disabled')
+ .val(input.data('enable-with'));
+ });
+ });
+
+ });
public/javascripts/cms/rteditor.js +47 -0
@@ @@ -0,0 +1,47 @@
+ $.CMS.RTEditor = function(){
+
+ $(document).ready(function() {
+ $.CMS.RTEditor.init();
+ }).ajaxSend(function(){
+ $.CMS.RTEditor.reset();
+ }).ajaxSuccess(function(){
+ $.CMS.RTEditor.init();
+ });
+
+ return {
+ init: function(){
+ if($('textarea.richText').length > 0){
+ $.CMS.RTEditor.toolbars();
+ $('textarea.richText').each(function(i){
+ CKEDITOR.replace(this.id, {
+ resize_maxWidth: 668,
+ resize_minWidth: 668,
+ toolbar: 'CmsFull',
+ toolbar_CmsFull: $.CMS.RTEditor.full_toolbars,
+ on: { instanceReady : function( ev ) {
+ this.dataProcessor.writer.indentationChars = ' ';
+ this.dataProcessor.writer.setRules( '#', { breakBeforeClose: true });
+ }
+ }
+ });
+ });
+ }
+ },
+
+ toolbars: function() {
+ $.CMS.RTEditor.basic_toolbars = [
+ [ 'Copy','Cut','Paste','PasteText','PasteFromWord', '-', 'Bold','Italic','Underline','Strike','-', 'NumberedList','BulletedList', '-', 'JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock', '-', 'Undo','Redo', '-', 'Link','Unlink','Anchor', '-', 'Table' ]
+ ];
+
+ $.CMS.RTEditor.full_toolbars = $.CMS.RTEditor.basic_toolbars.concat([ '/',
+ ['Subscript','Superscript', '-', 'Source']
+ ]);
+ },
+
+ reset: function(){
+ $.each(CKEDITOR.instances, function(i, v){
+ v.destroy();
+ });
+ }
+ };
+ }();
public/javascripts/jquery.js +0 -154
@@ @@ -1,154 +0,0 @@
- /*!
- * jQuery JavaScript Library v1.4.2
- * http://jquery.com/
- *
- * Copyright 2010, John Resig
- * Dual licensed under the MIT or GPL Version 2 licenses.
- * http://jquery.org/license
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- * Copyright 2010, The Dojo Foundation
- * Released under the MIT, BSD, and GPL Licenses.
- *
- * Date: Sat Feb 13 22:33:48 2010 -0500
- */
- (function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
- e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
- j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
- "&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
- true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
- Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
- (d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
- a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
- "find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
- function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
- c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
- L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
- "isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
- a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
- d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
- a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
- !c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
- true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
- var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
- parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
- false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
- s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
- applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
- else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
- a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
- w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
- cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
- i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
- " ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
- this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
- e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
- c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
- a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
- function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
- k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
- C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
- null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
- e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
- f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
- if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
- fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
- d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
- "events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
- a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
- isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
- {setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
- if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
- e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
- "_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
- d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
- !a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
- toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
- u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
- function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
- if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
- e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
- t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
- g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
- for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
- 1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
- CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
- relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
- l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
- h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
- CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
- g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
- text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
- setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
- h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
- m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
- "="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
- h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
- !h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
- h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
- q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
- if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
- (function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
- function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
- gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
- c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
- {},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
- "string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
- d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
- a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
- 1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
- a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
- c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
- wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
- prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
- this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
- return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
- ""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
- this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
- u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
- 1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
- return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
- ""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
- c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
- c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
- function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
- Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
- "border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
- a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
- a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
- "string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
- serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
- function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
- global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
- e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
- "&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
- false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
- false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
- c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
- d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
- g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
- 1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
- "json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
- if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
- this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
- "olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
- animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
- j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
- this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
- "number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
- c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
- this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
- this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
- e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
- c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
- function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
- this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
- k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
- f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
- a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
- c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
- d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
- f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
- "pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
- e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
public/javascripts/rails.js +0 -132
@@ @@ -1,132 +0,0 @@
- jQuery(function ($) {
- var csrf_token = $('meta[name=csrf-token]').attr('content'),
- csrf_param = $('meta[name=csrf-param]').attr('content');
-
- $.fn.extend({
- /**
- * Triggers a custom event on an element and returns the event result
- * this is used to get around not being able to ensure callbacks are placed
- * at the end of the chain.
- *
- * TODO: deprecate with jQuery 1.4.2 release, in favor of subscribing to our
- * own events and placing ourselves at the end of the chain.
- */
- triggerAndReturn: function (name, data) {
- var event = new $.Event(name);
- this.trigger(event, data);
-
- return event.result !== false;
- },
-
- /**
- * Handles execution of remote calls firing overridable events along the way
- */
- callRemote: function () {
- var el = this,
- method = el.attr('method') || el.attr('data-method') || 'GET',
- url = el.attr('action') || el.attr('href'),
- dataType = el.attr('data-type') || 'script';
-
- if (url === undefined) {
- throw "No URL specified for remote call (action or href must be present).";
- } else {
- if (el.triggerAndReturn('ajax:before')) {
- var data = el.is('form') ? el.serializeArray() : [];
- $.ajax({
- url: url,
- data: data,
- dataType: dataType,
- type: method.toUpperCase(),
- beforeSend: function (xhr) {
- el.trigger('ajax:loading', xhr);
- },
- success: function (data, status, xhr) {
- el.trigger('ajax:success', [data, status, xhr]);
- },
- complete: function (xhr) {
- el.trigger('ajax:complete', xhr);
- },
- error: function (xhr, status, error) {
- el.trigger('ajax:failure', [xhr, status, error]);
- }
- });
- }
-
- el.trigger('ajax:after');
- }
- }
- });
-
- /**
- * confirmation handler
- */
- $('a[data-confirm],input[data-confirm]').live('click', function () {
- var el = $(this);
- if (el.triggerAndReturn('confirm')) {
- if (!confirm(el.attr('data-confirm'))) {
- return false;
- }
- }
- });
-
-
- /**
- * remote handlers
- */
- $('form[data-remote]').live('submit', function (e) {
- $(this).callRemote();
- e.preventDefault();
- });
-
- $('a[data-remote],input[data-remote]').live('click', function (e) {
- $(this).callRemote();
- e.preventDefault();
- });
-
- $('a[data-method]:not([data-remote])').live('click', function (e){
- var link = $(this),
- href = link.attr('href'),
- method = link.attr('data-method'),
- form = $('<form method="post" action="'+href+'"></form>'),
- metadata_input = '<input name="_method" value="'+method+'" type="hidden" />';
-
- if (csrf_param != null && csrf_token != null) {
- metadata_input += '<input name="'+csrf_param+'" value="'+csrf_token+'" type="hidden" />';
- }
-
- form.hide()
- .append(metadata_input)
- .appendTo('body');
-
- e.preventDefault();
- form.submit();
- });
-
- /**
- * disable-with handlers
- */
- var disable_with_input_selector = 'input[data-disable-with]';
- var disable_with_form_remote_selector = 'form[data-remote]:has(' + disable_with_input_selector + ')';
- var disable_with_form_not_remote_selector = 'form:not([data-remote]):has(' + disable_with_input_selector + ')';
-
- var disable_with_input_function = function () {
- $(this).find(disable_with_input_selector).each(function () {
- var input = $(this);
- input.data('enable-with', input.val())
- .attr('value', input.attr('data-disable-with'))
- .attr('disabled', 'disabled');
- });
- };
-
- $(disable_with_form_remote_selector).live('ajax:before', disable_with_input_function);
- $(disable_with_form_not_remote_selector).live('submit', disable_with_input_function);
-
- $(disable_with_form_remote_selector).live('ajax:complete', function () {
- $(this).find(disable_with_input_selector).each(function () {
- var input = $(this);
- input.removeAttr('disabled')
- .val(input.data('enable-with'));
- });
- });
-
- });
public/stylesheets/cms_master.css +477 -0
@@ @@ -0,0 +1,477 @@
+ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-size: 100%;
+ vertical-align: baseline;
+ background: transparent;
+ font-weight: normal; }
+
+ body {
+ line-height: 1; }
+
+ ol, ul {
+ list-style: none; }
+
+ blockquote, q {
+ quotes: none; }
+
+ blockquote:before, blockquote:after, q:before, q:after {
+ content: "";
+ content: none; }
+
+ *:focus {
+ outline: 0; }
+
+ ins {
+ text-decoration: none; }
+
+ del {
+ text-decoration: line-through; }
+
+ table {
+ border-collapse: collapse;
+ border-spacing: 0; }
+
+ caption, th {
+ text-align: left; }
+
+ body {
+ font: 13px Arial, Verdana, clean, sans-serif;
+ _font-size: small;
+ _font: x-small; }
+
+ table {
+ font-size: inherit; }
+ table th {
+ font-weight: bold; }
+
+ pre, code {
+ font: 115% monospace;
+ _font-size: 100%; }
+
+ p {
+ font: 12px/15px Arial, sans-serif;
+ color: black; }
+
+ h1, h2, h3 {
+ margin: 0.8em 0em; }
+
+ h2 {
+ font: bold 25px/30px Arial, sans-serif;
+ color: black; }
+
+ h3 {
+ font: bold 18px/24px Arial, sans-serif;
+ color: black; }
+
+ a {
+ color: #26a9e0;
+ text-decoration: none; }
+
+ a:hover {
+ text-decoration: none;
+ border-bottom: 1px dotted #26a9e0; }
+
+ a.button {
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ background-color: #7cae00;
+ padding: 5px 8px;
+ font: 10px/20px Arial, sans-serif;
+ color: white;
+ text-transform: uppercase;
+ letter-spacing: 1px; }
+
+ a.button:hover {
+ background-color: #629700;
+ border: 0px; }
+
+ a.big_button {
+ float: left;
+ padding: 0px 15px;
+ font: bold 14px/33px Arial, sans-serif;
+ color: white;
+ -moz-border-radius: 7px;
+ -webkit-border-radius: 7px;
+ background: url("/images/cms/bg-button-green-34.gif") top;
+ display: block;
+ text-decoration: none;
+ height: 34px; }
+
+ a.big_button:hover {
+ background-position: 0 -34px;
+ border: 0px; }
+
+ a.top_button {
+ float: right;
+ padding: 0px 15px;
+ margin-top: -35px;
+ font: bold 14px/33px Arial, sans-serif;
+ color: white;
+ -moz-border-radius: 0px 0px 7px 7px;
+ -webkit-border-bottom-left-radius: 7px;
+ -webkit-border-bottom-right-radius: 7px;
+ background: url("/images/cms/bg-button-green-34.gif") top;
+ display: block;
+ text-decoration: none;
+ height: 34px; }
+
+ a.top_button:hover {
+ background-position: 0 -34px;
+ border: 0px; }
+
+ .filter_form {
+ float: right;
+ margin-bottom: 15px; }
+
+ body {
+ background: white url("/images/cms/background.png") top left repeat-y; }
+ body .content_wrapper {
+ width: 1195px; }
+ body .content_wrapper .left_column {
+ width: 205px;
+ float: left; }
+ body .content_wrapper .left_column .header {
+ text-align: center;
+ width: 150px;
+ margin: 15px auto; }
+ body .content_wrapper .left_column .header h1 {
+ padding: 0px;
+ margin: 0px;
+ display: none; }
+ body .content_wrapper .left_column .header a {
+ font-size: 0px;
+ line-height: 0px;
+ color: white;
+ text-decoration: none; }
+ body .content_wrapper .left_column .header a:hover {
+ border: 0px; }
+ body .content_wrapper .content_column {
+ width: 990px;
+ float: left; }
+ body .content_wrapper .content_column .flash.notice {
+ padding: 6px;
+ background-color: #c7e03d;
+ color: black;
+ margin: 15px 0px;
+ font-size: 14px; }
+ body .content_wrapper .content_column .center_column {
+ padding: 30px;
+ float: left;
+ width: 680px; }
+ body .content_wrapper .content_column .center_column #form_blocks {
+ float: left;
+ width: 100%; }
+ body .content_wrapper .content_column .center_column #form_blocks label {
+ font: bold 16px/24px Arial, sans-serif;
+ color: black;
+ text-transform: none;
+ letter-spacing: 0px; }
+ body .content_wrapper .content_column .right_column {
+ float: right;
+ width: 250px; }
+ body .content_wrapper .content_column .right_column .form_element_group {
+ padding: 30px 20px 20px 20px; }
+ body .content_wrapper .content_column .right_column .form_element_group + .form_element_group {
+ border-top: 3px solid #e6e7e8;
+ padding-top: 13px; }
+ body .content_wrapper .content_column .right_column h2 {
+ font: bold 18px/24px Arial, sans-serif;
+ color: black;
+ margin-bottom: 10px; }
+ body .footer {
+ display: none;
+ padding: 15px;
+ color: white; }
+ body .footer a {
+ color: white; }
+
+ .left_column ul {
+ margin-bottom: 5px;
+ padding: 5px 0px; }
+ .left_column ul li {
+ margin: 6px 0px; }
+ .left_column ul li a {
+ display: block;
+ font: bold 14px/34px Arial, sans-serif;
+ color: #58595b;
+ margin-left: 5px;
+ padding-left: 35px;
+ text-decoration: none; }
+ .left_column ul li a.active, .left_column ul li a:hover {
+ color: white;
+ height: 34px;
+ background-color: #231f20;
+ -moz-border-radius: 7px 0px 0px 7px;
+ -webkit-border-top-left-radius: 7px;
+ -webkit-border-bottom-left-radius: 7px;
+ border: 0px; }
+
+ ul.closed {
+ display: none; }
+
+ ul.tree_structure {
+ background-color: white;
+ padding: 25px;
+ margin-top: 15px;
+ box-shadow: 0px 2px 8px #dddddd;
+ -moz-box-shadow: 0px 2px 8px #dddddd;
+ -webkit-box-shadow: 0px 2px 8px #dddddd; }
+ ul.tree_structure li {
+ margin-left: 25px; }
+ ul.tree_structure li + li, ul.tree_structure li > ul {
+ border-top: 1px solid #eeeeee; }
+ ul.tree_structure a.tree_toggle {
+ margin-top: 5px;
+ width: 20px;
+ height: 28px;
+ float: left;
+ margin-left: -35px;
+ font: bold 14px/25px Arial, sans-serif;
+ background: url(/images/cms/arrow_bottom.gif) right center no-repeat;
+ padding-right: 15px;
+ color: #cccccc;
+ text-align: right;
+ text-decoration: none; }
+ ul.tree_structure a.tree_toggle.closed {
+ background-image: url(/images/cms/arrow_right.gif); }
+ ul.tree_structure a.tree_toggle:hover {
+ border: 0px;
+ color: black; }
+ ul.tree_structure .item {
+ padding: 7px 0px 7px 35px;
+ overflow: hidden; }
+ ul.tree_structure .item .icon {
+ margin-left: -30px;
+ float: left;
+ width: 28px;
+ height: 28px;
+ background: url(/images/cms/icon_draft.gif); }
+ ul.tree_structure .item .icon .dragger {
+ width: 28px;
+ height: 28px;
+ cursor: move; }
+ ul.tree_structure .item .icon .dragger:hover {
+ background: url(/images/cms/icon_move.gif); }
+ ul.tree_structure .item a.label {
+ font-size: 14px;
+ color: black; }
+ ul.tree_structure .item a.label:hover {
+ border-bottom: 1px dotted black; }
+ ul.tree_structure .item .url {
+ font-size: 10px; }
+ ul.tree_structure .item .action_links {
+ visibility: hidden;
+ font-size: 10px; }
+ ul.tree_structure .item table.details {
+ font-size: 10px;
+ margin: 5px 15px;
+ border-left: 3px solid #cccccc; }
+ ul.tree_structure .item table.details th {
+ padding: 0px 5px 0px 10px;
+ font-weight: normal; }
+ ul.tree_structure .item:hover {
+ background-color: #ebf5fc; }
+ ul.tree_structure .item:hover .action_links {
+ visibility: visible; }
+
+ table.formatted {
+ margin-bottom: 15px;
+ background-color: white;
+ border: 10px solid white;
+ box-shadow: 0px 2px 8px #dddddd;
+ -moz-box-shadow: 0px 2px 8px #dddddd;
+ -webkit-box-shadow: 0px 2px 8px #dddddd; }
+ table.formatted th, table.formatted td {
+ padding: 10px;
+ vertical-align: top;
+ white-space: nowrap; }
+ table.formatted th a.label, table.formatted td a.label {
+ color: black;
+ font-size: 14px; }
+ table.formatted th a.slug, table.formatted td a.slug {
+ font-size: 10px; }
+ table.formatted th {
+ background-color: #eeeeee;
+ font-size: 10px;
+ text-transform: uppercase;
+ border-bottom: 1px solid #444444; }
+ table.formatted td.main, table.formatted th.main {
+ width: 100%;
+ white-space: normal; }
+ table.formatted tr {
+ border-bottom: 1px solid #eeeeee; }
+
+ .form_element_group {
+ margin-top: 10px; }
+
+ .form_element {
+ margin-bottom: 10px;
+ overflow: hidden; }
+ .form_element .label {
+ height: 22px;
+ font: 10px/22px Arial, sans-serif;
+ color: black;
+ text-transform: uppercase;
+ letter-spacing: 1px; }
+ .form_element .value .field_with_errors {
+ display: inline; }
+ .form_element .value input, .form_element .value select, .form_element .value textarea {
+ width: 97%;
+ border: 1px solid #cccccc;
+ padding: 3px; }
+ .form_element .value input[type=checkbox] {
+ width: auto;
+ border: 0;
+ float: left;
+ margin: 1px 4px 0px 0px; }
+ .form_element .value .codemirror {
+ background-color: white;
+ border: 1px inset #e5e5e5; }
+ .form_element .value.narrow input, .form_element .value.narrow select, .form_element .value.narrow textarea {
+ width: 80%; }
+ .form_element .fieldWithErrors label {
+ color: #9e0b0f; }
+ .form_element .errors {
+ color: #9e0b0f;
+ margin: 3px 0px; }
+ .form_element .select .label label {
+ line-height: 20px; }
+
+ .form_element.large label {
+ font-size: 16px;
+ line-height: 26px; }
+ .form_element.large .value input {
+ font-size: 16px; }
+
+ .form_element.time_select_element select, .form_element.time_select_element input, .form_element.date_select_element select, .form_element.date_select_element input, .form_element.check_box_element select, .form_element.check_box_element input, .form_element.radio_button_element select, .form_element.radio_button_element input {
+ width: auto; }
+
+ .form_element.submit_element input {
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ background-color: #7cae00;
+ padding: 5px 8px;
+ font: 10px/20px Arial, sans-serif;
+ color: white;
+ text-transform: uppercase;
+ letter-spacing: 1px;
+ border: none; }
+
+ .form_element_group.vertical {
+ float: left;
+ width: 50%; }
+ .form_element_group.vertical .form_element .label {
+ text-align: right;
+ width: 40px;
+ float: left; }
+ .form_element_group.vertical .form_element .value {
+ float: left;
+ width: 80%;
+ margin-left: 10px; }
+ .form_element_group.vertical .form_element .value select {
+ width: 100%; }
+ .form_element_group.vertical .form_element .value input[type=text] {
+ width: 100%; }
+
+ .vertical + .vertical .form_element .label {
+ width: 100px; }
+ .vertical + .vertical .form_element .value {
+ width: 60%; }
+
+ .form_element_group.publishing .form_element .field input {
+ width: 200px; }
+
+ .form_element_group.categories .label {
+ border-bottom: 2px solid white;
+ padding-bottom: 5px;
+ margin-bottom: 5px; }
+ .form_element_group.categories ul#root_categories {
+ margin-bottom: 10px; }
+ .form_element_group.categories ul#root_categories li li {
+ padding-left: 15px; }
+ .form_element_group.categories ul#root_categories input {
+ width: auto; }
+ .form_element_group.categories #new_category input, .form_element_group.categories #new_category select {
+ margin-bottom: 5px; }
+ .form_element_group.categories #new_category input.submit_button {
+ width: auto; }
+
+ .submit {
+ float: left;
+ line-height: 30px; }
+ .submit .submit_element {
+ margin: 5px 5px 5px 0px;
+ float: left; }
+
+ form .errorExplanation {
+ background-color: #9e0b0f;
+ padding: 10px;
+ color: white;
+ font-size: 12px; }
+ form .errorExplanation h2 {
+ margin: 0.1em 0em;
+ font-size: 16px; }
+ form .errorExplanation h2, form .errorExplanation p {
+ color: white; }
+ form .errorExplanation ul {
+ margin: 10px 10px 0px 10px; }
+
+ .form_element_group.advanced {
+ display: none; }
+
+ .pagination {
+ margin-bottom: 15px;
+ float: right; }
+ .pagination a, .pagination span {
+ background: #404040;
+ color: white;
+ padding: 2px 5px;
+ font-size: 11px;
+ -moz-border-radius: 2px; }
+ .pagination a:hover {
+ text-decoration: none; }
+ .pagination span.disabled {
+ display: none; }
+ .pagination span.current {
+ background-color: #999999; }
+
+ #cms_admin_layouts_index .icon {
+ background-image: url(/images/cms/icon_layout.gif); }
+
+ #cms_admin_pages_index .icon.published {
+ background-image: url(/images/cms/icon_regular.gif); }
+
+ #cms_admin_snippets_index .icon {
+ width: 28px;
+ height: 28px;
+ background: url(/images/cms/icon_snippet.gif); }
+
+ #cms_admin_categories_index .icon {
+ background-image: url(/images/cms/icon_category.gif); }
+ #cms_admin_categories_index .categorizations {
+ font-size: 10px; }
+
+ #cms_admin_categories_show h3 {
+ font-size: 12px;
+ text-transform: uppercase;
+ border-bottom: 1px solid #cccccc;
+ color: #cccccc;
+ margin-bottom: 15px;
+ clear: both; }
+ #cms_admin_categories_show .pages {
+ margin-bottom: 15px;
+ overflow: hidden; }
+ #cms_admin_categories_show a.page {
+ width: 150px;
+ float: left;
+ height: 30px;
+ padding-left: 35px;
+ font: 14px/30px Georgia, serif;
+ color: black;
+ margin: 0px 5px 5px 0px;
+ background: url(/images/cms/icon_regular.gif) left center no-repeat; }
+ #cms_admin_categories_show a:hover {
+ border-bottom: 0px; }
public/stylesheets/jquery_ui.css +961 -0
@@ @@ -0,0 +1,961 @@
+ /* jQuery UI CSS Framework @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API */
+ /* Layout helpers
+ *---------------------------------- */
+ .ui-helper-hidden {
+ display: none; }
+
+ .ui-helper-hidden-accessible {
+ position: absolute;
+ left: -99999999px; }
+
+ .ui-helper-reset {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ line-height: 1.3;
+ text-decoration: none;
+ font-size: 100%;
+ list-style: none; }
+
+ .ui-helper-clearfix {
+ display: inline-block; }
+ .ui-helper-clearfix:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden; }
+
+ /* required comment for clearfix to work in Opera \ */
+ * html .ui-helper-clearfix {
+ height: 1%; }
+
+ .ui-helper-clearfix {
+ display: block; }
+
+ /* end clearfix */
+ .ui-helper-zfix {
+ width: 100%;
+ height: 100%;
+ top: 0;
+ left: 0;
+ position: absolute;
+ opacity: 0;
+ filter: Alpha(Opacity=0); }
+
+ /* Interaction Cues
+ *---------------------------------- */
+ .ui-state-disabled {
+ cursor: default !important; }
+
+ /* Icons
+ *---------------------------------- */
+ /* states and images */
+ .ui-icon {
+ display: block;
+ text-indent: -99999px;
+ overflow: hidden;
+ background-repeat: no-repeat; }
+
+ /* Misc visuals
+ *---------------------------------- */
+ /* Overlays */
+ .ui-widget-overlay {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%; }
+
+ /* jQuery UI CSS Framework @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px */
+ /* Component containers
+ *---------------------------------- */
+ .ui-widget {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1.1em; }
+ .ui-widget .ui-widget {
+ font-size: 1em; }
+ .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button {
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif;
+ font-size: 1em; }
+
+ .ui-widget-content {
+ border: 1px solid #dddddd;
+ background: #eeeeee url(/images/cms/jquery_ui/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x;
+ color: #333333; }
+ .ui-widget-content a {
+ color: #333333; }
+
+ .ui-widget-header {
+ border: 1px solid #e78f08;
+ background: #f6a828 url(/images/cms/jquery_ui/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x;
+ color: white;
+ font-weight: bold; }
+ .ui-widget-header a {
+ color: white; }
+
+ /* Interaction states
+ *---------------------------------- */
+ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
+ border: 1px solid #cccccc;
+ background: #f6f6f6 url(/images/cms/jquery_ui/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x;
+ font-weight: bold;
+ color: #1c94c4; }
+
+ .ui-state-default a {
+ color: #1c94c4;
+ text-decoration: none; }
+ .ui-state-default a:link, .ui-state-default a:visited {
+ color: #1c94c4;
+ text-decoration: none; }
+
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus {
+ border: 1px solid #fbcb09;
+ background: #fdf5ce url(/images/cms/jquery_ui/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x;
+ font-weight: bold;
+ color: #c77405; }
+
+ .ui-state-hover a {
+ color: #c77405;
+ text-decoration: none; }
+ .ui-state-hover a:hover {
+ color: #c77405;
+ text-decoration: none; }
+
+ .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active {
+ border: 1px solid #fbd850;
+ background: white url(/images/cms/jquery_ui/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x;
+ font-weight: bold;
+ color: #eb8f00; }
+
+ .ui-state-active a {
+ color: #eb8f00;
+ text-decoration: none; }
+ .ui-state-active a:link, .ui-state-active a:visited {
+ color: #eb8f00;
+ text-decoration: none; }
+
+ .ui-widget :active {
+ outline: none; }
+
+ /* Interaction Cues
+ *---------------------------------- */
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {
+ border: 1px solid #fed22f;
+ background: #ffe45c url(/images/cms/jquery_ui/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x;
+ color: #363636; }
+
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a {
+ color: #363636; }
+
+ .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {
+ border: 1px solid #cd0a0a;
+ background: #b81900 url(/images/cms/jquery_ui/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat;
+ color: white; }
+
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a, .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text {
+ color: white; }
+
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary {
+ font-weight: bold; }
+
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary {
+ opacity: 0.7;
+ filter: Alpha(Opacity=70);
+ font-weight: normal; }
+
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled {
+ opacity: 0.35;
+ filter: Alpha(Opacity=35);
+ background-image: none; }
+
+ /* Icons
+ *---------------------------------- */
+ /* states and images */
+ .ui-icon {
+ width: 16px;
+ height: 16px;
+ background-image: url(/images/cms/jquery_ui/ui-icons_222222_256x240.png); }
+
+ .ui-widget-content .ui-icon {
+ background-image: url(/images/cms/jquery_ui/ui-icons_222222_256x240.png); }
+
+ .ui-widget-header .ui-icon {
+ background-image: url(/images/cms/jquery_ui/ui-icons_ffffff_256x240.png); }
+
+ .ui-state-default .ui-icon, .ui-state-hover .ui-icon, .ui-state-focus .ui-icon, .ui-state-active .ui-icon {
+ background-image: url(/images/cms/jquery_ui/ui-icons_ef8c08_256x240.png); }
+
+ .ui-state-highlight .ui-icon {
+ background-image: url(/images/cms/jquery_ui/ui-icons_228ef1_256x240.png); }
+
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon {
+ background-image: url(/images/cms/jquery_ui/ui-icons_ffd27a_256x240.png); }
+
+ /* positioning */
+ .ui-icon-carat-1-n {
+ background-position: 0 0; }
+
+ .ui-icon-carat-1-ne {
+ background-position: -16px 0; }
+
+ .ui-icon-carat-1-e {
+ background-position: -32px 0; }
+
+ .ui-icon-carat-1-se {
+ background-position: -48px 0; }
+
+ .ui-icon-carat-1-s {
+ background-position: -64px 0; }
+
+ .ui-icon-carat-1-sw {
+ background-position: -80px 0; }
+
+ .ui-icon-carat-1-w {
+ background-position: -96px 0; }
+
+ .ui-icon-carat-1-nw {
+ background-position: -112px 0; }
+
+ .ui-icon-carat-2-n-s {
+ background-position: -128px 0; }
+
+ .ui-icon-carat-2-e-w {
+ background-position: -144px 0; }
+
+ .ui-icon-triangle-1-n {
+ background-position: 0 -16px; }
+
+ .ui-icon-triangle-1-ne {
+ background-position: -16px -16px; }
+
+ .ui-icon-triangle-1-e {
+ background-position: -32px -16px; }
+
+ .ui-icon-triangle-1-se {
+ background-position: -48px -16px; }
+
+ .ui-icon-triangle-1-s {
+ background-position: -64px -16px; }
+
+ .ui-icon-triangle-1-sw {
+ background-position: -80px -16px; }
+
+ .ui-icon-triangle-1-w {
+ background-position: -96px -16px; }
+
+ .ui-icon-triangle-1-nw {
+ background-position: -112px -16px; }
+
+ .ui-icon-triangle-2-n-s {
+ background-position: -128px -16px; }
+
+ .ui-icon-triangle-2-e-w {
+ background-position: -144px -16px; }
+
+ .ui-icon-arrow-1-n {
+ background-position: 0 -32px; }
+
+ .ui-icon-arrow-1-ne {
+ background-position: -16px -32px; }
+
+ .ui-icon-arrow-1-e {
+ background-position: -32px -32px; }
+
+ .ui-icon-arrow-1-se {
+ background-position: -48px -32px; }
+
+ .ui-icon-arrow-1-s {
+ background-position: -64px -32px; }
+
+ .ui-icon-arrow-1-sw {
+ background-position: -80px -32px; }
+
+ .ui-icon-arrow-1-w {
+ background-position: -96px -32px; }
+
+ .ui-icon-arrow-1-nw {
+ background-position: -112px -32px; }
+
+ .ui-icon-arrow-2-n-s {
+ background-position: -128px -32px; }
+
+ .ui-icon-arrow-2-ne-sw {
+ background-position: -144px -32px; }
+
+ .ui-icon-arrow-2-e-w {
+ background-position: -160px -32px; }
+
+ .ui-icon-arrow-2-se-nw {
+ background-position: -176px -32px; }
+
+ .ui-icon-arrowstop-1-n {
+ background-position: -192px -32px; }
+
+ .ui-icon-arrowstop-1-e {
+ background-position: -208px -32px; }
+
+ .ui-icon-arrowstop-1-s {
+ background-position: -224px -32px; }
+
+ .ui-icon-arrowstop-1-w {
+ background-position: -240px -32px; }
+
+ .ui-icon-arrowthick-1-n {
+ background-position: 0 -48px; }
+
+ .ui-icon-arrowthick-1-ne {
+ background-position: -16px -48px; }
+
+ .ui-icon-arrowthick-1-e {
+ background-position: -32px -48px; }
+
+ .ui-icon-arrowthick-1-se {
+ background-position: -48px -48px; }
+
+ .ui-icon-arrowthick-1-s {
+ background-position: -64px -48px; }
+
+ .ui-icon-arrowthick-1-sw {
+ background-position: -80px -48px; }
+
+ .ui-icon-arrowthick-1-w {
+ background-position: -96px -48px; }
+
+ .ui-icon-arrowthick-1-nw {
+ background-position: -112px -48px; }
+
+ .ui-icon-arrowthick-2-n-s {
+ background-position: -128px -48px; }
+
+ .ui-icon-arrowthick-2-ne-sw {
+ background-position: -144px -48px; }
+
+ .ui-icon-arrowthick-2-e-w {
+ background-position: -160px -48px; }
+
+ .ui-icon-arrowthick-2-se-nw {
+ background-position: -176px -48px; }
+
+ .ui-icon-arrowthickstop-1-n {
+ background-position: -192px -48px; }
+
+ .ui-icon-arrowthickstop-1-e {
+ background-position: -208px -48px; }
+
+ .ui-icon-arrowthickstop-1-s {
+ background-position: -224px -48px; }
+
+ .ui-icon-arrowthickstop-1-w {
+ background-position: -240px -48px; }
+
+ .ui-icon-arrowreturnthick-1-w {
+ background-position: 0 -64px; }
+
+ .ui-icon-arrowreturnthick-1-n {
+ background-position: -16px -64px; }
+
+ .ui-icon-arrowreturnthick-1-e {
+ background-position: -32px -64px; }
+
+ .ui-icon-arrowreturnthick-1-s {
+ background-position: -48px -64px; }
+
+ .ui-icon-arrowreturn-1-w {
+ background-position: -64px -64px; }
+
+ .ui-icon-arrowreturn-1-n {
+ background-position: -80px -64px; }
+
+ .ui-icon-arrowreturn-1-e {
+ background-position: -96px -64px; }
+
+ .ui-icon-arrowreturn-1-s {
+ background-position: -112px -64px; }
+
+ .ui-icon-arrowrefresh-1-w {
+ background-position: -128px -64px; }
+
+ .ui-icon-arrowrefresh-1-n {
+ background-position: -144px -64px; }
+
+ .ui-icon-arrowrefresh-1-e {
+ background-position: -160px -64px; }
+
+ .ui-icon-arrowrefresh-1-s {
+ background-position: -176px -64px; }
+
+ .ui-icon-arrow-4 {
+ background-position: 0 -80px; }
+
+ .ui-icon-arrow-4-diag {
+ background-position: -16px -80px; }
+
+ .ui-icon-extlink {
+ background-position: -32px -80px; }
+
+ .ui-icon-newwin {
+ background-position: -48px -80px; }
+
+ .ui-icon-refresh {
+ background-position: -64px -80px; }
+
+ .ui-icon-shuffle {
+ background-position: -80px -80px; }
+
+ .ui-icon-transfer-e-w {
+ background-position: -96px -80px; }
+
+ .ui-icon-transferthick-e-w {
+ background-position: -112px -80px; }
+
+ .ui-icon-folder-collapsed {
+ background-position: 0 -96px; }
+
+ .ui-icon-folder-open {
+ background-position: -16px -96px; }
+
+ .ui-icon-document {
+ background-position: -32px -96px; }
+
+ .ui-icon-document-b {
+ background-position: -48px -96px; }
+
+ .ui-icon-note {
+ background-position: -64px -96px; }
+
+ .ui-icon-mail-closed {
+ background-position: -80px -96px; }
+
+ .ui-icon-mail-open {
+ background-position: -96px -96px; }
+
+ .ui-icon-suitcase {
+ background-position: -112px -96px; }
+
+ .ui-icon-comment {
+ background-position: -128px -96px; }
+
+ .ui-icon-person {
+ background-position: -144px -96px; }
+
+ .ui-icon-print {
+ background-position: -160px -96px; }
+
+ .ui-icon-trash {
+ background-position: -176px -96px; }
+
+ .ui-icon-locked {
+ background-position: -192px -96px; }
+
+ .ui-icon-unlocked {
+ background-position: -208px -96px; }
+
+ .ui-icon-bookmark {
+ background-position: -224px -96px; }
+
+ .ui-icon-tag {
+ background-position: -240px -96px; }
+
+ .ui-icon-home {
+ background-position: 0 -112px; }
+
+ .ui-icon-flag {
+ background-position: -16px -112px; }
+
+ .ui-icon-calendar {
+ background-position: -32px -112px; }
+
+ .ui-icon-cart {
+ background-position: -48px -112px; }
+
+ .ui-icon-pencil {
+ background-position: -64px -112px; }
+
+ .ui-icon-clock {
+ background-position: -80px -112px; }
+
+ .ui-icon-disk {
+ background-position: -96px -112px; }
+
+ .ui-icon-calculator {
+ background-position: -112px -112px; }
+
+ .ui-icon-zoomin {
+ background-position: -128px -112px; }
+
+ .ui-icon-zoomout {
+ background-position: -144px -112px; }
+
+ .ui-icon-search {
+ background-position: -160px -112px; }
+
+ .ui-icon-wrench {
+ background-position: -176px -112px; }
+
+ .ui-icon-gear {
+ background-position: -192px -112px; }
+
+ .ui-icon-heart {
+ background-position: -208px -112px; }
+
+ .ui-icon-star {
+ background-position: -224px -112px; }
+
+ .ui-icon-link {
+ background-position: -240px -112px; }
+
+ .ui-icon-cancel {
+ background-position: 0 -128px; }
+
+ .ui-icon-plus {
+ background-position: -16px -128px; }
+
+ .ui-icon-plusthick {
+ background-position: -32px -128px; }
+
+ .ui-icon-minus {
+ background-position: -48px -128px; }
+
+ .ui-icon-minusthick {
+ background-position: -64px -128px; }
+
+ .ui-icon-close {
+ background-position: -80px -128px; }
+
+ .ui-icon-closethick {
+ background-position: -96px -128px; }
+
+ .ui-icon-key {
+ background-position: -112px -128px; }
+
+ .ui-icon-lightbulb {
+ background-position: -128px -128px; }
+
+ .ui-icon-scissors {
+ background-position: -144px -128px; }
+
+ .ui-icon-clipboard {
+ background-position: -160px -128px; }
+
+ .ui-icon-copy {
+ background-position: -176px -128px; }
+
+ .ui-icon-contact {
+ background-position: -192px -128px; }
+
+ .ui-icon-image {
+ background-position: -208px -128px; }
+
+ .ui-icon-video {
+ background-position: -224px -128px; }
+
+ .ui-icon-script {
+ background-position: -240px -128px; }
+
+ .ui-icon-alert {
+ background-position: 0 -144px; }
+
+ .ui-icon-info {
+ background-position: -16px -144px; }
+
+ .ui-icon-notice {
+ background-position: -32px -144px; }
+
+ .ui-icon-help {
+ background-position: -48px -144px; }
+
+ .ui-icon-check {
+ background-position: -64px -144px; }
+
+ .ui-icon-bullet {
+ background-position: -80px -144px; }
+
+ .ui-icon-radio-off {
+ background-position: -96px -144px; }
+
+ .ui-icon-radio-on {
+ background-position: -112px -144px; }
+
+ .ui-icon-pin-w {
+ background-position: -128px -144px; }
+
+ .ui-icon-pin-s {
+ background-position: -144px -144px; }
+
+ .ui-icon-play {
+ background-position: 0 -160px; }
+
+ .ui-icon-pause {
+ background-position: -16px -160px; }
+
+ .ui-icon-seek-next {
+ background-position: -32px -160px; }
+
+ .ui-icon-seek-prev {
+ background-position: -48px -160px; }
+
+ .ui-icon-seek-end {
+ background-position: -64px -160px; }
+
+ .ui-icon-seek-start, .ui-icon-seek-first {
+ background-position: -80px -160px; }
+
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+ .ui-icon-stop {
+ background-position: -96px -160px; }
+
+ .ui-icon-eject {
+ background-position: -112px -160px; }
+
+ .ui-icon-volume-off {
+ background-position: -128px -160px; }
+
+ .ui-icon-volume-on {
+ background-position: -144px -160px; }
+
+ .ui-icon-power {
+ background-position: 0 -176px; }
+
+ .ui-icon-signal-diag {
+ background-position: -16px -176px; }
+
+ .ui-icon-signal {
+ background-position: -32px -176px; }
+
+ .ui-icon-battery-0 {
+ background-position: -48px -176px; }
+
+ .ui-icon-battery-1 {
+ background-position: -64px -176px; }
+
+ .ui-icon-battery-2 {
+ background-position: -80px -176px; }
+
+ .ui-icon-battery-3 {
+ background-position: -96px -176px; }
+
+ .ui-icon-circle-plus {
+ background-position: 0 -192px; }
+
+ .ui-icon-circle-minus {
+ background-position: -16px -192px; }
+
+ .ui-icon-circle-close {
+ background-position: -32px -192px; }
+
+ .ui-icon-circle-triangle-e {
+ background-position: -48px -192px; }
+
+ .ui-icon-circle-triangle-s {
+ background-position: -64px -192px; }
+
+ .ui-icon-circle-triangle-w {
+ background-position: -80px -192px; }
+
+ .ui-icon-circle-triangle-n {
+ background-position: -96px -192px; }
+
+ .ui-icon-circle-arrow-e {
+ background-position: -112px -192px; }
+
+ .ui-icon-circle-arrow-s {
+ background-position: -128px -192px; }
+
+ .ui-icon-circle-arrow-w {
+ background-position: -144px -192px; }
+
+ .ui-icon-circle-arrow-n {
+ background-position: -160px -192px; }
+
+ .ui-icon-circle-zoomin {
+ background-position: -176px -192px; }
+
+ .ui-icon-circle-zoomout {
+ background-position: -192px -192px; }
+
+ .ui-icon-circle-check {
+ background-position: -208px -192px; }
+
+ .ui-icon-circlesmall-plus {
+ background-position: 0 -208px; }
+
+ .ui-icon-circlesmall-minus {
+ background-position: -16px -208px; }
+
+ .ui-icon-circlesmall-close {
+ background-position: -32px -208px; }
+
+ .ui-icon-squaresmall-plus {
+ background-position: -48px -208px; }
+
+ .ui-icon-squaresmall-minus {
+ background-position: -64px -208px; }
+
+ .ui-icon-squaresmall-close {
+ background-position: -80px -208px; }
+
+ .ui-icon-grip-dotted-vertical {
+ background-position: 0 -224px; }
+
+ .ui-icon-grip-dotted-horizontal {
+ background-position: -16px -224px; }
+
+ .ui-icon-grip-solid-vertical {
+ background-position: -32px -224px; }
+
+ .ui-icon-grip-solid-horizontal {
+ background-position: -48px -224px; }
+
+ .ui-icon-gripsmall-diagonal-se {
+ background-position: -64px -224px; }
+
+ .ui-icon-grip-diagonal-se {
+ background-position: -80px -224px; }
+
+ /* Misc visuals
+ *---------------------------------- */
+ /* Corner radius */
+ .ui-corner-tl {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px; }
+
+ .ui-corner-tr {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px; }
+
+ .ui-corner-bl {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px; }
+
+ .ui-corner-br {
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px; }
+
+ .ui-corner-top {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px; }
+
+ .ui-corner-bottom {
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px; }
+
+ .ui-corner-right {
+ -moz-border-radius-topright: 4px;
+ -webkit-border-top-right-radius: 4px;
+ border-top-right-radius: 4px;
+ -moz-border-radius-bottomright: 4px;
+ -webkit-border-bottom-right-radius: 4px;
+ border-bottom-right-radius: 4px; }
+
+ .ui-corner-left {
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-bottomleft: 4px;
+ -webkit-border-bottom-left-radius: 4px;
+ border-bottom-left-radius: 4px; }
+
+ .ui-corner-all {
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ border-radius: 4px; }
+
+ /* Overlays */
+ .ui-widget-overlay {
+ background: #666666 url(/images/cms/jquery_ui/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat;
+ opacity: 0.5;
+ filter: Alpha(Opacity=50); }
+
+ .ui-widget-shadow {
+ margin: -5px 0 0 -5px;
+ padding: 5px;
+ background: black url(/images/cms/jquery_ui/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x;
+ opacity: 0.2;
+ filter: Alpha(Opacity=20);
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px; }
+
+ /* * jQuery UI Datepicker @VERSION
+ * *
+ * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * * Dual licensed under the MIT or GPL Version 2 licenses.
+ * * http://jquery.org/license
+ * *
+ * * http://docs.jquery.com/UI/Datepicker#theming */
+ .ui-datepicker {
+ width: 17em;
+ padding: 0.2em 0.2em 0; }
+ .ui-datepicker .ui-datepicker-header {
+ position: relative;
+ padding: 0.2em 0; }
+ .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next {
+ position: absolute;
+ top: 2px;
+ width: 1.8em;
+ height: 1.8em; }
+ .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover {
+ top: 1px; }
+ .ui-datepicker .ui-datepicker-prev {
+ left: 2px; }
+ .ui-datepicker .ui-datepicker-next {
+ right: 2px; }
+ .ui-datepicker .ui-datepicker-prev-hover {
+ left: 1px; }
+ .ui-datepicker .ui-datepicker-next-hover {
+ right: 1px; }
+ .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span {
+ display: block;
+ position: absolute;
+ left: 50%;
+ margin-left: -8px;
+ top: 50%;
+ margin-top: -8px; }
+ .ui-datepicker .ui-datepicker-title {
+ margin: 0 2.3em;
+ line-height: 1.8em;
+ text-align: center; }
+ .ui-datepicker .ui-datepicker-title select {
+ font-size: 1em;
+ margin: 1px 0; }
+ .ui-datepicker select.ui-datepicker-month-year {
+ width: 100%; }
+ .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year {
+ width: 49%; }
+ .ui-datepicker table {
+ width: 100%;
+ font-size: 0.9em;
+ border-collapse: collapse;
+ margin: 0 0 0.4em; }
+ .ui-datepicker th {
+ padding: 0.7em 0.3em;
+ text-align: center;
+ font-weight: bold;
+ border: 0; }
+ .ui-datepicker td {
+ border: 0;
+ padding: 1px; }
+ .ui-datepicker td span, .ui-datepicker td a {
+ display: block;
+ padding: 0.2em;
+ text-align: right;
+ text-decoration: none; }
+ .ui-datepicker .ui-datepicker-buttonpane {
+ background-image: none;
+ margin: 0.7em 0 0 0;
+ padding: 0 0.2em;
+ border-left: 0;
+ border-right: 0;
+ border-bottom: 0; }
+ .ui-datepicker .ui-datepicker-buttonpane button {
+ float: right;
+ margin: 0.5em 0.2em 0.4em;
+ cursor: pointer;
+ padding: 0.2em 0.6em 0.3em 0.6em;
+ width: auto;
+ overflow: visible; }
+ .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: left; }
+ .ui-datepicker.ui-datepicker-multi {
+ width: auto; }
+
+ /* with multiple calendars */
+ .ui-datepicker-multi .ui-datepicker-group {
+ float: left; }
+ .ui-datepicker-multi .ui-datepicker-group table {
+ width: 95%;
+ margin: 0 auto 0.4em; }
+
+ .ui-datepicker-multi-2 .ui-datepicker-group {
+ width: 50%; }
+
+ .ui-datepicker-multi-3 .ui-datepicker-group {
+ width: 33.3%; }
+
+ .ui-datepicker-multi-4 .ui-datepicker-group {
+ width: 25%; }
+
+ .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+ border-left-width: 0; }
+ .ui-datepicker-multi .ui-datepicker-buttonpane {
+ clear: left; }
+
+ .ui-datepicker-row-break {
+ clear: both;
+ width: 100%; }
+
+ /* RTL support */
+ .ui-datepicker-rtl {
+ direction: rtl; }
+ .ui-datepicker-rtl .ui-datepicker-prev {
+ right: 2px;
+ left: auto; }
+ .ui-datepicker-rtl .ui-datepicker-next {
+ left: 2px;
+ right: auto; }
+ .ui-datepicker-rtl .ui-datepicker-prev:hover {
+ right: 1px;
+ left: auto; }
+ .ui-datepicker-rtl .ui-datepicker-next:hover {
+ left: 1px;
+ right: auto; }
+ .ui-datepicker-rtl .ui-datepicker-buttonpane {
+ clear: right; }
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button {
+ float: left; }
+ .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current {
+ float: right; }
+ .ui-datepicker-rtl .ui-datepicker-group {
+ float: right; }
+ .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+ border-right-width: 0;
+ border-left-width: 1px; }
+
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
+ .ui-datepicker-cover {
+ display: none;
+ /*sorry for IE5 */
+ display/**/: block;
+ /*sorry for IE5 */
+ position: absolute;
+ /*must have */
+ z-index: -1;
+ /*must have */
+ filter: mask();
+ /*must have */
+ top: -4px;
+ /*must have */
+ left: -4px;
+ /*must have */
+ width: 200px;
+ /*must have */
+ height: 200px;
+ /*must have */ }
public/stylesheets/sass/cms_master.sass +514 -0
@@ @@ -0,0 +1,514 @@
+ // -------------------------------------------------------------------- Reset
+ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td
+ margin: 0
+ padding: 0
+ border: 0
+ outline: 0
+ font-size: 100%
+ vertical-align: baseline
+ background: transparent
+ font-weight: normal
+ body
+ line-height: 1
+ ol, ul
+ list-style: none
+ blockquote, q
+ quotes: none
+ blockquote:before, blockquote:after, q:before, q:after
+ content: ''
+ content: none
+ *:focus
+ outline: 0
+ ins
+ text-decoration: none
+ del
+ text-decoration: line-through
+ table
+ border-collapse: collapse
+ border-spacing: 0
+ caption, th
+ text-align: left
+
+ // --------------------------------------------------------------- Typography
+ body
+ font: 13px Arial, Verdana, clean, sans-serif
+ _font-size: small
+ _font: x-small
+ table
+ font-size: inherit
+ th
+ font-weight: bold
+ pre, code
+ font: 115% monospace
+ _font-size: 100%
+
+ p
+ font: 12px/15px Arial, sans-serif
+ color: #000
+
+ h1, h2, h3
+ margin: 0.8em 0em
+
+ h2
+ font: bold 25px/30px Arial, sans-serif
+ color: #000
+
+ h3
+ font: bold 18px/24px Arial, sans-serif
+ color: #000
+
+ // ------------------------------------------------------------------- Common
+
+ a
+ color: #26A9E0
+ text-decoration: none
+
+ a:hover
+ text-decoration: none
+ border-bottom: 1px dotted #26A9E0
+
+ a.button
+ -moz-border-radius: 5px
+ -webkit-border-radius: 5px
+ background-color: #7CAE00
+ padding: 5px 8px
+ font: 10px/20px Arial, sans-serif
+ color: #fff
+ text-transform: uppercase
+ letter-spacing: 1px
+
+ a.button:hover
+ background-color: #629700
+ border: 0px
+
+ a.big_button
+ float: left
+ padding: 0px 15px
+ font: bold 14px/33px Arial, sans-serif
+ color: #fff
+ -moz-border-radius: 7px
+ -webkit-border-radius: 7px
+ background: url("/images/cms/bg-button-green-34.gif") top
+ display: block
+ text-decoration: none
+ height: 34px
+
+ a.big_button:hover
+ background-position: 0 -34px
+ border: 0px
+
+ a.top_button
+ float: right
+ padding: 0px 15px
+ margin-top: -35px
+ font: bold 14px/33px Arial, sans-serif
+ color: #fff
+ -moz-border-radius: 0px 0px 7px 7px
+ -webkit-border-bottom-left-radius: 7px
+ -webkit-border-bottom-right-radius: 7px
+ background: url("/images/cms/bg-button-green-34.gif") top
+ display: block
+ text-decoration: none
+ height: 34px
+
+ a.top_button:hover
+ background-position: 0 -34px
+ border: 0px
+
+ .filter_form
+ float: right
+ margin-bottom: 15px
+
+ // ---------------------------------------------------------------- Structure
+
+ body
+ background: #fff url('/images/cms/background.png') top left repeat-y
+ .content_wrapper
+ width: 1195px
+ .left_column
+ width: 205px
+ float: left
+ .header
+ text-align: center
+ width: 150px
+ margin: 15px auto
+ h1
+ padding: 0px
+ margin: 0px
+ display: none
+ a
+ font-size: 0px
+ line-height: 0px
+ color: #fff
+ text-decoration: none
+ a:hover
+ border: 0px
+
+ .content_column
+ width: 990px
+ float: left
+ .flash.notice
+ padding: 6px
+ background-color: #c7e03d
+ color: #000
+ margin: 15px 0px
+ font-size: 14px
+ .center_column
+ padding: 30px
+ float: left
+ width: 680px
+ #form_blocks
+ float: left
+ width: 100%
+ label
+ font: bold 16px/24px Arial, sans-serif
+ color: #000
+ text-transform: none
+ letter-spacing: 0px
+ .right_column
+ float: right
+ width: 250px
+ .form_element_group
+ padding: 30px 20px 20px 20px
+ .form_element_group + .form_element_group
+ border-top: 3px solid #E6E7E8
+ padding-top: 13px
+ h2
+ font: bold 18px/24px Arial, sans-serif
+ color: #000
+ margin-bottom: 10px
+
+ .footer
+ display: none
+ padding: 15px
+ color: #fff
+ a
+ color: #fff
+
+ // -------------------------------------------------------------- Left Column
+ .left_column
+ ul
+ margin-bottom: 5px
+ padding: 5px 0px
+ li
+ margin: 6px 0px
+ a
+ display: block
+ font: bold 14px/34px Arial, sans-serif
+ color: #58595B
+ margin-left: 5px
+ padding-left: 35px
+ text-decoration: none
+
+ a.active, a:hover
+ color: #fff
+ height: 34px
+ background-color: #231F20
+ -moz-border-radius: 7px 0px 0px 7px
+ -webkit-border-top-left-radius: 7px
+ -webkit-border-bottom-left-radius: 7px
+ border: 0px
+
+
+ // ----------------------------------------------------------- Tree Structure
+ ul.closed
+ display: none
+
+ ul.tree_structure
+ background-color: #fff
+ padding: 25px
+ margin-top: 15px
+ box-shadow: 0px 2px 8px #ddd
+ -moz-box-shadow: 0px 2px 8px #ddd
+ -webkit-box-shadow: 0px 2px 8px #ddd
+
+ li
+ margin-left: 25px
+ li + li, li > ul
+ border-top: 1px solid #eee
+
+ a.tree_toggle
+ margin-top: 5px
+ width: 20px
+ height: 28px
+ float: left
+ margin-left: -35px
+ font: bold 14px/25px Arial, sans-serif
+ background: url(/images/cms/arrow_bottom.gif) right center no-repeat
+ padding-right: 15px
+ color: #ccc
+ text-align: right
+ text-decoration: none
+ a.tree_toggle.closed
+ background-image: url(/images/cms/arrow_right.gif)
+ a.tree_toggle:hover
+ border: 0px
+ color: #000
+
+ .item
+ padding: 7px 0px 7px 35px
+ overflow: hidden
+
+ .icon
+ margin-left: -30px
+ float: left
+ width: 28px
+ height: 28px
+ background: url(/images/cms/icon_draft.gif)
+ .dragger
+ width: 28px
+ height: 28px
+ cursor: move
+ .dragger:hover
+ background: url(/images/cms/icon_move.gif)
+
+ a.label
+ font-size: 14px
+ color: #000
+ a.label:hover
+ border-bottom: 1px dotted #000
+ .url
+ font-size: 10px
+
+ .action_links
+ visibility: hidden
+ font-size: 10px
+
+ table.details
+ font-size: 10px
+ margin: 5px 15px
+ border-left: 3px solid #ccc
+ th
+ padding: 0px 5px 0px 10px
+ font-weight: normal
+
+ .item:hover
+ background-color: #ebf5fc
+ .action_links
+ visibility: visible
+
+ // ---------------------------------------------------------- Formatted Table
+ table.formatted
+ margin-bottom: 15px
+ background-color: #fff
+ border: 10px solid #fff
+ box-shadow: 0px 2px 8px #ddd
+ -moz-box-shadow: 0px 2px 8px #ddd
+ -webkit-box-shadow: 0px 2px 8px #ddd
+
+ th, td
+ padding: 10px
+ vertical-align: top
+ white-space: nowrap
+ a.label
+ color: black
+ font-size: 14px
+ a.slug
+ font-size: 10px
+
+ th
+ background-color: #eee
+ font-size: 10px
+ text-transform: uppercase
+ border-bottom: 1px solid #444
+ td.main, th.main
+ width: 100%
+ white-space: normal
+ tr
+ border-bottom: 1px solid #eee
+
+ // -------------------------------------------------------------------- Forms
+ .form_element_group
+ margin-top: 10px
+
+
+ .form_element
+ margin-bottom: 10px
+ overflow: hidden
+ .label
+ height: 22px
+ font: 10px/22px Arial, sans-serif
+ color: #000
+ text-transform: uppercase
+ letter-spacing: 1px
+ .value
+ .field_with_errors
+ display: inline
+ input, select, textarea
+ width: 97%
+ border: 1px solid #ccc
+ padding: 3px
+ input[type=checkbox]
+ width: auto
+ border: 0
+ float: left
+ margin: 1px 4px 0px 0px
+
+ .codemirror
+ background-color: #fff
+ border: 1px inset #e5e5e5
+ .value.narrow
+ input, select, textarea
+ width: 80%
+ .fieldWithErrors label
+ color: #9E0B0F
+ .errors
+ color: #9E0B0F
+ margin: 3px 0px
+ .select
+ .label
+ label
+ line-height: 20px
+ .form_element.large
+ label
+ font-size: 16px
+ line-height: 26px
+ .value
+ input
+ font-size: 16px
+ .form_element.time_select_element, .form_element.date_select_element, .form_element.check_box_element, .form_element.radio_button_element
+ select, input
+ width: auto
+
+ .form_element.submit_element
+ input
+ -moz-border-radius: 5px
+ -webkit-border-radius: 5px
+ background-color: #7CAE00
+ padding: 5px 8px
+ font: 10px/20px Arial, sans-serif
+ color: #fff
+ text-transform: uppercase
+ letter-spacing: 1px
+ border: none
+
+ .form_element_group.vertical
+ float: left
+ width: 50%
+ .form_element
+ .label
+ text-align: right
+ width: 40px
+ float: left
+ .value
+ float: left
+ width: 80%
+ margin-left: 10px
+ select
+ width: 100%
+ input[type=text]
+ width: 100%
+ .vertical + .vertical
+ .form_element
+ .label
+ width: 100px
+ .value
+ width: 60%
+
+ .form_element_group.publishing
+ .form_element .field
+ input
+ width: 200px
+
+ .form_element_group.categories
+ .label
+ border-bottom: 2px solid #fff
+ padding-bottom: 5px
+ margin-bottom: 5px
+ ul#root_categories
+ margin-bottom: 10px
+ li li
+ padding-left: 15px
+ input
+ width: auto
+ #new_category
+ input, select
+ margin-bottom: 5px
+ input.submit_button
+ width: auto
+
+
+ .submit
+ float: left
+ line-height: 30px
+ .submit_element
+ margin: 5px 5px 5px 0px
+ float: left
+ form
+ .errorExplanation
+ background-color: #9E0B0F
+ padding: 10px
+ color: #fff
+ font-size: 12px
+ h2
+ margin: 0.1em 0em
+ font-size: 16px
+ h2, p
+ color: #fff
+ ul
+ margin: 10px 10px 0px 10px
+
+ .form_element_group.advanced
+ display: none
+ // --------------------------------------------------------------- Pagination
+ .pagination
+ margin-bottom: 15px
+ float: right
+ a, span
+ background: #404040
+ color: #fff
+ padding: 2px 5px
+ font-size: 11px
+ -moz-border-radius: 2px
+ a:hover
+ text-decoration: none
+ span.disabled
+ display: none
+ span.current
+ background-color: #999
+
+ // ------------------------------------------------------------------ Layouts
+ #cms_admin_layouts_index
+ .icon
+ background-image: url(/images/cms/icon_layout.gif)
+
+ // -------------------------------------------------------------------- Pages
+ #cms_admin_pages_index
+ .icon.published
+ background-image: url(/images/cms/icon_regular.gif)
+
+ // ----------------------------------------------------------------- Snippets
+ #cms_admin_snippets_index
+ .icon
+ width: 28px
+ height: 28px
+ background: url(/images/cms/icon_snippet.gif)
+ // --------------------------------------------------------------- Categories
+ #cms_admin_categories_index
+ .icon
+ background-image: url(/images/cms/icon_category.gif)
+ .categorizations
+ font-size: 10px
+ #cms_admin_categories_show
+ h3
+ font-size: 12px
+ text-transform: uppercase
+ border-bottom: 1px solid #ccc
+ color: #ccc
+ margin-bottom: 15px
+ clear: both
+ .pages
+ margin-bottom: 15px
+ overflow: hidden
+ a.page
+ width: 150px
+ float: left
+ height: 30px
+ padding-left: 35px
+ font: 14px/30px Georgia, serif
+ color: #000
+ margin: 0px 5px 5px 0px
+ background: url(/images/cms/icon_regular.gif) left center no-repeat
+ a:hover
+ border-bottom: 0px
+
public/stylesheets/sass/jquery_ui.sass +990 -0
@@ @@ -0,0 +1,990 @@
+ /*
+ * jQuery UI CSS Framework @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+
+ /* Layout helpers
+ *----------------------------------
+
+ .ui-helper-hidden
+ display: none
+
+ .ui-helper-hidden-accessible
+ position: absolute
+ left: -99999999px
+
+ .ui-helper-reset
+ margin: 0
+ padding: 0
+ border: 0
+ outline: 0
+ line-height: 1.3
+ text-decoration: none
+ font-size: 100%
+ list-style: none
+
+ .ui-helper-clearfix
+ &:after
+ content: "."
+ display: block
+ height: 0
+ clear: both
+ visibility: hidden
+ display: inline-block
+
+ /* required comment for clearfix to work in Opera \
+
+ * html .ui-helper-clearfix
+ height: 1%
+
+ .ui-helper-clearfix
+ display: block
+
+ /* end clearfix
+
+ .ui-helper-zfix
+ width: 100%
+ height: 100%
+ top: 0
+ left: 0
+ position: absolute
+ opacity: 0
+ filter: Alpha(Opacity = 0)
+
+ /* Interaction Cues
+ *----------------------------------
+
+ .ui-state-disabled
+ cursor: default !important
+
+ /* Icons
+ *----------------------------------
+
+ /* states and images
+
+ .ui-icon
+ display: block
+ text-indent: -99999px
+ overflow: hidden
+ background-repeat: no-repeat
+
+ /* Misc visuals
+ *----------------------------------
+
+ /* Overlays
+
+ .ui-widget-overlay
+ position: absolute
+ top: 0
+ left: 0
+ width: 100%
+ height: 100%
+
+ /*
+ * jQuery UI CSS Framework @VERSION
+ *
+ * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * http://docs.jquery.com/UI/Theming/API
+ *
+ * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
+
+ /* Component containers
+ *----------------------------------
+
+ .ui-widget
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif
+ font-size: 1.1em
+ .ui-widget
+ font-size: 1em
+ input, select, textarea, button
+ font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif
+ font-size: 1em
+
+ .ui-widget-content
+ border: 1px solid #dddddd
+ background: #eeeeee url(/images/cms/jquery_ui/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x
+ color: #333333
+ a
+ color: #333333
+
+ .ui-widget-header
+ border: 1px solid #e78f08
+ background: #f6a828 url(/images/cms/jquery_ui/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x
+ color: #ffffff
+ font-weight: bold
+ a
+ color: #ffffff
+
+ /* Interaction states
+ *----------------------------------
+
+ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default
+ border: 1px solid #cccccc
+ background: #f6f6f6 url(/images/cms/jquery_ui/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x
+ font-weight: bold
+ color: #1c94c4
+
+ .ui-state-default a
+ color: #1c94c4
+ text-decoration: none
+ &:link, &:visited
+ color: #1c94c4
+ text-decoration: none
+
+ .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus
+ border: 1px solid #fbcb09
+ background: #fdf5ce url(/images/cms/jquery_ui/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x
+ font-weight: bold
+ color: #c77405
+
+ .ui-state-hover a
+ color: #c77405
+ text-decoration: none
+ &:hover
+ color: #c77405
+ text-decoration: none
+
+ .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active
+ border: 1px solid #fbd850
+ background: white url(/images/cms/jquery_ui/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x
+ font-weight: bold
+ color: #eb8f00
+
+ .ui-state-active a
+ color: #eb8f00
+ text-decoration: none
+ &:link, &:visited
+ color: #eb8f00
+ text-decoration: none
+
+ .ui-widget :active
+ outline: none
+
+ /* Interaction Cues
+ *----------------------------------
+
+ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight
+ border: 1px solid #fed22f
+ background: #ffe45c url(/images/cms/jquery_ui/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x
+ color: #363636
+
+ .ui-state-highlight a, .ui-widget-content .ui-state-highlight a, .ui-widget-header .ui-state-highlight a
+ color: #363636
+
+ .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error
+ border: 1px solid #cd0a0a
+ background: #b81900 url(/images/cms/jquery_ui/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat
+ color: #ffffff
+
+ .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a, .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text
+ color: #ffffff
+
+ .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary
+ font-weight: bold
+
+ .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary
+ opacity: .7
+ filter: Alpha(Opacity = 70)
+ font-weight: normal
+
+ .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled
+ opacity: .35
+ filter: Alpha(Opacity = 35)
+ background-image: none
+
+ /* Icons
+ *----------------------------------
+
+ /* states and images
+
+ .ui-icon
+ width: 16px
+ height: 16px
+ background-image: url(/images/cms/jquery_ui/ui-icons_222222_256x240.png)
+
+ .ui-widget-content .ui-icon
+ background-image: url(/images/cms/jquery_ui/ui-icons_222222_256x240.png)
+
+ .ui-widget-header .ui-icon
+ background-image: url(/images/cms/jquery_ui/ui-icons_ffffff_256x240.png)
+
+ .ui-state-default .ui-icon, .ui-state-hover .ui-icon, .ui-state-focus .ui-icon, .ui-state-active .ui-icon
+ background-image: url(/images/cms/jquery_ui/ui-icons_ef8c08_256x240.png)
+
+ .ui-state-highlight .ui-icon
+ background-image: url(/images/cms/jquery_ui/ui-icons_228ef1_256x240.png)
+
+ .ui-state-error .ui-icon, .ui-state-error-text .ui-icon
+ background-image: url(/images/cms/jquery_ui/ui-icons_ffd27a_256x240.png)
+
+ /* positioning
+
+ .ui-icon-carat-1-n
+ background-position: 0 0
+
+ .ui-icon-carat-1-ne
+ background-position: -16px 0
+
+ .ui-icon-carat-1-e
+ background-position: -32px 0
+
+ .ui-icon-carat-1-se
+ background-position: -48px 0
+
+ .ui-icon-carat-1-s
+ background-position: -64px 0
+
+ .ui-icon-carat-1-sw
+ background-position: -80px 0
+
+ .ui-icon-carat-1-w
+ background-position: -96px 0
+
+ .ui-icon-carat-1-nw
+ background-position: -112px 0
+
+ .ui-icon-carat-2-n-s
+ background-position: -128px 0
+
+ .ui-icon-carat-2-e-w
+ background-position: -144px 0
+
+ .ui-icon-triangle-1-n
+ background-position: 0 -16px
+
+ .ui-icon-triangle-1-ne
+ background-position: -16px -16px
+
+ .ui-icon-triangle-1-e
+ background-position: -32px -16px
+
+ .ui-icon-triangle-1-se
+ background-position: -48px -16px
+
+ .ui-icon-triangle-1-s
+ background-position: -64px -16px
+
+ .ui-icon-triangle-1-sw
+ background-position: -80px -16px
+
+ .ui-icon-triangle-1-w
+ background-position: -96px -16px
+
+ .ui-icon-triangle-1-nw
+ background-position: -112px -16px
+
+ .ui-icon-triangle-2-n-s
+ background-position: -128px -16px
+
+ .ui-icon-triangle-2-e-w
+ background-position: -144px -16px
+
+ .ui-icon-arrow-1-n
+ background-position: 0 -32px
+
+ .ui-icon-arrow-1-ne
+ background-position: -16px -32px
+
+ .ui-icon-arrow-1-e
+ background-position: -32px -32px
+
+ .ui-icon-arrow-1-se
+ background-position: -48px -32px
+
+ .ui-icon-arrow-1-s
+ background-position: -64px -32px
+
+ .ui-icon-arrow-1-sw
+ background-position: -80px -32px
+
+ .ui-icon-arrow-1-w
+ background-position: -96px -32px
+
+ .ui-icon-arrow-1-nw
+ background-position: -112px -32px
+
+ .ui-icon-arrow-2-n-s
+ background-position: -128px -32px
+
+ .ui-icon-arrow-2-ne-sw
+ background-position: -144px -32px
+
+ .ui-icon-arrow-2-e-w
+ background-position: -160px -32px
+
+ .ui-icon-arrow-2-se-nw
+ background-position: -176px -32px
+
+ .ui-icon-arrowstop-1-n
+ background-position: -192px -32px
+
+ .ui-icon-arrowstop-1-e
+ background-position: -208px -32px
+
+ .ui-icon-arrowstop-1-s
+ background-position: -224px -32px
+
+ .ui-icon-arrowstop-1-w
+ background-position: -240px -32px
+
+ .ui-icon-arrowthick-1-n
+ background-position: 0 -48px
+
+ .ui-icon-arrowthick-1-ne
+ background-position: -16px -48px
+
+ .ui-icon-arrowthick-1-e
+ background-position: -32px -48px
+
+ .ui-icon-arrowthick-1-se
+ background-position: -48px -48px
+
+ .ui-icon-arrowthick-1-s
+ background-position: -64px -48px
+
+ .ui-icon-arrowthick-1-sw
+ background-position: -80px -48px
+
+ .ui-icon-arrowthick-1-w
+ background-position: -96px -48px
+
+ .ui-icon-arrowthick-1-nw
+ background-position: -112px -48px
+
+ .ui-icon-arrowthick-2-n-s
+ background-position: -128px -48px
+
+ .ui-icon-arrowthick-2-ne-sw
+ background-position: -144px -48px
+
+ .ui-icon-arrowthick-2-e-w
+ background-position: -160px -48px
+
+ .ui-icon-arrowthick-2-se-nw
+ background-position: -176px -48px
+
+ .ui-icon-arrowthickstop-1-n
+ background-position: -192px -48px
+
+ .ui-icon-arrowthickstop-1-e
+ background-position: -208px -48px
+
+ .ui-icon-arrowthickstop-1-s
+ background-position: -224px -48px
+
+ .ui-icon-arrowthickstop-1-w
+ background-position: -240px -48px
+
+ .ui-icon-arrowreturnthick-1-w
+ background-position: 0 -64px
+
+ .ui-icon-arrowreturnthick-1-n
+ background-position: -16px -64px
+
+ .ui-icon-arrowreturnthick-1-e
+ background-position: -32px -64px
+
+ .ui-icon-arrowreturnthick-1-s
+ background-position: -48px -64px
+
+ .ui-icon-arrowreturn-1-w
+ background-position: -64px -64px
+
+ .ui-icon-arrowreturn-1-n
+ background-position: -80px -64px
+
+ .ui-icon-arrowreturn-1-e
+ background-position: -96px -64px
+
+ .ui-icon-arrowreturn-1-s
+ background-position: -112px -64px
+
+ .ui-icon-arrowrefresh-1-w
+ background-position: -128px -64px
+
+ .ui-icon-arrowrefresh-1-n
+ background-position: -144px -64px
+
+ .ui-icon-arrowrefresh-1-e
+ background-position: -160px -64px
+
+ .ui-icon-arrowrefresh-1-s
+ background-position: -176px -64px
+
+ .ui-icon-arrow-4
+ background-position: 0 -80px
+
+ .ui-icon-arrow-4-diag
+ background-position: -16px -80px
+
+ .ui-icon-extlink
+ background-position: -32px -80px
+
+ .ui-icon-newwin
+ background-position: -48px -80px
+
+ .ui-icon-refresh
+ background-position: -64px -80px
+
+ .ui-icon-shuffle
+ background-position: -80px -80px
+
+ .ui-icon-transfer-e-w
+ background-position: -96px -80px
+
+ .ui-icon-transferthick-e-w
+ background-position: -112px -80px
+
+ .ui-icon-folder-collapsed
+ background-position: 0 -96px
+
+ .ui-icon-folder-open
+ background-position: -16px -96px
+
+ .ui-icon-document
+ background-position: -32px -96px
+
+ .ui-icon-document-b
+ background-position: -48px -96px
+
+ .ui-icon-note
+ background-position: -64px -96px
+
+ .ui-icon-mail-closed
+ background-position: -80px -96px
+
+ .ui-icon-mail-open
+ background-position: -96px -96px
+
+ .ui-icon-suitcase
+ background-position: -112px -96px
+
+ .ui-icon-comment
+ background-position: -128px -96px
+
+ .ui-icon-person
+ background-position: -144px -96px
+
+ .ui-icon-print
+ background-position: -160px -96px
+
+ .ui-icon-trash
+ background-position: -176px -96px
+
+ .ui-icon-locked
+ background-position: -192px -96px
+
+ .ui-icon-unlocked
+ background-position: -208px -96px
+
+ .ui-icon-bookmark
+ background-position: -224px -96px
+
+ .ui-icon-tag
+ background-position: -240px -96px
+
+ .ui-icon-home
+ background-position: 0 -112px
+
+ .ui-icon-flag
+ background-position: -16px -112px
+
+ .ui-icon-calendar
+ background-position: -32px -112px
+
+ .ui-icon-cart
+ background-position: -48px -112px
+
+ .ui-icon-pencil
+ background-position: -64px -112px
+
+ .ui-icon-clock
+ background-position: -80px -112px
+
+ .ui-icon-disk
+ background-position: -96px -112px
+
+ .ui-icon-calculator
+ background-position: -112px -112px
+
+ .ui-icon-zoomin
+ background-position: -128px -112px
+
+ .ui-icon-zoomout
+ background-position: -144px -112px
+
+ .ui-icon-search
+ background-position: -160px -112px
+
+ .ui-icon-wrench
+ background-position: -176px -112px
+
+ .ui-icon-gear
+ background-position: -192px -112px
+
+ .ui-icon-heart
+ background-position: -208px -112px
+
+ .ui-icon-star
+ background-position: -224px -112px
+
+ .ui-icon-link
+ background-position: -240px -112px
+
+ .ui-icon-cancel
+ background-position: 0 -128px
+
+ .ui-icon-plus
+ background-position: -16px -128px
+
+ .ui-icon-plusthick
+ background-position: -32px -128px
+
+ .ui-icon-minus
+ background-position: -48px -128px
+
+ .ui-icon-minusthick
+ background-position: -64px -128px
+
+ .ui-icon-close
+ background-position: -80px -128px
+
+ .ui-icon-closethick
+ background-position: -96px -128px
+
+ .ui-icon-key
+ background-position: -112px -128px
+
+ .ui-icon-lightbulb
+ background-position: -128px -128px
+
+ .ui-icon-scissors
+ background-position: -144px -128px
+
+ .ui-icon-clipboard
+ background-position: -160px -128px
+
+ .ui-icon-copy
+ background-position: -176px -128px
+
+ .ui-icon-contact
+ background-position: -192px -128px
+
+ .ui-icon-image
+ background-position: -208px -128px
+
+ .ui-icon-video
+ background-position: -224px -128px
+
+ .ui-icon-script
+ background-position: -240px -128px
+
+ .ui-icon-alert
+ background-position: 0 -144px
+
+ .ui-icon-info
+ background-position: -16px -144px
+
+ .ui-icon-notice
+ background-position: -32px -144px
+
+ .ui-icon-help
+ background-position: -48px -144px
+
+ .ui-icon-check
+ background-position: -64px -144px
+
+ .ui-icon-bullet
+ background-position: -80px -144px
+
+ .ui-icon-radio-off
+ background-position: -96px -144px
+
+ .ui-icon-radio-on
+ background-position: -112px -144px
+
+ .ui-icon-pin-w
+ background-position: -128px -144px
+
+ .ui-icon-pin-s
+ background-position: -144px -144px
+
+ .ui-icon-play
+ background-position: 0 -160px
+
+ .ui-icon-pause
+ background-position: -16px -160px
+
+ .ui-icon-seek-next
+ background-position: -32px -160px
+
+ .ui-icon-seek-prev
+ background-position: -48px -160px
+
+ .ui-icon-seek-end
+ background-position: -64px -160px
+
+ .ui-icon-seek-start, .ui-icon-seek-first
+ background-position: -80px -160px
+
+ /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead
+
+ .ui-icon-stop
+ background-position: -96px -160px
+
+ .ui-icon-eject
+ background-position: -112px -160px
+
+ .ui-icon-volume-off
+ background-position: -128px -160px
+
+ .ui-icon-volume-on
+ background-position: -144px -160px
+
+ .ui-icon-power
+ background-position: 0 -176px
+
+ .ui-icon-signal-diag
+ background-position: -16px -176px
+
+ .ui-icon-signal
+ background-position: -32px -176px
+
+ .ui-icon-battery-0
+ background-position: -48px -176px
+
+ .ui-icon-battery-1
+ background-position: -64px -176px
+
+ .ui-icon-battery-2
+ background-position: -80px -176px
+
+ .ui-icon-battery-3
+ background-position: -96px -176px
+
+ .ui-icon-circle-plus
+ background-position: 0 -192px
+
+ .ui-icon-circle-minus
+ background-position: -16px -192px
+
+ .ui-icon-circle-close
+ background-position: -32px -192px
+
+ .ui-icon-circle-triangle-e
+ background-position: -48px -192px
+
+ .ui-icon-circle-triangle-s
+ background-position: -64px -192px
+
+ .ui-icon-circle-triangle-w
+ background-position: -80px -192px
+
+ .ui-icon-circle-triangle-n
+ background-position: -96px -192px
+
+ .ui-icon-circle-arrow-e
+ background-position: -112px -192px
+
+ .ui-icon-circle-arrow-s
+ background-position: -128px -192px
+
+ .ui-icon-circle-arrow-w
+ background-position: -144px -192px
+
+ .ui-icon-circle-arrow-n
+ background-position: -160px -192px
+
+ .ui-icon-circle-zoomin
+ background-position: -176px -192px
+
+ .ui-icon-circle-zoomout
+ background-position: -192px -192px
+
+ .ui-icon-circle-check
+ background-position: -208px -192px
+
+ .ui-icon-circlesmall-plus
+ background-position: 0 -208px
+
+ .ui-icon-circlesmall-minus
+ background-position: -16px -208px
+
+ .ui-icon-circlesmall-close
+ background-position: -32px -208px
+
+ .ui-icon-squaresmall-plus
+ background-position: -48px -208px
+
+ .ui-icon-squaresmall-minus
+ background-position: -64px -208px
+
+ .ui-icon-squaresmall-close
+ background-position: -80px -208px
+
+ .ui-icon-grip-dotted-vertical
+ background-position: 0 -224px
+
+ .ui-icon-grip-dotted-horizontal
+ background-position: -16px -224px
+
+ .ui-icon-grip-solid-vertical
+ background-position: -32px -224px
+
+ .ui-icon-grip-solid-horizontal
+ background-position: -48px -224px
+
+ .ui-icon-gripsmall-diagonal-se
+ background-position: -64px -224px
+
+ .ui-icon-grip-diagonal-se
+ background-position: -80px -224px
+
+ /* Misc visuals
+ *----------------------------------
+
+ /* Corner radius
+
+ .ui-corner-tl
+ -moz-border-radius-topleft: 4px
+ -webkit-border-top-left-radius: 4px
+ border-top-left-radius: 4px
+
+ .ui-corner-tr
+ -moz-border-radius-topright: 4px
+ -webkit-border-top-right-radius: 4px
+ border-top-right-radius: 4px
+
+ .ui-corner-bl
+ -moz-border-radius-bottomleft: 4px
+ -webkit-border-bottom-left-radius: 4px
+ border-bottom-left-radius: 4px
+
+ .ui-corner-br
+ -moz-border-radius-bottomright: 4px
+ -webkit-border-bottom-right-radius: 4px
+ border-bottom-right-radius: 4px
+
+ .ui-corner-top
+ -moz-border-radius-topleft: 4px
+ -webkit-border-top-left-radius: 4px
+ border-top-left-radius: 4px
+ -moz-border-radius-topright: 4px
+ -webkit-border-top-right-radius: 4px
+ border-top-right-radius: 4px
+
+ .ui-corner-bottom
+ -moz-border-radius-bottomleft: 4px
+ -webkit-border-bottom-left-radius: 4px
+ border-bottom-left-radius: 4px
+ -moz-border-radius-bottomright: 4px
+ -webkit-border-bottom-right-radius: 4px
+ border-bottom-right-radius: 4px
+
+ .ui-corner-right
+ -moz-border-radius-topright: 4px
+ -webkit-border-top-right-radius: 4px
+ border-top-right-radius: 4px
+ -moz-border-radius-bottomright: 4px
+ -webkit-border-bottom-right-radius: 4px
+ border-bottom-right-radius: 4px
+
+ .ui-corner-left
+ -moz-border-radius-topleft: 4px
+ -webkit-border-top-left-radius: 4px
+ border-top-left-radius: 4px
+ -moz-border-radius-bottomleft: 4px
+ -webkit-border-bottom-left-radius: 4px
+ border-bottom-left-radius: 4px
+
+ .ui-corner-all
+ -moz-border-radius: 4px
+ -webkit-border-radius: 4px
+ border-radius: 4px
+
+ /* Overlays
+
+ .ui-widget-overlay
+ background: #666666 url(/images/cms/jquery_ui/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat
+ opacity: .50
+ filter: Alpha(Opacity = 50)
+
+ .ui-widget-shadow
+ margin: -5px 0 0 -5px
+ padding: 5px
+ background: black url(/images/cms/jquery_ui/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x
+ opacity: .20
+ filter: Alpha(Opacity = 20)
+ -moz-border-radius: 5px
+ -webkit-border-radius: 5px
+ border-radius: 5px
+
+ /*
+ * * jQuery UI Datepicker @VERSION
+ * *
+ * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
+ * * Dual licensed under the MIT or GPL Version 2 licenses.
+ * * http://jquery.org/license
+ * *
+ * * http://docs.jquery.com/UI/Datepicker#theming
+
+ .ui-datepicker
+ width: 17em
+ padding: .2em .2em 0
+ .ui-datepicker-header
+ position: relative
+ padding: .2em 0
+ .ui-datepicker-prev, .ui-datepicker-next
+ position: absolute
+ top: 2px
+ width: 1.8em
+ height: 1.8em
+ .ui-datepicker-prev-hover, .ui-datepicker-next-hover
+ top: 1px
+ .ui-datepicker-prev
+ left: 2px
+ .ui-datepicker-next
+ right: 2px
+ .ui-datepicker-prev-hover
+ left: 1px
+ .ui-datepicker-next-hover
+ right: 1px
+ .ui-datepicker-prev span, .ui-datepicker-next span
+ display: block
+ position: absolute
+ left: 50%
+ margin-left: -8px
+ top: 50%
+ margin-top: -8px
+ .ui-datepicker-title
+ margin: 0 2.3em
+ line-height: 1.8em
+ text-align: center
+ select
+ font-size: 1em
+ margin: 1px 0
+ select
+ &.ui-datepicker-month-year
+ width: 100%
+ &.ui-datepicker-month, &.ui-datepicker-year
+ width: 49%
+ table
+ width: 100%
+ font-size: .9em
+ border-collapse: collapse
+ margin: 0 0 .4em
+ th
+ padding: .7em .3em
+ text-align: center
+ font-weight: bold
+ border: 0
+ td
+ border: 0
+ padding: 1px
+ span, a
+ display: block
+ padding: .2em
+ text-align: right
+ text-decoration: none
+ .ui-datepicker-buttonpane
+ background-image: none
+ margin: .7em 0 0 0
+ padding: 0 .2em
+ border-left: 0
+ border-right: 0
+ border-bottom: 0
+ button
+ float: right
+ margin: .5em .2em .4em
+ cursor: pointer
+ padding: .2em .6em .3em .6em
+ width: auto
+ overflow: visible
+ &.ui-datepicker-current
+ float: left
+ &.ui-datepicker-multi
+ width: auto
+
+ /* with multiple calendars
+
+ .ui-datepicker-multi .ui-datepicker-group
+ float: left
+ table
+ width: 95%
+ margin: 0 auto .4em
+
+ .ui-datepicker-multi-2 .ui-datepicker-group
+ width: 50%
+
+ .ui-datepicker-multi-3 .ui-datepicker-group
+ width: 33.3%
+
+ .ui-datepicker-multi-4 .ui-datepicker-group
+ width: 25%
+
+ .ui-datepicker-multi
+ .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-group-middle .ui-datepicker-header
+ border-left-width: 0
+ .ui-datepicker-buttonpane
+ clear: left
+
+ .ui-datepicker-row-break
+ clear: both
+ width: 100%
+
+ /* RTL support
+
+ .ui-datepicker-rtl
+ direction: rtl
+ .ui-datepicker-prev
+ right: 2px
+ left: auto
+ .ui-datepicker-next
+ left: 2px
+ right: auto
+ .ui-datepicker-prev:hover
+ right: 1px
+ left: auto
+ .ui-datepicker-next:hover
+ left: 1px
+ right: auto
+ .ui-datepicker-buttonpane
+ clear: right
+ button
+ float: left
+ &.ui-datepicker-current
+ float: right
+ .ui-datepicker-group
+ float: right
+ .ui-datepicker-group-last .ui-datepicker-header, .ui-datepicker-group-middle .ui-datepicker-header
+ border-right-width: 0
+ border-left-width: 1px
+
+ /* IE6 IFRAME FIX (taken from datepicker 1.5.3
+
+ .ui-datepicker-cover
+ display: none
+ /*sorry for IE5
+ display/**/: block
+ /*sorry for IE5
+ position: absolute
+ /*must have
+ z-index: -1
+ /*must have
+ filter: mask()
+ /*must have
+ top: -4px
+ /*must have
+ left: -4px
+ /*must have
+ width: 200px
+ /*must have
+ height: 200px
+ /*must have
test/fixtures/cms_assets.yml +0 -0
test/fixtures/cms_blocks.yml +37 -0
@@ @@ -0,0 +1,37 @@
+ default_block_header:
+ cms_page: default
+ label: header
+ content_string: /block:header/
+
+ default_page_block_default:
+ cms_page: default
+ label: default
+ content_text: /page_block:default/
+
+ default_page_block_footer:
+ cms_page: default
+ label: footer
+ content_text: /page_block:footer/
+
+ complex_page_block_header:
+ cms_page: complex
+ label: header
+ content_string: /block:header/
+
+ complex_page_block_left_column:
+ cms_page: complex
+ label: left_column
+ content_text: |-
+ /page_block:left_column/ {{ cms_snippet:complex_snippet }}
+
+ complex_page_block_right_column:
+ cms_page: complex
+ label: right_column
+ content_text: |-
+ /page_block:right_column/ {{ cms_partial:complex_page/example }}
+
+ complex_page_block_footer:
+ cms_page: complex
+ label: footer
+ content_text: /page_block:footer/
+
test/fixtures/cms_categories.yml +20 -0
@@ @@ -0,0 +1,20 @@
+ category_1: &category
+ label: Category 1
+ slug: category_1
+ parent_id:
+ description: Some Category Description
+
+ category_2:
+ label: Category 2
+ slug: category_2
+
+ category_2_1:
+ label: Category 2.1
+ slug: category_2_1
+ parent: category_2
+
+ category_2_2:
+ label: Category 2.2
+ slug: category_2_2
+ parent: category_2
+
test/fixtures/cms_layouts.yml +41 -0
@@ @@ -0,0 +1,41 @@
+ default:
+ label: Default Layout
+ parent:
+ children_count: 1
+ position: 0
+ is_extendable: 1
+ content: |-
+ {{ cms_block:header:string }}{{ cms_page_block:default:text }}{{ cms_page_block:footer:text }}
+
+ nested:
+ label: Nested Layout
+ parent: default
+ content: |-
+ {{ cms_page_block:left_column:text }}{{ cms_page_block:right_column:text }}{{ cms_snippet:complex_snippet }}
+
+ identical_tags:
+ label: Layout with identical tags
+ position: 1
+ content: |-
+ This is a layout that has tags that share same signature
+ Techincally we need to report that there's only one tag
+ We don't really care how many times it's mentioned
+ {{ cms_block:my_block_1:text }}
+ {{ cms_block:my_block_1:string }}
+ and another set
+ {{ cms_block:my_block_2:integer }}
+ {{ cms_block:my_block_2:string }}
+ and a proper, singular one
+ {{ cms_block:my_block_3:boolean}}
+
+ all_included_tags:
+ label: Layout with all tags
+ position: 2
+ content: |-
+ Block: {{ cms_block:test_block:string }}
+ PageBlock: {{ cms_page_block:test_page_block:string }}
+ Snippet: {{ cms_snippet:test_snippet }}
+ Partial: {{ cms_partial:content/test_partial }}
+ Helper: {{ cms_helper:test_helper }}
+ Fake: {{ cms_fake:not_real:whatever }}
+
test/fixtures/cms_page_categorizations.yml +16 -0
@@ @@ -0,0 +1,16 @@
+ page_category_1:
+ cms_page: default
+ cms_category: category_2
+
+ page_category_2:
+ cms_page: default
+ cms_category: category_2_1
+
+ page_category_3:
+ cms_page: default
+ cms_category: category_2_2
+
+ page_category_4:
+ cms_page: complex
+ cms_category: category_2
+
test/fixtures/cms_pages.yml +58 -0
@@ @@ -0,0 +1,58 @@
+ default: &page
+ label: Home Page
+ cms_layout: default
+ parent:
+ slug:
+ full_path: ""
+ children_count: 1
+ position: 0
+ published: true
+ excluded_from_nav: false
+
+ complex:
+ <<: *page
+ parent: default
+ label: Complex Page
+ cms_layout: nested
+ slug: complex-page
+ full_path: 'complex-page'
+
+ complex2:
+ <<: *page
+ parent: default
+ label: Complex 2nd Page
+ cms_layout: nested
+ slug: complex-page-2
+ full_path: 'complex-page-2'
+
+ unpublished:
+ <<: *page
+ parent: default
+ label: Unpublished Page
+ cms_layout: default
+ slug: unpublished
+ full_path: 'unpublished'
+ published: 0
+
+ under_development:
+ <<: *page
+ parent: default
+ label: Page under development
+ slug: 'under-development'
+ full_path: 'under-development'
+
+ descendant1:
+ <<: *page
+ parent: complex
+ label: First Descendant Page
+ cms_layout: default
+ slug: first-descendant
+ full_path: 'complex-page/first-descendant'
+
+ descendant2:
+ <<: *page
+ parent: descendant1
+ label: Second Descendant Page
+ cms_layout: default
+ slug: second-descendant
+ full_path: 'complex-page/first-descendant/second-descendant'
test/fixtures/cms_sites.yml +11 -0
@@ @@ -0,0 +1,11 @@
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
+
+ # This model initially had no columns defined. If you add columns to the
+ # model remove the '{}' from the fixture names and add the columns immediately
+ # below each fixture, per the syntax in the comments below
+ #
+ one: {}
+ # column: value
+ #
+ two: {}
+ # column: value
test/fixtures/cms_snippets.yml +6 -1
@@ @@ -1,3 +1,8 @@
default:
label: default_snippet
- content: snippet content
\ No newline at end of file
+ content: snippet content
+
+
+ complex:
+ label: complex_snippet
+ content: /complex snippet/
\ No newline at end of file
test/functional/cms_admin/base_controller_test.rb +11 -4
@@ @@ -1,8 +1,15 @@
- require 'test_helper'
+ require File.dirname(__FILE__) + '/../../test_helper'
class CmsAdmin::BaseControllerTest < ActionController::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
+
+ def setup
+ http_auth
end
+
+ def test_index
+ get :index
+ assert_redirected_to cms_admin_pages_path
+ end
+
+
end
test/functional/cms_admin/categories_controller_test.rb +87 -0
@@ @@ -0,0 +1,87 @@
+ require File.dirname(__FILE__) + '/../../test_helper'
+
+ class CmsAdmin::CategoriesControllerTest < ActionController::TestCase
+
+ def setup
+ http_auth
+ end
+
+ def test_get_index
+ get :index
+ assert_response :success
+ assert assigns(:cms_categories)
+ end
+
+ def test_get_new
+ get :new
+ assert_response :success
+ end
+
+ def test_get_show
+ get :show, :id => cms_categories(:category_2)
+ assert_response :success
+ assert assigns(:cms_category)
+ end
+
+ def test_get_edit
+ get :edit, :id => cms_categories(:category_1)
+ assert_response :success
+ assert assigns(:cms_category)
+ end
+
+ def test_create
+ assert_difference 'CmsCategory.count', 1 do
+ post :create, :cms_category => {
+ :label => 'Category 1',
+ :description => 'This is a category',
+ }
+ end
+ assert_redirected_to edit_cms_admin_category_path(assigns(:cms_category))
+ assert_equal 'Category created', flash[:notice]
+ end
+
+ def test_create_fail
+ #assert_no_difference 'CmsCategory.count' do
+ post :create, :cms_category => {
+ :label => '',
+ :description => 'This is a category',
+ }
+ #end
+ #assert_response :success
+ #assert_template 'new'
+ #assert assigns(:cms_category).errors[:label]
+ end
+
+ def test_update
+ category = cms_categories(:category_1)
+ put :update, :id => category, :cms_category => {
+ :label => 'Category 2',
+ :description => 'New Description'
+ }
+ assert_redirected_to edit_cms_admin_category_path(category)
+ category.reload
+ assert_equal 'Category 2', category.label
+ assert_equal 'New Description', category.description
+ assert_equal 'Category updated', flash[:notice]
+ end
+
+ def test_update_fail
+ category = cms_categories(:category_1)
+ put :update, :id => category, :cms_category => {
+ :label => '',
+ :description => 'New Description'
+ }
+ assert_response :success
+ assert_template 'edit'
+ assert assigns(:cms_category).errors[:label]
+ end
+
+ def test_destroy
+ assert_difference 'CmsCategory.count', -1 do
+ delete :destroy, :id => cms_categories(:category_1)
+ assert_redirected_to cms_admin_categories_path
+ assert_equal 'Category deleted', flash[:notice]
+ end
+ end
+ end
+
test/functional/cms_admin/layouts_controller_test.rb +83 -4
@@ @@ -1,8 +1,87 @@
- require 'test_helper'
+ require File.dirname(__FILE__) + '/../../test_helper'
class CmsAdmin::LayoutsControllerTest < ActionController::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
+
+ def setup
+ http_auth
+ end
+
+ def test_get_index
+ get :index
+ assert_response :success
+ assert assigns(:cms_layouts)
+ end
+
+ def test_get_new
+ get :new
+ assert_response :success
+ end
+
+ def test_get_edit
+ get :edit, :id => cms_layouts(:default)
+ assert_response :success
+ assert assigns(:cms_layout)
+ end
+
+ def test_create
+ assert_difference 'CmsLayout.count' do
+ post :create, :cms_layout => {
+ :label => 'Test Layout',
+ :parent_id => '',
+ :app_layout => '',
+ :content => 'Test content {{ cms_block:test_block:text }}'
+ }
+ assert_response :redirect
+ assert_redirected_to edit_cms_admin_layout_path(assigns(:cms_layout))
+ assert_equal 'Layout created', flash[:notice]
+ end
+ end
+
+ def test_update
+ layout = cms_layouts(:default)
+
+ assert_difference 'CmsBlock.count', layout.cms_pages.count do
+ put :update, :id => layout, :cms_layout => {
+ :label => 'New Test Label',
+ :content => '{{ cms_block:completely_new_block:string }}'
+ }
+ assert_response :redirect
+ assert_redirected_to edit_cms_admin_layout_path(assigns(:cms_layout))
+ assert_equal 'Layout updated', flash[:notice]
+
+ layout.reload
+ assert_equal 'New Test Label', layout.label
+ assert_equal '{{ cms_block:completely_new_block:string }}', layout.content
+ end
+ end
+
+ def test_destroy
+ layout = cms_layouts(:default)
+ assert !(layout_pages = layout.cms_pages).blank?
+
+ assert_equal 1, layout.descendants.size
+
+ assert_difference 'CmsLayout.count', -2 do
+ assert_no_difference ['CmsPage.count', 'CmsBlock.count'] do
+ delete :destroy, :id => layout
+ assert_response :redirect
+ assert_redirected_to cms_admin_layouts_path
+ assert_equal 'Layout removed', flash[:notice]
+
+ layout_pages.each do |page|
+ assert !page.cms_layout
+ end
+ end
+ end
+ end
+
+ def test_toggle
+ assert !session[:cms_layout]
+ # Expand
+ post :toggle, :id => cms_layouts(:default)
+ assert session[:cms_layout].include?(cms_layouts(:default).id)
+ # Collapse
+ post :toggle, :id => cms_layouts(:default)
+ assert !session[:cms_layout].include?(cms_layouts(:default).id)
end
end
test/functional/cms_admin/pages_controller_test.rb +134 -4
@@ @@ -1,8 +1,138 @@
- require 'test_helper'
+ require File.dirname(__FILE__) + '/../../test_helper'
class CmsAdmin::PagesControllerTest < ActionController::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
+
+ def setup
+ http_auth
+ end
+
+ def test_get_index
+ get :index
+ assert_response :success
+ assert assigns(:cms_pages)
+ end
+
+ def test_get_new
+ get :new
+ assert_response :success
+ end
+
+ def test_get_edit
+ get :edit, :id => cms_pages(:default)
+ assert_response :success
+ assert assigns(:cms_page)
+ end
+
+ def test_create
+ assert_difference 'CmsPage.count' do
+ assert_difference 'CmsBlock.count', 3 do
+ post :create, :cms_page => {
+ :label => 'Test Page',
+ :slug => 'test_page',
+ :cms_layout => cms_layouts(:default),
+ :blocks => {
+ :header => { :content_string => 'Test Header' },
+ :default => { :content_text => 'Test Content' },
+ :footer => { :content_text => 'Test Footer' }
+ }
+ }
+ assert_response :redirect
+ assert_redirected_to edit_cms_admin_page_path(assigns(:cms_page))
+ assert_equal 'Page created', flash[:notice]
+
+ assert page = CmsPage.find_by_slug('test_page')
+ assert_equal 'Test Header', page.cms_block_content(:header, :content_string)
+ assert_equal 'Test Content', page.cms_block_content(:default, :content_text)
+ assert_equal 'Test Footer', page.cms_block_content(:footer, :content_text)
+ end
+ end
+ end
+
+ def test_update
+ page = cms_pages(:complex)
+
+ assert_difference 'CmsBlock.count' do
+ put :update, :id => page, :cms_page => {
+ :label => 'New Test Page',
+ :slug => 'new_test_page',
+ :cms_layout => cms_layouts(:default),
+ :blocks => {
+ :header => { :content_string => 'New Test Header' },
+ :default => { :content_text => 'New Test Content' },
+ :footer => { :content_text => 'New Test Footer' }
+ }
+ }
+ assert_response :redirect
+ assert_redirected_to edit_cms_admin_page_path(assigns(:cms_page))
+ assert_equal 'Page updated', flash[:notice]
+
+ assert page = CmsPage.find_by_slug('new_test_page')
+ assert_equal 'New Test Header', page.cms_block_content(:header, :content_string)
+ assert_equal 'New Test Content', page.cms_block_content(:default, :content_text)
+ assert_equal 'New Test Footer', page.cms_block_content(:footer, :content_text)
+
+ # old blocks are still there:
+ assert !page.cms_block_content(:left_column, :content_text).blank?
+ assert !page.cms_block_content(:right_column, :content_text).blank?
+ end
+ end
+
+ def test_destroy
+ page = cms_pages(:default)
+
+ assert_difference 'CmsPage.count', -7 do
+ assert_difference 'CmsBlock.count', -7 do
+ delete :destroy, :id => page
+ assert_response :redirect
+ assert_redirected_to cms_admin_pages_path
+ assert_equal 'Page removed', flash[:notice]
+ end
+ end
+ end
+
+ def test_preview_for_create
+ assert_no_difference 'CmsPage.count' do
+ assert_no_difference 'CmsBlock.count' do
+ post :create, :preview => 'Preview Button', :cms_page => {
+ :label => 'Test Page',
+ :slug => 'test_page',
+ :cms_layout => cms_layouts(:default),
+ :blocks => {
+ :header => { :content_string => 'Test Header' },
+ :default => { :content_text => 'Test Content' },
+ :footer => { :content_text => 'Test Footer' }
+ }
+ }
+ assert_response :success
+ end
+ end
+ end
+
+ def test_preview_for_update
+ page = cms_pages(:complex)
+
+ assert_no_difference 'CmsBlock.count' do
+ put :update, :preview => 'Preview Button', :id => page, :cms_page => {
+ :label => 'New Test Page',
+ :slug => 'new_test_page',
+ :cms_layout => cms_layouts(:default),
+ :blocks => {
+ :header => { :content_string => 'New Test Header' },
+ :default => { :content_text => 'New Test Content' },
+ :footer => { :content_text => 'New Test Footer' }
+ }
+ }
+ assert_response :success
+ end
+ end
+
+ def test_toggle
+ assert !session[:cms_page]
+ # Expand
+ post :toggle, :id => cms_pages(:default)
+ assert session[:cms_page].include?(cms_pages(:default).id)
+ # Collapse
+ post :toggle, :id => cms_pages(:default)
+ assert !session[:cms_page].include?(cms_pages(:default).id)
end
end
test/functional/cms_admin/sites_controller_test.rb +8 -0
@@ @@ -0,0 +1,8 @@
+ require 'test_helper'
+
+ class CmsAdmin::SitesControllerTest < ActionController::TestCase
+ # Replace this with your real tests.
+ test "the truth" do
+ assert true
+ end
+ end
test/functional/cms_admin/snippets_controller_test.rb +19 -20
@@ @@ -1,11 +1,11 @@
- require 'test_helper'
+ require File.dirname(__FILE__) + '/../../test_helper'
class CmsAdmin::SnippetsControllerTest < ActionController::TestCase
-
+
def setup
- #http_auth
+ http_auth
end
-
+
def test_get_index
get :index
assert_response :success
@@ @@ -17,20 +17,24 @@ class CmsAdmin::SnippetsControllerTest < ActionController::TestCase
assert_response :success
end
+ def test_get_edit
+ get :edit, :id => cms_snippets(:default)
+ assert_response :success
+ assert assigns(:cms_snippet)
+ end
+
def test_create
assert_difference 'CmsSnippet.count' do
- post :create, :cms_snippet => cms_snippet_params
+ post :create, :cms_snippet => {
+ :label => 'test_snippet',
+ :content => 'test content'
+ }
+ assert_response :redirect
assert_redirected_to edit_cms_admin_snippet_path(assigns(:cms_snippet))
assert_equal 'Snippet created', flash[:notice]
end
end
- def test_get_edit
- get :edit, :id => cms_snippets(:default)
- assert_response :success
- assert assigns(:cms_snippet)
- end
-
def test_update
snippet = cms_snippets(:default)
@@ @@ -38,7 +42,8 @@ class CmsAdmin::SnippetsControllerTest < ActionController::TestCase
:label => 'new_test_label',
:content => 'new test content'
}
- assert_redirected_to edit_cms_admin_snippet_path(snippet)
+ assert_response :redirect
+ assert_redirected_to edit_cms_admin_snippet_path(assigns(:cms_snippet))
assert_equal 'Snippet updated', flash[:notice]
snippet.reload
@@ @@ -49,16 +54,10 @@ class CmsAdmin::SnippetsControllerTest < ActionController::TestCase
def test_destroy
assert_difference 'CmsSnippet.count', -1 do
delete :destroy, :id => cms_snippets(:default)
+ assert_response :redirect
assert_redirected_to cms_admin_snippets_path
assert_equal 'Snippet removed', flash[:notice]
end
end
-
- private
- def cms_snippet_params(options = {})
- {
- :label => 'test_snippet',
- :content => 'test content'
- }.merge(options)
- end
+
end
test/functional/cms_content_controller_test.rb +40 -2
@@ @@ -1,8 +1,46 @@
require 'test_helper'
class CmsContentControllerTest < ActionController::TestCase
- test "GET show" do
- get :show, :path => 'some-page'
+
+ def test_get_a_page
+ assert cms_pages(:complex).published?
+ get :show, :path => %w(complex-page)
+ assert_response :success
+ assert assigns(:cms_page)
+ end
+
+ def test_get_a_unpublished_page
+ assert !cms_pages(:unpublished).published?
+ get :show, :path => %w(unpublished)
+ assert_response 404
+ end
+
+ def test_get_sitemap
+ get :sitemap, :format => 'xml'
assert_response :success
+ assert assigns(:cms_pages)
+ end
+
+ def test_default_404_page
+ get :show, :path => %w(some non existing page)
+ assert_response 404
+ assert !assigns(:cms_page)
+ end
+
+ def test_custom_404_page
+ cms_page = CmsPage.create!(
+ :cms_layout => cms_layouts(:default),
+ :label => '404 Page',
+ :slug => '404',
+ :published => true
+ )
+ get :show, :path => %w(some non existing page)
+ assert_response 404
+ assert assigns(:cms_page)
+ end
+
+ def test_get_page_with_extension
+ get :show, :path => %w(path to somepage.php?show=1)
+ assert_response 404
end
end
test/test_helper.rb +3 -0
@@ @@ -10,4 +10,7 @@ class ActiveSupport::TestCase
fixtures :all
# Add more helper methods to be used by all tests here...
+ def http_auth
+ @request.env['HTTP_AUTHORIZATION'] = "Basic #{Base64.encode64('username:password')}"
+ end
end
test/unit/cms_asset_test.rb +0 -8
@@ @@ -1,8 +0,0 @@
- require 'test_helper'
-
- class CmsAssetTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
- end
- end
test/unit/cms_block_test.rb +6 -3
@@ @@ -1,8 +1,11 @@
require 'test_helper'
class CmsBlockTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
+
+ def test_fixtures_validity
+ CmsBlock.all.each do |block|
+ assert block.valid?
+ end
end
+
end
test/unit/cms_category_test.rb +96 -0
@@ @@ -0,0 +1,96 @@
+ require File.dirname(__FILE__) + '/../test_helper'
+
+ class CmsCategoryTest < ActiveSupport::TestCase
+
+ def test_fixtures_validity
+ CmsCategory.all.each do |category|
+ assert category.valid?, category.errors.full_messages
+ end
+ end
+
+ def test_should_create_category
+ assert_difference 'CmsCategory.count', 1 do
+ CmsCategory.create(
+ :label => 'Test Category',
+ :slug => 'test_category',
+ :description => 'Test Description'
+ )
+ end
+ end
+
+ def test_validation_on_blank
+ assert_no_difference 'CmsCategory.count' do
+ c = CmsCategory.create(
+ :label =>'',
+ :slug =>''
+ )
+ assert c.errors[:label]
+ assert c.errors[:slug]
+ end
+ end
+
+ def test_validation_on_existing_slug
+ assert_no_difference 'CmsCategory.count' do
+ c = CmsCategory.create(
+ :label => 'Test Category',
+ :slug => cms_categories(:category_1).slug
+ )
+ assert c.errors[:slug]
+ end
+ end
+
+ def test_removing_category_blows_away_children_and_categorizations
+ category = cms_categories(:category_2)
+
+ assert_equal 2, category.children.count
+
+ assert_equal 2, category.cms_page_categorizations.count
+ assert_equal 2, category.cms_pages.count
+
+ assert_no_difference ['CmsPage.count'] do
+ assert_difference ['CmsCategory.count'], -3 do
+ assert_difference ['CmsPageCategorization.count'], -4 do # -2 from child categories
+ category.destroy
+ end
+ end
+ end
+ end
+
+ def test_categorized_model_names
+ model_names = CmsCategory.categorized_model_names
+ assert model_names.include?("CmsPage"), "CmsPage was not listed as categorized"
+ assert !model_names.include?("CmsPageCategorization"), "CmsPageCategorizations was listed as categorized"
+ assert !model_names.include?("CmsCategory"), "CmsCategory was listed as categorized"
+ end
+
+ def test_categorized_model_types
+ model_types = CmsCategory.categorized_model_types
+ assert model_types.include?(CmsPage), "CmsPage was not listed as categorized"
+ assert !model_types.include?(CmsPageCategorization), "CmsPageCategorizations was listed as categorized"
+ assert !model_types.include?(CmsCategory), "CmsCategory was listed as categorized"
+ end
+
+ def test_number_of_records
+ assert_equal 2, cms_categories(:category_2).number_of_records
+ assert_equal 1, cms_categories(:category_2_1).number_of_records
+ assert_equal 1, cms_categories(:category_2_2).number_of_records
+ assert_equal 0, cms_categories(:category_1).number_of_records
+ end
+
+ def test_records
+ assert cms_categories(:category_2).records[:cms_pages].include?(cms_pages(:default))
+ assert cms_categories(:category_2).records[:cms_pages].include?(cms_pages(:complex))
+ assert cms_categories(:category_2_1).records[:cms_pages].include?(cms_pages(:default))
+ assert cms_categories(:category_2_2).records[:cms_pages].include?(cms_pages(:default))
+ assert cms_categories(:category_1).records[:cms_pages].empty?
+ end
+
+
+ def test_should_set_slug_if_blank
+ c = CmsCategory.new(
+ :label => 'Test Category'
+ )
+ assert c.valid?
+ assert_equal 'test-category', c.slug
+ end
+ end
test/unit/cms_layout_test.rb +39 -3
@@ @@ -1,8 +1,44 @@
require 'test_helper'
class CmsLayoutTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
+
+ def test_fixtures_validity
+ CmsLayout.all.each do |layout|
+ assert layout.valid?, layout.errors.full_messages
+ end
end
+
+ def test_nested_layouts
+ parent_layout = cms_layouts(:default)
+ child_layout = cms_layouts(:nested)
+ assert_equal parent_layout, child_layout.parent
+ assert parent_layout.is_extendable?
+
+ assert_not_equal child_layout.content, child_layout.read_attribute(:content)
+ parent_layout_content = '{{ cms_block:header:string }}{{ cms_page_block:default:text }}{{ cms_page_block:footer:text }}'
+ child_layout_content = '{{ cms_block:header:string }}{{ cms_page_block:left_column:text }}{{ cms_page_block:right_column:text }}{{ cms_snippet:complex_snippet }}{{ cms_page_block:footer:text }}'
+
+ assert_equal parent_layout_content, parent_layout.content
+ assert_equal child_layout_content, child_layout.content
+ end
+
+ def test_adding_new_block_tag_updates_associated_pages
+ layout = cms_layouts(:default)
+ page = cms_pages(:default)
+ assert_equal layout, page.cms_layout
+ assert_equal 3, layout.tags.size
+ assert_equal 3, layout.tags.select{|t| ['cms_block', 'cms_page_block'].member?(t.tag_type)}.size
+ assert_equal 3, page.cms_blocks.count
+
+ assert_difference ['layout.tags.size', 'page.cms_blocks.count'] do
+ layout.content += "{{cms_block:new_block:string}}"
+ layout.save!
+ layout.reload
+ page.reload
+
+ assert layout.tags.collect{|t| t.tag_signature}.member?('cms_block:new_block:string')
+ assert page.cms_blocks.with_label('new_block')
+ end
+ end
+
end
test/unit/cms_page_categorization_test.rb +37 -0
@@ @@ -0,0 +1,37 @@
+ require 'test_helper'
+
+ class CmsPageCategorizationTest < ActiveSupport::TestCase
+
+ def test_fixtures_validity
+ CmsPageCategorization.all.each do |categorization|
+ assert categorization.valid?, categorization.errors.full_messages
+ end
+ end
+
+ def test_creation
+ assert_difference 'CmsPageCategorization.count' do
+ CmsPageCategorization.create(
+ :cms_page => cms_pages(:complex),
+ :cms_category => cms_categories(:category_1)
+ )
+ end
+ end
+
+ def test_cascading_creation
+ assert_difference 'CmsPageCategorization.count', 2 do
+ CmsPageCategorization.create(
+ :cms_page => cms_pages(:unpublished),
+ :cms_category => cms_categories(:category_2_1)
+ )
+ end
+ end
+
+ def test_cascading_removal
+ categorization = cms_page_categorizations(:page_category_1)
+ assert_difference 'CmsPageCategorization.count', -3 do
+ categorization.destroy
+ end
+ end
+
+ end
+
test/unit/cms_page_test.rb +127 -4
@@ @@ -1,8 +1,131 @@
- require 'test_helper'
+ require File.dirname(__FILE__) + '/../test_helper'
class CmsPageTest < ActiveSupport::TestCase
- # Replace this with your real tests.
- test "the truth" do
- assert true
+
+ def test_initialization
+ page = CmsPage.new
+ assert page.cms_layout
+ assert_equal cms_layouts(:default), CmsLayout.first
+ assert_equal cms_layouts(:default), page.cms_layout
+ end
+
+ def test_initialization_with_parent_page
+ assert cms_layouts(:nested), cms_pages(:complex).cms_layout
+
+ assert_difference 'CmsPage.find_by_slug("complex-page").children_count', 1 do
+ page = CmsPage.new(
+ :label => "test child",
+ :slug => "test-child",
+ :parent => cms_pages(:complex)
+ )
+ page.save!
+ assert page.cms_layout
+ assert_equal cms_pages(:complex).cms_layout, page.cms_layout
+
+ end
+ end
+
+ def test_fixtures_validity
+ CmsPage.all.each do |page|
+ assert page.valid?, page.errors.full_messages
+ end
+ end
+
+ def test_page_finder_helper
+ page = cms_pages(:default)
+ assert_equal page, CmsPage[page.slug]
+ end
+
+ def test_page_rendering
+ page = cms_pages(:default)
+ assert_equal 3, page.cms_blocks.count
+ assert_equal '/page_block:default//page_block:footer/', page.render_content
+ end
+
+ def test_complex_nested_rendering
+ page = cms_pages(:complex)
+ assert_equal 4, page.cms_blocks.count
+ assert_equal "/page_block:left_column/ /complex snippet//page_block:right_column/ <%= render :partial => 'complex_page/example' %>/complex snippet//page_block:footer/", page.render_content
+ end
+
+ def test_page_content
+ page = cms_pages(:default)
+ assert_equal page.content, page.render_content
+ end
+
+ def test_cms_block_content_method
+ page = cms_pages(:default)
+ assert !page.cms_block_content(:header, :content_string).blank?
+ assert page.cms_block_content(:bogus_label, :content_string).blank?
+ end
+
+ def test_publishing
+ page = cms_pages(:default)
+ assert page.published?
+ page.update_attribute(:published, false)
+ assert !page.published?
+ end
+
+ def test_excluding_from_nav
+ page = cms_pages(:default)
+ assert !page.excluded_from_nav?
+ page.update_attribute(:excluded_from_nav, true)
+ assert page.excluded_from_nav?
+ end
+
+ def test_slug_changes_on_all_descendants
+ page = cms_pages(:complex)
+ assert_equal '/complex-page', page.full_path
+
+ first_descendant = cms_pages(:descendant1)
+ assert_equal '/complex-page/first-descendant', first_descendant.full_path
+
+ second_descendant = cms_pages(:descendant2)
+ assert_equal '/complex-page/first-descendant/second-descendant', second_descendant.full_path
+
+ page.slug = 'complex'
+ page.save!
+
+ page.reload
+ first_descendant.reload
+ second_descendant.reload
+
+ assert_equal '/complex', page.full_path
+ assert_equal '/complex/first-descendant', first_descendant.full_path
+ assert_equal '/complex/first-descendant/second-descendant', second_descendant.full_path
+
+ end
+
+ def test_child_count_updates_on_create
+ assert_difference 'CmsPage.find_by_slug("complex-page").children_count', 1 do
+ CmsPage.create!(
+ :label => "test child",
+ :slug => "test-child",
+ :parent => cms_pages(:complex)
+ )
+ end
+ end
+
+ def test_child_count_updates_on_destroy
+ assert_difference 'CmsPage.find_by_slug("complex-page").children_count', -1 do
+ cms_pages(:descendant1).destroy
+ end
+ end
+
+ def test_child_count_updates_on_parent_change
+ CmsPage.repair_children_count
+
+ assert_equal cms_pages(:complex2).children.count, cms_pages(:complex2).children_count
+ assert_equal cms_pages(:complex).children.count, cms_pages(:complex).children_count
+
+ assert_difference 'CmsPage.find_by_slug("complex-page").children_count', -1 do
+ assert_difference 'CmsPage.find_by_slug("complex-page-2").children_count', 1 do
+ pg = CmsPage.find_by_slug('first-descendant')
+ pg.parent_id_will_change!
+ pg.parent_id = cms_pages(:complex2).id
+ pg.save!
+ end
+ end
+
end
end
test/unit/cms_site_test.rb +8 -0
@@ @@ -0,0 +1,8 @@
+ require 'test_helper'
+
+ class CmsSiteTest < ActiveSupport::TestCase
+ # Replace this with your real tests.
+ test "the truth" do
+ assert true
+ end
+ end
test/unit/cms_tag_test.rb +70 -0
@@ @@ -0,0 +1,70 @@
+ require File.dirname(__FILE__) + '/../test_helper'
+
+ class CmsTagTest < ActiveSupport::TestCase
+
+ def test_tag_parsing
+ layout = cms_layouts(:all_included_tags)
+ tags = CmsTag::parse_tags(layout.content)
+ assert_equal 4, tags.size
+ end
+
+ def test_block_tag
+ layout = cms_layouts(:all_included_tags)
+ tag = layout.tags.select{|t| t.tag_signature == 'cms_block:test_block:string'}.first
+ assert tag
+ assert_equal 'cms_block', tag.tag_type
+ assert_equal 'test_block', tag.label
+ assert_equal 'string', tag.format
+
+ assert_equal 1, tag.class.render_priority
+
+ # TODO: content pulling
+ end
+
+ def test_page_block_tag
+ layout = cms_layouts(:all_included_tags)
+ tag = layout.tags.select{|t| t.tag_signature == 'cms_page_block:test_page_block:string'}.first
+ assert tag
+ assert_equal 'cms_page_block', tag.tag_type
+ assert_equal 'test_page_block', tag.label
+ assert_equal 'string', tag.format
+
+ assert_equal 1, tag.class.render_priority
+
+ # TODO: content pulling
+ end
+
+ def test_snippet_tag
+ layout = cms_layouts(:all_included_tags)
+ tag = layout.tags.select{|t| t.tag_signature == 'cms_snippet:test_snippet'}.first
+ assert tag
+ assert_equal 'cms_snippet', tag.tag_type
+ assert_equal 'test_snippet', tag.label
+
+ assert_equal 2, tag.class.render_priority
+
+ # TODO: content pulling
+ end
+
+ def test_partial_tag
+ layout = cms_layouts(:all_included_tags)
+ tag = layout.tags.select{|t| t.tag_signature == 'cms_partial:content/test_partial'}.first
+ assert tag
+ assert_equal 'cms_partial', tag.tag_type
+ assert_equal 'content/test_partial', tag.label
+
+ assert_equal 3, tag.class.render_priority
+ assert_equal "<%= render :partial => 'content/test_partial' %>", tag.content
+ end
+
+ def test_tag_uniqueness
+ layout = cms_layouts(:identical_tags)
+ assert_equal 3, layout.tags.size
+ tag_signatures = %w(cms_block:my_block_1:text cms_block:my_block_2:integer cms_block:my_block_3:boolean)
+ layout.tags.each do |tag|
+ assert tag_signatures.member?(tag.tag_signature)
+ assert_equal tag.class, CmsTag::Block
+ end
+ end
+
+ end
vendor/plugins/acts_as_tree/README +26 -0
@@ @@ -0,0 +1,26 @@
+ acts_as_tree
+ ============
+
+ Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children
+ association. This requires that you have a foreign key column, which by default is called +parent_id+.
+
+ class Category < ActiveRecord::Base
+ acts_as_tree :order => "name"
+ end
+
+ Example:
+ root
+ \_ child1
+ \_ subchild1
+ \_ subchild2
+
+ root = Category.create("name" => "root")
+ child1 = root.children.create("name" => "child1")
+ subchild1 = child1.children.create("name" => "subchild1")
+
+ root.parent # => nil
+ child1.parent # => root
+ root.children # => [child1]
+ root.children.first.children.first # => subchild1
+
+ Copyright (c) 2007 David Heinemeier Hansson, released under the MIT license
\ No newline at end of file
vendor/plugins/acts_as_tree/Rakefile +22 -0
@@ @@ -0,0 +1,22 @@
+ require 'rake'
+ require 'rake/testtask'
+ require 'rake/rdoctask'
+
+ desc 'Default: run unit tests.'
+ task :default => :test
+
+ desc 'Test acts_as_tree plugin.'
+ Rake::TestTask.new(:test) do |t|
+ t.libs << 'lib'
+ t.pattern = 'test/**/*_test.rb'
+ t.verbose = true
+ end
+
+ desc 'Generate documentation for acts_as_tree plugin.'
+ Rake::RDocTask.new(:rdoc) do |rdoc|
+ rdoc.rdoc_dir = 'rdoc'
+ rdoc.title = 'acts_as_tree'
+ rdoc.options << '--line-numbers' << '--inline-source'
+ rdoc.rdoc_files.include('README')
+ rdoc.rdoc_files.include('lib/**/*.rb')
+ end
vendor/plugins/acts_as_tree/init.rb +1 -0
@@ @@ -0,0 +1 @@
+ ActiveRecord::Base.send :include, ActiveRecord::Acts::Tree
active_record/acts/tree.rb b/vendor/plugins/acts_as_tree/lib/active_record/acts/tree.rb +96 -0
@@ @@ -0,0 +1,96 @@
+ module ActiveRecord
+ module Acts
+ module Tree
+ def self.included(base)
+ base.extend(ClassMethods)
+ end
+
+ # Specify this +acts_as+ extension if you want to model a tree structure by providing a parent association and a children
+ # association. This requires that you have a foreign key column, which by default is called +parent_id+.
+ #
+ # class Category < ActiveRecord::Base
+ # acts_as_tree :order => "name"
+ # end
+ #
+ # Example:
+ # root
+ # \_ child1
+ # \_ subchild1
+ # \_ subchild2
+ #
+ # root = Category.create("name" => "root")
+ # child1 = root.children.create("name" => "child1")
+ # subchild1 = child1.children.create("name" => "subchild1")
+ #
+ # root.parent # => nil
+ # child1.parent # => root
+ # root.children # => [child1]
+ # root.children.first.children.first # => subchild1
+ #
+ # In addition to the parent and children associations, the following instance methods are added to the class
+ # after calling <tt>acts_as_tree</tt>:
+ # * <tt>siblings</tt> - Returns all the children of the parent, excluding the current node (<tt>[subchild2]</tt> when called on <tt>subchild1</tt>)
+ # * <tt>self_and_siblings</tt> - Returns all the children of the parent, including the current node (<tt>[subchild1, subchild2]</tt> when called on <tt>subchild1</tt>)
+ # * <tt>ancestors</tt> - Returns all the ancestors of the current node (<tt>[child1, root]</tt> when called on <tt>subchild2</tt>)
+ # * <tt>root</tt> - Returns the root of the current node (<tt>root</tt> when called on <tt>subchild2</tt>)
+ module ClassMethods
+ # Configuration options are:
+ #
+ # * <tt>foreign_key</tt> - specifies the column name to use for tracking of the tree (default: +parent_id+)
+ # * <tt>order</tt> - makes it possible to sort the children according to this SQL snippet.
+ # * <tt>counter_cache</tt> - keeps a count in a +children_count+ column if set to +true+ (default: +false+).
+ def acts_as_tree(options = {})
+ configuration = { :foreign_key => "parent_id", :order => nil, :counter_cache => nil }
+ configuration.update(options) if options.is_a?(Hash)
+
+ belongs_to :parent, :class_name => name, :foreign_key => configuration[:foreign_key], :counter_cache => configuration[:counter_cache]
+ has_many :children, :class_name => name, :foreign_key => configuration[:foreign_key], :order => configuration[:order], :dependent => :destroy
+
+ class_eval <<-EOV
+ include ActiveRecord::Acts::Tree::InstanceMethods
+
+ def self.roots
+ find(:all, :conditions => "#{configuration[:foreign_key]} IS NULL", :order => #{configuration[:order].nil? ? "nil" : %Q{"#{configuration[:order]}"}})
+ end
+
+ def self.root
+ find(:first, :conditions => "#{configuration[:foreign_key]} IS NULL", :order => #{configuration[:order].nil? ? "nil" : %Q{"#{configuration[:order]}"}})
+ end
+ EOV
+ end
+ end
+
+ module InstanceMethods
+ # Returns list of ancestors, starting from parent until root.
+ #
+ # subchild1.ancestors # => [child1, root]
+ def ancestors
+ node, nodes = self, []
+ nodes << node = node.parent while node.parent
+ nodes
+ end
+
+ # Returns the root node of the tree.
+ def root
+ node = self
+ node = node.parent while node.parent
+ node
+ end
+
+ # Returns all siblings of the current node.
+ #
+ # subchild1.siblings # => [subchild2]
+ def siblings
+ self_and_siblings - [self]
+ end
+
+ # Returns all siblings and a reference to the current node.
+ #
+ # subchild1.self_and_siblings # => [subchild1, subchild2]
+ def self_and_siblings
+ parent ? parent.children : self.class.roots
+ end
+ end
+ end
+ end
+ end
vendor/plugins/acts_as_tree/test/abstract_unit.rb +0 -0
vendor/plugins/acts_as_tree/test/acts_as_tree_test.rb +219 -0
@@ @@ -0,0 +1,219 @@
+ require 'test/unit'
+
+ require 'rubygems'
+ require 'active_record'
+
+ $:.unshift File.dirname(__FILE__) + '/../lib'
+ require File.dirname(__FILE__) + '/../init'
+
+ class Test::Unit::TestCase
+ def assert_queries(num = 1)
+ $query_count = 0
+ yield
+ ensure
+ assert_equal num, $query_count, "#{$query_count} instead of #{num} queries were executed."
+ end
+
+ def assert_no_queries(&block)
+ assert_queries(0, &block)
+ end
+ end
+
+ ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
+
+ # AR keeps printing annoying schema statements
+ $stdout = StringIO.new
+
+ def setup_db
+ ActiveRecord::Base.logger
+ ActiveRecord::Schema.define(:version => 1) do
+ create_table :mixins do |t|
+ t.column :type, :string
+ t.column :parent_id, :integer
+ end
+ end
+ end
+
+ def teardown_db
+ ActiveRecord::Base.connection.tables.each do |table|
+ ActiveRecord::Base.connection.drop_table(table)
+ end
+ end
+
+ class Mixin < ActiveRecord::Base
+ end
+
+ class TreeMixin < Mixin
+ acts_as_tree :foreign_key => "parent_id", :order => "id"
+ end
+
+ class TreeMixinWithoutOrder < Mixin
+ acts_as_tree :foreign_key => "parent_id"
+ end
+
+ class RecursivelyCascadedTreeMixin < Mixin
+ acts_as_tree :foreign_key => "parent_id"
+ has_one :first_child, :class_name => 'RecursivelyCascadedTreeMixin', :foreign_key => :parent_id
+ end
+
+ class TreeTest < Test::Unit::TestCase
+
+ def setup
+ setup_db
+ @root1 = TreeMixin.create!
+ @root_child1 = TreeMixin.create! :parent_id => @root1.id
+ @child1_child = TreeMixin.create! :parent_id => @root_child1.id
+ @root_child2 = TreeMixin.create! :parent_id => @root1.id
+ @root2 = TreeMixin.create!
+ @root3 = TreeMixin.create!
+ end
+
+ def teardown
+ teardown_db
+ end
+
+ def test_children
+ assert_equal @root1.children, [@root_child1, @root_child2]
+ assert_equal @root_child1.children, [@child1_child]
+ assert_equal @child1_child.children, []
+ assert_equal @root_child2.children, []
+ end
+
+ def test_parent
+ assert_equal @root_child1.parent, @root1
+ assert_equal @root_child1.parent, @root_child2.parent
+ assert_nil @root1.parent
+ end
+
+ def test_delete
+ assert_equal 6, TreeMixin.count
+ @root1.destroy
+ assert_equal 2, TreeMixin.count
+ @root2.destroy
+ @root3.destroy
+ assert_equal 0, TreeMixin.count
+ end
+
+ def test_insert
+ @extra = @root1.children.create
+
+ assert @extra
+
+ assert_equal @extra.parent, @root1
+
+ assert_equal 3, @root1.children.size
+ assert @root1.children.include?(@extra)
+ assert @root1.children.include?(@root_child1)
+ assert @root1.children.include?(@root_child2)
+ end
+
+ def test_ancestors
+ assert_equal [], @root1.ancestors
+ assert_equal [@root1], @root_child1.ancestors
+ assert_equal [@root_child1, @root1], @child1_child.ancestors
+ assert_equal [@root1], @root_child2.ancestors
+ assert_equal [], @root2.ancestors
+ assert_equal [], @root3.ancestors
+ end
+
+ def test_root
+ assert_equal @root1, TreeMixin.root
+ assert_equal @root1, @root1.root
+ assert_equal @root1, @root_child1.root
+ assert_equal @root1, @child1_child.root
+ assert_equal @root1, @root_child2.root
+ assert_equal @root2, @root2.root
+ assert_equal @root3, @root3.root
+ end
+
+ def test_roots
+ assert_equal [@root1, @root2, @root3], TreeMixin.roots
+ end
+
+ def test_siblings
+ assert_equal [@root2, @root3], @root1.siblings
+ assert_equal [@root_child2], @root_child1.siblings
+ assert_equal [], @child1_child.siblings
+ assert_equal [@root_child1], @root_child2.siblings
+ assert_equal [@root1, @root3], @root2.siblings
+ assert_equal [@root1, @root2], @root3.siblings
+ end
+
+ def test_self_and_siblings
+ assert_equal [@root1, @root2, @root3], @root1.self_and_siblings
+ assert_equal [@root_child1, @root_child2], @root_child1.self_and_siblings
+ assert_equal [@child1_child], @child1_child.self_and_siblings
+ assert_equal [@root_child1, @root_child2], @root_child2.self_and_siblings
+ assert_equal [@root1, @root2, @root3], @root2.self_and_siblings
+ assert_equal [@root1, @root2, @root3], @root3.self_and_siblings
+ end
+ end
+
+ class TreeTestWithEagerLoading < Test::Unit::TestCase
+
+ def setup
+ teardown_db
+ setup_db
+ @root1 = TreeMixin.create!
+ @root_child1 = TreeMixin.create! :parent_id => @root1.id
+ @child1_child = TreeMixin.create! :parent_id => @root_child1.id
+ @root_child2 = TreeMixin.create! :parent_id => @root1.id
+ @root2 = TreeMixin.create!
+ @root3 = TreeMixin.create!
+
+ @rc1 = RecursivelyCascadedTreeMixin.create!
+ @rc2 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc1.id
+ @rc3 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc2.id
+ @rc4 = RecursivelyCascadedTreeMixin.create! :parent_id => @rc3.id
+ end
+
+ def teardown
+ teardown_db
+ end
+
+ def test_eager_association_loading
+ roots = TreeMixin.find(:all, :include => :children, :conditions => "mixins.parent_id IS NULL", :order => "mixins.id")
+ assert_equal [@root1, @root2, @root3], roots
+ assert_no_queries do
+ assert_equal 2, roots[0].children.size
+ assert_equal 0, roots[1].children.size
+ assert_equal 0, roots[2].children.size
+ end
+ end
+
+ def test_eager_association_loading_with_recursive_cascading_three_levels_has_many
+ root_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :children => { :children => :children } }, :order => 'mixins.id')
+ assert_equal @rc4, assert_no_queries { root_node.children.first.children.first.children.first }
+ end
+
+ def test_eager_association_loading_with_recursive_cascading_three_levels_has_one
+ root_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :first_child => { :first_child => :first_child } }, :order => 'mixins.id')
+ assert_equal @rc4, assert_no_queries { root_node.first_child.first_child.first_child }
+ end
+
+ def test_eager_association_loading_with_recursive_cascading_three_levels_belongs_to
+ leaf_node = RecursivelyCascadedTreeMixin.find(:first, :include => { :parent => { :parent => :parent } }, :order => 'mixins.id DESC')
+ assert_equal @rc1, assert_no_queries { leaf_node.parent.parent.parent }
+ end
+ end
+
+ class TreeTestWithoutOrder < Test::Unit::TestCase
+
+ def setup
+ setup_db
+ @root1 = TreeMixinWithoutOrder.create!
+ @root2 = TreeMixinWithoutOrder.create!
+ end
+
+ def teardown
+ teardown_db
+ end
+
+ def test_root
+ assert [@root1, @root2].include?(TreeMixinWithoutOrder.root)
+ end
+
+ def test_roots
+ assert_equal [], [@root1, @root2] - TreeMixinWithoutOrder.roots
+ end
+ end
vendor/plugins/acts_as_tree/test/database.yml +0 -0
vendor/plugins/acts_as_tree/test/fixtures/mixin.rb +0 -0
vendor/plugins/acts_as_tree/test/fixtures/mixins.yml +0 -0
vendor/plugins/acts_as_tree/test/schema.rb +0 -0