jodosha-hanoi 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/MIT-LICENSE +20 -0
 - data/README.textile +114 -0
 - data/Rakefile +29 -0
 - data/bin/hanoi +26 -0
 - data/hanoi.gemspec +14 -0
 - data/lib/hanoi.rb +14 -0
 - data/lib/hanoi/browser.rb +28 -0
 - data/lib/hanoi/browsers/firefox.rb +15 -0
 - data/lib/hanoi/browsers/internet_explorer.rb +22 -0
 - data/lib/hanoi/browsers/konqueror.rb +37 -0
 - data/lib/hanoi/browsers/opera.rb +27 -0
 - data/lib/hanoi/browsers/safari.rb +21 -0
 - data/lib/hanoi/javascript_test_task.rb +190 -0
 - data/lib/hanoi/test_case.rb +45 -0
 - data/lib/hanoi/test_results.rb +25 -0
 - data/lib/hanoi/test_suite_results.rb +40 -0
 - data/lib/hanoi/webrick.rb +103 -0
 - data/spec/browser_spec.rb +24 -0
 - data/spec/browsers/firefox_spec.rb +22 -0
 - data/spec/browsers/internet_explorer_spec.rb +22 -0
 - data/spec/browsers/konqueror_spec.rb +18 -0
 - data/spec/browsers/opera_spec.rb +25 -0
 - data/spec/browsers/safari_spec.rb +23 -0
 - data/spec/spec_helper.rb +12 -0
 - data/templates/assets/jquery.js +4376 -0
 - data/templates/assets/testrunner.js +815 -0
 - data/templates/assets/testsuite.css +120 -0
 - data/templates/example_fixtures.html +3 -0
 - data/templates/example_test.js +4 -0
 - data/templates/fresh_rakefile +15 -0
 - data/templates/test_case.erb +31 -0
 - metadata +88 -0
 
| 
         @@ -0,0 +1,45 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class TestCase
         
     | 
| 
      
 2 
     | 
    
         
            +
              attr_reader :path
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              def initialize(path, test_directory)
         
     | 
| 
      
 5 
     | 
    
         
            +
                @path, @test_directory = path, test_directory
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def name
         
     | 
| 
      
 9 
     | 
    
         
            +
                @name ||= File.basename(@path, '.js')
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def target
         
     | 
| 
      
 13 
     | 
    
         
            +
                "/javascripts/#{relative_path.gsub('_test', '')}"
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              def content
         
     | 
| 
      
 17 
     | 
    
         
            +
                File.new(@path).read
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def exist?
         
     | 
| 
      
 21 
     | 
    
         
            +
                File.exist?(path)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def relative_path
         
     | 
| 
      
 25 
     | 
    
         
            +
                @relative_path ||= @path.gsub("#{@test_directory}/", "")
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              def url
         
     | 
| 
      
 29 
     | 
    
         
            +
                "/test/#{relative_path.gsub('.js', '')}.html"
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def create_temp_directory
         
     | 
| 
      
 33 
     | 
    
         
            +
                FileUtils.mkdir_p temp_directory
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              def temp_directory
         
     | 
| 
      
 37 
     | 
    
         
            +
                @temp_directory ||= File.dirname(File.expand_path(@path).gsub(@test_directory, "#{@test_directory}/tmp"))
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def html_fixtures
         
     | 
| 
      
 41 
     | 
    
         
            +
                path = File.dirname(File.expand_path(@path).gsub(@test_directory, "#{@test_directory}/fixtures"))
         
     | 
| 
      
 42 
     | 
    
         
            +
                path = File.expand_path(path + "/#{name.gsub('_test', '_fixtures.html')}")
         
     | 
| 
      
 43 
     | 
    
         
            +
                File.new(path).read rescue ""
         
     | 
| 
      
 44 
     | 
    
         
            +
              end
         
     | 
| 
      
 45 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class TestResults
         
     | 
| 
      
 2 
     | 
    
         
            +
              attr_reader :modules, :tests, :assertions, :failures, :errors, :filename
         
     | 
| 
      
 3 
     | 
    
         
            +
              def initialize(query, filename)
         
     | 
| 
      
 4 
     | 
    
         
            +
                @modules    = query['modules'].to_i
         
     | 
| 
      
 5 
     | 
    
         
            +
                @tests      = query['tests'].to_i
         
     | 
| 
      
 6 
     | 
    
         
            +
                @assertions = query['assertions'].to_i
         
     | 
| 
      
 7 
     | 
    
         
            +
                @failures   = query['failures'].to_i
         
     | 
| 
      
 8 
     | 
    
         
            +
                @errors     = query['errors'].to_i
         
     | 
| 
      
 9 
     | 
    
         
            +
                @filename   = filename
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
              
         
     | 
| 
      
 12 
     | 
    
         
            +
              def error?
         
     | 
| 
      
 13 
     | 
    
         
            +
                @errors > 0
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
              
         
     | 
| 
      
 16 
     | 
    
         
            +
              def failure?
         
     | 
| 
      
 17 
     | 
    
         
            +
                @failures > 0
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
              
         
     | 
| 
      
 20 
     | 
    
         
            +
              def to_s
         
     | 
| 
      
 21 
     | 
    
         
            +
                return "E" if error?
         
     | 
| 
      
 22 
     | 
    
         
            +
                return "F" if failure?
         
     | 
| 
      
 23 
     | 
    
         
            +
                "."
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class TestSuiteResults
         
     | 
| 
      
 2 
     | 
    
         
            +
              def initialize
         
     | 
| 
      
 3 
     | 
    
         
            +
                @modules    = 0
         
     | 
| 
      
 4 
     | 
    
         
            +
                @tests      = 0
         
     | 
| 
      
 5 
     | 
    
         
            +
                @assertions = 0
         
     | 
| 
      
 6 
     | 
    
         
            +
                @failures   = 0
         
     | 
| 
      
 7 
     | 
    
         
            +
                @errors     = 0
         
     | 
| 
      
 8 
     | 
    
         
            +
                @error_files   = []
         
     | 
| 
      
 9 
     | 
    
         
            +
                @failure_files = []
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
              
         
     | 
| 
      
 12 
     | 
    
         
            +
              def <<(result)
         
     | 
| 
      
 13 
     | 
    
         
            +
                @modules    += result.modules
         
     | 
| 
      
 14 
     | 
    
         
            +
                @tests      += result.tests
         
     | 
| 
      
 15 
     | 
    
         
            +
                @assertions += result.assertions
         
     | 
| 
      
 16 
     | 
    
         
            +
                @failures   += result.failures
         
     | 
| 
      
 17 
     | 
    
         
            +
                @errors     += result.errors
         
     | 
| 
      
 18 
     | 
    
         
            +
                @error_files.push(result.filename)   if result.error?
         
     | 
| 
      
 19 
     | 
    
         
            +
                @failure_files.push(result.filename) if result.failure?
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
              
         
     | 
| 
      
 22 
     | 
    
         
            +
              def error?
         
     | 
| 
      
 23 
     | 
    
         
            +
                @errors > 0
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
              
         
     | 
| 
      
 26 
     | 
    
         
            +
              def failure?
         
     | 
| 
      
 27 
     | 
    
         
            +
                @failures > 0
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
              
         
     | 
| 
      
 30 
     | 
    
         
            +
              def to_s
         
     | 
| 
      
 31 
     | 
    
         
            +
                str = ""
         
     | 
| 
      
 32 
     | 
    
         
            +
                str << "\n  Failures: #{@failure_files.join(', ')}" if failure?
         
     | 
| 
      
 33 
     | 
    
         
            +
                str << "\n  Errors:   #{@error_files.join(', ')}" if error?
         
     | 
| 
      
 34 
     | 
    
         
            +
                "#{str}\n#{summary}\n\n"
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
              
         
     | 
| 
      
 37 
     | 
    
         
            +
              def summary
         
     | 
| 
      
 38 
     | 
    
         
            +
                "#{@modules} modules, #{@tests} tests, #{@assertions} assertions, #{@failures} failures, #{@errors} errors."
         
     | 
| 
      
 39 
     | 
    
         
            +
              end
         
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,103 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # shut up, webrick :-)
         
     | 
| 
      
 2 
     | 
    
         
            +
            class ::WEBrick::HTTPServer
         
     | 
| 
      
 3 
     | 
    
         
            +
              def access_log(config, req, res)
         
     | 
| 
      
 4 
     | 
    
         
            +
                # nop
         
     | 
| 
      
 5 
     | 
    
         
            +
              end
         
     | 
| 
      
 6 
     | 
    
         
            +
            end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            class ::WEBrick::BasicLog
         
     | 
| 
      
 9 
     | 
    
         
            +
              def log(level, data)
         
     | 
| 
      
 10 
     | 
    
         
            +
                # nop
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
            end
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            class WEBrick::HTTPResponse
         
     | 
| 
      
 15 
     | 
    
         
            +
              alias send send_response
         
     | 
| 
      
 16 
     | 
    
         
            +
              def send_response(socket)
         
     | 
| 
      
 17 
     | 
    
         
            +
                send(socket) unless fail_silently?
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
              
         
     | 
| 
      
 20 
     | 
    
         
            +
              def fail_silently?
         
     | 
| 
      
 21 
     | 
    
         
            +
                @fail_silently
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
              
         
     | 
| 
      
 24 
     | 
    
         
            +
              def fail_silently
         
     | 
| 
      
 25 
     | 
    
         
            +
                @fail_silently = true
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            class WEBrick::HTTPRequest
         
     | 
| 
      
 30 
     | 
    
         
            +
              def to_json
         
     | 
| 
      
 31 
     | 
    
         
            +
                headers = []
         
     | 
| 
      
 32 
     | 
    
         
            +
                each { |k, v| headers.push "#{k.inspect}: #{v.inspect}" }
         
     | 
| 
      
 33 
     | 
    
         
            +
                headers = "{" << headers.join(', ') << "}"
         
     | 
| 
      
 34 
     | 
    
         
            +
                %({ "headers": #{headers}, "body": #{body.inspect}, "method": #{request_method.inspect} })
         
     | 
| 
      
 35 
     | 
    
         
            +
              end
         
     | 
| 
      
 36 
     | 
    
         
            +
            end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            class WEBrick::HTTPServlet::AbstractServlet
         
     | 
| 
      
 39 
     | 
    
         
            +
              def prevent_caching(res)
         
     | 
| 
      
 40 
     | 
    
         
            +
                res['ETag'] = nil
         
     | 
| 
      
 41 
     | 
    
         
            +
                res['Last-Modified'] = Time.now + 100**4
         
     | 
| 
      
 42 
     | 
    
         
            +
                res['Cache-Control'] = 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
         
     | 
| 
      
 43 
     | 
    
         
            +
                res['Pragma'] = 'no-cache'
         
     | 
| 
      
 44 
     | 
    
         
            +
                res['Expires'] = Time.now - 100**4
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
            end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            class BasicServlet < WEBrick::HTTPServlet::AbstractServlet
         
     | 
| 
      
 49 
     | 
    
         
            +
              def do_GET(req, res)
         
     | 
| 
      
 50 
     | 
    
         
            +
                prevent_caching(res)
         
     | 
| 
      
 51 
     | 
    
         
            +
                res['Content-Type'] = "text/plain"
         
     | 
| 
      
 52 
     | 
    
         
            +
                
         
     | 
| 
      
 53 
     | 
    
         
            +
                req.query.each do |k, v|
         
     | 
| 
      
 54 
     | 
    
         
            +
                  res[k] = v unless k == 'responseBody'
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
                res.body = req.query["responseBody"]
         
     | 
| 
      
 57 
     | 
    
         
            +
                
         
     | 
| 
      
 58 
     | 
    
         
            +
                raise WEBrick::HTTPStatus::OK
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
              
         
     | 
| 
      
 61 
     | 
    
         
            +
              def do_POST(req, res)
         
     | 
| 
      
 62 
     | 
    
         
            +
                do_GET(req, res)
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
            end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            class SlowServlet < BasicServlet
         
     | 
| 
      
 67 
     | 
    
         
            +
              def do_GET(req, res)
         
     | 
| 
      
 68 
     | 
    
         
            +
                sleep(2)
         
     | 
| 
      
 69 
     | 
    
         
            +
                super
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
            end
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
            class DownServlet < BasicServlet
         
     | 
| 
      
 74 
     | 
    
         
            +
              def do_GET(req, res)
         
     | 
| 
      
 75 
     | 
    
         
            +
                res.fail_silently
         
     | 
| 
      
 76 
     | 
    
         
            +
              end
         
     | 
| 
      
 77 
     | 
    
         
            +
            end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
            class InspectionServlet < BasicServlet
         
     | 
| 
      
 80 
     | 
    
         
            +
              def do_GET(req, res)
         
     | 
| 
      
 81 
     | 
    
         
            +
                prevent_caching(res)
         
     | 
| 
      
 82 
     | 
    
         
            +
                res['Content-Type'] = "application/json"
         
     | 
| 
      
 83 
     | 
    
         
            +
                res.body = req.to_json
         
     | 
| 
      
 84 
     | 
    
         
            +
                raise WEBrick::HTTPStatus::OK
         
     | 
| 
      
 85 
     | 
    
         
            +
              end
         
     | 
| 
      
 86 
     | 
    
         
            +
            end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            class NonCachingFileHandler < WEBrick::HTTPServlet::FileHandler
         
     | 
| 
      
 89 
     | 
    
         
            +
              def do_GET(req, res)
         
     | 
| 
      
 90 
     | 
    
         
            +
                super
         
     | 
| 
      
 91 
     | 
    
         
            +
                set_default_content_type(res, req.path)
         
     | 
| 
      
 92 
     | 
    
         
            +
                prevent_caching(res)
         
     | 
| 
      
 93 
     | 
    
         
            +
              end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
              def set_default_content_type(res, path)
         
     | 
| 
      
 96 
     | 
    
         
            +
                res['Content-Type'] = case path
         
     | 
| 
      
 97 
     | 
    
         
            +
                  when /\.js$/   then 'text/javascript'
         
     | 
| 
      
 98 
     | 
    
         
            +
                  when /\.html$/ then 'text/html'
         
     | 
| 
      
 99 
     | 
    
         
            +
                  when /\.css$/  then 'text/css'
         
     | 
| 
      
 100 
     | 
    
         
            +
                  else 'text/plain'
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
              end
         
     | 
| 
      
 103 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,24 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), "spec_helper")
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Browser" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @browser = Browser.new
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "should be supported by default" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                @browser.should be_supported
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              it "should recognize the current platform" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                method = case @browser.host
         
     | 
| 
      
 14 
     | 
    
         
            +
                when /darwin/
         
     | 
| 
      
 15 
     | 
    
         
            +
                  :macos?
         
     | 
| 
      
 16 
     | 
    
         
            +
                when /mswin/
         
     | 
| 
      
 17 
     | 
    
         
            +
                  :windows?
         
     | 
| 
      
 18 
     | 
    
         
            +
                when /linux/
         
     | 
| 
      
 19 
     | 
    
         
            +
                  :linux?
         
     | 
| 
      
 20 
     | 
    
         
            +
                end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                @browser.send(method).should be_true
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), "/../spec_helper")
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Firefox" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @browser = Firefox.new
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "should have a path" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                @browser.path.should == File.join(ENV['ProgramFiles'] || 'c:\Program Files', '\Mozilla Firefox\firefox.exe')
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              # TODO cleanup
         
     | 
| 
      
 13 
     | 
    
         
            +
              it "should visit a given url" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                url = "http://localhost"
         
     | 
| 
      
 15 
     | 
    
         
            +
                command = "open -a Firefox '#{url}'" if @browser.macos?
         
     | 
| 
      
 16 
     | 
    
         
            +
                command = "#{@path} #{url}"          if @browser.windows?
         
     | 
| 
      
 17 
     | 
    
         
            +
                command = "firefox #{url}"           if @browser.linux?
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                Kernel.expects(:system).with(command)
         
     | 
| 
      
 20 
     | 
    
         
            +
                @browser.visit(url)
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), "/../spec_helper")
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "InternetExplorer" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @browser = InternetExplorer.new
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "should be supported on Windows" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                supported = !!(@browser.windows?)
         
     | 
| 
      
 10 
     | 
    
         
            +
                @browser.supported?.should == supported
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              it "should setup" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                if @browser.windows?
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # TODO test on windows
         
     | 
| 
      
 16 
     | 
    
         
            +
                  # Kernel.expects(:require).with('win32ole')
         
     | 
| 
      
 17 
     | 
    
         
            +
                  lambda { @browser.setup }.should_not raise_error
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
              end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              it "should visit a given url"
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,18 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), "/../spec_helper")
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Konqueror" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @browser = Konqueror.new
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "should be supported on Linux" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                supported = !!@browser.linux?
         
     | 
| 
      
 10 
     | 
    
         
            +
                @browser.supported?.should == supported
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              it "should visit a given url" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                url = "http://localhost"
         
     | 
| 
      
 15 
     | 
    
         
            +
                Kernel.expects(:system).with("kfmclient openURL #{url}")
         
     | 
| 
      
 16 
     | 
    
         
            +
                @browser.visit(url)
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), "/../spec_helper")
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Opera" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @browser = Opera.new
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "should have a path" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                @browser.path.should == 'c:\Program Files\Opera\Opera.exe'
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              it "should visit a given url" do
         
     | 
| 
      
 13 
     | 
    
         
            +
                url = "http://localhost"
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                if @browser.macos?
         
     | 
| 
      
 16 
     | 
    
         
            +
                  @browser.expects(:applescript).with('tell application "Opera" to GetURL "' + url + '"')
         
     | 
| 
      
 17 
     | 
    
         
            +
                elsif @browser.windows?
         
     | 
| 
      
 18 
     | 
    
         
            +
                  Kernel.expects(:system).with("#{@browser.path} #{url}")
         
     | 
| 
      
 19 
     | 
    
         
            +
                else
         
     | 
| 
      
 20 
     | 
    
         
            +
                  Kernel.expects(:system).with("opera #{url}")
         
     | 
| 
      
 21 
     | 
    
         
            +
                end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                @browser.visit(url)
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,23 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require File.join(File.dirname(__FILE__), "/../spec_helper")
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe "Safari" do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:each) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                @browser = Safari.new
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              it "should be supported on Windows and MacOS" do
         
     | 
| 
      
 9 
     | 
    
         
            +
                supported = !!(@browser.macos? || @browser.windows?)
         
     | 
| 
      
 10 
     | 
    
         
            +
                @browser.supported?.should == supported
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              it "should setup" do
         
     | 
| 
      
 14 
     | 
    
         
            +
                @browser.expects(:applescript).with('tell application "Safari" to make new document')
         
     | 
| 
      
 15 
     | 
    
         
            +
                @browser.setup
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              it "should visit a given url" do
         
     | 
| 
      
 19 
     | 
    
         
            +
                url = "http://localhost"
         
     | 
| 
      
 20 
     | 
    
         
            +
                @browser.expects(:applescript).with('tell application "Safari" to set URL of front document to "' + url + '"')
         
     | 
| 
      
 21 
     | 
    
         
            +
                @browser.visit(url)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    
| 
         @@ -0,0 +1,4376 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            /*!
         
     | 
| 
      
 2 
     | 
    
         
            +
             * jQuery JavaScript Library v1.3.2
         
     | 
| 
      
 3 
     | 
    
         
            +
             * http://jquery.com/
         
     | 
| 
      
 4 
     | 
    
         
            +
             *
         
     | 
| 
      
 5 
     | 
    
         
            +
             * Copyright (c) 2009 John Resig
         
     | 
| 
      
 6 
     | 
    
         
            +
             * Dual licensed under the MIT and GPL licenses.
         
     | 
| 
      
 7 
     | 
    
         
            +
             * http://docs.jquery.com/License
         
     | 
| 
      
 8 
     | 
    
         
            +
             *
         
     | 
| 
      
 9 
     | 
    
         
            +
             * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
         
     | 
| 
      
 10 
     | 
    
         
            +
             * Revision: 6246
         
     | 
| 
      
 11 
     | 
    
         
            +
             */
         
     | 
| 
      
 12 
     | 
    
         
            +
            (function(){
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            var 
         
     | 
| 
      
 15 
     | 
    
         
            +
            	// Will speed up references to window, and allows munging its name.
         
     | 
| 
      
 16 
     | 
    
         
            +
            	window = this,
         
     | 
| 
      
 17 
     | 
    
         
            +
            	// Will speed up references to undefined, and allows munging its name.
         
     | 
| 
      
 18 
     | 
    
         
            +
            	undefined,
         
     | 
| 
      
 19 
     | 
    
         
            +
            	// Map over jQuery in case of overwrite
         
     | 
| 
      
 20 
     | 
    
         
            +
            	_jQuery = window.jQuery,
         
     | 
| 
      
 21 
     | 
    
         
            +
            	// Map over the $ in case of overwrite
         
     | 
| 
      
 22 
     | 
    
         
            +
            	_$ = window.$,
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            	jQuery = window.jQuery = window.$ = function( selector, context ) {
         
     | 
| 
      
 25 
     | 
    
         
            +
            		// The jQuery object is actually just the init constructor 'enhanced'
         
     | 
| 
      
 26 
     | 
    
         
            +
            		return new jQuery.fn.init( selector, context );
         
     | 
| 
      
 27 
     | 
    
         
            +
            	},
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            	// A simple way to check for HTML strings or ID strings
         
     | 
| 
      
 30 
     | 
    
         
            +
            	// (both of which we optimize for)
         
     | 
| 
      
 31 
     | 
    
         
            +
            	quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,
         
     | 
| 
      
 32 
     | 
    
         
            +
            	// Is it a simple selector
         
     | 
| 
      
 33 
     | 
    
         
            +
            	isSimple = /^.[^:#\[\.,]*$/;
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            jQuery.fn = jQuery.prototype = {
         
     | 
| 
      
 36 
     | 
    
         
            +
            	init: function( selector, context ) {
         
     | 
| 
      
 37 
     | 
    
         
            +
            		// Make sure that a selection was provided
         
     | 
| 
      
 38 
     | 
    
         
            +
            		selector = selector || document;
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            		// Handle $(DOMElement)
         
     | 
| 
      
 41 
     | 
    
         
            +
            		if ( selector.nodeType ) {
         
     | 
| 
      
 42 
     | 
    
         
            +
            			this[0] = selector;
         
     | 
| 
      
 43 
     | 
    
         
            +
            			this.length = 1;
         
     | 
| 
      
 44 
     | 
    
         
            +
            			this.context = selector;
         
     | 
| 
      
 45 
     | 
    
         
            +
            			return this;
         
     | 
| 
      
 46 
     | 
    
         
            +
            		}
         
     | 
| 
      
 47 
     | 
    
         
            +
            		// Handle HTML strings
         
     | 
| 
      
 48 
     | 
    
         
            +
            		if ( typeof selector === "string" ) {
         
     | 
| 
      
 49 
     | 
    
         
            +
            			// Are we dealing with HTML string or an ID?
         
     | 
| 
      
 50 
     | 
    
         
            +
            			var match = quickExpr.exec( selector );
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            			// Verify a match, and that no context was specified for #id
         
     | 
| 
      
 53 
     | 
    
         
            +
            			if ( match && (match[1] || !context) ) {
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            				// HANDLE: $(html) -> $(array)
         
     | 
| 
      
 56 
     | 
    
         
            +
            				if ( match[1] )
         
     | 
| 
      
 57 
     | 
    
         
            +
            					selector = jQuery.clean( [ match[1] ], context );
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            				// HANDLE: $("#id")
         
     | 
| 
      
 60 
     | 
    
         
            +
            				else {
         
     | 
| 
      
 61 
     | 
    
         
            +
            					var elem = document.getElementById( match[3] );
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
            					// Handle the case where IE and Opera return items
         
     | 
| 
      
 64 
     | 
    
         
            +
            					// by name instead of ID
         
     | 
| 
      
 65 
     | 
    
         
            +
            					if ( elem && elem.id != match[3] )
         
     | 
| 
      
 66 
     | 
    
         
            +
            						return jQuery().find( selector );
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
            					// Otherwise, we inject the element directly into the jQuery object
         
     | 
| 
      
 69 
     | 
    
         
            +
            					var ret = jQuery( elem || [] );
         
     | 
| 
      
 70 
     | 
    
         
            +
            					ret.context = document;
         
     | 
| 
      
 71 
     | 
    
         
            +
            					ret.selector = selector;
         
     | 
| 
      
 72 
     | 
    
         
            +
            					return ret;
         
     | 
| 
      
 73 
     | 
    
         
            +
            				}
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
            			// HANDLE: $(expr, [context])
         
     | 
| 
      
 76 
     | 
    
         
            +
            			// (which is just equivalent to: $(content).find(expr)
         
     | 
| 
      
 77 
     | 
    
         
            +
            			} else
         
     | 
| 
      
 78 
     | 
    
         
            +
            				return jQuery( context ).find( selector );
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            		// HANDLE: $(function)
         
     | 
| 
      
 81 
     | 
    
         
            +
            		// Shortcut for document ready
         
     | 
| 
      
 82 
     | 
    
         
            +
            		} else if ( jQuery.isFunction( selector ) )
         
     | 
| 
      
 83 
     | 
    
         
            +
            			return jQuery( document ).ready( selector );
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
            		// Make sure that old selector state is passed along
         
     | 
| 
      
 86 
     | 
    
         
            +
            		if ( selector.selector && selector.context ) {
         
     | 
| 
      
 87 
     | 
    
         
            +
            			this.selector = selector.selector;
         
     | 
| 
      
 88 
     | 
    
         
            +
            			this.context = selector.context;
         
     | 
| 
      
 89 
     | 
    
         
            +
            		}
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            		return this.setArray(jQuery.isArray( selector ) ?
         
     | 
| 
      
 92 
     | 
    
         
            +
            			selector :
         
     | 
| 
      
 93 
     | 
    
         
            +
            			jQuery.makeArray(selector));
         
     | 
| 
      
 94 
     | 
    
         
            +
            	},
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
            	// Start with an empty selector
         
     | 
| 
      
 97 
     | 
    
         
            +
            	selector: "",
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            	// The current version of jQuery being used
         
     | 
| 
      
 100 
     | 
    
         
            +
            	jquery: "1.3.2",
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
            	// The number of elements contained in the matched element set
         
     | 
| 
      
 103 
     | 
    
         
            +
            	size: function() {
         
     | 
| 
      
 104 
     | 
    
         
            +
            		return this.length;
         
     | 
| 
      
 105 
     | 
    
         
            +
            	},
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
            	// Get the Nth element in the matched element set OR
         
     | 
| 
      
 108 
     | 
    
         
            +
            	// Get the whole matched element set as a clean array
         
     | 
| 
      
 109 
     | 
    
         
            +
            	get: function( num ) {
         
     | 
| 
      
 110 
     | 
    
         
            +
            		return num === undefined ?
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            			// Return a 'clean' array
         
     | 
| 
      
 113 
     | 
    
         
            +
            			Array.prototype.slice.call( this ) :
         
     | 
| 
      
 114 
     | 
    
         
            +
             
     | 
| 
      
 115 
     | 
    
         
            +
            			// Return just the object
         
     | 
| 
      
 116 
     | 
    
         
            +
            			this[ num ];
         
     | 
| 
      
 117 
     | 
    
         
            +
            	},
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
            	// Take an array of elements and push it onto the stack
         
     | 
| 
      
 120 
     | 
    
         
            +
            	// (returning the new matched element set)
         
     | 
| 
      
 121 
     | 
    
         
            +
            	pushStack: function( elems, name, selector ) {
         
     | 
| 
      
 122 
     | 
    
         
            +
            		// Build a new jQuery matched element set
         
     | 
| 
      
 123 
     | 
    
         
            +
            		var ret = jQuery( elems );
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
            		// Add the old object onto the stack (as a reference)
         
     | 
| 
      
 126 
     | 
    
         
            +
            		ret.prevObject = this;
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            		ret.context = this.context;
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
            		if ( name === "find" )
         
     | 
| 
      
 131 
     | 
    
         
            +
            			ret.selector = this.selector + (this.selector ? " " : "") + selector;
         
     | 
| 
      
 132 
     | 
    
         
            +
            		else if ( name )
         
     | 
| 
      
 133 
     | 
    
         
            +
            			ret.selector = this.selector + "." + name + "(" + selector + ")";
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
            		// Return the newly-formed element set
         
     | 
| 
      
 136 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 137 
     | 
    
         
            +
            	},
         
     | 
| 
      
 138 
     | 
    
         
            +
             
     | 
| 
      
 139 
     | 
    
         
            +
            	// Force the current matched set of elements to become
         
     | 
| 
      
 140 
     | 
    
         
            +
            	// the specified array of elements (destroying the stack in the process)
         
     | 
| 
      
 141 
     | 
    
         
            +
            	// You should use pushStack() in order to do this, but maintain the stack
         
     | 
| 
      
 142 
     | 
    
         
            +
            	setArray: function( elems ) {
         
     | 
| 
      
 143 
     | 
    
         
            +
            		// Resetting the length to 0, then using the native Array push
         
     | 
| 
      
 144 
     | 
    
         
            +
            		// is a super-fast way to populate an object with array-like properties
         
     | 
| 
      
 145 
     | 
    
         
            +
            		this.length = 0;
         
     | 
| 
      
 146 
     | 
    
         
            +
            		Array.prototype.push.apply( this, elems );
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
            		return this;
         
     | 
| 
      
 149 
     | 
    
         
            +
            	},
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
            	// Execute a callback for every element in the matched set.
         
     | 
| 
      
 152 
     | 
    
         
            +
            	// (You can seed the arguments with an array of args, but this is
         
     | 
| 
      
 153 
     | 
    
         
            +
            	// only used internally.)
         
     | 
| 
      
 154 
     | 
    
         
            +
            	each: function( callback, args ) {
         
     | 
| 
      
 155 
     | 
    
         
            +
            		return jQuery.each( this, callback, args );
         
     | 
| 
      
 156 
     | 
    
         
            +
            	},
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
            	// Determine the position of an element within
         
     | 
| 
      
 159 
     | 
    
         
            +
            	// the matched set of elements
         
     | 
| 
      
 160 
     | 
    
         
            +
            	index: function( elem ) {
         
     | 
| 
      
 161 
     | 
    
         
            +
            		// Locate the position of the desired element
         
     | 
| 
      
 162 
     | 
    
         
            +
            		return jQuery.inArray(
         
     | 
| 
      
 163 
     | 
    
         
            +
            			// If it receives a jQuery object, the first element is used
         
     | 
| 
      
 164 
     | 
    
         
            +
            			elem && elem.jquery ? elem[0] : elem
         
     | 
| 
      
 165 
     | 
    
         
            +
            		, this );
         
     | 
| 
      
 166 
     | 
    
         
            +
            	},
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
            	attr: function( name, value, type ) {
         
     | 
| 
      
 169 
     | 
    
         
            +
            		var options = name;
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
            		// Look for the case where we're accessing a style value
         
     | 
| 
      
 172 
     | 
    
         
            +
            		if ( typeof name === "string" )
         
     | 
| 
      
 173 
     | 
    
         
            +
            			if ( value === undefined )
         
     | 
| 
      
 174 
     | 
    
         
            +
            				return this[0] && jQuery[ type || "attr" ]( this[0], name );
         
     | 
| 
      
 175 
     | 
    
         
            +
             
     | 
| 
      
 176 
     | 
    
         
            +
            			else {
         
     | 
| 
      
 177 
     | 
    
         
            +
            				options = {};
         
     | 
| 
      
 178 
     | 
    
         
            +
            				options[ name ] = value;
         
     | 
| 
      
 179 
     | 
    
         
            +
            			}
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
            		// Check to see if we're setting style values
         
     | 
| 
      
 182 
     | 
    
         
            +
            		return this.each(function(i){
         
     | 
| 
      
 183 
     | 
    
         
            +
            			// Set all the styles
         
     | 
| 
      
 184 
     | 
    
         
            +
            			for ( name in options )
         
     | 
| 
      
 185 
     | 
    
         
            +
            				jQuery.attr(
         
     | 
| 
      
 186 
     | 
    
         
            +
            					type ?
         
     | 
| 
      
 187 
     | 
    
         
            +
            						this.style :
         
     | 
| 
      
 188 
     | 
    
         
            +
            						this,
         
     | 
| 
      
 189 
     | 
    
         
            +
            					name, jQuery.prop( this, options[ name ], type, i, name )
         
     | 
| 
      
 190 
     | 
    
         
            +
            				);
         
     | 
| 
      
 191 
     | 
    
         
            +
            		});
         
     | 
| 
      
 192 
     | 
    
         
            +
            	},
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
            	css: function( key, value ) {
         
     | 
| 
      
 195 
     | 
    
         
            +
            		// ignore negative width and height values
         
     | 
| 
      
 196 
     | 
    
         
            +
            		if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
         
     | 
| 
      
 197 
     | 
    
         
            +
            			value = undefined;
         
     | 
| 
      
 198 
     | 
    
         
            +
            		return this.attr( key, value, "curCSS" );
         
     | 
| 
      
 199 
     | 
    
         
            +
            	},
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
            	text: function( text ) {
         
     | 
| 
      
 202 
     | 
    
         
            +
            		if ( typeof text !== "object" && text != null )
         
     | 
| 
      
 203 
     | 
    
         
            +
            			return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
         
     | 
| 
      
 204 
     | 
    
         
            +
             
     | 
| 
      
 205 
     | 
    
         
            +
            		var ret = "";
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
            		jQuery.each( text || this, function(){
         
     | 
| 
      
 208 
     | 
    
         
            +
            			jQuery.each( this.childNodes, function(){
         
     | 
| 
      
 209 
     | 
    
         
            +
            				if ( this.nodeType != 8 )
         
     | 
| 
      
 210 
     | 
    
         
            +
            					ret += this.nodeType != 1 ?
         
     | 
| 
      
 211 
     | 
    
         
            +
            						this.nodeValue :
         
     | 
| 
      
 212 
     | 
    
         
            +
            						jQuery.fn.text( [ this ] );
         
     | 
| 
      
 213 
     | 
    
         
            +
            			});
         
     | 
| 
      
 214 
     | 
    
         
            +
            		});
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 217 
     | 
    
         
            +
            	},
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
            	wrapAll: function( html ) {
         
     | 
| 
      
 220 
     | 
    
         
            +
            		if ( this[0] ) {
         
     | 
| 
      
 221 
     | 
    
         
            +
            			// The elements to wrap the target around
         
     | 
| 
      
 222 
     | 
    
         
            +
            			var wrap = jQuery( html, this[0].ownerDocument ).clone();
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
            			if ( this[0].parentNode )
         
     | 
| 
      
 225 
     | 
    
         
            +
            				wrap.insertBefore( this[0] );
         
     | 
| 
      
 226 
     | 
    
         
            +
             
     | 
| 
      
 227 
     | 
    
         
            +
            			wrap.map(function(){
         
     | 
| 
      
 228 
     | 
    
         
            +
            				var elem = this;
         
     | 
| 
      
 229 
     | 
    
         
            +
             
     | 
| 
      
 230 
     | 
    
         
            +
            				while ( elem.firstChild )
         
     | 
| 
      
 231 
     | 
    
         
            +
            					elem = elem.firstChild;
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
            				return elem;
         
     | 
| 
      
 234 
     | 
    
         
            +
            			}).append(this);
         
     | 
| 
      
 235 
     | 
    
         
            +
            		}
         
     | 
| 
      
 236 
     | 
    
         
            +
             
     | 
| 
      
 237 
     | 
    
         
            +
            		return this;
         
     | 
| 
      
 238 
     | 
    
         
            +
            	},
         
     | 
| 
      
 239 
     | 
    
         
            +
             
     | 
| 
      
 240 
     | 
    
         
            +
            	wrapInner: function( html ) {
         
     | 
| 
      
 241 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 242 
     | 
    
         
            +
            			jQuery( this ).contents().wrapAll( html );
         
     | 
| 
      
 243 
     | 
    
         
            +
            		});
         
     | 
| 
      
 244 
     | 
    
         
            +
            	},
         
     | 
| 
      
 245 
     | 
    
         
            +
             
     | 
| 
      
 246 
     | 
    
         
            +
            	wrap: function( html ) {
         
     | 
| 
      
 247 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 248 
     | 
    
         
            +
            			jQuery( this ).wrapAll( html );
         
     | 
| 
      
 249 
     | 
    
         
            +
            		});
         
     | 
| 
      
 250 
     | 
    
         
            +
            	},
         
     | 
| 
      
 251 
     | 
    
         
            +
             
     | 
| 
      
 252 
     | 
    
         
            +
            	append: function() {
         
     | 
| 
      
 253 
     | 
    
         
            +
            		return this.domManip(arguments, true, function(elem){
         
     | 
| 
      
 254 
     | 
    
         
            +
            			if (this.nodeType == 1)
         
     | 
| 
      
 255 
     | 
    
         
            +
            				this.appendChild( elem );
         
     | 
| 
      
 256 
     | 
    
         
            +
            		});
         
     | 
| 
      
 257 
     | 
    
         
            +
            	},
         
     | 
| 
      
 258 
     | 
    
         
            +
             
     | 
| 
      
 259 
     | 
    
         
            +
            	prepend: function() {
         
     | 
| 
      
 260 
     | 
    
         
            +
            		return this.domManip(arguments, true, function(elem){
         
     | 
| 
      
 261 
     | 
    
         
            +
            			if (this.nodeType == 1)
         
     | 
| 
      
 262 
     | 
    
         
            +
            				this.insertBefore( elem, this.firstChild );
         
     | 
| 
      
 263 
     | 
    
         
            +
            		});
         
     | 
| 
      
 264 
     | 
    
         
            +
            	},
         
     | 
| 
      
 265 
     | 
    
         
            +
             
     | 
| 
      
 266 
     | 
    
         
            +
            	before: function() {
         
     | 
| 
      
 267 
     | 
    
         
            +
            		return this.domManip(arguments, false, function(elem){
         
     | 
| 
      
 268 
     | 
    
         
            +
            			this.parentNode.insertBefore( elem, this );
         
     | 
| 
      
 269 
     | 
    
         
            +
            		});
         
     | 
| 
      
 270 
     | 
    
         
            +
            	},
         
     | 
| 
      
 271 
     | 
    
         
            +
             
     | 
| 
      
 272 
     | 
    
         
            +
            	after: function() {
         
     | 
| 
      
 273 
     | 
    
         
            +
            		return this.domManip(arguments, false, function(elem){
         
     | 
| 
      
 274 
     | 
    
         
            +
            			this.parentNode.insertBefore( elem, this.nextSibling );
         
     | 
| 
      
 275 
     | 
    
         
            +
            		});
         
     | 
| 
      
 276 
     | 
    
         
            +
            	},
         
     | 
| 
      
 277 
     | 
    
         
            +
             
     | 
| 
      
 278 
     | 
    
         
            +
            	end: function() {
         
     | 
| 
      
 279 
     | 
    
         
            +
            		return this.prevObject || jQuery( [] );
         
     | 
| 
      
 280 
     | 
    
         
            +
            	},
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
            	// For internal use only.
         
     | 
| 
      
 283 
     | 
    
         
            +
            	// Behaves like an Array's method, not like a jQuery method.
         
     | 
| 
      
 284 
     | 
    
         
            +
            	push: [].push,
         
     | 
| 
      
 285 
     | 
    
         
            +
            	sort: [].sort,
         
     | 
| 
      
 286 
     | 
    
         
            +
            	splice: [].splice,
         
     | 
| 
      
 287 
     | 
    
         
            +
             
     | 
| 
      
 288 
     | 
    
         
            +
            	find: function( selector ) {
         
     | 
| 
      
 289 
     | 
    
         
            +
            		if ( this.length === 1 ) {
         
     | 
| 
      
 290 
     | 
    
         
            +
            			var ret = this.pushStack( [], "find", selector );
         
     | 
| 
      
 291 
     | 
    
         
            +
            			ret.length = 0;
         
     | 
| 
      
 292 
     | 
    
         
            +
            			jQuery.find( selector, this[0], ret );
         
     | 
| 
      
 293 
     | 
    
         
            +
            			return ret;
         
     | 
| 
      
 294 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 295 
     | 
    
         
            +
            			return this.pushStack( jQuery.unique(jQuery.map(this, function(elem){
         
     | 
| 
      
 296 
     | 
    
         
            +
            				return jQuery.find( selector, elem );
         
     | 
| 
      
 297 
     | 
    
         
            +
            			})), "find", selector );
         
     | 
| 
      
 298 
     | 
    
         
            +
            		}
         
     | 
| 
      
 299 
     | 
    
         
            +
            	},
         
     | 
| 
      
 300 
     | 
    
         
            +
             
     | 
| 
      
 301 
     | 
    
         
            +
            	clone: function( events ) {
         
     | 
| 
      
 302 
     | 
    
         
            +
            		// Do the clone
         
     | 
| 
      
 303 
     | 
    
         
            +
            		var ret = this.map(function(){
         
     | 
| 
      
 304 
     | 
    
         
            +
            			if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
         
     | 
| 
      
 305 
     | 
    
         
            +
            				// IE copies events bound via attachEvent when
         
     | 
| 
      
 306 
     | 
    
         
            +
            				// using cloneNode. Calling detachEvent on the
         
     | 
| 
      
 307 
     | 
    
         
            +
            				// clone will also remove the events from the orignal
         
     | 
| 
      
 308 
     | 
    
         
            +
            				// In order to get around this, we use innerHTML.
         
     | 
| 
      
 309 
     | 
    
         
            +
            				// Unfortunately, this means some modifications to
         
     | 
| 
      
 310 
     | 
    
         
            +
            				// attributes in IE that are actually only stored
         
     | 
| 
      
 311 
     | 
    
         
            +
            				// as properties will not be copied (such as the
         
     | 
| 
      
 312 
     | 
    
         
            +
            				// the name attribute on an input).
         
     | 
| 
      
 313 
     | 
    
         
            +
            				var html = this.outerHTML;
         
     | 
| 
      
 314 
     | 
    
         
            +
            				if ( !html ) {
         
     | 
| 
      
 315 
     | 
    
         
            +
            					var div = this.ownerDocument.createElement("div");
         
     | 
| 
      
 316 
     | 
    
         
            +
            					div.appendChild( this.cloneNode(true) );
         
     | 
| 
      
 317 
     | 
    
         
            +
            					html = div.innerHTML;
         
     | 
| 
      
 318 
     | 
    
         
            +
            				}
         
     | 
| 
      
 319 
     | 
    
         
            +
             
     | 
| 
      
 320 
     | 
    
         
            +
            				return jQuery.clean([html.replace(/ jQuery\d+="(?:\d+|null)"/g, "").replace(/^\s*/, "")])[0];
         
     | 
| 
      
 321 
     | 
    
         
            +
            			} else
         
     | 
| 
      
 322 
     | 
    
         
            +
            				return this.cloneNode(true);
         
     | 
| 
      
 323 
     | 
    
         
            +
            		});
         
     | 
| 
      
 324 
     | 
    
         
            +
             
     | 
| 
      
 325 
     | 
    
         
            +
            		// Copy the events from the original to the clone
         
     | 
| 
      
 326 
     | 
    
         
            +
            		if ( events === true ) {
         
     | 
| 
      
 327 
     | 
    
         
            +
            			var orig = this.find("*").andSelf(), i = 0;
         
     | 
| 
      
 328 
     | 
    
         
            +
             
     | 
| 
      
 329 
     | 
    
         
            +
            			ret.find("*").andSelf().each(function(){
         
     | 
| 
      
 330 
     | 
    
         
            +
            				if ( this.nodeName !== orig[i].nodeName )
         
     | 
| 
      
 331 
     | 
    
         
            +
            					return;
         
     | 
| 
      
 332 
     | 
    
         
            +
             
     | 
| 
      
 333 
     | 
    
         
            +
            				var events = jQuery.data( orig[i], "events" );
         
     | 
| 
      
 334 
     | 
    
         
            +
             
     | 
| 
      
 335 
     | 
    
         
            +
            				for ( var type in events ) {
         
     | 
| 
      
 336 
     | 
    
         
            +
            					for ( var handler in events[ type ] ) {
         
     | 
| 
      
 337 
     | 
    
         
            +
            						jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
         
     | 
| 
      
 338 
     | 
    
         
            +
            					}
         
     | 
| 
      
 339 
     | 
    
         
            +
            				}
         
     | 
| 
      
 340 
     | 
    
         
            +
             
     | 
| 
      
 341 
     | 
    
         
            +
            				i++;
         
     | 
| 
      
 342 
     | 
    
         
            +
            			});
         
     | 
| 
      
 343 
     | 
    
         
            +
            		}
         
     | 
| 
      
 344 
     | 
    
         
            +
             
     | 
| 
      
 345 
     | 
    
         
            +
            		// Return the cloned set
         
     | 
| 
      
 346 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 347 
     | 
    
         
            +
            	},
         
     | 
| 
      
 348 
     | 
    
         
            +
             
     | 
| 
      
 349 
     | 
    
         
            +
            	filter: function( selector ) {
         
     | 
| 
      
 350 
     | 
    
         
            +
            		return this.pushStack(
         
     | 
| 
      
 351 
     | 
    
         
            +
            			jQuery.isFunction( selector ) &&
         
     | 
| 
      
 352 
     | 
    
         
            +
            			jQuery.grep(this, function(elem, i){
         
     | 
| 
      
 353 
     | 
    
         
            +
            				return selector.call( elem, i );
         
     | 
| 
      
 354 
     | 
    
         
            +
            			}) ||
         
     | 
| 
      
 355 
     | 
    
         
            +
             
     | 
| 
      
 356 
     | 
    
         
            +
            			jQuery.multiFilter( selector, jQuery.grep(this, function(elem){
         
     | 
| 
      
 357 
     | 
    
         
            +
            				return elem.nodeType === 1;
         
     | 
| 
      
 358 
     | 
    
         
            +
            			}) ), "filter", selector );
         
     | 
| 
      
 359 
     | 
    
         
            +
            	},
         
     | 
| 
      
 360 
     | 
    
         
            +
             
     | 
| 
      
 361 
     | 
    
         
            +
            	closest: function( selector ) {
         
     | 
| 
      
 362 
     | 
    
         
            +
            		var pos = jQuery.expr.match.POS.test( selector ) ? jQuery(selector) : null,
         
     | 
| 
      
 363 
     | 
    
         
            +
            			closer = 0;
         
     | 
| 
      
 364 
     | 
    
         
            +
             
     | 
| 
      
 365 
     | 
    
         
            +
            		return this.map(function(){
         
     | 
| 
      
 366 
     | 
    
         
            +
            			var cur = this;
         
     | 
| 
      
 367 
     | 
    
         
            +
            			while ( cur && cur.ownerDocument ) {
         
     | 
| 
      
 368 
     | 
    
         
            +
            				if ( pos ? pos.index(cur) > -1 : jQuery(cur).is(selector) ) {
         
     | 
| 
      
 369 
     | 
    
         
            +
            					jQuery.data(cur, "closest", closer);
         
     | 
| 
      
 370 
     | 
    
         
            +
            					return cur;
         
     | 
| 
      
 371 
     | 
    
         
            +
            				}
         
     | 
| 
      
 372 
     | 
    
         
            +
            				cur = cur.parentNode;
         
     | 
| 
      
 373 
     | 
    
         
            +
            				closer++;
         
     | 
| 
      
 374 
     | 
    
         
            +
            			}
         
     | 
| 
      
 375 
     | 
    
         
            +
            		});
         
     | 
| 
      
 376 
     | 
    
         
            +
            	},
         
     | 
| 
      
 377 
     | 
    
         
            +
             
     | 
| 
      
 378 
     | 
    
         
            +
            	not: function( selector ) {
         
     | 
| 
      
 379 
     | 
    
         
            +
            		if ( typeof selector === "string" )
         
     | 
| 
      
 380 
     | 
    
         
            +
            			// test special case where just one selector is passed in
         
     | 
| 
      
 381 
     | 
    
         
            +
            			if ( isSimple.test( selector ) )
         
     | 
| 
      
 382 
     | 
    
         
            +
            				return this.pushStack( jQuery.multiFilter( selector, this, true ), "not", selector );
         
     | 
| 
      
 383 
     | 
    
         
            +
            			else
         
     | 
| 
      
 384 
     | 
    
         
            +
            				selector = jQuery.multiFilter( selector, this );
         
     | 
| 
      
 385 
     | 
    
         
            +
             
     | 
| 
      
 386 
     | 
    
         
            +
            		var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
         
     | 
| 
      
 387 
     | 
    
         
            +
            		return this.filter(function() {
         
     | 
| 
      
 388 
     | 
    
         
            +
            			return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
         
     | 
| 
      
 389 
     | 
    
         
            +
            		});
         
     | 
| 
      
 390 
     | 
    
         
            +
            	},
         
     | 
| 
      
 391 
     | 
    
         
            +
             
     | 
| 
      
 392 
     | 
    
         
            +
            	add: function( selector ) {
         
     | 
| 
      
 393 
     | 
    
         
            +
            		return this.pushStack( jQuery.unique( jQuery.merge(
         
     | 
| 
      
 394 
     | 
    
         
            +
            			this.get(),
         
     | 
| 
      
 395 
     | 
    
         
            +
            			typeof selector === "string" ?
         
     | 
| 
      
 396 
     | 
    
         
            +
            				jQuery( selector ) :
         
     | 
| 
      
 397 
     | 
    
         
            +
            				jQuery.makeArray( selector )
         
     | 
| 
      
 398 
     | 
    
         
            +
            		)));
         
     | 
| 
      
 399 
     | 
    
         
            +
            	},
         
     | 
| 
      
 400 
     | 
    
         
            +
             
     | 
| 
      
 401 
     | 
    
         
            +
            	is: function( selector ) {
         
     | 
| 
      
 402 
     | 
    
         
            +
            		return !!selector && jQuery.multiFilter( selector, this ).length > 0;
         
     | 
| 
      
 403 
     | 
    
         
            +
            	},
         
     | 
| 
      
 404 
     | 
    
         
            +
             
     | 
| 
      
 405 
     | 
    
         
            +
            	hasClass: function( selector ) {
         
     | 
| 
      
 406 
     | 
    
         
            +
            		return !!selector && this.is( "." + selector );
         
     | 
| 
      
 407 
     | 
    
         
            +
            	},
         
     | 
| 
      
 408 
     | 
    
         
            +
             
     | 
| 
      
 409 
     | 
    
         
            +
            	val: function( value ) {
         
     | 
| 
      
 410 
     | 
    
         
            +
            		if ( value === undefined ) {			
         
     | 
| 
      
 411 
     | 
    
         
            +
            			var elem = this[0];
         
     | 
| 
      
 412 
     | 
    
         
            +
             
     | 
| 
      
 413 
     | 
    
         
            +
            			if ( elem ) {
         
     | 
| 
      
 414 
     | 
    
         
            +
            				if( jQuery.nodeName( elem, 'option' ) )
         
     | 
| 
      
 415 
     | 
    
         
            +
            					return (elem.attributes.value || {}).specified ? elem.value : elem.text;
         
     | 
| 
      
 416 
     | 
    
         
            +
            				
         
     | 
| 
      
 417 
     | 
    
         
            +
            				// We need to handle select boxes special
         
     | 
| 
      
 418 
     | 
    
         
            +
            				if ( jQuery.nodeName( elem, "select" ) ) {
         
     | 
| 
      
 419 
     | 
    
         
            +
            					var index = elem.selectedIndex,
         
     | 
| 
      
 420 
     | 
    
         
            +
            						values = [],
         
     | 
| 
      
 421 
     | 
    
         
            +
            						options = elem.options,
         
     | 
| 
      
 422 
     | 
    
         
            +
            						one = elem.type == "select-one";
         
     | 
| 
      
 423 
     | 
    
         
            +
             
     | 
| 
      
 424 
     | 
    
         
            +
            					// Nothing was selected
         
     | 
| 
      
 425 
     | 
    
         
            +
            					if ( index < 0 )
         
     | 
| 
      
 426 
     | 
    
         
            +
            						return null;
         
     | 
| 
      
 427 
     | 
    
         
            +
             
     | 
| 
      
 428 
     | 
    
         
            +
            					// Loop through all the selected options
         
     | 
| 
      
 429 
     | 
    
         
            +
            					for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
         
     | 
| 
      
 430 
     | 
    
         
            +
            						var option = options[ i ];
         
     | 
| 
      
 431 
     | 
    
         
            +
             
     | 
| 
      
 432 
     | 
    
         
            +
            						if ( option.selected ) {
         
     | 
| 
      
 433 
     | 
    
         
            +
            							// Get the specifc value for the option
         
     | 
| 
      
 434 
     | 
    
         
            +
            							value = jQuery(option).val();
         
     | 
| 
      
 435 
     | 
    
         
            +
             
     | 
| 
      
 436 
     | 
    
         
            +
            							// We don't need an array for one selects
         
     | 
| 
      
 437 
     | 
    
         
            +
            							if ( one )
         
     | 
| 
      
 438 
     | 
    
         
            +
            								return value;
         
     | 
| 
      
 439 
     | 
    
         
            +
             
     | 
| 
      
 440 
     | 
    
         
            +
            							// Multi-Selects return an array
         
     | 
| 
      
 441 
     | 
    
         
            +
            							values.push( value );
         
     | 
| 
      
 442 
     | 
    
         
            +
            						}
         
     | 
| 
      
 443 
     | 
    
         
            +
            					}
         
     | 
| 
      
 444 
     | 
    
         
            +
             
     | 
| 
      
 445 
     | 
    
         
            +
            					return values;				
         
     | 
| 
      
 446 
     | 
    
         
            +
            				}
         
     | 
| 
      
 447 
     | 
    
         
            +
             
     | 
| 
      
 448 
     | 
    
         
            +
            				// Everything else, we just grab the value
         
     | 
| 
      
 449 
     | 
    
         
            +
            				return (elem.value || "").replace(/\r/g, "");
         
     | 
| 
      
 450 
     | 
    
         
            +
             
     | 
| 
      
 451 
     | 
    
         
            +
            			}
         
     | 
| 
      
 452 
     | 
    
         
            +
             
     | 
| 
      
 453 
     | 
    
         
            +
            			return undefined;
         
     | 
| 
      
 454 
     | 
    
         
            +
            		}
         
     | 
| 
      
 455 
     | 
    
         
            +
             
     | 
| 
      
 456 
     | 
    
         
            +
            		if ( typeof value === "number" )
         
     | 
| 
      
 457 
     | 
    
         
            +
            			value += '';
         
     | 
| 
      
 458 
     | 
    
         
            +
             
     | 
| 
      
 459 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 460 
     | 
    
         
            +
            			if ( this.nodeType != 1 )
         
     | 
| 
      
 461 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 462 
     | 
    
         
            +
             
     | 
| 
      
 463 
     | 
    
         
            +
            			if ( jQuery.isArray(value) && /radio|checkbox/.test( this.type ) )
         
     | 
| 
      
 464 
     | 
    
         
            +
            				this.checked = (jQuery.inArray(this.value, value) >= 0 ||
         
     | 
| 
      
 465 
     | 
    
         
            +
            					jQuery.inArray(this.name, value) >= 0);
         
     | 
| 
      
 466 
     | 
    
         
            +
             
     | 
| 
      
 467 
     | 
    
         
            +
            			else if ( jQuery.nodeName( this, "select" ) ) {
         
     | 
| 
      
 468 
     | 
    
         
            +
            				var values = jQuery.makeArray(value);
         
     | 
| 
      
 469 
     | 
    
         
            +
             
     | 
| 
      
 470 
     | 
    
         
            +
            				jQuery( "option", this ).each(function(){
         
     | 
| 
      
 471 
     | 
    
         
            +
            					this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
         
     | 
| 
      
 472 
     | 
    
         
            +
            						jQuery.inArray( this.text, values ) >= 0);
         
     | 
| 
      
 473 
     | 
    
         
            +
            				});
         
     | 
| 
      
 474 
     | 
    
         
            +
             
     | 
| 
      
 475 
     | 
    
         
            +
            				if ( !values.length )
         
     | 
| 
      
 476 
     | 
    
         
            +
            					this.selectedIndex = -1;
         
     | 
| 
      
 477 
     | 
    
         
            +
             
     | 
| 
      
 478 
     | 
    
         
            +
            			} else
         
     | 
| 
      
 479 
     | 
    
         
            +
            				this.value = value;
         
     | 
| 
      
 480 
     | 
    
         
            +
            		});
         
     | 
| 
      
 481 
     | 
    
         
            +
            	},
         
     | 
| 
      
 482 
     | 
    
         
            +
             
     | 
| 
      
 483 
     | 
    
         
            +
            	html: function( value ) {
         
     | 
| 
      
 484 
     | 
    
         
            +
            		return value === undefined ?
         
     | 
| 
      
 485 
     | 
    
         
            +
            			(this[0] ?
         
     | 
| 
      
 486 
     | 
    
         
            +
            				this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g, "") :
         
     | 
| 
      
 487 
     | 
    
         
            +
            				null) :
         
     | 
| 
      
 488 
     | 
    
         
            +
            			this.empty().append( value );
         
     | 
| 
      
 489 
     | 
    
         
            +
            	},
         
     | 
| 
      
 490 
     | 
    
         
            +
             
     | 
| 
      
 491 
     | 
    
         
            +
            	replaceWith: function( value ) {
         
     | 
| 
      
 492 
     | 
    
         
            +
            		return this.after( value ).remove();
         
     | 
| 
      
 493 
     | 
    
         
            +
            	},
         
     | 
| 
      
 494 
     | 
    
         
            +
             
     | 
| 
      
 495 
     | 
    
         
            +
            	eq: function( i ) {
         
     | 
| 
      
 496 
     | 
    
         
            +
            		return this.slice( i, +i + 1 );
         
     | 
| 
      
 497 
     | 
    
         
            +
            	},
         
     | 
| 
      
 498 
     | 
    
         
            +
             
     | 
| 
      
 499 
     | 
    
         
            +
            	slice: function() {
         
     | 
| 
      
 500 
     | 
    
         
            +
            		return this.pushStack( Array.prototype.slice.apply( this, arguments ),
         
     | 
| 
      
 501 
     | 
    
         
            +
            			"slice", Array.prototype.slice.call(arguments).join(",") );
         
     | 
| 
      
 502 
     | 
    
         
            +
            	},
         
     | 
| 
      
 503 
     | 
    
         
            +
             
     | 
| 
      
 504 
     | 
    
         
            +
            	map: function( callback ) {
         
     | 
| 
      
 505 
     | 
    
         
            +
            		return this.pushStack( jQuery.map(this, function(elem, i){
         
     | 
| 
      
 506 
     | 
    
         
            +
            			return callback.call( elem, i, elem );
         
     | 
| 
      
 507 
     | 
    
         
            +
            		}));
         
     | 
| 
      
 508 
     | 
    
         
            +
            	},
         
     | 
| 
      
 509 
     | 
    
         
            +
             
     | 
| 
      
 510 
     | 
    
         
            +
            	andSelf: function() {
         
     | 
| 
      
 511 
     | 
    
         
            +
            		return this.add( this.prevObject );
         
     | 
| 
      
 512 
     | 
    
         
            +
            	},
         
     | 
| 
      
 513 
     | 
    
         
            +
             
     | 
| 
      
 514 
     | 
    
         
            +
            	domManip: function( args, table, callback ) {
         
     | 
| 
      
 515 
     | 
    
         
            +
            		if ( this[0] ) {
         
     | 
| 
      
 516 
     | 
    
         
            +
            			var fragment = (this[0].ownerDocument || this[0]).createDocumentFragment(),
         
     | 
| 
      
 517 
     | 
    
         
            +
            				scripts = jQuery.clean( args, (this[0].ownerDocument || this[0]), fragment ),
         
     | 
| 
      
 518 
     | 
    
         
            +
            				first = fragment.firstChild;
         
     | 
| 
      
 519 
     | 
    
         
            +
             
     | 
| 
      
 520 
     | 
    
         
            +
            			if ( first )
         
     | 
| 
      
 521 
     | 
    
         
            +
            				for ( var i = 0, l = this.length; i < l; i++ )
         
     | 
| 
      
 522 
     | 
    
         
            +
            					callback.call( root(this[i], first), this.length > 1 || i > 0 ?
         
     | 
| 
      
 523 
     | 
    
         
            +
            							fragment.cloneNode(true) : fragment );
         
     | 
| 
      
 524 
     | 
    
         
            +
            		
         
     | 
| 
      
 525 
     | 
    
         
            +
            			if ( scripts )
         
     | 
| 
      
 526 
     | 
    
         
            +
            				jQuery.each( scripts, evalScript );
         
     | 
| 
      
 527 
     | 
    
         
            +
            		}
         
     | 
| 
      
 528 
     | 
    
         
            +
             
     | 
| 
      
 529 
     | 
    
         
            +
            		return this;
         
     | 
| 
      
 530 
     | 
    
         
            +
            		
         
     | 
| 
      
 531 
     | 
    
         
            +
            		function root( elem, cur ) {
         
     | 
| 
      
 532 
     | 
    
         
            +
            			return table && jQuery.nodeName(elem, "table") && jQuery.nodeName(cur, "tr") ?
         
     | 
| 
      
 533 
     | 
    
         
            +
            				(elem.getElementsByTagName("tbody")[0] ||
         
     | 
| 
      
 534 
     | 
    
         
            +
            				elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
         
     | 
| 
      
 535 
     | 
    
         
            +
            				elem;
         
     | 
| 
      
 536 
     | 
    
         
            +
            		}
         
     | 
| 
      
 537 
     | 
    
         
            +
            	}
         
     | 
| 
      
 538 
     | 
    
         
            +
            };
         
     | 
| 
      
 539 
     | 
    
         
            +
             
     | 
| 
      
 540 
     | 
    
         
            +
            // Give the init function the jQuery prototype for later instantiation
         
     | 
| 
      
 541 
     | 
    
         
            +
            jQuery.fn.init.prototype = jQuery.fn;
         
     | 
| 
      
 542 
     | 
    
         
            +
             
     | 
| 
      
 543 
     | 
    
         
            +
            function evalScript( i, elem ) {
         
     | 
| 
      
 544 
     | 
    
         
            +
            	if ( elem.src )
         
     | 
| 
      
 545 
     | 
    
         
            +
            		jQuery.ajax({
         
     | 
| 
      
 546 
     | 
    
         
            +
            			url: elem.src,
         
     | 
| 
      
 547 
     | 
    
         
            +
            			async: false,
         
     | 
| 
      
 548 
     | 
    
         
            +
            			dataType: "script"
         
     | 
| 
      
 549 
     | 
    
         
            +
            		});
         
     | 
| 
      
 550 
     | 
    
         
            +
             
     | 
| 
      
 551 
     | 
    
         
            +
            	else
         
     | 
| 
      
 552 
     | 
    
         
            +
            		jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
         
     | 
| 
      
 553 
     | 
    
         
            +
             
     | 
| 
      
 554 
     | 
    
         
            +
            	if ( elem.parentNode )
         
     | 
| 
      
 555 
     | 
    
         
            +
            		elem.parentNode.removeChild( elem );
         
     | 
| 
      
 556 
     | 
    
         
            +
            }
         
     | 
| 
      
 557 
     | 
    
         
            +
             
     | 
| 
      
 558 
     | 
    
         
            +
            function now(){
         
     | 
| 
      
 559 
     | 
    
         
            +
            	return +new Date;
         
     | 
| 
      
 560 
     | 
    
         
            +
            }
         
     | 
| 
      
 561 
     | 
    
         
            +
             
     | 
| 
      
 562 
     | 
    
         
            +
            jQuery.extend = jQuery.fn.extend = function() {
         
     | 
| 
      
 563 
     | 
    
         
            +
            	// copy reference to target object
         
     | 
| 
      
 564 
     | 
    
         
            +
            	var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options;
         
     | 
| 
      
 565 
     | 
    
         
            +
             
     | 
| 
      
 566 
     | 
    
         
            +
            	// Handle a deep copy situation
         
     | 
| 
      
 567 
     | 
    
         
            +
            	if ( typeof target === "boolean" ) {
         
     | 
| 
      
 568 
     | 
    
         
            +
            		deep = target;
         
     | 
| 
      
 569 
     | 
    
         
            +
            		target = arguments[1] || {};
         
     | 
| 
      
 570 
     | 
    
         
            +
            		// skip the boolean and the target
         
     | 
| 
      
 571 
     | 
    
         
            +
            		i = 2;
         
     | 
| 
      
 572 
     | 
    
         
            +
            	}
         
     | 
| 
      
 573 
     | 
    
         
            +
             
     | 
| 
      
 574 
     | 
    
         
            +
            	// Handle case when target is a string or something (possible in deep copy)
         
     | 
| 
      
 575 
     | 
    
         
            +
            	if ( typeof target !== "object" && !jQuery.isFunction(target) )
         
     | 
| 
      
 576 
     | 
    
         
            +
            		target = {};
         
     | 
| 
      
 577 
     | 
    
         
            +
             
     | 
| 
      
 578 
     | 
    
         
            +
            	// extend jQuery itself if only one argument is passed
         
     | 
| 
      
 579 
     | 
    
         
            +
            	if ( length == i ) {
         
     | 
| 
      
 580 
     | 
    
         
            +
            		target = this;
         
     | 
| 
      
 581 
     | 
    
         
            +
            		--i;
         
     | 
| 
      
 582 
     | 
    
         
            +
            	}
         
     | 
| 
      
 583 
     | 
    
         
            +
             
     | 
| 
      
 584 
     | 
    
         
            +
            	for ( ; i < length; i++ )
         
     | 
| 
      
 585 
     | 
    
         
            +
            		// Only deal with non-null/undefined values
         
     | 
| 
      
 586 
     | 
    
         
            +
            		if ( (options = arguments[ i ]) != null )
         
     | 
| 
      
 587 
     | 
    
         
            +
            			// Extend the base object
         
     | 
| 
      
 588 
     | 
    
         
            +
            			for ( var name in options ) {
         
     | 
| 
      
 589 
     | 
    
         
            +
            				var src = target[ name ], copy = options[ name ];
         
     | 
| 
      
 590 
     | 
    
         
            +
             
     | 
| 
      
 591 
     | 
    
         
            +
            				// Prevent never-ending loop
         
     | 
| 
      
 592 
     | 
    
         
            +
            				if ( target === copy )
         
     | 
| 
      
 593 
     | 
    
         
            +
            					continue;
         
     | 
| 
      
 594 
     | 
    
         
            +
             
     | 
| 
      
 595 
     | 
    
         
            +
            				// Recurse if we're merging object values
         
     | 
| 
      
 596 
     | 
    
         
            +
            				if ( deep && copy && typeof copy === "object" && !copy.nodeType )
         
     | 
| 
      
 597 
     | 
    
         
            +
            					target[ name ] = jQuery.extend( deep, 
         
     | 
| 
      
 598 
     | 
    
         
            +
            						// Never move original objects, clone them
         
     | 
| 
      
 599 
     | 
    
         
            +
            						src || ( copy.length != null ? [ ] : { } )
         
     | 
| 
      
 600 
     | 
    
         
            +
            					, copy );
         
     | 
| 
      
 601 
     | 
    
         
            +
             
     | 
| 
      
 602 
     | 
    
         
            +
            				// Don't bring in undefined values
         
     | 
| 
      
 603 
     | 
    
         
            +
            				else if ( copy !== undefined )
         
     | 
| 
      
 604 
     | 
    
         
            +
            					target[ name ] = copy;
         
     | 
| 
      
 605 
     | 
    
         
            +
             
     | 
| 
      
 606 
     | 
    
         
            +
            			}
         
     | 
| 
      
 607 
     | 
    
         
            +
             
     | 
| 
      
 608 
     | 
    
         
            +
            	// Return the modified object
         
     | 
| 
      
 609 
     | 
    
         
            +
            	return target;
         
     | 
| 
      
 610 
     | 
    
         
            +
            };
         
     | 
| 
      
 611 
     | 
    
         
            +
             
     | 
| 
      
 612 
     | 
    
         
            +
            // exclude the following css properties to add px
         
     | 
| 
      
 613 
     | 
    
         
            +
            var	exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i,
         
     | 
| 
      
 614 
     | 
    
         
            +
            	// cache defaultView
         
     | 
| 
      
 615 
     | 
    
         
            +
            	defaultView = document.defaultView || {},
         
     | 
| 
      
 616 
     | 
    
         
            +
            	toString = Object.prototype.toString;
         
     | 
| 
      
 617 
     | 
    
         
            +
             
     | 
| 
      
 618 
     | 
    
         
            +
            jQuery.extend({
         
     | 
| 
      
 619 
     | 
    
         
            +
            	noConflict: function( deep ) {
         
     | 
| 
      
 620 
     | 
    
         
            +
            		window.$ = _$;
         
     | 
| 
      
 621 
     | 
    
         
            +
             
     | 
| 
      
 622 
     | 
    
         
            +
            		if ( deep )
         
     | 
| 
      
 623 
     | 
    
         
            +
            			window.jQuery = _jQuery;
         
     | 
| 
      
 624 
     | 
    
         
            +
             
     | 
| 
      
 625 
     | 
    
         
            +
            		return jQuery;
         
     | 
| 
      
 626 
     | 
    
         
            +
            	},
         
     | 
| 
      
 627 
     | 
    
         
            +
             
     | 
| 
      
 628 
     | 
    
         
            +
            	// See test/unit/core.js for details concerning isFunction.
         
     | 
| 
      
 629 
     | 
    
         
            +
            	// Since version 1.3, DOM methods and functions like alert
         
     | 
| 
      
 630 
     | 
    
         
            +
            	// aren't supported. They return false on IE (#2968).
         
     | 
| 
      
 631 
     | 
    
         
            +
            	isFunction: function( obj ) {
         
     | 
| 
      
 632 
     | 
    
         
            +
            		return toString.call(obj) === "[object Function]";
         
     | 
| 
      
 633 
     | 
    
         
            +
            	},
         
     | 
| 
      
 634 
     | 
    
         
            +
             
     | 
| 
      
 635 
     | 
    
         
            +
            	isArray: function( obj ) {
         
     | 
| 
      
 636 
     | 
    
         
            +
            		return toString.call(obj) === "[object Array]";
         
     | 
| 
      
 637 
     | 
    
         
            +
            	},
         
     | 
| 
      
 638 
     | 
    
         
            +
             
     | 
| 
      
 639 
     | 
    
         
            +
            	// check if an element is in a (or is an) XML document
         
     | 
| 
      
 640 
     | 
    
         
            +
            	isXMLDoc: function( elem ) {
         
     | 
| 
      
 641 
     | 
    
         
            +
            		return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
         
     | 
| 
      
 642 
     | 
    
         
            +
            			!!elem.ownerDocument && jQuery.isXMLDoc( elem.ownerDocument );
         
     | 
| 
      
 643 
     | 
    
         
            +
            	},
         
     | 
| 
      
 644 
     | 
    
         
            +
             
     | 
| 
      
 645 
     | 
    
         
            +
            	// Evalulates a script in a global context
         
     | 
| 
      
 646 
     | 
    
         
            +
            	globalEval: function( data ) {
         
     | 
| 
      
 647 
     | 
    
         
            +
            		if ( data && /\S/.test(data) ) {
         
     | 
| 
      
 648 
     | 
    
         
            +
            			// Inspired by code by Andrea Giammarchi
         
     | 
| 
      
 649 
     | 
    
         
            +
            			// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
         
     | 
| 
      
 650 
     | 
    
         
            +
            			var head = document.getElementsByTagName("head")[0] || document.documentElement,
         
     | 
| 
      
 651 
     | 
    
         
            +
            				script = document.createElement("script");
         
     | 
| 
      
 652 
     | 
    
         
            +
             
     | 
| 
      
 653 
     | 
    
         
            +
            			script.type = "text/javascript";
         
     | 
| 
      
 654 
     | 
    
         
            +
            			if ( jQuery.support.scriptEval )
         
     | 
| 
      
 655 
     | 
    
         
            +
            				script.appendChild( document.createTextNode( data ) );
         
     | 
| 
      
 656 
     | 
    
         
            +
            			else
         
     | 
| 
      
 657 
     | 
    
         
            +
            				script.text = data;
         
     | 
| 
      
 658 
     | 
    
         
            +
             
     | 
| 
      
 659 
     | 
    
         
            +
            			// Use insertBefore instead of appendChild  to circumvent an IE6 bug.
         
     | 
| 
      
 660 
     | 
    
         
            +
            			// This arises when a base node is used (#2709).
         
     | 
| 
      
 661 
     | 
    
         
            +
            			head.insertBefore( script, head.firstChild );
         
     | 
| 
      
 662 
     | 
    
         
            +
            			head.removeChild( script );
         
     | 
| 
      
 663 
     | 
    
         
            +
            		}
         
     | 
| 
      
 664 
     | 
    
         
            +
            	},
         
     | 
| 
      
 665 
     | 
    
         
            +
             
     | 
| 
      
 666 
     | 
    
         
            +
            	nodeName: function( elem, name ) {
         
     | 
| 
      
 667 
     | 
    
         
            +
            		return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase();
         
     | 
| 
      
 668 
     | 
    
         
            +
            	},
         
     | 
| 
      
 669 
     | 
    
         
            +
             
     | 
| 
      
 670 
     | 
    
         
            +
            	// args is for internal usage only
         
     | 
| 
      
 671 
     | 
    
         
            +
            	each: function( object, callback, args ) {
         
     | 
| 
      
 672 
     | 
    
         
            +
            		var name, i = 0, length = object.length;
         
     | 
| 
      
 673 
     | 
    
         
            +
             
     | 
| 
      
 674 
     | 
    
         
            +
            		if ( args ) {
         
     | 
| 
      
 675 
     | 
    
         
            +
            			if ( length === undefined ) {
         
     | 
| 
      
 676 
     | 
    
         
            +
            				for ( name in object )
         
     | 
| 
      
 677 
     | 
    
         
            +
            					if ( callback.apply( object[ name ], args ) === false )
         
     | 
| 
      
 678 
     | 
    
         
            +
            						break;
         
     | 
| 
      
 679 
     | 
    
         
            +
            			} else
         
     | 
| 
      
 680 
     | 
    
         
            +
            				for ( ; i < length; )
         
     | 
| 
      
 681 
     | 
    
         
            +
            					if ( callback.apply( object[ i++ ], args ) === false )
         
     | 
| 
      
 682 
     | 
    
         
            +
            						break;
         
     | 
| 
      
 683 
     | 
    
         
            +
             
     | 
| 
      
 684 
     | 
    
         
            +
            		// A special, fast, case for the most common use of each
         
     | 
| 
      
 685 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 686 
     | 
    
         
            +
            			if ( length === undefined ) {
         
     | 
| 
      
 687 
     | 
    
         
            +
            				for ( name in object )
         
     | 
| 
      
 688 
     | 
    
         
            +
            					if ( callback.call( object[ name ], name, object[ name ] ) === false )
         
     | 
| 
      
 689 
     | 
    
         
            +
            						break;
         
     | 
| 
      
 690 
     | 
    
         
            +
            			} else
         
     | 
| 
      
 691 
     | 
    
         
            +
            				for ( var value = object[0];
         
     | 
| 
      
 692 
     | 
    
         
            +
            					i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
         
     | 
| 
      
 693 
     | 
    
         
            +
            		}
         
     | 
| 
      
 694 
     | 
    
         
            +
             
     | 
| 
      
 695 
     | 
    
         
            +
            		return object;
         
     | 
| 
      
 696 
     | 
    
         
            +
            	},
         
     | 
| 
      
 697 
     | 
    
         
            +
             
     | 
| 
      
 698 
     | 
    
         
            +
            	prop: function( elem, value, type, i, name ) {
         
     | 
| 
      
 699 
     | 
    
         
            +
            		// Handle executable functions
         
     | 
| 
      
 700 
     | 
    
         
            +
            		if ( jQuery.isFunction( value ) )
         
     | 
| 
      
 701 
     | 
    
         
            +
            			value = value.call( elem, i );
         
     | 
| 
      
 702 
     | 
    
         
            +
             
     | 
| 
      
 703 
     | 
    
         
            +
            		// Handle passing in a number to a CSS property
         
     | 
| 
      
 704 
     | 
    
         
            +
            		return typeof value === "number" && type == "curCSS" && !exclude.test( name ) ?
         
     | 
| 
      
 705 
     | 
    
         
            +
            			value + "px" :
         
     | 
| 
      
 706 
     | 
    
         
            +
            			value;
         
     | 
| 
      
 707 
     | 
    
         
            +
            	},
         
     | 
| 
      
 708 
     | 
    
         
            +
             
     | 
| 
      
 709 
     | 
    
         
            +
            	className: {
         
     | 
| 
      
 710 
     | 
    
         
            +
            		// internal only, use addClass("class")
         
     | 
| 
      
 711 
     | 
    
         
            +
            		add: function( elem, classNames ) {
         
     | 
| 
      
 712 
     | 
    
         
            +
            			jQuery.each((classNames || "").split(/\s+/), function(i, className){
         
     | 
| 
      
 713 
     | 
    
         
            +
            				if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
         
     | 
| 
      
 714 
     | 
    
         
            +
            					elem.className += (elem.className ? " " : "") + className;
         
     | 
| 
      
 715 
     | 
    
         
            +
            			});
         
     | 
| 
      
 716 
     | 
    
         
            +
            		},
         
     | 
| 
      
 717 
     | 
    
         
            +
             
     | 
| 
      
 718 
     | 
    
         
            +
            		// internal only, use removeClass("class")
         
     | 
| 
      
 719 
     | 
    
         
            +
            		remove: function( elem, classNames ) {
         
     | 
| 
      
 720 
     | 
    
         
            +
            			if (elem.nodeType == 1)
         
     | 
| 
      
 721 
     | 
    
         
            +
            				elem.className = classNames !== undefined ?
         
     | 
| 
      
 722 
     | 
    
         
            +
            					jQuery.grep(elem.className.split(/\s+/), function(className){
         
     | 
| 
      
 723 
     | 
    
         
            +
            						return !jQuery.className.has( classNames, className );
         
     | 
| 
      
 724 
     | 
    
         
            +
            					}).join(" ") :
         
     | 
| 
      
 725 
     | 
    
         
            +
            					"";
         
     | 
| 
      
 726 
     | 
    
         
            +
            		},
         
     | 
| 
      
 727 
     | 
    
         
            +
             
     | 
| 
      
 728 
     | 
    
         
            +
            		// internal only, use hasClass("class")
         
     | 
| 
      
 729 
     | 
    
         
            +
            		has: function( elem, className ) {
         
     | 
| 
      
 730 
     | 
    
         
            +
            			return elem && jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1;
         
     | 
| 
      
 731 
     | 
    
         
            +
            		}
         
     | 
| 
      
 732 
     | 
    
         
            +
            	},
         
     | 
| 
      
 733 
     | 
    
         
            +
             
     | 
| 
      
 734 
     | 
    
         
            +
            	// A method for quickly swapping in/out CSS properties to get correct calculations
         
     | 
| 
      
 735 
     | 
    
         
            +
            	swap: function( elem, options, callback ) {
         
     | 
| 
      
 736 
     | 
    
         
            +
            		var old = {};
         
     | 
| 
      
 737 
     | 
    
         
            +
            		// Remember the old values, and insert the new ones
         
     | 
| 
      
 738 
     | 
    
         
            +
            		for ( var name in options ) {
         
     | 
| 
      
 739 
     | 
    
         
            +
            			old[ name ] = elem.style[ name ];
         
     | 
| 
      
 740 
     | 
    
         
            +
            			elem.style[ name ] = options[ name ];
         
     | 
| 
      
 741 
     | 
    
         
            +
            		}
         
     | 
| 
      
 742 
     | 
    
         
            +
             
     | 
| 
      
 743 
     | 
    
         
            +
            		callback.call( elem );
         
     | 
| 
      
 744 
     | 
    
         
            +
             
     | 
| 
      
 745 
     | 
    
         
            +
            		// Revert the old values
         
     | 
| 
      
 746 
     | 
    
         
            +
            		for ( var name in options )
         
     | 
| 
      
 747 
     | 
    
         
            +
            			elem.style[ name ] = old[ name ];
         
     | 
| 
      
 748 
     | 
    
         
            +
            	},
         
     | 
| 
      
 749 
     | 
    
         
            +
             
     | 
| 
      
 750 
     | 
    
         
            +
            	css: function( elem, name, force, extra ) {
         
     | 
| 
      
 751 
     | 
    
         
            +
            		if ( name == "width" || name == "height" ) {
         
     | 
| 
      
 752 
     | 
    
         
            +
            			var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
         
     | 
| 
      
 753 
     | 
    
         
            +
             
     | 
| 
      
 754 
     | 
    
         
            +
            			function getWH() {
         
     | 
| 
      
 755 
     | 
    
         
            +
            				val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
         
     | 
| 
      
 756 
     | 
    
         
            +
             
     | 
| 
      
 757 
     | 
    
         
            +
            				if ( extra === "border" )
         
     | 
| 
      
 758 
     | 
    
         
            +
            					return;
         
     | 
| 
      
 759 
     | 
    
         
            +
             
     | 
| 
      
 760 
     | 
    
         
            +
            				jQuery.each( which, function() {
         
     | 
| 
      
 761 
     | 
    
         
            +
            					if ( !extra )
         
     | 
| 
      
 762 
     | 
    
         
            +
            						val -= parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
         
     | 
| 
      
 763 
     | 
    
         
            +
            					if ( extra === "margin" )
         
     | 
| 
      
 764 
     | 
    
         
            +
            						val += parseFloat(jQuery.curCSS( elem, "margin" + this, true)) || 0;
         
     | 
| 
      
 765 
     | 
    
         
            +
            					else
         
     | 
| 
      
 766 
     | 
    
         
            +
            						val -= parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
         
     | 
| 
      
 767 
     | 
    
         
            +
            				});
         
     | 
| 
      
 768 
     | 
    
         
            +
            			}
         
     | 
| 
      
 769 
     | 
    
         
            +
             
     | 
| 
      
 770 
     | 
    
         
            +
            			if ( elem.offsetWidth !== 0 )
         
     | 
| 
      
 771 
     | 
    
         
            +
            				getWH();
         
     | 
| 
      
 772 
     | 
    
         
            +
            			else
         
     | 
| 
      
 773 
     | 
    
         
            +
            				jQuery.swap( elem, props, getWH );
         
     | 
| 
      
 774 
     | 
    
         
            +
             
     | 
| 
      
 775 
     | 
    
         
            +
            			return Math.max(0, Math.round(val));
         
     | 
| 
      
 776 
     | 
    
         
            +
            		}
         
     | 
| 
      
 777 
     | 
    
         
            +
             
     | 
| 
      
 778 
     | 
    
         
            +
            		return jQuery.curCSS( elem, name, force );
         
     | 
| 
      
 779 
     | 
    
         
            +
            	},
         
     | 
| 
      
 780 
     | 
    
         
            +
             
     | 
| 
      
 781 
     | 
    
         
            +
            	curCSS: function( elem, name, force ) {
         
     | 
| 
      
 782 
     | 
    
         
            +
            		var ret, style = elem.style;
         
     | 
| 
      
 783 
     | 
    
         
            +
             
     | 
| 
      
 784 
     | 
    
         
            +
            		// We need to handle opacity special in IE
         
     | 
| 
      
 785 
     | 
    
         
            +
            		if ( name == "opacity" && !jQuery.support.opacity ) {
         
     | 
| 
      
 786 
     | 
    
         
            +
            			ret = jQuery.attr( style, "opacity" );
         
     | 
| 
      
 787 
     | 
    
         
            +
             
     | 
| 
      
 788 
     | 
    
         
            +
            			return ret == "" ?
         
     | 
| 
      
 789 
     | 
    
         
            +
            				"1" :
         
     | 
| 
      
 790 
     | 
    
         
            +
            				ret;
         
     | 
| 
      
 791 
     | 
    
         
            +
            		}
         
     | 
| 
      
 792 
     | 
    
         
            +
             
     | 
| 
      
 793 
     | 
    
         
            +
            		// Make sure we're using the right name for getting the float value
         
     | 
| 
      
 794 
     | 
    
         
            +
            		if ( name.match( /float/i ) )
         
     | 
| 
      
 795 
     | 
    
         
            +
            			name = styleFloat;
         
     | 
| 
      
 796 
     | 
    
         
            +
             
     | 
| 
      
 797 
     | 
    
         
            +
            		if ( !force && style && style[ name ] )
         
     | 
| 
      
 798 
     | 
    
         
            +
            			ret = style[ name ];
         
     | 
| 
      
 799 
     | 
    
         
            +
             
     | 
| 
      
 800 
     | 
    
         
            +
            		else if ( defaultView.getComputedStyle ) {
         
     | 
| 
      
 801 
     | 
    
         
            +
             
     | 
| 
      
 802 
     | 
    
         
            +
            			// Only "float" is needed here
         
     | 
| 
      
 803 
     | 
    
         
            +
            			if ( name.match( /float/i ) )
         
     | 
| 
      
 804 
     | 
    
         
            +
            				name = "float";
         
     | 
| 
      
 805 
     | 
    
         
            +
             
     | 
| 
      
 806 
     | 
    
         
            +
            			name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase();
         
     | 
| 
      
 807 
     | 
    
         
            +
             
     | 
| 
      
 808 
     | 
    
         
            +
            			var computedStyle = defaultView.getComputedStyle( elem, null );
         
     | 
| 
      
 809 
     | 
    
         
            +
             
     | 
| 
      
 810 
     | 
    
         
            +
            			if ( computedStyle )
         
     | 
| 
      
 811 
     | 
    
         
            +
            				ret = computedStyle.getPropertyValue( name );
         
     | 
| 
      
 812 
     | 
    
         
            +
             
     | 
| 
      
 813 
     | 
    
         
            +
            			// We should always get a number back from opacity
         
     | 
| 
      
 814 
     | 
    
         
            +
            			if ( name == "opacity" && ret == "" )
         
     | 
| 
      
 815 
     | 
    
         
            +
            				ret = "1";
         
     | 
| 
      
 816 
     | 
    
         
            +
             
     | 
| 
      
 817 
     | 
    
         
            +
            		} else if ( elem.currentStyle ) {
         
     | 
| 
      
 818 
     | 
    
         
            +
            			var camelCase = name.replace(/\-(\w)/g, function(all, letter){
         
     | 
| 
      
 819 
     | 
    
         
            +
            				return letter.toUpperCase();
         
     | 
| 
      
 820 
     | 
    
         
            +
            			});
         
     | 
| 
      
 821 
     | 
    
         
            +
             
     | 
| 
      
 822 
     | 
    
         
            +
            			ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ];
         
     | 
| 
      
 823 
     | 
    
         
            +
             
     | 
| 
      
 824 
     | 
    
         
            +
            			// From the awesome hack by Dean Edwards
         
     | 
| 
      
 825 
     | 
    
         
            +
            			// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
         
     | 
| 
      
 826 
     | 
    
         
            +
             
     | 
| 
      
 827 
     | 
    
         
            +
            			// If we're not dealing with a regular pixel number
         
     | 
| 
      
 828 
     | 
    
         
            +
            			// but a number that has a weird ending, we need to convert it to pixels
         
     | 
| 
      
 829 
     | 
    
         
            +
            			if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) {
         
     | 
| 
      
 830 
     | 
    
         
            +
            				// Remember the original values
         
     | 
| 
      
 831 
     | 
    
         
            +
            				var left = style.left, rsLeft = elem.runtimeStyle.left;
         
     | 
| 
      
 832 
     | 
    
         
            +
             
     | 
| 
      
 833 
     | 
    
         
            +
            				// Put in the new values to get a computed value out
         
     | 
| 
      
 834 
     | 
    
         
            +
            				elem.runtimeStyle.left = elem.currentStyle.left;
         
     | 
| 
      
 835 
     | 
    
         
            +
            				style.left = ret || 0;
         
     | 
| 
      
 836 
     | 
    
         
            +
            				ret = style.pixelLeft + "px";
         
     | 
| 
      
 837 
     | 
    
         
            +
             
     | 
| 
      
 838 
     | 
    
         
            +
            				// Revert the changed values
         
     | 
| 
      
 839 
     | 
    
         
            +
            				style.left = left;
         
     | 
| 
      
 840 
     | 
    
         
            +
            				elem.runtimeStyle.left = rsLeft;
         
     | 
| 
      
 841 
     | 
    
         
            +
            			}
         
     | 
| 
      
 842 
     | 
    
         
            +
            		}
         
     | 
| 
      
 843 
     | 
    
         
            +
             
     | 
| 
      
 844 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 845 
     | 
    
         
            +
            	},
         
     | 
| 
      
 846 
     | 
    
         
            +
             
     | 
| 
      
 847 
     | 
    
         
            +
            	clean: function( elems, context, fragment ) {
         
     | 
| 
      
 848 
     | 
    
         
            +
            		context = context || document;
         
     | 
| 
      
 849 
     | 
    
         
            +
             
     | 
| 
      
 850 
     | 
    
         
            +
            		// !context.createElement fails in IE with an error but returns typeof 'object'
         
     | 
| 
      
 851 
     | 
    
         
            +
            		if ( typeof context.createElement === "undefined" )
         
     | 
| 
      
 852 
     | 
    
         
            +
            			context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
         
     | 
| 
      
 853 
     | 
    
         
            +
             
     | 
| 
      
 854 
     | 
    
         
            +
            		// If a single string is passed in and it's a single tag
         
     | 
| 
      
 855 
     | 
    
         
            +
            		// just do a createElement and skip the rest
         
     | 
| 
      
 856 
     | 
    
         
            +
            		if ( !fragment && elems.length === 1 && typeof elems[0] === "string" ) {
         
     | 
| 
      
 857 
     | 
    
         
            +
            			var match = /^<(\w+)\s*\/?>$/.exec(elems[0]);
         
     | 
| 
      
 858 
     | 
    
         
            +
            			if ( match )
         
     | 
| 
      
 859 
     | 
    
         
            +
            				return [ context.createElement( match[1] ) ];
         
     | 
| 
      
 860 
     | 
    
         
            +
            		}
         
     | 
| 
      
 861 
     | 
    
         
            +
             
     | 
| 
      
 862 
     | 
    
         
            +
            		var ret = [], scripts = [], div = context.createElement("div");
         
     | 
| 
      
 863 
     | 
    
         
            +
             
     | 
| 
      
 864 
     | 
    
         
            +
            		jQuery.each(elems, function(i, elem){
         
     | 
| 
      
 865 
     | 
    
         
            +
            			if ( typeof elem === "number" )
         
     | 
| 
      
 866 
     | 
    
         
            +
            				elem += '';
         
     | 
| 
      
 867 
     | 
    
         
            +
             
     | 
| 
      
 868 
     | 
    
         
            +
            			if ( !elem )
         
     | 
| 
      
 869 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 870 
     | 
    
         
            +
             
     | 
| 
      
 871 
     | 
    
         
            +
            			// Convert html string into DOM nodes
         
     | 
| 
      
 872 
     | 
    
         
            +
            			if ( typeof elem === "string" ) {
         
     | 
| 
      
 873 
     | 
    
         
            +
            				// Fix "XHTML"-style tags in all browsers
         
     | 
| 
      
 874 
     | 
    
         
            +
            				elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){
         
     | 
| 
      
 875 
     | 
    
         
            +
            					return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ?
         
     | 
| 
      
 876 
     | 
    
         
            +
            						all :
         
     | 
| 
      
 877 
     | 
    
         
            +
            						front + "></" + tag + ">";
         
     | 
| 
      
 878 
     | 
    
         
            +
            				});
         
     | 
| 
      
 879 
     | 
    
         
            +
             
     | 
| 
      
 880 
     | 
    
         
            +
            				// Trim whitespace, otherwise indexOf won't work as expected
         
     | 
| 
      
 881 
     | 
    
         
            +
            				var tags = elem.replace(/^\s+/, "").substring(0, 10).toLowerCase();
         
     | 
| 
      
 882 
     | 
    
         
            +
             
     | 
| 
      
 883 
     | 
    
         
            +
            				var wrap =
         
     | 
| 
      
 884 
     | 
    
         
            +
            					// option or optgroup
         
     | 
| 
      
 885 
     | 
    
         
            +
            					!tags.indexOf("<opt") &&
         
     | 
| 
      
 886 
     | 
    
         
            +
            					[ 1, "<select multiple='multiple'>", "</select>" ] ||
         
     | 
| 
      
 887 
     | 
    
         
            +
             
     | 
| 
      
 888 
     | 
    
         
            +
            					!tags.indexOf("<leg") &&
         
     | 
| 
      
 889 
     | 
    
         
            +
            					[ 1, "<fieldset>", "</fieldset>" ] ||
         
     | 
| 
      
 890 
     | 
    
         
            +
             
     | 
| 
      
 891 
     | 
    
         
            +
            					tags.match(/^<(thead|tbody|tfoot|colg|cap)/) &&
         
     | 
| 
      
 892 
     | 
    
         
            +
            					[ 1, "<table>", "</table>" ] ||
         
     | 
| 
      
 893 
     | 
    
         
            +
             
     | 
| 
      
 894 
     | 
    
         
            +
            					!tags.indexOf("<tr") &&
         
     | 
| 
      
 895 
     | 
    
         
            +
            					[ 2, "<table><tbody>", "</tbody></table>" ] ||
         
     | 
| 
      
 896 
     | 
    
         
            +
             
     | 
| 
      
 897 
     | 
    
         
            +
            				 	// <thead> matched above
         
     | 
| 
      
 898 
     | 
    
         
            +
            					(!tags.indexOf("<td") || !tags.indexOf("<th")) &&
         
     | 
| 
      
 899 
     | 
    
         
            +
            					[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] ||
         
     | 
| 
      
 900 
     | 
    
         
            +
             
     | 
| 
      
 901 
     | 
    
         
            +
            					!tags.indexOf("<col") &&
         
     | 
| 
      
 902 
     | 
    
         
            +
            					[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] ||
         
     | 
| 
      
 903 
     | 
    
         
            +
             
     | 
| 
      
 904 
     | 
    
         
            +
            					// IE can't serialize <link> and <script> tags normally
         
     | 
| 
      
 905 
     | 
    
         
            +
            					!jQuery.support.htmlSerialize &&
         
     | 
| 
      
 906 
     | 
    
         
            +
            					[ 1, "div<div>", "</div>" ] ||
         
     | 
| 
      
 907 
     | 
    
         
            +
             
     | 
| 
      
 908 
     | 
    
         
            +
            					[ 0, "", "" ];
         
     | 
| 
      
 909 
     | 
    
         
            +
             
     | 
| 
      
 910 
     | 
    
         
            +
            				// Go to html and back, then peel off extra wrappers
         
     | 
| 
      
 911 
     | 
    
         
            +
            				div.innerHTML = wrap[1] + elem + wrap[2];
         
     | 
| 
      
 912 
     | 
    
         
            +
             
     | 
| 
      
 913 
     | 
    
         
            +
            				// Move to the right depth
         
     | 
| 
      
 914 
     | 
    
         
            +
            				while ( wrap[0]-- )
         
     | 
| 
      
 915 
     | 
    
         
            +
            					div = div.lastChild;
         
     | 
| 
      
 916 
     | 
    
         
            +
             
     | 
| 
      
 917 
     | 
    
         
            +
            				// Remove IE's autoinserted <tbody> from table fragments
         
     | 
| 
      
 918 
     | 
    
         
            +
            				if ( !jQuery.support.tbody ) {
         
     | 
| 
      
 919 
     | 
    
         
            +
             
     | 
| 
      
 920 
     | 
    
         
            +
            					// String was a <table>, *may* have spurious <tbody>
         
     | 
| 
      
 921 
     | 
    
         
            +
            					var hasBody = /<tbody/i.test(elem),
         
     | 
| 
      
 922 
     | 
    
         
            +
            						tbody = !tags.indexOf("<table") && !hasBody ?
         
     | 
| 
      
 923 
     | 
    
         
            +
            							div.firstChild && div.firstChild.childNodes :
         
     | 
| 
      
 924 
     | 
    
         
            +
             
     | 
| 
      
 925 
     | 
    
         
            +
            						// String was a bare <thead> or <tfoot>
         
     | 
| 
      
 926 
     | 
    
         
            +
            						wrap[1] == "<table>" && !hasBody ?
         
     | 
| 
      
 927 
     | 
    
         
            +
            							div.childNodes :
         
     | 
| 
      
 928 
     | 
    
         
            +
            							[];
         
     | 
| 
      
 929 
     | 
    
         
            +
             
     | 
| 
      
 930 
     | 
    
         
            +
            					for ( var j = tbody.length - 1; j >= 0 ; --j )
         
     | 
| 
      
 931 
     | 
    
         
            +
            						if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
         
     | 
| 
      
 932 
     | 
    
         
            +
            							tbody[ j ].parentNode.removeChild( tbody[ j ] );
         
     | 
| 
      
 933 
     | 
    
         
            +
             
     | 
| 
      
 934 
     | 
    
         
            +
            					}
         
     | 
| 
      
 935 
     | 
    
         
            +
             
     | 
| 
      
 936 
     | 
    
         
            +
            				// IE completely kills leading whitespace when innerHTML is used
         
     | 
| 
      
 937 
     | 
    
         
            +
            				if ( !jQuery.support.leadingWhitespace && /^\s/.test( elem ) )
         
     | 
| 
      
 938 
     | 
    
         
            +
            					div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
         
     | 
| 
      
 939 
     | 
    
         
            +
            				
         
     | 
| 
      
 940 
     | 
    
         
            +
            				elem = jQuery.makeArray( div.childNodes );
         
     | 
| 
      
 941 
     | 
    
         
            +
            			}
         
     | 
| 
      
 942 
     | 
    
         
            +
             
     | 
| 
      
 943 
     | 
    
         
            +
            			if ( elem.nodeType )
         
     | 
| 
      
 944 
     | 
    
         
            +
            				ret.push( elem );
         
     | 
| 
      
 945 
     | 
    
         
            +
            			else
         
     | 
| 
      
 946 
     | 
    
         
            +
            				ret = jQuery.merge( ret, elem );
         
     | 
| 
      
 947 
     | 
    
         
            +
             
     | 
| 
      
 948 
     | 
    
         
            +
            		});
         
     | 
| 
      
 949 
     | 
    
         
            +
             
     | 
| 
      
 950 
     | 
    
         
            +
            		if ( fragment ) {
         
     | 
| 
      
 951 
     | 
    
         
            +
            			for ( var i = 0; ret[i]; i++ ) {
         
     | 
| 
      
 952 
     | 
    
         
            +
            				if ( jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
         
     | 
| 
      
 953 
     | 
    
         
            +
            					scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
         
     | 
| 
      
 954 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 955 
     | 
    
         
            +
            					if ( ret[i].nodeType === 1 )
         
     | 
| 
      
 956 
     | 
    
         
            +
            						ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
         
     | 
| 
      
 957 
     | 
    
         
            +
            					fragment.appendChild( ret[i] );
         
     | 
| 
      
 958 
     | 
    
         
            +
            				}
         
     | 
| 
      
 959 
     | 
    
         
            +
            			}
         
     | 
| 
      
 960 
     | 
    
         
            +
            			
         
     | 
| 
      
 961 
     | 
    
         
            +
            			return scripts;
         
     | 
| 
      
 962 
     | 
    
         
            +
            		}
         
     | 
| 
      
 963 
     | 
    
         
            +
             
     | 
| 
      
 964 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 965 
     | 
    
         
            +
            	},
         
     | 
| 
      
 966 
     | 
    
         
            +
             
     | 
| 
      
 967 
     | 
    
         
            +
            	attr: function( elem, name, value ) {
         
     | 
| 
      
 968 
     | 
    
         
            +
            		// don't set attributes on text and comment nodes
         
     | 
| 
      
 969 
     | 
    
         
            +
            		if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
         
     | 
| 
      
 970 
     | 
    
         
            +
            			return undefined;
         
     | 
| 
      
 971 
     | 
    
         
            +
             
     | 
| 
      
 972 
     | 
    
         
            +
            		var notxml = !jQuery.isXMLDoc( elem ),
         
     | 
| 
      
 973 
     | 
    
         
            +
            			// Whether we are setting (or getting)
         
     | 
| 
      
 974 
     | 
    
         
            +
            			set = value !== undefined;
         
     | 
| 
      
 975 
     | 
    
         
            +
             
     | 
| 
      
 976 
     | 
    
         
            +
            		// Try to normalize/fix the name
         
     | 
| 
      
 977 
     | 
    
         
            +
            		name = notxml && jQuery.props[ name ] || name;
         
     | 
| 
      
 978 
     | 
    
         
            +
             
     | 
| 
      
 979 
     | 
    
         
            +
            		// Only do all the following if this is a node (faster for style)
         
     | 
| 
      
 980 
     | 
    
         
            +
            		// IE elem.getAttribute passes even for style
         
     | 
| 
      
 981 
     | 
    
         
            +
            		if ( elem.tagName ) {
         
     | 
| 
      
 982 
     | 
    
         
            +
             
     | 
| 
      
 983 
     | 
    
         
            +
            			// These attributes require special treatment
         
     | 
| 
      
 984 
     | 
    
         
            +
            			var special = /href|src|style/.test( name );
         
     | 
| 
      
 985 
     | 
    
         
            +
             
     | 
| 
      
 986 
     | 
    
         
            +
            			// Safari mis-reports the default selected property of a hidden option
         
     | 
| 
      
 987 
     | 
    
         
            +
            			// Accessing the parent's selectedIndex property fixes it
         
     | 
| 
      
 988 
     | 
    
         
            +
            			if ( name == "selected" && elem.parentNode )
         
     | 
| 
      
 989 
     | 
    
         
            +
            				elem.parentNode.selectedIndex;
         
     | 
| 
      
 990 
     | 
    
         
            +
             
     | 
| 
      
 991 
     | 
    
         
            +
            			// If applicable, access the attribute via the DOM 0 way
         
     | 
| 
      
 992 
     | 
    
         
            +
            			if ( name in elem && notxml && !special ) {
         
     | 
| 
      
 993 
     | 
    
         
            +
            				if ( set ){
         
     | 
| 
      
 994 
     | 
    
         
            +
            					// We can't allow the type property to be changed (since it causes problems in IE)
         
     | 
| 
      
 995 
     | 
    
         
            +
            					if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
         
     | 
| 
      
 996 
     | 
    
         
            +
            						throw "type property can't be changed";
         
     | 
| 
      
 997 
     | 
    
         
            +
             
     | 
| 
      
 998 
     | 
    
         
            +
            					elem[ name ] = value;
         
     | 
| 
      
 999 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1000 
     | 
    
         
            +
             
     | 
| 
      
 1001 
     | 
    
         
            +
            				// browsers index elements by id/name on forms, give priority to attributes.
         
     | 
| 
      
 1002 
     | 
    
         
            +
            				if( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) )
         
     | 
| 
      
 1003 
     | 
    
         
            +
            					return elem.getAttributeNode( name ).nodeValue;
         
     | 
| 
      
 1004 
     | 
    
         
            +
             
     | 
| 
      
 1005 
     | 
    
         
            +
            				// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
         
     | 
| 
      
 1006 
     | 
    
         
            +
            				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
         
     | 
| 
      
 1007 
     | 
    
         
            +
            				if ( name == "tabIndex" ) {
         
     | 
| 
      
 1008 
     | 
    
         
            +
            					var attributeNode = elem.getAttributeNode( "tabIndex" );
         
     | 
| 
      
 1009 
     | 
    
         
            +
            					return attributeNode && attributeNode.specified
         
     | 
| 
      
 1010 
     | 
    
         
            +
            						? attributeNode.value
         
     | 
| 
      
 1011 
     | 
    
         
            +
            						: elem.nodeName.match(/(button|input|object|select|textarea)/i)
         
     | 
| 
      
 1012 
     | 
    
         
            +
            							? 0
         
     | 
| 
      
 1013 
     | 
    
         
            +
            							: elem.nodeName.match(/^(a|area)$/i) && elem.href
         
     | 
| 
      
 1014 
     | 
    
         
            +
            								? 0
         
     | 
| 
      
 1015 
     | 
    
         
            +
            								: undefined;
         
     | 
| 
      
 1016 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1017 
     | 
    
         
            +
             
     | 
| 
      
 1018 
     | 
    
         
            +
            				return elem[ name ];
         
     | 
| 
      
 1019 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1020 
     | 
    
         
            +
             
     | 
| 
      
 1021 
     | 
    
         
            +
            			if ( !jQuery.support.style && notxml &&  name == "style" )
         
     | 
| 
      
 1022 
     | 
    
         
            +
            				return jQuery.attr( elem.style, "cssText", value );
         
     | 
| 
      
 1023 
     | 
    
         
            +
             
     | 
| 
      
 1024 
     | 
    
         
            +
            			if ( set )
         
     | 
| 
      
 1025 
     | 
    
         
            +
            				// convert the value to a string (all browsers do this but IE) see #1070
         
     | 
| 
      
 1026 
     | 
    
         
            +
            				elem.setAttribute( name, "" + value );
         
     | 
| 
      
 1027 
     | 
    
         
            +
             
     | 
| 
      
 1028 
     | 
    
         
            +
            			var attr = !jQuery.support.hrefNormalized && notxml && special
         
     | 
| 
      
 1029 
     | 
    
         
            +
            					// Some attributes require a special call on IE
         
     | 
| 
      
 1030 
     | 
    
         
            +
            					? elem.getAttribute( name, 2 )
         
     | 
| 
      
 1031 
     | 
    
         
            +
            					: elem.getAttribute( name );
         
     | 
| 
      
 1032 
     | 
    
         
            +
             
     | 
| 
      
 1033 
     | 
    
         
            +
            			// Non-existent attributes return null, we normalize to undefined
         
     | 
| 
      
 1034 
     | 
    
         
            +
            			return attr === null ? undefined : attr;
         
     | 
| 
      
 1035 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1036 
     | 
    
         
            +
             
     | 
| 
      
 1037 
     | 
    
         
            +
            		// elem is actually elem.style ... set the style
         
     | 
| 
      
 1038 
     | 
    
         
            +
             
     | 
| 
      
 1039 
     | 
    
         
            +
            		// IE uses filters for opacity
         
     | 
| 
      
 1040 
     | 
    
         
            +
            		if ( !jQuery.support.opacity && name == "opacity" ) {
         
     | 
| 
      
 1041 
     | 
    
         
            +
            			if ( set ) {
         
     | 
| 
      
 1042 
     | 
    
         
            +
            				// IE has trouble with opacity if it does not have layout
         
     | 
| 
      
 1043 
     | 
    
         
            +
            				// Force it by setting the zoom level
         
     | 
| 
      
 1044 
     | 
    
         
            +
            				elem.zoom = 1;
         
     | 
| 
      
 1045 
     | 
    
         
            +
             
     | 
| 
      
 1046 
     | 
    
         
            +
            				// Set the alpha filter to set the opacity
         
     | 
| 
      
 1047 
     | 
    
         
            +
            				elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) +
         
     | 
| 
      
 1048 
     | 
    
         
            +
            					(parseInt( value ) + '' == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
         
     | 
| 
      
 1049 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1050 
     | 
    
         
            +
             
     | 
| 
      
 1051 
     | 
    
         
            +
            			return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
         
     | 
| 
      
 1052 
     | 
    
         
            +
            				(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100) + '':
         
     | 
| 
      
 1053 
     | 
    
         
            +
            				"";
         
     | 
| 
      
 1054 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1055 
     | 
    
         
            +
             
     | 
| 
      
 1056 
     | 
    
         
            +
            		name = name.replace(/-([a-z])/ig, function(all, letter){
         
     | 
| 
      
 1057 
     | 
    
         
            +
            			return letter.toUpperCase();
         
     | 
| 
      
 1058 
     | 
    
         
            +
            		});
         
     | 
| 
      
 1059 
     | 
    
         
            +
             
     | 
| 
      
 1060 
     | 
    
         
            +
            		if ( set )
         
     | 
| 
      
 1061 
     | 
    
         
            +
            			elem[ name ] = value;
         
     | 
| 
      
 1062 
     | 
    
         
            +
             
     | 
| 
      
 1063 
     | 
    
         
            +
            		return elem[ name ];
         
     | 
| 
      
 1064 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1065 
     | 
    
         
            +
             
     | 
| 
      
 1066 
     | 
    
         
            +
            	trim: function( text ) {
         
     | 
| 
      
 1067 
     | 
    
         
            +
            		return (text || "").replace( /^\s+|\s+$/g, "" );
         
     | 
| 
      
 1068 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1069 
     | 
    
         
            +
             
     | 
| 
      
 1070 
     | 
    
         
            +
            	makeArray: function( array ) {
         
     | 
| 
      
 1071 
     | 
    
         
            +
            		var ret = [];
         
     | 
| 
      
 1072 
     | 
    
         
            +
             
     | 
| 
      
 1073 
     | 
    
         
            +
            		if( array != null ){
         
     | 
| 
      
 1074 
     | 
    
         
            +
            			var i = array.length;
         
     | 
| 
      
 1075 
     | 
    
         
            +
            			// The window, strings (and functions) also have 'length'
         
     | 
| 
      
 1076 
     | 
    
         
            +
            			if( i == null || typeof array === "string" || jQuery.isFunction(array) || array.setInterval )
         
     | 
| 
      
 1077 
     | 
    
         
            +
            				ret[0] = array;
         
     | 
| 
      
 1078 
     | 
    
         
            +
            			else
         
     | 
| 
      
 1079 
     | 
    
         
            +
            				while( i )
         
     | 
| 
      
 1080 
     | 
    
         
            +
            					ret[--i] = array[i];
         
     | 
| 
      
 1081 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1082 
     | 
    
         
            +
             
     | 
| 
      
 1083 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 1084 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1085 
     | 
    
         
            +
             
     | 
| 
      
 1086 
     | 
    
         
            +
            	inArray: function( elem, array ) {
         
     | 
| 
      
 1087 
     | 
    
         
            +
            		for ( var i = 0, length = array.length; i < length; i++ )
         
     | 
| 
      
 1088 
     | 
    
         
            +
            		// Use === because on IE, window == document
         
     | 
| 
      
 1089 
     | 
    
         
            +
            			if ( array[ i ] === elem )
         
     | 
| 
      
 1090 
     | 
    
         
            +
            				return i;
         
     | 
| 
      
 1091 
     | 
    
         
            +
             
     | 
| 
      
 1092 
     | 
    
         
            +
            		return -1;
         
     | 
| 
      
 1093 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1094 
     | 
    
         
            +
             
     | 
| 
      
 1095 
     | 
    
         
            +
            	merge: function( first, second ) {
         
     | 
| 
      
 1096 
     | 
    
         
            +
            		// We have to loop this way because IE & Opera overwrite the length
         
     | 
| 
      
 1097 
     | 
    
         
            +
            		// expando of getElementsByTagName
         
     | 
| 
      
 1098 
     | 
    
         
            +
            		var i = 0, elem, pos = first.length;
         
     | 
| 
      
 1099 
     | 
    
         
            +
            		// Also, we need to make sure that the correct elements are being returned
         
     | 
| 
      
 1100 
     | 
    
         
            +
            		// (IE returns comment nodes in a '*' query)
         
     | 
| 
      
 1101 
     | 
    
         
            +
            		if ( !jQuery.support.getAll ) {
         
     | 
| 
      
 1102 
     | 
    
         
            +
            			while ( (elem = second[ i++ ]) != null )
         
     | 
| 
      
 1103 
     | 
    
         
            +
            				if ( elem.nodeType != 8 )
         
     | 
| 
      
 1104 
     | 
    
         
            +
            					first[ pos++ ] = elem;
         
     | 
| 
      
 1105 
     | 
    
         
            +
             
     | 
| 
      
 1106 
     | 
    
         
            +
            		} else
         
     | 
| 
      
 1107 
     | 
    
         
            +
            			while ( (elem = second[ i++ ]) != null )
         
     | 
| 
      
 1108 
     | 
    
         
            +
            				first[ pos++ ] = elem;
         
     | 
| 
      
 1109 
     | 
    
         
            +
             
     | 
| 
      
 1110 
     | 
    
         
            +
            		return first;
         
     | 
| 
      
 1111 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1112 
     | 
    
         
            +
             
     | 
| 
      
 1113 
     | 
    
         
            +
            	unique: function( array ) {
         
     | 
| 
      
 1114 
     | 
    
         
            +
            		var ret = [], done = {};
         
     | 
| 
      
 1115 
     | 
    
         
            +
             
     | 
| 
      
 1116 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 1117 
     | 
    
         
            +
             
     | 
| 
      
 1118 
     | 
    
         
            +
            			for ( var i = 0, length = array.length; i < length; i++ ) {
         
     | 
| 
      
 1119 
     | 
    
         
            +
            				var id = jQuery.data( array[ i ] );
         
     | 
| 
      
 1120 
     | 
    
         
            +
             
     | 
| 
      
 1121 
     | 
    
         
            +
            				if ( !done[ id ] ) {
         
     | 
| 
      
 1122 
     | 
    
         
            +
            					done[ id ] = true;
         
     | 
| 
      
 1123 
     | 
    
         
            +
            					ret.push( array[ i ] );
         
     | 
| 
      
 1124 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1125 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1126 
     | 
    
         
            +
             
     | 
| 
      
 1127 
     | 
    
         
            +
            		} catch( e ) {
         
     | 
| 
      
 1128 
     | 
    
         
            +
            			ret = array;
         
     | 
| 
      
 1129 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1130 
     | 
    
         
            +
             
     | 
| 
      
 1131 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 1132 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1133 
     | 
    
         
            +
             
     | 
| 
      
 1134 
     | 
    
         
            +
            	grep: function( elems, callback, inv ) {
         
     | 
| 
      
 1135 
     | 
    
         
            +
            		var ret = [];
         
     | 
| 
      
 1136 
     | 
    
         
            +
             
     | 
| 
      
 1137 
     | 
    
         
            +
            		// Go through the array, only saving the items
         
     | 
| 
      
 1138 
     | 
    
         
            +
            		// that pass the validator function
         
     | 
| 
      
 1139 
     | 
    
         
            +
            		for ( var i = 0, length = elems.length; i < length; i++ )
         
     | 
| 
      
 1140 
     | 
    
         
            +
            			if ( !inv != !callback( elems[ i ], i ) )
         
     | 
| 
      
 1141 
     | 
    
         
            +
            				ret.push( elems[ i ] );
         
     | 
| 
      
 1142 
     | 
    
         
            +
             
     | 
| 
      
 1143 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 1144 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1145 
     | 
    
         
            +
             
     | 
| 
      
 1146 
     | 
    
         
            +
            	map: function( elems, callback ) {
         
     | 
| 
      
 1147 
     | 
    
         
            +
            		var ret = [];
         
     | 
| 
      
 1148 
     | 
    
         
            +
             
     | 
| 
      
 1149 
     | 
    
         
            +
            		// Go through the array, translating each of the items to their
         
     | 
| 
      
 1150 
     | 
    
         
            +
            		// new value (or values).
         
     | 
| 
      
 1151 
     | 
    
         
            +
            		for ( var i = 0, length = elems.length; i < length; i++ ) {
         
     | 
| 
      
 1152 
     | 
    
         
            +
            			var value = callback( elems[ i ], i );
         
     | 
| 
      
 1153 
     | 
    
         
            +
             
     | 
| 
      
 1154 
     | 
    
         
            +
            			if ( value != null )
         
     | 
| 
      
 1155 
     | 
    
         
            +
            				ret[ ret.length ] = value;
         
     | 
| 
      
 1156 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1157 
     | 
    
         
            +
             
     | 
| 
      
 1158 
     | 
    
         
            +
            		return ret.concat.apply( [], ret );
         
     | 
| 
      
 1159 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1160 
     | 
    
         
            +
            });
         
     | 
| 
      
 1161 
     | 
    
         
            +
             
     | 
| 
      
 1162 
     | 
    
         
            +
            // Use of jQuery.browser is deprecated.
         
     | 
| 
      
 1163 
     | 
    
         
            +
            // It's included for backwards compatibility and plugins,
         
     | 
| 
      
 1164 
     | 
    
         
            +
            // although they should work to migrate away.
         
     | 
| 
      
 1165 
     | 
    
         
            +
             
     | 
| 
      
 1166 
     | 
    
         
            +
            var userAgent = navigator.userAgent.toLowerCase();
         
     | 
| 
      
 1167 
     | 
    
         
            +
             
     | 
| 
      
 1168 
     | 
    
         
            +
            // Figure out what browser is being used
         
     | 
| 
      
 1169 
     | 
    
         
            +
            jQuery.browser = {
         
     | 
| 
      
 1170 
     | 
    
         
            +
            	version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [0,'0'])[1],
         
     | 
| 
      
 1171 
     | 
    
         
            +
            	safari: /webkit/.test( userAgent ),
         
     | 
| 
      
 1172 
     | 
    
         
            +
            	opera: /opera/.test( userAgent ),
         
     | 
| 
      
 1173 
     | 
    
         
            +
            	msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ),
         
     | 
| 
      
 1174 
     | 
    
         
            +
            	mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent )
         
     | 
| 
      
 1175 
     | 
    
         
            +
            };
         
     | 
| 
      
 1176 
     | 
    
         
            +
             
     | 
| 
      
 1177 
     | 
    
         
            +
            jQuery.each({
         
     | 
| 
      
 1178 
     | 
    
         
            +
            	parent: function(elem){return elem.parentNode;},
         
     | 
| 
      
 1179 
     | 
    
         
            +
            	parents: function(elem){return jQuery.dir(elem,"parentNode");},
         
     | 
| 
      
 1180 
     | 
    
         
            +
            	next: function(elem){return jQuery.nth(elem,2,"nextSibling");},
         
     | 
| 
      
 1181 
     | 
    
         
            +
            	prev: function(elem){return jQuery.nth(elem,2,"previousSibling");},
         
     | 
| 
      
 1182 
     | 
    
         
            +
            	nextAll: function(elem){return jQuery.dir(elem,"nextSibling");},
         
     | 
| 
      
 1183 
     | 
    
         
            +
            	prevAll: function(elem){return jQuery.dir(elem,"previousSibling");},
         
     | 
| 
      
 1184 
     | 
    
         
            +
            	siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},
         
     | 
| 
      
 1185 
     | 
    
         
            +
            	children: function(elem){return jQuery.sibling(elem.firstChild);},
         
     | 
| 
      
 1186 
     | 
    
         
            +
            	contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}
         
     | 
| 
      
 1187 
     | 
    
         
            +
            }, function(name, fn){
         
     | 
| 
      
 1188 
     | 
    
         
            +
            	jQuery.fn[ name ] = function( selector ) {
         
     | 
| 
      
 1189 
     | 
    
         
            +
            		var ret = jQuery.map( this, fn );
         
     | 
| 
      
 1190 
     | 
    
         
            +
             
     | 
| 
      
 1191 
     | 
    
         
            +
            		if ( selector && typeof selector == "string" )
         
     | 
| 
      
 1192 
     | 
    
         
            +
            			ret = jQuery.multiFilter( selector, ret );
         
     | 
| 
      
 1193 
     | 
    
         
            +
             
     | 
| 
      
 1194 
     | 
    
         
            +
            		return this.pushStack( jQuery.unique( ret ), name, selector );
         
     | 
| 
      
 1195 
     | 
    
         
            +
            	};
         
     | 
| 
      
 1196 
     | 
    
         
            +
            });
         
     | 
| 
      
 1197 
     | 
    
         
            +
             
     | 
| 
      
 1198 
     | 
    
         
            +
            jQuery.each({
         
     | 
| 
      
 1199 
     | 
    
         
            +
            	appendTo: "append",
         
     | 
| 
      
 1200 
     | 
    
         
            +
            	prependTo: "prepend",
         
     | 
| 
      
 1201 
     | 
    
         
            +
            	insertBefore: "before",
         
     | 
| 
      
 1202 
     | 
    
         
            +
            	insertAfter: "after",
         
     | 
| 
      
 1203 
     | 
    
         
            +
            	replaceAll: "replaceWith"
         
     | 
| 
      
 1204 
     | 
    
         
            +
            }, function(name, original){
         
     | 
| 
      
 1205 
     | 
    
         
            +
            	jQuery.fn[ name ] = function( selector ) {
         
     | 
| 
      
 1206 
     | 
    
         
            +
            		var ret = [], insert = jQuery( selector );
         
     | 
| 
      
 1207 
     | 
    
         
            +
             
     | 
| 
      
 1208 
     | 
    
         
            +
            		for ( var i = 0, l = insert.length; i < l; i++ ) {
         
     | 
| 
      
 1209 
     | 
    
         
            +
            			var elems = (i > 0 ? this.clone(true) : this).get();
         
     | 
| 
      
 1210 
     | 
    
         
            +
            			jQuery.fn[ original ].apply( jQuery(insert[i]), elems );
         
     | 
| 
      
 1211 
     | 
    
         
            +
            			ret = ret.concat( elems );
         
     | 
| 
      
 1212 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1213 
     | 
    
         
            +
             
     | 
| 
      
 1214 
     | 
    
         
            +
            		return this.pushStack( ret, name, selector );
         
     | 
| 
      
 1215 
     | 
    
         
            +
            	};
         
     | 
| 
      
 1216 
     | 
    
         
            +
            });
         
     | 
| 
      
 1217 
     | 
    
         
            +
             
     | 
| 
      
 1218 
     | 
    
         
            +
            jQuery.each({
         
     | 
| 
      
 1219 
     | 
    
         
            +
            	removeAttr: function( name ) {
         
     | 
| 
      
 1220 
     | 
    
         
            +
            		jQuery.attr( this, name, "" );
         
     | 
| 
      
 1221 
     | 
    
         
            +
            		if (this.nodeType == 1)
         
     | 
| 
      
 1222 
     | 
    
         
            +
            			this.removeAttribute( name );
         
     | 
| 
      
 1223 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1224 
     | 
    
         
            +
             
     | 
| 
      
 1225 
     | 
    
         
            +
            	addClass: function( classNames ) {
         
     | 
| 
      
 1226 
     | 
    
         
            +
            		jQuery.className.add( this, classNames );
         
     | 
| 
      
 1227 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1228 
     | 
    
         
            +
             
     | 
| 
      
 1229 
     | 
    
         
            +
            	removeClass: function( classNames ) {
         
     | 
| 
      
 1230 
     | 
    
         
            +
            		jQuery.className.remove( this, classNames );
         
     | 
| 
      
 1231 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1232 
     | 
    
         
            +
             
     | 
| 
      
 1233 
     | 
    
         
            +
            	toggleClass: function( classNames, state ) {
         
     | 
| 
      
 1234 
     | 
    
         
            +
            		if( typeof state !== "boolean" )
         
     | 
| 
      
 1235 
     | 
    
         
            +
            			state = !jQuery.className.has( this, classNames );
         
     | 
| 
      
 1236 
     | 
    
         
            +
            		jQuery.className[ state ? "add" : "remove" ]( this, classNames );
         
     | 
| 
      
 1237 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1238 
     | 
    
         
            +
             
     | 
| 
      
 1239 
     | 
    
         
            +
            	remove: function( selector ) {
         
     | 
| 
      
 1240 
     | 
    
         
            +
            		if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
         
     | 
| 
      
 1241 
     | 
    
         
            +
            			// Prevent memory leaks
         
     | 
| 
      
 1242 
     | 
    
         
            +
            			jQuery( "*", this ).add([this]).each(function(){
         
     | 
| 
      
 1243 
     | 
    
         
            +
            				jQuery.event.remove(this);
         
     | 
| 
      
 1244 
     | 
    
         
            +
            				jQuery.removeData(this);
         
     | 
| 
      
 1245 
     | 
    
         
            +
            			});
         
     | 
| 
      
 1246 
     | 
    
         
            +
            			if (this.parentNode)
         
     | 
| 
      
 1247 
     | 
    
         
            +
            				this.parentNode.removeChild( this );
         
     | 
| 
      
 1248 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1249 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1250 
     | 
    
         
            +
             
     | 
| 
      
 1251 
     | 
    
         
            +
            	empty: function() {
         
     | 
| 
      
 1252 
     | 
    
         
            +
            		// Remove element nodes and prevent memory leaks
         
     | 
| 
      
 1253 
     | 
    
         
            +
            		jQuery(this).children().remove();
         
     | 
| 
      
 1254 
     | 
    
         
            +
             
     | 
| 
      
 1255 
     | 
    
         
            +
            		// Remove any remaining nodes
         
     | 
| 
      
 1256 
     | 
    
         
            +
            		while ( this.firstChild )
         
     | 
| 
      
 1257 
     | 
    
         
            +
            			this.removeChild( this.firstChild );
         
     | 
| 
      
 1258 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1259 
     | 
    
         
            +
            }, function(name, fn){
         
     | 
| 
      
 1260 
     | 
    
         
            +
            	jQuery.fn[ name ] = function(){
         
     | 
| 
      
 1261 
     | 
    
         
            +
            		return this.each( fn, arguments );
         
     | 
| 
      
 1262 
     | 
    
         
            +
            	};
         
     | 
| 
      
 1263 
     | 
    
         
            +
            });
         
     | 
| 
      
 1264 
     | 
    
         
            +
             
     | 
| 
      
 1265 
     | 
    
         
            +
            // Helper function used by the dimensions and offset modules
         
     | 
| 
      
 1266 
     | 
    
         
            +
            function num(elem, prop) {
         
     | 
| 
      
 1267 
     | 
    
         
            +
            	return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
         
     | 
| 
      
 1268 
     | 
    
         
            +
            }
         
     | 
| 
      
 1269 
     | 
    
         
            +
            var expando = "jQuery" + now(), uuid = 0, windowData = {};
         
     | 
| 
      
 1270 
     | 
    
         
            +
             
     | 
| 
      
 1271 
     | 
    
         
            +
            jQuery.extend({
         
     | 
| 
      
 1272 
     | 
    
         
            +
            	cache: {},
         
     | 
| 
      
 1273 
     | 
    
         
            +
             
     | 
| 
      
 1274 
     | 
    
         
            +
            	data: function( elem, name, data ) {
         
     | 
| 
      
 1275 
     | 
    
         
            +
            		elem = elem == window ?
         
     | 
| 
      
 1276 
     | 
    
         
            +
            			windowData :
         
     | 
| 
      
 1277 
     | 
    
         
            +
            			elem;
         
     | 
| 
      
 1278 
     | 
    
         
            +
             
     | 
| 
      
 1279 
     | 
    
         
            +
            		var id = elem[ expando ];
         
     | 
| 
      
 1280 
     | 
    
         
            +
             
     | 
| 
      
 1281 
     | 
    
         
            +
            		// Compute a unique ID for the element
         
     | 
| 
      
 1282 
     | 
    
         
            +
            		if ( !id )
         
     | 
| 
      
 1283 
     | 
    
         
            +
            			id = elem[ expando ] = ++uuid;
         
     | 
| 
      
 1284 
     | 
    
         
            +
             
     | 
| 
      
 1285 
     | 
    
         
            +
            		// Only generate the data cache if we're
         
     | 
| 
      
 1286 
     | 
    
         
            +
            		// trying to access or manipulate it
         
     | 
| 
      
 1287 
     | 
    
         
            +
            		if ( name && !jQuery.cache[ id ] )
         
     | 
| 
      
 1288 
     | 
    
         
            +
            			jQuery.cache[ id ] = {};
         
     | 
| 
      
 1289 
     | 
    
         
            +
             
     | 
| 
      
 1290 
     | 
    
         
            +
            		// Prevent overriding the named cache with undefined values
         
     | 
| 
      
 1291 
     | 
    
         
            +
            		if ( data !== undefined )
         
     | 
| 
      
 1292 
     | 
    
         
            +
            			jQuery.cache[ id ][ name ] = data;
         
     | 
| 
      
 1293 
     | 
    
         
            +
             
     | 
| 
      
 1294 
     | 
    
         
            +
            		// Return the named cache data, or the ID for the element
         
     | 
| 
      
 1295 
     | 
    
         
            +
            		return name ?
         
     | 
| 
      
 1296 
     | 
    
         
            +
            			jQuery.cache[ id ][ name ] :
         
     | 
| 
      
 1297 
     | 
    
         
            +
            			id;
         
     | 
| 
      
 1298 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1299 
     | 
    
         
            +
             
     | 
| 
      
 1300 
     | 
    
         
            +
            	removeData: function( elem, name ) {
         
     | 
| 
      
 1301 
     | 
    
         
            +
            		elem = elem == window ?
         
     | 
| 
      
 1302 
     | 
    
         
            +
            			windowData :
         
     | 
| 
      
 1303 
     | 
    
         
            +
            			elem;
         
     | 
| 
      
 1304 
     | 
    
         
            +
             
     | 
| 
      
 1305 
     | 
    
         
            +
            		var id = elem[ expando ];
         
     | 
| 
      
 1306 
     | 
    
         
            +
             
     | 
| 
      
 1307 
     | 
    
         
            +
            		// If we want to remove a specific section of the element's data
         
     | 
| 
      
 1308 
     | 
    
         
            +
            		if ( name ) {
         
     | 
| 
      
 1309 
     | 
    
         
            +
            			if ( jQuery.cache[ id ] ) {
         
     | 
| 
      
 1310 
     | 
    
         
            +
            				// Remove the section of cache data
         
     | 
| 
      
 1311 
     | 
    
         
            +
            				delete jQuery.cache[ id ][ name ];
         
     | 
| 
      
 1312 
     | 
    
         
            +
             
     | 
| 
      
 1313 
     | 
    
         
            +
            				// If we've removed all the data, remove the element's cache
         
     | 
| 
      
 1314 
     | 
    
         
            +
            				name = "";
         
     | 
| 
      
 1315 
     | 
    
         
            +
             
     | 
| 
      
 1316 
     | 
    
         
            +
            				for ( name in jQuery.cache[ id ] )
         
     | 
| 
      
 1317 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 1318 
     | 
    
         
            +
             
     | 
| 
      
 1319 
     | 
    
         
            +
            				if ( !name )
         
     | 
| 
      
 1320 
     | 
    
         
            +
            					jQuery.removeData( elem );
         
     | 
| 
      
 1321 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1322 
     | 
    
         
            +
             
     | 
| 
      
 1323 
     | 
    
         
            +
            		// Otherwise, we want to remove all of the element's data
         
     | 
| 
      
 1324 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 1325 
     | 
    
         
            +
            			// Clean up the element expando
         
     | 
| 
      
 1326 
     | 
    
         
            +
            			try {
         
     | 
| 
      
 1327 
     | 
    
         
            +
            				delete elem[ expando ];
         
     | 
| 
      
 1328 
     | 
    
         
            +
            			} catch(e){
         
     | 
| 
      
 1329 
     | 
    
         
            +
            				// IE has trouble directly removing the expando
         
     | 
| 
      
 1330 
     | 
    
         
            +
            				// but it's ok with using removeAttribute
         
     | 
| 
      
 1331 
     | 
    
         
            +
            				if ( elem.removeAttribute )
         
     | 
| 
      
 1332 
     | 
    
         
            +
            					elem.removeAttribute( expando );
         
     | 
| 
      
 1333 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1334 
     | 
    
         
            +
             
     | 
| 
      
 1335 
     | 
    
         
            +
            			// Completely remove the data cache
         
     | 
| 
      
 1336 
     | 
    
         
            +
            			delete jQuery.cache[ id ];
         
     | 
| 
      
 1337 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1338 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1339 
     | 
    
         
            +
            	queue: function( elem, type, data ) {
         
     | 
| 
      
 1340 
     | 
    
         
            +
            		if ( elem ){
         
     | 
| 
      
 1341 
     | 
    
         
            +
            	
         
     | 
| 
      
 1342 
     | 
    
         
            +
            			type = (type || "fx") + "queue";
         
     | 
| 
      
 1343 
     | 
    
         
            +
            	
         
     | 
| 
      
 1344 
     | 
    
         
            +
            			var q = jQuery.data( elem, type );
         
     | 
| 
      
 1345 
     | 
    
         
            +
            	
         
     | 
| 
      
 1346 
     | 
    
         
            +
            			if ( !q || jQuery.isArray(data) )
         
     | 
| 
      
 1347 
     | 
    
         
            +
            				q = jQuery.data( elem, type, jQuery.makeArray(data) );
         
     | 
| 
      
 1348 
     | 
    
         
            +
            			else if( data )
         
     | 
| 
      
 1349 
     | 
    
         
            +
            				q.push( data );
         
     | 
| 
      
 1350 
     | 
    
         
            +
            	
         
     | 
| 
      
 1351 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1352 
     | 
    
         
            +
            		return q;
         
     | 
| 
      
 1353 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1354 
     | 
    
         
            +
             
     | 
| 
      
 1355 
     | 
    
         
            +
            	dequeue: function( elem, type ){
         
     | 
| 
      
 1356 
     | 
    
         
            +
            		var queue = jQuery.queue( elem, type ),
         
     | 
| 
      
 1357 
     | 
    
         
            +
            			fn = queue.shift();
         
     | 
| 
      
 1358 
     | 
    
         
            +
            		
         
     | 
| 
      
 1359 
     | 
    
         
            +
            		if( !type || type === "fx" )
         
     | 
| 
      
 1360 
     | 
    
         
            +
            			fn = queue[0];
         
     | 
| 
      
 1361 
     | 
    
         
            +
            			
         
     | 
| 
      
 1362 
     | 
    
         
            +
            		if( fn !== undefined )
         
     | 
| 
      
 1363 
     | 
    
         
            +
            			fn.call(elem);
         
     | 
| 
      
 1364 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1365 
     | 
    
         
            +
            });
         
     | 
| 
      
 1366 
     | 
    
         
            +
             
     | 
| 
      
 1367 
     | 
    
         
            +
            jQuery.fn.extend({
         
     | 
| 
      
 1368 
     | 
    
         
            +
            	data: function( key, value ){
         
     | 
| 
      
 1369 
     | 
    
         
            +
            		var parts = key.split(".");
         
     | 
| 
      
 1370 
     | 
    
         
            +
            		parts[1] = parts[1] ? "." + parts[1] : "";
         
     | 
| 
      
 1371 
     | 
    
         
            +
             
     | 
| 
      
 1372 
     | 
    
         
            +
            		if ( value === undefined ) {
         
     | 
| 
      
 1373 
     | 
    
         
            +
            			var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
         
     | 
| 
      
 1374 
     | 
    
         
            +
             
     | 
| 
      
 1375 
     | 
    
         
            +
            			if ( data === undefined && this.length )
         
     | 
| 
      
 1376 
     | 
    
         
            +
            				data = jQuery.data( this[0], key );
         
     | 
| 
      
 1377 
     | 
    
         
            +
             
     | 
| 
      
 1378 
     | 
    
         
            +
            			return data === undefined && parts[1] ?
         
     | 
| 
      
 1379 
     | 
    
         
            +
            				this.data( parts[0] ) :
         
     | 
| 
      
 1380 
     | 
    
         
            +
            				data;
         
     | 
| 
      
 1381 
     | 
    
         
            +
            		} else
         
     | 
| 
      
 1382 
     | 
    
         
            +
            			return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){
         
     | 
| 
      
 1383 
     | 
    
         
            +
            				jQuery.data( this, key, value );
         
     | 
| 
      
 1384 
     | 
    
         
            +
            			});
         
     | 
| 
      
 1385 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1386 
     | 
    
         
            +
             
     | 
| 
      
 1387 
     | 
    
         
            +
            	removeData: function( key ){
         
     | 
| 
      
 1388 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 1389 
     | 
    
         
            +
            			jQuery.removeData( this, key );
         
     | 
| 
      
 1390 
     | 
    
         
            +
            		});
         
     | 
| 
      
 1391 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1392 
     | 
    
         
            +
            	queue: function(type, data){
         
     | 
| 
      
 1393 
     | 
    
         
            +
            		if ( typeof type !== "string" ) {
         
     | 
| 
      
 1394 
     | 
    
         
            +
            			data = type;
         
     | 
| 
      
 1395 
     | 
    
         
            +
            			type = "fx";
         
     | 
| 
      
 1396 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1397 
     | 
    
         
            +
             
     | 
| 
      
 1398 
     | 
    
         
            +
            		if ( data === undefined )
         
     | 
| 
      
 1399 
     | 
    
         
            +
            			return jQuery.queue( this[0], type );
         
     | 
| 
      
 1400 
     | 
    
         
            +
             
     | 
| 
      
 1401 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 1402 
     | 
    
         
            +
            			var queue = jQuery.queue( this, type, data );
         
     | 
| 
      
 1403 
     | 
    
         
            +
            			
         
     | 
| 
      
 1404 
     | 
    
         
            +
            			 if( type == "fx" && queue.length == 1 )
         
     | 
| 
      
 1405 
     | 
    
         
            +
            				queue[0].call(this);
         
     | 
| 
      
 1406 
     | 
    
         
            +
            		});
         
     | 
| 
      
 1407 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1408 
     | 
    
         
            +
            	dequeue: function(type){
         
     | 
| 
      
 1409 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 1410 
     | 
    
         
            +
            			jQuery.dequeue( this, type );
         
     | 
| 
      
 1411 
     | 
    
         
            +
            		});
         
     | 
| 
      
 1412 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1413 
     | 
    
         
            +
            });/*!
         
     | 
| 
      
 1414 
     | 
    
         
            +
             * Sizzle CSS Selector Engine - v0.9.3
         
     | 
| 
      
 1415 
     | 
    
         
            +
             *  Copyright 2009, The Dojo Foundation
         
     | 
| 
      
 1416 
     | 
    
         
            +
             *  Released under the MIT, BSD, and GPL Licenses.
         
     | 
| 
      
 1417 
     | 
    
         
            +
             *  More information: http://sizzlejs.com/
         
     | 
| 
      
 1418 
     | 
    
         
            +
             */
         
     | 
| 
      
 1419 
     | 
    
         
            +
            (function(){
         
     | 
| 
      
 1420 
     | 
    
         
            +
             
     | 
| 
      
 1421 
     | 
    
         
            +
            var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,
         
     | 
| 
      
 1422 
     | 
    
         
            +
            	done = 0,
         
     | 
| 
      
 1423 
     | 
    
         
            +
            	toString = Object.prototype.toString;
         
     | 
| 
      
 1424 
     | 
    
         
            +
             
     | 
| 
      
 1425 
     | 
    
         
            +
            var Sizzle = function(selector, context, results, seed) {
         
     | 
| 
      
 1426 
     | 
    
         
            +
            	results = results || [];
         
     | 
| 
      
 1427 
     | 
    
         
            +
            	context = context || document;
         
     | 
| 
      
 1428 
     | 
    
         
            +
             
     | 
| 
      
 1429 
     | 
    
         
            +
            	if ( context.nodeType !== 1 && context.nodeType !== 9 )
         
     | 
| 
      
 1430 
     | 
    
         
            +
            		return [];
         
     | 
| 
      
 1431 
     | 
    
         
            +
            	
         
     | 
| 
      
 1432 
     | 
    
         
            +
            	if ( !selector || typeof selector !== "string" ) {
         
     | 
| 
      
 1433 
     | 
    
         
            +
            		return results;
         
     | 
| 
      
 1434 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1435 
     | 
    
         
            +
             
     | 
| 
      
 1436 
     | 
    
         
            +
            	var parts = [], m, set, checkSet, check, mode, extra, prune = true;
         
     | 
| 
      
 1437 
     | 
    
         
            +
            	
         
     | 
| 
      
 1438 
     | 
    
         
            +
            	// Reset the position of the chunker regexp (start from head)
         
     | 
| 
      
 1439 
     | 
    
         
            +
            	chunker.lastIndex = 0;
         
     | 
| 
      
 1440 
     | 
    
         
            +
            	
         
     | 
| 
      
 1441 
     | 
    
         
            +
            	while ( (m = chunker.exec(selector)) !== null ) {
         
     | 
| 
      
 1442 
     | 
    
         
            +
            		parts.push( m[1] );
         
     | 
| 
      
 1443 
     | 
    
         
            +
            		
         
     | 
| 
      
 1444 
     | 
    
         
            +
            		if ( m[2] ) {
         
     | 
| 
      
 1445 
     | 
    
         
            +
            			extra = RegExp.rightContext;
         
     | 
| 
      
 1446 
     | 
    
         
            +
            			break;
         
     | 
| 
      
 1447 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1448 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1449 
     | 
    
         
            +
             
     | 
| 
      
 1450 
     | 
    
         
            +
            	if ( parts.length > 1 && origPOS.exec( selector ) ) {
         
     | 
| 
      
 1451 
     | 
    
         
            +
            		if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
         
     | 
| 
      
 1452 
     | 
    
         
            +
            			set = posProcess( parts[0] + parts[1], context );
         
     | 
| 
      
 1453 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 1454 
     | 
    
         
            +
            			set = Expr.relative[ parts[0] ] ?
         
     | 
| 
      
 1455 
     | 
    
         
            +
            				[ context ] :
         
     | 
| 
      
 1456 
     | 
    
         
            +
            				Sizzle( parts.shift(), context );
         
     | 
| 
      
 1457 
     | 
    
         
            +
             
     | 
| 
      
 1458 
     | 
    
         
            +
            			while ( parts.length ) {
         
     | 
| 
      
 1459 
     | 
    
         
            +
            				selector = parts.shift();
         
     | 
| 
      
 1460 
     | 
    
         
            +
             
     | 
| 
      
 1461 
     | 
    
         
            +
            				if ( Expr.relative[ selector ] )
         
     | 
| 
      
 1462 
     | 
    
         
            +
            					selector += parts.shift();
         
     | 
| 
      
 1463 
     | 
    
         
            +
             
     | 
| 
      
 1464 
     | 
    
         
            +
            				set = posProcess( selector, set );
         
     | 
| 
      
 1465 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1466 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1467 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 1468 
     | 
    
         
            +
            		var ret = seed ?
         
     | 
| 
      
 1469 
     | 
    
         
            +
            			{ expr: parts.pop(), set: makeArray(seed) } :
         
     | 
| 
      
 1470 
     | 
    
         
            +
            			Sizzle.find( parts.pop(), parts.length === 1 && context.parentNode ? context.parentNode : context, isXML(context) );
         
     | 
| 
      
 1471 
     | 
    
         
            +
            		set = Sizzle.filter( ret.expr, ret.set );
         
     | 
| 
      
 1472 
     | 
    
         
            +
             
     | 
| 
      
 1473 
     | 
    
         
            +
            		if ( parts.length > 0 ) {
         
     | 
| 
      
 1474 
     | 
    
         
            +
            			checkSet = makeArray(set);
         
     | 
| 
      
 1475 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 1476 
     | 
    
         
            +
            			prune = false;
         
     | 
| 
      
 1477 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1478 
     | 
    
         
            +
             
     | 
| 
      
 1479 
     | 
    
         
            +
            		while ( parts.length ) {
         
     | 
| 
      
 1480 
     | 
    
         
            +
            			var cur = parts.pop(), pop = cur;
         
     | 
| 
      
 1481 
     | 
    
         
            +
             
     | 
| 
      
 1482 
     | 
    
         
            +
            			if ( !Expr.relative[ cur ] ) {
         
     | 
| 
      
 1483 
     | 
    
         
            +
            				cur = "";
         
     | 
| 
      
 1484 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 1485 
     | 
    
         
            +
            				pop = parts.pop();
         
     | 
| 
      
 1486 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1487 
     | 
    
         
            +
             
     | 
| 
      
 1488 
     | 
    
         
            +
            			if ( pop == null ) {
         
     | 
| 
      
 1489 
     | 
    
         
            +
            				pop = context;
         
     | 
| 
      
 1490 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1491 
     | 
    
         
            +
             
     | 
| 
      
 1492 
     | 
    
         
            +
            			Expr.relative[ cur ]( checkSet, pop, isXML(context) );
         
     | 
| 
      
 1493 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1494 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1495 
     | 
    
         
            +
             
     | 
| 
      
 1496 
     | 
    
         
            +
            	if ( !checkSet ) {
         
     | 
| 
      
 1497 
     | 
    
         
            +
            		checkSet = set;
         
     | 
| 
      
 1498 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1499 
     | 
    
         
            +
             
     | 
| 
      
 1500 
     | 
    
         
            +
            	if ( !checkSet ) {
         
     | 
| 
      
 1501 
     | 
    
         
            +
            		throw "Syntax error, unrecognized expression: " + (cur || selector);
         
     | 
| 
      
 1502 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1503 
     | 
    
         
            +
             
     | 
| 
      
 1504 
     | 
    
         
            +
            	if ( toString.call(checkSet) === "[object Array]" ) {
         
     | 
| 
      
 1505 
     | 
    
         
            +
            		if ( !prune ) {
         
     | 
| 
      
 1506 
     | 
    
         
            +
            			results.push.apply( results, checkSet );
         
     | 
| 
      
 1507 
     | 
    
         
            +
            		} else if ( context.nodeType === 1 ) {
         
     | 
| 
      
 1508 
     | 
    
         
            +
            			for ( var i = 0; checkSet[i] != null; i++ ) {
         
     | 
| 
      
 1509 
     | 
    
         
            +
            				if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {
         
     | 
| 
      
 1510 
     | 
    
         
            +
            					results.push( set[i] );
         
     | 
| 
      
 1511 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1512 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1513 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 1514 
     | 
    
         
            +
            			for ( var i = 0; checkSet[i] != null; i++ ) {
         
     | 
| 
      
 1515 
     | 
    
         
            +
            				if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
         
     | 
| 
      
 1516 
     | 
    
         
            +
            					results.push( set[i] );
         
     | 
| 
      
 1517 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1518 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1519 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1520 
     | 
    
         
            +
            	} else {
         
     | 
| 
      
 1521 
     | 
    
         
            +
            		makeArray( checkSet, results );
         
     | 
| 
      
 1522 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1523 
     | 
    
         
            +
             
     | 
| 
      
 1524 
     | 
    
         
            +
            	if ( extra ) {
         
     | 
| 
      
 1525 
     | 
    
         
            +
            		Sizzle( extra, context, results, seed );
         
     | 
| 
      
 1526 
     | 
    
         
            +
             
     | 
| 
      
 1527 
     | 
    
         
            +
            		if ( sortOrder ) {
         
     | 
| 
      
 1528 
     | 
    
         
            +
            			hasDuplicate = false;
         
     | 
| 
      
 1529 
     | 
    
         
            +
            			results.sort(sortOrder);
         
     | 
| 
      
 1530 
     | 
    
         
            +
             
     | 
| 
      
 1531 
     | 
    
         
            +
            			if ( hasDuplicate ) {
         
     | 
| 
      
 1532 
     | 
    
         
            +
            				for ( var i = 1; i < results.length; i++ ) {
         
     | 
| 
      
 1533 
     | 
    
         
            +
            					if ( results[i] === results[i-1] ) {
         
     | 
| 
      
 1534 
     | 
    
         
            +
            						results.splice(i--, 1);
         
     | 
| 
      
 1535 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1536 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1537 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1538 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1539 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1540 
     | 
    
         
            +
             
     | 
| 
      
 1541 
     | 
    
         
            +
            	return results;
         
     | 
| 
      
 1542 
     | 
    
         
            +
            };
         
     | 
| 
      
 1543 
     | 
    
         
            +
             
     | 
| 
      
 1544 
     | 
    
         
            +
            Sizzle.matches = function(expr, set){
         
     | 
| 
      
 1545 
     | 
    
         
            +
            	return Sizzle(expr, null, null, set);
         
     | 
| 
      
 1546 
     | 
    
         
            +
            };
         
     | 
| 
      
 1547 
     | 
    
         
            +
             
     | 
| 
      
 1548 
     | 
    
         
            +
            Sizzle.find = function(expr, context, isXML){
         
     | 
| 
      
 1549 
     | 
    
         
            +
            	var set, match;
         
     | 
| 
      
 1550 
     | 
    
         
            +
             
     | 
| 
      
 1551 
     | 
    
         
            +
            	if ( !expr ) {
         
     | 
| 
      
 1552 
     | 
    
         
            +
            		return [];
         
     | 
| 
      
 1553 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1554 
     | 
    
         
            +
             
     | 
| 
      
 1555 
     | 
    
         
            +
            	for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
         
     | 
| 
      
 1556 
     | 
    
         
            +
            		var type = Expr.order[i], match;
         
     | 
| 
      
 1557 
     | 
    
         
            +
            		
         
     | 
| 
      
 1558 
     | 
    
         
            +
            		if ( (match = Expr.match[ type ].exec( expr )) ) {
         
     | 
| 
      
 1559 
     | 
    
         
            +
            			var left = RegExp.leftContext;
         
     | 
| 
      
 1560 
     | 
    
         
            +
             
     | 
| 
      
 1561 
     | 
    
         
            +
            			if ( left.substr( left.length - 1 ) !== "\\" ) {
         
     | 
| 
      
 1562 
     | 
    
         
            +
            				match[1] = (match[1] || "").replace(/\\/g, "");
         
     | 
| 
      
 1563 
     | 
    
         
            +
            				set = Expr.find[ type ]( match, context, isXML );
         
     | 
| 
      
 1564 
     | 
    
         
            +
            				if ( set != null ) {
         
     | 
| 
      
 1565 
     | 
    
         
            +
            					expr = expr.replace( Expr.match[ type ], "" );
         
     | 
| 
      
 1566 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 1567 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1568 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1569 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1570 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1571 
     | 
    
         
            +
             
     | 
| 
      
 1572 
     | 
    
         
            +
            	if ( !set ) {
         
     | 
| 
      
 1573 
     | 
    
         
            +
            		set = context.getElementsByTagName("*");
         
     | 
| 
      
 1574 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1575 
     | 
    
         
            +
             
     | 
| 
      
 1576 
     | 
    
         
            +
            	return {set: set, expr: expr};
         
     | 
| 
      
 1577 
     | 
    
         
            +
            };
         
     | 
| 
      
 1578 
     | 
    
         
            +
             
     | 
| 
      
 1579 
     | 
    
         
            +
            Sizzle.filter = function(expr, set, inplace, not){
         
     | 
| 
      
 1580 
     | 
    
         
            +
            	var old = expr, result = [], curLoop = set, match, anyFound,
         
     | 
| 
      
 1581 
     | 
    
         
            +
            		isXMLFilter = set && set[0] && isXML(set[0]);
         
     | 
| 
      
 1582 
     | 
    
         
            +
             
     | 
| 
      
 1583 
     | 
    
         
            +
            	while ( expr && set.length ) {
         
     | 
| 
      
 1584 
     | 
    
         
            +
            		for ( var type in Expr.filter ) {
         
     | 
| 
      
 1585 
     | 
    
         
            +
            			if ( (match = Expr.match[ type ].exec( expr )) != null ) {
         
     | 
| 
      
 1586 
     | 
    
         
            +
            				var filter = Expr.filter[ type ], found, item;
         
     | 
| 
      
 1587 
     | 
    
         
            +
            				anyFound = false;
         
     | 
| 
      
 1588 
     | 
    
         
            +
             
     | 
| 
      
 1589 
     | 
    
         
            +
            				if ( curLoop == result ) {
         
     | 
| 
      
 1590 
     | 
    
         
            +
            					result = [];
         
     | 
| 
      
 1591 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1592 
     | 
    
         
            +
             
     | 
| 
      
 1593 
     | 
    
         
            +
            				if ( Expr.preFilter[ type ] ) {
         
     | 
| 
      
 1594 
     | 
    
         
            +
            					match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
         
     | 
| 
      
 1595 
     | 
    
         
            +
             
     | 
| 
      
 1596 
     | 
    
         
            +
            					if ( !match ) {
         
     | 
| 
      
 1597 
     | 
    
         
            +
            						anyFound = found = true;
         
     | 
| 
      
 1598 
     | 
    
         
            +
            					} else if ( match === true ) {
         
     | 
| 
      
 1599 
     | 
    
         
            +
            						continue;
         
     | 
| 
      
 1600 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1601 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1602 
     | 
    
         
            +
             
     | 
| 
      
 1603 
     | 
    
         
            +
            				if ( match ) {
         
     | 
| 
      
 1604 
     | 
    
         
            +
            					for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
         
     | 
| 
      
 1605 
     | 
    
         
            +
            						if ( item ) {
         
     | 
| 
      
 1606 
     | 
    
         
            +
            							found = filter( item, match, i, curLoop );
         
     | 
| 
      
 1607 
     | 
    
         
            +
            							var pass = not ^ !!found;
         
     | 
| 
      
 1608 
     | 
    
         
            +
             
     | 
| 
      
 1609 
     | 
    
         
            +
            							if ( inplace && found != null ) {
         
     | 
| 
      
 1610 
     | 
    
         
            +
            								if ( pass ) {
         
     | 
| 
      
 1611 
     | 
    
         
            +
            									anyFound = true;
         
     | 
| 
      
 1612 
     | 
    
         
            +
            								} else {
         
     | 
| 
      
 1613 
     | 
    
         
            +
            									curLoop[i] = false;
         
     | 
| 
      
 1614 
     | 
    
         
            +
            								}
         
     | 
| 
      
 1615 
     | 
    
         
            +
            							} else if ( pass ) {
         
     | 
| 
      
 1616 
     | 
    
         
            +
            								result.push( item );
         
     | 
| 
      
 1617 
     | 
    
         
            +
            								anyFound = true;
         
     | 
| 
      
 1618 
     | 
    
         
            +
            							}
         
     | 
| 
      
 1619 
     | 
    
         
            +
            						}
         
     | 
| 
      
 1620 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1621 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1622 
     | 
    
         
            +
             
     | 
| 
      
 1623 
     | 
    
         
            +
            				if ( found !== undefined ) {
         
     | 
| 
      
 1624 
     | 
    
         
            +
            					if ( !inplace ) {
         
     | 
| 
      
 1625 
     | 
    
         
            +
            						curLoop = result;
         
     | 
| 
      
 1626 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1627 
     | 
    
         
            +
             
     | 
| 
      
 1628 
     | 
    
         
            +
            					expr = expr.replace( Expr.match[ type ], "" );
         
     | 
| 
      
 1629 
     | 
    
         
            +
             
     | 
| 
      
 1630 
     | 
    
         
            +
            					if ( !anyFound ) {
         
     | 
| 
      
 1631 
     | 
    
         
            +
            						return [];
         
     | 
| 
      
 1632 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1633 
     | 
    
         
            +
             
     | 
| 
      
 1634 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 1635 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1636 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1637 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1638 
     | 
    
         
            +
             
     | 
| 
      
 1639 
     | 
    
         
            +
            		// Improper expression
         
     | 
| 
      
 1640 
     | 
    
         
            +
            		if ( expr == old ) {
         
     | 
| 
      
 1641 
     | 
    
         
            +
            			if ( anyFound == null ) {
         
     | 
| 
      
 1642 
     | 
    
         
            +
            				throw "Syntax error, unrecognized expression: " + expr;
         
     | 
| 
      
 1643 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 1644 
     | 
    
         
            +
            				break;
         
     | 
| 
      
 1645 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1646 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1647 
     | 
    
         
            +
             
     | 
| 
      
 1648 
     | 
    
         
            +
            		old = expr;
         
     | 
| 
      
 1649 
     | 
    
         
            +
            	}
         
     | 
| 
      
 1650 
     | 
    
         
            +
             
     | 
| 
      
 1651 
     | 
    
         
            +
            	return curLoop;
         
     | 
| 
      
 1652 
     | 
    
         
            +
            };
         
     | 
| 
      
 1653 
     | 
    
         
            +
             
     | 
| 
      
 1654 
     | 
    
         
            +
            var Expr = Sizzle.selectors = {
         
     | 
| 
      
 1655 
     | 
    
         
            +
            	order: [ "ID", "NAME", "TAG" ],
         
     | 
| 
      
 1656 
     | 
    
         
            +
            	match: {
         
     | 
| 
      
 1657 
     | 
    
         
            +
            		ID: /#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
         
     | 
| 
      
 1658 
     | 
    
         
            +
            		CLASS: /\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,
         
     | 
| 
      
 1659 
     | 
    
         
            +
            		NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,
         
     | 
| 
      
 1660 
     | 
    
         
            +
            		ATTR: /\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
         
     | 
| 
      
 1661 
     | 
    
         
            +
            		TAG: /^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,
         
     | 
| 
      
 1662 
     | 
    
         
            +
            		CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,
         
     | 
| 
      
 1663 
     | 
    
         
            +
            		POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,
         
     | 
| 
      
 1664 
     | 
    
         
            +
            		PSEUDO: /:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/
         
     | 
| 
      
 1665 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1666 
     | 
    
         
            +
            	attrMap: {
         
     | 
| 
      
 1667 
     | 
    
         
            +
            		"class": "className",
         
     | 
| 
      
 1668 
     | 
    
         
            +
            		"for": "htmlFor"
         
     | 
| 
      
 1669 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1670 
     | 
    
         
            +
            	attrHandle: {
         
     | 
| 
      
 1671 
     | 
    
         
            +
            		href: function(elem){
         
     | 
| 
      
 1672 
     | 
    
         
            +
            			return elem.getAttribute("href");
         
     | 
| 
      
 1673 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1674 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1675 
     | 
    
         
            +
            	relative: {
         
     | 
| 
      
 1676 
     | 
    
         
            +
            		"+": function(checkSet, part, isXML){
         
     | 
| 
      
 1677 
     | 
    
         
            +
            			var isPartStr = typeof part === "string",
         
     | 
| 
      
 1678 
     | 
    
         
            +
            				isTag = isPartStr && !/\W/.test(part),
         
     | 
| 
      
 1679 
     | 
    
         
            +
            				isPartStrNotTag = isPartStr && !isTag;
         
     | 
| 
      
 1680 
     | 
    
         
            +
             
     | 
| 
      
 1681 
     | 
    
         
            +
            			if ( isTag && !isXML ) {
         
     | 
| 
      
 1682 
     | 
    
         
            +
            				part = part.toUpperCase();
         
     | 
| 
      
 1683 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1684 
     | 
    
         
            +
             
     | 
| 
      
 1685 
     | 
    
         
            +
            			for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
         
     | 
| 
      
 1686 
     | 
    
         
            +
            				if ( (elem = checkSet[i]) ) {
         
     | 
| 
      
 1687 
     | 
    
         
            +
            					while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
         
     | 
| 
      
 1688 
     | 
    
         
            +
             
     | 
| 
      
 1689 
     | 
    
         
            +
            					checkSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?
         
     | 
| 
      
 1690 
     | 
    
         
            +
            						elem || false :
         
     | 
| 
      
 1691 
     | 
    
         
            +
            						elem === part;
         
     | 
| 
      
 1692 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1693 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1694 
     | 
    
         
            +
             
     | 
| 
      
 1695 
     | 
    
         
            +
            			if ( isPartStrNotTag ) {
         
     | 
| 
      
 1696 
     | 
    
         
            +
            				Sizzle.filter( part, checkSet, true );
         
     | 
| 
      
 1697 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1698 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1699 
     | 
    
         
            +
            		">": function(checkSet, part, isXML){
         
     | 
| 
      
 1700 
     | 
    
         
            +
            			var isPartStr = typeof part === "string";
         
     | 
| 
      
 1701 
     | 
    
         
            +
             
     | 
| 
      
 1702 
     | 
    
         
            +
            			if ( isPartStr && !/\W/.test(part) ) {
         
     | 
| 
      
 1703 
     | 
    
         
            +
            				part = isXML ? part : part.toUpperCase();
         
     | 
| 
      
 1704 
     | 
    
         
            +
             
     | 
| 
      
 1705 
     | 
    
         
            +
            				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
         
     | 
| 
      
 1706 
     | 
    
         
            +
            					var elem = checkSet[i];
         
     | 
| 
      
 1707 
     | 
    
         
            +
            					if ( elem ) {
         
     | 
| 
      
 1708 
     | 
    
         
            +
            						var parent = elem.parentNode;
         
     | 
| 
      
 1709 
     | 
    
         
            +
            						checkSet[i] = parent.nodeName === part ? parent : false;
         
     | 
| 
      
 1710 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1711 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1712 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 1713 
     | 
    
         
            +
            				for ( var i = 0, l = checkSet.length; i < l; i++ ) {
         
     | 
| 
      
 1714 
     | 
    
         
            +
            					var elem = checkSet[i];
         
     | 
| 
      
 1715 
     | 
    
         
            +
            					if ( elem ) {
         
     | 
| 
      
 1716 
     | 
    
         
            +
            						checkSet[i] = isPartStr ?
         
     | 
| 
      
 1717 
     | 
    
         
            +
            							elem.parentNode :
         
     | 
| 
      
 1718 
     | 
    
         
            +
            							elem.parentNode === part;
         
     | 
| 
      
 1719 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1720 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1721 
     | 
    
         
            +
             
     | 
| 
      
 1722 
     | 
    
         
            +
            				if ( isPartStr ) {
         
     | 
| 
      
 1723 
     | 
    
         
            +
            					Sizzle.filter( part, checkSet, true );
         
     | 
| 
      
 1724 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1725 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1726 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1727 
     | 
    
         
            +
            		"": function(checkSet, part, isXML){
         
     | 
| 
      
 1728 
     | 
    
         
            +
            			var doneName = done++, checkFn = dirCheck;
         
     | 
| 
      
 1729 
     | 
    
         
            +
             
     | 
| 
      
 1730 
     | 
    
         
            +
            			if ( !part.match(/\W/) ) {
         
     | 
| 
      
 1731 
     | 
    
         
            +
            				var nodeCheck = part = isXML ? part : part.toUpperCase();
         
     | 
| 
      
 1732 
     | 
    
         
            +
            				checkFn = dirNodeCheck;
         
     | 
| 
      
 1733 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1734 
     | 
    
         
            +
             
     | 
| 
      
 1735 
     | 
    
         
            +
            			checkFn("parentNode", part, doneName, checkSet, nodeCheck, isXML);
         
     | 
| 
      
 1736 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1737 
     | 
    
         
            +
            		"~": function(checkSet, part, isXML){
         
     | 
| 
      
 1738 
     | 
    
         
            +
            			var doneName = done++, checkFn = dirCheck;
         
     | 
| 
      
 1739 
     | 
    
         
            +
             
     | 
| 
      
 1740 
     | 
    
         
            +
            			if ( typeof part === "string" && !part.match(/\W/) ) {
         
     | 
| 
      
 1741 
     | 
    
         
            +
            				var nodeCheck = part = isXML ? part : part.toUpperCase();
         
     | 
| 
      
 1742 
     | 
    
         
            +
            				checkFn = dirNodeCheck;
         
     | 
| 
      
 1743 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1744 
     | 
    
         
            +
             
     | 
| 
      
 1745 
     | 
    
         
            +
            			checkFn("previousSibling", part, doneName, checkSet, nodeCheck, isXML);
         
     | 
| 
      
 1746 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1747 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1748 
     | 
    
         
            +
            	find: {
         
     | 
| 
      
 1749 
     | 
    
         
            +
            		ID: function(match, context, isXML){
         
     | 
| 
      
 1750 
     | 
    
         
            +
            			if ( typeof context.getElementById !== "undefined" && !isXML ) {
         
     | 
| 
      
 1751 
     | 
    
         
            +
            				var m = context.getElementById(match[1]);
         
     | 
| 
      
 1752 
     | 
    
         
            +
            				return m ? [m] : [];
         
     | 
| 
      
 1753 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1754 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1755 
     | 
    
         
            +
            		NAME: function(match, context, isXML){
         
     | 
| 
      
 1756 
     | 
    
         
            +
            			if ( typeof context.getElementsByName !== "undefined" ) {
         
     | 
| 
      
 1757 
     | 
    
         
            +
            				var ret = [], results = context.getElementsByName(match[1]);
         
     | 
| 
      
 1758 
     | 
    
         
            +
             
     | 
| 
      
 1759 
     | 
    
         
            +
            				for ( var i = 0, l = results.length; i < l; i++ ) {
         
     | 
| 
      
 1760 
     | 
    
         
            +
            					if ( results[i].getAttribute("name") === match[1] ) {
         
     | 
| 
      
 1761 
     | 
    
         
            +
            						ret.push( results[i] );
         
     | 
| 
      
 1762 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1763 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1764 
     | 
    
         
            +
             
     | 
| 
      
 1765 
     | 
    
         
            +
            				return ret.length === 0 ? null : ret;
         
     | 
| 
      
 1766 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1767 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1768 
     | 
    
         
            +
            		TAG: function(match, context){
         
     | 
| 
      
 1769 
     | 
    
         
            +
            			return context.getElementsByTagName(match[1]);
         
     | 
| 
      
 1770 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1771 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1772 
     | 
    
         
            +
            	preFilter: {
         
     | 
| 
      
 1773 
     | 
    
         
            +
            		CLASS: function(match, curLoop, inplace, result, not, isXML){
         
     | 
| 
      
 1774 
     | 
    
         
            +
            			match = " " + match[1].replace(/\\/g, "") + " ";
         
     | 
| 
      
 1775 
     | 
    
         
            +
             
     | 
| 
      
 1776 
     | 
    
         
            +
            			if ( isXML ) {
         
     | 
| 
      
 1777 
     | 
    
         
            +
            				return match;
         
     | 
| 
      
 1778 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1779 
     | 
    
         
            +
             
     | 
| 
      
 1780 
     | 
    
         
            +
            			for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
         
     | 
| 
      
 1781 
     | 
    
         
            +
            				if ( elem ) {
         
     | 
| 
      
 1782 
     | 
    
         
            +
            					if ( not ^ (elem.className && (" " + elem.className + " ").indexOf(match) >= 0) ) {
         
     | 
| 
      
 1783 
     | 
    
         
            +
            						if ( !inplace )
         
     | 
| 
      
 1784 
     | 
    
         
            +
            							result.push( elem );
         
     | 
| 
      
 1785 
     | 
    
         
            +
            					} else if ( inplace ) {
         
     | 
| 
      
 1786 
     | 
    
         
            +
            						curLoop[i] = false;
         
     | 
| 
      
 1787 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1788 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1789 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1790 
     | 
    
         
            +
             
     | 
| 
      
 1791 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 1792 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1793 
     | 
    
         
            +
            		ID: function(match){
         
     | 
| 
      
 1794 
     | 
    
         
            +
            			return match[1].replace(/\\/g, "");
         
     | 
| 
      
 1795 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1796 
     | 
    
         
            +
            		TAG: function(match, curLoop){
         
     | 
| 
      
 1797 
     | 
    
         
            +
            			for ( var i = 0; curLoop[i] === false; i++ ){}
         
     | 
| 
      
 1798 
     | 
    
         
            +
            			return curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();
         
     | 
| 
      
 1799 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1800 
     | 
    
         
            +
            		CHILD: function(match){
         
     | 
| 
      
 1801 
     | 
    
         
            +
            			if ( match[1] == "nth" ) {
         
     | 
| 
      
 1802 
     | 
    
         
            +
            				// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
         
     | 
| 
      
 1803 
     | 
    
         
            +
            				var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
         
     | 
| 
      
 1804 
     | 
    
         
            +
            					match[2] == "even" && "2n" || match[2] == "odd" && "2n+1" ||
         
     | 
| 
      
 1805 
     | 
    
         
            +
            					!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
         
     | 
| 
      
 1806 
     | 
    
         
            +
             
     | 
| 
      
 1807 
     | 
    
         
            +
            				// calculate the numbers (first)n+(last) including if they are negative
         
     | 
| 
      
 1808 
     | 
    
         
            +
            				match[2] = (test[1] + (test[2] || 1)) - 0;
         
     | 
| 
      
 1809 
     | 
    
         
            +
            				match[3] = test[3] - 0;
         
     | 
| 
      
 1810 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1811 
     | 
    
         
            +
             
     | 
| 
      
 1812 
     | 
    
         
            +
            			// TODO: Move to normal caching system
         
     | 
| 
      
 1813 
     | 
    
         
            +
            			match[0] = done++;
         
     | 
| 
      
 1814 
     | 
    
         
            +
             
     | 
| 
      
 1815 
     | 
    
         
            +
            			return match;
         
     | 
| 
      
 1816 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1817 
     | 
    
         
            +
            		ATTR: function(match, curLoop, inplace, result, not, isXML){
         
     | 
| 
      
 1818 
     | 
    
         
            +
            			var name = match[1].replace(/\\/g, "");
         
     | 
| 
      
 1819 
     | 
    
         
            +
            			
         
     | 
| 
      
 1820 
     | 
    
         
            +
            			if ( !isXML && Expr.attrMap[name] ) {
         
     | 
| 
      
 1821 
     | 
    
         
            +
            				match[1] = Expr.attrMap[name];
         
     | 
| 
      
 1822 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1823 
     | 
    
         
            +
             
     | 
| 
      
 1824 
     | 
    
         
            +
            			if ( match[2] === "~=" ) {
         
     | 
| 
      
 1825 
     | 
    
         
            +
            				match[4] = " " + match[4] + " ";
         
     | 
| 
      
 1826 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1827 
     | 
    
         
            +
             
     | 
| 
      
 1828 
     | 
    
         
            +
            			return match;
         
     | 
| 
      
 1829 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1830 
     | 
    
         
            +
            		PSEUDO: function(match, curLoop, inplace, result, not){
         
     | 
| 
      
 1831 
     | 
    
         
            +
            			if ( match[1] === "not" ) {
         
     | 
| 
      
 1832 
     | 
    
         
            +
            				// If we're dealing with a complex expression, or a simple one
         
     | 
| 
      
 1833 
     | 
    
         
            +
            				if ( match[3].match(chunker).length > 1 || /^\w/.test(match[3]) ) {
         
     | 
| 
      
 1834 
     | 
    
         
            +
            					match[3] = Sizzle(match[3], null, null, curLoop);
         
     | 
| 
      
 1835 
     | 
    
         
            +
            				} else {
         
     | 
| 
      
 1836 
     | 
    
         
            +
            					var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
         
     | 
| 
      
 1837 
     | 
    
         
            +
            					if ( !inplace ) {
         
     | 
| 
      
 1838 
     | 
    
         
            +
            						result.push.apply( result, ret );
         
     | 
| 
      
 1839 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1840 
     | 
    
         
            +
            					return false;
         
     | 
| 
      
 1841 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1842 
     | 
    
         
            +
            			} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
         
     | 
| 
      
 1843 
     | 
    
         
            +
            				return true;
         
     | 
| 
      
 1844 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1845 
     | 
    
         
            +
            			
         
     | 
| 
      
 1846 
     | 
    
         
            +
            			return match;
         
     | 
| 
      
 1847 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1848 
     | 
    
         
            +
            		POS: function(match){
         
     | 
| 
      
 1849 
     | 
    
         
            +
            			match.unshift( true );
         
     | 
| 
      
 1850 
     | 
    
         
            +
            			return match;
         
     | 
| 
      
 1851 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1852 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1853 
     | 
    
         
            +
            	filters: {
         
     | 
| 
      
 1854 
     | 
    
         
            +
            		enabled: function(elem){
         
     | 
| 
      
 1855 
     | 
    
         
            +
            			return elem.disabled === false && elem.type !== "hidden";
         
     | 
| 
      
 1856 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1857 
     | 
    
         
            +
            		disabled: function(elem){
         
     | 
| 
      
 1858 
     | 
    
         
            +
            			return elem.disabled === true;
         
     | 
| 
      
 1859 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1860 
     | 
    
         
            +
            		checked: function(elem){
         
     | 
| 
      
 1861 
     | 
    
         
            +
            			return elem.checked === true;
         
     | 
| 
      
 1862 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1863 
     | 
    
         
            +
            		selected: function(elem){
         
     | 
| 
      
 1864 
     | 
    
         
            +
            			// Accessing this property makes selected-by-default
         
     | 
| 
      
 1865 
     | 
    
         
            +
            			// options in Safari work properly
         
     | 
| 
      
 1866 
     | 
    
         
            +
            			elem.parentNode.selectedIndex;
         
     | 
| 
      
 1867 
     | 
    
         
            +
            			return elem.selected === true;
         
     | 
| 
      
 1868 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1869 
     | 
    
         
            +
            		parent: function(elem){
         
     | 
| 
      
 1870 
     | 
    
         
            +
            			return !!elem.firstChild;
         
     | 
| 
      
 1871 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1872 
     | 
    
         
            +
            		empty: function(elem){
         
     | 
| 
      
 1873 
     | 
    
         
            +
            			return !elem.firstChild;
         
     | 
| 
      
 1874 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1875 
     | 
    
         
            +
            		has: function(elem, i, match){
         
     | 
| 
      
 1876 
     | 
    
         
            +
            			return !!Sizzle( match[3], elem ).length;
         
     | 
| 
      
 1877 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1878 
     | 
    
         
            +
            		header: function(elem){
         
     | 
| 
      
 1879 
     | 
    
         
            +
            			return /h\d/i.test( elem.nodeName );
         
     | 
| 
      
 1880 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1881 
     | 
    
         
            +
            		text: function(elem){
         
     | 
| 
      
 1882 
     | 
    
         
            +
            			return "text" === elem.type;
         
     | 
| 
      
 1883 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1884 
     | 
    
         
            +
            		radio: function(elem){
         
     | 
| 
      
 1885 
     | 
    
         
            +
            			return "radio" === elem.type;
         
     | 
| 
      
 1886 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1887 
     | 
    
         
            +
            		checkbox: function(elem){
         
     | 
| 
      
 1888 
     | 
    
         
            +
            			return "checkbox" === elem.type;
         
     | 
| 
      
 1889 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1890 
     | 
    
         
            +
            		file: function(elem){
         
     | 
| 
      
 1891 
     | 
    
         
            +
            			return "file" === elem.type;
         
     | 
| 
      
 1892 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1893 
     | 
    
         
            +
            		password: function(elem){
         
     | 
| 
      
 1894 
     | 
    
         
            +
            			return "password" === elem.type;
         
     | 
| 
      
 1895 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1896 
     | 
    
         
            +
            		submit: function(elem){
         
     | 
| 
      
 1897 
     | 
    
         
            +
            			return "submit" === elem.type;
         
     | 
| 
      
 1898 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1899 
     | 
    
         
            +
            		image: function(elem){
         
     | 
| 
      
 1900 
     | 
    
         
            +
            			return "image" === elem.type;
         
     | 
| 
      
 1901 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1902 
     | 
    
         
            +
            		reset: function(elem){
         
     | 
| 
      
 1903 
     | 
    
         
            +
            			return "reset" === elem.type;
         
     | 
| 
      
 1904 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1905 
     | 
    
         
            +
            		button: function(elem){
         
     | 
| 
      
 1906 
     | 
    
         
            +
            			return "button" === elem.type || elem.nodeName.toUpperCase() === "BUTTON";
         
     | 
| 
      
 1907 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1908 
     | 
    
         
            +
            		input: function(elem){
         
     | 
| 
      
 1909 
     | 
    
         
            +
            			return /input|select|textarea|button/i.test(elem.nodeName);
         
     | 
| 
      
 1910 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1911 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1912 
     | 
    
         
            +
            	setFilters: {
         
     | 
| 
      
 1913 
     | 
    
         
            +
            		first: function(elem, i){
         
     | 
| 
      
 1914 
     | 
    
         
            +
            			return i === 0;
         
     | 
| 
      
 1915 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1916 
     | 
    
         
            +
            		last: function(elem, i, match, array){
         
     | 
| 
      
 1917 
     | 
    
         
            +
            			return i === array.length - 1;
         
     | 
| 
      
 1918 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1919 
     | 
    
         
            +
            		even: function(elem, i){
         
     | 
| 
      
 1920 
     | 
    
         
            +
            			return i % 2 === 0;
         
     | 
| 
      
 1921 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1922 
     | 
    
         
            +
            		odd: function(elem, i){
         
     | 
| 
      
 1923 
     | 
    
         
            +
            			return i % 2 === 1;
         
     | 
| 
      
 1924 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1925 
     | 
    
         
            +
            		lt: function(elem, i, match){
         
     | 
| 
      
 1926 
     | 
    
         
            +
            			return i < match[3] - 0;
         
     | 
| 
      
 1927 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1928 
     | 
    
         
            +
            		gt: function(elem, i, match){
         
     | 
| 
      
 1929 
     | 
    
         
            +
            			return i > match[3] - 0;
         
     | 
| 
      
 1930 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1931 
     | 
    
         
            +
            		nth: function(elem, i, match){
         
     | 
| 
      
 1932 
     | 
    
         
            +
            			return match[3] - 0 == i;
         
     | 
| 
      
 1933 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1934 
     | 
    
         
            +
            		eq: function(elem, i, match){
         
     | 
| 
      
 1935 
     | 
    
         
            +
            			return match[3] - 0 == i;
         
     | 
| 
      
 1936 
     | 
    
         
            +
            		}
         
     | 
| 
      
 1937 
     | 
    
         
            +
            	},
         
     | 
| 
      
 1938 
     | 
    
         
            +
            	filter: {
         
     | 
| 
      
 1939 
     | 
    
         
            +
            		PSEUDO: function(elem, match, i, array){
         
     | 
| 
      
 1940 
     | 
    
         
            +
            			var name = match[1], filter = Expr.filters[ name ];
         
     | 
| 
      
 1941 
     | 
    
         
            +
             
     | 
| 
      
 1942 
     | 
    
         
            +
            			if ( filter ) {
         
     | 
| 
      
 1943 
     | 
    
         
            +
            				return filter( elem, i, match, array );
         
     | 
| 
      
 1944 
     | 
    
         
            +
            			} else if ( name === "contains" ) {
         
     | 
| 
      
 1945 
     | 
    
         
            +
            				return (elem.textContent || elem.innerText || "").indexOf(match[3]) >= 0;
         
     | 
| 
      
 1946 
     | 
    
         
            +
            			} else if ( name === "not" ) {
         
     | 
| 
      
 1947 
     | 
    
         
            +
            				var not = match[3];
         
     | 
| 
      
 1948 
     | 
    
         
            +
             
     | 
| 
      
 1949 
     | 
    
         
            +
            				for ( var i = 0, l = not.length; i < l; i++ ) {
         
     | 
| 
      
 1950 
     | 
    
         
            +
            					if ( not[i] === elem ) {
         
     | 
| 
      
 1951 
     | 
    
         
            +
            						return false;
         
     | 
| 
      
 1952 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1953 
     | 
    
         
            +
            				}
         
     | 
| 
      
 1954 
     | 
    
         
            +
             
     | 
| 
      
 1955 
     | 
    
         
            +
            				return true;
         
     | 
| 
      
 1956 
     | 
    
         
            +
            			}
         
     | 
| 
      
 1957 
     | 
    
         
            +
            		},
         
     | 
| 
      
 1958 
     | 
    
         
            +
            		CHILD: function(elem, match){
         
     | 
| 
      
 1959 
     | 
    
         
            +
            			var type = match[1], node = elem;
         
     | 
| 
      
 1960 
     | 
    
         
            +
            			switch (type) {
         
     | 
| 
      
 1961 
     | 
    
         
            +
            				case 'only':
         
     | 
| 
      
 1962 
     | 
    
         
            +
            				case 'first':
         
     | 
| 
      
 1963 
     | 
    
         
            +
            					while (node = node.previousSibling)  {
         
     | 
| 
      
 1964 
     | 
    
         
            +
            						if ( node.nodeType === 1 ) return false;
         
     | 
| 
      
 1965 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1966 
     | 
    
         
            +
            					if ( type == 'first') return true;
         
     | 
| 
      
 1967 
     | 
    
         
            +
            					node = elem;
         
     | 
| 
      
 1968 
     | 
    
         
            +
            				case 'last':
         
     | 
| 
      
 1969 
     | 
    
         
            +
            					while (node = node.nextSibling)  {
         
     | 
| 
      
 1970 
     | 
    
         
            +
            						if ( node.nodeType === 1 ) return false;
         
     | 
| 
      
 1971 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1972 
     | 
    
         
            +
            					return true;
         
     | 
| 
      
 1973 
     | 
    
         
            +
            				case 'nth':
         
     | 
| 
      
 1974 
     | 
    
         
            +
            					var first = match[2], last = match[3];
         
     | 
| 
      
 1975 
     | 
    
         
            +
             
     | 
| 
      
 1976 
     | 
    
         
            +
            					if ( first == 1 && last == 0 ) {
         
     | 
| 
      
 1977 
     | 
    
         
            +
            						return true;
         
     | 
| 
      
 1978 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1979 
     | 
    
         
            +
            					
         
     | 
| 
      
 1980 
     | 
    
         
            +
            					var doneName = match[0],
         
     | 
| 
      
 1981 
     | 
    
         
            +
            						parent = elem.parentNode;
         
     | 
| 
      
 1982 
     | 
    
         
            +
            	
         
     | 
| 
      
 1983 
     | 
    
         
            +
            					if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
         
     | 
| 
      
 1984 
     | 
    
         
            +
            						var count = 0;
         
     | 
| 
      
 1985 
     | 
    
         
            +
            						for ( node = parent.firstChild; node; node = node.nextSibling ) {
         
     | 
| 
      
 1986 
     | 
    
         
            +
            							if ( node.nodeType === 1 ) {
         
     | 
| 
      
 1987 
     | 
    
         
            +
            								node.nodeIndex = ++count;
         
     | 
| 
      
 1988 
     | 
    
         
            +
            							}
         
     | 
| 
      
 1989 
     | 
    
         
            +
            						} 
         
     | 
| 
      
 1990 
     | 
    
         
            +
            						parent.sizcache = doneName;
         
     | 
| 
      
 1991 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1992 
     | 
    
         
            +
            					
         
     | 
| 
      
 1993 
     | 
    
         
            +
            					var diff = elem.nodeIndex - last;
         
     | 
| 
      
 1994 
     | 
    
         
            +
            					if ( first == 0 ) {
         
     | 
| 
      
 1995 
     | 
    
         
            +
            						return diff == 0;
         
     | 
| 
      
 1996 
     | 
    
         
            +
            					} else {
         
     | 
| 
      
 1997 
     | 
    
         
            +
            						return ( diff % first == 0 && diff / first >= 0 );
         
     | 
| 
      
 1998 
     | 
    
         
            +
            					}
         
     | 
| 
      
 1999 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2000 
     | 
    
         
            +
            		},
         
     | 
| 
      
 2001 
     | 
    
         
            +
            		ID: function(elem, match){
         
     | 
| 
      
 2002 
     | 
    
         
            +
            			return elem.nodeType === 1 && elem.getAttribute("id") === match;
         
     | 
| 
      
 2003 
     | 
    
         
            +
            		},
         
     | 
| 
      
 2004 
     | 
    
         
            +
            		TAG: function(elem, match){
         
     | 
| 
      
 2005 
     | 
    
         
            +
            			return (match === "*" && elem.nodeType === 1) || elem.nodeName === match;
         
     | 
| 
      
 2006 
     | 
    
         
            +
            		},
         
     | 
| 
      
 2007 
     | 
    
         
            +
            		CLASS: function(elem, match){
         
     | 
| 
      
 2008 
     | 
    
         
            +
            			return (" " + (elem.className || elem.getAttribute("class")) + " ")
         
     | 
| 
      
 2009 
     | 
    
         
            +
            				.indexOf( match ) > -1;
         
     | 
| 
      
 2010 
     | 
    
         
            +
            		},
         
     | 
| 
      
 2011 
     | 
    
         
            +
            		ATTR: function(elem, match){
         
     | 
| 
      
 2012 
     | 
    
         
            +
            			var name = match[1],
         
     | 
| 
      
 2013 
     | 
    
         
            +
            				result = Expr.attrHandle[ name ] ?
         
     | 
| 
      
 2014 
     | 
    
         
            +
            					Expr.attrHandle[ name ]( elem ) :
         
     | 
| 
      
 2015 
     | 
    
         
            +
            					elem[ name ] != null ?
         
     | 
| 
      
 2016 
     | 
    
         
            +
            						elem[ name ] :
         
     | 
| 
      
 2017 
     | 
    
         
            +
            						elem.getAttribute( name ),
         
     | 
| 
      
 2018 
     | 
    
         
            +
            				value = result + "",
         
     | 
| 
      
 2019 
     | 
    
         
            +
            				type = match[2],
         
     | 
| 
      
 2020 
     | 
    
         
            +
            				check = match[4];
         
     | 
| 
      
 2021 
     | 
    
         
            +
             
     | 
| 
      
 2022 
     | 
    
         
            +
            			return result == null ?
         
     | 
| 
      
 2023 
     | 
    
         
            +
            				type === "!=" :
         
     | 
| 
      
 2024 
     | 
    
         
            +
            				type === "=" ?
         
     | 
| 
      
 2025 
     | 
    
         
            +
            				value === check :
         
     | 
| 
      
 2026 
     | 
    
         
            +
            				type === "*=" ?
         
     | 
| 
      
 2027 
     | 
    
         
            +
            				value.indexOf(check) >= 0 :
         
     | 
| 
      
 2028 
     | 
    
         
            +
            				type === "~=" ?
         
     | 
| 
      
 2029 
     | 
    
         
            +
            				(" " + value + " ").indexOf(check) >= 0 :
         
     | 
| 
      
 2030 
     | 
    
         
            +
            				!check ?
         
     | 
| 
      
 2031 
     | 
    
         
            +
            				value && result !== false :
         
     | 
| 
      
 2032 
     | 
    
         
            +
            				type === "!=" ?
         
     | 
| 
      
 2033 
     | 
    
         
            +
            				value != check :
         
     | 
| 
      
 2034 
     | 
    
         
            +
            				type === "^=" ?
         
     | 
| 
      
 2035 
     | 
    
         
            +
            				value.indexOf(check) === 0 :
         
     | 
| 
      
 2036 
     | 
    
         
            +
            				type === "$=" ?
         
     | 
| 
      
 2037 
     | 
    
         
            +
            				value.substr(value.length - check.length) === check :
         
     | 
| 
      
 2038 
     | 
    
         
            +
            				type === "|=" ?
         
     | 
| 
      
 2039 
     | 
    
         
            +
            				value === check || value.substr(0, check.length + 1) === check + "-" :
         
     | 
| 
      
 2040 
     | 
    
         
            +
            				false;
         
     | 
| 
      
 2041 
     | 
    
         
            +
            		},
         
     | 
| 
      
 2042 
     | 
    
         
            +
            		POS: function(elem, match, i, array){
         
     | 
| 
      
 2043 
     | 
    
         
            +
            			var name = match[2], filter = Expr.setFilters[ name ];
         
     | 
| 
      
 2044 
     | 
    
         
            +
             
     | 
| 
      
 2045 
     | 
    
         
            +
            			if ( filter ) {
         
     | 
| 
      
 2046 
     | 
    
         
            +
            				return filter( elem, i, match, array );
         
     | 
| 
      
 2047 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2048 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2049 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2050 
     | 
    
         
            +
            };
         
     | 
| 
      
 2051 
     | 
    
         
            +
             
     | 
| 
      
 2052 
     | 
    
         
            +
            var origPOS = Expr.match.POS;
         
     | 
| 
      
 2053 
     | 
    
         
            +
             
     | 
| 
      
 2054 
     | 
    
         
            +
            for ( var type in Expr.match ) {
         
     | 
| 
      
 2055 
     | 
    
         
            +
            	Expr.match[ type ] = RegExp( Expr.match[ type ].source + /(?![^\[]*\])(?![^\(]*\))/.source );
         
     | 
| 
      
 2056 
     | 
    
         
            +
            }
         
     | 
| 
      
 2057 
     | 
    
         
            +
             
     | 
| 
      
 2058 
     | 
    
         
            +
            var makeArray = function(array, results) {
         
     | 
| 
      
 2059 
     | 
    
         
            +
            	array = Array.prototype.slice.call( array );
         
     | 
| 
      
 2060 
     | 
    
         
            +
             
     | 
| 
      
 2061 
     | 
    
         
            +
            	if ( results ) {
         
     | 
| 
      
 2062 
     | 
    
         
            +
            		results.push.apply( results, array );
         
     | 
| 
      
 2063 
     | 
    
         
            +
            		return results;
         
     | 
| 
      
 2064 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2065 
     | 
    
         
            +
            	
         
     | 
| 
      
 2066 
     | 
    
         
            +
            	return array;
         
     | 
| 
      
 2067 
     | 
    
         
            +
            };
         
     | 
| 
      
 2068 
     | 
    
         
            +
             
     | 
| 
      
 2069 
     | 
    
         
            +
            // Perform a simple check to determine if the browser is capable of
         
     | 
| 
      
 2070 
     | 
    
         
            +
            // converting a NodeList to an array using builtin methods.
         
     | 
| 
      
 2071 
     | 
    
         
            +
            try {
         
     | 
| 
      
 2072 
     | 
    
         
            +
            	Array.prototype.slice.call( document.documentElement.childNodes );
         
     | 
| 
      
 2073 
     | 
    
         
            +
             
     | 
| 
      
 2074 
     | 
    
         
            +
            // Provide a fallback method if it does not work
         
     | 
| 
      
 2075 
     | 
    
         
            +
            } catch(e){
         
     | 
| 
      
 2076 
     | 
    
         
            +
            	makeArray = function(array, results) {
         
     | 
| 
      
 2077 
     | 
    
         
            +
            		var ret = results || [];
         
     | 
| 
      
 2078 
     | 
    
         
            +
             
     | 
| 
      
 2079 
     | 
    
         
            +
            		if ( toString.call(array) === "[object Array]" ) {
         
     | 
| 
      
 2080 
     | 
    
         
            +
            			Array.prototype.push.apply( ret, array );
         
     | 
| 
      
 2081 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 2082 
     | 
    
         
            +
            			if ( typeof array.length === "number" ) {
         
     | 
| 
      
 2083 
     | 
    
         
            +
            				for ( var i = 0, l = array.length; i < l; i++ ) {
         
     | 
| 
      
 2084 
     | 
    
         
            +
            					ret.push( array[i] );
         
     | 
| 
      
 2085 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2086 
     | 
    
         
            +
            			} else {
         
     | 
| 
      
 2087 
     | 
    
         
            +
            				for ( var i = 0; array[i]; i++ ) {
         
     | 
| 
      
 2088 
     | 
    
         
            +
            					ret.push( array[i] );
         
     | 
| 
      
 2089 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2090 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2091 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2092 
     | 
    
         
            +
             
     | 
| 
      
 2093 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 2094 
     | 
    
         
            +
            	};
         
     | 
| 
      
 2095 
     | 
    
         
            +
            }
         
     | 
| 
      
 2096 
     | 
    
         
            +
             
     | 
| 
      
 2097 
     | 
    
         
            +
            var sortOrder;
         
     | 
| 
      
 2098 
     | 
    
         
            +
             
     | 
| 
      
 2099 
     | 
    
         
            +
            if ( document.documentElement.compareDocumentPosition ) {
         
     | 
| 
      
 2100 
     | 
    
         
            +
            	sortOrder = function( a, b ) {
         
     | 
| 
      
 2101 
     | 
    
         
            +
            		var ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;
         
     | 
| 
      
 2102 
     | 
    
         
            +
            		if ( ret === 0 ) {
         
     | 
| 
      
 2103 
     | 
    
         
            +
            			hasDuplicate = true;
         
     | 
| 
      
 2104 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2105 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 2106 
     | 
    
         
            +
            	};
         
     | 
| 
      
 2107 
     | 
    
         
            +
            } else if ( "sourceIndex" in document.documentElement ) {
         
     | 
| 
      
 2108 
     | 
    
         
            +
            	sortOrder = function( a, b ) {
         
     | 
| 
      
 2109 
     | 
    
         
            +
            		var ret = a.sourceIndex - b.sourceIndex;
         
     | 
| 
      
 2110 
     | 
    
         
            +
            		if ( ret === 0 ) {
         
     | 
| 
      
 2111 
     | 
    
         
            +
            			hasDuplicate = true;
         
     | 
| 
      
 2112 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2113 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 2114 
     | 
    
         
            +
            	};
         
     | 
| 
      
 2115 
     | 
    
         
            +
            } else if ( document.createRange ) {
         
     | 
| 
      
 2116 
     | 
    
         
            +
            	sortOrder = function( a, b ) {
         
     | 
| 
      
 2117 
     | 
    
         
            +
            		var aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();
         
     | 
| 
      
 2118 
     | 
    
         
            +
            		aRange.selectNode(a);
         
     | 
| 
      
 2119 
     | 
    
         
            +
            		aRange.collapse(true);
         
     | 
| 
      
 2120 
     | 
    
         
            +
            		bRange.selectNode(b);
         
     | 
| 
      
 2121 
     | 
    
         
            +
            		bRange.collapse(true);
         
     | 
| 
      
 2122 
     | 
    
         
            +
            		var ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);
         
     | 
| 
      
 2123 
     | 
    
         
            +
            		if ( ret === 0 ) {
         
     | 
| 
      
 2124 
     | 
    
         
            +
            			hasDuplicate = true;
         
     | 
| 
      
 2125 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2126 
     | 
    
         
            +
            		return ret;
         
     | 
| 
      
 2127 
     | 
    
         
            +
            	};
         
     | 
| 
      
 2128 
     | 
    
         
            +
            }
         
     | 
| 
      
 2129 
     | 
    
         
            +
             
     | 
| 
      
 2130 
     | 
    
         
            +
            // Check to see if the browser returns elements by name when
         
     | 
| 
      
 2131 
     | 
    
         
            +
            // querying by getElementById (and provide a workaround)
         
     | 
| 
      
 2132 
     | 
    
         
            +
            (function(){
         
     | 
| 
      
 2133 
     | 
    
         
            +
            	// We're going to inject a fake input element with a specified name
         
     | 
| 
      
 2134 
     | 
    
         
            +
            	var form = document.createElement("form"),
         
     | 
| 
      
 2135 
     | 
    
         
            +
            		id = "script" + (new Date).getTime();
         
     | 
| 
      
 2136 
     | 
    
         
            +
            	form.innerHTML = "<input name='" + id + "'/>";
         
     | 
| 
      
 2137 
     | 
    
         
            +
             
     | 
| 
      
 2138 
     | 
    
         
            +
            	// Inject it into the root element, check its status, and remove it quickly
         
     | 
| 
      
 2139 
     | 
    
         
            +
            	var root = document.documentElement;
         
     | 
| 
      
 2140 
     | 
    
         
            +
            	root.insertBefore( form, root.firstChild );
         
     | 
| 
      
 2141 
     | 
    
         
            +
             
     | 
| 
      
 2142 
     | 
    
         
            +
            	// The workaround has to do additional checks after a getElementById
         
     | 
| 
      
 2143 
     | 
    
         
            +
            	// Which slows things down for other browsers (hence the branching)
         
     | 
| 
      
 2144 
     | 
    
         
            +
            	if ( !!document.getElementById( id ) ) {
         
     | 
| 
      
 2145 
     | 
    
         
            +
            		Expr.find.ID = function(match, context, isXML){
         
     | 
| 
      
 2146 
     | 
    
         
            +
            			if ( typeof context.getElementById !== "undefined" && !isXML ) {
         
     | 
| 
      
 2147 
     | 
    
         
            +
            				var m = context.getElementById(match[1]);
         
     | 
| 
      
 2148 
     | 
    
         
            +
            				return m ? m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ? [m] : undefined : [];
         
     | 
| 
      
 2149 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2150 
     | 
    
         
            +
            		};
         
     | 
| 
      
 2151 
     | 
    
         
            +
             
     | 
| 
      
 2152 
     | 
    
         
            +
            		Expr.filter.ID = function(elem, match){
         
     | 
| 
      
 2153 
     | 
    
         
            +
            			var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
         
     | 
| 
      
 2154 
     | 
    
         
            +
            			return elem.nodeType === 1 && node && node.nodeValue === match;
         
     | 
| 
      
 2155 
     | 
    
         
            +
            		};
         
     | 
| 
      
 2156 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2157 
     | 
    
         
            +
             
     | 
| 
      
 2158 
     | 
    
         
            +
            	root.removeChild( form );
         
     | 
| 
      
 2159 
     | 
    
         
            +
            })();
         
     | 
| 
      
 2160 
     | 
    
         
            +
             
     | 
| 
      
 2161 
     | 
    
         
            +
            (function(){
         
     | 
| 
      
 2162 
     | 
    
         
            +
            	// Check to see if the browser returns only elements
         
     | 
| 
      
 2163 
     | 
    
         
            +
            	// when doing getElementsByTagName("*")
         
     | 
| 
      
 2164 
     | 
    
         
            +
             
     | 
| 
      
 2165 
     | 
    
         
            +
            	// Create a fake element
         
     | 
| 
      
 2166 
     | 
    
         
            +
            	var div = document.createElement("div");
         
     | 
| 
      
 2167 
     | 
    
         
            +
            	div.appendChild( document.createComment("") );
         
     | 
| 
      
 2168 
     | 
    
         
            +
             
     | 
| 
      
 2169 
     | 
    
         
            +
            	// Make sure no comments are found
         
     | 
| 
      
 2170 
     | 
    
         
            +
            	if ( div.getElementsByTagName("*").length > 0 ) {
         
     | 
| 
      
 2171 
     | 
    
         
            +
            		Expr.find.TAG = function(match, context){
         
     | 
| 
      
 2172 
     | 
    
         
            +
            			var results = context.getElementsByTagName(match[1]);
         
     | 
| 
      
 2173 
     | 
    
         
            +
             
     | 
| 
      
 2174 
     | 
    
         
            +
            			// Filter out possible comments
         
     | 
| 
      
 2175 
     | 
    
         
            +
            			if ( match[1] === "*" ) {
         
     | 
| 
      
 2176 
     | 
    
         
            +
            				var tmp = [];
         
     | 
| 
      
 2177 
     | 
    
         
            +
             
     | 
| 
      
 2178 
     | 
    
         
            +
            				for ( var i = 0; results[i]; i++ ) {
         
     | 
| 
      
 2179 
     | 
    
         
            +
            					if ( results[i].nodeType === 1 ) {
         
     | 
| 
      
 2180 
     | 
    
         
            +
            						tmp.push( results[i] );
         
     | 
| 
      
 2181 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2182 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2183 
     | 
    
         
            +
             
     | 
| 
      
 2184 
     | 
    
         
            +
            				results = tmp;
         
     | 
| 
      
 2185 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2186 
     | 
    
         
            +
             
     | 
| 
      
 2187 
     | 
    
         
            +
            			return results;
         
     | 
| 
      
 2188 
     | 
    
         
            +
            		};
         
     | 
| 
      
 2189 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2190 
     | 
    
         
            +
             
     | 
| 
      
 2191 
     | 
    
         
            +
            	// Check to see if an attribute returns normalized href attributes
         
     | 
| 
      
 2192 
     | 
    
         
            +
            	div.innerHTML = "<a href='#'></a>";
         
     | 
| 
      
 2193 
     | 
    
         
            +
            	if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
         
     | 
| 
      
 2194 
     | 
    
         
            +
            			div.firstChild.getAttribute("href") !== "#" ) {
         
     | 
| 
      
 2195 
     | 
    
         
            +
            		Expr.attrHandle.href = function(elem){
         
     | 
| 
      
 2196 
     | 
    
         
            +
            			return elem.getAttribute("href", 2);
         
     | 
| 
      
 2197 
     | 
    
         
            +
            		};
         
     | 
| 
      
 2198 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2199 
     | 
    
         
            +
            })();
         
     | 
| 
      
 2200 
     | 
    
         
            +
             
     | 
| 
      
 2201 
     | 
    
         
            +
            if ( document.querySelectorAll ) (function(){
         
     | 
| 
      
 2202 
     | 
    
         
            +
            	var oldSizzle = Sizzle, div = document.createElement("div");
         
     | 
| 
      
 2203 
     | 
    
         
            +
            	div.innerHTML = "<p class='TEST'></p>";
         
     | 
| 
      
 2204 
     | 
    
         
            +
             
     | 
| 
      
 2205 
     | 
    
         
            +
            	// Safari can't handle uppercase or unicode characters when
         
     | 
| 
      
 2206 
     | 
    
         
            +
            	// in quirks mode.
         
     | 
| 
      
 2207 
     | 
    
         
            +
            	if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
         
     | 
| 
      
 2208 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 2209 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2210 
     | 
    
         
            +
            	
         
     | 
| 
      
 2211 
     | 
    
         
            +
            	Sizzle = function(query, context, extra, seed){
         
     | 
| 
      
 2212 
     | 
    
         
            +
            		context = context || document;
         
     | 
| 
      
 2213 
     | 
    
         
            +
             
     | 
| 
      
 2214 
     | 
    
         
            +
            		// Only use querySelectorAll on non-XML documents
         
     | 
| 
      
 2215 
     | 
    
         
            +
            		// (ID selectors don't work in non-HTML documents)
         
     | 
| 
      
 2216 
     | 
    
         
            +
            		if ( !seed && context.nodeType === 9 && !isXML(context) ) {
         
     | 
| 
      
 2217 
     | 
    
         
            +
            			try {
         
     | 
| 
      
 2218 
     | 
    
         
            +
            				return makeArray( context.querySelectorAll(query), extra );
         
     | 
| 
      
 2219 
     | 
    
         
            +
            			} catch(e){}
         
     | 
| 
      
 2220 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2221 
     | 
    
         
            +
            		
         
     | 
| 
      
 2222 
     | 
    
         
            +
            		return oldSizzle(query, context, extra, seed);
         
     | 
| 
      
 2223 
     | 
    
         
            +
            	};
         
     | 
| 
      
 2224 
     | 
    
         
            +
             
     | 
| 
      
 2225 
     | 
    
         
            +
            	Sizzle.find = oldSizzle.find;
         
     | 
| 
      
 2226 
     | 
    
         
            +
            	Sizzle.filter = oldSizzle.filter;
         
     | 
| 
      
 2227 
     | 
    
         
            +
            	Sizzle.selectors = oldSizzle.selectors;
         
     | 
| 
      
 2228 
     | 
    
         
            +
            	Sizzle.matches = oldSizzle.matches;
         
     | 
| 
      
 2229 
     | 
    
         
            +
            })();
         
     | 
| 
      
 2230 
     | 
    
         
            +
             
     | 
| 
      
 2231 
     | 
    
         
            +
            if ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){
         
     | 
| 
      
 2232 
     | 
    
         
            +
            	var div = document.createElement("div");
         
     | 
| 
      
 2233 
     | 
    
         
            +
            	div.innerHTML = "<div class='test e'></div><div class='test'></div>";
         
     | 
| 
      
 2234 
     | 
    
         
            +
             
     | 
| 
      
 2235 
     | 
    
         
            +
            	// Opera can't find a second classname (in 9.6)
         
     | 
| 
      
 2236 
     | 
    
         
            +
            	if ( div.getElementsByClassName("e").length === 0 )
         
     | 
| 
      
 2237 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 2238 
     | 
    
         
            +
             
     | 
| 
      
 2239 
     | 
    
         
            +
            	// Safari caches class attributes, doesn't catch changes (in 3.2)
         
     | 
| 
      
 2240 
     | 
    
         
            +
            	div.lastChild.className = "e";
         
     | 
| 
      
 2241 
     | 
    
         
            +
             
     | 
| 
      
 2242 
     | 
    
         
            +
            	if ( div.getElementsByClassName("e").length === 1 )
         
     | 
| 
      
 2243 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 2244 
     | 
    
         
            +
             
     | 
| 
      
 2245 
     | 
    
         
            +
            	Expr.order.splice(1, 0, "CLASS");
         
     | 
| 
      
 2246 
     | 
    
         
            +
            	Expr.find.CLASS = function(match, context, isXML) {
         
     | 
| 
      
 2247 
     | 
    
         
            +
            		if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
         
     | 
| 
      
 2248 
     | 
    
         
            +
            			return context.getElementsByClassName(match[1]);
         
     | 
| 
      
 2249 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2250 
     | 
    
         
            +
            	};
         
     | 
| 
      
 2251 
     | 
    
         
            +
            })();
         
     | 
| 
      
 2252 
     | 
    
         
            +
             
     | 
| 
      
 2253 
     | 
    
         
            +
            function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
         
     | 
| 
      
 2254 
     | 
    
         
            +
            	var sibDir = dir == "previousSibling" && !isXML;
         
     | 
| 
      
 2255 
     | 
    
         
            +
            	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
         
     | 
| 
      
 2256 
     | 
    
         
            +
            		var elem = checkSet[i];
         
     | 
| 
      
 2257 
     | 
    
         
            +
            		if ( elem ) {
         
     | 
| 
      
 2258 
     | 
    
         
            +
            			if ( sibDir && elem.nodeType === 1 ){
         
     | 
| 
      
 2259 
     | 
    
         
            +
            				elem.sizcache = doneName;
         
     | 
| 
      
 2260 
     | 
    
         
            +
            				elem.sizset = i;
         
     | 
| 
      
 2261 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2262 
     | 
    
         
            +
            			elem = elem[dir];
         
     | 
| 
      
 2263 
     | 
    
         
            +
            			var match = false;
         
     | 
| 
      
 2264 
     | 
    
         
            +
             
     | 
| 
      
 2265 
     | 
    
         
            +
            			while ( elem ) {
         
     | 
| 
      
 2266 
     | 
    
         
            +
            				if ( elem.sizcache === doneName ) {
         
     | 
| 
      
 2267 
     | 
    
         
            +
            					match = checkSet[elem.sizset];
         
     | 
| 
      
 2268 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 2269 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2270 
     | 
    
         
            +
             
     | 
| 
      
 2271 
     | 
    
         
            +
            				if ( elem.nodeType === 1 && !isXML ){
         
     | 
| 
      
 2272 
     | 
    
         
            +
            					elem.sizcache = doneName;
         
     | 
| 
      
 2273 
     | 
    
         
            +
            					elem.sizset = i;
         
     | 
| 
      
 2274 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2275 
     | 
    
         
            +
             
     | 
| 
      
 2276 
     | 
    
         
            +
            				if ( elem.nodeName === cur ) {
         
     | 
| 
      
 2277 
     | 
    
         
            +
            					match = elem;
         
     | 
| 
      
 2278 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 2279 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2280 
     | 
    
         
            +
             
     | 
| 
      
 2281 
     | 
    
         
            +
            				elem = elem[dir];
         
     | 
| 
      
 2282 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2283 
     | 
    
         
            +
             
     | 
| 
      
 2284 
     | 
    
         
            +
            			checkSet[i] = match;
         
     | 
| 
      
 2285 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2286 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2287 
     | 
    
         
            +
            }
         
     | 
| 
      
 2288 
     | 
    
         
            +
             
     | 
| 
      
 2289 
     | 
    
         
            +
            function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
         
     | 
| 
      
 2290 
     | 
    
         
            +
            	var sibDir = dir == "previousSibling" && !isXML;
         
     | 
| 
      
 2291 
     | 
    
         
            +
            	for ( var i = 0, l = checkSet.length; i < l; i++ ) {
         
     | 
| 
      
 2292 
     | 
    
         
            +
            		var elem = checkSet[i];
         
     | 
| 
      
 2293 
     | 
    
         
            +
            		if ( elem ) {
         
     | 
| 
      
 2294 
     | 
    
         
            +
            			if ( sibDir && elem.nodeType === 1 ) {
         
     | 
| 
      
 2295 
     | 
    
         
            +
            				elem.sizcache = doneName;
         
     | 
| 
      
 2296 
     | 
    
         
            +
            				elem.sizset = i;
         
     | 
| 
      
 2297 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2298 
     | 
    
         
            +
            			elem = elem[dir];
         
     | 
| 
      
 2299 
     | 
    
         
            +
            			var match = false;
         
     | 
| 
      
 2300 
     | 
    
         
            +
             
     | 
| 
      
 2301 
     | 
    
         
            +
            			while ( elem ) {
         
     | 
| 
      
 2302 
     | 
    
         
            +
            				if ( elem.sizcache === doneName ) {
         
     | 
| 
      
 2303 
     | 
    
         
            +
            					match = checkSet[elem.sizset];
         
     | 
| 
      
 2304 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 2305 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2306 
     | 
    
         
            +
             
     | 
| 
      
 2307 
     | 
    
         
            +
            				if ( elem.nodeType === 1 ) {
         
     | 
| 
      
 2308 
     | 
    
         
            +
            					if ( !isXML ) {
         
     | 
| 
      
 2309 
     | 
    
         
            +
            						elem.sizcache = doneName;
         
     | 
| 
      
 2310 
     | 
    
         
            +
            						elem.sizset = i;
         
     | 
| 
      
 2311 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2312 
     | 
    
         
            +
            					if ( typeof cur !== "string" ) {
         
     | 
| 
      
 2313 
     | 
    
         
            +
            						if ( elem === cur ) {
         
     | 
| 
      
 2314 
     | 
    
         
            +
            							match = true;
         
     | 
| 
      
 2315 
     | 
    
         
            +
            							break;
         
     | 
| 
      
 2316 
     | 
    
         
            +
            						}
         
     | 
| 
      
 2317 
     | 
    
         
            +
             
     | 
| 
      
 2318 
     | 
    
         
            +
            					} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
         
     | 
| 
      
 2319 
     | 
    
         
            +
            						match = elem;
         
     | 
| 
      
 2320 
     | 
    
         
            +
            						break;
         
     | 
| 
      
 2321 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2322 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2323 
     | 
    
         
            +
             
     | 
| 
      
 2324 
     | 
    
         
            +
            				elem = elem[dir];
         
     | 
| 
      
 2325 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2326 
     | 
    
         
            +
             
     | 
| 
      
 2327 
     | 
    
         
            +
            			checkSet[i] = match;
         
     | 
| 
      
 2328 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2329 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2330 
     | 
    
         
            +
            }
         
     | 
| 
      
 2331 
     | 
    
         
            +
             
     | 
| 
      
 2332 
     | 
    
         
            +
            var contains = document.compareDocumentPosition ?  function(a, b){
         
     | 
| 
      
 2333 
     | 
    
         
            +
            	return a.compareDocumentPosition(b) & 16;
         
     | 
| 
      
 2334 
     | 
    
         
            +
            } : function(a, b){
         
     | 
| 
      
 2335 
     | 
    
         
            +
            	return a !== b && (a.contains ? a.contains(b) : true);
         
     | 
| 
      
 2336 
     | 
    
         
            +
            };
         
     | 
| 
      
 2337 
     | 
    
         
            +
             
     | 
| 
      
 2338 
     | 
    
         
            +
            var isXML = function(elem){
         
     | 
| 
      
 2339 
     | 
    
         
            +
            	return elem.nodeType === 9 && elem.documentElement.nodeName !== "HTML" ||
         
     | 
| 
      
 2340 
     | 
    
         
            +
            		!!elem.ownerDocument && isXML( elem.ownerDocument );
         
     | 
| 
      
 2341 
     | 
    
         
            +
            };
         
     | 
| 
      
 2342 
     | 
    
         
            +
             
     | 
| 
      
 2343 
     | 
    
         
            +
            var posProcess = function(selector, context){
         
     | 
| 
      
 2344 
     | 
    
         
            +
            	var tmpSet = [], later = "", match,
         
     | 
| 
      
 2345 
     | 
    
         
            +
            		root = context.nodeType ? [context] : context;
         
     | 
| 
      
 2346 
     | 
    
         
            +
             
     | 
| 
      
 2347 
     | 
    
         
            +
            	// Position selectors must be done after the filter
         
     | 
| 
      
 2348 
     | 
    
         
            +
            	// And so must :not(positional) so we move all PSEUDOs to the end
         
     | 
| 
      
 2349 
     | 
    
         
            +
            	while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
         
     | 
| 
      
 2350 
     | 
    
         
            +
            		later += match[0];
         
     | 
| 
      
 2351 
     | 
    
         
            +
            		selector = selector.replace( Expr.match.PSEUDO, "" );
         
     | 
| 
      
 2352 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2353 
     | 
    
         
            +
             
     | 
| 
      
 2354 
     | 
    
         
            +
            	selector = Expr.relative[selector] ? selector + "*" : selector;
         
     | 
| 
      
 2355 
     | 
    
         
            +
             
     | 
| 
      
 2356 
     | 
    
         
            +
            	for ( var i = 0, l = root.length; i < l; i++ ) {
         
     | 
| 
      
 2357 
     | 
    
         
            +
            		Sizzle( selector, root[i], tmpSet );
         
     | 
| 
      
 2358 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2359 
     | 
    
         
            +
             
     | 
| 
      
 2360 
     | 
    
         
            +
            	return Sizzle.filter( later, tmpSet );
         
     | 
| 
      
 2361 
     | 
    
         
            +
            };
         
     | 
| 
      
 2362 
     | 
    
         
            +
             
     | 
| 
      
 2363 
     | 
    
         
            +
            // EXPOSE
         
     | 
| 
      
 2364 
     | 
    
         
            +
            jQuery.find = Sizzle;
         
     | 
| 
      
 2365 
     | 
    
         
            +
            jQuery.filter = Sizzle.filter;
         
     | 
| 
      
 2366 
     | 
    
         
            +
            jQuery.expr = Sizzle.selectors;
         
     | 
| 
      
 2367 
     | 
    
         
            +
            jQuery.expr[":"] = jQuery.expr.filters;
         
     | 
| 
      
 2368 
     | 
    
         
            +
             
     | 
| 
      
 2369 
     | 
    
         
            +
            Sizzle.selectors.filters.hidden = function(elem){
         
     | 
| 
      
 2370 
     | 
    
         
            +
            	return elem.offsetWidth === 0 || elem.offsetHeight === 0;
         
     | 
| 
      
 2371 
     | 
    
         
            +
            };
         
     | 
| 
      
 2372 
     | 
    
         
            +
             
     | 
| 
      
 2373 
     | 
    
         
            +
            Sizzle.selectors.filters.visible = function(elem){
         
     | 
| 
      
 2374 
     | 
    
         
            +
            	return elem.offsetWidth > 0 || elem.offsetHeight > 0;
         
     | 
| 
      
 2375 
     | 
    
         
            +
            };
         
     | 
| 
      
 2376 
     | 
    
         
            +
             
     | 
| 
      
 2377 
     | 
    
         
            +
            Sizzle.selectors.filters.animated = function(elem){
         
     | 
| 
      
 2378 
     | 
    
         
            +
            	return jQuery.grep(jQuery.timers, function(fn){
         
     | 
| 
      
 2379 
     | 
    
         
            +
            		return elem === fn.elem;
         
     | 
| 
      
 2380 
     | 
    
         
            +
            	}).length;
         
     | 
| 
      
 2381 
     | 
    
         
            +
            };
         
     | 
| 
      
 2382 
     | 
    
         
            +
             
     | 
| 
      
 2383 
     | 
    
         
            +
            jQuery.multiFilter = function( expr, elems, not ) {
         
     | 
| 
      
 2384 
     | 
    
         
            +
            	if ( not ) {
         
     | 
| 
      
 2385 
     | 
    
         
            +
            		expr = ":not(" + expr + ")";
         
     | 
| 
      
 2386 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2387 
     | 
    
         
            +
             
     | 
| 
      
 2388 
     | 
    
         
            +
            	return Sizzle.matches(expr, elems);
         
     | 
| 
      
 2389 
     | 
    
         
            +
            };
         
     | 
| 
      
 2390 
     | 
    
         
            +
             
     | 
| 
      
 2391 
     | 
    
         
            +
            jQuery.dir = function( elem, dir ){
         
     | 
| 
      
 2392 
     | 
    
         
            +
            	var matched = [], cur = elem[dir];
         
     | 
| 
      
 2393 
     | 
    
         
            +
            	while ( cur && cur != document ) {
         
     | 
| 
      
 2394 
     | 
    
         
            +
            		if ( cur.nodeType == 1 )
         
     | 
| 
      
 2395 
     | 
    
         
            +
            			matched.push( cur );
         
     | 
| 
      
 2396 
     | 
    
         
            +
            		cur = cur[dir];
         
     | 
| 
      
 2397 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2398 
     | 
    
         
            +
            	return matched;
         
     | 
| 
      
 2399 
     | 
    
         
            +
            };
         
     | 
| 
      
 2400 
     | 
    
         
            +
             
     | 
| 
      
 2401 
     | 
    
         
            +
            jQuery.nth = function(cur, result, dir, elem){
         
     | 
| 
      
 2402 
     | 
    
         
            +
            	result = result || 1;
         
     | 
| 
      
 2403 
     | 
    
         
            +
            	var num = 0;
         
     | 
| 
      
 2404 
     | 
    
         
            +
             
     | 
| 
      
 2405 
     | 
    
         
            +
            	for ( ; cur; cur = cur[dir] )
         
     | 
| 
      
 2406 
     | 
    
         
            +
            		if ( cur.nodeType == 1 && ++num == result )
         
     | 
| 
      
 2407 
     | 
    
         
            +
            			break;
         
     | 
| 
      
 2408 
     | 
    
         
            +
             
     | 
| 
      
 2409 
     | 
    
         
            +
            	return cur;
         
     | 
| 
      
 2410 
     | 
    
         
            +
            };
         
     | 
| 
      
 2411 
     | 
    
         
            +
             
     | 
| 
      
 2412 
     | 
    
         
            +
            jQuery.sibling = function(n, elem){
         
     | 
| 
      
 2413 
     | 
    
         
            +
            	var r = [];
         
     | 
| 
      
 2414 
     | 
    
         
            +
             
     | 
| 
      
 2415 
     | 
    
         
            +
            	for ( ; n; n = n.nextSibling ) {
         
     | 
| 
      
 2416 
     | 
    
         
            +
            		if ( n.nodeType == 1 && n != elem )
         
     | 
| 
      
 2417 
     | 
    
         
            +
            			r.push( n );
         
     | 
| 
      
 2418 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2419 
     | 
    
         
            +
             
     | 
| 
      
 2420 
     | 
    
         
            +
            	return r;
         
     | 
| 
      
 2421 
     | 
    
         
            +
            };
         
     | 
| 
      
 2422 
     | 
    
         
            +
             
     | 
| 
      
 2423 
     | 
    
         
            +
            return;
         
     | 
| 
      
 2424 
     | 
    
         
            +
             
     | 
| 
      
 2425 
     | 
    
         
            +
            window.Sizzle = Sizzle;
         
     | 
| 
      
 2426 
     | 
    
         
            +
             
     | 
| 
      
 2427 
     | 
    
         
            +
            })();
         
     | 
| 
      
 2428 
     | 
    
         
            +
            /*
         
     | 
| 
      
 2429 
     | 
    
         
            +
             * A number of helper functions used for managing events.
         
     | 
| 
      
 2430 
     | 
    
         
            +
             * Many of the ideas behind this code originated from
         
     | 
| 
      
 2431 
     | 
    
         
            +
             * Dean Edwards' addEvent library.
         
     | 
| 
      
 2432 
     | 
    
         
            +
             */
         
     | 
| 
      
 2433 
     | 
    
         
            +
            jQuery.event = {
         
     | 
| 
      
 2434 
     | 
    
         
            +
             
     | 
| 
      
 2435 
     | 
    
         
            +
            	// Bind an event to an element
         
     | 
| 
      
 2436 
     | 
    
         
            +
            	// Original by Dean Edwards
         
     | 
| 
      
 2437 
     | 
    
         
            +
            	add: function(elem, types, handler, data) {
         
     | 
| 
      
 2438 
     | 
    
         
            +
            		if ( elem.nodeType == 3 || elem.nodeType == 8 )
         
     | 
| 
      
 2439 
     | 
    
         
            +
            			return;
         
     | 
| 
      
 2440 
     | 
    
         
            +
             
     | 
| 
      
 2441 
     | 
    
         
            +
            		// For whatever reason, IE has trouble passing the window object
         
     | 
| 
      
 2442 
     | 
    
         
            +
            		// around, causing it to be cloned in the process
         
     | 
| 
      
 2443 
     | 
    
         
            +
            		if ( elem.setInterval && elem != window )
         
     | 
| 
      
 2444 
     | 
    
         
            +
            			elem = window;
         
     | 
| 
      
 2445 
     | 
    
         
            +
             
     | 
| 
      
 2446 
     | 
    
         
            +
            		// Make sure that the function being executed has a unique ID
         
     | 
| 
      
 2447 
     | 
    
         
            +
            		if ( !handler.guid )
         
     | 
| 
      
 2448 
     | 
    
         
            +
            			handler.guid = this.guid++;
         
     | 
| 
      
 2449 
     | 
    
         
            +
             
     | 
| 
      
 2450 
     | 
    
         
            +
            		// if data is passed, bind to handler
         
     | 
| 
      
 2451 
     | 
    
         
            +
            		if ( data !== undefined ) {
         
     | 
| 
      
 2452 
     | 
    
         
            +
            			// Create temporary function pointer to original handler
         
     | 
| 
      
 2453 
     | 
    
         
            +
            			var fn = handler;
         
     | 
| 
      
 2454 
     | 
    
         
            +
             
     | 
| 
      
 2455 
     | 
    
         
            +
            			// Create unique handler function, wrapped around original handler
         
     | 
| 
      
 2456 
     | 
    
         
            +
            			handler = this.proxy( fn );
         
     | 
| 
      
 2457 
     | 
    
         
            +
             
     | 
| 
      
 2458 
     | 
    
         
            +
            			// Store data in unique handler
         
     | 
| 
      
 2459 
     | 
    
         
            +
            			handler.data = data;
         
     | 
| 
      
 2460 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2461 
     | 
    
         
            +
             
     | 
| 
      
 2462 
     | 
    
         
            +
            		// Init the element's event structure
         
     | 
| 
      
 2463 
     | 
    
         
            +
            		var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
         
     | 
| 
      
 2464 
     | 
    
         
            +
            			handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
         
     | 
| 
      
 2465 
     | 
    
         
            +
            				// Handle the second event of a trigger and when
         
     | 
| 
      
 2466 
     | 
    
         
            +
            				// an event is called after a page has unloaded
         
     | 
| 
      
 2467 
     | 
    
         
            +
            				return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
         
     | 
| 
      
 2468 
     | 
    
         
            +
            					jQuery.event.handle.apply(arguments.callee.elem, arguments) :
         
     | 
| 
      
 2469 
     | 
    
         
            +
            					undefined;
         
     | 
| 
      
 2470 
     | 
    
         
            +
            			});
         
     | 
| 
      
 2471 
     | 
    
         
            +
            		// Add elem as a property of the handle function
         
     | 
| 
      
 2472 
     | 
    
         
            +
            		// This is to prevent a memory leak with non-native
         
     | 
| 
      
 2473 
     | 
    
         
            +
            		// event in IE.
         
     | 
| 
      
 2474 
     | 
    
         
            +
            		handle.elem = elem;
         
     | 
| 
      
 2475 
     | 
    
         
            +
             
     | 
| 
      
 2476 
     | 
    
         
            +
            		// Handle multiple events separated by a space
         
     | 
| 
      
 2477 
     | 
    
         
            +
            		// jQuery(...).bind("mouseover mouseout", fn);
         
     | 
| 
      
 2478 
     | 
    
         
            +
            		jQuery.each(types.split(/\s+/), function(index, type) {
         
     | 
| 
      
 2479 
     | 
    
         
            +
            			// Namespaced event handlers
         
     | 
| 
      
 2480 
     | 
    
         
            +
            			var namespaces = type.split(".");
         
     | 
| 
      
 2481 
     | 
    
         
            +
            			type = namespaces.shift();
         
     | 
| 
      
 2482 
     | 
    
         
            +
            			handler.type = namespaces.slice().sort().join(".");
         
     | 
| 
      
 2483 
     | 
    
         
            +
             
     | 
| 
      
 2484 
     | 
    
         
            +
            			// Get the current list of functions bound to this event
         
     | 
| 
      
 2485 
     | 
    
         
            +
            			var handlers = events[type];
         
     | 
| 
      
 2486 
     | 
    
         
            +
            			
         
     | 
| 
      
 2487 
     | 
    
         
            +
            			if ( jQuery.event.specialAll[type] )
         
     | 
| 
      
 2488 
     | 
    
         
            +
            				jQuery.event.specialAll[type].setup.call(elem, data, namespaces);
         
     | 
| 
      
 2489 
     | 
    
         
            +
             
     | 
| 
      
 2490 
     | 
    
         
            +
            			// Init the event handler queue
         
     | 
| 
      
 2491 
     | 
    
         
            +
            			if (!handlers) {
         
     | 
| 
      
 2492 
     | 
    
         
            +
            				handlers = events[type] = {};
         
     | 
| 
      
 2493 
     | 
    
         
            +
             
     | 
| 
      
 2494 
     | 
    
         
            +
            				// Check for a special event handler
         
     | 
| 
      
 2495 
     | 
    
         
            +
            				// Only use addEventListener/attachEvent if the special
         
     | 
| 
      
 2496 
     | 
    
         
            +
            				// events handler returns false
         
     | 
| 
      
 2497 
     | 
    
         
            +
            				if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem, data, namespaces) === false ) {
         
     | 
| 
      
 2498 
     | 
    
         
            +
            					// Bind the global event handler to the element
         
     | 
| 
      
 2499 
     | 
    
         
            +
            					if (elem.addEventListener)
         
     | 
| 
      
 2500 
     | 
    
         
            +
            						elem.addEventListener(type, handle, false);
         
     | 
| 
      
 2501 
     | 
    
         
            +
            					else if (elem.attachEvent)
         
     | 
| 
      
 2502 
     | 
    
         
            +
            						elem.attachEvent("on" + type, handle);
         
     | 
| 
      
 2503 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2504 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2505 
     | 
    
         
            +
             
     | 
| 
      
 2506 
     | 
    
         
            +
            			// Add the function to the element's handler list
         
     | 
| 
      
 2507 
     | 
    
         
            +
            			handlers[handler.guid] = handler;
         
     | 
| 
      
 2508 
     | 
    
         
            +
             
     | 
| 
      
 2509 
     | 
    
         
            +
            			// Keep track of which events have been used, for global triggering
         
     | 
| 
      
 2510 
     | 
    
         
            +
            			jQuery.event.global[type] = true;
         
     | 
| 
      
 2511 
     | 
    
         
            +
            		});
         
     | 
| 
      
 2512 
     | 
    
         
            +
             
     | 
| 
      
 2513 
     | 
    
         
            +
            		// Nullify elem to prevent memory leaks in IE
         
     | 
| 
      
 2514 
     | 
    
         
            +
            		elem = null;
         
     | 
| 
      
 2515 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2516 
     | 
    
         
            +
             
     | 
| 
      
 2517 
     | 
    
         
            +
            	guid: 1,
         
     | 
| 
      
 2518 
     | 
    
         
            +
            	global: {},
         
     | 
| 
      
 2519 
     | 
    
         
            +
             
     | 
| 
      
 2520 
     | 
    
         
            +
            	// Detach an event or set of events from an element
         
     | 
| 
      
 2521 
     | 
    
         
            +
            	remove: function(elem, types, handler) {
         
     | 
| 
      
 2522 
     | 
    
         
            +
            		// don't do events on text and comment nodes
         
     | 
| 
      
 2523 
     | 
    
         
            +
            		if ( elem.nodeType == 3 || elem.nodeType == 8 )
         
     | 
| 
      
 2524 
     | 
    
         
            +
            			return;
         
     | 
| 
      
 2525 
     | 
    
         
            +
             
     | 
| 
      
 2526 
     | 
    
         
            +
            		var events = jQuery.data(elem, "events"), ret, index;
         
     | 
| 
      
 2527 
     | 
    
         
            +
             
     | 
| 
      
 2528 
     | 
    
         
            +
            		if ( events ) {
         
     | 
| 
      
 2529 
     | 
    
         
            +
            			// Unbind all events for the element
         
     | 
| 
      
 2530 
     | 
    
         
            +
            			if ( types === undefined || (typeof types === "string" && types.charAt(0) == ".") )
         
     | 
| 
      
 2531 
     | 
    
         
            +
            				for ( var type in events )
         
     | 
| 
      
 2532 
     | 
    
         
            +
            					this.remove( elem, type + (types || "") );
         
     | 
| 
      
 2533 
     | 
    
         
            +
            			else {
         
     | 
| 
      
 2534 
     | 
    
         
            +
            				// types is actually an event object here
         
     | 
| 
      
 2535 
     | 
    
         
            +
            				if ( types.type ) {
         
     | 
| 
      
 2536 
     | 
    
         
            +
            					handler = types.handler;
         
     | 
| 
      
 2537 
     | 
    
         
            +
            					types = types.type;
         
     | 
| 
      
 2538 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2539 
     | 
    
         
            +
             
     | 
| 
      
 2540 
     | 
    
         
            +
            				// Handle multiple events seperated by a space
         
     | 
| 
      
 2541 
     | 
    
         
            +
            				// jQuery(...).unbind("mouseover mouseout", fn);
         
     | 
| 
      
 2542 
     | 
    
         
            +
            				jQuery.each(types.split(/\s+/), function(index, type){
         
     | 
| 
      
 2543 
     | 
    
         
            +
            					// Namespaced event handlers
         
     | 
| 
      
 2544 
     | 
    
         
            +
            					var namespaces = type.split(".");
         
     | 
| 
      
 2545 
     | 
    
         
            +
            					type = namespaces.shift();
         
     | 
| 
      
 2546 
     | 
    
         
            +
            					var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
         
     | 
| 
      
 2547 
     | 
    
         
            +
             
     | 
| 
      
 2548 
     | 
    
         
            +
            					if ( events[type] ) {
         
     | 
| 
      
 2549 
     | 
    
         
            +
            						// remove the given handler for the given type
         
     | 
| 
      
 2550 
     | 
    
         
            +
            						if ( handler )
         
     | 
| 
      
 2551 
     | 
    
         
            +
            							delete events[type][handler.guid];
         
     | 
| 
      
 2552 
     | 
    
         
            +
             
     | 
| 
      
 2553 
     | 
    
         
            +
            						// remove all handlers for the given type
         
     | 
| 
      
 2554 
     | 
    
         
            +
            						else
         
     | 
| 
      
 2555 
     | 
    
         
            +
            							for ( var handle in events[type] )
         
     | 
| 
      
 2556 
     | 
    
         
            +
            								// Handle the removal of namespaced events
         
     | 
| 
      
 2557 
     | 
    
         
            +
            								if ( namespace.test(events[type][handle].type) )
         
     | 
| 
      
 2558 
     | 
    
         
            +
            									delete events[type][handle];
         
     | 
| 
      
 2559 
     | 
    
         
            +
            									
         
     | 
| 
      
 2560 
     | 
    
         
            +
            						if ( jQuery.event.specialAll[type] )
         
     | 
| 
      
 2561 
     | 
    
         
            +
            							jQuery.event.specialAll[type].teardown.call(elem, namespaces);
         
     | 
| 
      
 2562 
     | 
    
         
            +
             
     | 
| 
      
 2563 
     | 
    
         
            +
            						// remove generic event handler if no more handlers exist
         
     | 
| 
      
 2564 
     | 
    
         
            +
            						for ( ret in events[type] ) break;
         
     | 
| 
      
 2565 
     | 
    
         
            +
            						if ( !ret ) {
         
     | 
| 
      
 2566 
     | 
    
         
            +
            							if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem, namespaces) === false ) {
         
     | 
| 
      
 2567 
     | 
    
         
            +
            								if (elem.removeEventListener)
         
     | 
| 
      
 2568 
     | 
    
         
            +
            									elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
         
     | 
| 
      
 2569 
     | 
    
         
            +
            								else if (elem.detachEvent)
         
     | 
| 
      
 2570 
     | 
    
         
            +
            									elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
         
     | 
| 
      
 2571 
     | 
    
         
            +
            							}
         
     | 
| 
      
 2572 
     | 
    
         
            +
            							ret = null;
         
     | 
| 
      
 2573 
     | 
    
         
            +
            							delete events[type];
         
     | 
| 
      
 2574 
     | 
    
         
            +
            						}
         
     | 
| 
      
 2575 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2576 
     | 
    
         
            +
            				});
         
     | 
| 
      
 2577 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2578 
     | 
    
         
            +
             
     | 
| 
      
 2579 
     | 
    
         
            +
            			// Remove the expando if it's no longer used
         
     | 
| 
      
 2580 
     | 
    
         
            +
            			for ( ret in events ) break;
         
     | 
| 
      
 2581 
     | 
    
         
            +
            			if ( !ret ) {
         
     | 
| 
      
 2582 
     | 
    
         
            +
            				var handle = jQuery.data( elem, "handle" );
         
     | 
| 
      
 2583 
     | 
    
         
            +
            				if ( handle ) handle.elem = null;
         
     | 
| 
      
 2584 
     | 
    
         
            +
            				jQuery.removeData( elem, "events" );
         
     | 
| 
      
 2585 
     | 
    
         
            +
            				jQuery.removeData( elem, "handle" );
         
     | 
| 
      
 2586 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2587 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2588 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2589 
     | 
    
         
            +
             
     | 
| 
      
 2590 
     | 
    
         
            +
            	// bubbling is internal
         
     | 
| 
      
 2591 
     | 
    
         
            +
            	trigger: function( event, data, elem, bubbling ) {
         
     | 
| 
      
 2592 
     | 
    
         
            +
            		// Event object or event type
         
     | 
| 
      
 2593 
     | 
    
         
            +
            		var type = event.type || event;
         
     | 
| 
      
 2594 
     | 
    
         
            +
             
     | 
| 
      
 2595 
     | 
    
         
            +
            		if( !bubbling ){
         
     | 
| 
      
 2596 
     | 
    
         
            +
            			event = typeof event === "object" ?
         
     | 
| 
      
 2597 
     | 
    
         
            +
            				// jQuery.Event object
         
     | 
| 
      
 2598 
     | 
    
         
            +
            				event[expando] ? event :
         
     | 
| 
      
 2599 
     | 
    
         
            +
            				// Object literal
         
     | 
| 
      
 2600 
     | 
    
         
            +
            				jQuery.extend( jQuery.Event(type), event ) :
         
     | 
| 
      
 2601 
     | 
    
         
            +
            				// Just the event type (string)
         
     | 
| 
      
 2602 
     | 
    
         
            +
            				jQuery.Event(type);
         
     | 
| 
      
 2603 
     | 
    
         
            +
             
     | 
| 
      
 2604 
     | 
    
         
            +
            			if ( type.indexOf("!") >= 0 ) {
         
     | 
| 
      
 2605 
     | 
    
         
            +
            				event.type = type = type.slice(0, -1);
         
     | 
| 
      
 2606 
     | 
    
         
            +
            				event.exclusive = true;
         
     | 
| 
      
 2607 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2608 
     | 
    
         
            +
             
     | 
| 
      
 2609 
     | 
    
         
            +
            			// Handle a global trigger
         
     | 
| 
      
 2610 
     | 
    
         
            +
            			if ( !elem ) {
         
     | 
| 
      
 2611 
     | 
    
         
            +
            				// Don't bubble custom events when global (to avoid too much overhead)
         
     | 
| 
      
 2612 
     | 
    
         
            +
            				event.stopPropagation();
         
     | 
| 
      
 2613 
     | 
    
         
            +
            				// Only trigger if we've ever bound an event for it
         
     | 
| 
      
 2614 
     | 
    
         
            +
            				if ( this.global[type] )
         
     | 
| 
      
 2615 
     | 
    
         
            +
            					jQuery.each( jQuery.cache, function(){
         
     | 
| 
      
 2616 
     | 
    
         
            +
            						if ( this.events && this.events[type] )
         
     | 
| 
      
 2617 
     | 
    
         
            +
            							jQuery.event.trigger( event, data, this.handle.elem );
         
     | 
| 
      
 2618 
     | 
    
         
            +
            					});
         
     | 
| 
      
 2619 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2620 
     | 
    
         
            +
             
     | 
| 
      
 2621 
     | 
    
         
            +
            			// Handle triggering a single element
         
     | 
| 
      
 2622 
     | 
    
         
            +
             
     | 
| 
      
 2623 
     | 
    
         
            +
            			// don't do events on text and comment nodes
         
     | 
| 
      
 2624 
     | 
    
         
            +
            			if ( !elem || elem.nodeType == 3 || elem.nodeType == 8 )
         
     | 
| 
      
 2625 
     | 
    
         
            +
            				return undefined;
         
     | 
| 
      
 2626 
     | 
    
         
            +
            			
         
     | 
| 
      
 2627 
     | 
    
         
            +
            			// Clean up in case it is reused
         
     | 
| 
      
 2628 
     | 
    
         
            +
            			event.result = undefined;
         
     | 
| 
      
 2629 
     | 
    
         
            +
            			event.target = elem;
         
     | 
| 
      
 2630 
     | 
    
         
            +
            			
         
     | 
| 
      
 2631 
     | 
    
         
            +
            			// Clone the incoming data, if any
         
     | 
| 
      
 2632 
     | 
    
         
            +
            			data = jQuery.makeArray(data);
         
     | 
| 
      
 2633 
     | 
    
         
            +
            			data.unshift( event );
         
     | 
| 
      
 2634 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2635 
     | 
    
         
            +
             
     | 
| 
      
 2636 
     | 
    
         
            +
            		event.currentTarget = elem;
         
     | 
| 
      
 2637 
     | 
    
         
            +
             
     | 
| 
      
 2638 
     | 
    
         
            +
            		// Trigger the event, it is assumed that "handle" is a function
         
     | 
| 
      
 2639 
     | 
    
         
            +
            		var handle = jQuery.data(elem, "handle");
         
     | 
| 
      
 2640 
     | 
    
         
            +
            		if ( handle )
         
     | 
| 
      
 2641 
     | 
    
         
            +
            			handle.apply( elem, data );
         
     | 
| 
      
 2642 
     | 
    
         
            +
             
     | 
| 
      
 2643 
     | 
    
         
            +
            		// Handle triggering native .onfoo handlers (and on links since we don't call .click() for links)
         
     | 
| 
      
 2644 
     | 
    
         
            +
            		if ( (!elem[type] || (jQuery.nodeName(elem, 'a') && type == "click")) && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
         
     | 
| 
      
 2645 
     | 
    
         
            +
            			event.result = false;
         
     | 
| 
      
 2646 
     | 
    
         
            +
             
     | 
| 
      
 2647 
     | 
    
         
            +
            		// Trigger the native events (except for clicks on links)
         
     | 
| 
      
 2648 
     | 
    
         
            +
            		if ( !bubbling && elem[type] && !event.isDefaultPrevented() && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
         
     | 
| 
      
 2649 
     | 
    
         
            +
            			this.triggered = true;
         
     | 
| 
      
 2650 
     | 
    
         
            +
            			try {
         
     | 
| 
      
 2651 
     | 
    
         
            +
            				elem[ type ]();
         
     | 
| 
      
 2652 
     | 
    
         
            +
            			// prevent IE from throwing an error for some hidden elements
         
     | 
| 
      
 2653 
     | 
    
         
            +
            			} catch (e) {}
         
     | 
| 
      
 2654 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2655 
     | 
    
         
            +
             
     | 
| 
      
 2656 
     | 
    
         
            +
            		this.triggered = false;
         
     | 
| 
      
 2657 
     | 
    
         
            +
             
     | 
| 
      
 2658 
     | 
    
         
            +
            		if ( !event.isPropagationStopped() ) {
         
     | 
| 
      
 2659 
     | 
    
         
            +
            			var parent = elem.parentNode || elem.ownerDocument;
         
     | 
| 
      
 2660 
     | 
    
         
            +
            			if ( parent )
         
     | 
| 
      
 2661 
     | 
    
         
            +
            				jQuery.event.trigger(event, data, parent, true);
         
     | 
| 
      
 2662 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2663 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2664 
     | 
    
         
            +
             
     | 
| 
      
 2665 
     | 
    
         
            +
            	handle: function(event) {
         
     | 
| 
      
 2666 
     | 
    
         
            +
            		// returned undefined or false
         
     | 
| 
      
 2667 
     | 
    
         
            +
            		var all, handlers;
         
     | 
| 
      
 2668 
     | 
    
         
            +
             
     | 
| 
      
 2669 
     | 
    
         
            +
            		event = arguments[0] = jQuery.event.fix( event || window.event );
         
     | 
| 
      
 2670 
     | 
    
         
            +
            		event.currentTarget = this;
         
     | 
| 
      
 2671 
     | 
    
         
            +
            		
         
     | 
| 
      
 2672 
     | 
    
         
            +
            		// Namespaced event handlers
         
     | 
| 
      
 2673 
     | 
    
         
            +
            		var namespaces = event.type.split(".");
         
     | 
| 
      
 2674 
     | 
    
         
            +
            		event.type = namespaces.shift();
         
     | 
| 
      
 2675 
     | 
    
         
            +
             
     | 
| 
      
 2676 
     | 
    
         
            +
            		// Cache this now, all = true means, any handler
         
     | 
| 
      
 2677 
     | 
    
         
            +
            		all = !namespaces.length && !event.exclusive;
         
     | 
| 
      
 2678 
     | 
    
         
            +
            		
         
     | 
| 
      
 2679 
     | 
    
         
            +
            		var namespace = RegExp("(^|\\.)" + namespaces.slice().sort().join(".*\\.") + "(\\.|$)");
         
     | 
| 
      
 2680 
     | 
    
         
            +
             
     | 
| 
      
 2681 
     | 
    
         
            +
            		handlers = ( jQuery.data(this, "events") || {} )[event.type];
         
     | 
| 
      
 2682 
     | 
    
         
            +
             
     | 
| 
      
 2683 
     | 
    
         
            +
            		for ( var j in handlers ) {
         
     | 
| 
      
 2684 
     | 
    
         
            +
            			var handler = handlers[j];
         
     | 
| 
      
 2685 
     | 
    
         
            +
             
     | 
| 
      
 2686 
     | 
    
         
            +
            			// Filter the functions by class
         
     | 
| 
      
 2687 
     | 
    
         
            +
            			if ( all || namespace.test(handler.type) ) {
         
     | 
| 
      
 2688 
     | 
    
         
            +
            				// Pass in a reference to the handler function itself
         
     | 
| 
      
 2689 
     | 
    
         
            +
            				// So that we can later remove it
         
     | 
| 
      
 2690 
     | 
    
         
            +
            				event.handler = handler;
         
     | 
| 
      
 2691 
     | 
    
         
            +
            				event.data = handler.data;
         
     | 
| 
      
 2692 
     | 
    
         
            +
             
     | 
| 
      
 2693 
     | 
    
         
            +
            				var ret = handler.apply(this, arguments);
         
     | 
| 
      
 2694 
     | 
    
         
            +
             
     | 
| 
      
 2695 
     | 
    
         
            +
            				if( ret !== undefined ){
         
     | 
| 
      
 2696 
     | 
    
         
            +
            					event.result = ret;
         
     | 
| 
      
 2697 
     | 
    
         
            +
            					if ( ret === false ) {
         
     | 
| 
      
 2698 
     | 
    
         
            +
            						event.preventDefault();
         
     | 
| 
      
 2699 
     | 
    
         
            +
            						event.stopPropagation();
         
     | 
| 
      
 2700 
     | 
    
         
            +
            					}
         
     | 
| 
      
 2701 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2702 
     | 
    
         
            +
             
     | 
| 
      
 2703 
     | 
    
         
            +
            				if( event.isImmediatePropagationStopped() )
         
     | 
| 
      
 2704 
     | 
    
         
            +
            					break;
         
     | 
| 
      
 2705 
     | 
    
         
            +
             
     | 
| 
      
 2706 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2707 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2708 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2709 
     | 
    
         
            +
             
     | 
| 
      
 2710 
     | 
    
         
            +
            	props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
         
     | 
| 
      
 2711 
     | 
    
         
            +
             
     | 
| 
      
 2712 
     | 
    
         
            +
            	fix: function(event) {
         
     | 
| 
      
 2713 
     | 
    
         
            +
            		if ( event[expando] )
         
     | 
| 
      
 2714 
     | 
    
         
            +
            			return event;
         
     | 
| 
      
 2715 
     | 
    
         
            +
             
     | 
| 
      
 2716 
     | 
    
         
            +
            		// store a copy of the original event object
         
     | 
| 
      
 2717 
     | 
    
         
            +
            		// and "clone" to set read-only properties
         
     | 
| 
      
 2718 
     | 
    
         
            +
            		var originalEvent = event;
         
     | 
| 
      
 2719 
     | 
    
         
            +
            		event = jQuery.Event( originalEvent );
         
     | 
| 
      
 2720 
     | 
    
         
            +
             
     | 
| 
      
 2721 
     | 
    
         
            +
            		for ( var i = this.props.length, prop; i; ){
         
     | 
| 
      
 2722 
     | 
    
         
            +
            			prop = this.props[ --i ];
         
     | 
| 
      
 2723 
     | 
    
         
            +
            			event[ prop ] = originalEvent[ prop ];
         
     | 
| 
      
 2724 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2725 
     | 
    
         
            +
             
     | 
| 
      
 2726 
     | 
    
         
            +
            		// Fix target property, if necessary
         
     | 
| 
      
 2727 
     | 
    
         
            +
            		if ( !event.target )
         
     | 
| 
      
 2728 
     | 
    
         
            +
            			event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
         
     | 
| 
      
 2729 
     | 
    
         
            +
             
     | 
| 
      
 2730 
     | 
    
         
            +
            		// check if target is a textnode (safari)
         
     | 
| 
      
 2731 
     | 
    
         
            +
            		if ( event.target.nodeType == 3 )
         
     | 
| 
      
 2732 
     | 
    
         
            +
            			event.target = event.target.parentNode;
         
     | 
| 
      
 2733 
     | 
    
         
            +
             
     | 
| 
      
 2734 
     | 
    
         
            +
            		// Add relatedTarget, if necessary
         
     | 
| 
      
 2735 
     | 
    
         
            +
            		if ( !event.relatedTarget && event.fromElement )
         
     | 
| 
      
 2736 
     | 
    
         
            +
            			event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement;
         
     | 
| 
      
 2737 
     | 
    
         
            +
             
     | 
| 
      
 2738 
     | 
    
         
            +
            		// Calculate pageX/Y if missing and clientX/Y available
         
     | 
| 
      
 2739 
     | 
    
         
            +
            		if ( event.pageX == null && event.clientX != null ) {
         
     | 
| 
      
 2740 
     | 
    
         
            +
            			var doc = document.documentElement, body = document.body;
         
     | 
| 
      
 2741 
     | 
    
         
            +
            			event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
         
     | 
| 
      
 2742 
     | 
    
         
            +
            			event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
         
     | 
| 
      
 2743 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2744 
     | 
    
         
            +
             
     | 
| 
      
 2745 
     | 
    
         
            +
            		// Add which for key events
         
     | 
| 
      
 2746 
     | 
    
         
            +
            		if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) )
         
     | 
| 
      
 2747 
     | 
    
         
            +
            			event.which = event.charCode || event.keyCode;
         
     | 
| 
      
 2748 
     | 
    
         
            +
             
     | 
| 
      
 2749 
     | 
    
         
            +
            		// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
         
     | 
| 
      
 2750 
     | 
    
         
            +
            		if ( !event.metaKey && event.ctrlKey )
         
     | 
| 
      
 2751 
     | 
    
         
            +
            			event.metaKey = event.ctrlKey;
         
     | 
| 
      
 2752 
     | 
    
         
            +
             
     | 
| 
      
 2753 
     | 
    
         
            +
            		// Add which for click: 1 == left; 2 == middle; 3 == right
         
     | 
| 
      
 2754 
     | 
    
         
            +
            		// Note: button is not normalized, so don't use it
         
     | 
| 
      
 2755 
     | 
    
         
            +
            		if ( !event.which && event.button )
         
     | 
| 
      
 2756 
     | 
    
         
            +
            			event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
         
     | 
| 
      
 2757 
     | 
    
         
            +
             
     | 
| 
      
 2758 
     | 
    
         
            +
            		return event;
         
     | 
| 
      
 2759 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2760 
     | 
    
         
            +
             
     | 
| 
      
 2761 
     | 
    
         
            +
            	proxy: function( fn, proxy ){
         
     | 
| 
      
 2762 
     | 
    
         
            +
            		proxy = proxy || function(){ return fn.apply(this, arguments); };
         
     | 
| 
      
 2763 
     | 
    
         
            +
            		// Set the guid of unique handler to the same of original handler, so it can be removed
         
     | 
| 
      
 2764 
     | 
    
         
            +
            		proxy.guid = fn.guid = fn.guid || proxy.guid || this.guid++;
         
     | 
| 
      
 2765 
     | 
    
         
            +
            		// So proxy can be declared as an argument
         
     | 
| 
      
 2766 
     | 
    
         
            +
            		return proxy;
         
     | 
| 
      
 2767 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2768 
     | 
    
         
            +
             
     | 
| 
      
 2769 
     | 
    
         
            +
            	special: {
         
     | 
| 
      
 2770 
     | 
    
         
            +
            		ready: {
         
     | 
| 
      
 2771 
     | 
    
         
            +
            			// Make sure the ready event is setup
         
     | 
| 
      
 2772 
     | 
    
         
            +
            			setup: bindReady,
         
     | 
| 
      
 2773 
     | 
    
         
            +
            			teardown: function() {}
         
     | 
| 
      
 2774 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2775 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2776 
     | 
    
         
            +
            	
         
     | 
| 
      
 2777 
     | 
    
         
            +
            	specialAll: {
         
     | 
| 
      
 2778 
     | 
    
         
            +
            		live: {
         
     | 
| 
      
 2779 
     | 
    
         
            +
            			setup: function( selector, namespaces ){
         
     | 
| 
      
 2780 
     | 
    
         
            +
            				jQuery.event.add( this, namespaces[0], liveHandler );
         
     | 
| 
      
 2781 
     | 
    
         
            +
            			},
         
     | 
| 
      
 2782 
     | 
    
         
            +
            			teardown:  function( namespaces ){
         
     | 
| 
      
 2783 
     | 
    
         
            +
            				if ( namespaces.length ) {
         
     | 
| 
      
 2784 
     | 
    
         
            +
            					var remove = 0, name = RegExp("(^|\\.)" + namespaces[0] + "(\\.|$)");
         
     | 
| 
      
 2785 
     | 
    
         
            +
            					
         
     | 
| 
      
 2786 
     | 
    
         
            +
            					jQuery.each( (jQuery.data(this, "events").live || {}), function(){
         
     | 
| 
      
 2787 
     | 
    
         
            +
            						if ( name.test(this.type) )
         
     | 
| 
      
 2788 
     | 
    
         
            +
            							remove++;
         
     | 
| 
      
 2789 
     | 
    
         
            +
            					});
         
     | 
| 
      
 2790 
     | 
    
         
            +
            					
         
     | 
| 
      
 2791 
     | 
    
         
            +
            					if ( remove < 1 )
         
     | 
| 
      
 2792 
     | 
    
         
            +
            						jQuery.event.remove( this, namespaces[0], liveHandler );
         
     | 
| 
      
 2793 
     | 
    
         
            +
            				}
         
     | 
| 
      
 2794 
     | 
    
         
            +
            			}
         
     | 
| 
      
 2795 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2796 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2797 
     | 
    
         
            +
            };
         
     | 
| 
      
 2798 
     | 
    
         
            +
             
     | 
| 
      
 2799 
     | 
    
         
            +
            jQuery.Event = function( src ){
         
     | 
| 
      
 2800 
     | 
    
         
            +
            	// Allow instantiation without the 'new' keyword
         
     | 
| 
      
 2801 
     | 
    
         
            +
            	if( !this.preventDefault )
         
     | 
| 
      
 2802 
     | 
    
         
            +
            		return new jQuery.Event(src);
         
     | 
| 
      
 2803 
     | 
    
         
            +
            	
         
     | 
| 
      
 2804 
     | 
    
         
            +
            	// Event object
         
     | 
| 
      
 2805 
     | 
    
         
            +
            	if( src && src.type ){
         
     | 
| 
      
 2806 
     | 
    
         
            +
            		this.originalEvent = src;
         
     | 
| 
      
 2807 
     | 
    
         
            +
            		this.type = src.type;
         
     | 
| 
      
 2808 
     | 
    
         
            +
            	// Event type
         
     | 
| 
      
 2809 
     | 
    
         
            +
            	}else
         
     | 
| 
      
 2810 
     | 
    
         
            +
            		this.type = src;
         
     | 
| 
      
 2811 
     | 
    
         
            +
             
     | 
| 
      
 2812 
     | 
    
         
            +
            	// timeStamp is buggy for some events on Firefox(#3843)
         
     | 
| 
      
 2813 
     | 
    
         
            +
            	// So we won't rely on the native value
         
     | 
| 
      
 2814 
     | 
    
         
            +
            	this.timeStamp = now();
         
     | 
| 
      
 2815 
     | 
    
         
            +
            	
         
     | 
| 
      
 2816 
     | 
    
         
            +
            	// Mark it as fixed
         
     | 
| 
      
 2817 
     | 
    
         
            +
            	this[expando] = true;
         
     | 
| 
      
 2818 
     | 
    
         
            +
            };
         
     | 
| 
      
 2819 
     | 
    
         
            +
             
     | 
| 
      
 2820 
     | 
    
         
            +
            function returnFalse(){
         
     | 
| 
      
 2821 
     | 
    
         
            +
            	return false;
         
     | 
| 
      
 2822 
     | 
    
         
            +
            }
         
     | 
| 
      
 2823 
     | 
    
         
            +
            function returnTrue(){
         
     | 
| 
      
 2824 
     | 
    
         
            +
            	return true;
         
     | 
| 
      
 2825 
     | 
    
         
            +
            }
         
     | 
| 
      
 2826 
     | 
    
         
            +
             
     | 
| 
      
 2827 
     | 
    
         
            +
            // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
         
     | 
| 
      
 2828 
     | 
    
         
            +
            // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
         
     | 
| 
      
 2829 
     | 
    
         
            +
            jQuery.Event.prototype = {
         
     | 
| 
      
 2830 
     | 
    
         
            +
            	preventDefault: function() {
         
     | 
| 
      
 2831 
     | 
    
         
            +
            		this.isDefaultPrevented = returnTrue;
         
     | 
| 
      
 2832 
     | 
    
         
            +
             
     | 
| 
      
 2833 
     | 
    
         
            +
            		var e = this.originalEvent;
         
     | 
| 
      
 2834 
     | 
    
         
            +
            		if( !e )
         
     | 
| 
      
 2835 
     | 
    
         
            +
            			return;
         
     | 
| 
      
 2836 
     | 
    
         
            +
            		// if preventDefault exists run it on the original event
         
     | 
| 
      
 2837 
     | 
    
         
            +
            		if (e.preventDefault)
         
     | 
| 
      
 2838 
     | 
    
         
            +
            			e.preventDefault();
         
     | 
| 
      
 2839 
     | 
    
         
            +
            		// otherwise set the returnValue property of the original event to false (IE)
         
     | 
| 
      
 2840 
     | 
    
         
            +
            		e.returnValue = false;
         
     | 
| 
      
 2841 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2842 
     | 
    
         
            +
            	stopPropagation: function() {
         
     | 
| 
      
 2843 
     | 
    
         
            +
            		this.isPropagationStopped = returnTrue;
         
     | 
| 
      
 2844 
     | 
    
         
            +
             
     | 
| 
      
 2845 
     | 
    
         
            +
            		var e = this.originalEvent;
         
     | 
| 
      
 2846 
     | 
    
         
            +
            		if( !e )
         
     | 
| 
      
 2847 
     | 
    
         
            +
            			return;
         
     | 
| 
      
 2848 
     | 
    
         
            +
            		// if stopPropagation exists run it on the original event
         
     | 
| 
      
 2849 
     | 
    
         
            +
            		if (e.stopPropagation)
         
     | 
| 
      
 2850 
     | 
    
         
            +
            			e.stopPropagation();
         
     | 
| 
      
 2851 
     | 
    
         
            +
            		// otherwise set the cancelBubble property of the original event to true (IE)
         
     | 
| 
      
 2852 
     | 
    
         
            +
            		e.cancelBubble = true;
         
     | 
| 
      
 2853 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2854 
     | 
    
         
            +
            	stopImmediatePropagation:function(){
         
     | 
| 
      
 2855 
     | 
    
         
            +
            		this.isImmediatePropagationStopped = returnTrue;
         
     | 
| 
      
 2856 
     | 
    
         
            +
            		this.stopPropagation();
         
     | 
| 
      
 2857 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2858 
     | 
    
         
            +
            	isDefaultPrevented: returnFalse,
         
     | 
| 
      
 2859 
     | 
    
         
            +
            	isPropagationStopped: returnFalse,
         
     | 
| 
      
 2860 
     | 
    
         
            +
            	isImmediatePropagationStopped: returnFalse
         
     | 
| 
      
 2861 
     | 
    
         
            +
            };
         
     | 
| 
      
 2862 
     | 
    
         
            +
            // Checks if an event happened on an element within another element
         
     | 
| 
      
 2863 
     | 
    
         
            +
            // Used in jQuery.event.special.mouseenter and mouseleave handlers
         
     | 
| 
      
 2864 
     | 
    
         
            +
            var withinElement = function(event) {
         
     | 
| 
      
 2865 
     | 
    
         
            +
            	// Check if mouse(over|out) are still within the same parent element
         
     | 
| 
      
 2866 
     | 
    
         
            +
            	var parent = event.relatedTarget;
         
     | 
| 
      
 2867 
     | 
    
         
            +
            	// Traverse up the tree
         
     | 
| 
      
 2868 
     | 
    
         
            +
            	while ( parent && parent != this )
         
     | 
| 
      
 2869 
     | 
    
         
            +
            		try { parent = parent.parentNode; }
         
     | 
| 
      
 2870 
     | 
    
         
            +
            		catch(e) { parent = this; }
         
     | 
| 
      
 2871 
     | 
    
         
            +
            	
         
     | 
| 
      
 2872 
     | 
    
         
            +
            	if( parent != this ){
         
     | 
| 
      
 2873 
     | 
    
         
            +
            		// set the correct event type
         
     | 
| 
      
 2874 
     | 
    
         
            +
            		event.type = event.data;
         
     | 
| 
      
 2875 
     | 
    
         
            +
            		// handle event if we actually just moused on to a non sub-element
         
     | 
| 
      
 2876 
     | 
    
         
            +
            		jQuery.event.handle.apply( this, arguments );
         
     | 
| 
      
 2877 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2878 
     | 
    
         
            +
            };
         
     | 
| 
      
 2879 
     | 
    
         
            +
            	
         
     | 
| 
      
 2880 
     | 
    
         
            +
            jQuery.each({ 
         
     | 
| 
      
 2881 
     | 
    
         
            +
            	mouseover: 'mouseenter', 
         
     | 
| 
      
 2882 
     | 
    
         
            +
            	mouseout: 'mouseleave'
         
     | 
| 
      
 2883 
     | 
    
         
            +
            }, function( orig, fix ){
         
     | 
| 
      
 2884 
     | 
    
         
            +
            	jQuery.event.special[ fix ] = {
         
     | 
| 
      
 2885 
     | 
    
         
            +
            		setup: function(){
         
     | 
| 
      
 2886 
     | 
    
         
            +
            			jQuery.event.add( this, orig, withinElement, fix );
         
     | 
| 
      
 2887 
     | 
    
         
            +
            		},
         
     | 
| 
      
 2888 
     | 
    
         
            +
            		teardown: function(){
         
     | 
| 
      
 2889 
     | 
    
         
            +
            			jQuery.event.remove( this, orig, withinElement );
         
     | 
| 
      
 2890 
     | 
    
         
            +
            		}
         
     | 
| 
      
 2891 
     | 
    
         
            +
            	};			   
         
     | 
| 
      
 2892 
     | 
    
         
            +
            });
         
     | 
| 
      
 2893 
     | 
    
         
            +
             
     | 
| 
      
 2894 
     | 
    
         
            +
            jQuery.fn.extend({
         
     | 
| 
      
 2895 
     | 
    
         
            +
            	bind: function( type, data, fn ) {
         
     | 
| 
      
 2896 
     | 
    
         
            +
            		return type == "unload" ? this.one(type, data, fn) : this.each(function(){
         
     | 
| 
      
 2897 
     | 
    
         
            +
            			jQuery.event.add( this, type, fn || data, fn && data );
         
     | 
| 
      
 2898 
     | 
    
         
            +
            		});
         
     | 
| 
      
 2899 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2900 
     | 
    
         
            +
             
     | 
| 
      
 2901 
     | 
    
         
            +
            	one: function( type, data, fn ) {
         
     | 
| 
      
 2902 
     | 
    
         
            +
            		var one = jQuery.event.proxy( fn || data, function(event) {
         
     | 
| 
      
 2903 
     | 
    
         
            +
            			jQuery(this).unbind(event, one);
         
     | 
| 
      
 2904 
     | 
    
         
            +
            			return (fn || data).apply( this, arguments );
         
     | 
| 
      
 2905 
     | 
    
         
            +
            		});
         
     | 
| 
      
 2906 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 2907 
     | 
    
         
            +
            			jQuery.event.add( this, type, one, fn && data);
         
     | 
| 
      
 2908 
     | 
    
         
            +
            		});
         
     | 
| 
      
 2909 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2910 
     | 
    
         
            +
             
     | 
| 
      
 2911 
     | 
    
         
            +
            	unbind: function( type, fn ) {
         
     | 
| 
      
 2912 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 2913 
     | 
    
         
            +
            			jQuery.event.remove( this, type, fn );
         
     | 
| 
      
 2914 
     | 
    
         
            +
            		});
         
     | 
| 
      
 2915 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2916 
     | 
    
         
            +
             
     | 
| 
      
 2917 
     | 
    
         
            +
            	trigger: function( type, data ) {
         
     | 
| 
      
 2918 
     | 
    
         
            +
            		return this.each(function(){
         
     | 
| 
      
 2919 
     | 
    
         
            +
            			jQuery.event.trigger( type, data, this );
         
     | 
| 
      
 2920 
     | 
    
         
            +
            		});
         
     | 
| 
      
 2921 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2922 
     | 
    
         
            +
             
     | 
| 
      
 2923 
     | 
    
         
            +
            	triggerHandler: function( type, data ) {
         
     | 
| 
      
 2924 
     | 
    
         
            +
            		if( this[0] ){
         
     | 
| 
      
 2925 
     | 
    
         
            +
            			var event = jQuery.Event(type);
         
     | 
| 
      
 2926 
     | 
    
         
            +
            			event.preventDefault();
         
     | 
| 
      
 2927 
     | 
    
         
            +
            			event.stopPropagation();
         
     | 
| 
      
 2928 
     | 
    
         
            +
            			jQuery.event.trigger( event, data, this[0] );
         
     | 
| 
      
 2929 
     | 
    
         
            +
            			return event.result;
         
     | 
| 
      
 2930 
     | 
    
         
            +
            		}		
         
     | 
| 
      
 2931 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2932 
     | 
    
         
            +
             
     | 
| 
      
 2933 
     | 
    
         
            +
            	toggle: function( fn ) {
         
     | 
| 
      
 2934 
     | 
    
         
            +
            		// Save reference to arguments for access in closure
         
     | 
| 
      
 2935 
     | 
    
         
            +
            		var args = arguments, i = 1;
         
     | 
| 
      
 2936 
     | 
    
         
            +
             
     | 
| 
      
 2937 
     | 
    
         
            +
            		// link all the functions, so any of them can unbind this click handler
         
     | 
| 
      
 2938 
     | 
    
         
            +
            		while( i < args.length )
         
     | 
| 
      
 2939 
     | 
    
         
            +
            			jQuery.event.proxy( fn, args[i++] );
         
     | 
| 
      
 2940 
     | 
    
         
            +
             
     | 
| 
      
 2941 
     | 
    
         
            +
            		return this.click( jQuery.event.proxy( fn, function(event) {
         
     | 
| 
      
 2942 
     | 
    
         
            +
            			// Figure out which function to execute
         
     | 
| 
      
 2943 
     | 
    
         
            +
            			this.lastToggle = ( this.lastToggle || 0 ) % i;
         
     | 
| 
      
 2944 
     | 
    
         
            +
             
     | 
| 
      
 2945 
     | 
    
         
            +
            			// Make sure that clicks stop
         
     | 
| 
      
 2946 
     | 
    
         
            +
            			event.preventDefault();
         
     | 
| 
      
 2947 
     | 
    
         
            +
             
     | 
| 
      
 2948 
     | 
    
         
            +
            			// and execute the function
         
     | 
| 
      
 2949 
     | 
    
         
            +
            			return args[ this.lastToggle++ ].apply( this, arguments ) || false;
         
     | 
| 
      
 2950 
     | 
    
         
            +
            		}));
         
     | 
| 
      
 2951 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2952 
     | 
    
         
            +
             
     | 
| 
      
 2953 
     | 
    
         
            +
            	hover: function(fnOver, fnOut) {
         
     | 
| 
      
 2954 
     | 
    
         
            +
            		return this.mouseenter(fnOver).mouseleave(fnOut);
         
     | 
| 
      
 2955 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2956 
     | 
    
         
            +
             
     | 
| 
      
 2957 
     | 
    
         
            +
            	ready: function(fn) {
         
     | 
| 
      
 2958 
     | 
    
         
            +
            		// Attach the listeners
         
     | 
| 
      
 2959 
     | 
    
         
            +
            		bindReady();
         
     | 
| 
      
 2960 
     | 
    
         
            +
             
     | 
| 
      
 2961 
     | 
    
         
            +
            		// If the DOM is already ready
         
     | 
| 
      
 2962 
     | 
    
         
            +
            		if ( jQuery.isReady )
         
     | 
| 
      
 2963 
     | 
    
         
            +
            			// Execute the function immediately
         
     | 
| 
      
 2964 
     | 
    
         
            +
            			fn.call( document, jQuery );
         
     | 
| 
      
 2965 
     | 
    
         
            +
             
     | 
| 
      
 2966 
     | 
    
         
            +
            		// Otherwise, remember the function for later
         
     | 
| 
      
 2967 
     | 
    
         
            +
            		else
         
     | 
| 
      
 2968 
     | 
    
         
            +
            			// Add the function to the wait list
         
     | 
| 
      
 2969 
     | 
    
         
            +
            			jQuery.readyList.push( fn );
         
     | 
| 
      
 2970 
     | 
    
         
            +
             
     | 
| 
      
 2971 
     | 
    
         
            +
            		return this;
         
     | 
| 
      
 2972 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2973 
     | 
    
         
            +
            	
         
     | 
| 
      
 2974 
     | 
    
         
            +
            	live: function( type, fn ){
         
     | 
| 
      
 2975 
     | 
    
         
            +
            		var proxy = jQuery.event.proxy( fn );
         
     | 
| 
      
 2976 
     | 
    
         
            +
            		proxy.guid += this.selector + type;
         
     | 
| 
      
 2977 
     | 
    
         
            +
             
     | 
| 
      
 2978 
     | 
    
         
            +
            		jQuery(document).bind( liveConvert(type, this.selector), this.selector, proxy );
         
     | 
| 
      
 2979 
     | 
    
         
            +
             
     | 
| 
      
 2980 
     | 
    
         
            +
            		return this;
         
     | 
| 
      
 2981 
     | 
    
         
            +
            	},
         
     | 
| 
      
 2982 
     | 
    
         
            +
            	
         
     | 
| 
      
 2983 
     | 
    
         
            +
            	die: function( type, fn ){
         
     | 
| 
      
 2984 
     | 
    
         
            +
            		jQuery(document).unbind( liveConvert(type, this.selector), fn ? { guid: fn.guid + this.selector + type } : null );
         
     | 
| 
      
 2985 
     | 
    
         
            +
            		return this;
         
     | 
| 
      
 2986 
     | 
    
         
            +
            	}
         
     | 
| 
      
 2987 
     | 
    
         
            +
            });
         
     | 
| 
      
 2988 
     | 
    
         
            +
             
     | 
| 
      
 2989 
     | 
    
         
            +
            function liveHandler( event ){
         
     | 
| 
      
 2990 
     | 
    
         
            +
            	var check = RegExp("(^|\\.)" + event.type + "(\\.|$)"),
         
     | 
| 
      
 2991 
     | 
    
         
            +
            		stop = true,
         
     | 
| 
      
 2992 
     | 
    
         
            +
            		elems = [];
         
     | 
| 
      
 2993 
     | 
    
         
            +
             
     | 
| 
      
 2994 
     | 
    
         
            +
            	jQuery.each(jQuery.data(this, "events").live || [], function(i, fn){
         
     | 
| 
      
 2995 
     | 
    
         
            +
            		if ( check.test(fn.type) ) {
         
     | 
| 
      
 2996 
     | 
    
         
            +
            			var elem = jQuery(event.target).closest(fn.data)[0];
         
     | 
| 
      
 2997 
     | 
    
         
            +
            			if ( elem )
         
     | 
| 
      
 2998 
     | 
    
         
            +
            				elems.push({ elem: elem, fn: fn });
         
     | 
| 
      
 2999 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3000 
     | 
    
         
            +
            	});
         
     | 
| 
      
 3001 
     | 
    
         
            +
             
     | 
| 
      
 3002 
     | 
    
         
            +
            	elems.sort(function(a,b) {
         
     | 
| 
      
 3003 
     | 
    
         
            +
            		return jQuery.data(a.elem, "closest") - jQuery.data(b.elem, "closest");
         
     | 
| 
      
 3004 
     | 
    
         
            +
            	});
         
     | 
| 
      
 3005 
     | 
    
         
            +
            	
         
     | 
| 
      
 3006 
     | 
    
         
            +
            	jQuery.each(elems, function(){
         
     | 
| 
      
 3007 
     | 
    
         
            +
            		if ( this.fn.call(this.elem, event, this.fn.data) === false )
         
     | 
| 
      
 3008 
     | 
    
         
            +
            			return (stop = false);
         
     | 
| 
      
 3009 
     | 
    
         
            +
            	});
         
     | 
| 
      
 3010 
     | 
    
         
            +
             
     | 
| 
      
 3011 
     | 
    
         
            +
            	return stop;
         
     | 
| 
      
 3012 
     | 
    
         
            +
            }
         
     | 
| 
      
 3013 
     | 
    
         
            +
             
     | 
| 
      
 3014 
     | 
    
         
            +
            function liveConvert(type, selector){
         
     | 
| 
      
 3015 
     | 
    
         
            +
            	return ["live", type, selector.replace(/\./g, "`").replace(/ /g, "|")].join(".");
         
     | 
| 
      
 3016 
     | 
    
         
            +
            }
         
     | 
| 
      
 3017 
     | 
    
         
            +
             
     | 
| 
      
 3018 
     | 
    
         
            +
            jQuery.extend({
         
     | 
| 
      
 3019 
     | 
    
         
            +
            	isReady: false,
         
     | 
| 
      
 3020 
     | 
    
         
            +
            	readyList: [],
         
     | 
| 
      
 3021 
     | 
    
         
            +
            	// Handle when the DOM is ready
         
     | 
| 
      
 3022 
     | 
    
         
            +
            	ready: function() {
         
     | 
| 
      
 3023 
     | 
    
         
            +
            		// Make sure that the DOM is not already loaded
         
     | 
| 
      
 3024 
     | 
    
         
            +
            		if ( !jQuery.isReady ) {
         
     | 
| 
      
 3025 
     | 
    
         
            +
            			// Remember that the DOM is ready
         
     | 
| 
      
 3026 
     | 
    
         
            +
            			jQuery.isReady = true;
         
     | 
| 
      
 3027 
     | 
    
         
            +
             
     | 
| 
      
 3028 
     | 
    
         
            +
            			// If there are functions bound, to execute
         
     | 
| 
      
 3029 
     | 
    
         
            +
            			if ( jQuery.readyList ) {
         
     | 
| 
      
 3030 
     | 
    
         
            +
            				// Execute all of them
         
     | 
| 
      
 3031 
     | 
    
         
            +
            				jQuery.each( jQuery.readyList, function(){
         
     | 
| 
      
 3032 
     | 
    
         
            +
            					this.call( document, jQuery );
         
     | 
| 
      
 3033 
     | 
    
         
            +
            				});
         
     | 
| 
      
 3034 
     | 
    
         
            +
             
     | 
| 
      
 3035 
     | 
    
         
            +
            				// Reset the list of functions
         
     | 
| 
      
 3036 
     | 
    
         
            +
            				jQuery.readyList = null;
         
     | 
| 
      
 3037 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3038 
     | 
    
         
            +
             
     | 
| 
      
 3039 
     | 
    
         
            +
            			// Trigger any bound ready events
         
     | 
| 
      
 3040 
     | 
    
         
            +
            			jQuery(document).triggerHandler("ready");
         
     | 
| 
      
 3041 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3042 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3043 
     | 
    
         
            +
            });
         
     | 
| 
      
 3044 
     | 
    
         
            +
             
     | 
| 
      
 3045 
     | 
    
         
            +
            var readyBound = false;
         
     | 
| 
      
 3046 
     | 
    
         
            +
             
     | 
| 
      
 3047 
     | 
    
         
            +
            function bindReady(){
         
     | 
| 
      
 3048 
     | 
    
         
            +
            	if ( readyBound ) return;
         
     | 
| 
      
 3049 
     | 
    
         
            +
            	readyBound = true;
         
     | 
| 
      
 3050 
     | 
    
         
            +
             
     | 
| 
      
 3051 
     | 
    
         
            +
            	// Mozilla, Opera and webkit nightlies currently support this event
         
     | 
| 
      
 3052 
     | 
    
         
            +
            	if ( document.addEventListener ) {
         
     | 
| 
      
 3053 
     | 
    
         
            +
            		// Use the handy event callback
         
     | 
| 
      
 3054 
     | 
    
         
            +
            		document.addEventListener( "DOMContentLoaded", function(){
         
     | 
| 
      
 3055 
     | 
    
         
            +
            			document.removeEventListener( "DOMContentLoaded", arguments.callee, false );
         
     | 
| 
      
 3056 
     | 
    
         
            +
            			jQuery.ready();
         
     | 
| 
      
 3057 
     | 
    
         
            +
            		}, false );
         
     | 
| 
      
 3058 
     | 
    
         
            +
             
     | 
| 
      
 3059 
     | 
    
         
            +
            	// If IE event model is used
         
     | 
| 
      
 3060 
     | 
    
         
            +
            	} else if ( document.attachEvent ) {
         
     | 
| 
      
 3061 
     | 
    
         
            +
            		// ensure firing before onload,
         
     | 
| 
      
 3062 
     | 
    
         
            +
            		// maybe late but safe also for iframes
         
     | 
| 
      
 3063 
     | 
    
         
            +
            		document.attachEvent("onreadystatechange", function(){
         
     | 
| 
      
 3064 
     | 
    
         
            +
            			if ( document.readyState === "complete" ) {
         
     | 
| 
      
 3065 
     | 
    
         
            +
            				document.detachEvent( "onreadystatechange", arguments.callee );
         
     | 
| 
      
 3066 
     | 
    
         
            +
            				jQuery.ready();
         
     | 
| 
      
 3067 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3068 
     | 
    
         
            +
            		});
         
     | 
| 
      
 3069 
     | 
    
         
            +
             
     | 
| 
      
 3070 
     | 
    
         
            +
            		// If IE and not an iframe
         
     | 
| 
      
 3071 
     | 
    
         
            +
            		// continually check to see if the document is ready
         
     | 
| 
      
 3072 
     | 
    
         
            +
            		if ( document.documentElement.doScroll && window == window.top ) (function(){
         
     | 
| 
      
 3073 
     | 
    
         
            +
            			if ( jQuery.isReady ) return;
         
     | 
| 
      
 3074 
     | 
    
         
            +
             
     | 
| 
      
 3075 
     | 
    
         
            +
            			try {
         
     | 
| 
      
 3076 
     | 
    
         
            +
            				// If IE is used, use the trick by Diego Perini
         
     | 
| 
      
 3077 
     | 
    
         
            +
            				// http://javascript.nwbox.com/IEContentLoaded/
         
     | 
| 
      
 3078 
     | 
    
         
            +
            				document.documentElement.doScroll("left");
         
     | 
| 
      
 3079 
     | 
    
         
            +
            			} catch( error ) {
         
     | 
| 
      
 3080 
     | 
    
         
            +
            				setTimeout( arguments.callee, 0 );
         
     | 
| 
      
 3081 
     | 
    
         
            +
            				return;
         
     | 
| 
      
 3082 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3083 
     | 
    
         
            +
             
     | 
| 
      
 3084 
     | 
    
         
            +
            			// and execute any waiting functions
         
     | 
| 
      
 3085 
     | 
    
         
            +
            			jQuery.ready();
         
     | 
| 
      
 3086 
     | 
    
         
            +
            		})();
         
     | 
| 
      
 3087 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3088 
     | 
    
         
            +
             
     | 
| 
      
 3089 
     | 
    
         
            +
            	// A fallback to window.onload, that will always work
         
     | 
| 
      
 3090 
     | 
    
         
            +
            	jQuery.event.add( window, "load", jQuery.ready );
         
     | 
| 
      
 3091 
     | 
    
         
            +
            }
         
     | 
| 
      
 3092 
     | 
    
         
            +
             
     | 
| 
      
 3093 
     | 
    
         
            +
            jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
         
     | 
| 
      
 3094 
     | 
    
         
            +
            	"mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave," +
         
     | 
| 
      
 3095 
     | 
    
         
            +
            	"change,select,submit,keydown,keypress,keyup,error").split(","), function(i, name){
         
     | 
| 
      
 3096 
     | 
    
         
            +
             
     | 
| 
      
 3097 
     | 
    
         
            +
            	// Handle event binding
         
     | 
| 
      
 3098 
     | 
    
         
            +
            	jQuery.fn[name] = function(fn){
         
     | 
| 
      
 3099 
     | 
    
         
            +
            		return fn ? this.bind(name, fn) : this.trigger(name);
         
     | 
| 
      
 3100 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3101 
     | 
    
         
            +
            });
         
     | 
| 
      
 3102 
     | 
    
         
            +
             
     | 
| 
      
 3103 
     | 
    
         
            +
            // Prevent memory leaks in IE
         
     | 
| 
      
 3104 
     | 
    
         
            +
            // And prevent errors on refresh with events like mouseover in other browsers
         
     | 
| 
      
 3105 
     | 
    
         
            +
            // Window isn't included so as not to unbind existing unload events
         
     | 
| 
      
 3106 
     | 
    
         
            +
            jQuery( window ).bind( 'unload', function(){ 
         
     | 
| 
      
 3107 
     | 
    
         
            +
            	for ( var id in jQuery.cache )
         
     | 
| 
      
 3108 
     | 
    
         
            +
            		// Skip the window
         
     | 
| 
      
 3109 
     | 
    
         
            +
            		if ( id != 1 && jQuery.cache[ id ].handle )
         
     | 
| 
      
 3110 
     | 
    
         
            +
            			jQuery.event.remove( jQuery.cache[ id ].handle.elem );
         
     | 
| 
      
 3111 
     | 
    
         
            +
            }); 
         
     | 
| 
      
 3112 
     | 
    
         
            +
            (function(){
         
     | 
| 
      
 3113 
     | 
    
         
            +
             
     | 
| 
      
 3114 
     | 
    
         
            +
            	jQuery.support = {};
         
     | 
| 
      
 3115 
     | 
    
         
            +
             
     | 
| 
      
 3116 
     | 
    
         
            +
            	var root = document.documentElement,
         
     | 
| 
      
 3117 
     | 
    
         
            +
            		script = document.createElement("script"),
         
     | 
| 
      
 3118 
     | 
    
         
            +
            		div = document.createElement("div"),
         
     | 
| 
      
 3119 
     | 
    
         
            +
            		id = "script" + (new Date).getTime();
         
     | 
| 
      
 3120 
     | 
    
         
            +
             
     | 
| 
      
 3121 
     | 
    
         
            +
            	div.style.display = "none";
         
     | 
| 
      
 3122 
     | 
    
         
            +
            	div.innerHTML = '   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';
         
     | 
| 
      
 3123 
     | 
    
         
            +
             
     | 
| 
      
 3124 
     | 
    
         
            +
            	var all = div.getElementsByTagName("*"),
         
     | 
| 
      
 3125 
     | 
    
         
            +
            		a = div.getElementsByTagName("a")[0];
         
     | 
| 
      
 3126 
     | 
    
         
            +
             
     | 
| 
      
 3127 
     | 
    
         
            +
            	// Can't get basic test support
         
     | 
| 
      
 3128 
     | 
    
         
            +
            	if ( !all || !all.length || !a ) {
         
     | 
| 
      
 3129 
     | 
    
         
            +
            		return;
         
     | 
| 
      
 3130 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3131 
     | 
    
         
            +
             
     | 
| 
      
 3132 
     | 
    
         
            +
            	jQuery.support = {
         
     | 
| 
      
 3133 
     | 
    
         
            +
            		// IE strips leading whitespace when .innerHTML is used
         
     | 
| 
      
 3134 
     | 
    
         
            +
            		leadingWhitespace: div.firstChild.nodeType == 3,
         
     | 
| 
      
 3135 
     | 
    
         
            +
            		
         
     | 
| 
      
 3136 
     | 
    
         
            +
            		// Make sure that tbody elements aren't automatically inserted
         
     | 
| 
      
 3137 
     | 
    
         
            +
            		// IE will insert them into empty tables
         
     | 
| 
      
 3138 
     | 
    
         
            +
            		tbody: !div.getElementsByTagName("tbody").length,
         
     | 
| 
      
 3139 
     | 
    
         
            +
            		
         
     | 
| 
      
 3140 
     | 
    
         
            +
            		// Make sure that you can get all elements in an <object> element
         
     | 
| 
      
 3141 
     | 
    
         
            +
            		// IE 7 always returns no results
         
     | 
| 
      
 3142 
     | 
    
         
            +
            		objectAll: !!div.getElementsByTagName("object")[0]
         
     | 
| 
      
 3143 
     | 
    
         
            +
            			.getElementsByTagName("*").length,
         
     | 
| 
      
 3144 
     | 
    
         
            +
            		
         
     | 
| 
      
 3145 
     | 
    
         
            +
            		// Make sure that link elements get serialized correctly by innerHTML
         
     | 
| 
      
 3146 
     | 
    
         
            +
            		// This requires a wrapper element in IE
         
     | 
| 
      
 3147 
     | 
    
         
            +
            		htmlSerialize: !!div.getElementsByTagName("link").length,
         
     | 
| 
      
 3148 
     | 
    
         
            +
            		
         
     | 
| 
      
 3149 
     | 
    
         
            +
            		// Get the style information from getAttribute
         
     | 
| 
      
 3150 
     | 
    
         
            +
            		// (IE uses .cssText insted)
         
     | 
| 
      
 3151 
     | 
    
         
            +
            		style: /red/.test( a.getAttribute("style") ),
         
     | 
| 
      
 3152 
     | 
    
         
            +
            		
         
     | 
| 
      
 3153 
     | 
    
         
            +
            		// Make sure that URLs aren't manipulated
         
     | 
| 
      
 3154 
     | 
    
         
            +
            		// (IE normalizes it by default)
         
     | 
| 
      
 3155 
     | 
    
         
            +
            		hrefNormalized: a.getAttribute("href") === "/a",
         
     | 
| 
      
 3156 
     | 
    
         
            +
            		
         
     | 
| 
      
 3157 
     | 
    
         
            +
            		// Make sure that element opacity exists
         
     | 
| 
      
 3158 
     | 
    
         
            +
            		// (IE uses filter instead)
         
     | 
| 
      
 3159 
     | 
    
         
            +
            		opacity: a.style.opacity === "0.5",
         
     | 
| 
      
 3160 
     | 
    
         
            +
            		
         
     | 
| 
      
 3161 
     | 
    
         
            +
            		// Verify style float existence
         
     | 
| 
      
 3162 
     | 
    
         
            +
            		// (IE uses styleFloat instead of cssFloat)
         
     | 
| 
      
 3163 
     | 
    
         
            +
            		cssFloat: !!a.style.cssFloat,
         
     | 
| 
      
 3164 
     | 
    
         
            +
             
     | 
| 
      
 3165 
     | 
    
         
            +
            		// Will be defined later
         
     | 
| 
      
 3166 
     | 
    
         
            +
            		scriptEval: false,
         
     | 
| 
      
 3167 
     | 
    
         
            +
            		noCloneEvent: true,
         
     | 
| 
      
 3168 
     | 
    
         
            +
            		boxModel: null
         
     | 
| 
      
 3169 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3170 
     | 
    
         
            +
            	
         
     | 
| 
      
 3171 
     | 
    
         
            +
            	script.type = "text/javascript";
         
     | 
| 
      
 3172 
     | 
    
         
            +
            	try {
         
     | 
| 
      
 3173 
     | 
    
         
            +
            		script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
         
     | 
| 
      
 3174 
     | 
    
         
            +
            	} catch(e){}
         
     | 
| 
      
 3175 
     | 
    
         
            +
             
     | 
| 
      
 3176 
     | 
    
         
            +
            	root.insertBefore( script, root.firstChild );
         
     | 
| 
      
 3177 
     | 
    
         
            +
            	
         
     | 
| 
      
 3178 
     | 
    
         
            +
            	// Make sure that the execution of code works by injecting a script
         
     | 
| 
      
 3179 
     | 
    
         
            +
            	// tag with appendChild/createTextNode
         
     | 
| 
      
 3180 
     | 
    
         
            +
            	// (IE doesn't support this, fails, and uses .text instead)
         
     | 
| 
      
 3181 
     | 
    
         
            +
            	if ( window[ id ] ) {
         
     | 
| 
      
 3182 
     | 
    
         
            +
            		jQuery.support.scriptEval = true;
         
     | 
| 
      
 3183 
     | 
    
         
            +
            		delete window[ id ];
         
     | 
| 
      
 3184 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3185 
     | 
    
         
            +
             
     | 
| 
      
 3186 
     | 
    
         
            +
            	root.removeChild( script );
         
     | 
| 
      
 3187 
     | 
    
         
            +
             
     | 
| 
      
 3188 
     | 
    
         
            +
            	if ( div.attachEvent && div.fireEvent ) {
         
     | 
| 
      
 3189 
     | 
    
         
            +
            		div.attachEvent("onclick", function(){
         
     | 
| 
      
 3190 
     | 
    
         
            +
            			// Cloning a node shouldn't copy over any
         
     | 
| 
      
 3191 
     | 
    
         
            +
            			// bound event handlers (IE does this)
         
     | 
| 
      
 3192 
     | 
    
         
            +
            			jQuery.support.noCloneEvent = false;
         
     | 
| 
      
 3193 
     | 
    
         
            +
            			div.detachEvent("onclick", arguments.callee);
         
     | 
| 
      
 3194 
     | 
    
         
            +
            		});
         
     | 
| 
      
 3195 
     | 
    
         
            +
            		div.cloneNode(true).fireEvent("onclick");
         
     | 
| 
      
 3196 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3197 
     | 
    
         
            +
             
     | 
| 
      
 3198 
     | 
    
         
            +
            	// Figure out if the W3C box model works as expected
         
     | 
| 
      
 3199 
     | 
    
         
            +
            	// document.body must exist before we can do this
         
     | 
| 
      
 3200 
     | 
    
         
            +
            	jQuery(function(){
         
     | 
| 
      
 3201 
     | 
    
         
            +
            		var div = document.createElement("div");
         
     | 
| 
      
 3202 
     | 
    
         
            +
            		div.style.width = div.style.paddingLeft = "1px";
         
     | 
| 
      
 3203 
     | 
    
         
            +
             
     | 
| 
      
 3204 
     | 
    
         
            +
            		document.body.appendChild( div );
         
     | 
| 
      
 3205 
     | 
    
         
            +
            		jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
         
     | 
| 
      
 3206 
     | 
    
         
            +
            		document.body.removeChild( div ).style.display = 'none';
         
     | 
| 
      
 3207 
     | 
    
         
            +
            	});
         
     | 
| 
      
 3208 
     | 
    
         
            +
            })();
         
     | 
| 
      
 3209 
     | 
    
         
            +
             
     | 
| 
      
 3210 
     | 
    
         
            +
            var styleFloat = jQuery.support.cssFloat ? "cssFloat" : "styleFloat";
         
     | 
| 
      
 3211 
     | 
    
         
            +
             
     | 
| 
      
 3212 
     | 
    
         
            +
            jQuery.props = {
         
     | 
| 
      
 3213 
     | 
    
         
            +
            	"for": "htmlFor",
         
     | 
| 
      
 3214 
     | 
    
         
            +
            	"class": "className",
         
     | 
| 
      
 3215 
     | 
    
         
            +
            	"float": styleFloat,
         
     | 
| 
      
 3216 
     | 
    
         
            +
            	cssFloat: styleFloat,
         
     | 
| 
      
 3217 
     | 
    
         
            +
            	styleFloat: styleFloat,
         
     | 
| 
      
 3218 
     | 
    
         
            +
            	readonly: "readOnly",
         
     | 
| 
      
 3219 
     | 
    
         
            +
            	maxlength: "maxLength",
         
     | 
| 
      
 3220 
     | 
    
         
            +
            	cellspacing: "cellSpacing",
         
     | 
| 
      
 3221 
     | 
    
         
            +
            	rowspan: "rowSpan",
         
     | 
| 
      
 3222 
     | 
    
         
            +
            	tabindex: "tabIndex"
         
     | 
| 
      
 3223 
     | 
    
         
            +
            };
         
     | 
| 
      
 3224 
     | 
    
         
            +
            jQuery.fn.extend({
         
     | 
| 
      
 3225 
     | 
    
         
            +
            	// Keep a copy of the old load
         
     | 
| 
      
 3226 
     | 
    
         
            +
            	_load: jQuery.fn.load,
         
     | 
| 
      
 3227 
     | 
    
         
            +
             
     | 
| 
      
 3228 
     | 
    
         
            +
            	load: function( url, params, callback ) {
         
     | 
| 
      
 3229 
     | 
    
         
            +
            		if ( typeof url !== "string" )
         
     | 
| 
      
 3230 
     | 
    
         
            +
            			return this._load( url );
         
     | 
| 
      
 3231 
     | 
    
         
            +
             
     | 
| 
      
 3232 
     | 
    
         
            +
            		var off = url.indexOf(" ");
         
     | 
| 
      
 3233 
     | 
    
         
            +
            		if ( off >= 0 ) {
         
     | 
| 
      
 3234 
     | 
    
         
            +
            			var selector = url.slice(off, url.length);
         
     | 
| 
      
 3235 
     | 
    
         
            +
            			url = url.slice(0, off);
         
     | 
| 
      
 3236 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3237 
     | 
    
         
            +
             
     | 
| 
      
 3238 
     | 
    
         
            +
            		// Default to a GET request
         
     | 
| 
      
 3239 
     | 
    
         
            +
            		var type = "GET";
         
     | 
| 
      
 3240 
     | 
    
         
            +
             
     | 
| 
      
 3241 
     | 
    
         
            +
            		// If the second parameter was provided
         
     | 
| 
      
 3242 
     | 
    
         
            +
            		if ( params )
         
     | 
| 
      
 3243 
     | 
    
         
            +
            			// If it's a function
         
     | 
| 
      
 3244 
     | 
    
         
            +
            			if ( jQuery.isFunction( params ) ) {
         
     | 
| 
      
 3245 
     | 
    
         
            +
            				// We assume that it's the callback
         
     | 
| 
      
 3246 
     | 
    
         
            +
            				callback = params;
         
     | 
| 
      
 3247 
     | 
    
         
            +
            				params = null;
         
     | 
| 
      
 3248 
     | 
    
         
            +
             
     | 
| 
      
 3249 
     | 
    
         
            +
            			// Otherwise, build a param string
         
     | 
| 
      
 3250 
     | 
    
         
            +
            			} else if( typeof params === "object" ) {
         
     | 
| 
      
 3251 
     | 
    
         
            +
            				params = jQuery.param( params );
         
     | 
| 
      
 3252 
     | 
    
         
            +
            				type = "POST";
         
     | 
| 
      
 3253 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3254 
     | 
    
         
            +
             
     | 
| 
      
 3255 
     | 
    
         
            +
            		var self = this;
         
     | 
| 
      
 3256 
     | 
    
         
            +
             
     | 
| 
      
 3257 
     | 
    
         
            +
            		// Request the remote document
         
     | 
| 
      
 3258 
     | 
    
         
            +
            		jQuery.ajax({
         
     | 
| 
      
 3259 
     | 
    
         
            +
            			url: url,
         
     | 
| 
      
 3260 
     | 
    
         
            +
            			type: type,
         
     | 
| 
      
 3261 
     | 
    
         
            +
            			dataType: "html",
         
     | 
| 
      
 3262 
     | 
    
         
            +
            			data: params,
         
     | 
| 
      
 3263 
     | 
    
         
            +
            			complete: function(res, status){
         
     | 
| 
      
 3264 
     | 
    
         
            +
            				// If successful, inject the HTML into all the matched elements
         
     | 
| 
      
 3265 
     | 
    
         
            +
            				if ( status == "success" || status == "notmodified" )
         
     | 
| 
      
 3266 
     | 
    
         
            +
            					// See if a selector was specified
         
     | 
| 
      
 3267 
     | 
    
         
            +
            					self.html( selector ?
         
     | 
| 
      
 3268 
     | 
    
         
            +
            						// Create a dummy div to hold the results
         
     | 
| 
      
 3269 
     | 
    
         
            +
            						jQuery("<div/>")
         
     | 
| 
      
 3270 
     | 
    
         
            +
            							// inject the contents of the document in, removing the scripts
         
     | 
| 
      
 3271 
     | 
    
         
            +
            							// to avoid any 'Permission Denied' errors in IE
         
     | 
| 
      
 3272 
     | 
    
         
            +
            							.append(res.responseText.replace(/<script(.|\s)*?\/script>/g, ""))
         
     | 
| 
      
 3273 
     | 
    
         
            +
             
     | 
| 
      
 3274 
     | 
    
         
            +
            							// Locate the specified elements
         
     | 
| 
      
 3275 
     | 
    
         
            +
            							.find(selector) :
         
     | 
| 
      
 3276 
     | 
    
         
            +
             
     | 
| 
      
 3277 
     | 
    
         
            +
            						// If not, just inject the full result
         
     | 
| 
      
 3278 
     | 
    
         
            +
            						res.responseText );
         
     | 
| 
      
 3279 
     | 
    
         
            +
             
     | 
| 
      
 3280 
     | 
    
         
            +
            				if( callback )
         
     | 
| 
      
 3281 
     | 
    
         
            +
            					self.each( callback, [res.responseText, status, res] );
         
     | 
| 
      
 3282 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3283 
     | 
    
         
            +
            		});
         
     | 
| 
      
 3284 
     | 
    
         
            +
            		return this;
         
     | 
| 
      
 3285 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3286 
     | 
    
         
            +
             
     | 
| 
      
 3287 
     | 
    
         
            +
            	serialize: function() {
         
     | 
| 
      
 3288 
     | 
    
         
            +
            		return jQuery.param(this.serializeArray());
         
     | 
| 
      
 3289 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3290 
     | 
    
         
            +
            	serializeArray: function() {
         
     | 
| 
      
 3291 
     | 
    
         
            +
            		return this.map(function(){
         
     | 
| 
      
 3292 
     | 
    
         
            +
            			return this.elements ? jQuery.makeArray(this.elements) : this;
         
     | 
| 
      
 3293 
     | 
    
         
            +
            		})
         
     | 
| 
      
 3294 
     | 
    
         
            +
            		.filter(function(){
         
     | 
| 
      
 3295 
     | 
    
         
            +
            			return this.name && !this.disabled &&
         
     | 
| 
      
 3296 
     | 
    
         
            +
            				(this.checked || /select|textarea/i.test(this.nodeName) ||
         
     | 
| 
      
 3297 
     | 
    
         
            +
            					/text|hidden|password|search/i.test(this.type));
         
     | 
| 
      
 3298 
     | 
    
         
            +
            		})
         
     | 
| 
      
 3299 
     | 
    
         
            +
            		.map(function(i, elem){
         
     | 
| 
      
 3300 
     | 
    
         
            +
            			var val = jQuery(this).val();
         
     | 
| 
      
 3301 
     | 
    
         
            +
            			return val == null ? null :
         
     | 
| 
      
 3302 
     | 
    
         
            +
            				jQuery.isArray(val) ?
         
     | 
| 
      
 3303 
     | 
    
         
            +
            					jQuery.map( val, function(val, i){
         
     | 
| 
      
 3304 
     | 
    
         
            +
            						return {name: elem.name, value: val};
         
     | 
| 
      
 3305 
     | 
    
         
            +
            					}) :
         
     | 
| 
      
 3306 
     | 
    
         
            +
            					{name: elem.name, value: val};
         
     | 
| 
      
 3307 
     | 
    
         
            +
            		}).get();
         
     | 
| 
      
 3308 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3309 
     | 
    
         
            +
            });
         
     | 
| 
      
 3310 
     | 
    
         
            +
             
     | 
| 
      
 3311 
     | 
    
         
            +
            // Attach a bunch of functions for handling common AJAX events
         
     | 
| 
      
 3312 
     | 
    
         
            +
            jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){
         
     | 
| 
      
 3313 
     | 
    
         
            +
            	jQuery.fn[o] = function(f){
         
     | 
| 
      
 3314 
     | 
    
         
            +
            		return this.bind(o, f);
         
     | 
| 
      
 3315 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3316 
     | 
    
         
            +
            });
         
     | 
| 
      
 3317 
     | 
    
         
            +
             
     | 
| 
      
 3318 
     | 
    
         
            +
            var jsc = now();
         
     | 
| 
      
 3319 
     | 
    
         
            +
             
     | 
| 
      
 3320 
     | 
    
         
            +
            jQuery.extend({
         
     | 
| 
      
 3321 
     | 
    
         
            +
              
         
     | 
| 
      
 3322 
     | 
    
         
            +
            	get: function( url, data, callback, type ) {
         
     | 
| 
      
 3323 
     | 
    
         
            +
            		// shift arguments if data argument was ommited
         
     | 
| 
      
 3324 
     | 
    
         
            +
            		if ( jQuery.isFunction( data ) ) {
         
     | 
| 
      
 3325 
     | 
    
         
            +
            			callback = data;
         
     | 
| 
      
 3326 
     | 
    
         
            +
            			data = null;
         
     | 
| 
      
 3327 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3328 
     | 
    
         
            +
             
     | 
| 
      
 3329 
     | 
    
         
            +
            		return jQuery.ajax({
         
     | 
| 
      
 3330 
     | 
    
         
            +
            			type: "GET",
         
     | 
| 
      
 3331 
     | 
    
         
            +
            			url: url,
         
     | 
| 
      
 3332 
     | 
    
         
            +
            			data: data,
         
     | 
| 
      
 3333 
     | 
    
         
            +
            			success: callback,
         
     | 
| 
      
 3334 
     | 
    
         
            +
            			dataType: type
         
     | 
| 
      
 3335 
     | 
    
         
            +
            		});
         
     | 
| 
      
 3336 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3337 
     | 
    
         
            +
             
     | 
| 
      
 3338 
     | 
    
         
            +
            	getScript: function( url, callback ) {
         
     | 
| 
      
 3339 
     | 
    
         
            +
            		return jQuery.get(url, null, callback, "script");
         
     | 
| 
      
 3340 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3341 
     | 
    
         
            +
             
     | 
| 
      
 3342 
     | 
    
         
            +
            	getJSON: function( url, data, callback ) {
         
     | 
| 
      
 3343 
     | 
    
         
            +
            		return jQuery.get(url, data, callback, "json");
         
     | 
| 
      
 3344 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3345 
     | 
    
         
            +
             
     | 
| 
      
 3346 
     | 
    
         
            +
            	post: function( url, data, callback, type ) {
         
     | 
| 
      
 3347 
     | 
    
         
            +
            		if ( jQuery.isFunction( data ) ) {
         
     | 
| 
      
 3348 
     | 
    
         
            +
            			callback = data;
         
     | 
| 
      
 3349 
     | 
    
         
            +
            			data = {};
         
     | 
| 
      
 3350 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3351 
     | 
    
         
            +
             
     | 
| 
      
 3352 
     | 
    
         
            +
            		return jQuery.ajax({
         
     | 
| 
      
 3353 
     | 
    
         
            +
            			type: "POST",
         
     | 
| 
      
 3354 
     | 
    
         
            +
            			url: url,
         
     | 
| 
      
 3355 
     | 
    
         
            +
            			data: data,
         
     | 
| 
      
 3356 
     | 
    
         
            +
            			success: callback,
         
     | 
| 
      
 3357 
     | 
    
         
            +
            			dataType: type
         
     | 
| 
      
 3358 
     | 
    
         
            +
            		});
         
     | 
| 
      
 3359 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3360 
     | 
    
         
            +
             
     | 
| 
      
 3361 
     | 
    
         
            +
            	ajaxSetup: function( settings ) {
         
     | 
| 
      
 3362 
     | 
    
         
            +
            		jQuery.extend( jQuery.ajaxSettings, settings );
         
     | 
| 
      
 3363 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3364 
     | 
    
         
            +
             
     | 
| 
      
 3365 
     | 
    
         
            +
            	ajaxSettings: {
         
     | 
| 
      
 3366 
     | 
    
         
            +
            		url: location.href,
         
     | 
| 
      
 3367 
     | 
    
         
            +
            		global: true,
         
     | 
| 
      
 3368 
     | 
    
         
            +
            		type: "GET",
         
     | 
| 
      
 3369 
     | 
    
         
            +
            		contentType: "application/x-www-form-urlencoded",
         
     | 
| 
      
 3370 
     | 
    
         
            +
            		processData: true,
         
     | 
| 
      
 3371 
     | 
    
         
            +
            		async: true,
         
     | 
| 
      
 3372 
     | 
    
         
            +
            		/*
         
     | 
| 
      
 3373 
     | 
    
         
            +
            		timeout: 0,
         
     | 
| 
      
 3374 
     | 
    
         
            +
            		data: null,
         
     | 
| 
      
 3375 
     | 
    
         
            +
            		username: null,
         
     | 
| 
      
 3376 
     | 
    
         
            +
            		password: null,
         
     | 
| 
      
 3377 
     | 
    
         
            +
            		*/
         
     | 
| 
      
 3378 
     | 
    
         
            +
            		// Create the request object; Microsoft failed to properly
         
     | 
| 
      
 3379 
     | 
    
         
            +
            		// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available
         
     | 
| 
      
 3380 
     | 
    
         
            +
            		// This function can be overriden by calling jQuery.ajaxSetup
         
     | 
| 
      
 3381 
     | 
    
         
            +
            		xhr:function(){
         
     | 
| 
      
 3382 
     | 
    
         
            +
            			return window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
         
     | 
| 
      
 3383 
     | 
    
         
            +
            		},
         
     | 
| 
      
 3384 
     | 
    
         
            +
            		accepts: {
         
     | 
| 
      
 3385 
     | 
    
         
            +
            			xml: "application/xml, text/xml",
         
     | 
| 
      
 3386 
     | 
    
         
            +
            			html: "text/html",
         
     | 
| 
      
 3387 
     | 
    
         
            +
            			script: "text/javascript, application/javascript",
         
     | 
| 
      
 3388 
     | 
    
         
            +
            			json: "application/json, text/javascript",
         
     | 
| 
      
 3389 
     | 
    
         
            +
            			text: "text/plain",
         
     | 
| 
      
 3390 
     | 
    
         
            +
            			_default: "*/*"
         
     | 
| 
      
 3391 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3392 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3393 
     | 
    
         
            +
             
     | 
| 
      
 3394 
     | 
    
         
            +
            	// Last-Modified header cache for next request
         
     | 
| 
      
 3395 
     | 
    
         
            +
            	lastModified: {},
         
     | 
| 
      
 3396 
     | 
    
         
            +
             
     | 
| 
      
 3397 
     | 
    
         
            +
            	ajax: function( s ) {
         
     | 
| 
      
 3398 
     | 
    
         
            +
            		// Extend the settings, but re-extend 's' so that it can be
         
     | 
| 
      
 3399 
     | 
    
         
            +
            		// checked again later (in the test suite, specifically)
         
     | 
| 
      
 3400 
     | 
    
         
            +
            		s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s));
         
     | 
| 
      
 3401 
     | 
    
         
            +
             
     | 
| 
      
 3402 
     | 
    
         
            +
            		var jsonp, jsre = /=\?(&|$)/g, status, data,
         
     | 
| 
      
 3403 
     | 
    
         
            +
            			type = s.type.toUpperCase();
         
     | 
| 
      
 3404 
     | 
    
         
            +
             
     | 
| 
      
 3405 
     | 
    
         
            +
            		// convert data if not already a string
         
     | 
| 
      
 3406 
     | 
    
         
            +
            		if ( s.data && s.processData && typeof s.data !== "string" )
         
     | 
| 
      
 3407 
     | 
    
         
            +
            			s.data = jQuery.param(s.data);
         
     | 
| 
      
 3408 
     | 
    
         
            +
             
     | 
| 
      
 3409 
     | 
    
         
            +
            		// Handle JSONP Parameter Callbacks
         
     | 
| 
      
 3410 
     | 
    
         
            +
            		if ( s.dataType == "jsonp" ) {
         
     | 
| 
      
 3411 
     | 
    
         
            +
            			if ( type == "GET" ) {
         
     | 
| 
      
 3412 
     | 
    
         
            +
            				if ( !s.url.match(jsre) )
         
     | 
| 
      
 3413 
     | 
    
         
            +
            					s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?";
         
     | 
| 
      
 3414 
     | 
    
         
            +
            			} else if ( !s.data || !s.data.match(jsre) )
         
     | 
| 
      
 3415 
     | 
    
         
            +
            				s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
         
     | 
| 
      
 3416 
     | 
    
         
            +
            			s.dataType = "json";
         
     | 
| 
      
 3417 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3418 
     | 
    
         
            +
             
     | 
| 
      
 3419 
     | 
    
         
            +
            		// Build temporary JSONP function
         
     | 
| 
      
 3420 
     | 
    
         
            +
            		if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) {
         
     | 
| 
      
 3421 
     | 
    
         
            +
            			jsonp = "jsonp" + jsc++;
         
     | 
| 
      
 3422 
     | 
    
         
            +
             
     | 
| 
      
 3423 
     | 
    
         
            +
            			// Replace the =? sequence both in the query string and the data
         
     | 
| 
      
 3424 
     | 
    
         
            +
            			if ( s.data )
         
     | 
| 
      
 3425 
     | 
    
         
            +
            				s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
         
     | 
| 
      
 3426 
     | 
    
         
            +
            			s.url = s.url.replace(jsre, "=" + jsonp + "$1");
         
     | 
| 
      
 3427 
     | 
    
         
            +
             
     | 
| 
      
 3428 
     | 
    
         
            +
            			// We need to make sure
         
     | 
| 
      
 3429 
     | 
    
         
            +
            			// that a JSONP style response is executed properly
         
     | 
| 
      
 3430 
     | 
    
         
            +
            			s.dataType = "script";
         
     | 
| 
      
 3431 
     | 
    
         
            +
             
     | 
| 
      
 3432 
     | 
    
         
            +
            			// Handle JSONP-style loading
         
     | 
| 
      
 3433 
     | 
    
         
            +
            			window[ jsonp ] = function(tmp){
         
     | 
| 
      
 3434 
     | 
    
         
            +
            				data = tmp;
         
     | 
| 
      
 3435 
     | 
    
         
            +
            				success();
         
     | 
| 
      
 3436 
     | 
    
         
            +
            				complete();
         
     | 
| 
      
 3437 
     | 
    
         
            +
            				// Garbage collect
         
     | 
| 
      
 3438 
     | 
    
         
            +
            				window[ jsonp ] = undefined;
         
     | 
| 
      
 3439 
     | 
    
         
            +
            				try{ delete window[ jsonp ]; } catch(e){}
         
     | 
| 
      
 3440 
     | 
    
         
            +
            				if ( head )
         
     | 
| 
      
 3441 
     | 
    
         
            +
            					head.removeChild( script );
         
     | 
| 
      
 3442 
     | 
    
         
            +
            			};
         
     | 
| 
      
 3443 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3444 
     | 
    
         
            +
             
     | 
| 
      
 3445 
     | 
    
         
            +
            		if ( s.dataType == "script" && s.cache == null )
         
     | 
| 
      
 3446 
     | 
    
         
            +
            			s.cache = false;
         
     | 
| 
      
 3447 
     | 
    
         
            +
             
     | 
| 
      
 3448 
     | 
    
         
            +
            		if ( s.cache === false && type == "GET" ) {
         
     | 
| 
      
 3449 
     | 
    
         
            +
            			var ts = now();
         
     | 
| 
      
 3450 
     | 
    
         
            +
            			// try replacing _= if it is there
         
     | 
| 
      
 3451 
     | 
    
         
            +
            			var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
         
     | 
| 
      
 3452 
     | 
    
         
            +
            			// if nothing was replaced, add timestamp to the end
         
     | 
| 
      
 3453 
     | 
    
         
            +
            			s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
         
     | 
| 
      
 3454 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3455 
     | 
    
         
            +
             
     | 
| 
      
 3456 
     | 
    
         
            +
            		// If data is available, append data to url for get requests
         
     | 
| 
      
 3457 
     | 
    
         
            +
            		if ( s.data && type == "GET" ) {
         
     | 
| 
      
 3458 
     | 
    
         
            +
            			s.url += (s.url.match(/\?/) ? "&" : "?") + s.data;
         
     | 
| 
      
 3459 
     | 
    
         
            +
             
     | 
| 
      
 3460 
     | 
    
         
            +
            			// IE likes to send both get and post data, prevent this
         
     | 
| 
      
 3461 
     | 
    
         
            +
            			s.data = null;
         
     | 
| 
      
 3462 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3463 
     | 
    
         
            +
             
     | 
| 
      
 3464 
     | 
    
         
            +
            		// Watch for a new set of requests
         
     | 
| 
      
 3465 
     | 
    
         
            +
            		if ( s.global && ! jQuery.active++ )
         
     | 
| 
      
 3466 
     | 
    
         
            +
            			jQuery.event.trigger( "ajaxStart" );
         
     | 
| 
      
 3467 
     | 
    
         
            +
             
     | 
| 
      
 3468 
     | 
    
         
            +
            		// Matches an absolute URL, and saves the domain
         
     | 
| 
      
 3469 
     | 
    
         
            +
            		var parts = /^(\w+:)?\/\/([^\/?#]+)/.exec( s.url );
         
     | 
| 
      
 3470 
     | 
    
         
            +
             
     | 
| 
      
 3471 
     | 
    
         
            +
            		// If we're requesting a remote document
         
     | 
| 
      
 3472 
     | 
    
         
            +
            		// and trying to load JSON or Script with a GET
         
     | 
| 
      
 3473 
     | 
    
         
            +
            		if ( s.dataType == "script" && type == "GET" && parts
         
     | 
| 
      
 3474 
     | 
    
         
            +
            			&& ( parts[1] && parts[1] != location.protocol || parts[2] != location.host )){
         
     | 
| 
      
 3475 
     | 
    
         
            +
             
     | 
| 
      
 3476 
     | 
    
         
            +
            			var head = document.getElementsByTagName("head")[0];
         
     | 
| 
      
 3477 
     | 
    
         
            +
            			var script = document.createElement("script");
         
     | 
| 
      
 3478 
     | 
    
         
            +
            			script.src = s.url;
         
     | 
| 
      
 3479 
     | 
    
         
            +
            			if (s.scriptCharset)
         
     | 
| 
      
 3480 
     | 
    
         
            +
            				script.charset = s.scriptCharset;
         
     | 
| 
      
 3481 
     | 
    
         
            +
             
     | 
| 
      
 3482 
     | 
    
         
            +
            			// Handle Script loading
         
     | 
| 
      
 3483 
     | 
    
         
            +
            			if ( !jsonp ) {
         
     | 
| 
      
 3484 
     | 
    
         
            +
            				var done = false;
         
     | 
| 
      
 3485 
     | 
    
         
            +
             
     | 
| 
      
 3486 
     | 
    
         
            +
            				// Attach handlers for all browsers
         
     | 
| 
      
 3487 
     | 
    
         
            +
            				script.onload = script.onreadystatechange = function(){
         
     | 
| 
      
 3488 
     | 
    
         
            +
            					if ( !done && (!this.readyState ||
         
     | 
| 
      
 3489 
     | 
    
         
            +
            							this.readyState == "loaded" || this.readyState == "complete") ) {
         
     | 
| 
      
 3490 
     | 
    
         
            +
            						done = true;
         
     | 
| 
      
 3491 
     | 
    
         
            +
            						success();
         
     | 
| 
      
 3492 
     | 
    
         
            +
            						complete();
         
     | 
| 
      
 3493 
     | 
    
         
            +
             
     | 
| 
      
 3494 
     | 
    
         
            +
            						// Handle memory leak in IE
         
     | 
| 
      
 3495 
     | 
    
         
            +
            						script.onload = script.onreadystatechange = null;
         
     | 
| 
      
 3496 
     | 
    
         
            +
            						head.removeChild( script );
         
     | 
| 
      
 3497 
     | 
    
         
            +
            					}
         
     | 
| 
      
 3498 
     | 
    
         
            +
            				};
         
     | 
| 
      
 3499 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3500 
     | 
    
         
            +
             
     | 
| 
      
 3501 
     | 
    
         
            +
            			head.appendChild(script);
         
     | 
| 
      
 3502 
     | 
    
         
            +
             
     | 
| 
      
 3503 
     | 
    
         
            +
            			// We handle everything using the script element injection
         
     | 
| 
      
 3504 
     | 
    
         
            +
            			return undefined;
         
     | 
| 
      
 3505 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3506 
     | 
    
         
            +
             
     | 
| 
      
 3507 
     | 
    
         
            +
            		var requestDone = false;
         
     | 
| 
      
 3508 
     | 
    
         
            +
             
     | 
| 
      
 3509 
     | 
    
         
            +
            		// Create the request object
         
     | 
| 
      
 3510 
     | 
    
         
            +
            		var xhr = s.xhr();
         
     | 
| 
      
 3511 
     | 
    
         
            +
             
     | 
| 
      
 3512 
     | 
    
         
            +
            		// Open the socket
         
     | 
| 
      
 3513 
     | 
    
         
            +
            		// Passing null username, generates a login popup on Opera (#2865)
         
     | 
| 
      
 3514 
     | 
    
         
            +
            		if( s.username )
         
     | 
| 
      
 3515 
     | 
    
         
            +
            			xhr.open(type, s.url, s.async, s.username, s.password);
         
     | 
| 
      
 3516 
     | 
    
         
            +
            		else
         
     | 
| 
      
 3517 
     | 
    
         
            +
            			xhr.open(type, s.url, s.async);
         
     | 
| 
      
 3518 
     | 
    
         
            +
             
     | 
| 
      
 3519 
     | 
    
         
            +
            		// Need an extra try/catch for cross domain requests in Firefox 3
         
     | 
| 
      
 3520 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 3521 
     | 
    
         
            +
            			// Set the correct header, if data is being sent
         
     | 
| 
      
 3522 
     | 
    
         
            +
            			if ( s.data )
         
     | 
| 
      
 3523 
     | 
    
         
            +
            				xhr.setRequestHeader("Content-Type", s.contentType);
         
     | 
| 
      
 3524 
     | 
    
         
            +
             
     | 
| 
      
 3525 
     | 
    
         
            +
            			// Set the If-Modified-Since header, if ifModified mode.
         
     | 
| 
      
 3526 
     | 
    
         
            +
            			if ( s.ifModified )
         
     | 
| 
      
 3527 
     | 
    
         
            +
            				xhr.setRequestHeader("If-Modified-Since",
         
     | 
| 
      
 3528 
     | 
    
         
            +
            					jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
         
     | 
| 
      
 3529 
     | 
    
         
            +
             
     | 
| 
      
 3530 
     | 
    
         
            +
            			// Set header so the called script knows that it's an XMLHttpRequest
         
     | 
| 
      
 3531 
     | 
    
         
            +
            			xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
         
     | 
| 
      
 3532 
     | 
    
         
            +
             
     | 
| 
      
 3533 
     | 
    
         
            +
            			// Set the Accepts header for the server, depending on the dataType
         
     | 
| 
      
 3534 
     | 
    
         
            +
            			xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
         
     | 
| 
      
 3535 
     | 
    
         
            +
            				s.accepts[ s.dataType ] + ", */*" :
         
     | 
| 
      
 3536 
     | 
    
         
            +
            				s.accepts._default );
         
     | 
| 
      
 3537 
     | 
    
         
            +
            		} catch(e){}
         
     | 
| 
      
 3538 
     | 
    
         
            +
             
     | 
| 
      
 3539 
     | 
    
         
            +
            		// Allow custom headers/mimetypes and early abort
         
     | 
| 
      
 3540 
     | 
    
         
            +
            		if ( s.beforeSend && s.beforeSend(xhr, s) === false ) {
         
     | 
| 
      
 3541 
     | 
    
         
            +
            			// Handle the global AJAX counter
         
     | 
| 
      
 3542 
     | 
    
         
            +
            			if ( s.global && ! --jQuery.active )
         
     | 
| 
      
 3543 
     | 
    
         
            +
            				jQuery.event.trigger( "ajaxStop" );
         
     | 
| 
      
 3544 
     | 
    
         
            +
            			// close opended socket
         
     | 
| 
      
 3545 
     | 
    
         
            +
            			xhr.abort();
         
     | 
| 
      
 3546 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 3547 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3548 
     | 
    
         
            +
             
     | 
| 
      
 3549 
     | 
    
         
            +
            		if ( s.global )
         
     | 
| 
      
 3550 
     | 
    
         
            +
            			jQuery.event.trigger("ajaxSend", [xhr, s]);
         
     | 
| 
      
 3551 
     | 
    
         
            +
             
     | 
| 
      
 3552 
     | 
    
         
            +
            		// Wait for a response to come back
         
     | 
| 
      
 3553 
     | 
    
         
            +
            		var onreadystatechange = function(isTimeout){
         
     | 
| 
      
 3554 
     | 
    
         
            +
            			// The request was aborted, clear the interval and decrement jQuery.active
         
     | 
| 
      
 3555 
     | 
    
         
            +
            			if (xhr.readyState == 0) {
         
     | 
| 
      
 3556 
     | 
    
         
            +
            				if (ival) {
         
     | 
| 
      
 3557 
     | 
    
         
            +
            					// clear poll interval
         
     | 
| 
      
 3558 
     | 
    
         
            +
            					clearInterval(ival);
         
     | 
| 
      
 3559 
     | 
    
         
            +
            					ival = null;
         
     | 
| 
      
 3560 
     | 
    
         
            +
            					// Handle the global AJAX counter
         
     | 
| 
      
 3561 
     | 
    
         
            +
            					if ( s.global && ! --jQuery.active )
         
     | 
| 
      
 3562 
     | 
    
         
            +
            						jQuery.event.trigger( "ajaxStop" );
         
     | 
| 
      
 3563 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3564 
     | 
    
         
            +
            			// The transfer is complete and the data is available, or the request timed out
         
     | 
| 
      
 3565 
     | 
    
         
            +
            			} else if ( !requestDone && xhr && (xhr.readyState == 4 || isTimeout == "timeout") ) {
         
     | 
| 
      
 3566 
     | 
    
         
            +
            				requestDone = true;
         
     | 
| 
      
 3567 
     | 
    
         
            +
             
     | 
| 
      
 3568 
     | 
    
         
            +
            				// clear poll interval
         
     | 
| 
      
 3569 
     | 
    
         
            +
            				if (ival) {
         
     | 
| 
      
 3570 
     | 
    
         
            +
            					clearInterval(ival);
         
     | 
| 
      
 3571 
     | 
    
         
            +
            					ival = null;
         
     | 
| 
      
 3572 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3573 
     | 
    
         
            +
             
     | 
| 
      
 3574 
     | 
    
         
            +
            				status = isTimeout == "timeout" ? "timeout" :
         
     | 
| 
      
 3575 
     | 
    
         
            +
            					!jQuery.httpSuccess( xhr ) ? "error" :
         
     | 
| 
      
 3576 
     | 
    
         
            +
            					s.ifModified && jQuery.httpNotModified( xhr, s.url ) ? "notmodified" :
         
     | 
| 
      
 3577 
     | 
    
         
            +
            					"success";
         
     | 
| 
      
 3578 
     | 
    
         
            +
             
     | 
| 
      
 3579 
     | 
    
         
            +
            				if ( status == "success" ) {
         
     | 
| 
      
 3580 
     | 
    
         
            +
            					// Watch for, and catch, XML document parse errors
         
     | 
| 
      
 3581 
     | 
    
         
            +
            					try {
         
     | 
| 
      
 3582 
     | 
    
         
            +
            						// process the data (runs the xml through httpData regardless of callback)
         
     | 
| 
      
 3583 
     | 
    
         
            +
            						data = jQuery.httpData( xhr, s.dataType, s );
         
     | 
| 
      
 3584 
     | 
    
         
            +
            					} catch(e) {
         
     | 
| 
      
 3585 
     | 
    
         
            +
            						status = "parsererror";
         
     | 
| 
      
 3586 
     | 
    
         
            +
            					}
         
     | 
| 
      
 3587 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3588 
     | 
    
         
            +
             
     | 
| 
      
 3589 
     | 
    
         
            +
            				// Make sure that the request was successful or notmodified
         
     | 
| 
      
 3590 
     | 
    
         
            +
            				if ( status == "success" ) {
         
     | 
| 
      
 3591 
     | 
    
         
            +
            					// Cache Last-Modified header, if ifModified mode.
         
     | 
| 
      
 3592 
     | 
    
         
            +
            					var modRes;
         
     | 
| 
      
 3593 
     | 
    
         
            +
            					try {
         
     | 
| 
      
 3594 
     | 
    
         
            +
            						modRes = xhr.getResponseHeader("Last-Modified");
         
     | 
| 
      
 3595 
     | 
    
         
            +
            					} catch(e) {} // swallow exception thrown by FF if header is not available
         
     | 
| 
      
 3596 
     | 
    
         
            +
             
     | 
| 
      
 3597 
     | 
    
         
            +
            					if ( s.ifModified && modRes )
         
     | 
| 
      
 3598 
     | 
    
         
            +
            						jQuery.lastModified[s.url] = modRes;
         
     | 
| 
      
 3599 
     | 
    
         
            +
             
     | 
| 
      
 3600 
     | 
    
         
            +
            					// JSONP handles its own success callback
         
     | 
| 
      
 3601 
     | 
    
         
            +
            					if ( !jsonp )
         
     | 
| 
      
 3602 
     | 
    
         
            +
            						success();
         
     | 
| 
      
 3603 
     | 
    
         
            +
            				} else
         
     | 
| 
      
 3604 
     | 
    
         
            +
            					jQuery.handleError(s, xhr, status);
         
     | 
| 
      
 3605 
     | 
    
         
            +
             
     | 
| 
      
 3606 
     | 
    
         
            +
            				// Fire the complete handlers
         
     | 
| 
      
 3607 
     | 
    
         
            +
            				complete();
         
     | 
| 
      
 3608 
     | 
    
         
            +
             
     | 
| 
      
 3609 
     | 
    
         
            +
            				if ( isTimeout )
         
     | 
| 
      
 3610 
     | 
    
         
            +
            					xhr.abort();
         
     | 
| 
      
 3611 
     | 
    
         
            +
             
     | 
| 
      
 3612 
     | 
    
         
            +
            				// Stop memory leaks
         
     | 
| 
      
 3613 
     | 
    
         
            +
            				if ( s.async )
         
     | 
| 
      
 3614 
     | 
    
         
            +
            					xhr = null;
         
     | 
| 
      
 3615 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3616 
     | 
    
         
            +
            		};
         
     | 
| 
      
 3617 
     | 
    
         
            +
             
     | 
| 
      
 3618 
     | 
    
         
            +
            		if ( s.async ) {
         
     | 
| 
      
 3619 
     | 
    
         
            +
            			// don't attach the handler to the request, just poll it instead
         
     | 
| 
      
 3620 
     | 
    
         
            +
            			var ival = setInterval(onreadystatechange, 13);
         
     | 
| 
      
 3621 
     | 
    
         
            +
             
     | 
| 
      
 3622 
     | 
    
         
            +
            			// Timeout checker
         
     | 
| 
      
 3623 
     | 
    
         
            +
            			if ( s.timeout > 0 )
         
     | 
| 
      
 3624 
     | 
    
         
            +
            				setTimeout(function(){
         
     | 
| 
      
 3625 
     | 
    
         
            +
            					// Check to see if the request is still happening
         
     | 
| 
      
 3626 
     | 
    
         
            +
            					if ( xhr && !requestDone )
         
     | 
| 
      
 3627 
     | 
    
         
            +
            						onreadystatechange( "timeout" );
         
     | 
| 
      
 3628 
     | 
    
         
            +
            				}, s.timeout);
         
     | 
| 
      
 3629 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3630 
     | 
    
         
            +
             
     | 
| 
      
 3631 
     | 
    
         
            +
            		// Send the data
         
     | 
| 
      
 3632 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 3633 
     | 
    
         
            +
            			xhr.send(s.data);
         
     | 
| 
      
 3634 
     | 
    
         
            +
            		} catch(e) {
         
     | 
| 
      
 3635 
     | 
    
         
            +
            			jQuery.handleError(s, xhr, null, e);
         
     | 
| 
      
 3636 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3637 
     | 
    
         
            +
             
     | 
| 
      
 3638 
     | 
    
         
            +
            		// firefox 1.5 doesn't fire statechange for sync requests
         
     | 
| 
      
 3639 
     | 
    
         
            +
            		if ( !s.async )
         
     | 
| 
      
 3640 
     | 
    
         
            +
            			onreadystatechange();
         
     | 
| 
      
 3641 
     | 
    
         
            +
             
     | 
| 
      
 3642 
     | 
    
         
            +
            		function success(){
         
     | 
| 
      
 3643 
     | 
    
         
            +
            			// If a local callback was specified, fire it and pass it the data
         
     | 
| 
      
 3644 
     | 
    
         
            +
            			if ( s.success )
         
     | 
| 
      
 3645 
     | 
    
         
            +
            				s.success( data, status );
         
     | 
| 
      
 3646 
     | 
    
         
            +
             
     | 
| 
      
 3647 
     | 
    
         
            +
            			// Fire the global callback
         
     | 
| 
      
 3648 
     | 
    
         
            +
            			if ( s.global )
         
     | 
| 
      
 3649 
     | 
    
         
            +
            				jQuery.event.trigger( "ajaxSuccess", [xhr, s] );
         
     | 
| 
      
 3650 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3651 
     | 
    
         
            +
             
     | 
| 
      
 3652 
     | 
    
         
            +
            		function complete(){
         
     | 
| 
      
 3653 
     | 
    
         
            +
            			// Process result
         
     | 
| 
      
 3654 
     | 
    
         
            +
            			if ( s.complete )
         
     | 
| 
      
 3655 
     | 
    
         
            +
            				s.complete(xhr, status);
         
     | 
| 
      
 3656 
     | 
    
         
            +
             
     | 
| 
      
 3657 
     | 
    
         
            +
            			// The request was completed
         
     | 
| 
      
 3658 
     | 
    
         
            +
            			if ( s.global )
         
     | 
| 
      
 3659 
     | 
    
         
            +
            				jQuery.event.trigger( "ajaxComplete", [xhr, s] );
         
     | 
| 
      
 3660 
     | 
    
         
            +
             
     | 
| 
      
 3661 
     | 
    
         
            +
            			// Handle the global AJAX counter
         
     | 
| 
      
 3662 
     | 
    
         
            +
            			if ( s.global && ! --jQuery.active )
         
     | 
| 
      
 3663 
     | 
    
         
            +
            				jQuery.event.trigger( "ajaxStop" );
         
     | 
| 
      
 3664 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3665 
     | 
    
         
            +
             
     | 
| 
      
 3666 
     | 
    
         
            +
            		// return XMLHttpRequest to allow aborting the request etc.
         
     | 
| 
      
 3667 
     | 
    
         
            +
            		return xhr;
         
     | 
| 
      
 3668 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3669 
     | 
    
         
            +
             
     | 
| 
      
 3670 
     | 
    
         
            +
            	handleError: function( s, xhr, status, e ) {
         
     | 
| 
      
 3671 
     | 
    
         
            +
            		// If a local callback was specified, fire it
         
     | 
| 
      
 3672 
     | 
    
         
            +
            		if ( s.error ) s.error( xhr, status, e );
         
     | 
| 
      
 3673 
     | 
    
         
            +
             
     | 
| 
      
 3674 
     | 
    
         
            +
            		// Fire the global callback
         
     | 
| 
      
 3675 
     | 
    
         
            +
            		if ( s.global )
         
     | 
| 
      
 3676 
     | 
    
         
            +
            			jQuery.event.trigger( "ajaxError", [xhr, s, e] );
         
     | 
| 
      
 3677 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3678 
     | 
    
         
            +
             
     | 
| 
      
 3679 
     | 
    
         
            +
            	// Counter for holding the number of active queries
         
     | 
| 
      
 3680 
     | 
    
         
            +
            	active: 0,
         
     | 
| 
      
 3681 
     | 
    
         
            +
             
     | 
| 
      
 3682 
     | 
    
         
            +
            	// Determines if an XMLHttpRequest was successful or not
         
     | 
| 
      
 3683 
     | 
    
         
            +
            	httpSuccess: function( xhr ) {
         
     | 
| 
      
 3684 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 3685 
     | 
    
         
            +
            			// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
         
     | 
| 
      
 3686 
     | 
    
         
            +
            			return !xhr.status && location.protocol == "file:" ||
         
     | 
| 
      
 3687 
     | 
    
         
            +
            				( xhr.status >= 200 && xhr.status < 300 ) || xhr.status == 304 || xhr.status == 1223;
         
     | 
| 
      
 3688 
     | 
    
         
            +
            		} catch(e){}
         
     | 
| 
      
 3689 
     | 
    
         
            +
            		return false;
         
     | 
| 
      
 3690 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3691 
     | 
    
         
            +
             
     | 
| 
      
 3692 
     | 
    
         
            +
            	// Determines if an XMLHttpRequest returns NotModified
         
     | 
| 
      
 3693 
     | 
    
         
            +
            	httpNotModified: function( xhr, url ) {
         
     | 
| 
      
 3694 
     | 
    
         
            +
            		try {
         
     | 
| 
      
 3695 
     | 
    
         
            +
            			var xhrRes = xhr.getResponseHeader("Last-Modified");
         
     | 
| 
      
 3696 
     | 
    
         
            +
             
     | 
| 
      
 3697 
     | 
    
         
            +
            			// Firefox always returns 200. check Last-Modified date
         
     | 
| 
      
 3698 
     | 
    
         
            +
            			return xhr.status == 304 || xhrRes == jQuery.lastModified[url];
         
     | 
| 
      
 3699 
     | 
    
         
            +
            		} catch(e){}
         
     | 
| 
      
 3700 
     | 
    
         
            +
            		return false;
         
     | 
| 
      
 3701 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3702 
     | 
    
         
            +
             
     | 
| 
      
 3703 
     | 
    
         
            +
            	httpData: function( xhr, type, s ) {
         
     | 
| 
      
 3704 
     | 
    
         
            +
            		var ct = xhr.getResponseHeader("content-type"),
         
     | 
| 
      
 3705 
     | 
    
         
            +
            			xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0,
         
     | 
| 
      
 3706 
     | 
    
         
            +
            			data = xml ? xhr.responseXML : xhr.responseText;
         
     | 
| 
      
 3707 
     | 
    
         
            +
             
     | 
| 
      
 3708 
     | 
    
         
            +
            		if ( xml && data.documentElement.tagName == "parsererror" )
         
     | 
| 
      
 3709 
     | 
    
         
            +
            			throw "parsererror";
         
     | 
| 
      
 3710 
     | 
    
         
            +
            			
         
     | 
| 
      
 3711 
     | 
    
         
            +
            		// Allow a pre-filtering function to sanitize the response
         
     | 
| 
      
 3712 
     | 
    
         
            +
            		// s != null is checked to keep backwards compatibility
         
     | 
| 
      
 3713 
     | 
    
         
            +
            		if( s && s.dataFilter )
         
     | 
| 
      
 3714 
     | 
    
         
            +
            			data = s.dataFilter( data, type );
         
     | 
| 
      
 3715 
     | 
    
         
            +
             
     | 
| 
      
 3716 
     | 
    
         
            +
            		// The filter can actually parse the response
         
     | 
| 
      
 3717 
     | 
    
         
            +
            		if( typeof data === "string" ){
         
     | 
| 
      
 3718 
     | 
    
         
            +
             
     | 
| 
      
 3719 
     | 
    
         
            +
            			// If the type is "script", eval it in global context
         
     | 
| 
      
 3720 
     | 
    
         
            +
            			if ( type == "script" )
         
     | 
| 
      
 3721 
     | 
    
         
            +
            				jQuery.globalEval( data );
         
     | 
| 
      
 3722 
     | 
    
         
            +
             
     | 
| 
      
 3723 
     | 
    
         
            +
            			// Get the JavaScript object, if JSON is used.
         
     | 
| 
      
 3724 
     | 
    
         
            +
            			if ( type == "json" )
         
     | 
| 
      
 3725 
     | 
    
         
            +
            				data = window["eval"]("(" + data + ")");
         
     | 
| 
      
 3726 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3727 
     | 
    
         
            +
            		
         
     | 
| 
      
 3728 
     | 
    
         
            +
            		return data;
         
     | 
| 
      
 3729 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3730 
     | 
    
         
            +
             
     | 
| 
      
 3731 
     | 
    
         
            +
            	// Serialize an array of form elements or a set of
         
     | 
| 
      
 3732 
     | 
    
         
            +
            	// key/values into a query string
         
     | 
| 
      
 3733 
     | 
    
         
            +
            	param: function( a ) {
         
     | 
| 
      
 3734 
     | 
    
         
            +
            		var s = [ ];
         
     | 
| 
      
 3735 
     | 
    
         
            +
             
     | 
| 
      
 3736 
     | 
    
         
            +
            		function add( key, value ){
         
     | 
| 
      
 3737 
     | 
    
         
            +
            			s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(value);
         
     | 
| 
      
 3738 
     | 
    
         
            +
            		};
         
     | 
| 
      
 3739 
     | 
    
         
            +
             
     | 
| 
      
 3740 
     | 
    
         
            +
            		// If an array was passed in, assume that it is an array
         
     | 
| 
      
 3741 
     | 
    
         
            +
            		// of form elements
         
     | 
| 
      
 3742 
     | 
    
         
            +
            		if ( jQuery.isArray(a) || a.jquery )
         
     | 
| 
      
 3743 
     | 
    
         
            +
            			// Serialize the form elements
         
     | 
| 
      
 3744 
     | 
    
         
            +
            			jQuery.each( a, function(){
         
     | 
| 
      
 3745 
     | 
    
         
            +
            				add( this.name, this.value );
         
     | 
| 
      
 3746 
     | 
    
         
            +
            			});
         
     | 
| 
      
 3747 
     | 
    
         
            +
             
     | 
| 
      
 3748 
     | 
    
         
            +
            		// Otherwise, assume that it's an object of key/value pairs
         
     | 
| 
      
 3749 
     | 
    
         
            +
            		else
         
     | 
| 
      
 3750 
     | 
    
         
            +
            			// Serialize the key/values
         
     | 
| 
      
 3751 
     | 
    
         
            +
            			for ( var j in a )
         
     | 
| 
      
 3752 
     | 
    
         
            +
            				// If the value is an array then the key names need to be repeated
         
     | 
| 
      
 3753 
     | 
    
         
            +
            				if ( jQuery.isArray(a[j]) )
         
     | 
| 
      
 3754 
     | 
    
         
            +
            					jQuery.each( a[j], function(){
         
     | 
| 
      
 3755 
     | 
    
         
            +
            						add( j, this );
         
     | 
| 
      
 3756 
     | 
    
         
            +
            					});
         
     | 
| 
      
 3757 
     | 
    
         
            +
            				else
         
     | 
| 
      
 3758 
     | 
    
         
            +
            					add( j, jQuery.isFunction(a[j]) ? a[j]() : a[j] );
         
     | 
| 
      
 3759 
     | 
    
         
            +
             
     | 
| 
      
 3760 
     | 
    
         
            +
            		// Return the resulting serialization
         
     | 
| 
      
 3761 
     | 
    
         
            +
            		return s.join("&").replace(/%20/g, "+");
         
     | 
| 
      
 3762 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3763 
     | 
    
         
            +
             
     | 
| 
      
 3764 
     | 
    
         
            +
            });
         
     | 
| 
      
 3765 
     | 
    
         
            +
            var elemdisplay = {},
         
     | 
| 
      
 3766 
     | 
    
         
            +
            	timerId,
         
     | 
| 
      
 3767 
     | 
    
         
            +
            	fxAttrs = [
         
     | 
| 
      
 3768 
     | 
    
         
            +
            		// height animations
         
     | 
| 
      
 3769 
     | 
    
         
            +
            		[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
         
     | 
| 
      
 3770 
     | 
    
         
            +
            		// width animations
         
     | 
| 
      
 3771 
     | 
    
         
            +
            		[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
         
     | 
| 
      
 3772 
     | 
    
         
            +
            		// opacity animations
         
     | 
| 
      
 3773 
     | 
    
         
            +
            		[ "opacity" ]
         
     | 
| 
      
 3774 
     | 
    
         
            +
            	];
         
     | 
| 
      
 3775 
     | 
    
         
            +
             
     | 
| 
      
 3776 
     | 
    
         
            +
            function genFx( type, num ){
         
     | 
| 
      
 3777 
     | 
    
         
            +
            	var obj = {};
         
     | 
| 
      
 3778 
     | 
    
         
            +
            	jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function(){
         
     | 
| 
      
 3779 
     | 
    
         
            +
            		obj[ this ] = type;
         
     | 
| 
      
 3780 
     | 
    
         
            +
            	});
         
     | 
| 
      
 3781 
     | 
    
         
            +
            	return obj;
         
     | 
| 
      
 3782 
     | 
    
         
            +
            }
         
     | 
| 
      
 3783 
     | 
    
         
            +
             
     | 
| 
      
 3784 
     | 
    
         
            +
            jQuery.fn.extend({
         
     | 
| 
      
 3785 
     | 
    
         
            +
            	show: function(speed,callback){
         
     | 
| 
      
 3786 
     | 
    
         
            +
            		if ( speed ) {
         
     | 
| 
      
 3787 
     | 
    
         
            +
            			return this.animate( genFx("show", 3), speed, callback);
         
     | 
| 
      
 3788 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 3789 
     | 
    
         
            +
            			for ( var i = 0, l = this.length; i < l; i++ ){
         
     | 
| 
      
 3790 
     | 
    
         
            +
            				var old = jQuery.data(this[i], "olddisplay");
         
     | 
| 
      
 3791 
     | 
    
         
            +
            				
         
     | 
| 
      
 3792 
     | 
    
         
            +
            				this[i].style.display = old || "";
         
     | 
| 
      
 3793 
     | 
    
         
            +
            				
         
     | 
| 
      
 3794 
     | 
    
         
            +
            				if ( jQuery.css(this[i], "display") === "none" ) {
         
     | 
| 
      
 3795 
     | 
    
         
            +
            					var tagName = this[i].tagName, display;
         
     | 
| 
      
 3796 
     | 
    
         
            +
            					
         
     | 
| 
      
 3797 
     | 
    
         
            +
            					if ( elemdisplay[ tagName ] ) {
         
     | 
| 
      
 3798 
     | 
    
         
            +
            						display = elemdisplay[ tagName ];
         
     | 
| 
      
 3799 
     | 
    
         
            +
            					} else {
         
     | 
| 
      
 3800 
     | 
    
         
            +
            						var elem = jQuery("<" + tagName + " />").appendTo("body");
         
     | 
| 
      
 3801 
     | 
    
         
            +
            						
         
     | 
| 
      
 3802 
     | 
    
         
            +
            						display = elem.css("display");
         
     | 
| 
      
 3803 
     | 
    
         
            +
            						if ( display === "none" )
         
     | 
| 
      
 3804 
     | 
    
         
            +
            							display = "block";
         
     | 
| 
      
 3805 
     | 
    
         
            +
            						
         
     | 
| 
      
 3806 
     | 
    
         
            +
            						elem.remove();
         
     | 
| 
      
 3807 
     | 
    
         
            +
            						
         
     | 
| 
      
 3808 
     | 
    
         
            +
            						elemdisplay[ tagName ] = display;
         
     | 
| 
      
 3809 
     | 
    
         
            +
            					}
         
     | 
| 
      
 3810 
     | 
    
         
            +
            					
         
     | 
| 
      
 3811 
     | 
    
         
            +
            					jQuery.data(this[i], "olddisplay", display);
         
     | 
| 
      
 3812 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3813 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3814 
     | 
    
         
            +
             
     | 
| 
      
 3815 
     | 
    
         
            +
            			// Set the display of the elements in a second loop
         
     | 
| 
      
 3816 
     | 
    
         
            +
            			// to avoid the constant reflow
         
     | 
| 
      
 3817 
     | 
    
         
            +
            			for ( var i = 0, l = this.length; i < l; i++ ){
         
     | 
| 
      
 3818 
     | 
    
         
            +
            				this[i].style.display = jQuery.data(this[i], "olddisplay") || "";
         
     | 
| 
      
 3819 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3820 
     | 
    
         
            +
            			
         
     | 
| 
      
 3821 
     | 
    
         
            +
            			return this;
         
     | 
| 
      
 3822 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3823 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3824 
     | 
    
         
            +
             
     | 
| 
      
 3825 
     | 
    
         
            +
            	hide: function(speed,callback){
         
     | 
| 
      
 3826 
     | 
    
         
            +
            		if ( speed ) {
         
     | 
| 
      
 3827 
     | 
    
         
            +
            			return this.animate( genFx("hide", 3), speed, callback);
         
     | 
| 
      
 3828 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 3829 
     | 
    
         
            +
            			for ( var i = 0, l = this.length; i < l; i++ ){
         
     | 
| 
      
 3830 
     | 
    
         
            +
            				var old = jQuery.data(this[i], "olddisplay");
         
     | 
| 
      
 3831 
     | 
    
         
            +
            				if ( !old && old !== "none" )
         
     | 
| 
      
 3832 
     | 
    
         
            +
            					jQuery.data(this[i], "olddisplay", jQuery.css(this[i], "display"));
         
     | 
| 
      
 3833 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3834 
     | 
    
         
            +
             
     | 
| 
      
 3835 
     | 
    
         
            +
            			// Set the display of the elements in a second loop
         
     | 
| 
      
 3836 
     | 
    
         
            +
            			// to avoid the constant reflow
         
     | 
| 
      
 3837 
     | 
    
         
            +
            			for ( var i = 0, l = this.length; i < l; i++ ){
         
     | 
| 
      
 3838 
     | 
    
         
            +
            				this[i].style.display = "none";
         
     | 
| 
      
 3839 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3840 
     | 
    
         
            +
             
     | 
| 
      
 3841 
     | 
    
         
            +
            			return this;
         
     | 
| 
      
 3842 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3843 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3844 
     | 
    
         
            +
             
     | 
| 
      
 3845 
     | 
    
         
            +
            	// Save the old toggle function
         
     | 
| 
      
 3846 
     | 
    
         
            +
            	_toggle: jQuery.fn.toggle,
         
     | 
| 
      
 3847 
     | 
    
         
            +
             
     | 
| 
      
 3848 
     | 
    
         
            +
            	toggle: function( fn, fn2 ){
         
     | 
| 
      
 3849 
     | 
    
         
            +
            		var bool = typeof fn === "boolean";
         
     | 
| 
      
 3850 
     | 
    
         
            +
             
     | 
| 
      
 3851 
     | 
    
         
            +
            		return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ?
         
     | 
| 
      
 3852 
     | 
    
         
            +
            			this._toggle.apply( this, arguments ) :
         
     | 
| 
      
 3853 
     | 
    
         
            +
            			fn == null || bool ?
         
     | 
| 
      
 3854 
     | 
    
         
            +
            				this.each(function(){
         
     | 
| 
      
 3855 
     | 
    
         
            +
            					var state = bool ? fn : jQuery(this).is(":hidden");
         
     | 
| 
      
 3856 
     | 
    
         
            +
            					jQuery(this)[ state ? "show" : "hide" ]();
         
     | 
| 
      
 3857 
     | 
    
         
            +
            				}) :
         
     | 
| 
      
 3858 
     | 
    
         
            +
            				this.animate(genFx("toggle", 3), fn, fn2);
         
     | 
| 
      
 3859 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3860 
     | 
    
         
            +
             
     | 
| 
      
 3861 
     | 
    
         
            +
            	fadeTo: function(speed,to,callback){
         
     | 
| 
      
 3862 
     | 
    
         
            +
            		return this.animate({opacity: to}, speed, callback);
         
     | 
| 
      
 3863 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3864 
     | 
    
         
            +
             
     | 
| 
      
 3865 
     | 
    
         
            +
            	animate: function( prop, speed, easing, callback ) {
         
     | 
| 
      
 3866 
     | 
    
         
            +
            		var optall = jQuery.speed(speed, easing, callback);
         
     | 
| 
      
 3867 
     | 
    
         
            +
             
     | 
| 
      
 3868 
     | 
    
         
            +
            		return this[ optall.queue === false ? "each" : "queue" ](function(){
         
     | 
| 
      
 3869 
     | 
    
         
            +
            		
         
     | 
| 
      
 3870 
     | 
    
         
            +
            			var opt = jQuery.extend({}, optall), p,
         
     | 
| 
      
 3871 
     | 
    
         
            +
            				hidden = this.nodeType == 1 && jQuery(this).is(":hidden"),
         
     | 
| 
      
 3872 
     | 
    
         
            +
            				self = this;
         
     | 
| 
      
 3873 
     | 
    
         
            +
            	
         
     | 
| 
      
 3874 
     | 
    
         
            +
            			for ( p in prop ) {
         
     | 
| 
      
 3875 
     | 
    
         
            +
            				if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden )
         
     | 
| 
      
 3876 
     | 
    
         
            +
            					return opt.complete.call(this);
         
     | 
| 
      
 3877 
     | 
    
         
            +
             
     | 
| 
      
 3878 
     | 
    
         
            +
            				if ( ( p == "height" || p == "width" ) && this.style ) {
         
     | 
| 
      
 3879 
     | 
    
         
            +
            					// Store display property
         
     | 
| 
      
 3880 
     | 
    
         
            +
            					opt.display = jQuery.css(this, "display");
         
     | 
| 
      
 3881 
     | 
    
         
            +
             
     | 
| 
      
 3882 
     | 
    
         
            +
            					// Make sure that nothing sneaks out
         
     | 
| 
      
 3883 
     | 
    
         
            +
            					opt.overflow = this.style.overflow;
         
     | 
| 
      
 3884 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3885 
     | 
    
         
            +
            			}
         
     | 
| 
      
 3886 
     | 
    
         
            +
             
     | 
| 
      
 3887 
     | 
    
         
            +
            			if ( opt.overflow != null )
         
     | 
| 
      
 3888 
     | 
    
         
            +
            				this.style.overflow = "hidden";
         
     | 
| 
      
 3889 
     | 
    
         
            +
             
     | 
| 
      
 3890 
     | 
    
         
            +
            			opt.curAnim = jQuery.extend({}, prop);
         
     | 
| 
      
 3891 
     | 
    
         
            +
             
     | 
| 
      
 3892 
     | 
    
         
            +
            			jQuery.each( prop, function(name, val){
         
     | 
| 
      
 3893 
     | 
    
         
            +
            				var e = new jQuery.fx( self, opt, name );
         
     | 
| 
      
 3894 
     | 
    
         
            +
             
     | 
| 
      
 3895 
     | 
    
         
            +
            				if ( /toggle|show|hide/.test(val) )
         
     | 
| 
      
 3896 
     | 
    
         
            +
            					e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop );
         
     | 
| 
      
 3897 
     | 
    
         
            +
            				else {
         
     | 
| 
      
 3898 
     | 
    
         
            +
            					var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),
         
     | 
| 
      
 3899 
     | 
    
         
            +
            						start = e.cur(true) || 0;
         
     | 
| 
      
 3900 
     | 
    
         
            +
             
     | 
| 
      
 3901 
     | 
    
         
            +
            					if ( parts ) {
         
     | 
| 
      
 3902 
     | 
    
         
            +
            						var end = parseFloat(parts[2]),
         
     | 
| 
      
 3903 
     | 
    
         
            +
            							unit = parts[3] || "px";
         
     | 
| 
      
 3904 
     | 
    
         
            +
             
     | 
| 
      
 3905 
     | 
    
         
            +
            						// We need to compute starting value
         
     | 
| 
      
 3906 
     | 
    
         
            +
            						if ( unit != "px" ) {
         
     | 
| 
      
 3907 
     | 
    
         
            +
            							self.style[ name ] = (end || 1) + unit;
         
     | 
| 
      
 3908 
     | 
    
         
            +
            							start = ((end || 1) / e.cur(true)) * start;
         
     | 
| 
      
 3909 
     | 
    
         
            +
            							self.style[ name ] = start + unit;
         
     | 
| 
      
 3910 
     | 
    
         
            +
            						}
         
     | 
| 
      
 3911 
     | 
    
         
            +
             
     | 
| 
      
 3912 
     | 
    
         
            +
            						// If a +=/-= token was provided, we're doing a relative animation
         
     | 
| 
      
 3913 
     | 
    
         
            +
            						if ( parts[1] )
         
     | 
| 
      
 3914 
     | 
    
         
            +
            							end = ((parts[1] == "-=" ? -1 : 1) * end) + start;
         
     | 
| 
      
 3915 
     | 
    
         
            +
             
     | 
| 
      
 3916 
     | 
    
         
            +
            						e.custom( start, end, unit );
         
     | 
| 
      
 3917 
     | 
    
         
            +
            					} else
         
     | 
| 
      
 3918 
     | 
    
         
            +
            						e.custom( start, val, "" );
         
     | 
| 
      
 3919 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3920 
     | 
    
         
            +
            			});
         
     | 
| 
      
 3921 
     | 
    
         
            +
             
     | 
| 
      
 3922 
     | 
    
         
            +
            			// For JS strict compliance
         
     | 
| 
      
 3923 
     | 
    
         
            +
            			return true;
         
     | 
| 
      
 3924 
     | 
    
         
            +
            		});
         
     | 
| 
      
 3925 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3926 
     | 
    
         
            +
             
     | 
| 
      
 3927 
     | 
    
         
            +
            	stop: function(clearQueue, gotoEnd){
         
     | 
| 
      
 3928 
     | 
    
         
            +
            		var timers = jQuery.timers;
         
     | 
| 
      
 3929 
     | 
    
         
            +
             
     | 
| 
      
 3930 
     | 
    
         
            +
            		if (clearQueue)
         
     | 
| 
      
 3931 
     | 
    
         
            +
            			this.queue([]);
         
     | 
| 
      
 3932 
     | 
    
         
            +
             
     | 
| 
      
 3933 
     | 
    
         
            +
            		this.each(function(){
         
     | 
| 
      
 3934 
     | 
    
         
            +
            			// go in reverse order so anything added to the queue during the loop is ignored
         
     | 
| 
      
 3935 
     | 
    
         
            +
            			for ( var i = timers.length - 1; i >= 0; i-- )
         
     | 
| 
      
 3936 
     | 
    
         
            +
            				if ( timers[i].elem == this ) {
         
     | 
| 
      
 3937 
     | 
    
         
            +
            					if (gotoEnd)
         
     | 
| 
      
 3938 
     | 
    
         
            +
            						// force the next step to be the last
         
     | 
| 
      
 3939 
     | 
    
         
            +
            						timers[i](true);
         
     | 
| 
      
 3940 
     | 
    
         
            +
            					timers.splice(i, 1);
         
     | 
| 
      
 3941 
     | 
    
         
            +
            				}
         
     | 
| 
      
 3942 
     | 
    
         
            +
            		});
         
     | 
| 
      
 3943 
     | 
    
         
            +
             
     | 
| 
      
 3944 
     | 
    
         
            +
            		// start the next in the queue if the last step wasn't forced
         
     | 
| 
      
 3945 
     | 
    
         
            +
            		if (!gotoEnd)
         
     | 
| 
      
 3946 
     | 
    
         
            +
            			this.dequeue();
         
     | 
| 
      
 3947 
     | 
    
         
            +
             
     | 
| 
      
 3948 
     | 
    
         
            +
            		return this;
         
     | 
| 
      
 3949 
     | 
    
         
            +
            	}
         
     | 
| 
      
 3950 
     | 
    
         
            +
             
     | 
| 
      
 3951 
     | 
    
         
            +
            });
         
     | 
| 
      
 3952 
     | 
    
         
            +
             
     | 
| 
      
 3953 
     | 
    
         
            +
            // Generate shortcuts for custom animations
         
     | 
| 
      
 3954 
     | 
    
         
            +
            jQuery.each({
         
     | 
| 
      
 3955 
     | 
    
         
            +
            	slideDown: genFx("show", 1),
         
     | 
| 
      
 3956 
     | 
    
         
            +
            	slideUp: genFx("hide", 1),
         
     | 
| 
      
 3957 
     | 
    
         
            +
            	slideToggle: genFx("toggle", 1),
         
     | 
| 
      
 3958 
     | 
    
         
            +
            	fadeIn: { opacity: "show" },
         
     | 
| 
      
 3959 
     | 
    
         
            +
            	fadeOut: { opacity: "hide" }
         
     | 
| 
      
 3960 
     | 
    
         
            +
            }, function( name, props ){
         
     | 
| 
      
 3961 
     | 
    
         
            +
            	jQuery.fn[ name ] = function( speed, callback ){
         
     | 
| 
      
 3962 
     | 
    
         
            +
            		return this.animate( props, speed, callback );
         
     | 
| 
      
 3963 
     | 
    
         
            +
            	};
         
     | 
| 
      
 3964 
     | 
    
         
            +
            });
         
     | 
| 
      
 3965 
     | 
    
         
            +
             
     | 
| 
      
 3966 
     | 
    
         
            +
            jQuery.extend({
         
     | 
| 
      
 3967 
     | 
    
         
            +
             
     | 
| 
      
 3968 
     | 
    
         
            +
            	speed: function(speed, easing, fn) {
         
     | 
| 
      
 3969 
     | 
    
         
            +
            		var opt = typeof speed === "object" ? speed : {
         
     | 
| 
      
 3970 
     | 
    
         
            +
            			complete: fn || !fn && easing ||
         
     | 
| 
      
 3971 
     | 
    
         
            +
            				jQuery.isFunction( speed ) && speed,
         
     | 
| 
      
 3972 
     | 
    
         
            +
            			duration: speed,
         
     | 
| 
      
 3973 
     | 
    
         
            +
            			easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
         
     | 
| 
      
 3974 
     | 
    
         
            +
            		};
         
     | 
| 
      
 3975 
     | 
    
         
            +
             
     | 
| 
      
 3976 
     | 
    
         
            +
            		opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
         
     | 
| 
      
 3977 
     | 
    
         
            +
            			jQuery.fx.speeds[opt.duration] || jQuery.fx.speeds._default;
         
     | 
| 
      
 3978 
     | 
    
         
            +
             
     | 
| 
      
 3979 
     | 
    
         
            +
            		// Queueing
         
     | 
| 
      
 3980 
     | 
    
         
            +
            		opt.old = opt.complete;
         
     | 
| 
      
 3981 
     | 
    
         
            +
            		opt.complete = function(){
         
     | 
| 
      
 3982 
     | 
    
         
            +
            			if ( opt.queue !== false )
         
     | 
| 
      
 3983 
     | 
    
         
            +
            				jQuery(this).dequeue();
         
     | 
| 
      
 3984 
     | 
    
         
            +
            			if ( jQuery.isFunction( opt.old ) )
         
     | 
| 
      
 3985 
     | 
    
         
            +
            				opt.old.call( this );
         
     | 
| 
      
 3986 
     | 
    
         
            +
            		};
         
     | 
| 
      
 3987 
     | 
    
         
            +
             
     | 
| 
      
 3988 
     | 
    
         
            +
            		return opt;
         
     | 
| 
      
 3989 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3990 
     | 
    
         
            +
             
     | 
| 
      
 3991 
     | 
    
         
            +
            	easing: {
         
     | 
| 
      
 3992 
     | 
    
         
            +
            		linear: function( p, n, firstNum, diff ) {
         
     | 
| 
      
 3993 
     | 
    
         
            +
            			return firstNum + diff * p;
         
     | 
| 
      
 3994 
     | 
    
         
            +
            		},
         
     | 
| 
      
 3995 
     | 
    
         
            +
            		swing: function( p, n, firstNum, diff ) {
         
     | 
| 
      
 3996 
     | 
    
         
            +
            			return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
         
     | 
| 
      
 3997 
     | 
    
         
            +
            		}
         
     | 
| 
      
 3998 
     | 
    
         
            +
            	},
         
     | 
| 
      
 3999 
     | 
    
         
            +
             
     | 
| 
      
 4000 
     | 
    
         
            +
            	timers: [],
         
     | 
| 
      
 4001 
     | 
    
         
            +
             
     | 
| 
      
 4002 
     | 
    
         
            +
            	fx: function( elem, options, prop ){
         
     | 
| 
      
 4003 
     | 
    
         
            +
            		this.options = options;
         
     | 
| 
      
 4004 
     | 
    
         
            +
            		this.elem = elem;
         
     | 
| 
      
 4005 
     | 
    
         
            +
            		this.prop = prop;
         
     | 
| 
      
 4006 
     | 
    
         
            +
             
     | 
| 
      
 4007 
     | 
    
         
            +
            		if ( !options.orig )
         
     | 
| 
      
 4008 
     | 
    
         
            +
            			options.orig = {};
         
     | 
| 
      
 4009 
     | 
    
         
            +
            	}
         
     | 
| 
      
 4010 
     | 
    
         
            +
             
     | 
| 
      
 4011 
     | 
    
         
            +
            });
         
     | 
| 
      
 4012 
     | 
    
         
            +
             
     | 
| 
      
 4013 
     | 
    
         
            +
            jQuery.fx.prototype = {
         
     | 
| 
      
 4014 
     | 
    
         
            +
             
     | 
| 
      
 4015 
     | 
    
         
            +
            	// Simple function for setting a style value
         
     | 
| 
      
 4016 
     | 
    
         
            +
            	update: function(){
         
     | 
| 
      
 4017 
     | 
    
         
            +
            		if ( this.options.step )
         
     | 
| 
      
 4018 
     | 
    
         
            +
            			this.options.step.call( this.elem, this.now, this );
         
     | 
| 
      
 4019 
     | 
    
         
            +
             
     | 
| 
      
 4020 
     | 
    
         
            +
            		(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
         
     | 
| 
      
 4021 
     | 
    
         
            +
             
     | 
| 
      
 4022 
     | 
    
         
            +
            		// Set display property to block for height/width animations
         
     | 
| 
      
 4023 
     | 
    
         
            +
            		if ( ( this.prop == "height" || this.prop == "width" ) && this.elem.style )
         
     | 
| 
      
 4024 
     | 
    
         
            +
            			this.elem.style.display = "block";
         
     | 
| 
      
 4025 
     | 
    
         
            +
            	},
         
     | 
| 
      
 4026 
     | 
    
         
            +
             
     | 
| 
      
 4027 
     | 
    
         
            +
            	// Get the current size
         
     | 
| 
      
 4028 
     | 
    
         
            +
            	cur: function(force){
         
     | 
| 
      
 4029 
     | 
    
         
            +
            		if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) )
         
     | 
| 
      
 4030 
     | 
    
         
            +
            			return this.elem[ this.prop ];
         
     | 
| 
      
 4031 
     | 
    
         
            +
             
     | 
| 
      
 4032 
     | 
    
         
            +
            		var r = parseFloat(jQuery.css(this.elem, this.prop, force));
         
     | 
| 
      
 4033 
     | 
    
         
            +
            		return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
         
     | 
| 
      
 4034 
     | 
    
         
            +
            	},
         
     | 
| 
      
 4035 
     | 
    
         
            +
             
     | 
| 
      
 4036 
     | 
    
         
            +
            	// Start an animation from one number to another
         
     | 
| 
      
 4037 
     | 
    
         
            +
            	custom: function(from, to, unit){
         
     | 
| 
      
 4038 
     | 
    
         
            +
            		this.startTime = now();
         
     | 
| 
      
 4039 
     | 
    
         
            +
            		this.start = from;
         
     | 
| 
      
 4040 
     | 
    
         
            +
            		this.end = to;
         
     | 
| 
      
 4041 
     | 
    
         
            +
            		this.unit = unit || this.unit || "px";
         
     | 
| 
      
 4042 
     | 
    
         
            +
            		this.now = this.start;
         
     | 
| 
      
 4043 
     | 
    
         
            +
            		this.pos = this.state = 0;
         
     | 
| 
      
 4044 
     | 
    
         
            +
             
     | 
| 
      
 4045 
     | 
    
         
            +
            		var self = this;
         
     | 
| 
      
 4046 
     | 
    
         
            +
            		function t(gotoEnd){
         
     | 
| 
      
 4047 
     | 
    
         
            +
            			return self.step(gotoEnd);
         
     | 
| 
      
 4048 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4049 
     | 
    
         
            +
             
     | 
| 
      
 4050 
     | 
    
         
            +
            		t.elem = this.elem;
         
     | 
| 
      
 4051 
     | 
    
         
            +
             
     | 
| 
      
 4052 
     | 
    
         
            +
            		if ( t() && jQuery.timers.push(t) && !timerId ) {
         
     | 
| 
      
 4053 
     | 
    
         
            +
            			timerId = setInterval(function(){
         
     | 
| 
      
 4054 
     | 
    
         
            +
            				var timers = jQuery.timers;
         
     | 
| 
      
 4055 
     | 
    
         
            +
             
     | 
| 
      
 4056 
     | 
    
         
            +
            				for ( var i = 0; i < timers.length; i++ )
         
     | 
| 
      
 4057 
     | 
    
         
            +
            					if ( !timers[i]() )
         
     | 
| 
      
 4058 
     | 
    
         
            +
            						timers.splice(i--, 1);
         
     | 
| 
      
 4059 
     | 
    
         
            +
             
     | 
| 
      
 4060 
     | 
    
         
            +
            				if ( !timers.length ) {
         
     | 
| 
      
 4061 
     | 
    
         
            +
            					clearInterval( timerId );
         
     | 
| 
      
 4062 
     | 
    
         
            +
            					timerId = undefined;
         
     | 
| 
      
 4063 
     | 
    
         
            +
            				}
         
     | 
| 
      
 4064 
     | 
    
         
            +
            			}, 13);
         
     | 
| 
      
 4065 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4066 
     | 
    
         
            +
            	},
         
     | 
| 
      
 4067 
     | 
    
         
            +
             
     | 
| 
      
 4068 
     | 
    
         
            +
            	// Simple 'show' function
         
     | 
| 
      
 4069 
     | 
    
         
            +
            	show: function(){
         
     | 
| 
      
 4070 
     | 
    
         
            +
            		// Remember where we started, so that we can go back to it later
         
     | 
| 
      
 4071 
     | 
    
         
            +
            		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
         
     | 
| 
      
 4072 
     | 
    
         
            +
            		this.options.show = true;
         
     | 
| 
      
 4073 
     | 
    
         
            +
             
     | 
| 
      
 4074 
     | 
    
         
            +
            		// Begin the animation
         
     | 
| 
      
 4075 
     | 
    
         
            +
            		// Make sure that we start at a small width/height to avoid any
         
     | 
| 
      
 4076 
     | 
    
         
            +
            		// flash of content
         
     | 
| 
      
 4077 
     | 
    
         
            +
            		this.custom(this.prop == "width" || this.prop == "height" ? 1 : 0, this.cur());
         
     | 
| 
      
 4078 
     | 
    
         
            +
             
     | 
| 
      
 4079 
     | 
    
         
            +
            		// Start by showing the element
         
     | 
| 
      
 4080 
     | 
    
         
            +
            		jQuery(this.elem).show();
         
     | 
| 
      
 4081 
     | 
    
         
            +
            	},
         
     | 
| 
      
 4082 
     | 
    
         
            +
             
     | 
| 
      
 4083 
     | 
    
         
            +
            	// Simple 'hide' function
         
     | 
| 
      
 4084 
     | 
    
         
            +
            	hide: function(){
         
     | 
| 
      
 4085 
     | 
    
         
            +
            		// Remember where we started, so that we can go back to it later
         
     | 
| 
      
 4086 
     | 
    
         
            +
            		this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop );
         
     | 
| 
      
 4087 
     | 
    
         
            +
            		this.options.hide = true;
         
     | 
| 
      
 4088 
     | 
    
         
            +
             
     | 
| 
      
 4089 
     | 
    
         
            +
            		// Begin the animation
         
     | 
| 
      
 4090 
     | 
    
         
            +
            		this.custom(this.cur(), 0);
         
     | 
| 
      
 4091 
     | 
    
         
            +
            	},
         
     | 
| 
      
 4092 
     | 
    
         
            +
             
     | 
| 
      
 4093 
     | 
    
         
            +
            	// Each step of an animation
         
     | 
| 
      
 4094 
     | 
    
         
            +
            	step: function(gotoEnd){
         
     | 
| 
      
 4095 
     | 
    
         
            +
            		var t = now();
         
     | 
| 
      
 4096 
     | 
    
         
            +
             
     | 
| 
      
 4097 
     | 
    
         
            +
            		if ( gotoEnd || t >= this.options.duration + this.startTime ) {
         
     | 
| 
      
 4098 
     | 
    
         
            +
            			this.now = this.end;
         
     | 
| 
      
 4099 
     | 
    
         
            +
            			this.pos = this.state = 1;
         
     | 
| 
      
 4100 
     | 
    
         
            +
            			this.update();
         
     | 
| 
      
 4101 
     | 
    
         
            +
             
     | 
| 
      
 4102 
     | 
    
         
            +
            			this.options.curAnim[ this.prop ] = true;
         
     | 
| 
      
 4103 
     | 
    
         
            +
             
     | 
| 
      
 4104 
     | 
    
         
            +
            			var done = true;
         
     | 
| 
      
 4105 
     | 
    
         
            +
            			for ( var i in this.options.curAnim )
         
     | 
| 
      
 4106 
     | 
    
         
            +
            				if ( this.options.curAnim[i] !== true )
         
     | 
| 
      
 4107 
     | 
    
         
            +
            					done = false;
         
     | 
| 
      
 4108 
     | 
    
         
            +
             
     | 
| 
      
 4109 
     | 
    
         
            +
            			if ( done ) {
         
     | 
| 
      
 4110 
     | 
    
         
            +
            				if ( this.options.display != null ) {
         
     | 
| 
      
 4111 
     | 
    
         
            +
            					// Reset the overflow
         
     | 
| 
      
 4112 
     | 
    
         
            +
            					this.elem.style.overflow = this.options.overflow;
         
     | 
| 
      
 4113 
     | 
    
         
            +
             
     | 
| 
      
 4114 
     | 
    
         
            +
            					// Reset the display
         
     | 
| 
      
 4115 
     | 
    
         
            +
            					this.elem.style.display = this.options.display;
         
     | 
| 
      
 4116 
     | 
    
         
            +
            					if ( jQuery.css(this.elem, "display") == "none" )
         
     | 
| 
      
 4117 
     | 
    
         
            +
            						this.elem.style.display = "block";
         
     | 
| 
      
 4118 
     | 
    
         
            +
            				}
         
     | 
| 
      
 4119 
     | 
    
         
            +
             
     | 
| 
      
 4120 
     | 
    
         
            +
            				// Hide the element if the "hide" operation was done
         
     | 
| 
      
 4121 
     | 
    
         
            +
            				if ( this.options.hide )
         
     | 
| 
      
 4122 
     | 
    
         
            +
            					jQuery(this.elem).hide();
         
     | 
| 
      
 4123 
     | 
    
         
            +
             
     | 
| 
      
 4124 
     | 
    
         
            +
            				// Reset the properties, if the item has been hidden or shown
         
     | 
| 
      
 4125 
     | 
    
         
            +
            				if ( this.options.hide || this.options.show )
         
     | 
| 
      
 4126 
     | 
    
         
            +
            					for ( var p in this.options.curAnim )
         
     | 
| 
      
 4127 
     | 
    
         
            +
            						jQuery.attr(this.elem.style, p, this.options.orig[p]);
         
     | 
| 
      
 4128 
     | 
    
         
            +
            					
         
     | 
| 
      
 4129 
     | 
    
         
            +
            				// Execute the complete function
         
     | 
| 
      
 4130 
     | 
    
         
            +
            				this.options.complete.call( this.elem );
         
     | 
| 
      
 4131 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4132 
     | 
    
         
            +
             
     | 
| 
      
 4133 
     | 
    
         
            +
            			return false;
         
     | 
| 
      
 4134 
     | 
    
         
            +
            		} else {
         
     | 
| 
      
 4135 
     | 
    
         
            +
            			var n = t - this.startTime;
         
     | 
| 
      
 4136 
     | 
    
         
            +
            			this.state = n / this.options.duration;
         
     | 
| 
      
 4137 
     | 
    
         
            +
             
     | 
| 
      
 4138 
     | 
    
         
            +
            			// Perform the easing function, defaults to swing
         
     | 
| 
      
 4139 
     | 
    
         
            +
            			this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration);
         
     | 
| 
      
 4140 
     | 
    
         
            +
            			this.now = this.start + ((this.end - this.start) * this.pos);
         
     | 
| 
      
 4141 
     | 
    
         
            +
             
     | 
| 
      
 4142 
     | 
    
         
            +
            			// Perform the next step of the animation
         
     | 
| 
      
 4143 
     | 
    
         
            +
            			this.update();
         
     | 
| 
      
 4144 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4145 
     | 
    
         
            +
             
     | 
| 
      
 4146 
     | 
    
         
            +
            		return true;
         
     | 
| 
      
 4147 
     | 
    
         
            +
            	}
         
     | 
| 
      
 4148 
     | 
    
         
            +
             
     | 
| 
      
 4149 
     | 
    
         
            +
            };
         
     | 
| 
      
 4150 
     | 
    
         
            +
             
     | 
| 
      
 4151 
     | 
    
         
            +
            jQuery.extend( jQuery.fx, {
         
     | 
| 
      
 4152 
     | 
    
         
            +
            	speeds:{
         
     | 
| 
      
 4153 
     | 
    
         
            +
            		slow: 600,
         
     | 
| 
      
 4154 
     | 
    
         
            +
             		fast: 200,
         
     | 
| 
      
 4155 
     | 
    
         
            +
             		// Default speed
         
     | 
| 
      
 4156 
     | 
    
         
            +
             		_default: 400
         
     | 
| 
      
 4157 
     | 
    
         
            +
            	},
         
     | 
| 
      
 4158 
     | 
    
         
            +
            	step: {
         
     | 
| 
      
 4159 
     | 
    
         
            +
             
     | 
| 
      
 4160 
     | 
    
         
            +
            		opacity: function(fx){
         
     | 
| 
      
 4161 
     | 
    
         
            +
            			jQuery.attr(fx.elem.style, "opacity", fx.now);
         
     | 
| 
      
 4162 
     | 
    
         
            +
            		},
         
     | 
| 
      
 4163 
     | 
    
         
            +
             
     | 
| 
      
 4164 
     | 
    
         
            +
            		_default: function(fx){
         
     | 
| 
      
 4165 
     | 
    
         
            +
            			if ( fx.elem.style && fx.elem.style[ fx.prop ] != null )
         
     | 
| 
      
 4166 
     | 
    
         
            +
            				fx.elem.style[ fx.prop ] = fx.now + fx.unit;
         
     | 
| 
      
 4167 
     | 
    
         
            +
            			else
         
     | 
| 
      
 4168 
     | 
    
         
            +
            				fx.elem[ fx.prop ] = fx.now;
         
     | 
| 
      
 4169 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4170 
     | 
    
         
            +
            	}
         
     | 
| 
      
 4171 
     | 
    
         
            +
            });
         
     | 
| 
      
 4172 
     | 
    
         
            +
            if ( document.documentElement["getBoundingClientRect"] )
         
     | 
| 
      
 4173 
     | 
    
         
            +
            	jQuery.fn.offset = function() {
         
     | 
| 
      
 4174 
     | 
    
         
            +
            		if ( !this[0] ) return { top: 0, left: 0 };
         
     | 
| 
      
 4175 
     | 
    
         
            +
            		if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
         
     | 
| 
      
 4176 
     | 
    
         
            +
            		var box  = this[0].getBoundingClientRect(), doc = this[0].ownerDocument, body = doc.body, docElem = doc.documentElement,
         
     | 
| 
      
 4177 
     | 
    
         
            +
            			clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0,
         
     | 
| 
      
 4178 
     | 
    
         
            +
            			top  = box.top  + (self.pageYOffset || jQuery.boxModel && docElem.scrollTop  || body.scrollTop ) - clientTop,
         
     | 
| 
      
 4179 
     | 
    
         
            +
            			left = box.left + (self.pageXOffset || jQuery.boxModel && docElem.scrollLeft || body.scrollLeft) - clientLeft;
         
     | 
| 
      
 4180 
     | 
    
         
            +
            		return { top: top, left: left };
         
     | 
| 
      
 4181 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4182 
     | 
    
         
            +
            else 
         
     | 
| 
      
 4183 
     | 
    
         
            +
            	jQuery.fn.offset = function() {
         
     | 
| 
      
 4184 
     | 
    
         
            +
            		if ( !this[0] ) return { top: 0, left: 0 };
         
     | 
| 
      
 4185 
     | 
    
         
            +
            		if ( this[0] === this[0].ownerDocument.body ) return jQuery.offset.bodyOffset( this[0] );
         
     | 
| 
      
 4186 
     | 
    
         
            +
            		jQuery.offset.initialized || jQuery.offset.initialize();
         
     | 
| 
      
 4187 
     | 
    
         
            +
             
     | 
| 
      
 4188 
     | 
    
         
            +
            		var elem = this[0], offsetParent = elem.offsetParent, prevOffsetParent = elem,
         
     | 
| 
      
 4189 
     | 
    
         
            +
            			doc = elem.ownerDocument, computedStyle, docElem = doc.documentElement,
         
     | 
| 
      
 4190 
     | 
    
         
            +
            			body = doc.body, defaultView = doc.defaultView,
         
     | 
| 
      
 4191 
     | 
    
         
            +
            			prevComputedStyle = defaultView.getComputedStyle(elem, null),
         
     | 
| 
      
 4192 
     | 
    
         
            +
            			top = elem.offsetTop, left = elem.offsetLeft;
         
     | 
| 
      
 4193 
     | 
    
         
            +
             
     | 
| 
      
 4194 
     | 
    
         
            +
            		while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
         
     | 
| 
      
 4195 
     | 
    
         
            +
            			computedStyle = defaultView.getComputedStyle(elem, null);
         
     | 
| 
      
 4196 
     | 
    
         
            +
            			top -= elem.scrollTop, left -= elem.scrollLeft;
         
     | 
| 
      
 4197 
     | 
    
         
            +
            			if ( elem === offsetParent ) {
         
     | 
| 
      
 4198 
     | 
    
         
            +
            				top += elem.offsetTop, left += elem.offsetLeft;
         
     | 
| 
      
 4199 
     | 
    
         
            +
            				if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && /^t(able|d|h)$/i.test(elem.tagName)) )
         
     | 
| 
      
 4200 
     | 
    
         
            +
            					top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
         
     | 
| 
      
 4201 
     | 
    
         
            +
            					left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
         
     | 
| 
      
 4202 
     | 
    
         
            +
            				prevOffsetParent = offsetParent, offsetParent = elem.offsetParent;
         
     | 
| 
      
 4203 
     | 
    
         
            +
            			}
         
     | 
| 
      
 4204 
     | 
    
         
            +
            			if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" )
         
     | 
| 
      
 4205 
     | 
    
         
            +
            				top  += parseInt( computedStyle.borderTopWidth,  10) || 0,
         
     | 
| 
      
 4206 
     | 
    
         
            +
            				left += parseInt( computedStyle.borderLeftWidth, 10) || 0;
         
     | 
| 
      
 4207 
     | 
    
         
            +
            			prevComputedStyle = computedStyle;
         
     | 
| 
      
 4208 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4209 
     | 
    
         
            +
             
     | 
| 
      
 4210 
     | 
    
         
            +
            		if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" )
         
     | 
| 
      
 4211 
     | 
    
         
            +
            			top  += body.offsetTop,
         
     | 
| 
      
 4212 
     | 
    
         
            +
            			left += body.offsetLeft;
         
     | 
| 
      
 4213 
     | 
    
         
            +
             
     | 
| 
      
 4214 
     | 
    
         
            +
            		if ( prevComputedStyle.position === "fixed" )
         
     | 
| 
      
 4215 
     | 
    
         
            +
            			top  += Math.max(docElem.scrollTop, body.scrollTop),
         
     | 
| 
      
 4216 
     | 
    
         
            +
            			left += Math.max(docElem.scrollLeft, body.scrollLeft);
         
     | 
| 
      
 4217 
     | 
    
         
            +
             
     | 
| 
      
 4218 
     | 
    
         
            +
            		return { top: top, left: left };
         
     | 
| 
      
 4219 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4220 
     | 
    
         
            +
             
     | 
| 
      
 4221 
     | 
    
         
            +
            jQuery.offset = {
         
     | 
| 
      
 4222 
     | 
    
         
            +
            	initialize: function() {
         
     | 
| 
      
 4223 
     | 
    
         
            +
            		if ( this.initialized ) return;
         
     | 
| 
      
 4224 
     | 
    
         
            +
            		var body = document.body, container = document.createElement('div'), innerDiv, checkDiv, table, td, rules, prop, bodyMarginTop = body.style.marginTop,
         
     | 
| 
      
 4225 
     | 
    
         
            +
            			html = '<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>';
         
     | 
| 
      
 4226 
     | 
    
         
            +
             
     | 
| 
      
 4227 
     | 
    
         
            +
            		rules = { position: 'absolute', top: 0, left: 0, margin: 0, border: 0, width: '1px', height: '1px', visibility: 'hidden' };
         
     | 
| 
      
 4228 
     | 
    
         
            +
            		for ( prop in rules ) container.style[prop] = rules[prop];
         
     | 
| 
      
 4229 
     | 
    
         
            +
             
     | 
| 
      
 4230 
     | 
    
         
            +
            		container.innerHTML = html;
         
     | 
| 
      
 4231 
     | 
    
         
            +
            		body.insertBefore(container, body.firstChild);
         
     | 
| 
      
 4232 
     | 
    
         
            +
            		innerDiv = container.firstChild, checkDiv = innerDiv.firstChild, td = innerDiv.nextSibling.firstChild.firstChild;
         
     | 
| 
      
 4233 
     | 
    
         
            +
             
     | 
| 
      
 4234 
     | 
    
         
            +
            		this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
         
     | 
| 
      
 4235 
     | 
    
         
            +
            		this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
         
     | 
| 
      
 4236 
     | 
    
         
            +
             
     | 
| 
      
 4237 
     | 
    
         
            +
            		innerDiv.style.overflow = 'hidden', innerDiv.style.position = 'relative';
         
     | 
| 
      
 4238 
     | 
    
         
            +
            		this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
         
     | 
| 
      
 4239 
     | 
    
         
            +
             
     | 
| 
      
 4240 
     | 
    
         
            +
            		body.style.marginTop = '1px';
         
     | 
| 
      
 4241 
     | 
    
         
            +
            		this.doesNotIncludeMarginInBodyOffset = (body.offsetTop === 0);
         
     | 
| 
      
 4242 
     | 
    
         
            +
            		body.style.marginTop = bodyMarginTop;
         
     | 
| 
      
 4243 
     | 
    
         
            +
             
     | 
| 
      
 4244 
     | 
    
         
            +
            		body.removeChild(container);
         
     | 
| 
      
 4245 
     | 
    
         
            +
            		this.initialized = true;
         
     | 
| 
      
 4246 
     | 
    
         
            +
            	},
         
     | 
| 
      
 4247 
     | 
    
         
            +
             
     | 
| 
      
 4248 
     | 
    
         
            +
            	bodyOffset: function(body) {
         
     | 
| 
      
 4249 
     | 
    
         
            +
            		jQuery.offset.initialized || jQuery.offset.initialize();
         
     | 
| 
      
 4250 
     | 
    
         
            +
            		var top = body.offsetTop, left = body.offsetLeft;
         
     | 
| 
      
 4251 
     | 
    
         
            +
            		if ( jQuery.offset.doesNotIncludeMarginInBodyOffset )
         
     | 
| 
      
 4252 
     | 
    
         
            +
            			top  += parseInt( jQuery.curCSS(body, 'marginTop',  true), 10 ) || 0,
         
     | 
| 
      
 4253 
     | 
    
         
            +
            			left += parseInt( jQuery.curCSS(body, 'marginLeft', true), 10 ) || 0;
         
     | 
| 
      
 4254 
     | 
    
         
            +
            		return { top: top, left: left };
         
     | 
| 
      
 4255 
     | 
    
         
            +
            	}
         
     | 
| 
      
 4256 
     | 
    
         
            +
            };
         
     | 
| 
      
 4257 
     | 
    
         
            +
             
     | 
| 
      
 4258 
     | 
    
         
            +
             
     | 
| 
      
 4259 
     | 
    
         
            +
            jQuery.fn.extend({
         
     | 
| 
      
 4260 
     | 
    
         
            +
            	position: function() {
         
     | 
| 
      
 4261 
     | 
    
         
            +
            		var left = 0, top = 0, results;
         
     | 
| 
      
 4262 
     | 
    
         
            +
             
     | 
| 
      
 4263 
     | 
    
         
            +
            		if ( this[0] ) {
         
     | 
| 
      
 4264 
     | 
    
         
            +
            			// Get *real* offsetParent
         
     | 
| 
      
 4265 
     | 
    
         
            +
            			var offsetParent = this.offsetParent(),
         
     | 
| 
      
 4266 
     | 
    
         
            +
             
     | 
| 
      
 4267 
     | 
    
         
            +
            			// Get correct offsets
         
     | 
| 
      
 4268 
     | 
    
         
            +
            			offset       = this.offset(),
         
     | 
| 
      
 4269 
     | 
    
         
            +
            			parentOffset = /^body|html$/i.test(offsetParent[0].tagName) ? { top: 0, left: 0 } : offsetParent.offset();
         
     | 
| 
      
 4270 
     | 
    
         
            +
             
     | 
| 
      
 4271 
     | 
    
         
            +
            			// Subtract element margins
         
     | 
| 
      
 4272 
     | 
    
         
            +
            			// note: when an element has margin: auto the offsetLeft and marginLeft 
         
     | 
| 
      
 4273 
     | 
    
         
            +
            			// are the same in Safari causing offset.left to incorrectly be 0
         
     | 
| 
      
 4274 
     | 
    
         
            +
            			offset.top  -= num( this, 'marginTop'  );
         
     | 
| 
      
 4275 
     | 
    
         
            +
            			offset.left -= num( this, 'marginLeft' );
         
     | 
| 
      
 4276 
     | 
    
         
            +
             
     | 
| 
      
 4277 
     | 
    
         
            +
            			// Add offsetParent borders
         
     | 
| 
      
 4278 
     | 
    
         
            +
            			parentOffset.top  += num( offsetParent, 'borderTopWidth'  );
         
     | 
| 
      
 4279 
     | 
    
         
            +
            			parentOffset.left += num( offsetParent, 'borderLeftWidth' );
         
     | 
| 
      
 4280 
     | 
    
         
            +
             
     | 
| 
      
 4281 
     | 
    
         
            +
            			// Subtract the two offsets
         
     | 
| 
      
 4282 
     | 
    
         
            +
            			results = {
         
     | 
| 
      
 4283 
     | 
    
         
            +
            				top:  offset.top  - parentOffset.top,
         
     | 
| 
      
 4284 
     | 
    
         
            +
            				left: offset.left - parentOffset.left
         
     | 
| 
      
 4285 
     | 
    
         
            +
            			};
         
     | 
| 
      
 4286 
     | 
    
         
            +
            		}
         
     | 
| 
      
 4287 
     | 
    
         
            +
             
     | 
| 
      
 4288 
     | 
    
         
            +
            		return results;
         
     | 
| 
      
 4289 
     | 
    
         
            +
            	},
         
     | 
| 
      
 4290 
     | 
    
         
            +
             
     | 
| 
      
 4291 
     | 
    
         
            +
            	offsetParent: function() {
         
     | 
| 
      
 4292 
     | 
    
         
            +
            		var offsetParent = this[0].offsetParent || document.body;
         
     | 
| 
      
 4293 
     | 
    
         
            +
            		while ( offsetParent && (!/^body|html$/i.test(offsetParent.tagName) && jQuery.css(offsetParent, 'position') == 'static') )
         
     | 
| 
      
 4294 
     | 
    
         
            +
            			offsetParent = offsetParent.offsetParent;
         
     | 
| 
      
 4295 
     | 
    
         
            +
            		return jQuery(offsetParent);
         
     | 
| 
      
 4296 
     | 
    
         
            +
            	}
         
     | 
| 
      
 4297 
     | 
    
         
            +
            });
         
     | 
| 
      
 4298 
     | 
    
         
            +
             
     | 
| 
      
 4299 
     | 
    
         
            +
             
     | 
| 
      
 4300 
     | 
    
         
            +
            // Create scrollLeft and scrollTop methods
         
     | 
| 
      
 4301 
     | 
    
         
            +
            jQuery.each( ['Left', 'Top'], function(i, name) {
         
     | 
| 
      
 4302 
     | 
    
         
            +
            	var method = 'scroll' + name;
         
     | 
| 
      
 4303 
     | 
    
         
            +
            	
         
     | 
| 
      
 4304 
     | 
    
         
            +
            	jQuery.fn[ method ] = function(val) {
         
     | 
| 
      
 4305 
     | 
    
         
            +
            		if (!this[0]) return null;
         
     | 
| 
      
 4306 
     | 
    
         
            +
             
     | 
| 
      
 4307 
     | 
    
         
            +
            		return val !== undefined ?
         
     | 
| 
      
 4308 
     | 
    
         
            +
             
     | 
| 
      
 4309 
     | 
    
         
            +
            			// Set the scroll offset
         
     | 
| 
      
 4310 
     | 
    
         
            +
            			this.each(function() {
         
     | 
| 
      
 4311 
     | 
    
         
            +
            				this == window || this == document ?
         
     | 
| 
      
 4312 
     | 
    
         
            +
            					window.scrollTo(
         
     | 
| 
      
 4313 
     | 
    
         
            +
            						!i ? val : jQuery(window).scrollLeft(),
         
     | 
| 
      
 4314 
     | 
    
         
            +
            						 i ? val : jQuery(window).scrollTop()
         
     | 
| 
      
 4315 
     | 
    
         
            +
            					) :
         
     | 
| 
      
 4316 
     | 
    
         
            +
            					this[ method ] = val;
         
     | 
| 
      
 4317 
     | 
    
         
            +
            			}) :
         
     | 
| 
      
 4318 
     | 
    
         
            +
             
     | 
| 
      
 4319 
     | 
    
         
            +
            			// Return the scroll offset
         
     | 
| 
      
 4320 
     | 
    
         
            +
            			this[0] == window || this[0] == document ?
         
     | 
| 
      
 4321 
     | 
    
         
            +
            				self[ i ? 'pageYOffset' : 'pageXOffset' ] ||
         
     | 
| 
      
 4322 
     | 
    
         
            +
            					jQuery.boxModel && document.documentElement[ method ] ||
         
     | 
| 
      
 4323 
     | 
    
         
            +
            					document.body[ method ] :
         
     | 
| 
      
 4324 
     | 
    
         
            +
            				this[0][ method ];
         
     | 
| 
      
 4325 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4326 
     | 
    
         
            +
            });
         
     | 
| 
      
 4327 
     | 
    
         
            +
            // Create innerHeight, innerWidth, outerHeight and outerWidth methods
         
     | 
| 
      
 4328 
     | 
    
         
            +
            jQuery.each([ "Height", "Width" ], function(i, name){
         
     | 
| 
      
 4329 
     | 
    
         
            +
             
     | 
| 
      
 4330 
     | 
    
         
            +
            	var tl = i ? "Left"  : "Top",  // top or left
         
     | 
| 
      
 4331 
     | 
    
         
            +
            		br = i ? "Right" : "Bottom", // bottom or right
         
     | 
| 
      
 4332 
     | 
    
         
            +
            		lower = name.toLowerCase();
         
     | 
| 
      
 4333 
     | 
    
         
            +
             
     | 
| 
      
 4334 
     | 
    
         
            +
            	// innerHeight and innerWidth
         
     | 
| 
      
 4335 
     | 
    
         
            +
            	jQuery.fn["inner" + name] = function(){
         
     | 
| 
      
 4336 
     | 
    
         
            +
            		return this[0] ?
         
     | 
| 
      
 4337 
     | 
    
         
            +
            			jQuery.css( this[0], lower, false, "padding" ) :
         
     | 
| 
      
 4338 
     | 
    
         
            +
            			null;
         
     | 
| 
      
 4339 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4340 
     | 
    
         
            +
             
     | 
| 
      
 4341 
     | 
    
         
            +
            	// outerHeight and outerWidth
         
     | 
| 
      
 4342 
     | 
    
         
            +
            	jQuery.fn["outer" + name] = function(margin) {
         
     | 
| 
      
 4343 
     | 
    
         
            +
            		return this[0] ?
         
     | 
| 
      
 4344 
     | 
    
         
            +
            			jQuery.css( this[0], lower, false, margin ? "margin" : "border" ) :
         
     | 
| 
      
 4345 
     | 
    
         
            +
            			null;
         
     | 
| 
      
 4346 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4347 
     | 
    
         
            +
            	
         
     | 
| 
      
 4348 
     | 
    
         
            +
            	var type = name.toLowerCase();
         
     | 
| 
      
 4349 
     | 
    
         
            +
             
     | 
| 
      
 4350 
     | 
    
         
            +
            	jQuery.fn[ type ] = function( size ) {
         
     | 
| 
      
 4351 
     | 
    
         
            +
            		// Get window width or height
         
     | 
| 
      
 4352 
     | 
    
         
            +
            		return this[0] == window ?
         
     | 
| 
      
 4353 
     | 
    
         
            +
            			// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
         
     | 
| 
      
 4354 
     | 
    
         
            +
            			document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] ||
         
     | 
| 
      
 4355 
     | 
    
         
            +
            			document.body[ "client" + name ] :
         
     | 
| 
      
 4356 
     | 
    
         
            +
             
     | 
| 
      
 4357 
     | 
    
         
            +
            			// Get document width or height
         
     | 
| 
      
 4358 
     | 
    
         
            +
            			this[0] == document ?
         
     | 
| 
      
 4359 
     | 
    
         
            +
            				// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
         
     | 
| 
      
 4360 
     | 
    
         
            +
            				Math.max(
         
     | 
| 
      
 4361 
     | 
    
         
            +
            					document.documentElement["client" + name],
         
     | 
| 
      
 4362 
     | 
    
         
            +
            					document.body["scroll" + name], document.documentElement["scroll" + name],
         
     | 
| 
      
 4363 
     | 
    
         
            +
            					document.body["offset" + name], document.documentElement["offset" + name]
         
     | 
| 
      
 4364 
     | 
    
         
            +
            				) :
         
     | 
| 
      
 4365 
     | 
    
         
            +
             
     | 
| 
      
 4366 
     | 
    
         
            +
            				// Get or set width or height on the element
         
     | 
| 
      
 4367 
     | 
    
         
            +
            				size === undefined ?
         
     | 
| 
      
 4368 
     | 
    
         
            +
            					// Get width or height on the element
         
     | 
| 
      
 4369 
     | 
    
         
            +
            					(this.length ? jQuery.css( this[0], type ) : null) :
         
     | 
| 
      
 4370 
     | 
    
         
            +
             
     | 
| 
      
 4371 
     | 
    
         
            +
            					// Set the width or height on the element (default to pixels if value is unitless)
         
     | 
| 
      
 4372 
     | 
    
         
            +
            					this.css( type, typeof size === "string" ? size : size + "px" );
         
     | 
| 
      
 4373 
     | 
    
         
            +
            	};
         
     | 
| 
      
 4374 
     | 
    
         
            +
             
     | 
| 
      
 4375 
     | 
    
         
            +
            });
         
     | 
| 
      
 4376 
     | 
    
         
            +
            })();
         
     |