jslint 1.0.5 → 1.1.0
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/VERSION +1 -1
- data/bin/jslint +2 -2
- data/jslint.gemspec +37 -39
- data/jslint/jslint.js +6765 -0
- data/jslint/json2.js +36 -38
- data/jslint/node.coffee +69 -0
- data/jslint/node.js +72 -67
- data/jslint/rhino.coffee +59 -0
- data/jslint/rhino.js +69 -53
- data/lib/generators/jslint/update_config/templates/jslint.yml +34 -34
- data/lib/jslint.rb +1 -1
- metadata +61 -59
- data/.gitignore +0 -21
- data/jslint/adsafe.js +0 -1769
- data/jslint/fulljslint.js +0 -5664
- data/jslint/intercept.js +0 -86
| @@ -1,43 +1,43 @@ | |
| 1 1 | 
             
            jslint:
         | 
| 2 2 | 
             
              options:
         | 
| 3 | 
            -
                 | 
| 4 | 
            -
                 | 
| 5 | 
            -
                browser:  | 
| 6 | 
            -
                 | 
| 7 | 
            -
                 | 
| 8 | 
            -
                 | 
| 9 | 
            -
                 | 
| 10 | 
            -
                 | 
| 11 | 
            -
             | 
| 12 | 
            -
                debug: true     # Tolerate debugger statements
         | 
| 13 | 
            -
                evil: true      # Tolerate eval
         | 
| 14 | 
            -
                laxbreak: true  # Tolerate sloppy line breaking
         | 
| 15 | 
            -
                forin: true     # Tolerate unfiltered for in
         | 
| 16 | 
            -
                sub: true       # Tolerate inefficient subscripting
         | 
| 17 | 
            -
                css: true       # Tolerate CSS workarounds
         | 
| 18 | 
            -
                cap: true       # Tolerate HTML case
         | 
| 19 | 
            -
                on: true        # Tolerate HTML event handlers
         | 
| 20 | 
            -
                fragment: true  # Tolerate HTML fragments
         | 
| 21 | 
            -
                es5: true       # Tolerate ES5 syntax
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                onevar: true    # Allow one var statement per function
         | 
| 24 | 
            -
                undef: true     # Disallow undefined variables
         | 
| 25 | 
            -
                nomem: true     # Disallow dangling _ in identifiers
         | 
| 3 | 
            +
                adsafe: false   # true, if ADsafe rules should be enforced
         | 
| 4 | 
            +
                bitwise: true   # true, if bitwise operators should not be allowed
         | 
| 5 | 
            +
                browser: false  # true, if the standard browser globals should be predefined
         | 
| 6 | 
            +
                cap: true       # true, if upper case HTML should be allowed
         | 
| 7 | 
            +
                continue: true  # true, if the continuation statement should be tolerated
         | 
| 8 | 
            +
                css: true       # true, if CSS workarounds should be tolerated
         | 
| 9 | 
            +
                debug: true     # true, if debugger statements should be allowed
         | 
| 10 | 
            +
                devel: true     # true, if logging should be allowed (console, alert, etc.)
         | 
| 26 11 | 
             
                eqeqeq: true    # Disallow == and !=
         | 
| 27 | 
            -
                 | 
| 28 | 
            -
                 | 
| 29 | 
            -
                 | 
| 30 | 
            -
                 | 
| 31 | 
            -
                 | 
| 32 | 
            -
                 | 
| 33 | 
            -
             | 
| 34 | 
            -
                 | 
| 35 | 
            -
                 | 
| 36 | 
            -
                 | 
| 12 | 
            +
                es5: true       # true, if ES5 syntax should be allowed
         | 
| 13 | 
            +
                evil: true      # true, if eval should be allowed
         | 
| 14 | 
            +
                forin: true     # true, if for in statements need not filter
         | 
| 15 | 
            +
                fragment: true  # true, if HTML fragments should be allowed
         | 
| 16 | 
            +
                indent: 4       # the indentation factor
         | 
| 17 | 
            +
                maxerr: 100     # the maximum number of errors to allow
         | 
| 18 | 
            +
                maxlen: 120     # the maximum length of a source line
         | 
| 19 | 
            +
                newcap: true    # true, if constructor names must be capitalized
         | 
| 20 | 
            +
                node: false     # true, if Node.js globals should be predefined
         | 
| 21 | 
            +
                nomem: true     # true, if names should be checked
         | 
| 22 | 
            +
                on: true        # true, if HTML event handlers should be allowed
         | 
| 23 | 
            +
                onevar: true    # true, if only one var statement per function should be allowed
         | 
| 24 | 
            +
                passfail: false # true, if the scan should stop on first error
         | 
| 25 | 
            +
                plusplus: true  # true, if increment/decrement should not be allowed
         | 
| 26 | 
            +
                regexp: true    # true, if the . should not be allowed in regexp literals
         | 
| 27 | 
            +
                rhino: false    # true, if the Rhino environment globals should be predefined
         | 
| 28 | 
            +
                undef: true     # true, if variables should be declared before used
         | 
| 29 | 
            +
                unparam: true   # true, if unused parameters should be tolerated
         | 
| 30 | 
            +
                safe: true      # true, if use of some browser features should be restricted
         | 
| 31 | 
            +
                strict: true    # true, require the 'use strict'; pragma
         | 
| 32 | 
            +
                sub: true       # true, if all forms of subscript notation are tolerated
         | 
| 33 | 
            +
                white: true     # true, if strict whitespace rules apply
         | 
| 34 | 
            +
                widget: false   # true  if the Yahoo Widgets globals should be predefined
         | 
| 35 | 
            +
                windows: false  # true, if MS Windows-specific globals should be predefined
         | 
| 37 36 |  | 
| 38 37 | 
             
              predefined:
         | 
| 39 38 | 
             
                # list of predefined elements, comma separated
         | 
| 40 | 
            -
                - "$, $$, $w, $h, $r, $a, $f, prototype, object, effect, event, element, class, form, hash, ajax, try"
         | 
| 39 | 
            +
                # prototypes - "$, $$, $w, $h, $r, $a, $f, prototype, object, effect, event, element, class, form, hash, ajax, try"
         | 
| 40 | 
            +
                # jquery - "$, jQuery"
         | 
| 41 41 |  | 
| 42 42 | 
             
            scan:
         | 
| 43 43 | 
             
              include:
         | 
    
        data/lib/jslint.rb
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            module Jslint
         | 
| 2 2 | 
             
              RhinoJar = File.expand_path('../js-1.7R2.jar', __FILE__)
         | 
| 3 3 | 
             
              Scripts = {}
         | 
