﻿function SearchEngine(t,f,A,q,z,v,a,e){var p=this;var o=document.getElementById(t);var n=A;var b=f;var h=z;var s=v;var c=q;var g=a;var m=e;var r=null;var j=null;var d=null;var w=0;var i=0;var l=null;var k=false;if(n!=null){l=n.substr(0,n.lastIndexOf("."));l=l.substr(l.lastIndexOf("/")+1);$(o).setTemplateURL(n,null,{runnable_functions:false})}this.Dispose=function(){o=null;p=null};this.SetGlobalSearchParams=function(B){g=B};this.SetTemplate=function(B){n=B;l=n.substr(0,n.lastIndexOf("."));l=l.substr(l.lastIndexOf("/")+1);$(o).setTemplateURL(B,null,{runnable_functions:true})};this.SetUrl=function(B){b=B};this.GetTemplate=function(){return n};this.SetPageSize=function(B){h=B};this.SetCacheSize=function(B){c=B>0?B:1};this.SetOrder=function(B){s=B};this.GetOrder=function(){return s};this.SetParam=function(C,B){j[C]=B};this.RemoveParam=function(B){if(j[B]){delete j[B]}};this.SetGlobalParam=function(C,B){g[C]=B};this.RemoveGlobalParam=function(B){if(g[B]){delete g[B];delete j[B]}};this.SetSuppressRender=function(B){k=B};this.Search=function(){var E=(arguments.length>0)?arguments[0]:{};var B=(arguments.length>1)?arguments[1]:false;var C=j!=null?clone(j):{};if(!B){j=E;C=E}else{for(var D in E){C[D]=E[D]}}for(D in g){if(g[D]!=null&&!E[D]){C[D]=g[D]}}C.PageSize=c>h?c:h;C.Page=Math.floor((w*h)/c);C.Order=s;window.AjaxMgr.ReqJSON(b,C,true,function(G,F){y(G,F,B)},m)};function y(D,B,C){if(!C){if(c>h){r=D}d=null;$(p).trigger({type:"OnSearchEnd",Json:D,Params:j})}else{$(p).trigger({type:"OnFilterEnd",Params:d,Result:D,Cached:false})}i=D.Paging.TotalHits;x(D)}this.Filter=function(){if(r==null){return}var B={};if(arguments.length>0&&arguments[0].length>0){B=arguments[0];d=B}else{d=null;w=0;p.Search(j,false);return}if(r.Paging.TotalHits>c||c==1){p.Search(p.FilterParamsToSearchParams(B),true);return}var J=clone(r);J.Records=[];var C=r.Records;for(var E=0;E<C.length;E++){var I=true;for(var D=0;D<B.length;D++){switch(B[D].Compare){case"eq":I=(I&&C[E][B[D].Property]&&C[E][B[D].Property]==B[D].Value);break;case"lt":I=(I&&C[E][B[D].Property]&&C[E][B[D].Property]<B[D].Value);break;case"gt":I=(I&&C[E][B[D].Property]&&C[E][B[D].Property]>B[D].Value);break;case"in":if(C[E][B[D].Property].constructor.toString().indexOf("Array")>-1){var G=-1;var F=C[E][B[D].Property];for(var H=0;H<F.length;H++){if(F[H]==B[D].Value){G=H;break}}I=(I&&G>-1)}else{I=(I&&C[E][B[D].Property]&&C[E][B[D].Property].toLowerCase().indexOf(B[D].Value.toLowerCase())>-1)}break}}if(I){J.Records.push(C[E])}}i=J.Records.length;$(p).trigger({type:"OnFilterEnd",Params:d,Result:J,Cached:true});x(J)};this.ViewPage=function(D){var C=Math.floor((w*h)/c);var B=Math.floor((D*h)/c);w=D;if(d==null){if(C==B){x(r)}else{p.Search(j,false)}}else{p.Filter(d)}};this.NextPage=function(){var B=Math.ceil(i/h);if(w==B-1){return}this.ViewPage(w+1)};this.PrevPage=function(){if(w==0){return}this.ViewPage(w-1)};this.GetPage=function(){return w};this.SetPage=function(B){w=B};function x(J){var H=Math.floor((w*h)/c)*c;var F=(w*h)%c;var G=(H+F+h<i)?F+h:i-H;var B=parseInt(Math.ceil(i/h));var D=(w-5>0)?w-5:0;var I=(w+5<B)?w+5:B-1;if(I<10){I=(B>10)?10:B-1}var E=[];if(c>h){for(var C=F;C<F+h&&C<J.Records.length;C++){E.push(J.Records[C])}}else{E=J.Records}J.Paging={TotalHits:i,StartRecord:F,EndRecord:G,StartPage:D,EndPage:I,PageSize:h,CurrentPage:w};if(!k){$(o).processTemplate(J,l)}$(p).trigger({type:"OnRenderEnd",Container:o,Items:E})}function u(B,C){if(typeof(B)!="undefined"){p.ViewPage(B.Page)}}this.FilterParamsToSearchParams=function(){var B={};var D=(arguments.length==0)?d:arguments[0];for(var C=0;C<D.length;C++){B[D[C].Property]=D[C].Value}return B}};

