var MvcGrid=function(){function n(n,t){var u,e,f,r,i;if(this.columns=[],this.element=n,t=t||{},this.data=t.data,this.name=n.attr("id")||"",this.rowClicked=t.rowClicked,this.reloadEnded=t.reloadEnded,this.reloadFailed=t.reloadFailed,this.reloadStarted=t.reloadStarted,this.requestType=t.requestType||"get",this.sourceUrl=t.sourceUrl||n.data("source-url")||"",this.filters=$.extend({Text:new MvcGridTextFilter,Date:new MvcGridDateFilter,Number:new MvcGridNumberFilter,Boolean:new MvcGridBooleanFilter},t.filters),this.sourceUrl?(u=this.sourceUrl.indexOf("?"),u>-1?(this.query=this.sourceUrl.substring(u+1),this.sourceUrl=this.sourceUrl.substring(0,u)):this.query=t.query||""):this.query=window.location.search.replace("?",""),t.reload||this.sourceUrl&&!t.isLoaded){this.reload(this);return}for(e=n.find("th"),f=0;f<e.length;f++)r=this.createColumn(this,$(e[f])),this.bindFilter(this,r),this.bindSort(this,r),this.cleanup(this,r),this.columns.push(r);i=n.find(".mvc-grid-pager");i.length>0&&(this.pager={currentPage:i.find("li.active").data("page")||0,rowsPerPage:i.find(".mvc-grid-pager-rows"),pages:i.find("li:not(.disabled)"),element:i});this.bindPager(this);this.bindGrid(this);this.clean(this)}return n.prototype={createColumn:function(n,t){var i={};return i.header=t,i.name=t.data("name")||"",t.data("filter")=="True"&&(i.filter={isMulti:t.data("filter-multi")=="True",operator:t.data("filter-operator")||"",name:t.data("filter-name")||"",first:{type:t.data("filter-first-type")||"",val:t.data("filter-first-val")||""},second:{type:t.data("filter-second-type")||"",val:t.data("filter-second-val")||""}}),t.data("sort")=="True"&&(i.sort={firstOrder:t.data("sort-first")||"",order:t.data("sort-order")||""}),i},set:function(n,t){n.data=t.data||n.data;n.query=t.query||n.query;n.filters=$.extend(n.filters,t.filters);n.requestType=t.requestType||n.requestType;n.rowClicked=t.rowClicked||n.rowClicked;n.reloadEnded=t.reloadEnded||n.reloadEnded;n.reloadFailed=t.reloadFailed||n.reloadFailed;n.reloadStarted=t.reloadStarted||n.reloadStarted;t.reload&&n.reload(n)},bindFilter:function(n,t){if(t.filter)t.header.find(".mvc-grid-filter").on("click.mvcgrid",function(){n.renderFilter(n,t)})},bindSort:function(n,t){if(t.sort)t.header.on("click.mvcgrid",function(i){var r=$(i.target||i.srcElement);r.hasClass("mvc-grid-filter")||r.parents(".mvc-grid-filter").length!=0||(n.applySort(n,t),n.reload(n))})},bindPager:function(n){if(n.pager){n.pager.rowsPerPage.on("change",function(){n.applyPage(n,n.pager.currentPage);n.reload(n)});n.pager.pages.on("click.mvcgrid",function(){var t=$(this).data("page");t&&(n.applyPage(n,t),n.reload(n))})}},bindGrid:function(n){n.element.find("tbody tr").on("click.mvcgrid",function(t){var r,u,i,f;if(n.rowClicked){for(r=$(this).find("td"),u=[],i=0;i<n.columns.length;i++)f=n.columns[i],r.length>i&&(u[f.name]=$(r[i]).text());n.rowClicked(n,this,u,t)}})},reload:function(n){n.reloadStarted&&n.reloadStarted(n);n.sourceUrl?$.ajax({cache:!1,data:n.data,type:n.requestType,url:n.sourceUrl+"?"+n.query}).done(function(t){n.element.hide();n.element.after(t);var i=n.element.next(".mvc-grid").mvcgrid({reloadStarted:n.reloadStarted,reloadFailed:n.reloadFailed,reloadEnded:n.reloadEnded,requestType:n.requestType,rowClicked:n.rowClicked,sourceUrl:n.sourceUrl,filters:n.filters,query:n.query,data:n.data,isLoaded:!0}).data("mvc-grid");n.element.remove();n.reloadEnded&&n.reloadEnded(i)}).fail(function(t){n.reloadFailed&&n.reloadFailed(n,t)}):window.location.href="?"+n.query},renderFilter:function(n,t){var i=$("body").children(".mvc-grid-popup"),r=n.filters[t.filter.name];if($(window).off("resize.mvcgrid"),$(window).off("click.mvcgrid"),r){r.render(n,i,t.filter);r.init(n,t,i);n.setFilterPosition(n,t,i);i.addClass("open");$(window).on("click.mvcgrid",function(n){var t=$(n.target||n.srcElement);t.hasClass("mvc-grid-filter")||t.parents(".mvc-grid-popup").length!=0||t.is('[class*="ui-datepicker"]')||t.parents('[class*="ui-datepicker"]').length!=0||($(window).off("click.mvcgrid"),i.removeClass("open"))});$(window).on("resize.mvcgrid",function(){i.hasClass("open")&&n.setFilterPosition(n,t,i)})}else i.removeClass("open")},setFilterPosition:function(n,t,i){var r=t.header.find(".mvc-grid-filter"),h=i.find(".popup-arrow"),u=r.offset().left,c=r.offset().top,l=r.height(),e=$(window).width(),o=i.width(),a=c+l/2+14,f=u-8,s=15;u+o+5>e&&(f=e-o-14,s=u-f+7);h.css("left",s+"px");i.css("left",f+"px");i.css("top",a+"px")},cancelFilter:function(n,t){n.queryRemove(n,n.name+"-Page");n.queryRemove(n,n.name+"-Rows");n.queryRemoveStartingWith(n,n.name+"-"+t.name+"-")},applyFilter:function(n,t){n.cancelFilter(n,t);n.queryAdd(n,n.name+"-"+t.name+"-"+t.filter.first.type,t.filter.first.val);t.filter.isMulti&&(n.queryAdd(n,n.name+"-"+t.name+"-Op",t.filter.operator),n.queryAdd(n,n.name+"-"+t.name+"-"+t.filter.second.type,t.filter.second.val));n.pager&&n.queryAdd(n,n.name+"-Rows",n.pager.rowsPerPage.val())},applySort:function(n,t){n.queryRemove(n,n.name+"-Sort");n.queryRemove(n,n.name+"-Order");n.queryAdd(n,n.name+"-Sort",t.name);var i=t.sort.order=="Asc"?"Desc":"Asc";!t.sort.order&&t.sort.firstOrder&&(i=t.sort.firstOrder);n.queryAdd(n,n.name+"-Order",i)},applyPage:function(n,t){n.queryRemove(n,n.name+"-Page");n.queryRemove(n,n.name+"-Rows");n.queryAdd(n,n.name+"-Page",t);n.queryAdd(n,n.name+"-Rows",n.pager.rowsPerPage.val())},queryAdd:function(n,t,i){n.query+=(n.query?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(i)},queryRemoveStartingWith:function(n,t){for(var u,e=encodeURIComponent(t),r=n.query.split("&"),f=[],i=0;i<r.length;i++)u=r[i].split("=")[0],r[i]&&u.indexOf(e)!=0&&f.push(r[i]);n.query=f.join("&")},queryRemove:function(n,t){for(var u,e=encodeURIComponent(t),r=n.query.split("&"),f=[],i=0;i<r.length;i++)u=r[i].split("=")[0],r[i]&&u!=e&&f.push(r[i]);n.query=f.join("&")},cleanup:function(n,t){var i=t.header;i.removeAttr("data-name");i.removeAttr("data-filter");i.removeAttr("data-filter-name");i.removeAttr("data-filter-multi");i.removeAttr("data-filter-operator");i.removeAttr("data-filter-first-val");i.removeAttr("data-filter-first-type");i.removeAttr("data-filter-second-val");i.removeAttr("data-filter-second-type");i.removeAttr("data-sort");i.removeAttr("data-sort-order");i.removeAttr("data-sort-first")},clean:function(n){n.element.removeAttr("data-source-url")}},n}(),MvcGridTextFilter=function(){function n(){}return n.prototype={render:function(n,t,i){var f=$.fn.mvcgrid.lang.Filter,u=$.fn.mvcgrid.lang.Operator,r=$.fn.mvcgrid.lang.Text;t.html('<div class="popup-arrow"><\/div><div class="popup-content"><div class="first-filter popup-group"><select class="mvc-grid-type"><option value="Contains"'+(i.first.type=="Contains"?' selected="selected"':"")+">"+r.Contains+'<\/option><option value="Equals"'+(i.first.type=="Equals"?' selected="selected"':"")+">"+r.Equals+'<\/option><option value="NotEquals"'+(i.first.type=="NotEquals"?' selected="selected"':"")+">"+r.NotEquals+'<\/option><option value="StartsWith"'+(i.first.type=="StartsWith"?' selected="selected"':"")+">"+r.StartsWith+'<\/option><option value="EndsWith"'+(i.first.type=="EndsWith"?' selected="selected"':"")+">"+r.EndsWith+'<\/option><\/select><\/div><div class="first-filter popup-group"><input class="mvc-grid-input" type="text" value="'+i.first.val+'"><\/div>'+(i.isMulti?'<div class="popup-group popup-group-operator"><select class="mvc-grid-operator"><option value="">'+u.Select+'<\/option><option value="And"'+(i.operator=="And"?' selected="selected"':"")+">"+u.And+'<\/option><option value="Or"'+(i.operator=="Or"?' selected="selected"':"")+">"+u.Or+'<\/option><\/select><\/div><div class="second-filter popup-group"><select class="mvc-grid-type"><option value="Contains"'+(i.second.type=="Contains"?' selected="selected"':"")+">"+r.Contains+'<\/option><option value="Equals"'+(i.second.type=="Equals"?' selected="selected"':"")+">"+r.Equals+'<\/option><option value="StartsWith"'+(i.second.type=="StartsWith"?' selected="selected"':"")+">"+r.StartsWith+'<\/option><option value="EndsWith"'+(i.second.type=="EndsWith"?' selected="selected"':"")+">"+r.EndsWith+'<\/option><\/select><\/div><div class="second-filter popup-group"><input class="mvc-grid-input" type="text" value="'+i.second.val+'"><\/div>':"")+'<div class="popup-button-group"><button class="btn btn-success mvc-grid-apply" type="button">'+f.Apply+'<\/button><button class="btn btn-danger mvc-grid-cancel" type="button">'+f.Remove+"<\/button><\/div><\/div>")},init:function(n,t,i){this.bindValue(n,t,i);this.bindApply(n,t,i);this.bindCancel(n,t,i)},bindValue:function(n,t,i){var r=i.find(".mvc-grid-input");r.on("keyup.mvcgrid",function(n){n.which==13&&i.find(".mvc-grid-apply").click()})},bindApply:function(n,t,i){var r=i.find(".mvc-grid-apply");r.on("click.mvcgrid",function(){i.removeClass("open");t.filter.operator=i.find(".mvc-grid-operator").val();t.filter.first.type=i.find(".first-filter .mvc-grid-type").val();t.filter.first.val=i.find(".first-filter .mvc-grid-input").val();t.filter.second.type=i.find(".second-filter .mvc-grid-type").val();t.filter.second.val=i.find(".second-filter .mvc-grid-input").val();n.applyFilter(n,t);n.reload(n)})},bindCancel:function(n,t,i){var r=i.find(".mvc-grid-cancel");r.on("click.mvcgrid",function(){i.removeClass("open");(t.filter.first.type||t.filter.second.type)&&(n.cancelFilter(n,t),n.reload(n))})}},n}(),MvcGridNumberFilter=function(){function n(){}return n.prototype={render:function(n,t,i){var f=$.fn.mvcgrid.lang.Filter,u=$.fn.mvcgrid.lang.Operator,r=$.fn.mvcgrid.lang.Number;t.html('<div class="popup-arrow"><\/div><div class="popup-content"><div class="first-filter popup-group"><select class="mvc-grid-type"><option value="Equals"'+(i.first.type=="Equals"?' selected="selected"':"")+">"+r.Equals+'<\/option><option value="NotEquals"'+(i.first.type=="NotEquals"?' selected="selected"':"")+">"+r.NotEquals+'<\/option><option value="LessThan"'+(i.first.type=="LessThan"?' selected="selected"':"")+">"+r.LessThan+'<\/option><option value="GreaterThan"'+(i.first.type=="GreaterThan"?' selected="selected"':"")+">"+r.GreaterThan+'<\/option><option value="LessThanOrEqual"'+(i.first.type=="LessThanOrEqual"?' selected="selected"':"")+">"+r.LessThanOrEqual+'<\/option><option value="GreaterThanOrEqual"'+(i.first.type=="GreaterThanOrEqual"?' selected="selected"':"")+">"+r.GreaterThanOrEqual+'<\/option><\/select><\/div><div class="first-filter popup-group"><input class="mvc-grid-input" type="text" value="'+i.first.val+'"><\/div>'+(i.isMulti?'<div class="popup-group popup-group-operator"><select class="mvc-grid-operator"><option value="">'+u.Select+'<\/option><option value="And"'+(i.operator=="And"?' selected="selected"':"")+">"+u.And+'<\/option><option value="Or"'+(i.operator=="Or"?' selected="selected"':"")+">"+u.Or+'<\/option><\/select><\/div><div class="second-filter popup-group"><select class="mvc-grid-type"><option value="Equals"'+(i.second.type=="Equals"?' selected="selected"':"")+">"+r.Equals+'<\/option><option value="LessThan"'+(i.second.type=="LessThan"?' selected="selected"':"")+">"+r.LessThan+'<\/option><option value="GreaterThan"'+(i.second.type=="GreaterThan"?' selected="selected"':"")+">"+r.GreaterThan+'<\/option><option value="LessThanOrEqual"'+(i.second.type=="LessThanOrEqual"?' selected="selected"':"")+">"+r.LessThanOrEqual+'<\/option><option value="GreaterThanOrEqual"'+(i.second.type=="GreaterThanOrEqual"?' selected="selected"':"")+">"+r.GreaterThanOrEqual+'<\/option><\/select><\/div><div class="second-filter popup-group"><input class="mvc-grid-input" type="text" value="'+i.second.val+'"><\/div>':"")+'<div class="popup-button-group"><button class="btn btn-success mvc-grid-apply" type="button">'+f.Apply+'<\/button><button class="btn btn-danger mvc-grid-cancel" type="button">'+f.Remove+"<\/button><\/div><\/div>")},init:function(n,t,i){this.bindValue(n,t,i);this.bindApply(n,t,i);this.bindCancel(n,t,i)},bindValue:function(n,t,i){var f=this,u=i.find(".mvc-grid-input"),r;u.on("keyup.mvcgrid",function(n){f.isValid(this.value)?($(this).removeClass("invalid"),n.which==13&&i.find(".mvc-grid-apply").click()):$(this).addClass("invalid")});for(r=0;r<u.length;r++)f.isValid(u[r].value)||$(u[r]).addClass("invalid")},bindApply:function(n,t,i){var r=i.find(".mvc-grid-apply");r.on("click.mvcgrid",function(){i.removeClass("open");t.filter.operator=i.find(".mvc-grid-operator").val();t.filter.first.type=i.find(".first-filter .mvc-grid-type").val();t.filter.first.val=i.find(".first-filter .mvc-grid-input").val();t.filter.second.type=i.find(".second-filter .mvc-grid-type").val();t.filter.second.val=i.find(".second-filter .mvc-grid-input").val();n.applyFilter(n,t);n.reload(n)})},bindCancel:function(n,t,i){var r=i.find(".mvc-grid-cancel");r.on("click.mvcgrid",function(){i.removeClass("open");(t.filter.first.type||t.filter.second.type)&&(n.cancelFilter(n,t),n.reload(n))})},isValid:function(n){if(!n)return!0;var t=new RegExp("^(?=.*\\d+.*)[-+]?\\d*[.,]?\\d*$");return t.test(n)}},n}(),MvcGridDateFilter=function(){function n(){}return n.prototype={render:function(n,t,i){var f='<input class="mvc-grid-input" type="text" value="'+i.first.val+'">',e=$.fn.mvcgrid.lang.Filter,u=$.fn.mvcgrid.lang.Operator,r=$.fn.mvcgrid.lang.Date;t.html('<div class="popup-arrow"><\/div><div class="popup-content"><div class="first-filter popup-group"><select class="mvc-grid-type"><option value="Equals"'+(i.first.type=="Equals"?' selected="selected"':"")+">"+r.Equals+'<\/option><option value="NotEquals"'+(i.first.type=="NotEquals"?' selected="selected"':"")+">"+r.NotEquals+'<\/option><option value="LessThan"'+(i.first.type=="LessThan"?' selected="selected"':"")+">"+r.LessThan+'<\/option><option value="GreaterThan"'+(i.first.type=="GreaterThan"?' selected="selected"':"")+">"+r.GreaterThan+'<\/option><option value="LessThanOrEqual"'+(i.first.type=="LessThanOrEqual"?' selected="selected"':"")+">"+r.LessThanOrEqual+'<\/option><option value="GreaterThanOrEqual"'+(i.first.type=="GreaterThanOrEqual"?' selected="selected"':"")+">"+r.GreaterThanOrEqual+'<\/option><\/select><\/div><div class="first-filter popup-group">'+f+"<\/div>"+(i.isMulti?'<div class="popup-group popup-group-operator"><select class="mvc-grid-operator"><option value="">'+u.Select+'<\/option><option value="And"'+(i.operator=="And"?' selected="selected"':"")+">"+u.And+'<\/option><option value="Or"'+(i.operator=="Or"?' selected="selected"':"")+">"+u.Or+'<\/option><\/select><\/div><div class="second-filter popup-group"><select class="mvc-grid-type"><option value="Equals"'+(i.second.type=="Equals"?' selected="selected"':"")+">"+r.Equals+'<\/option><option value="LessThan"'+(i.second.type=="LessThan"?' selected="selected"':"")+">"+r.LessThan+'<\/option><option value="GreaterThan"'+(i.second.type=="GreaterThan"?' selected="selected"':"")+">"+r.GreaterThan+'<\/option><option value="LessThanOrEqual"'+(i.second.type=="LessThanOrEqual"?' selected="selected"':"")+">"+r.LessThanOrEqual+'<\/option><option value="GreaterThanOrEqual"'+(i.second.type=="GreaterThanOrEqual"?' selected="selected"':"")+">"+r.GreaterThanOrEqual+'<\/option><\/select><\/div><div class="second-filter popup-group">'+f+"<\/div>":"")+'<div class="popup-button-group"><button class="btn btn-success mvc-grid-apply" type="button">'+e.Apply+'<\/button><button class="btn btn-danger mvc-grid-cancel" type="button">'+e.Remove+"<\/button><\/div><\/div>")},init:function(n,t,i){this.bindValue(n,t,i);this.bindApply(n,t,i);this.bindCancel(n,t,i)},bindValue:function(n,t,i){var r=i.find(".mvc-grid-input");$.fn.datepicker&&r.datepicker();r.on("change.mvcgrid keyup.mvcgrid",function(n){n.which==13&&i.find(".mvc-grid-apply").click()})},bindApply:function(n,t,i){var r=i.find(".mvc-grid-apply");r.on("click.mvcgrid",function(){i.removeClass("open");t.filter.operator=i.find(".mvc-grid-operator").val();t.filter.first.type=i.find(".first-filter .mvc-grid-type").val();t.filter.first.val=i.find(".first-filter .mvc-grid-input").val();t.filter.second.type=i.find(".second-filter .mvc-grid-type").val();t.filter.second.val=i.find(".second-filter .mvc-grid-input").val();n.applyFilter(n,t);n.reload(n)})},bindCancel:function(n,t,i){var r=i.find(".mvc-grid-cancel");r.on("click.mvcgrid",function(){i.removeClass("open");(t.filter.first.type||t.filter.second.type)&&(n.cancelFilter(n,t),n.reload(n))})}},n}(),MvcGridBooleanFilter=function(){function n(){}return n.prototype={render:function(n,t,i){var f=$.fn.mvcgrid.lang.Filter,u=$.fn.mvcgrid.lang.Operator,r=$.fn.mvcgrid.lang.Boolean;t.html('<div class="popup-arrow"><\/div><div class="popup-content"><div class="first-filter popup-group"><ul class="mvc-grid-boolean-filter"><li '+(i.first.val=="True"?'class="active" ':"")+'data-value="True">'+r.Yes+"<\/li><li "+(i.first.val=="False"?'class="active" ':"")+'data-value="False">'+r.No+"<\/li><\/ul><\/div>"+(i.isMulti?'<div class="popup-group popup-group-operator"><select class="mvc-grid-operator"><option value="">'+u.Select+'<\/option><option value="And"'+(i.operator=="And"?' selected="selected"':"")+">"+u.And+'<\/option><option value="Or"'+(i.operator=="Or"?' selected="selected"':"")+">"+u.Or+'<\/option><\/select><\/div><div class="second-filter popup-group"><ul class="mvc-grid-boolean-filter"><li '+(i.second.val=="True"?'class="active" ':"")+'data-value="True">'+r.Yes+"<\/li><li "+(i.second.val=="False"?'class="active" ':"")+'data-value="False">'+r.No+"<\/li><\/ul><\/div>":"")+'<div class="popup-button-group"><button class="btn btn-success mvc-grid-apply" type="button">'+f.Apply+'<\/button><button class="btn btn-danger mvc-grid-cancel" type="button">'+f.Remove+"<\/button><\/div><\/div>")},init:function(n,t,i){this.bindValue(n,t,i);this.bindApply(n,t,i);this.bindCancel(n,t,i)},bindValue:function(n,t,i){var r=i.find(".mvc-grid-boolean-filter li");r.on("click.mvcgrid",function(){$(this).addClass("active").siblings().removeClass("active")})},bindApply:function(n,t,i){var r=i.find(".mvc-grid-apply");r.on("click.mvcgrid",function(){i.removeClass("open");t.filter.first.type="Equals";t.filter.second.type="Equals";t.filter.operator=i.find(".mvc-grid-operator").val();t.filter.first.val=i.find(".first-filter li.active").data("value");t.filter.second.val=i.find(".second-filter li.active").data("value");n.applyFilter(n,t);n.reload(n)})},bindCancel:function(n,t,i){var r=i.find(".mvc-grid-cancel");r.on("click.mvcgrid",function(){i.removeClass("open");(t.filter.first.type||t.filter.second.type)&&(n.cancelFilter(n,t),n.reload(n))})}},n}();$.fn.mvcgrid=function(n){return this.each(function(){$.data(this,"mvc-grid")?n&&$.data(this,"mvc-grid").set($.data(this,"mvc-grid"),n):$.data(this,"mvc-grid",new MvcGrid($(this),n))})};$.fn.mvcgrid.lang={Text:{Contains:"Contains",Equals:"Equals",NotEquals:"Not equals",StartsWith:"Starts with",EndsWith:"Ends with"},Number:{Equals:"Equals",NotEquals:"Not equals",LessThan:"Less than",GreaterThan:"Greater than",LessThanOrEqual:"Less than or equal",GreaterThanOrEqual:"Greater than or equal"},Date:{Equals:"Equals",NotEquals:"Not equals",LessThan:"Is before",GreaterThan:"Is after",LessThanOrEqual:"Is before or equal",GreaterThanOrEqual:"Is after or equal"},Boolean:{Yes:"Yes",No:"No"},Filter:{Apply:"&#10004;",Remove:"&#10008;"},Operator:{Select:"",And:"and",Or:"or"}};$(function(){$("body").append('<div class="mvc-grid-popup"><\/div>')})