| 4 | 
            -
              Dir["#{File.expand_path( | 
| 4 | 
            +
              Dir["#{File.expand_path('../../jslint', __FILE__)}/*.js"].each do |file_name|
         | 
| 5 5 | 
             
                Scripts[File.basename(file_name, '.js').to_sym] = file_name
         | 
| 6 6 | 
             
              end
         | 
| 7 7 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,60 +1,71 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: jslint
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version | 
| 4 | 
            -
               | 
| 5 | 
            -
              prerelease:  | 
| 6 | 
            -
              segments: 
         | 
| 7 | 
            -
              - 1
         | 
| 8 | 
            -
              - 0
         | 
| 9 | 
            -
              - 5
         | 
| 10 | 
            -
              version: 1.0.5
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 1.1.0
         | 
| 5 | 
            +
              prerelease: 
         | 
| 11 6 | 
             
            platform: ruby
         | 
| 12 | 
            -
            authors: | 
| 7 | 
            +
            authors:
         | 
| 13 8 | 
             
            - Geraud Boyer
         | 
| 14 9 | 
             
            autorequire: 
         | 
| 15 10 | 
             
            bindir: bin
         | 
| 16 11 | 
             
            cert_chain: []
         | 
| 17 | 
            -
             | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 20 | 
            -
             | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 12 | 
            +
            date: 2011-06-01 00:00:00.000000000Z
         | 
| 13 | 
            +
            dependencies:
         | 
| 14 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 15 | 
            +
              name: jeweler
         | 
| 16 | 
            +
              requirement: &2157461680 !ruby/object:Gem::Requirement
         | 
| 17 | 
            +
                none: false
         | 
| 18 | 
            +
                requirements:
         | 
| 19 | 
            +
                - - ! '>='
         | 
| 20 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            +
                    version: '0'
         | 
| 22 | 
            +
              type: :runtime
         | 
| 23 | 
            +
              prerelease: false
         | 
| 24 | 
            +
              version_requirements: *2157461680
         | 
| 25 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 26 | 
            +
              name: rake
         | 
| 27 | 
            +
              requirement: &2157460860 !ruby/object:Gem::Requirement
         | 
| 28 | 
            +
                none: false
         | 
| 29 | 
            +
                requirements:
         | 
| 30 | 
            +
                - - ! '>='
         | 
| 31 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            +
                    version: '0'
         | 
| 33 | 
            +
              type: :runtime
         | 
| 23 34 | 
             
              prerelease: false
         | 
| 24 | 
            -
               | 
| 35 | 
            +
              version_requirements: *2157460860
         | 
| 36 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 37 | 
            +
              name: json
         | 
| 38 | 
            +
              requirement: &2157449640 !ruby/object:Gem::Requirement
         | 
| 25 39 | 
             
                none: false
         | 
| 26 | 
            -
                requirements: | 
| 27 | 
            -
                - -  | 
| 28 | 
            -
                  - !ruby/object:Gem::Version | 
| 29 | 
            -
                     | 
| 30 | 
            -
                    segments: 
         | 
| 31 | 
            -
                    - 0
         | 
| 32 | 
            -
                    version: "0"
         | 
| 40 | 
            +
                requirements:
         | 
| 41 | 
            +
                - - ! '>='
         | 
| 42 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            +
                    version: '0'
         | 
| 33 44 | 
             
              type: :runtime
         | 
| 34 | 
            -
               | 
| 35 | 
            -
             | 
| 45 | 
            +
              prerelease: false
         | 
| 46 | 
            +
              version_requirements: *2157449640
         | 
| 47 | 
            +
            description: This gem provides an easy way to use jslint with your programs.  It comes
         | 
| 48 | 
            +
              with rhino and it will use nodes.js if it is present.
         | 
| 36 49 | 
             
            email: geraud@gmail.com
         | 
| 37 | 
            -
            executables: | 
| 50 | 
            +
            executables:
         | 
| 38 51 | 
             
            - jslint
         | 
| 39 52 | 
             
            extensions: []
         | 
| 40 | 
            -
             | 
| 41 | 
            -
            extra_rdoc_files: 
         | 
| 53 | 
            +
            extra_rdoc_files:
         | 
| 42 54 | 
             
            - LICENSE
         | 
| 43 55 | 
             
            - README.md
         | 
| 44 | 
            -
            files: | 
| 56 | 
            +
            files:
         | 
| 45 57 | 
             
            - .document
         | 
| 46 | 
            -
            - .gitignore
         | 
| 47 58 | 
             
            - LICENSE
         | 
| 48 59 | 
             
            - README.md
         | 
| 49 60 | 
             
            - Rakefile
         | 
| 50 61 | 
             
            - VERSION
         | 
| 51 62 | 
             
            - bin/jslint
         | 
| 52 63 | 
             
            - jslint.gemspec
         | 
| 53 | 
            -
            - jslint/ | 
| 54 | 
            -
            - jslint/fulljslint.js
         | 
| 55 | 
            -
            - jslint/intercept.js
         | 
| 64 | 
            +
            - jslint/jslint.js
         | 
| 56 65 | 
             
            - jslint/json2.js
         | 
| 66 | 
            +
            - jslint/node.coffee
         | 
| 57 67 | 
             
            - jslint/node.js
         | 
| 68 | 
            +
            - jslint/rhino.coffee
         | 
| 58 69 | 
             
            - jslint/rhino.js
         | 
| 59 70 | 
             
            - jslint/widget.js
         | 
| 60 71 | 
             
            - lib/generators/jslint/update_config/templates/jslint.yml
         | 
| @@ -67,40 +78,31 @@ files: | |
| 67 78 | 
             
            - spec/jslint_spec.rb
         | 
| 68 79 | 
             
            - spec/spec.opts
         | 
| 69 80 | 
             
            - spec/spec_helper.rb
         | 
| 70 | 
            -
            has_rdoc: true
         | 
| 71 81 | 
             
            homepage: http://github.com/geraud/jslint
         | 
| 72 82 | 
             
            licenses: []
         | 
| 73 | 
            -
             | 
| 74 83 | 
             
            post_install_message: 
         | 
| 75 | 
            -
            rdoc_options: 
         | 
| 76 | 
            -
             | 
| 77 | 
            -
            require_paths: 
         | 
| 84 | 
            +
            rdoc_options: []
         | 
| 85 | 
            +
            require_paths:
         | 
| 78 86 | 
             
            - lib
         | 
| 79 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement | 
| 87 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 80 88 | 
             
              none: false
         | 
| 81 | 
            -
              requirements: | 
| 82 | 
            -
              - -  | 
| 83 | 
            -
                - !ruby/object:Gem::Version | 
| 84 | 
            -
                   | 
| 85 | 
            -
                  segments: | 
| 89 | 
            +
              requirements:
         | 
| 90 | 
            +
              - - ! '>='
         | 
| 91 | 
            +
                - !ruby/object:Gem::Version
         | 
| 92 | 
            +
                  version: '0'
         | 
| 93 | 
            +
                  segments:
         | 
| 86 94 | 
             
                  - 0
         | 
| 87 | 
            -
                   | 
| 88 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement | 
| 95 | 
            +
                  hash: -2584130329277132671
         | 
| 96 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 89 97 | 
             
              none: false
         | 
| 90 | 
            -
              requirements: | 
| 91 | 
            -
              - -  | 
| 92 | 
            -
                - !ruby/object:Gem::Version | 
| 93 | 
            -
                   | 
| 94 | 
            -
                  segments: 
         | 
| 95 | 
            -
                  - 0
         | 
| 96 | 
            -
                  version: "0"
         | 
| 98 | 
            +
              requirements:
         | 
| 99 | 
            +
              - - ! '>='
         | 
| 100 | 
            +
                - !ruby/object:Gem::Version
         | 
| 101 | 
            +
                  version: '0'
         | 
| 97 102 | 
             
            requirements: []
         | 
| 98 | 
            -
             | 
| 99 103 | 
             
            rubyforge_project: 
         | 
| 100 | 
            -
            rubygems_version: 1. | 
| 104 | 
            +
            rubygems_version: 1.8.4
         | 
| 101 105 | 
             
            signing_key: 
         | 
| 102 106 | 
             
            specification_version: 3
         | 
| 103 107 | 
             
            summary: Wrapping of jslint
         | 
| 104 | 
            -
            test_files: 
         | 
| 105 | 
            -
            - spec/jslint_spec.rb
         | 
| 106 | 
            -
            - spec/spec_helper.rb
         | 
| 108 | 
            +
            test_files: []
         | 
    
        data/.gitignore
    DELETED
    
    
    
        data/jslint/adsafe.js
    DELETED
    
    | @@ -1,1769 +0,0 @@ | |
| 1 | 
            -
            // adsafe.js
         | 
| 2 | 
            -
            // 2010-07-10
         | 
| 3 | 
            -
             | 
| 4 | 
            -
            //    Public Domain.
         | 
| 5 | 
            -
             | 
| 6 | 
            -
            //    NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
         | 
| 7 | 
            -
            //    SUBJECT TO CHANGE WITHOUT NOTICE.
         | 
| 8 | 
            -
             | 
| 9 | 
            -
            //    Original url: http://www.ADsafe.org/adsafe.js
         | 
| 10 | 
            -
             | 
| 11 | 
            -
            // This file implements the core ADSAFE runtime. A site may add additional
         | 
| 12 | 
            -
            // methods understanding that those methods will be made available to guest
         | 
| 13 | 
            -
            // code.
         | 
| 14 | 
            -
             | 
| 15 | 
            -
            // This code should be minified before deployment.
         | 
| 16 | 
            -
            // See http://javascript.crockford.com/jsmin.html
         | 
| 17 | 
            -
             | 
| 18 | 
            -
            // USE YOUR OWN COPY. IT IS EXTREMELY UNWISE TO LOAD CODE FROM SERVERS YOU DO
         | 
| 19 | 
            -
            // NOT CONTROL.
         | 
| 20 | 
            -
             | 
| 21 | 
            -
            /*global window*/
         | 
| 22 | 
            -
             | 
| 23 | 
            -
            /*jslint browser: true, devel: true, nomen: false */
         | 
| 24 | 
            -
             | 
| 25 | 
            -
            /*members "", "#", "&", "*", "+", ".", "\/", ":blur", ":checked",
         | 
| 26 | 
            -
                ":disabled", ":enabled", ":even", ":focus", ":hidden", ":odd", ":tag",
         | 
| 27 | 
            -
                ":text", ":trim", ":unchecked", ":visible", ">", "[", "[!=", "[$=",
         | 
| 28 | 
            -
                "[*=", "[=", "[^=", "[|=", "[~=", _, "___ on ___", "___adsafe root___",
         | 
| 29 | 
            -
                ___nodes___, ___star___, "_adsafe mark_", _intercept, a, abbr, acronym,
         | 
| 30 | 
            -
                addEventListener, address, altKey, append, appendChild, apply, area,
         | 
| 31 | 
            -
                arguments, autocomplete, b, bdo, big, blockquote, blur, br, bubble,
         | 
| 32 | 
            -
                button, call, callee, caller, cancelBubble, canvas, caption, center,
         | 
| 33 | 
            -
                change, charAt, charCode, check, checked, childNodes, cite, className,
         | 
| 34 | 
            -
                clientX, clientY, clone, cloneNode, code, col, colgroup, combine,
         | 
| 35 | 
            -
                concat, console, constructor, count, create, createDocumentFragment,
         | 
| 36 | 
            -
                createElement, createRange, createTextNode, createTextRange, cssFloat,
         | 
| 37 | 
            -
                ctrlKey, currentStyle, dd, defaultView, del, dfn, dir, disabled, div,
         | 
| 38 | 
            -
                dl, dt, each, em, empty, enable, ephemeral, eval, exec, expand, explode,
         | 
| 39 | 
            -
                fieldset, fire, firstChild, focus, font, form, fragment, fromCharCode,
         | 
| 40 | 
            -
                get, getCheck, getClass, getComputedStyle, getContext, getElementById,
         | 
| 41 | 
            -
                getElementsByTagName, getMark, getName, getOffsetHeight, getOffsetWidth,
         | 
| 42 | 
            -
                getParent, getSelection, getStyle, getTagName, getTitle, getValue, go,
         | 
| 43 | 
            -
                h1, h2, h3, h4, h5, h6, hasOwnProperty, hr, i, id, img, inRange,
         | 
| 44 | 
            -
                indexOf, input, ins, insertBefore, isArray, kbd, key, keyCode, klass,
         | 
| 45 | 
            -
                label, later, legend, length, li, lib, log, map, mark, menu, message,
         | 
| 46 | 
            -
                name, nextSibling, nodeName, nodeValue, object, off, offsetHeight,
         | 
| 47 | 
            -
                offsetWidth, ol, on, onclick, ondblclick, onfocusin, onfocusout,
         | 
| 48 | 
            -
                onkeypress, onmousedown, onmousemove, onmouseout, onmouseover,
         | 
| 49 | 
            -
                onmouseup, op, optgroup, option, p, parent, parentNode, postError, pre,
         | 
| 50 | 
            -
                prepend, preventDefault, protect, prototype, push, q, remove,
         | 
| 51 | 
            -
                removeChild, removeElement, replace, replaceNode, returnValue, row,
         | 
| 52 | 
            -
                samp, select, selection, selectionEnd, selectionStart, set, shiftKey,
         | 
| 53 | 
            -
                slice, small, span, srcElement, stack, stopPropagation, strong, style,
         | 
| 54 | 
            -
                styleFloat, sub, sup, table, tag, tagName, target, tbody, td, test,
         | 
| 55 | 
            -
                text, textarea, tfoot, th, that, thead, title, toLowerCase, toString,
         | 
| 56 | 
            -
                toUpperCase, tr, tt, type, u, ul, unwatch, value, valueOf, var,
         | 
| 57 | 
            -
                visibility, watch, window, writeln, x, y
         | 
| 58 | 
            -
            */
         | 
| 59 | 
            -
             | 
| 60 | 
            -
            "use strict";
         | 
| 61 | 
            -
             | 
| 62 | 
            -
            var ADSAFE = (function () {
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                var adsafe_id,      // The id of the current widget
         | 
| 65 | 
            -
                    adsafe_lib,     // The script libraries loaded by the current widget
         | 
| 66 | 
            -
             | 
| 67 | 
            -
            // These member names are banned from guest scripts. The ADSAFE.get and
         | 
| 68 | 
            -
            // ADSAFE.put methods will not allow access to these properties.
         | 
| 69 | 
            -
             | 
| 70 | 
            -
                    banned = {
         | 
| 71 | 
            -
                        'arguments'     : true,
         | 
| 72 | 
            -
                        callee          : true,
         | 
| 73 | 
            -
                        caller          : true,
         | 
| 74 | 
            -
                        constructor     : true,
         | 
| 75 | 
            -
                        'eval'          : true,
         | 
| 76 | 
            -
                        prototype       : true,
         | 
| 77 | 
            -
            			stack			: true,
         | 
| 78 | 
            -
                        unwatch         : true,
         | 
| 79 | 
            -
                        valueOf         : true,
         | 
| 80 | 
            -
                        watch           : true
         | 
| 81 | 
            -
                    },
         | 
| 82 | 
            -
             | 
| 83 | 
            -
                    cache_style_object,
         | 
| 84 | 
            -
                    cache_style_node,
         | 
| 85 | 
            -
                    defaultView = document.defaultView,
         | 
| 86 | 
            -
                    ephemeral,
         | 
| 87 | 
            -
                    flipflop,       // Used in :even/:odd processing
         | 
| 88 | 
            -
                    has_focus,
         | 
| 89 | 
            -
                    hunter,         // Set of hunter patterns
         | 
| 90 | 
            -
                    interceptors = [],
         | 
| 91 | 
            -
             | 
| 92 | 
            -
                    makeableTagName = {
         | 
| 93 | 
            -
             | 
| 94 | 
            -
            // This is the whitelist of elements that may be created with the .tag(tagName)
         | 
| 95 | 
            -
            // method.
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                        a         : true,
         | 
| 98 | 
            -
                        abbr      : true,
         | 
| 99 | 
            -
                        acronym   : true,
         | 
| 100 | 
            -
                        address   : true,
         | 
| 101 | 
            -
                        area      : true,
         | 
| 102 | 
            -
                        b         : true,
         | 
| 103 | 
            -
                        bdo       : true,
         | 
| 104 | 
            -
                        big       : true,
         | 
| 105 | 
            -
                        blockquote: true,
         | 
| 106 | 
            -
                        br        : true,
         | 
| 107 | 
            -
                        button    : true,
         | 
| 108 | 
            -
                        canvas    : true,
         | 
| 109 | 
            -
                        caption   : true,
         | 
| 110 | 
            -
                        center    : true,
         | 
| 111 | 
            -
                        cite      : true,
         | 
| 112 | 
            -
                        code      : true,
         | 
| 113 | 
            -
                        col       : true,
         | 
| 114 | 
            -
                        colgroup  : true,
         | 
| 115 | 
            -
                        dd        : true,
         | 
| 116 | 
            -
                        del       : true,
         | 
| 117 | 
            -
                        dfn       : true,
         | 
| 118 | 
            -
                        dir       : true,
         | 
| 119 | 
            -
                        div       : true,
         | 
| 120 | 
            -
                        dl        : true,
         | 
| 121 | 
            -
                        dt        : true,
         | 
| 122 | 
            -
                        em        : true,
         | 
| 123 | 
            -
                        fieldset  : true,
         | 
| 124 | 
            -
                        font      : true,
         | 
| 125 | 
            -
                        form      : true,
         | 
| 126 | 
            -
                        h1        : true,
         | 
| 127 | 
            -
                        h2        : true,
         | 
| 128 | 
            -
                        h3        : true,
         | 
| 129 | 
            -
                        h4        : true,
         | 
| 130 | 
            -
                        h5        : true,
         | 
| 131 | 
            -
                        h6        : true,
         | 
| 132 | 
            -
                        hr        : true,
         | 
| 133 | 
            -
                        i         : true,
         | 
| 134 | 
            -
                        img       : true,
         | 
| 135 | 
            -
                        input     : true,
         | 
| 136 | 
            -
                        ins       : true,
         | 
| 137 | 
            -
                        kbd       : true,
         | 
| 138 | 
            -
                        label     : true,
         | 
| 139 | 
            -
                        legend    : true,
         | 
| 140 | 
            -
                        li        : true,
         | 
| 141 | 
            -
                        map       : true,
         | 
| 142 | 
            -
                        menu      : true,
         | 
| 143 | 
            -
                        object    : true,
         | 
| 144 | 
            -
                        ol        : true,
         | 
| 145 | 
            -
                        optgroup  : true,
         | 
| 146 | 
            -
                        option    : true,
         | 
| 147 | 
            -
                        p         : true,
         | 
| 148 | 
            -
                        pre       : true,
         | 
| 149 | 
            -
                        q         : true,
         | 
| 150 | 
            -
                        samp      : true,
         | 
| 151 | 
            -
                        select    : true,
         | 
| 152 | 
            -
                        small     : true,
         | 
| 153 | 
            -
                        span      : true,
         | 
| 154 | 
            -
                        strong    : true,
         | 
| 155 | 
            -
                        sub       : true,
         | 
| 156 | 
            -
                        sup       : true,
         | 
| 157 | 
            -
                        table     : true,
         | 
| 158 | 
            -
                        tbody     : true,
         | 
| 159 | 
            -
                        td        : true,
         | 
| 160 | 
            -
                        textarea  : true,
         | 
| 161 | 
            -
                        tfoot     : true,
         | 
| 162 | 
            -
                        th        : true,
         | 
| 163 | 
            -
                        thead     : true,
         | 
| 164 | 
            -
                        tr        : true,
         | 
| 165 | 
            -
                        tt        : true,
         | 
| 166 | 
            -
                        u         : true,
         | 
| 167 | 
            -
                        ul        : true,
         | 
| 168 | 
            -
                        'var'     : true
         | 
| 169 | 
            -
                    },
         | 
| 170 | 
            -
                    name,
         | 
| 171 | 
            -
                    pecker,     // set of pecker patterns
         | 
| 172 | 
            -
                    result,
         | 
| 173 | 
            -
                    star,
         | 
| 174 | 
            -
                    the_range,
         | 
| 175 | 
            -
                    value;
         | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
            //  The error function is called if there is a violation or confusion.
         | 
| 179 | 
            -
            //  It throws an exception.
         | 
| 180 | 
            -
             | 
| 181 | 
            -
                function error(message) {
         | 
| 182 | 
            -
                    ADSAFE.log("ADsafe error: " + (message || "ADsafe violation."));
         | 
| 183 | 
            -
                    throw {
         | 
| 184 | 
            -
                        name: "ADsafe",
         | 
| 185 | 
            -
                        message: message || "ADsafe violation."
         | 
| 186 | 
            -
                    };
         | 
| 187 | 
            -
                }
         | 
| 188 | 
            -
             | 
| 189 | 
            -
             | 
| 190 | 
            -
            //  Firefox implemented some of its array methods carelessly. If a method is
         | 
| 191 | 
            -
            //  called as a function it returns the global object. ADsafe cannot tolerate
         | 
| 192 | 
            -
            //  that, so we wrap the methods to make them safer and slower.
         | 
| 193 | 
            -
             | 
| 194 | 
            -
                (function mozilla(name) {
         | 
| 195 | 
            -
                    var method = Array.prototype[name];
         | 
| 196 | 
            -
                    Array.prototype[name] = function () {
         | 
| 197 | 
            -
                        return !this || this.window ? error() : method.apply(this, arguments);
         | 
| 198 | 
            -
                    };
         | 
| 199 | 
            -
            		return mozilla;
         | 
| 200 | 
            -
                }
         | 
| 201 | 
            -
                ('concat')
         | 
| 202 | 
            -
                ('every')
         | 
| 203 | 
            -
                ('filter')
         | 
| 204 | 
            -
                ('forEach')
         | 
| 205 | 
            -
                ('map')
         | 
| 206 | 
            -
                ('reduce')
         | 
| 207 | 
            -
                ('reduceRight')
         | 
| 208 | 
            -
                ('reverse')
         | 
| 209 | 
            -
                ('slice')
         | 
| 210 | 
            -
                ('some')
         | 
| 211 | 
            -
                ('sort'));
         | 
| 212 | 
            -
             | 
| 213 | 
            -
             | 
| 214 | 
            -
            //  The reject function enforces the restriction on get and put.
         | 
| 215 | 
            -
            //  It allows access only to objects and arrays. It does not allow use of
         | 
| 216 | 
            -
            //  the banned names, or names that are not strings or positive numbers,
         | 
| 217 | 
            -
            //  or strings that start or end with _ or strings that start with -.
         | 
| 218 | 
            -
             | 
| 219 | 
            -
                function reject(object, name) {
         | 
| 220 | 
            -
                    return typeof object !== 'object'  || banned[name] ||
         | 
| 221 | 
            -
                            ((typeof name !== 'number' || name < 0) &&
         | 
| 222 | 
            -
                            (typeof name !== 'string'  || name.charAt(0) === '_' ||
         | 
| 223 | 
            -
                            name.slice(-1) === '_'     || name.charAt(0) === '-'));
         | 
| 224 | 
            -
                }
         | 
| 225 | 
            -
             | 
| 226 | 
            -
             | 
| 227 | 
            -
                function getStyleObject(node) {
         | 
| 228 | 
            -
             | 
| 229 | 
            -
            // The getStyleObject function returns the computed style object for a node.
         | 
| 230 | 
            -
             | 
| 231 | 
            -
                    if (node === cache_style_node) {
         | 
| 232 | 
            -
                        return cache_style_object;
         | 
| 233 | 
            -
                    }
         | 
| 234 | 
            -
                    cache_style_node = node;
         | 
| 235 | 
            -
                    cache_style_object =
         | 
| 236 | 
            -
                        node.currentStyle || defaultView.getComputedStyle(node, '');
         | 
| 237 | 
            -
                    return cache_style_object;
         | 
| 238 | 
            -
                }
         | 
| 239 | 
            -
             | 
| 240 | 
            -
             | 
| 241 | 
            -
                function walkTheDOM(node, func, skip) {
         | 
| 242 | 
            -
             | 
| 243 | 
            -
            // Recursively traverse the DOM tree, starting with the node, in document
         | 
| 244 | 
            -
            // source order, calling the func on each node visisted.
         | 
| 245 | 
            -
             | 
| 246 | 
            -
                    if (!skip) {
         | 
| 247 | 
            -
                        func(node);
         | 
| 248 | 
            -
                    }
         | 
| 249 | 
            -
                    node = node.firstChild;
         | 
| 250 | 
            -
                    while (node) {
         | 
| 251 | 
            -
                        walkTheDOM(node, func);
         | 
| 252 | 
            -
                        node = node.nextSibling;
         | 
| 253 | 
            -
                    }
         | 
| 254 | 
            -
                }
         | 
| 255 | 
            -
             | 
| 256 | 
            -
             | 
| 257 | 
            -
                function purge_event_handlers(node) {
         | 
| 258 | 
            -
             | 
| 259 | 
            -
            // We attach all event handlers to a '___ on ___' property. The property name
         | 
| 260 | 
            -
            // contains spaces to insure that there is no collision with HTML attribues.
         | 
| 261 | 
            -
            // Keeping the handlers in a single property makes it easy to remove them
         | 
| 262 | 
            -
            // all at once. Removal is required to avoid memory leakage on IE6 and IE7.
         | 
| 263 | 
            -
             | 
| 264 | 
            -
                    walkTheDOM(node, function (node) {
         | 
| 265 | 
            -
                        if (node.tagName) {
         | 
| 266 | 
            -
                            node['___ on ___'] = node.change = null;
         | 
| 267 | 
            -
                        }
         | 
| 268 | 
            -
                    });
         | 
| 269 | 
            -
                }
         | 
| 270 | 
            -
             | 
| 271 | 
            -
             | 
| 272 | 
            -
                function parse_query(text, id) {
         | 
| 273 | 
            -
             | 
| 274 | 
            -
            // Convert a query string into an array of op/name/value selectors.
         | 
| 275 | 
            -
            // A query string is a sequence of triples wrapped in brackets; or names,
         | 
| 276 | 
            -
            // possibly prefixed by # . & > _, or :option, or * or /. A triple is a name,
         | 
| 277 | 
            -
            // and operator (one of [=, [!=, [*=, [~=, [|=, [$=, or [^=) and a value.
         | 
| 278 | 
            -
             | 
| 279 | 
            -
            // If the id parameter is supplied, then the name following # must have the
         | 
| 280 | 
            -
            // id as a prefix and must match the ADsafe rule for id: being all uppercase
         | 
| 281 | 
            -
            // letters and digits with one underbar.
         | 
| 282 | 
            -
             | 
| 283 | 
            -
            // A name must be all lower case and may contain digits, -, or _.
         | 
| 284 | 
            -
             | 
| 285 | 
            -
                    var match,          // A match array
         | 
| 286 | 
            -
                        query = [],     // The resulting query array
         | 
| 287 | 
            -
                        selector,
         | 
| 288 | 
            -
                        qx = id ?
         | 
| 289 | 
            -
            /^\s*(?:([\*\/])|\[\s*([a-z][0-9a-z_\-]*)\s*(?:([!*~|$\^]?\=)\s*([0-9A-Za-z_\-*%&;.\/:!]+)\s*)?\]|#\s*([A-Z]+_[A-Z0-9]+)|:\s*([a-z]+)|([.&_>\+]?)\s*([a-z][0-9a-z\-]*))\s*/ :
         | 
| 290 | 
            -
            /^\s*(?:([\*\/])|\[\s*([a-z][0-9a-z_\-]*)\s*(?:([!*~|$\^]?\=)\s*([0-9A-Za-z_\-*%&;.\/:!]+)\s*)?\]|#\s*([\-A-Za-z0-9_]+)|:\s*([a-z]+)|([.&_>\+]?)\s*([a-z][0-9a-z\-]*))\s*/;
         | 
| 291 | 
            -
             | 
| 292 | 
            -
            // Loop over all of the selectors in the text.
         | 
| 293 | 
            -
             | 
| 294 | 
            -
                    do {
         | 
| 295 | 
            -
             | 
| 296 | 
            -
            // The qx teases the components of one selector out of the text, ignoring
         | 
| 297 | 
            -
            // whitespace.
         | 
| 298 | 
            -
             | 
| 299 | 
            -
            //          match[0]  the whole selector
         | 
| 300 | 
            -
            //          match[1]  * /
         | 
| 301 | 
            -
            //          match[2]  attribute name
         | 
| 302 | 
            -
            //          match[3]  = != *= ~= |= $= ^=
         | 
| 303 | 
            -
            //          match[4]  attribute value
         | 
| 304 | 
            -
            //          match[5]  # id
         | 
| 305 | 
            -
            //          match[6]  : option
         | 
| 306 | 
            -
            //          match[7]  . & _ > +
         | 
| 307 | 
            -
            //          match[8]      name
         | 
| 308 | 
            -
             | 
| 309 | 
            -
                        match = qx.exec(text);
         | 
| 310 | 
            -
                        if (!match) {
         | 
| 311 | 
            -
                            return error("ADsafe: Bad query:" + text);
         | 
| 312 | 
            -
                        }
         | 
| 313 | 
            -
             | 
| 314 | 
            -
            // Make a selector object and stuff it in the query.
         | 
| 315 | 
            -
             | 
| 316 | 
            -
                        if (match[1]) {
         | 
| 317 | 
            -
             | 
| 318 | 
            -
            // The selector is * or /
         | 
| 319 | 
            -
             | 
| 320 | 
            -
                            selector = {
         | 
| 321 | 
            -
                                op: match[1]
         | 
| 322 | 
            -
                            };
         | 
| 323 | 
            -
                        } else if (match[2]) {
         | 
| 324 | 
            -
             | 
| 325 | 
            -
            // The selector is in brackets.
         | 
| 326 | 
            -
             | 
| 327 | 
            -
                            selector = match[3] ? {
         | 
| 328 | 
            -
                                op: '[' + match[3],
         | 
| 329 | 
            -
                                name: match[2],
         | 
| 330 | 
            -
                                value: match[4]
         | 
| 331 | 
            -
                            } : {
         | 
| 332 | 
            -
                                op: '[',
         | 
| 333 | 
            -
                                name: match[2]
         | 
| 334 | 
            -
                            };
         | 
| 335 | 
            -
                        } else if (match[5]) {
         | 
| 336 | 
            -
             | 
| 337 | 
            -
            // The selector is an id.
         | 
| 338 | 
            -
             | 
| 339 | 
            -
                            if (query.length > 0 || match[5].length <= id.length ||
         | 
| 340 | 
            -
                                    match[5].slice(0, id.length) !== id) {
         | 
| 341 | 
            -
                                return error("ADsafe: Bad query: " + text);
         | 
| 342 | 
            -
                            }
         | 
| 343 | 
            -
                            selector = {
         | 
| 344 | 
            -
                                op: '#',
         | 
| 345 | 
            -
                                name: match[5]
         | 
| 346 | 
            -
                            };
         | 
| 347 | 
            -
             | 
| 348 | 
            -
            // The selector is a colon.
         | 
| 349 | 
            -
             | 
| 350 | 
            -
                        } else if (match[6]) {
         | 
| 351 | 
            -
                            selector = {
         | 
| 352 | 
            -
                                op: ':' + match[6]
         | 
| 353 | 
            -
                            };
         | 
| 354 | 
            -
             | 
| 355 | 
            -
            // The selector is one of > + . & _ or a naked tag name
         | 
| 356 | 
            -
             | 
| 357 | 
            -
                        } else {
         | 
| 358 | 
            -
                            selector = {
         | 
| 359 | 
            -
                                op: match[7],
         | 
| 360 | 
            -
                                name: match[8]
         | 
| 361 | 
            -
                            };
         | 
| 362 | 
            -
                        }
         | 
| 363 | 
            -
             | 
| 364 | 
            -
            // Add the selector to the query.
         | 
| 365 | 
            -
             | 
| 366 | 
            -
                        query.push(selector);
         | 
| 367 | 
            -
             | 
| 368 | 
            -
            // Remove the selector from the text. If there is more text, have another go.
         | 
| 369 | 
            -
             | 
| 370 | 
            -
                        text = text.slice(match[0].length);
         | 
| 371 | 
            -
                    } while (text);
         | 
| 372 | 
            -
                    return query;
         | 
| 373 | 
            -
                }
         | 
| 374 | 
            -
             | 
| 375 | 
            -
             | 
| 376 | 
            -
                hunter = {
         | 
| 377 | 
            -
             | 
| 378 | 
            -
            // These functions implement the hunter behaviors.
         | 
| 379 | 
            -
             | 
| 380 | 
            -
                    '': function (node) {
         | 
| 381 | 
            -
                        var e = node.getElementsByTagName(name), i;
         | 
| 382 | 
            -
                        for (i = 0; i < 1000; i += 1) {
         | 
| 383 | 
            -
                            if (e[i]) {
         | 
| 384 | 
            -
                                result.push(e[i]);
         | 
| 385 | 
            -
                            } else {
         | 
| 386 | 
            -
                                break;
         | 
| 387 | 
            -
                            }
         | 
| 388 | 
            -
                        }
         | 
| 389 | 
            -
                    },
         | 
| 390 | 
            -
                    '+': function (node) {
         | 
| 391 | 
            -
                        node = node.nextSibling;
         | 
| 392 | 
            -
                        name = name.toUpperCase();
         | 
| 393 | 
            -
                        while (node && !node.tagName) {
         | 
| 394 | 
            -
                            node = node.nextSibling;
         | 
| 395 | 
            -
                        }
         | 
| 396 | 
            -
                        if (node && node.tagName === name) {
         | 
| 397 | 
            -
                            result.push(node);
         | 
| 398 | 
            -
                        }
         | 
| 399 | 
            -
                    },
         | 
| 400 | 
            -
                    '>': function (node) {
         | 
| 401 | 
            -
                        node = node.firstChild;
         | 
| 402 | 
            -
                        name = name.toUpperCase();
         | 
| 403 | 
            -
                        while (node) {
         | 
| 404 | 
            -
                            if (node.tagName === name) {
         | 
| 405 | 
            -
                                result.push(node);
         | 
| 406 | 
            -
                            }
         | 
| 407 | 
            -
                            node = node.nextSibling;
         | 
| 408 | 
            -
                        }
         | 
| 409 | 
            -
                    },
         | 
| 410 | 
            -
                    '#': function (node) {
         | 
| 411 | 
            -
                        var n = document.getElementById(name);
         | 
| 412 | 
            -
                        if (n.tagName) {
         | 
| 413 | 
            -
                            result.push(n);
         | 
| 414 | 
            -
                        }
         | 
| 415 | 
            -
                    },
         | 
| 416 | 
            -
                    '/': function (node) {
         | 
| 417 | 
            -
                        var e = node.childNodes, i;
         | 
| 418 | 
            -
                        for (i = 0; i < e.length; i += 1) {
         | 
| 419 | 
            -
                            result.push(e[i]);
         | 
| 420 | 
            -
                        }
         | 
| 421 | 
            -
                    },
         | 
| 422 | 
            -
                    '*': function (node) {
         | 
| 423 | 
            -
                        star = true;
         | 
| 424 | 
            -
                        walkTheDOM(node, function (node) {
         | 
| 425 | 
            -
                            result.push(node);
         | 
| 426 | 
            -
                        }, true);
         | 
| 427 | 
            -
                    }
         | 
| 428 | 
            -
                };
         | 
| 429 | 
            -
             | 
| 430 | 
            -
                pecker = {
         | 
| 431 | 
            -
                    '.': function (node) {
         | 
| 432 | 
            -
                        return (' ' + node.className + ' ').indexOf(' ' + name + ' ') >= 0;
         | 
| 433 | 
            -
                    },
         | 
| 434 | 
            -
                    '&': function (node) {
         | 
| 435 | 
            -
                        return node.name === name;
         | 
| 436 | 
            -
                    },
         | 
| 437 | 
            -
                    '_': function (node) {
         | 
| 438 | 
            -
                        return node.type === name;
         | 
| 439 | 
            -
                    },
         | 
| 440 | 
            -
                    '[': function (node) {
         | 
| 441 | 
            -
                        return typeof node[name] === 'string';
         | 
| 442 | 
            -
                    },
         | 
| 443 | 
            -
                    '[=': function (node) {
         | 
| 444 | 
            -
                        var member = node[name];
         | 
| 445 | 
            -
                        return typeof member === 'string' && member === value;
         | 
| 446 | 
            -
                    },
         | 
| 447 | 
            -
                    '[!=': function (node) {
         | 
| 448 | 
            -
                        var member = node[name];
         | 
| 449 | 
            -
                        return typeof member === 'string' && member !== value;
         | 
| 450 | 
            -
                    },
         | 
| 451 | 
            -
                    '[^=': function (node) {
         | 
| 452 | 
            -
                        var member = node[name];
         | 
| 453 | 
            -
                        return typeof member === 'string' &&
         | 
| 454 | 
            -
                            member.slice(0, member.length) === value;
         | 
| 455 | 
            -
                    },
         | 
| 456 | 
            -
                    '[$=': function (node) {
         | 
| 457 | 
            -
                        var member = node[name];
         | 
| 458 | 
            -
                        return typeof member === 'string' &&
         | 
| 459 | 
            -
                            member.slice(-member.length) === value;
         | 
| 460 | 
            -
                    },
         | 
| 461 | 
            -
                    '[*=': function (node) {
         | 
| 462 | 
            -
                        var member = node[name];
         | 
| 463 | 
            -
                        return typeof member === 'string' &&
         | 
| 464 | 
            -
                            member.slice.indexOf(value) >= 0;
         | 
| 465 | 
            -
                    },
         | 
| 466 | 
            -
                    '[~=': function (node) {
         | 
| 467 | 
            -
                        var member = node[name];
         | 
| 468 | 
            -
                        return typeof member === 'string' &&
         | 
| 469 | 
            -
                            (' ' + member + ' ').slice.indexOf(' ' + value + ' ') >= 0;
         | 
| 470 | 
            -
                    },
         | 
| 471 | 
            -
                    '[|=': function (node) {
         | 
| 472 | 
            -
                        var member = node[name];
         | 
| 473 | 
            -
                        return typeof member === 'string' &&
         | 
| 474 | 
            -
                            ('-' + member + '-').slice.indexOf('-' + value + '-') >= 0;
         | 
| 475 | 
            -
                    },
         | 
| 476 | 
            -
                    ':blur': function (node) {
         | 
| 477 | 
            -
                        return node !== has_focus;
         | 
| 478 | 
            -
                    },
         | 
| 479 | 
            -
                    ':checked': function (node) {
         | 
| 480 | 
            -
                        return node.checked;
         | 
| 481 | 
            -
                    },
         | 
| 482 | 
            -
                    ':disabled': function (node) {
         | 
| 483 | 
            -
                        return node.tagName && node.disabled;
         | 
| 484 | 
            -
                    },
         | 
| 485 | 
            -
                    ':enabled': function (node) {
         | 
| 486 | 
            -
                        return node.tagName && !node.disabled;
         | 
| 487 | 
            -
                    },
         | 
| 488 | 
            -
                    ':even': function (node) {
         | 
| 489 | 
            -
                        var f;
         | 
| 490 | 
            -
                        if (node.tagName) {
         | 
| 491 | 
            -
                            f = flipflop;
         | 
| 492 | 
            -
                            flipflop = !flipflop;
         | 
| 493 | 
            -
                            return f;
         | 
| 494 | 
            -
                        } else {
         | 
| 495 | 
            -
                            return false;
         | 
| 496 | 
            -
                        }
         | 
| 497 | 
            -
                    },
         | 
| 498 | 
            -
                    ':focus': function (node) {
         | 
| 499 | 
            -
                        return node === has_focus;
         | 
| 500 | 
            -
                    },
         | 
| 501 | 
            -
                    ':hidden': function (node) {
         | 
| 502 | 
            -
                        return node.tagName && getStyleObject(node).visibility !== 'visible';
         | 
| 503 | 
            -
                    },
         | 
| 504 | 
            -
                    ':odd': function (node) {
         | 
| 505 | 
            -
                        if (node.tagName) {
         | 
| 506 | 
            -
                            flipflop = !flipflop;
         | 
| 507 | 
            -
                            return flipflop;
         | 
| 508 | 
            -
                        } else {
         | 
| 509 | 
            -
                            return false;
         | 
| 510 | 
            -
                        }
         | 
| 511 | 
            -
                    },
         | 
| 512 | 
            -
                    ':tag': function (node) {
         | 
| 513 | 
            -
                        return node.tagName;
         | 
| 514 | 
            -
                    },
         | 
| 515 | 
            -
                    ':text': function (node) {
         | 
| 516 | 
            -
                        return node.nodeName === '#text';
         | 
| 517 | 
            -
                    },
         | 
| 518 | 
            -
                    ':trim': function (node) {
         | 
| 519 | 
            -
                        return node.nodeName !== '#text' || /\W/.test(node.nodeValue);
         | 
| 520 | 
            -
                    },
         | 
| 521 | 
            -
                    ':unchecked': function (node) {
         | 
| 522 | 
            -
                        return node.tagName && !node.checked;
         | 
| 523 | 
            -
                    },
         | 
| 524 | 
            -
                    ':visible': function (node) {
         | 
| 525 | 
            -
                        return node.tagName && getStyleObject(node).visibility === 'visible';
         | 
| 526 | 
            -
                    }
         | 
| 527 | 
            -
                };
         | 
| 528 | 
            -
             | 
| 529 | 
            -
             | 
| 530 | 
            -
                function quest(query, nodes) {
         | 
| 531 | 
            -
                    var selector, func, i, j;
         | 
| 532 | 
            -
             | 
| 533 | 
            -
            // Step through each selector.
         | 
| 534 | 
            -
             | 
| 535 | 
            -
                    for (i = 0; i < query.length; i += 1) {
         | 
| 536 | 
            -
                        selector = query[i];
         | 
| 537 | 
            -
                        name = selector.name;
         | 
| 538 | 
            -
                        func = hunter[selector.op];
         | 
| 539 | 
            -
             | 
| 540 | 
            -
            // There are two kinds of selectors: hunters and peckers. If this is a hunter,
         | 
| 541 | 
            -
            // loop through the the nodes, passing each node to the hunter function.
         | 
| 542 | 
            -
            // Accumulate all the nodes it finds.
         | 
| 543 | 
            -
             | 
| 544 | 
            -
                        if (typeof func === 'function') {
         | 
| 545 | 
            -
                            if (star) {
         | 
| 546 | 
            -
                                return error("ADsafe: Query violation: *" +
         | 
| 547 | 
            -
                                        selector.op + (selector.name || ''));
         | 
| 548 | 
            -
                            }
         | 
| 549 | 
            -
                            result = [];
         | 
| 550 | 
            -
                            for (j = 0; j < nodes.length; j += 1) {
         | 
| 551 | 
            -
                                func(nodes[j]);
         | 
| 552 | 
            -
                            }
         | 
| 553 | 
            -
                        } else {
         | 
| 554 | 
            -
             | 
| 555 | 
            -
            // If this is a pecker, get its function. There is a special case for
         | 
| 556 | 
            -
            // the :first and :rest selectors because they are so simple.
         | 
| 557 | 
            -
             | 
| 558 | 
            -
                            value = selector.value;
         | 
| 559 | 
            -
                            flipflop = false;
         | 
| 560 | 
            -
                            func = pecker[selector.op];
         | 
| 561 | 
            -
                            if (typeof func !== 'function') {
         | 
| 562 | 
            -
                                switch (selector.op) {
         | 
| 563 | 
            -
                                case ':first':
         | 
| 564 | 
            -
                                    result = nodes.slice(0, 1);
         | 
| 565 | 
            -
                                    break;
         | 
| 566 | 
            -
                                case ':rest':
         | 
| 567 | 
            -
                                    result = nodes.slice(1);
         | 
| 568 | 
            -
                                    break;
         | 
| 569 | 
            -
                                default:
         | 
| 570 | 
            -
                                    return error('ADsafe: Query violation: :' + selector.op);
         | 
| 571 | 
            -
                                }
         | 
| 572 | 
            -
                            } else {
         | 
| 573 | 
            -
             | 
| 574 | 
            -
            // For the other selectors, make an array of nodes that are filtered by
         | 
| 575 | 
            -
            // the pecker function.
         | 
| 576 | 
            -
             | 
| 577 | 
            -
                                result = [];
         | 
| 578 | 
            -
                                for (j = 0; j < nodes.length; j += 1) {
         | 
| 579 | 
            -
                                    if (func(nodes[j])) {
         | 
| 580 | 
            -
                                        result.push(nodes[j]);
         | 
| 581 | 
            -
                                    }
         | 
| 582 | 
            -
                                }
         | 
| 583 | 
            -
                            }
         | 
| 584 | 
            -
                        }
         | 
| 585 | 
            -
                        nodes = result;
         | 
| 586 | 
            -
                    }
         | 
| 587 | 
            -
                    return result;
         | 
| 588 | 
            -
                }
         | 
| 589 | 
            -
             | 
| 590 | 
            -
             | 
| 591 | 
            -
                function make_root(root, id) {
         | 
| 592 | 
            -
             | 
| 593 | 
            -
                    if (id) {
         | 
| 594 | 
            -
                        if (root.tagName !== 'DIV') {
         | 
| 595 | 
            -
                            return error('ADsafe: Bad node.');
         | 
| 596 | 
            -
                        }
         | 
| 597 | 
            -
                    } else {
         | 
| 598 | 
            -
                        if (root.tagName !== 'BODY') {
         | 
| 599 | 
            -
                            return error('ADsafe: Bad node.');
         | 
| 600 | 
            -
                        }
         | 
| 601 | 
            -
                    }
         | 
| 602 | 
            -
             | 
| 603 | 
            -
            // A Bunch is a container that holds zero or more dom nodes.
         | 
| 604 | 
            -
            // It has many useful methods.
         | 
| 605 | 
            -
             | 
| 606 | 
            -
                    function Bunch(nodes) {
         | 
| 607 | 
            -
                        this.___nodes___ = nodes;
         | 
| 608 | 
            -
                        this.___star___ = star && nodes.length > 1;
         | 
| 609 | 
            -
                        star = false;
         | 
| 610 | 
            -
                    }
         | 
| 611 | 
            -
             | 
| 612 | 
            -
                    var allow_focus = true,
         | 
| 613 | 
            -
                        dom,
         | 
| 614 | 
            -
                        dom_event = function (e) {
         | 
| 615 | 
            -
                            var key,
         | 
| 616 | 
            -
                                target,
         | 
| 617 | 
            -
                                that,
         | 
| 618 | 
            -
                                the_event,
         | 
| 619 | 
            -
                                the_target,
         | 
| 620 | 
            -
                                the_actual_event = e || event,
         | 
| 621 | 
            -
                                type = the_actual_event.type;
         | 
| 622 | 
            -
             | 
| 623 | 
            -
            // Get the target node and wrap it in a bunch.
         | 
| 624 | 
            -
             | 
| 625 | 
            -
                            the_target = the_actual_event.target ||
         | 
| 626 | 
            -
                                         the_actual_event.srcElement;
         | 
| 627 | 
            -
                            target = new Bunch([the_target]);
         | 
| 628 | 
            -
                            that = target;
         | 
| 629 | 
            -
             | 
| 630 | 
            -
            // Use the PPK hack to make focus bubbly on IE.
         | 
| 631 | 
            -
            // When a widget has focus, it can use the focus method.
         | 
| 632 | 
            -
             | 
| 633 | 
            -
                            switch (type) {
         | 
| 634 | 
            -
                            case 'mousedown':
         | 
| 635 | 
            -
                                allow_focus = true;
         | 
| 636 | 
            -
                                if (document.selection) {
         | 
| 637 | 
            -
                                    the_range = document.selection.createRange();
         | 
| 638 | 
            -
                                }
         | 
| 639 | 
            -
                                break;
         | 
| 640 | 
            -
                            case 'focus':
         | 
| 641 | 
            -
                            case 'focusin':
         | 
| 642 | 
            -
                                allow_focus = true;
         | 
| 643 | 
            -
                                has_focus = the_target;
         | 
| 644 | 
            -
                                the_actual_event.cancelBubble = false;
         | 
| 645 | 
            -
                                type = 'focus';
         | 
| 646 | 
            -
                                break;
         | 
| 647 | 
            -
                            case 'blur':
         | 
| 648 | 
            -
                            case 'focusout':
         | 
| 649 | 
            -
                                allow_focus = false;
         | 
| 650 | 
            -
                                has_focus = null;
         | 
| 651 | 
            -
                                type = 'blur';
         | 
| 652 | 
            -
                                break;
         | 
| 653 | 
            -
                            case 'keypress':
         | 
| 654 | 
            -
                                allow_focus = true;
         | 
| 655 | 
            -
                                has_focus = the_target;
         | 
| 656 | 
            -
                                key = String.fromCharCode(the_actual_event.charCode ||
         | 
| 657 | 
            -
                                        the_actual_event.keyCode);
         | 
| 658 | 
            -
                                switch (key) {
         | 
| 659 | 
            -
                                case '\u000d':
         | 
| 660 | 
            -
                                case '\u000a':
         | 
| 661 | 
            -
                                    type = 'enterkey';
         | 
| 662 | 
            -
                                    break;
         | 
| 663 | 
            -
                                case '\u001b':
         | 
| 664 | 
            -
                                    type = 'escapekey';
         | 
| 665 | 
            -
                                    break;
         | 
| 666 | 
            -
                                }
         | 
| 667 | 
            -
                                break;
         | 
| 668 | 
            -
             | 
| 669 | 
            -
            // This is a workaround for Safari.
         | 
| 670 | 
            -
             | 
| 671 | 
            -
                            case 'click':
         | 
| 672 | 
            -
                                allow_focus = true;
         | 
| 673 | 
            -
                            }
         | 
| 674 | 
            -
                            if (the_actual_event.cancelBubble &&
         | 
| 675 | 
            -
                                    the_actual_event.stopPropagation) {
         | 
| 676 | 
            -
                                the_actual_event.stopPropagation();
         | 
| 677 | 
            -
                            }
         | 
| 678 | 
            -
             | 
| 679 | 
            -
            // Make the event object.
         | 
| 680 | 
            -
             | 
| 681 | 
            -
                            the_event = {
         | 
| 682 | 
            -
                                altKey: the_actual_event.altKey,
         | 
| 683 | 
            -
                                ctrlKey: the_actual_event.ctrlKey,
         | 
| 684 | 
            -
                                bubble: function () {
         | 
| 685 | 
            -
             | 
| 686 | 
            -
            // Bubble up. Get the parent of that node. It becomes the new that.
         | 
| 687 | 
            -
            // getParent throws when bubbling is not possible.
         | 
| 688 | 
            -
             | 
| 689 | 
            -
                                    try {
         | 
| 690 | 
            -
                                        var parent = that.getParent(),
         | 
| 691 | 
            -
                                            b = parent.___nodes___[0];
         | 
| 692 | 
            -
                                        that = parent;
         | 
| 693 | 
            -
                                        the_event.that = that;
         | 
| 694 | 
            -
             | 
| 695 | 
            -
            // If that node has an event handler, fire it. Otherwise, bubble up.
         | 
| 696 | 
            -
             | 
| 697 | 
            -
                                        if (b['___ on ___'] &&
         | 
| 698 | 
            -
                                                b['___ on ___'][type]) {
         | 
| 699 | 
            -
                                            that.fire(the_event);
         | 
| 700 | 
            -
                                        } else {
         | 
| 701 | 
            -
                                            the_event.bubble();
         | 
| 702 | 
            -
                                        }
         | 
| 703 | 
            -
                                    } catch (e) {
         | 
| 704 | 
            -
                                        return error(e);
         | 
| 705 | 
            -
                                    }
         | 
| 706 | 
            -
                                },
         | 
| 707 | 
            -
                                key: key,
         | 
| 708 | 
            -
                                preventDefault: function () {
         | 
| 709 | 
            -
                                    if (the_actual_event.preventDefault) {
         | 
| 710 | 
            -
                                        the_actual_event.preventDefault();
         | 
| 711 | 
            -
                                    }
         | 
| 712 | 
            -
                                    the_actual_event.returnValue = false;
         | 
| 713 | 
            -
                                },
         | 
| 714 | 
            -
                                shiftKey: the_actual_event.shiftKey,
         | 
| 715 | 
            -
                                target: target,
         | 
| 716 | 
            -
                                that: that,
         | 
| 717 | 
            -
                                type: type,
         | 
| 718 | 
            -
                                x: the_actual_event.clientX,
         | 
| 719 | 
            -
                                y: the_actual_event.clientY
         | 
| 720 | 
            -
                            };
         | 
| 721 | 
            -
             | 
| 722 | 
            -
            // If the target has event handlers, then fire them. Otherwise, bubble up.
         | 
| 723 | 
            -
             | 
| 724 | 
            -
                            if (the_target['___ on ___'] &&
         | 
| 725 | 
            -
                                    the_target['___ on ___'][the_event.type]) {
         | 
| 726 | 
            -
                                target.fire(the_event);
         | 
| 727 | 
            -
                            } else {
         | 
| 728 | 
            -
                                for (;;) {
         | 
| 729 | 
            -
                                    the_target = the_target.parentNode;
         | 
| 730 | 
            -
                                    if (!the_target) {
         | 
| 731 | 
            -
                                        break;
         | 
| 732 | 
            -
                                    }
         | 
| 733 | 
            -
                                    if (the_target['___ on ___'] &&
         | 
| 734 | 
            -
                                            the_target['___ on ___'][the_event.type]) {
         | 
| 735 | 
            -
                                        that = new Bunch([the_target]);
         | 
| 736 | 
            -
                                        the_event.that = that;
         | 
| 737 | 
            -
                                        that.fire(the_event);
         | 
| 738 | 
            -
                                        break;
         | 
| 739 | 
            -
                                    }
         | 
| 740 | 
            -
                                    if (the_target['___adsafe root___']) {
         | 
| 741 | 
            -
                                        break;
         | 
| 742 | 
            -
                                    }
         | 
| 743 | 
            -
                                }
         | 
| 744 | 
            -
                            }
         | 
| 745 | 
            -
                            if (the_event.type === 'escapekey') {
         | 
| 746 | 
            -
                                if (ephemeral) {
         | 
| 747 | 
            -
                                    ephemeral.remove();
         | 
| 748 | 
            -
                                }
         | 
| 749 | 
            -
                                ephemeral = null;
         | 
| 750 | 
            -
                            }
         | 
| 751 | 
            -
                            that = the_target = the_event = the_actual_event = null;
         | 
| 752 | 
            -
                            return;
         | 
| 753 | 
            -
                        };
         | 
| 754 | 
            -
             | 
| 755 | 
            -
            // Mark the node as a root. This prevents event bubbling from propogating
         | 
| 756 | 
            -
            // past it.
         | 
| 757 | 
            -
             | 
| 758 | 
            -
                    root['___adsafe root___'] = '___adsafe root___';
         | 
| 759 | 
            -
             | 
| 760 | 
            -
                    Bunch.prototype = {
         | 
| 761 | 
            -
                        append: function (appendage) {
         | 
| 762 | 
            -
                            if (this === this.window) {
         | 
| 763 | 
            -
                                return error();
         | 
| 764 | 
            -
                            }
         | 
| 765 | 
            -
                            var b = this.___nodes___,
         | 
| 766 | 
            -
                                flag = false,
         | 
| 767 | 
            -
                                i,
         | 
| 768 | 
            -
                                j,
         | 
| 769 | 
            -
                                node,
         | 
| 770 | 
            -
                                rep;
         | 
| 771 | 
            -
                            if (b.length === 0 || !appendage) {
         | 
| 772 | 
            -
                                return this;
         | 
| 773 | 
            -
                            }
         | 
| 774 | 
            -
                            if (appendage instanceof Array) {
         | 
| 775 | 
            -
                                if (appendage.length !== b.length) {
         | 
| 776 | 
            -
                                    return error('ADsafe: Array length: ' +
         | 
| 777 | 
            -
                                            b.length + '-' + value.length);
         | 
| 778 | 
            -
                                }
         | 
| 779 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 780 | 
            -
                                    rep = appendage[i].___nodes___;
         | 
| 781 | 
            -
                                    for (j = 0; j < rep.length; j += 1) {
         | 
| 782 | 
            -
                                        b[i].appendChild(rep[j]);
         | 
| 783 | 
            -
                                    }
         | 
| 784 | 
            -
                                }
         | 
| 785 | 
            -
                            } else {
         | 
| 786 | 
            -
                                rep = appendage.___nodes___;
         | 
| 787 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 788 | 
            -
                                    node = b[i];
         | 
| 789 | 
            -
                                    for (j = 0; j < rep.length; j += 1) {
         | 
| 790 | 
            -
                                        node.appendChild(flag ?
         | 
| 791 | 
            -
                                                rep[j].cloneNode(true) : rep[j]);
         | 
| 792 | 
            -
                                    }
         | 
| 793 | 
            -
                                    flag = true;
         | 
| 794 | 
            -
                                }
         | 
| 795 | 
            -
                            }
         | 
| 796 | 
            -
                            return this;
         | 
| 797 | 
            -
                        },
         | 
| 798 | 
            -
                        blur: function () {
         | 
| 799 | 
            -
                            if (this === this.window) {
         | 
| 800 | 
            -
                                return error('ADsafe error.');
         | 
| 801 | 
            -
                            }
         | 
| 802 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 803 | 
            -
                            has_focus = null;
         | 
| 804 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 805 | 
            -
                                node = b[i];
         | 
| 806 | 
            -
                                if (node.blur) {
         | 
| 807 | 
            -
                                    node.blur();
         | 
| 808 | 
            -
                                }
         | 
| 809 | 
            -
                            }
         | 
| 810 | 
            -
                            return this;
         | 
| 811 | 
            -
                        },
         | 
| 812 | 
            -
                        check: function (value) {
         | 
| 813 | 
            -
                            if (this === this.window) {
         | 
| 814 | 
            -
                                return error();
         | 
| 815 | 
            -
                            }
         | 
| 816 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 817 | 
            -
                            if (value instanceof Array) {
         | 
| 818 | 
            -
                                if (value.length !== b.length) {
         | 
| 819 | 
            -
                                    return error('ADsafe: Array length: ' +
         | 
| 820 | 
            -
                                            b.length + '-' + value.length);
         | 
| 821 | 
            -
                                }
         | 
| 822 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 823 | 
            -
                                    node = b[i];
         | 
| 824 | 
            -
                                    if (node.tagName) {
         | 
| 825 | 
            -
                                        node.checked = !!value[i];
         | 
| 826 | 
            -
                                    }
         | 
| 827 | 
            -
                                }
         | 
| 828 | 
            -
                            } else {
         | 
| 829 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 830 | 
            -
                                    node = b[i];
         | 
| 831 | 
            -
                                    if (node.tagName) {
         | 
| 832 | 
            -
                                        node.checked = !!value;
         | 
| 833 | 
            -
                                    }
         | 
| 834 | 
            -
                                }
         | 
| 835 | 
            -
                            }
         | 
| 836 | 
            -
                            return this;
         | 
| 837 | 
            -
                        },
         | 
| 838 | 
            -
                        count: function () {
         | 
| 839 | 
            -
                            return this.___nodes___.length;
         | 
| 840 | 
            -
                        },
         | 
| 841 | 
            -
                        each: function (func) {
         | 
| 842 | 
            -
                            var b = this.___nodes___, i;
         | 
| 843 | 
            -
                            if (this !== this.window && typeof func === 'function') {
         | 
| 844 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 845 | 
            -
                                    func(new Bunch([b[i]]));
         | 
| 846 | 
            -
                                }
         | 
| 847 | 
            -
                                return this;
         | 
| 848 | 
            -
                            }
         | 
| 849 | 
            -
                            return error();
         | 
| 850 | 
            -
                        },
         | 
| 851 | 
            -
                        empty: function () {
         | 
| 852 | 
            -
                            if (this === this.window) {
         | 
| 853 | 
            -
                                return error('ADsafe error.');
         | 
| 854 | 
            -
                            }
         | 
| 855 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 856 | 
            -
                            if (value instanceof Array) {
         | 
| 857 | 
            -
                                if (value.length !== b.length) {
         | 
| 858 | 
            -
                                    return error('ADsafe: Array length: ' +
         | 
| 859 | 
            -
                                            b.length + '-' + value.length);
         | 
| 860 | 
            -
                                }
         | 
| 861 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 862 | 
            -
                                    node = b[i];
         | 
| 863 | 
            -
                                    while (node.firstChild) {
         | 
| 864 | 
            -
                                        purge_event_handlers(node);
         | 
| 865 | 
            -
                                        node.removeChild(node.firstChild);
         | 
| 866 | 
            -
                                    }
         | 
| 867 | 
            -
                                }
         | 
| 868 | 
            -
                            } else {
         | 
| 869 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 870 | 
            -
                                    node = b[i];
         | 
| 871 | 
            -
                                    while (node.firstChild) {
         | 
| 872 | 
            -
                                        purge_event_handlers(node);
         | 
| 873 | 
            -
                                        node.removeChild(node.firstChild);
         | 
| 874 | 
            -
                                    }
         | 
| 875 | 
            -
                                }
         | 
| 876 | 
            -
                            }
         | 
