// Place any image- and text-like content side-by-side, as per:
// stubbornella.org/content/2010/06/25/the-media-object-saves-hundreds-of-lines-of-code
 

// Predefine the variables below in order to alter and enable specific features.
$media-gutter:                $base-spacing-unit !default;
$media-gutter--small:         halve($media-gutter) !default;
$media-gutter--large:         double($media-gutter) !default;

$enable-media--small:         false !default;
$enable-media--large:         false !default;
$enable-media--rev:           false !default;
$enable-media--flush:         false !default;
$enable-media--responsive:    false !default;
$media-collapse-at:           720px !default;





.#{$namespace}media,
%#{$namespace}media {
    @extend %clearfix;
    display: block;
}

    .#{$namespace}media__img,
    %#{$namespace}media__img {
        float: left;
        margin-right: $media-gutter;

        > img {
            display: block;
        }

    }

    .#{$namespace}media__body,
    %#{$namespace}media__body {
        overflow: hidden;
        display: block;

        &,
        > :last-child {
            margin-bottom: 0;
        }

    }





@if ($enable-media--small == true) {

    /**
     * Small media objects.
     */

    .#{$namespace}media--small,
    %#{$namespace}media--small {

        > .#{$namespace}media__img,
        > %#{$namespace}media__img {
            margin-right: $media-gutter--small;
        }

        @if ($enable-media--rev == true) {

            /**
             * Small reversed media objects.
             */

            &.#{$namespace}media--rev,
            &%#{$namespace}media--rev {

                > .#{$namespace}media__img,
                > %#{$namespace}media__img {
                    margin-right: 0;
                    margin-left:  $media-gutter--small;
                }

            }

        }

    }

}

@if ($enable-media--large == true) {

    /**
     * Large media objects.
     */

    .#{$namespace}media--large,
    %#{$namespace}media--large {

        > .#{$namespace}media__img,
        > %#{$namespace}media__img {
            margin-right: $media-gutter--large;
        }

        @if ($enable-media--rev == true) {

            /**
             * Large reversed media objects.
             */

            &.#{$namespace}media--rev,
            &%#{$namespace}media--rev {

                > .media__img,
                > %media__img {
                    margin-right: 0;
                    margin-left:  $media-gutter--large;
                }

            }

        }

    }

}





@if ($enable-media--rev == true) {

    /**
     * Reversed image location (right instead of left). Extends `.media`.
     */

    .#{$namespace}media--rev,
    %#{$namespace}media--rev {

        > .#{$namespace}media__img,
        > %#{$namespace}media__img {
            float: right;
            margin-right: 0;
            margin-left: $media-gutter;
        }

    }

}





@if ($enable-media--flush == true) {

    /**
     * Flush media objects have no space between the image- and text-content.
     */

    .#{$namespace}media--flush,
    %#{$namespace}media--flush {

        > .#{$namespace}media__img,
        > %#{$namespace}media__img {
            margin-right: 0;
            margin-left:  0;
        }

    }

}





@if ($enable-media--responsive == true) {

    /**
     * Responsive media objects.
     *
     * There is a very pragmatic, simple implementation of a responsive media
     * object, which simply places the text-content beneath the image-content.
     *
     * We use a max-width media query because:
     *
     * a) it is the least verbose method in terms of amount of code required.
     * b) the media object's default state is image-next-to-text, so its stacked
     *    state is the exception, rather than the rule.
     */

    @media screen and (max-width: $media-collapse-at) {

        .#{$namespace}media--responsive,
        %#{$namespace}media--responsive {

            /**
             * Rework the spacings on regular media objects.
             */
            > .#{$namespace}media__img,
            > %#{$namespace}media__img {
                float: none;
                margin-right: 0;
                margin-bottom: $media-gutter;
                margin-left:  0;
            }

            @if ($enable-media--small == true) {

                /**
                 * Small responsive media objects.
                 *
                 * Take a little more heavy-handed approach to reworking
                 * spacings on media objects that are also small media objects
                 * in their regular state.
                 */

                &.#{$namespace}media--small,
                &%#{$namespace}media--small {

                    > .#{$namespace}media__img,
                    > %#{$namespace}media__img {
                        margin-right: 0;
                        margin-left:  0;
                    }

                }

            }

            @if ($enable-media--large == true) {

                /**
                 * Large responsive media objects.
                 *
                 * Take a little more heavy-handed approach to reworking
                 * spacings on media objects that are also large media objects
                 * in their regular state.
                 */

                &.#{$namespace}media--large,
                &%#{$namespace}media--large {

                    > .#{$namespace}media__img,
                    > %#{$namespace}media__img {
                        margin-right: 0;
                        margin-left:  0;
                    }

                }

            }

        }

    }

}