﻿(function(jQuery)
{var oldManip=jQuery.fn.domManip,htmlExpr=/^[^<]*(<[\w\W]+>)[^>]*$/;jQuery.fn.extend({render:function(data,options)
{return this.map(function(i,tmpl)
{return jQuery.render(tmpl,data,options);});},domManip:function(args)
{if(args.length>1&&args[0].nodeType)
{arguments[0]=[jQuery.makeArray(args)];}
if(args.length>=2&&typeof args[0]==="string"&&typeof args[1]!=="string")
{arguments[0]=[jQuery.render(args[0],args[1],args[2])];}
return oldManip.apply(this,arguments);}});jQuery.extend({render:function(tmpl,data,options)
{var fn,node;if(typeof tmpl==="string")
{fn=jQuery.templates[tmpl];if(!fn&&!htmlExpr.test(tmpl))
{node=jQuery(tmpl).get(0);}}else if(tmpl instanceof jQuery)
{node=tmpl.get(0);}else if(tmpl.nodeType)
{node=tmpl;}
if(!fn&&node)
{var elemData=jQuery.data(node);fn=elemData.tmpl||(elemData.tmpl=jQuery.tmpl(node.innerHTML));}
fn=fn||jQuery.tmpl(tmpl);var rendering,rendered,context={data:data,index:0,dataItem:data,options:options||{}};if(options)
{rendering=options.rendering;rendered=options.rendered;}
function renderItem()
{var dom=null;if(!rendering||rendering(context)!==false)
{var dom=fn(jQuery,context);if(rendered)
rendered(context,dom);}
return dom;}
if(jQuery.isArray(data))
{return jQuery.map(data,function(data,i)
{context.index=i;context.dataItem=data;return renderItem();});}else
{return renderItem();}},templates:{},tmplFn:{html:function()
{jQuery._.push.apply(jQuery._,arguments);},text:function()
{jQuery._.push.apply(jQuery._,jQuery.map(arguments,function(str)
{return document.createTextNode(str).nodeValue;}));}},_:null,tmpl:function tmpl(str,data,i,options)
{var fn=new Function("jQuery","$context","var $=jQuery,$data=$context.dataItem,$i=$context.index,_=$._=[];_.context=$context;"+"with($.tmplFn){with($data){_.push('"+
str.replace(/[\r\t\n]/g," ").replace(/'(?=[^%]*%})/g,"\t").split("'").join("\\'").split("\t").join("'").replace(/{%=(.+?)%}/g,"',($1),'").split("{%").join("');").split("%}").join("_.push('")
+"');}}return $(_.join('')).get();");return data?fn(jQuery,{data:null,dataItem:data,index:i,options:options}):fn;}});})(jQuery);