| 877 | 
            -
                            return this;
         | 
| 878 | 
            -
                        },
         | 
| 879 | 
            -
                        enable: function (enable) {
         | 
| 880 | 
            -
                            if (this === this.window) {
         | 
| 881 | 
            -
                                return error('ADsafe error.');
         | 
| 882 | 
            -
                            }
         | 
| 883 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 884 | 
            -
                            if (enable instanceof Array) {
         | 
| 885 | 
            -
                                if (enable.length !== b.length) {
         | 
| 886 | 
            -
                                    return error('ADsafe: Array length: ' +
         | 
| 887 | 
            -
                                            b.length + '-' + enable.length);
         | 
| 888 | 
            -
                                }
         | 
| 889 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 890 | 
            -
                                    node = b[i];
         | 
| 891 | 
            -
                                    if (node.tagName) {
         | 
| 892 | 
            -
                                        node.disabled = !enable[i];
         | 
| 893 | 
            -
                                    }
         | 
| 894 | 
            -
                                }
         | 
| 895 | 
            -
                            } else {
         | 
| 896 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 897 | 
            -
                                    node = b[i];
         | 
| 898 | 
            -
                                    if (node.tagName) {
         | 
| 899 | 
            -
                                        node.disabled = !enable;
         | 
| 900 | 
            -
                                    }
         | 
| 901 | 
            -
                                }
         | 
