var RuxTemplateCommon={dot_re:/{\.}/g,raw_re:/{{\[([\w\.\+\-\*\/\t ]*)\]}}/g,exp_re:/{\[([^\]]*)\]}/g,if_exp_re:/\"\"{\[([\w\.\+\-\*\/\t ]*)\]}\"/g,var_re:/{([\w\.\t ]+)}/g,for_re:/<loop for=\"([\w\.\+\-\*\/\t ]*)\">/g,for_empty_re:/<loop for=\"{}\">/g,if_re:/<if test=\"([\w\s\!\=\"\/\.\#\{\}\"\'\?\!\;\:\$\%\&\(\)\*\+\-\@\[\]\\\_]*)\">/g,ifnot_re:/<ifnot test=\"([\w\s\!\=\"\/\.\#\{\}\"\'\?\!\;\:\$\%\&\(\)\*\+\-\@\[\]\\\_]*)\">/g,else_re:/<else>/g,end_if:/<\/if>/g,end_for:/<\/loop>/g,function_re:/<function name=\"([\d\w\.\+\-\*\/\t ]*)\">/g,function_end_re:/<\/function>/g,call_re:/<call name=\"([\d\w\.\+\-\*\/\t ]*)\"\/>/g,new_re:/\n/g,ret_re:/\r/g,quo_re:/"/g,apo_re:/'/g,bra_open_re:/%7B/g,bra_closed_re:/%7D/g};var RuxTemplate=function(a){this.fetched=false;this.compiled=false;this.fail=false;this.f_text;this.f;this.text=a.trim();this.compile()};RuxTemplate.prototype.fetch=function(){this.fetched=true};RuxTemplate.prototype.compile=function(){if(this.compiled){return}if(!this.fetched){this.fetch()}this.f_text="this.f = function(values){ var stack = new Array(); var r = '";this.f_text+=this.text.replace(RuxTemplateCommon.bra_open_re,"{").replace(RuxTemplateCommon.bra_closed_re,"}").replace(RuxTemplateCommon.new_re,"\\n").replace(RuxTemplateCommon.ret_re,"\\r").replace(RuxTemplateCommon.apo_re,"\\'").replace(RuxTemplateCommon.dot_re,"'; r += values + '").replace(RuxTemplateCommon.raw_re,"$1").replace(RuxTemplateCommon.var_re,"'; try{ r += values.$1; } catch( e ){ /*util.debug( 'Template error ', e ); */} r += '").replace(RuxTemplateCommon.if_exp_re,'"$1').replace(RuxTemplateCommon.exp_re,"'; try{ r += eval( '$1' ).replace('{[Rux.backend]}',Rux.backend).replace('[Rux.backend]',Rux.backend); } catch( e ){ try{r+=  eval('values.' + values.attribute_id + '_item[0].' + '$1'.substring(7,'$1'.length));} catch (c){ /*util.debug(e);*/} } r += '").replace(RuxTemplateCommon.for_re,"'; if( typeof( $1 ) != 'undefined' ){ stack.push({ v:values, l:loop, i:i }); var loop = ($1) instanceof Array ? ($1) : [$1]; for( var i = 0 ; i < loop.length ; i ++ ){ var xindex = i; values = loop[ i ]; r+='").replace(RuxTemplateCommon.for_empty_re,"'; if( false ){ stack.push({ v:values, l:loop, i:i }); var loop = ($1) instanceof Array ? ($1) : [$1]; for( var i = 0 ; i < loop.length ; i ++ ){ var xindex = i; values = loop[ i ]; r+='").replace(RuxTemplateCommon.if_re,"'; if( typeof( $1 ) != 'undefined' ){if( $1 ){  r+= '").replace(RuxTemplateCommon.ifnot_re,"'; if( typeof( $1 ) != 'undefined' ){if( $1 ){  r+= '").replace(RuxTemplateCommon.else_re,"';}else { r+= '").replace(RuxTemplateCommon.end_if,"';}} r+= '").replace(RuxTemplateCommon.end_for,"'; } values = stack[stack.length-1].v; loop = stack[stack.length-1].l; i = stack[stack.length-1].i; stack.splice(stack.length-1,1); } r+= '").replace(RuxTemplateCommon.function_re,"'; if( typeof (this.function_$1) == 'undefined' ) this.function_$1 = function( values, index_$1 ){ if( index_$1 == -1 ){ index_$1 = 0; Rux.rec_id_$1 = new Array(); } else { Rux.rec_id_$1.push( {index:index_$1,data:values} ); if (index_$1>1){ instance_info['id_$1'].hierarchical = true;} } var r='").replace(RuxTemplateCommon.call_re,"'; try{ r += ( typeof( index_$1 ) == 'undefined' ) ? this.function_$1( values, -1 ) : this.function_$1( values, index_$1 + 1 ); }catch( e ){ util.debug( e ); } r += '").replace(RuxTemplateCommon.function_end_re,"'; return r; }; r += '");this.f_text+="'; return r.replace("+RuxTemplateCommon.new_re+",'\\n').replace("+RuxTemplateCommon.ret_re+",'\\r');}";try{eval(unescape(this.f_text));this.compiled=true}catch(e){this.fail=true;util.log(e,this)}};RuxTemplate.prototype.apply=function(b){if(!this.compiled&&!this.fail){this.compile()}if(this.fail){return"ERROR"}var a="";try{a=this.f(b)}catch(c){a=this.text}return a};
