
(function($) {
    var n = 0, cache = {}, tag_chr = '#';

    $.fn.jqote = function(data, tag) {
        var dom = $([]), tag = tag || tag_chr, reg = new RegExp('<'+tag+'(.+?)'+tag+'>', 'g');

        if ( !$.isArray(data) ) data = [data];

        $(this).each(function(i) {
            var f = ( fn = cache[$.data(this, 'jqote')] ) ?
                fn : cache[$.data(this, 'jqote', n++)] = new Function('i, j',
                    "var t=[]; t.push('" +
                    $(this).html()
                        .replace(/\s*<!\[CDATA\[|\]\]>\s*/g, '')
                        .replace(/[\r\n\t]/g, '\\\n')
                        .replace(reg, function(m){return m.replace(/'/g, '\x1a')})
                        .split('<'+tag+'=').join("\x1a,")
                        .replace(reg, "\x1a); $1 t.push(\x1a")
                        .split(tag+'>').join(",\x1a")
                        .split("'").join("\\'")
                        .split("\x1a").join("'") +
                    "'); return $(t.join(''));"
                );

            for ( j=0; j < data.length; j++ )
                dom.push(f.call(data[j], i, j));
        });

        return dom;
    };

    $.jqote_tag = function(c) {
        tag_chr = c;
    };
})(jQuery);