| 902 | 
            -
                            }
         | 
| 903 | 
            -
                            return this;
         | 
| 904 | 
            -
                        },
         | 
| 905 | 
            -
                        ephemeral: function () {
         | 
| 906 | 
            -
                            if (this === this.window) {
         | 
| 907 | 
            -
                                return error('ADsafe error.');
         | 
| 908 | 
            -
                            }
         | 
| 909 | 
            -
                            if (ephemeral) {
         | 
| 910 | 
            -
                                ephemeral.remove();
         | 
| 911 | 
            -
                            }
         | 
| 912 | 
            -
                            ephemeral = this;
         | 
| 913 | 
            -
                            return this;
         | 
| 914 | 
            -
                        },
         | 
| 915 | 
            -
                        explode: function () {
         | 
| 916 | 
            -
                            var a = [], b = this.___nodes___, i;
         | 
| 917 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 918 | 
            -
                                a[i] = new Bunch([b[i]]);
         | 
| 919 | 
            -
                            }
         | 
| 920 | 
            -
                            return a;
         | 
| 921 | 
            -
                        },
         | 
| 922 | 
            -
                        fire: function (event) {
         | 
| 923 | 
            -
             | 
| 924 | 
            -
                // Fire an event on an object. The event can be either
         | 
| 925 | 
            -
                // a string containing the name of the event, or an
         | 
| 926 | 
            -
                // object containing a type property containing the
         | 
| 927 | 
            -
                // name of the event. Handlers registered by the 'on'
         | 
| 928 | 
            -
                // method that match the event name will be invoked.
         | 
| 929 | 
            -
             | 
| 930 | 
            -
                            var array,
         | 
| 931 | 
            -
                                b,
         | 
| 932 | 
            -
                                i,
         | 
| 933 | 
            -
                                j,
         | 
| 934 | 
            -
                                n,
         | 
| 935 | 
            -
                                node,
         | 
| 936 | 
            -
                                on,
         | 
| 937 | 
            -
                                type;
         | 
| 938 | 
            -
             | 
| 939 | 
            -
                            if (this === this.window) {
         | 
| 940 | 
            -
                                return error();
         | 
| 941 | 
            -
                            }
         | 
| 942 | 
            -
                            if (typeof event === 'string') {
         | 
| 943 | 
            -
                                type = event;
         | 
| 944 | 
            -
                                event = {type: type};
         | 
| 945 | 
            -
                            } else if (typeof event === 'object') {
         | 
| 946 | 
            -
                                type = event.type;
         | 
| 947 | 
            -
                            } else {
         | 
| 948 | 
            -
                                return error();
         | 
| 949 | 
            -
                            }
         | 
| 950 | 
            -
                            b = this.___nodes___;
         | 
| 951 | 
            -
                            n = b.length;
         | 
| 952 | 
            -
                            for (i = 0; i < n; i += 1) {
         | 
| 953 | 
            -
                                node = b[i];
         | 
| 954 | 
            -
                                on = node['___ on ___'];
         | 
| 955 | 
            -
             | 
| 956 | 
            -
                // If an array of handlers exist for this event, then
         | 
| 957 | 
            -
                // loop through it and execute the handlers in order.
         | 
| 958 | 
            -
             | 
| 959 | 
            -
                                if (on && on.hasOwnProperty(type)) {
         | 
| 960 | 
            -
                                    array = on[type];
         | 
| 961 | 
            -
                                    for (j = 0; j < array.length; j += 1) {
         | 
| 962 | 
            -
             | 
| 963 | 
            -
                // Invoke a handler. Pass the event object.
         | 
| 964 | 
            -
             | 
| 965 | 
            -
                                        array[j].call(this, event);
         | 
| 966 | 
            -
                                    }
         | 
| 967 | 
            -
                                }
         | 
| 968 | 
            -
                            }
         | 
| 969 | 
            -
                            return this;
         | 
| 970 | 
            -
                        },
         | 
