/**
 * jQuery Template
 *
 * @param str     {String}         Template string
 * @param target  {jQuery|String}  Inserting target
 * @param method  {String}         Inserting method (default: html)
 *
 * @author mista_k
 */

;(function ($) {
    // attribute capture pattern
    var pattern = /\s+id="#(\w+)"/g;
	// unique value for current session
    var seed = + new Date();

    $.extend({
        template: function (str, target, method) {

            var i, len, obj, gen;
            var ids = [], eles = {};

            if (typeof method === 'undefined') {
                method = 'html';
            }

            // capture and replace id's in string
            str = str.replace(pattern, function (attr, name) {
                gen = 'gen-' + (seed++) + '-' + name;
                ids.push([name, gen]);
                return ' id="' + gen + '"';
            });

            if ($.isFunction($.fn[method])) {
                // inject string to target by method
                $.fn[method].call($(target), str);
				// get captured DOM elements
                for (i = 0, len = ids.length; i < len; i++) {
                    obj = document.getElementById(ids[i][1]);
                    if (obj) {
                        // remove generated id
                        obj.removeAttribute("id");
                        eles[ids[i][0]] = obj;
                    }
                }
            }
			// return captured DOM elements collection
            return eles;
        }
    });
})(jQuery);