(function($)
{
    var _loaders = [];

    $.fn.loaderShow = function(opts)
    {
        var defaults = {
            width: 0,
            height: 0,
            left: 0,
            top: 0
        };
        var opts = $.extend(defaults, opts);

        return this.each(function()
        {
            var $this = $(this);
            if (!loaderExists($this[0]))
            {
                _loaders.push($this[0]);
                var offset = $this.offset();
                var loader = document.createElement("div");
                var w = opts.width > 0 ? opts.width : $this.width();
                var h = opts.height > 0 ? opts.height : $this.height();
                h += (opts.heightRel ? opts.heightRel : 0);
                if (h <= 0)
                {
                    $this.css("height", 35).data("Height", 1);
                    h = 35;
                }
                $(loader).addClass("jqLoader").css({ left: offset.left + opts.left, top: offset.top + opts.top, width: w, height: h }).appendTo("body");
                $this.data("Loader", loader);
            }
        });
    };

    $.fn.loaderHide = function()
    {
        return this.each(function()
        {
            var $this = $(this);
            loaderRemove($this[0]);
            if ($this.data("Height"))
            {
                $this.removeData("Height");
                $this.css("height", "");
            }
            $($this.data("Loader")).remove();
        });
    };

    $.loaderClear = function()
    {
        for (var i = 0; i < _loaders.length; i++)
        {
            $(_loaders[i]).loaderHide();
        }
    };

    function loaderRemove(element)
    {
        for (var i = 0; i < _loaders.length; i++)
        {
            if (_loaders[i] == element)
            {
                _loaders.splice(i, 1);
            }
        }
    }

    function loaderExists(element)
    {
        for (var i = 0; i < _loaders.length; i++)
        {
            if (_loaders[i] == element)
                return true;
        }
        return false;
    }
})(jQuery);