| 971 | 
            -
                        focus: function () {
         | 
| 972 | 
            -
                            var b = this.___nodes___;
         | 
| 973 | 
            -
                            if (this !== this.window) {
         | 
| 974 | 
            -
                                if (b.length === 1 && allow_focus) {
         | 
| 975 | 
            -
                                    has_focus = b[0].focus();
         | 
| 976 | 
            -
                                    return this;
         | 
| 977 | 
            -
                                }
         | 
| 978 | 
            -
                            }
         | 
| 979 | 
            -
                            return error();
         | 
| 980 | 
            -
                        },
         | 
| 981 | 
            -
                        fragment: function () {
         | 
| 982 | 
            -
                            return new Bunch([document.createDocumentFragment()]);
         | 
| 983 | 
            -
                        },
         | 
| 984 | 
            -
                        getCheck: function () {
         | 
| 985 | 
            -
                            var a = [], b = this.___nodes___, i;
         | 
| 986 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 987 | 
            -
                                a[i] = b[i].checked;
         | 
| 988 | 
            -
                            }
         | 
| 989 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 990 | 
            -
                        },
         | 
| 991 | 
            -
                        getClass: function () {
         | 
| 992 | 
            -
                            var a = [], b = this.___nodes___, i;
         | 
| 993 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 994 | 
            -
                                a[i] = b[i].className;
         | 
| 995 | 
            -
                            }
         | 
| 996 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 997 | 
            -
                        },
         | 
| 998 | 
            -
                        getMark: function () {
         | 
| 999 | 
            -
                            var a = [], b = this.___nodes___, i;
         | 
| 1000 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1001 | 
            -
                                a[i] = b[i]['_adsafe mark_'];
         | 
| 1002 | 
            -
                            }
         | 
| 1003 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 1004 | 
            -
                        },
         | 
| 1005 | 
            -
                        getName: function () {
         | 
| 1006 | 
            -
                            var a = [], b = this.___nodes___, i;
         | 
| 1007 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1008 | 
            -
                                a[i] = b[i].name;
         | 
| 1009 | 
            -
                            }
         | 
| 1010 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 1011 | 
            -
                        },
         | 
| 1012 | 
            -
                        getOffsetHeight: function () {
         | 
| 1013 | 
            -
                            var a = [], b = this.___nodes___, i;
         | 
| 1014 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1015 | 
            -
                                a[i] = b[i].offsetHeight;
         | 
| 1016 | 
            -
                            }
         | 
| 1017 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 1018 | 
            -
                        },
         | 
| 1019 | 
            -
                        getOffsetWidth: function () {
         | 
| 1020 | 
            -
                            var a = [], b = this.___nodes___, i;
         | 
| 1021 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1022 | 
            -
                                a[i] = b[i].offsetWidth;
         | 
| 1023 | 
            -
                            }
         | 
