﻿(function($){var GGrid=function(tb,sTemplate,options){this.init(tb,options);this.Template=$.createTemplate(sTemplate,null,{disallow_functions:false,filter_data:false,filter_params:false,runnable_functions:false,clone_data:false,clone_params:false});}
GGrid.prototype={init:function(tb,options){this.element=$(tb);this.iFrom=0;this.data=null;this.config={pageSize:10,noRecordsMessage:'no records',currentSort:null};this.config=$.extend(this.config,options);if((typeof(options)==='undefined')||(typeof(options.noRecordsMessage)==='undefined')){var toSpan=this.element.children('THEAD').children('tr').children().length;this.config.noRecordsMessage='<tr><td colspan='+toSpan+' align=center>No Records</td></tr>'}},SetData:function(data,bNotSort){this.data=data;this.CheckPageIndex();if(!bNotSort)
this.Sort1();this.Render();},Render:function(){var $tbl=$(this.element);var $tBody=$tbl.children('TBODY');if(this.data!=null){var template=this.Template;template.Initialize();var s=template.get({iFrom:this.iFrom,iCount:this.config.pageSize,content:this.data},null,0);$tBody.html(s);}
else
$tBody.html(this.config.noRecordsMessage);$tbl.trigger('GridUpdated');},PageUp:function(){this.iFrom+=this.config.pageSize;this.CheckPageIndex();this.Render();},PageDown:function(){this.iFrom-=this.config.pageSize;this.CheckPageIndex();this.Render();},MoveLast:function(){this.iFrom=1000000;this.CheckPageIndex();this.Render();},MoveFirst:function(){this.iFrom=0;this.Render();},CheckPageIndex:function(){if(this.data==null){this.iFrom=0;return;}
if(this.iFrom>=this.data.length)
this.iFrom=Math.floor((this.data.length-1)/this.config.pageSize)*this.config.pageSize;if(this.iFrom<0)
this.iFrom=0;},Sort:function(columnName,direction,type){this.config.currentSort=new Array();this.config.currentSort[0]=columnName;this.config.currentSort[1]=direction;this.config.currentSort[2]=type;this.Sort1();},Sort1:function(){if(this.config.currentSort==null)
return;if(this.data==null)
return;var columnName=this.config.currentSort[0];var direction=this.config.currentSort[1];var type=this.config.currentSort[2];var iD=1;if(direction.toLowerCase()=="desc")
iD=-1;if(type==0)
if(iD==-1)
this.data.sort(sortTextArrayDesc);else
this.data.sort(sortTextArrayAsc);else
if(iD==-1)
this.data.sort(sortNumericArrayDesc);else
this.data.sort(sortNumericArrayAsc);this.Render();function sortNumericArrayAsc(a,b){var val=a[columnName]-b[columnName];return(val>0)?1:((val<0)?-1:0);}
function sortNumericArrayDesc(a,b){var val=a[columnName]-b[columnName];return(val>0)?-1:((val<0)?1:0);}
function sortTextArrayAsc(a,b){return(a[columnName]>b[columnName])?1:((a[columnName]<b[columnName])?-1:0);}
function sortTextArrayDesc(a,b){return(a[columnName]>b[columnName])?-1:((a[columnName]<b[columnName])?1:0);}},GetCurrentPage:function(){return Math.floor(this.iFrom/this.config.pageSize);},SetCurrentPage:function(iPage){this.iFrom=this.iPage*this.config.pageSize;this.CheckPageIndex();this.Render();},GetTotalPages:function(){if(this.data==null)
return 0;return Math.floor((this.data.length-1)/this.config.pageSize)+1;},SetPageSize:function(pageSize){this.config.pageSize=pageSize-0;this.iFrom=0;this.Render();}}
$.pagerOptionDefaults={pagerId:'#pager',firstId:'#first',lastId:'#last',nextId:'#next',prevId:'#prev',statusBox:'#status',textBox:'.pageDisplay',cmbPageSize:'#pageSize'};$.sortingOptionDefaults={cssHeader:"header",cssAsc:"headerSortUp",cssDesc:"headerSortDown",selectorHeaders:'thead th'};$.fn.makeGGrid=function(sTemplate,options){return $(this).each(function(){var objGrid=new GGrid(this,sTemplate,options.grid);var _this=this;$.data(this,'GGrid',objGrid);var pagerOptions=options.pager;var $pager=null;if(pagerOptions!=null){pagerOptions=$.extend({},$.pagerOptionDefaults,pagerOptions);$pager=$(pagerOptions.pagerId);$pager.find(pagerOptions.firstId).click(function(){objGrid.MoveFirst();return false;});$pager.find(pagerOptions.lastId).click(function(){objGrid.MoveLast();return false;});$pager.find(pagerOptions.nextId).click(function(){objGrid.PageUp();return false;});$pager.find(pagerOptions.prevId).click(function(){objGrid.PageDown();return false;});$pager.find(pagerOptions.cmbPageSize).change(function(){objGrid.SetPageSize(this.value);return false;});$(this).bind('GridUpdated',function(){var s=(objGrid.GetCurrentPage()+1)+" / "+objGrid.GetTotalPages();var txtBox=$pager.find(pagerOptions.textBox);txtBox.html(s);var txtStatus=$pager.find(pagerOptions.statusBox);if(objGrid.data){txtStatus.html('total records: '+objGrid.data.length);}
else
txtStatus.html('');});}
var sortingOptions=options.sorting;if(sortingOptions!=null){sortingOptions=$.extend({},$.sortingOptionDefaults,sortingOptions);for(i=0;i<sortingOptions.columns.length;i++){column=sortingOptions.columns[i].Id;header=$(sortingOptions.selectorHeaders+':eq('+column+')',this)
header['0'].index=i;header['0'].order=0;header.addClass(sortingOptions.cssHeader);header.click(function(){$(sortingOptions.selectorHeaders,_this).removeClass(sortingOptions.cssAsc).removeClass(sortingOptions.cssDesc);iIndex=this.index
iOrder=this.order;sDirection="";if(iOrder==1){sDirection='asc';this.order=-1;$(this).addClass(sortingOptions.cssAsc);}
else{sDirection='desc';this.order=1;$(this).addClass(sortingOptions.cssDesc);}
sSortField=sortingOptions.columns[iIndex].SortField;iSortType=sortingOptions.columns[iIndex].SortType;objGrid.Sort(sSortField,sDirection,iSortType);});}}});}
$.fn.populateGGrid=function(data,bNotSort){return $(this).each(function(){var gGrid=$.data(this,'GGrid');gGrid.SetData(data,bNotSort);});}})(jQuery);
