/*!

* jQuery & Zepto Lazy - AJAX Plugin - v1.2
* http://jquery.eisbehr.de/lazy/
*
* Copyright 2012 - 2017, Daniel 'Eisbehr' Kern
*
* Dual licensed under the MIT and GPL-2.0 licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl-2.0.html
*/

;(function($) {

// load data by ajax request and pass them to elements inner html, like:
// <div data-loader="ajax" data-src"url.html" data-method="post" data-type="html"></div>
$.lazy("ajax", function(element, response) {
    ajaxRequest(this, element, response, element.attr("data-method"));
});
// load data by ajax get request and pass them to elements inner html, like:
// <div data-loader="get" data-src"url.html" data-type="html"></div>
$.lazy("get", function(element, response) {
    ajaxRequest(this, element, response, "get");
});
// load data by ajax post request and pass them to elements inner html, like:
// <div data-loader="post" data-src"url.html" data-type="html"></div>
$.lazy("post", function(element, response) {
    ajaxRequest(this, element, response, "post");
});
/**
 * execute ajax request and handle response
 * @param {object} instance
 * @param {jQuery|object} element
 * @param {function} response
 * @param {string} [method]
 */
function ajaxRequest(instance, element, response, method) {
    $.ajax({
        url: element.attr("data-src"),
        type: method || "get",
        dataType: element.attr("data-type") || "html",
        /**
         * success callback
         * @access private
         * @param {*} content
         * @return {void}
         */
        success: function(content) {
            // set responded data to element's inner html
            element.html(content);
            // use response function for Zepto
            response(true);
            // remove attributes
            if( instance.config("removeAttribute") )
                element.removeAttr("data-src data-method data-type");
        },
        /**
         * error callback
         * @access private
         * @return {void}
         */
        error: function() {
            // pass error state to lazy
            // use response function for Zepto
            response(false);
        }
    });
}

})(window.jQuery || window.Zepto);