| 1024 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 1025 | 
            -
                        },
         | 
| 1026 | 
            -
                        getParent: function () {
         | 
| 1027 | 
            -
                            var a = [], b = this.___nodes___, i, n;
         | 
| 1028 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1029 | 
            -
                                n = b[i].parentNode;
         | 
| 1030 | 
            -
                                if (n['___adsafe root___']) {
         | 
| 1031 | 
            -
                                    return error('ADsafe parent violation.');
         | 
| 1032 | 
            -
                                }
         | 
| 1033 | 
            -
                                a[i] = n;
         | 
| 1034 | 
            -
                            }
         | 
| 1035 | 
            -
                            return new Bunch(a);
         | 
| 1036 | 
            -
                        },
         | 
| 1037 | 
            -
                        getSelection: function () {
         | 
| 1038 | 
            -
                            if (this === this.window) {
         | 
| 1039 | 
            -
                                return error();
         | 
| 1040 | 
            -
                            }
         | 
| 1041 | 
            -
                            var b = this.___nodes___, end, node, start, range;
         | 
| 1042 | 
            -
                            if (b.length === 1 && allow_focus) {
         | 
| 1043 | 
            -
                                node = b[0];
         | 
| 1044 | 
            -
                                if (typeof node.selectionStart === 'number') {
         | 
| 1045 | 
            -
                                    start = node.selectionStart;
         | 
| 1046 | 
            -
                                    end = node.selectionEnd;
         | 
| 1047 | 
            -
                                    return node.value.slice(start, end);
         | 
| 1048 | 
            -
                                } else {
         | 
| 1049 | 
            -
                                    range = node.createTextRange();
         | 
| 1050 | 
            -
                                    range.expand('textedit');
         | 
| 1051 | 
            -
                                    if (range.inRange(the_range)) {
         | 
| 1052 | 
            -
                                        return the_range.text;
         | 
| 1053 | 
            -
                                    }
         | 
| 1054 | 
            -
                                }
         | 
| 1055 | 
            -
                            }
         | 
| 1056 | 
            -
                            return null;
         | 
| 1057 | 
            -
                        },
         | 
| 1058 | 
            -
                        getStyle: function (name) {
         | 
| 1059 | 
            -
                            var a = [], b = this.___nodes___, i, node, s;
         | 
| 1060 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1061 | 
            -
                                node = b[i];
         | 
| 1062 | 
            -
                                if (node.tagName) {
         | 
| 1063 | 
            -
                                    s = name !== 'float' ? getStyleObject(node)[name] :
         | 
| 1064 | 
            -
            								getStyleObject(node).cssFloat ||
         | 
| 1065 | 
            -
                                            getStyleObject(node).styleFloat;
         | 
| 1066 | 
            -
            						if (typeof s === 'string') {
         | 
| 1067 | 
            -
            							a[i] = s;
         | 
| 1068 | 
            -
            						}
         | 
| 1069 | 
            -
                                }
         | 
| 1070 | 
            -
                            }
         | 
| 1071 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 1072 | 
            -
                        },
         | 
| 1073 | 
            -
                        getTagName: function () {
         | 
| 1074 | 
            -
                            var a = [], b = this.___nodes___, i, name;
         | 
| 1075 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1076 | 
            -
                                name = b[i].tagName;
         | 
| 1077 | 
            -
                                a[i] = typeof name === 'string' ? name.toLowerCase() : name;
         | 
| 1078 | 
            -
                            }
         | 
| 1079 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 1080 | 
            -
                        },
         | 
| 1081 | 
            -
                        getTitle: function () {
         | 
| 1082 | 
            -
                            var a = [], b = this.___nodes___, i;
         | 
| 1083 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1084 | 
            -
                                a[i] = b[i].title;
         | 
| 1085 | 
            -
                            }
         | 
| 1086 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 1087 | 
            -
                        },
         | 
| 1088 | 
            -
                        getValue: function () {
         | 
| 1089 | 
            -
                            var a = [], b = this.___nodes___, i, node;
         | 
| 1090 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1091 | 
            -
                                node = b[i];
         | 
| 1092 | 
            -
                                if (node.nodeName === '#text') {
         | 
| 1093 | 
            -
                                    a[i] = node.nodeValue;
         | 
| 1094 | 
            -
                                } else if (node.tagName && node.type !== 'password') {
         | 
| 1095 | 
            -
                                    a[i] = node.value;
         | 
| 1096 | 
            -
                                    if (a[i] === undefined && node.firstChild &&
         | 
| 1097 | 
            -
                                            node.firstChild.nodeName === '#text') {
         | 
| 1098 | 
            -
                                        a[i] = node.firstChild.nodeValue;
         | 
| 1099 | 
            -
                                    }
         | 
| 1100 | 
            -
                                }
         | 
| 1101 | 
            -
                            }
         | 
| 1102 | 
            -
                            return a.length === 1 ? a[0] : a;
         | 
| 1103 | 
            -
                        },
         | 
| 1104 | 
            -
                        klass: function (value) {
         | 
| 1105 | 
            -
                            if (this === this.window || /url/i.test(value)) {
         | 
| 1106 | 
            -
                                return error('ADsafe error.');
         | 
| 1107 | 
            -
                            }
         | 
| 1108 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 1109 | 
            -
                            if (value instanceof Array) {
         | 
| 1110 | 
            -
                                if (value.length !== b.length) {
         | 
| 1111 | 
            -
                                    return error('ADsafe: Array length: ' +
         | 
| 1112 | 
            -
                                            b.length + '-' + value.length);
         | 
| 1113 | 
            -
                                }
         | 
| 1114 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1115 | 
            -
                                    node = b[i];
         | 
| 1116 | 
            -
                                    if (node.tagName) {
         | 
| 1117 | 
            -
                                        node.className = String(value[i]);
         | 
| 1118 | 
            -
                                    }
         | 
| 1119 | 
            -
                                }
         | 
| 1120 | 
            -
                            } else {
         | 
| 1121 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1122 | 
            -
                                    node = b[i];
         | 
| 1123 | 
            -
                                    if (node.tagName) {
         | 
| 1124 | 
            -
                                        node.className = String(value);
         | 
| 1125 | 
            -
                                    }
         | 
| 1126 | 
            -
                                }
         | 
| 1127 | 
            -
                            }
         | 
| 1128 | 
            -
                            return this;
         | 
| 1129 | 
            -
                        },
         | 
| 1130 | 
            -
                        mark: function (value) {
         | 
| 1131 | 
            -
                            if (this === this.window || /url/i.test(value)) {
         | 
| 1132 | 
            -
                                return error('ADsafe error.');
         | 
| 1133 | 
            -
                            }
         | 
| 1134 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 1135 | 
            -
                            if (value instanceof Array) {
         | 
| 1136 | 
            -
                                if (value.length !== b.length) {
         | 
| 1137 | 
            -
                                    return error('ADsafe: Array length: ' +
         | 
| 1138 | 
            -
                                            b.length + '-' + value.length);
         | 
| 1139 | 
            -
                                }
         | 
| 1140 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1141 | 
            -
                                    node = b[i];
         | 
| 1142 | 
            -
                                    if (node.tagName) {
         | 
| 1143 | 
            -
                                        node['_adsafe mark_'] = value[i];
         | 
| 1144 | 
            -
                                    }
         | 
| 1145 | 
            -
                                }
         | 
| 1146 | 
            -
                            } else {
         | 
| 1147 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1148 | 
            -
                                    node = b[i];
         | 
| 1149 | 
            -
                                    if (node.tagName) {
         | 
| 1150 | 
            -
                                        node['_adsafe mark_'] = value;
         | 
| 1151 | 
            -
                                    }
         | 
| 1152 | 
            -
                                }
         | 
| 1153 | 
            -
                            }
         | 
| 1154 | 
            -
                            return this;
         | 
| 1155 | 
            -
                        },
         | 
| 1156 | 
            -
                        off: function (type) {
         | 
| 1157 | 
            -
                            if (this === this.window) {
         | 
| 1158 | 
            -
                                return error();
         | 
| 1159 | 
            -
                            }
         | 
| 1160 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 1161 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1162 | 
            -
                                node = b[i];
         | 
| 1163 | 
            -
                                if (typeof type === 'string') {
         | 
| 1164 | 
            -
                                    if (typeof node['___ on ___']) {
         | 
| 1165 | 
            -
                                        node['___ on ___'][type] = null;
         | 
| 1166 | 
            -
                                    }
         | 
| 1167 | 
            -
                                } else {
         | 
| 1168 | 
            -
                                    node['___ on ___'] = null;
         | 
| 1169 | 
            -
                                }
         | 
| 1170 | 
            -
                            }
         | 
| 1171 | 
            -
                            return this;
         | 
| 1172 | 
            -
                        },
         | 
| 1173 | 
            -
                        on: function (type, func) {
         | 
| 1174 | 
            -
                            if (this === this.window || typeof type !== 'string' ||
         | 
| 1175 | 
            -
                                    typeof func !== 'function') {
         | 
| 1176 | 
            -
                                return error();
         | 
| 1177 | 
            -
                            }
         | 
| 1178 | 
            -
             | 
| 1179 | 
            -
                            var b = this.___nodes___, i, node, on, ontype;
         | 
| 1180 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1181 | 
            -
                                node = b[i];
         | 
| 1182 | 
            -
             | 
| 1183 | 
            -
            // The change event does not propogate, so we must put the handler on the
         | 
| 1184 | 
            -
            // instance.
         | 
| 1185 | 
            -
             | 
| 1186 | 
            -
                                if (type === 'change') {
         | 
| 1187 | 
            -
                                    ontype = 'on' + type;
         | 
| 1188 | 
            -
                                    if (node[ontype] !== dom_event) {
         | 
| 1189 | 
            -
                                        node[ontype] = dom_event;
         | 
| 1190 | 
            -
                                    }
         | 
| 1191 | 
            -
                                }
         | 
| 1192 | 
            -
             | 
| 1193 | 
            -
            // Register an event. Put the function in a handler array, making one if it
         | 
| 1194 | 
            -
            // doesn't yet exist for this type on this node.
         | 
| 1195 | 
            -
             | 
| 1196 | 
            -
                                on = node['___ on ___'];
         | 
| 1197 | 
            -
                                if (!on) {
         | 
| 1198 | 
            -
                                    on = {};
         | 
| 1199 | 
            -
                                    node['___ on ___'] = on;
         | 
| 1200 | 
            -
                                }
         | 
| 1201 | 
            -
                                if (on.hasOwnProperty(type)) {
         | 
| 1202 | 
            -
                                    on[type].push(func);
         | 
| 1203 | 
            -
                                } else {
         | 
| 1204 | 
            -
                                    on[type] = [func];
         | 
| 1205 | 
            -
                                }
         | 
| 1206 | 
            -
                            }
         | 
| 1207 | 
            -
                            return this;
         | 
| 1208 | 
            -
                        },
         | 
| 1209 | 
            -
                        protect: function () {
         | 
| 1210 | 
            -
                            if (this === this.window) {
         | 
| 1211 | 
            -
                                return error('ADsafe error.');
         | 
| 1212 | 
            -
                            }
         | 
| 1213 | 
            -
                            var b = this.___nodes___, i;
         | 
| 1214 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1215 | 
            -
                                b[i]['___adsafe root___'] = '___adsafe root___';
         | 
| 1216 | 
            -
                            }
         | 
| 1217 | 
            -
                            return this;
         | 
| 1218 | 
            -
                        },
         | 
| 1219 | 
            -
                        q: function (text) {
         | 
| 1220 | 
            -
                            star = this.___star___;
         | 
| 1221 | 
            -
                            return new Bunch(quest(parse_query(text, id), this.___nodes___));
         | 
| 1222 | 
            -
                        },
         | 
| 1223 | 
            -
                        remove: function () {
         | 
| 1224 | 
            -
                            this.replace();
         | 
| 1225 | 
            -
                        },
         | 
| 1226 | 
            -
                        replace: function (replacement) {
         | 
| 1227 | 
            -
                            if (this === this.window) {
         | 
| 1228 | 
            -
                                return error();
         | 
| 1229 | 
            -
                            }
         | 
| 1230 | 
            -
                            var b = this.___nodes___,
         | 
| 1231 | 
            -
                                flag = false,
         | 
| 1232 | 
            -
                                i,
         | 
| 1233 | 
            -
                                j,
         | 
| 1234 | 
            -
                                newnode,
         | 
| 1235 | 
            -
                                node,
         | 
| 1236 | 
            -
                                parent,
         | 
| 1237 | 
            -
                                rep;
         | 
| 1238 | 
            -
                            if (b.length === 0) {
         | 
| 1239 | 
            -
                                return;
         | 
| 1240 | 
            -
                            }
         | 
| 1241 | 
            -
                            purge_event_handlers(b);
         | 
| 1242 | 
            -
                            if (!replacement ||
         | 
| 1243 | 
            -
                                    replacement.length === 0 ||
         | 
| 1244 | 
            -
                                    replacement.___nodes___.length === 0) {
         | 
| 1245 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1246 | 
            -
                                    node = b[i];
         | 
| 1247 | 
            -
                                    purge_event_handlers(node);
         | 
| 1248 | 
            -
                                    if (node.parentNode) {
         | 
| 1249 | 
            -
                                        node.parentNode.removeChild(node);
         | 
| 1250 | 
            -
                                    }
         | 
| 1251 | 
            -
                                }
         | 
| 1252 | 
            -
                            } else if (replacement instanceof Array) {
         | 
| 1253 | 
            -
                                if (replacement.length !== b.length) {
         | 
| 1254 | 
            -
                                    return error('ADsafe: Array length: ' +
         | 
| 1255 | 
            -
                                            b.length + '-' + value.length);
         | 
| 1256 | 
            -
                                }
         | 
| 1257 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1258 | 
            -
                                    node = b[i];
         | 
| 1259 | 
            -
                                    parent = node.parentNode;
         | 
| 1260 | 
            -
                                    purge_event_handlers(node);
         | 
| 1261 | 
            -
                                    if (parent) {
         | 
| 1262 | 
            -
                                        rep = replacement[i].___nodes___;
         | 
| 1263 | 
            -
                                        if (rep.length > 0) {
         | 
| 1264 | 
            -
                                            newnode = rep[0];
         | 
| 1265 | 
            -
                                            parent.replaceNode(newnode);
         | 
| 1266 | 
            -
                                            for (j = 1; j < rep.length; j += 1) {
         | 
| 1267 | 
            -
                                                node = newnode;
         | 
| 1268 | 
            -
                                                newnode = rep[j];
         | 
| 1269 | 
            -
                                                parent.insertBefore(newnode, node.nextSibling);
         | 
| 1270 | 
            -
                                            }
         | 
| 1271 | 
            -
                                        } else {
         | 
| 1272 | 
            -
                                            parent.removeChild(node);
         | 
| 1273 | 
            -
                                        }
         | 
| 1274 | 
            -
                                    }
         | 
| 1275 | 
            -
                                }
         | 
