/**
 * Config
 */
( function ( root, factory ) {

    if ( typeof define === 'function' && define.amd ) {

        define( [
            'jquery',
            './Util'
        ], factory );

    } else if ( typeof exports === 'object' ) {

        module.exports = factory(
            require( 'jquery' ),
            require( './Util' )
        );

    } else {

        root.AdManager = root.AdManager || {};

        root.AdManager.Config = factory(
            root.jQuery,
            root.AdManager.Util
        );

    }

} ( this, function ( $, Util ) {

    var name = 'Config',
        debugEnabled = true,
        debug = debugEnabled ? Util.debug : function () {},
        config = {};

    //////////////////////////////////////////////////////////////////////////////////////

    /**
     * Initialize the config module.
     *
     * @param  {Object} newConfig The AdManager config object.
     */
    function init( newConfig ) {

        debug( name + ': initialized' );

        config = $.extend( {
            account: 0,
            clientType: false,
            context: 'body',
            enabled: true,
            insertExclusion: [],
            insertionEnabled: false,
            insertion: {
                pxBetweenUnits: 800,
                adHeightLimit: 1000,
                insertExclusion: [
                    'img',
                    'iframe',
                    'video',
                    'audio',
                    '.video',
                    '.audio',
                    '.app_ad_unit'
                ]
            },
            inventory: [],
            pageConfigAttr: false,
            targeting: []
        }, newConfig );

    }

    /**
     * Set
     *
     * @param  {String} key
     * @param  {Mixed}  value
     * @return {Object} config
     */
    function set( key, value ) {

        return setConfigValue( config, key, value );

    }

    /**
     * Get
     *
     * @param  {String|Null} key Optional.
     * @return {Mixed}
     */
    function get( key ) {

        key = key || false;

        if ( ! key ) {
            return config;
        }

        return getConfigValue( config, key );

    }

    /**
     * Set config value. Uses recursion to set nested values.
     *
     * @param  {Object} config
     * @param  {String} key
     * @param  {Mixed}  value
     * @return {Object} config
     */
    function setConfigValue( config, key, value ) {

        if ( typeof key === 'string' ) {
            key = key.split( '.' );
        }

        if ( key.length > 1 ) {
            setConfigValue( config[ key.shift() ], key, value );
        } else {
            config[ key[0] ] = value;
        }

        return config;

    }

    /**
     * Get config value. Uses recursion to get nested values.
     *
     * @param  {Object} config
     * @param  {String} key
     * @return {Mixed}
     */
    function getConfigValue( config, key ) {

        if ( typeof key === 'string' ) {
            key = key.split( '.' );
        }

        if ( key.length > 1 ) {
            return getConfigValue( config[ key.shift() ], key );
        } else {
            return key[0] in config ? config[ key[0] ] : null;
        }

    }

    /**
     * Import JSON page config data from DOM
     *
     * This imports inline JSON via data attribute
     * and extends an existing config with it.
     *
     * @param object options.$context
     * @param string options.attrName
     * @return object
     */
    function importConfig( options ) {

        var $context = options.$context,
            attrName = options.attrName,
            existConfig = options.existConfig,
            selector,
            newConfig,
            data = {};

        selector = '*[data-' + attrName + ']';
        newConfig = $.extend( {}, existConfig );
        data = $context.find( selector ).data( attrName );

        if ( typeof newConfig === 'object' ) {
            newConfig = $.extend( newConfig, data );
        }

        return newConfig;

    }

    //////////////////////////////////////////////////////////////////////////////////////

    return {
        init: init,
        set:  set,
        get:  get
    };

} ) );
@@ -693,475 +693,627 @@
  = %7B
-%7D;%0A
 %0A    
-//////////////////////////////////////////////////////////////////////////////////////%0A%0A    /**%0A     * Initialize the config module.
+        account:             null,               // DFP account ID
 %0A     
-*%0A
      
-* @param  %7BObject%7D newConfig The AdManager config object.%0A     */%0A    function init( newConfig ) %7B%0A%0A        debug( name + ': initialized' );%0A%0A        config = $.extend( %7B%0A            account: 0,%0A            clientType: false,%0A            context: 'body',%0A            enabled: true,%0A            insertExclusion: %5B%5D,
+  adClass:             'app_ad_unit',      // Outer ad wrap%0A            adSelector:          '',                 // Leave blank%0A            adUnitTargetClass:   'app_unit_target',  // Inner ad wrap%0A            clientType:          false,              // Used to filter inventory%0A            context:             'body',             // Selector for ad filling container%0A            enabled:             true,               // Turn off ads%0A            insertExclusion:     %5B%5D,                 // Inventory to exclude from dynamic insertion
 %0A   
@@ -1338,23 +1338,67 @@
 Enabled:
+   
  false,
+              // Enable dynamic insertion
 %0A       
@@ -1412,16 +1412,26 @@
 sertion:
+          
  %7B%0A     
@@ -1460,13 +1460,77 @@
 its:
+ 
  800,
+                // Minimum space b/w dynamically inserted units
 %0A   
@@ -1560,49 +1560,159 @@
 mit:
+  
  1000,
-%0A                insertExclusion: %5B
+               // Max-height for dynamic units%0A                insertExclusion: %5B                   // Skip these elements when inserting units
 %0A   
@@ -1974,19 +1974,70 @@
 entory: 
-%5B%5D,
+          %5B%5D,                 // Inventory of ad units
 %0A       
@@ -2060,51 +2060,505 @@
 ttr:
+     
  false,
-%0A            targeting: %5B%5D%0A        %7D
+              // Selector for dynamic config import%0A            targeting:           %5B%5D                  // Key value pairs to send with DFP request%0A        %7D;%0A%0A    //////////////////////////////////////////////////////////////////////////////////////%0A%0A    /**%0A     * Initialize the config module.%0A     *%0A     * @param  %7BObject%7D newConfig The AdManager config object.%0A     */%0A    function init( newConfig ) %7B%0A%0A        debug( name + ': initialized' );%0A%0A        config = $.extend( config
 , ne

Add all default config values with comments