| 1276 | 
            -
                            } else {
         | 
| 1277 | 
            -
                                rep = replacement.___nodes___;
         | 
| 1278 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1279 | 
            -
                                    node = b[i];
         | 
| 1280 | 
            -
                                    purge_event_handlers(node);
         | 
| 1281 | 
            -
                                    if (node.parentNode) {
         | 
| 1282 | 
            -
                                        newnode = flag ? rep[0].cloneNode(true) : rep[0];
         | 
| 1283 | 
            -
                                        parent.replaceNode(newnode);
         | 
| 1284 | 
            -
                                        for (j = 1; j < rep.length; j += 1) {
         | 
| 1285 | 
            -
                                            node = newnode;
         | 
| 1286 | 
            -
                                            newnode = flag ? rep[j].clone(true) : rep[j];
         | 
| 1287 | 
            -
                                            parent.insertBefore(newnode, node.nextSibling);
         | 
| 1288 | 
            -
                                        }
         | 
| 1289 | 
            -
                                        flag = true;
         | 
| 1290 | 
            -
                                    }
         | 
| 1291 | 
            -
                                }
         | 
| 1292 | 
            -
                            }
         | 
| 1293 | 
            -
                            return this;
         | 
| 1294 | 
            -
                        },
         | 
| 1295 | 
            -
                        select: function () {
         | 
| 1296 | 
            -
                            if (this === this.window) {
         | 
| 1297 | 
            -
                                return error();
         | 
| 1298 | 
            -
                            }
         | 
| 1299 | 
            -
                            var b = this.___nodes___;
         | 
| 1300 | 
            -
                            if (b.length !== 1 || !allow_focus) {
         | 
| 1301 | 
            -
                                return error();
         | 
| 1302 | 
            -
                            }
         | 
| 1303 | 
            -
                            b[0].focus();
         | 
| 1304 | 
            -
                            b[0].select();
         | 
| 1305 | 
            -
                            return this;
         | 
| 1306 | 
            -
                        },
         | 
| 1307 | 
            -
                        selection: function (string) {
         | 
| 1308 | 
            -
                            if (this === this.window) {
         | 
| 1309 | 
            -
                                return error();
         | 
| 1310 | 
            -
                            }
         | 
| 1311 | 
            -
                            var b = this.___nodes___, end, node, old, start, range;
         | 
| 1312 | 
            -
                            if (b.length === 1 && allow_focus) {
         | 
| 1313 | 
            -
                                node = b[0];
         | 
| 1314 | 
            -
                                if (typeof node.selectionStart === 'number') {
         | 
| 1315 | 
            -
                                    start = node.selectionStart;
         | 
| 1316 | 
            -
                                    end = node.selectionEnd;
         | 
| 1317 | 
            -
                                    old = node.value;
         | 
| 1318 | 
            -
                                    node.value = old.slice(0, start) + string + old.slice(end);
         | 
| 1319 | 
            -
                                    node.selectionStart = node.selectionEnd = start +
         | 
| 1320 | 
            -
                                        string.length;
         | 
| 1321 | 
            -
                                    node.focus();
         | 
| 1322 | 
            -
                                } else {
         | 
| 1323 | 
            -
                                    range = node.createTextRange();
         | 
| 1324 | 
            -
                                    range.expand('textedit');
         | 
| 1325 | 
            -
                                    if (range.inRange(the_range)) {
         | 
| 1326 | 
            -
                                        the_range.select();
         | 
| 1327 | 
            -
                                        the_range.text = string;
         | 
| 1328 | 
            -
                                        the_range.select();
         | 
| 1329 | 
            -
                                    }
         | 
| 1330 | 
            -
                                }
         | 
| 1331 | 
            -
                            }
         | 
| 1332 | 
            -
                            return this;
         | 
| 1333 | 
            -
                        },
         | 
| 1334 | 
            -
                        style: function (name, value) {
         | 
| 1335 | 
            -
                            if (this === this.window ||
         | 
| 1336 | 
            -
                                    value === undefined || /url/i.test(value)) {
         | 
| 1337 | 
            -
                                return error();
         | 
| 1338 | 
            -
                            }
         | 
| 1339 | 
            -
                            var b = this.___nodes___,
         | 
| 1340 | 
            -
                                i,
         | 
| 1341 | 
            -
                                node,
         | 
| 1342 | 
            -
            					v;
         | 
| 1343 | 
            -
                            if (value instanceof Array) {
         | 
| 1344 | 
            -
                                if (value.length !== b.length) {
         | 
| 1345 | 
            -
                                    return error('ADsafe: Array length: ' +
         | 
| 1346 | 
            -
                                            b.length + '-' + value.length);
         | 
| 1347 | 
            -
                                }
         | 
| 1348 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1349 | 
            -
                                    node = b[i];
         | 
| 1350 | 
            -
            						v = String(value[i]);
         | 
| 1351 | 
            -
                                    if (node.tagName) {
         | 
| 1352 | 
            -
                                        if (name !== 'float') {
         | 
| 1353 | 
            -
                                            node.style[name] = v;
         | 
| 1354 | 
            -
                                        } else {
         | 
| 1355 | 
            -
                                            node.style.cssFloat = node.style.styleFloat = v;
         | 
| 1356 | 
            -
                                        }
         | 
| 1357 | 
            -
                                    }
         | 
| 1358 | 
            -
                                }
         | 
| 1359 | 
            -
                            } else {
         | 
| 1360 | 
            -
            					v = String(value);
         | 
| 1361 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1362 | 
            -
                                    node = b[i];
         | 
| 1363 | 
            -
                                    if (node.tagName) {
         | 
| 1364 | 
            -
                                        if (name !== 'float') {
         | 
| 1365 | 
            -
                                            node.style[name] = v;
         | 
| 1366 | 
            -
                                        } else {
         | 
| 1367 | 
            -
                                            node.style.cssFloat = node.style.styleFloat = v;
         | 
| 1368 | 
            -
                                        }
         | 
| 1369 | 
            -
                                    }
         | 
| 1370 | 
            -
                                }
         | 
| 1371 | 
            -
                            }
         | 
| 1372 | 
            -
                            return this;
         | 
| 1373 | 
            -
                        },
         | 
| 1374 | 
            -
                        tag: function (tag, type, name) {
         | 
| 1375 | 
            -
                            var node;
         | 
| 1376 | 
            -
                            if (typeof tag !== 'string') {
         | 
| 1377 | 
            -
                                return error();
         | 
| 1378 | 
            -
                            }
         | 
| 1379 | 
            -
                            if (makeableTagName[tag] !== true) {
         | 
| 1380 | 
            -
                                return error('ADsafe: Bad tag: ' + tag);
         | 
| 1381 | 
            -
                            }
         | 
| 1382 | 
            -
                            node = document.createElement(tag);
         | 
| 1383 | 
            -
                            if (name) {
         | 
| 1384 | 
            -
                                node.autocomplete = 'off';
         | 
| 1385 | 
            -
                                node.name = name;
         | 
| 1386 | 
            -
                            }
         | 
| 1387 | 
            -
                            if (type) {
         | 
| 1388 | 
            -
                                node.type = type;
         | 
| 1389 | 
            -
                            }
         | 
| 1390 | 
            -
                            return new Bunch([node]);
         | 
| 1391 | 
            -
                        },
         | 
| 1392 | 
            -
                        text: function (text) {
         | 
| 1393 | 
            -
                            var a, i;
         | 
| 1394 | 
            -
                            if (text instanceof Array) {
         | 
| 1395 | 
            -
                                a = [];
         | 
| 1396 | 
            -
                                for (i = 0; i < text.length; i += 1) {
         | 
| 1397 | 
            -
                                    a[i] = document.createTextNode(String(text[i]));
         | 
| 1398 | 
            -
                                }
         | 
| 1399 | 
            -
                                return new Bunch(a);
         | 
| 1400 | 
            -
                            }
         | 
| 1401 | 
            -
                            return new Bunch([document.createTextNode(String(text))]);
         | 
| 1402 | 
            -
                        },
         | 
| 1403 | 
            -
                        title: function (value) {
         | 
| 1404 | 
            -
                            if (this === this.window) {
         | 
| 1405 | 
            -
                                return error('ADsafe error.');
         | 
| 1406 | 
            -
                            }
         | 
| 1407 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 1408 | 
            -
                            if (value instanceof Array) {
         | 
| 1409 | 
            -
                                if (value.length !== b.length) {
         | 
| 1410 | 
            -
                                    return error('ADsafe: Array length: ' + b.length +
         | 
| 1411 | 
            -
                                            '-' + value.length);
         | 
| 1412 | 
            -
                                }
         | 
| 1413 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1414 | 
            -
                                    node = b[i];
         | 
| 1415 | 
            -
                                    if (node.tagName) {
         | 
| 1416 | 
            -
                                        node.title = String(value[i]);
         | 
| 1417 | 
            -
                                    }
         | 
| 1418 | 
            -
                                }
         | 
| 1419 | 
            -
                            } else {
         | 
| 1420 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1421 | 
            -
                                    node = b[i];
         | 
| 1422 | 
            -
                                    if (node.tagName) {
         | 
| 1423 | 
            -
                                        node.title = String(value);
         | 
| 1424 | 
            -
                                    }
         | 
| 1425 | 
            -
                                }
         | 
| 1426 | 
            -
                            }
         | 
| 1427 | 
            -
                            return this;
         | 
| 1428 | 
            -
                        },
         | 
| 1429 | 
            -
                        value: function (value) {
         | 
| 1430 | 
            -
                            if (this === this.window || value === undefined) {
         | 
| 1431 | 
            -
                                return error();
         | 
| 1432 | 
            -
                            }
         | 
| 1433 | 
            -
                            var b = this.___nodes___, i, node;
         | 
| 1434 | 
            -
                            if (value instanceof Array && b.length === value.length) {
         | 
| 1435 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1436 | 
            -
                                    node = b[i];
         | 
| 1437 | 
            -
                                    if (node.tagName) {
         | 
| 1438 | 
            -
                                        if (node.type !== 'password') {
         | 
| 1439 | 
            -
                                            if (typeof node.value === 'string') {
         | 
| 1440 | 
            -
                                                node.value = value[i];
         | 
| 1441 | 
            -
                                            } else {
         | 
| 1442 | 
            -
                                                while (node.firstChild) {
         | 
| 1443 | 
            -
                                                    purge_event_handlers(node);
         | 
| 1444 | 
            -
                                                    node.removeChild(node.firstChild);
         | 
| 1445 | 
            -
                                                }
         | 
| 1446 | 
            -
                                                node.appendChild(document.createTextNode(
         | 
| 1447 | 
            -
                                                    String(value[i])));
         | 
| 1448 | 
            -
                                            }
         | 
| 1449 | 
            -
                                        }
         | 
| 1450 | 
            -
                                    } else if (node.nodeName === '#text') {
         | 
| 1451 | 
            -
                                        node.nodeValue = String(value[i]);
         | 
| 1452 | 
            -
                                    }
         | 
| 1453 | 
            -
                                }
         | 
| 1454 | 
            -
                            } else {
         | 
| 1455 | 
            -
                                for (i = 0; i < b.length; i += 1) {
         | 
| 1456 | 
            -
                                    node = b[i];
         | 
| 1457 | 
            -
                                    if (node.tagName) {
         | 
| 1458 | 
            -
                                        if (typeof node.value === 'string') {
         | 
| 1459 | 
            -
                                            node.value = value;
         | 
| 1460 | 
            -
                                        } else {
         | 
| 1461 | 
            -
                                            while (node.firstChild) {
         | 
| 1462 | 
            -
                                                purge_event_handlers(node);
         | 
| 1463 | 
            -
                                                node.removeChild(node.firstChild);
         | 
| 1464 | 
            -
                                            }
         | 
| 1465 | 
            -
                                            node.appendChild(document.createTextNode(
         | 
| 1466 | 
            -
                                                String(value)));
         | 
| 1467 | 
            -
                                        }
         | 
| 1468 | 
            -
                                    } else if (node.nodeName === '#text') {
         | 
| 1469 | 
            -
                                        node.nodeValue = String(value);
         | 
| 1470 | 
            -
                                    }
         | 
| 1471 | 
            -
                                }
         | 
| 1472 | 
            -
                            }
         | 
| 1473 | 
            -
                            return this;
         | 
| 1474 | 
            -
                        }
         | 
| 1475 | 
            -
                    };
         | 
| 1476 | 
            -
             | 
| 1477 | 
            -
            // Return an ADsafe dom object.
         | 
| 1478 | 
            -
             | 
| 1479 | 
            -
                    dom = {
         | 
| 1480 | 
            -
                        append: function (bunch) {
         | 
| 1481 | 
            -
                            var b = bunch.___nodes___, i, n;
         | 
| 1482 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1483 | 
            -
                                n = b[i];
         | 
| 1484 | 
            -
                                if (typeof n === 'string' || typeof n === 'number') {
         | 
| 1485 | 
            -
                                    n = document.createTextNode(String(n));
         | 
| 1486 | 
            -
                                }
         | 
| 1487 | 
            -
                                root.appendChild(n);
         | 
| 1488 | 
            -
                            }
         | 
| 1489 | 
            -
                            return dom;
         | 
| 1490 | 
            -
                        },
         | 
| 1491 | 
            -
                        combine: function (array) {
         | 
| 1492 | 
            -
                            if (!array || !array.length) {
         | 
| 1493 | 
            -
                                return error('ADsafe: Bad combination.');
         | 
| 1494 | 
            -
                            }
         | 
| 1495 | 
            -
                            var b = array[0].___nodes___, i;
         | 
| 1496 | 
            -
                            for (i = i; i < array.length; i += 1) {
         | 
| 1497 | 
            -
                                b = b.concat(array[i].___nodes___);
         | 
| 1498 | 
            -
                            }
         | 
| 1499 | 
            -
                            return new Bunch(b);
         | 
| 1500 | 
            -
                        },
         | 
| 1501 | 
            -
                        count: function () {
         | 
| 1502 | 
            -
                            return 1;
         | 
| 1503 | 
            -
                        },
         | 
| 1504 | 
            -
                        ephemeral: function (bunch) {
         | 
| 1505 | 
            -
                            if (ephemeral) {
         | 
| 1506 | 
            -
                                ephemeral.remove();
         | 
| 1507 | 
            -
                            }
         | 
| 1508 | 
            -
                            ephemeral = bunch;
         | 
| 1509 | 
            -
                            return dom;
         | 
| 1510 | 
            -
                        },
         | 
| 1511 | 
            -
                        fragment: function () {
         | 
| 1512 | 
            -
                            return new Bunch([document.createDocumentFragment()]);
         | 
| 1513 | 
            -
                        },
         | 
| 1514 | 
            -
                        prepend: function (bunch) {
         | 
| 1515 | 
            -
                            var b = bunch.___nodes___, i;
         | 
| 1516 | 
            -
                            for (i = 0; i < b.length; i += 1) {
         | 
| 1517 | 
            -
                                root.insertBefore(b[i], root.firstChild);
         | 
| 1518 | 
            -
                            }
         | 
| 1519 | 
            -
                            return dom;
         | 
| 1520 | 
            -
                        },
         | 
| 1521 | 
            -
                        q: function (text) {
         | 
| 1522 | 
            -
                            star = false;
         | 
| 1523 | 
            -
                            var query = parse_query(text, id);
         | 
| 1524 | 
            -
                            if (typeof hunter[query[0].op] !== 'function') {
         | 
| 1525 | 
            -
                                return error('ADsafe: Bad query: ' + query[0]);
         | 
| 1526 | 
            -
                            }
         | 
| 1527 | 
            -
                            return new Bunch(quest(query, [root]));
         | 
| 1528 | 
            -
                        },
         | 
| 1529 | 
            -
                        remove: function () {
         | 
| 1530 | 
            -
                            purge_event_handlers(root);
         | 
| 1531 | 
            -
                            root.parent.removeElement(root);
         | 
| 1532 | 
            -
                            root = null;
         | 
| 1533 | 
            -
                        },
         | 
| 1534 | 
            -
                        row: function (values) {
         | 
| 1535 | 
            -
                            var tr = document.createElement('tr'),
         | 
| 1536 | 
            -
                                td,
         | 
| 1537 | 
            -
                                i;
         | 
| 1538 | 
            -
                            for (i = 0; i < values.length; i += 1) {
         | 
| 1539 | 
            -
                                td = document.createElement('td');
         | 
| 1540 | 
            -
                                td.appendChild(document.createTextNode(String(values[i])));
         | 
| 1541 | 
            -
                                tr.appendChild(td);
         | 
| 1542 | 
            -
                            }
         | 
| 1543 | 
            -
                            return new Bunch([tr]);
         | 
| 1544 | 
            -
                        },
         | 
| 1545 | 
            -
                        tag: function (tag, type, name) {
         | 
| 1546 | 
            -
                            var node;
         | 
| 1547 | 
            -
                            if (typeof tag !== 'string') {
         | 
| 1548 | 
            -
                                return error();
         | 
| 1549 | 
            -
                            }
         | 
| 1550 | 
            -
                            if (makeableTagName[tag] !== true) {
         | 
| 1551 | 
            -
                                return error('ADsafe: Bad tag: ' + tag);
         | 
| 1552 | 
            -
                            }
         | 
| 1553 | 
            -
                            node = document.createElement(tag);
         | 
| 1554 | 
            -
                            if (name) {
         | 
| 1555 | 
            -
                                node.autocomplete = 'off';
         | 
| 1556 | 
            -
                                node.name = name;
         | 
| 1557 | 
            -
                            }
         | 
| 1558 | 
            -
                            if (type) {
         | 
| 1559 | 
            -
                                node.type = type;
         | 
| 1560 | 
            -
                            }
         | 
| 1561 | 
            -
                            return new Bunch([node]);
         | 
| 1562 | 
            -
                        },
         | 
| 1563 | 
            -
                        text: function (text) {
         | 
| 1564 | 
            -
                            var a, i;
         | 
| 1565 | 
            -
                            if (text instanceof Array) {
         | 
| 1566 | 
            -
                                a = [];
         | 
| 1567 | 
            -
                                for (i = 0; i < text.length; i += 1) {
         | 
| 1568 | 
            -
                                    a[i] = document.createTextNode(String(text[i]));
         | 
| 1569 | 
            -
                                }
         | 
| 1570 | 
            -
                                return new Bunch(a);
         | 
| 1571 | 
            -
                            }
         | 
| 1572 | 
            -
                            return new Bunch([document.createTextNode(String(text))]);
         | 
| 1573 | 
            -
                        }
         | 
| 1574 | 
            -
                    };
         | 
| 1575 | 
            -
             | 
| 1576 | 
            -
                    if (typeof root.addEventListener === 'function') {
         | 
| 1577 | 
            -
                        root.addEventListener('focus', dom_event, true);
         | 
| 1578 | 
            -
                        root.addEventListener('blur', dom_event, true);
         | 
| 1579 | 
            -
                        root.addEventListener('mouseover', dom_event, true);
         | 
| 1580 | 
            -
                        root.addEventListener('mouseout', dom_event, true);
         | 
| 1581 | 
            -
                        root.addEventListener('mouseup', dom_event, true);
         | 
| 1582 | 
            -
                        root.addEventListener('mousedown', dom_event, true);
         | 
| 1583 | 
            -
                        root.addEventListener('mousemove', dom_event, true);
         | 
| 1584 | 
            -
                        root.addEventListener('click', dom_event, true);
         | 
| 1585 | 
            -
                        root.addEventListener('dblclick', dom_event, true);
         | 
| 1586 | 
            -
                        root.addEventListener('keypress', dom_event, true);
         | 
| 1587 | 
            -
                    } else {
         | 
| 1588 | 
            -
                        root.onfocusin = root.onfocusout  = root.onmouseover =
         | 
| 1589 | 
            -
                                         root.onmouseout  = root.onmouseup   =
         | 
| 1590 | 
            -
                                         root.onmousedown = root.onmousemove =
         | 
| 1591 | 
            -
                                         root.onclick     = root.ondblclick  =
         | 
| 1592 | 
            -
                                         root.onkeypress  = dom_event;
         | 
| 1593 | 
            -
                    }
         | 
| 1594 | 
            -
                    return [dom, Bunch.prototype];
         | 
| 1595 | 
            -
                }
         | 
| 1596 | 
            -
             | 
| 1597 | 
            -
             | 
| 1598 | 
            -
                function F() {}
         | 
| 1599 | 
            -
             | 
| 1600 | 
            -
             | 
| 1601 | 
            -
            //  Return the ADSAFE object.
         | 
| 1602 | 
            -
             | 
| 1603 | 
            -
                return {
         | 
| 1604 | 
            -
             | 
| 1605 | 
            -
                    create: typeof Object.create === 'function' ? Object.create : function (o) {
         | 
| 1606 | 
            -
                        F.prototype = typeof o === 'object' && o ? o : Object.prototype;
         | 
| 1607 | 
            -
                        return new F();
         | 
| 1608 | 
            -
                    },
         | 
| 1609 | 
            -
             | 
| 1610 | 
            -
            //  ADSAFE.get retrieves a value from an object.
         | 
| 1611 | 
            -
             | 
| 1612 | 
            -
                    get: function (object, name) {
         | 
| 1613 | 
            -
                        if (arguments.length === 2 && !reject(object, name)) {
         | 
| 1614 | 
            -
                            return object[name];
         | 
| 1615 | 
            -
                        }
         | 
| 1616 | 
            -
                        return error();
         | 
| 1617 | 
            -
                    },
         | 
| 1618 | 
            -
             | 
| 1619 | 
            -
            //  ADSAFE.go allows a guest widget to get access to a wrapped dom node and
         | 
| 1620 | 
            -
            //  approved ADsafe libraries. It is passed an id and a function. The function
         | 
| 1621 | 
            -
            //  will be passed the wrapped dom node and an object containing the libraries.
         | 
| 1622 | 
            -
             | 
| 1623 | 
            -
                    go: function (id, f) {
         | 
| 1624 | 
            -
                        var dom, fun, root, i, scripts;
         | 
| 1625 | 
            -
             | 
| 1626 | 
            -
            //  If ADSAFE.id was called, the id better match.
         | 
| 1627 | 
            -
             | 
| 1628 | 
            -
                        if (adsafe_id && adsafe_id !== id) {
         | 
| 1629 | 
            -
                            return error();
         | 
| 1630 | 
            -
                        }
         | 
| 1631 | 
            -
             | 
| 1632 | 
            -
            //  Get the dom node for the widget's div container.
         | 
| 1633 | 
            -
             | 
| 1634 | 
            -
                        root = document.getElementById(id);
         | 
| 1635 | 
            -
                        if (root.tagName !== 'DIV') {
         | 
| 1636 | 
            -
                            return error();
         | 
| 1637 | 
            -
                        }
         | 
| 1638 | 
            -
                        adsafe_id = null;
         | 
| 1639 | 
            -
             | 
| 1640 | 
            -
            //  Delete the scripts held in the div. They have all run, so we don't need
         | 
| 1641 | 
            -
            //  them any more. If the div had no scripts, then something is wrong.
         | 
| 1642 | 
            -
            //  This provides some protection against mishaps due to weakness in the
         | 
| 1643 | 
            -
            //  document.getElementById function.
         | 
| 1644 | 
            -
             | 
| 1645 | 
            -
                        scripts = root.getElementsByTagName('script');
         | 
| 1646 | 
            -
                        i = scripts.length - 1;
         | 
| 1647 | 
            -
                        if (i < 0) {
         | 
| 1648 | 
            -
                            return error();
         | 
| 1649 | 
            -
                        }
         | 
| 1650 | 
            -
                        do {
         | 
| 1651 | 
            -
                            root.removeChild(scripts[i]);
         | 
| 1652 | 
            -
                            i -= 1;
         | 
| 1653 | 
            -
                        } while (i >= 0);
         | 
| 1654 | 
            -
                        root = make_root(root, id);
         | 
| 1655 | 
            -
                        dom = root[0];
         | 
| 1656 | 
            -
             | 
| 1657 | 
            -
             | 
| 1658 | 
            -
            // If the page has registered interceptors, call then.
         | 
| 1659 | 
            -
             | 
| 1660 | 
            -
                        for (i = 0; i < interceptors.length; i += 1) {
         | 
| 1661 | 
            -
                            fun = interceptors[i];
         | 
| 1662 | 
            -
                            if (typeof fun === 'function') {
         | 
| 1663 | 
            -
                                try {
         | 
| 1664 | 
            -
                                    fun(id, dom, adsafe_lib, root[1]);
         | 
| 1665 | 
            -
                                } catch (e1) {
         | 
| 1666 | 
            -
                                    ADSAFE.log(e1);
         | 
| 1667 | 
            -
                                }
         | 
| 1668 | 
            -
                            }
         | 
| 1669 | 
            -
                        }
         | 
| 1670 | 
            -
             | 
| 1671 | 
            -
            //  Call the supplied function.
         | 
| 1672 | 
            -
             | 
| 1673 | 
            -
                        try {
         | 
| 1674 | 
            -
                            f(dom, adsafe_lib);
         | 
| 1675 | 
            -
                        } catch (e2) {
         | 
| 1676 | 
            -
                            ADSAFE.log(e2);
         | 
| 1677 | 
            -
                        }
         | 
| 1678 | 
            -
                        root = null;
         | 
| 1679 | 
            -
                        adsafe_lib = null;
         | 
| 1680 | 
            -
                    },
         | 
| 1681 | 
            -
             | 
| 1682 | 
            -
            //  ADSAFE.id allows a guest widget to indicate that it wants to load
         | 
| 1683 | 
            -
            //  ADsafe approved libraries.
         | 
| 1684 | 
            -
             | 
| 1685 | 
            -
                    id: function (id) {
         | 
| 1686 | 
            -
             | 
| 1687 | 
            -
            //  Calls to ADSAFE.id must be balanced with calls to ADSAFE.go.
         | 
| 1688 | 
            -
            //  Only one id can be active at a time.
         | 
| 1689 | 
            -
             | 
| 1690 | 
            -
                        if (adsafe_id) {
         | 
| 1691 | 
            -
                            return error();
         | 
| 1692 | 
            -
                        }
         | 
| 1693 | 
            -
                        adsafe_id = id;
         | 
| 1694 | 
            -
                        adsafe_lib = {};
         | 
| 1695 | 
            -
                    },
         | 
| 1696 | 
            -
             | 
| 1697 | 
            -
            //  ADSAFE.isArray returns true if the operand is an array.
         | 
| 1698 | 
            -
             | 
| 1699 | 
            -
                    isArray: Array.isArray || function (value) {
         | 
| 1700 | 
            -
                        return Object.prototype.toString.apply(value) === '[object Array]';
         | 
| 1701 | 
            -
                    },
         | 
| 1702 | 
            -
             | 
| 1703 | 
            -
             | 
| 1704 | 
            -
            //  ADSAFE.later calls a function at a later time.
         | 
| 1705 | 
            -
             | 
| 1706 | 
            -
                    later: function (func, timeout) {
         | 
| 1707 | 
            -
                        if (typeof func === 'function') {
         | 
| 1708 | 
            -
                            setTimeout(func, timeout || 0);
         | 
| 1709 | 
            -
                        } else {
         | 
| 1710 | 
            -
                            return error();
         | 
| 1711 | 
            -
                        }
         | 
| 1712 | 
            -
                    },
         | 
| 1713 | 
            -
             | 
| 1714 | 
            -
             | 
| 1715 | 
            -
            //  ADSAFE.lib allows an approved ADsafe library to make itself available
         | 
| 1716 | 
            -
            //  to a widget. The library provides a name and a function. The result of
         | 
| 1717 | 
            -
            //  calling that function will be made available to the widget via the name.
         | 
| 1718 | 
            -
             | 
| 1719 | 
            -
                    lib: function (name, f) {
         | 
| 1720 | 
            -
                        if (!adsafe_id) {
         | 
| 1721 | 
            -
                            return error();
         | 
| 1722 | 
            -
                        }
         | 
| 1723 | 
            -
                        adsafe_lib[name] = f(adsafe_lib);
         | 
| 1724 | 
            -
                    },
         | 
| 1725 | 
            -
             | 
| 1726 | 
            -
             | 
| 1727 | 
            -
            //  ADSAFE.log is a debugging aid that spams text to the browser's log.
         | 
| 1728 | 
            -
             | 
| 1729 | 
            -
                    log: function log(s) {
         | 
| 1730 | 
            -
                        if (window.console) {
         | 
| 1731 | 
            -
                            console.log(s);        /* Firebug */
         | 
| 1732 | 
            -
                        } else if (typeof Debug === 'object') {
         | 
| 1733 | 
            -
                            Debug.writeln(s);      /* IE */
         | 
| 1734 | 
            -
                        } else if (typeof opera === 'opera') {
         | 
| 1735 | 
            -
                            opera.postError(s);    /* Opera */
         | 
| 1736 | 
            -
                        }
         | 
| 1737 | 
            -
                    },
         | 
| 1738 | 
            -
             | 
| 1739 | 
            -
             | 
| 1740 | 
            -
            //  ADSAFE.remove deletes a value from an object.
         | 
| 1741 | 
            -
             | 
| 1742 | 
            -
                    remove: function (object, name) {
         | 
| 1743 | 
            -
                        if (arguments.length === 2 && !reject(object, name)) {
         | 
| 1744 | 
            -
                            delete object[name];
         | 
| 1745 | 
            -
                            return;
         | 
| 1746 | 
            -
                        }
         | 
| 1747 | 
            -
                        return error();
         | 
| 1748 | 
            -
                    },
         | 
| 1749 | 
            -
             | 
| 1750 | 
            -
             | 
| 1751 | 
            -
            //  ADSAFE.set stores a value in an object.
         | 
| 1752 | 
            -
             | 
| 1753 | 
            -
                    set: function (object, name, value) {
         | 
| 1754 | 
            -
                        if (arguments.length === 3 && !reject(object, name)) {
         | 
| 1755 | 
            -
                            object[name] = value;
         | 
| 1756 | 
            -
                            return;
         | 
| 1757 | 
            -
                        }
         | 
| 1758 | 
            -
                        return error();
         | 
| 1759 | 
            -
                    },
         | 
| 1760 | 
            -
             | 
| 1761 | 
            -
            //  ADSAFE._intercept allows the page to register a function that will
         | 
| 1762 | 
            -
            //  see the widget's capabilities.
         | 
| 1763 | 
            -
             | 
| 1764 | 
            -
                    _intercept: function (f) {
         | 
| 1765 | 
            -
                        interceptors.push(f);
         | 
| 1766 | 
            -
                    }
         | 
| 1767 | 
            -
             | 
| 1768 | 
            -
                };
         | 
| 1769 | 
            -
            }());
         |