function AjaxDataProvider(a){var b=this;b.rootDataUrl=(a.rootDataUrl||"");b.childDataUrl=(a.childDataUrl||"");b.saveDataUrl=(a.saveDataUrl||"");b.saveCellUrl=(a.saveCellUrl||"");b.deleteDataItemsUrl=(a.deleteDataItemsUrl||"");if(!$.toJSON){console.error("JSON object is not set, please be sure the JSON plug-in for jQuery has been loaded.");return}b.initialize=function(c,d){b.liteGrid=c;b.keyField=d.rowIdColumn};b.doAjax=function(f,e,d){if(!f){f=function(){}}if(!e){e=function(){}}b.liteGrid.$el.trigger("dataLoading");var c=$.extend({},{success:function(g){f(g)},error:e,complete:function(){b.liteGrid.$el.trigger("dataLoaded")},dataType:"json",cache:false},d);$.ajax(c)};b.getData=function(d,c){b.doAjax(d,c,{type:"GET",url:b.rootDataUrl})};b.getChildData=function(e,d,c){b.doAjax(d,c,{type:"GET",url:b.childDataUrl,data:{parentId:e}})};b.saveData=function(d,e,c){b.doAjax(e,c,{type:"POST",url:b.saveDataUrl,data:$.toJSON(d),contentType:"application/json; charset=utf-8"})};b.saveCell=function(h,d,f,g,c){var e={};e[b.keyField]=h;e[d]=f;b.doAjax(g,c,{type:"POST",url:b.saveCellUrl,data:e})};b.deleteDataItems=function(f,e,c){var d={};d[b.keyField+"s"]=f;b.doAjax(e,c,{url:b.deleteDataItemsUrl,data:d,contentType:"application/json; charset=utf-8"})}}function BasicLayoutProvider(){var c=this;var a=null;var b=null;c.initialize=function(e,d){a=e;b=d;a.wrapperDiv=$("<div class='litegrid ui-widget'></div>");a.$el.before(a.wrapperDiv);if(a.$el.attr("id")){a.wrapperDiv.attr("id",a.$el.attr("id")+"-wrapper")}a.headerDiv=$("<div class='grid-header'></div>");a.wrapperDiv.append(a.headerDiv);a.bodyDiv=$("<div class='grid-body'></div>");a.wrapperDiv.append(a.bodyDiv);a.bodyDiv.append(a.$el);a.footerDiv=$("<div class='gridFooter'></div>");a.wrapperDiv.append(a.footerDiv);a.headerTable=$("<table><thead><tr></tr></thead></table>");a.headerDiv.append(a.headerTable)};c.render=function(e){a.$el.empty();$("tr",a.headerTable).empty();$("colgroup",a.headerTable).remove();var f=$("tr",a.headerTable);var g=$("<colgroup></colgroup>").prependTo(a.headerTable);var d=$("<colgroup></colgroup>").appendTo(a.$el);$(b.columns).each(function(){if(this==null){return}var i=$("<th/>").addClass("ui-widget-header");var h=$("<div/>").addClass(this.field+"RichHeader").html(this.header||this.field);f.append(i.append(h));var k=$("<col/>").addClass(this.field+"Column");var j=k.clone();g.append(k);d.append(j);h.resizable({handles:"e",resize:function(l,m){j.width(m.element.width());k.width(m.element.width())}})});g.append($("<col class='filler-column' />"));d.append($("<col class='filler-column' />"));f.append($("<th class='filler-cell'></th>"));a.bodyDiv.scroll(function(h){var i=-1*$(this).scrollLeft();a.headerTable.css("margin-left",i)});a.$el.trigger("headerRendered",a);c.renderRows(e.dataItems);a.$el.trigger("tableUpdated",a);a.$el.trigger("tableRendered")};c.renderRows=function(d){if(!d){console.warn("No data items available to render.");return}$(d).each(function(){var e=c.buildRow(this);a.$el.append(e)})};c.buildRow=function(d){var e=$("<tr></tr>");$(b.columns).each(function(){e.append("<td></td>")});$("<td class='filler-cell'></td>").appendTo(e);c.bindRow(e,d);return e};c.bindRow=function(h,d){var f=d[b.rowIdColumn];if(h.attr("id")!=undefined&&h.attr("id")!=""){var g=parseInt(h.attr("id").replace("row-id-",""));if(g!=f){var e=$.Event("rowIdChanging");e.row=h;e.oldId=g;e.newId=f;console.log("Raising!",e);a.$el.trigger(e)}}h.attr("id","row-id-"+f);h.data("dataItem",d);$(b.columns).each(function(i){var k=this;var m=d[k.field];if(m==undefined){m=k.defaultValue}if(m==undefined){m=b.missingValue}var j=h.children(":eq("+i+")");j.html(m);var l=$.Event("columnBound");l.column=k;l.element=j;l.dataItem=d;a.$el.trigger(l)});a.$el.trigger("rowBound",[h,d])};c.insertRowAfter=function(d,e){var f=c.buildRow(d);f.insertAfter(e);a.$el.trigger("tableUpdated",a);return f};c.appendRow=function(d){var e=c.buildRow(d);a.$el.append(e);a.$el.trigger("tableUpdated",a);return e}}function BatchSaveModule(){var a=this;a.initialize=function(b,c){a.liteGrid=b;a.dataProvider=b.dataProvider;a.options=$.extend({},BatchSaveModule.prototype.defaultOptions,c);if(!a.dataProvider.saveData){console.error("Data provider does not support saving rows.  Be sure to use a compatibile data provider.");return}b.$el.bind("initializationComplete",function(){if(!a.liteGrid.addToolbarButton){console.error("BatchAjaxSaveModule requires ToolbarModule.  Be sure the module is initialized correctly.");return}a.createButton();window.onbeforeunload=a.beforeUnload})};a.createButton=function(){a.liteGrid.batchSaveChanges=a.batchSaveChanges;a.liteGrid.addToolbarButton({icon:"ui-icon-disk",text:a.options.batchSaveButtonLabel,action:function(){setTimeout(a.batchSaveChanges,200)}})};a.getChanges=function(){var b={tableRows:[],dataItems:[]};$("tr:has(td.modified),tr.deleted",a.liteGrid.$el).each(function(){var c=this;b.tableRows.push(c);b.dataItems.push($(c).data("dataItem"))});return b};a.batchSaveChanges=function(f){var c=a.getChanges();var e=$.Event("beforeSave");e.changes=c;a.liteGrid.$el.trigger(e);if(e.cancel){var d=$.Event("actionCancelled");d.message="Save Failed: "+e.cancelMessage;a.liteGrid.$el.trigger(d);return}var b=c.dataItems;if(!$.isFunction(f)){f=function(){}}if(b.length==0){f();return}a.dataProvider.saveData(b,function(g){if(!g.status||g.status!==true){a.raiseError(null,g.status,g.message)}else{$(c.tableRows).each(function(h){a.applyUpdates($(this),g.dataItems[h])});$(c.tableRows).children("td.modified").removeClass("modified ui-state-highlight")}a.liteGrid.$el.trigger("dataSaved",[g.dataItems,c.tableRows]);f()},function(i,g,h){a.raiseError(i,g,h);f()})};a.raiseError=function(e,b,c){var d=$.Event("BatchAjaxSaveError");d.request=e;d.status=b;d.error=c;a.liteGrid.raiseErrorEvent(d)};a.beforeUnload=function(){if(a.getChanges().dataItems.length>0){return"You have unsaved changes that will be discarded."}};a.applyUpdates=function(d,c){if(c[a.options.deleteColumnName]===true){var b=d.data("rowsToDelete");b.remove()}else{a.liteGrid.bindRow($(d),c)}}}BatchSaveModule.prototype.defaultOptions={batchSaveButtonLabel:"Save"};function BlockUIModule(){var a=this;a.initialize=function(b,c){if(!$.blockUI){console.error("BlockUI plug-in is not loaded, unable to use BlockUIModule.");return}b.$el.bind("dataLoading",a.dataLoading);b.$el.bind("dataLoaded",a.dataLoaded);b.$el.bind("actionCancelled",a.actionCancelled);a.liteGrid=b};a.dataLoading=function(){a.liteGrid.wrapperDiv.block({message:"Loading, please wait..."})};a.dataLoaded=function(){a.liteGrid.wrapperDiv.unblock()};a.actionCancelled=function(c){var b=$("<input/>").attr({type:"button",value:"OK"}).click(function(){a.liteGrid.wrapperDiv.unblock();return false});var d=$("<div/>");d.text(c.message);d.append("<br/>").append(b);a.liteGrid.wrapperDiv.block({message:d})}}function CellSaveModule(){var a=this;a.initialize=function(b,c){a.dataProvider=b.dataProvider;if(!a.dataProvider.saveCell){console.error("This module is only compatible with data providers that expose saveCell.");return}b.$el.bind("columnBound",a.columnBound);a.keyField=c.rowIdColumn};a.columnBound=function(e){var d=e.column;var c=e.element;if(c.hasClass("modified")){var b=c.parent().data("dataItem");var f=b[d.field];var g=b[a.keyField];a.dataProvider.saveCell(g,d.field,f,function(h){if(h.status!==true){return}else{c.removeClass("modified")}})}}}function CheckboxValueModule(){var b=this;var a;b.initialize=function(c,d){b.liteGrid=c;b.options=d;a=(d.isEditableCallback)||function(){return true};c.$el.bind("columnBound",b.columnBound)};b.columnBound=function(g){var f=g.column;var e=g.element;var d=g.dataItem;if(f.type!="checkbox"){return}if(f.editable!==true||!a(f,e,d)||e.data("editable")===true){return}var c=$('<input type="checkbox"/>');if(d[f.field]){c.attr("checked","checked")}e.html(c);c.click(function(h){b.saveCell($(this).attr("checked"),g)})};b.saveCell=function(h,f){var c=$(f.element);var d=c.parent().data("dataItem");var e=d[f.column.field];var g=$.Event("valueChanged");g.currentValue=e;g.newValue=h;g.column=f.column;b.liteGrid.$el.trigger(g);h=g.newValue;f.valueChanged=e!=h;if(f.valueChanged){if(c.hasClass("modified")){c.removeClass("modified").removeClass("ui-state-highlight")}else{c.addClass("modified").addClass("ui-state-highlight")}d[f.column.field]=h;c.parent().data("dataItem",d)}return h}}function DraggableRowsModule(){var a=this;a.initialize=function(b,c){a.options=c;a.liteGrid=b;var d=b.getModule("TreeGridModule");if(d!=null){a.treeGrid=d}$(c.columns).each(function(e){if(this.field=="utils"){a.utilsIndex=e}});if(a.utilsIndex===undefined){console.error("Unable to find a column named 'utils' to add the tree controls to. ");return}if(!$.fn.draggable||!$.fn.droppable){console.error("Unable to load DraggableRowModule because jQuery UI is not available.");return}a.options=$.extend({},DraggableRowsModule.prototype.defaultOptions,c);b.$el.bind("rowBound",a.rowBound)};a.getUtilsCell=function(b){return b.children(":eq("+a.utilsIndex+")")};a.rowBound=function(e,f,d,c){var b=$("<span class='draghandle ui-icon ui-icon-grip-dotted-vertical'/>");if(a.treeGrid){a.getUtilsCell(f).find("span.expander").before(b)}else{a.getUtilsCell(f).append(b)}b.draggable({helper:function(){return"<div class='ghost'></div>"},start:a.resizeGhost,drag:a.dragGhost,revert:"invalid",handle:"span.draghandle",cursorAt:{left:0,top:0},refreshPositions:true});f.droppable({hoverClass:"ui-state-active",drop:a.rowDropped})};a.resizeGhost=function(d,e){var c=e.helper;var g=$(d.target).parents("tr");var f=g.data("dataItem")[a.options.rowIdColumn];var h=g.add(a.liteGrid.getChildren(f));var b=0;h.each(function(){var i=$(this);if(i.css("display")!="none"){b+=i.height()}});c.width(g.width());c.height(b);c.css("margin-top",-1*b/2);c.css("line-height",b+"px")};a.dragGhost=function(f,h){var d=$(f.target);if(d.draggable("option","refreshPositions")){d.draggable("option","refreshPositions",false)}if(h.position.left>a.options.draggablePixelThreshold){if(a.treeGrid){h.helper.html("Drop to add as a subtree.")}else{h.helper.html("Drop to add after row.")}}else{h.helper.html("Drop to add before row.")}var c=a.liteGrid.bodyDiv;var g=c.offset();var i=c.height();var b=c.attr("scrollTop");var e=h.helper.offset();if(e.top<g.top){d.draggable("option","refreshPositions",true);c.attr("scrollTop",b-a.options.dragIncrement)}else{if(e.top>(g.top+i)){d.draggable("option","refreshPositions",true);c.attr("scrollTop",b+a.options.dragIncrement)}}};a.rowDropped=function(d,e){var g=$(d.target);var h=e.draggable.parents("tr");var c=h.data("dataItem");var f=c[a.options.rowIdColumn];var b=h.add(a.liteGrid.getChildren(f));if(!a.moveAllowed(b,g)){return}if(e.position.left>a.options.draggablePixelThreshold){a.addRowsAsChildren(b,g)}else{a.moveRowsBefore(b,g)}a.ensureRowVisibile(h);a.pulseVisibleRows(b);a.liteGrid.$el.trigger("tableUpdated",a.liteGrid)};a.moveAllowed=function(c,d){d=d.get(0);for(var b=0;b<c.length;b++){if(c.get(b)==d){return false}}var e=$.Event("RowsMoving");e.rows=c;e.destination=$(d);e.cancelMove=false;a.liteGrid.$el.trigger(e);return e.cancelMove!==true};a.addRowsAsChildren=function(c,d){c.insertAfter(d);if(!a.treeGrid){return}a.adjustRowParent(c.eq(0),d);a.reapplyIndent(c,d);var e=a.getUtilsCell(d).find("span.expander");if(e.hasClass("ui-icon-bullet")){var b=d.data("dataItem");d.addClass("children-loaded").attr("expanded",true);e.addClass("ui-icon-minusthick").removeClass("ui-icon-bullet").toggle(function(){a.treeGrid.rowCollapsed(b[a.options.rowIdColumn])},function(){a.treeGrid.rowExpanded(b[a.options.rowIdColumn])})}else{if(e.hasClass("ui-icon-plusthick")&&!e.hasClass("childrenLoaded")){e.click()}}};a.adjustRowParent=function(e,d){var c=e.attr("parentid");var b=d!=null?d.data("dataItem")[a.options.rowIdColumn]:a.options.rootId;if(c!=undefined){e.removeAttr("parentid").removeClass("child-of-"+c)}e.data("dataItem")[a.options.newIdColumn]=b==undefined?a.options.rootId:b;if(b!=undefined){e.attr("parentid",b).addClass("child-of-"+b)}a.getUtilsCell(e).addClass("modified ui-state-highlight");if(d!=null){d.data("dataItem").HasChildren=true}};a.reapplyIndent=function(c,b){var g=0;if(b!=null){g=parseInt(a.getUtilsCell(b).find("span.expander").css("margin-left"));if(isNaN(g)){g=0}g+=a.treeGrid.options.paddingPerLevel}var f=c.eq(0);var d=parseInt(a.getUtilsCell(f).find("span.expander").css("margin-left"));if(isNaN(d)){d=0}var e=g-d;c.each(function(){var j=$(this);var k=a.getUtilsCell(j).find("span.expander");var i=parseInt(k.css("margin-left"));if(isNaN(i)){i=0}var h=(i+e)+"px";k.css("margin-left",h);j.attr("expanderPadding",h)})};a.moveRowsBefore=function(d,b){$(d).insertBefore(b);if(!a.treeGrid){return}var e=d.eq(0);var f=b.attr("parentid");var c=null;if(f!=undefined&&f!=a.options.rootId){c=$("tr[id='row-id-"+f+"']",a.liteGrid.$el)}a.adjustRowParent(e,c);a.reapplyIndent(d,c)};a.pulseVisibleRows=function(c){var b=$([]);c.each(function(){var d=$(this);if(!d.hasClass("hidden")){b=b.add(d)}});b.stop();b.effect("highlight",{},2000)};a.ensureRowVisibile=function(c){var b=a.liteGrid.bodyDiv.attr("scrollTop");a.liteGrid.bodyDiv.attr("scrollTop",b+c.position().top-2*c.height())}}DraggableRowsModule.prototype.defaultOptions={draggablePixelThreshold:50,newIdColumn:"newParentId",rootId:0,dragIncrement:10};function FormatModule(){var a=this;a.initialize=function(b,c){b.$el.bind("columnBound",a.columnBound);a.liteGrid=b;a.options=c};a.columnBound=function(e){var d=e.column;var c=e.element;if(d.formatter){var b=c.parent().data("dataItem");d.formatter(d,c,b)}}}function JEditableModule(){var b=13;var c=this;var a;c.initialize=function(d,e){c.liteGrid=d;c.options=e;a=(e.isEditableCallback)||function(){return true};if(!$.editable){console.log("Unable to initialize, can't find the jEditable plug-in.");return}d.$el.bind("columnBound",c.columnBound);c.missingEditors={}};c.columnBound=function(h){var g=h.column;var f=h.element;var e=h.dataItem;if(g.editable!==true||!a(g,f,e)||f.data("editable")===true){return}var d=$.extend({},JEditableModule.defaultOptions,{callback:c.afterSave,column:g,tdElement:f,data:c.beforeEdit,name:g.field});if(g.type){if(!$.editable.types[g.type]){if(!c.missingEditors[g.type]){console.warn("Unable to find editor for type "+g.type+" in jEditable.");c.missingEditors[g.type]=true}return}d.type=g.type}if(g.type=="select"){d.data=g.selectOptions;f.keyup(function(i){if(i.keyCode==b){$("select",f).blur()}})}f.editable(c.saveCell,d).addClass("editable").data("editable",true)};c.beforeEdit=function(f,d){var e=$.Event("cellEditing");e.column=d.column;e.currentValue=f;c.liteGrid.$el.trigger(e);return e.currentValue};c.saveCell=function(i,g){var d=$(g.tdElement);var e=d.parent().data("dataItem");var f=e[g.column.field];var h=$.Event("valueChanged");h.currentValue=f;h.newValue=i;h.column=g.column;h.tdElement=g.tdElement;c.liteGrid.$el.trigger(h);i=h.newValue;if(f==i||((f||null)==null&&i=="")){g.valueChanged=false}else{g.valueChanged=true;d.addClass("modified");d.addClass("ui-state-highlight");e[g.column.field]=(i==="")?null:i;d.parent().data("dataItem",e)}return i};c.afterSave=function(f,d){if(d.valueChanged==true){var e=$.Event("columnBound");e.column=d.column;e.element=d.tdElement;c.liteGrid.$el.trigger(e)}}}JEditableModule.defaultOptions={placeholder:"",onblur:"submit",type:"text"};$.editable.addInputType("currency",{element:$.editable.types.text.element});(function($){function toIntegersAtLease(n){return n<10?"0"+n:n}Date.prototype.toJSON=function(date){return this.getUTCFullYear()+"-"+toIntegersAtLease(this.getUTCMonth())+"-"+toIntegersAtLease(this.getUTCDate())};var escapeable=/["\\\x00-\x1f\x7f-\x9f]/g;var meta={"\b":"\\b","\t":"\\t","\n":"\\n","\f":"\\f","\r":"\\r",'"':'\\"',"\\":"\\\\"};$.quoteString=function(string){if(escapeable.test(string)){return'"'+string.replace(escapeable,function(a){var c=meta[a];if(typeof c==="string"){return c}c=a.charCodeAt();return"\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16)})+'"'}return'"'+string+'"'};$.toJSON=function(o,compact){var type=typeof(o);if(type=="undefined"){return"undefined"}else{if(type=="number"||type=="boolean"){return o+""}else{if(o===null){return"null"}}}if(type=="string"){return $.quoteString(o)}if(type=="object"&&typeof o.toJSON=="function"){return o.toJSON(compact)}if(type!="function"&&typeof(o.length)=="number"){var ret=[];for(var i=0;i<o.length;i++){ret.push($.toJSON(o[i],compact))}if(compact){return"["+ret.join(",")+"]"}else{return"["+ret.join(", ")+"]"}}if(type=="function"){throw new TypeError("Unable to convert object of type 'function' to json.")}var ret=[];for(var k in o){var name;type=typeof(k);if(type=="number"){name='"'+k+'"'}else{if(type=="string"){name=$.quoteString(k)}else{continue}}var val=$.toJSON(o[k],compact);if(typeof(val)!="string"){continue}if(compact){ret.push(name+":"+val)}else{ret.push(name+": "+val)}}return"{"+ret.join(", ")+"}"};$.compactJSON=function(o){return $.toJSON(o,true)};$.evalJSON=function(src){return eval("("+src+")")};$.secureEvalJSON=function(src){var filtered=src;filtered=filtered.replace(/\\["\\\/bfnrtu]/g,"@");filtered=filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]");filtered=filtered.replace(/(?:^|:|,)(?:\s*\[)+/g,"");if(/^[\],:{}\s]*$/.test(filtered)){return eval("("+src+")")}else{throw new SyntaxError("Error parsing JSON, source is not valid.")}}})(jQuery);if(!console){var console={log:function(){},error:function(){},warn:function(){},info:function(){}}}(function(a){if(!a.inrad){a.inrad=new Object()}a.inrad.liteGrid=function(c,b){var d=this;d.$el=a(c);d.el=c;d.$el.data("inrad.liteGrid",d);d.init=function(){d.options=a.extend({},a.inrad.liteGrid.defaultOptions,b);d.dataProvider=d.options.dataProviderFactory();if(d.dataProvider.initialize){d.dataProvider.initialize(d,d.options)}var e=d.options.layoutProviderFactory();if(e.initialize){e.initialize(d,d.options);a.extend(this,e)}a(d.options.modules).each(function(){if(!this.initialize){return}if(this.constructor.name){this.moduleName=this.constructor.name}else{var f=this.constructor.toString().match(/function\s*(\w+)/);if(f&&f.length==2){this.moduleName=f[1]}else{this.moduleName="unknown_module"}}console.log("Initializing %s...",this.moduleName);this.initialize(d,d.options);console.log("Finished!")});d.$el.trigger("initializationComplete");d.rebind()};d.rebind=function(){d.dataProvider.getData(function(e){d.render(e)},function(h,e,f){var g=a.Event("DataLoadError");g.request=h;g.status=e;g.error=f;d.raiseErrorEvent(g)})};d.raiseErrorEvent=function(f){console.error("Error occurred.",f);d.$el.trigger(f);var e=a.extend({},f);e.type="GridError";d.$el.trigger(e)};d.getModule=function(e){for(var f=0;f<b.modules.length;f++){if(b.modules[f].moduleName==e){return b.modules[f]}}return null};d.render=function(e){throw"Configured layout provider failed to override render function."};d.renderRows=function(e){throw"Configured layout provider failed to override renderRows function."};d.buildRow=function(e){throw"Configured layout provider failed to override buildRow function."};d.bindRow=function(f,e){throw"Configured layout provider failed to override bindRow function."};d.insertRowAfter=function(e,f){throw"Configured layout provider failed to override insertRowAfter function."};d.appendRow=function(e){throw"Configured layout provider failed to override appendRow function."};d.init()};a.inrad.liteGrid.defaultOptions={columns:[],dataProviderFactory:function(){return new NullDataProvider()},modules:[],missingValue:"",rowIdColumn:"ID",layoutProviderFactory:function(){return new BasicLayoutProvider()},deleteColumnName:"deleted"};a.fn.inrad_liteGrid=function(b){return this.each(function(){(new a.inrad.liteGrid(this,b))})};a.fn.getinrad_liteGrid=function(){return this.data("inrad.liteGrid")}})(jQuery);function NullDataProvider(){this.getData=function(){return new Array()}}function RowAdditionModule(){var a=this;var b=-1;a.initialize=function(c,d){a.liteGrid=c;a.options=d;c.$el.bind("initializationComplete",function(){if(!a.liteGrid.addToolbarButton){console.error("RowAdditionModule requires ToolbarModule.  Be sure the module is initialized correctly.");return}a.createButton()})};a.createButton=function(){a.liteGrid.addToolbarButton({icon:"ui-icon-plus",text:"Add",action:function(){var c={};c[a.options.rowIdColumn]=b--;c.IsNewRow=true;var e=a.liteGrid.appendRow(c);a.liteGrid.bodyDiv.attr("scrollTop",a.liteGrid.bodyDiv.attr("scrollHeight"));e.children("td").addClass("modified ui-state-highlight");var d=$.Event("rowAdded");d.row=e;a.liteGrid.$el.trigger(d)}})}}function RowDeleteModule(){var a=this;a.initialize=function(b,c){c.columns.push({field:"RowDeleteModule",header:"&nbsp;"});b.$el.bind("rowBound",a.rowBound);b.$el.bind("initializationComplete",function(){$(c.columns).each(function(e){if(this.field=="RowDeleteModule"){a.columnIndex=e}})});var d=b.getModule("TreeGridModule");if(d!=null){a.treeGridEnabled=true}a.options=c;a.liteGrid=b;a.dataProvider=b.dataProvider};a.rowBound=function(e,f,c){var b=$("td:eq("+a.columnIndex+")",f);var d=$("<div class='ui-icon ui-icon-circle-close delete-button'></div>");d.click(a.deleteClicked);b.append(d)};a.deleteClicked=function(){var h=$(this);var k=h.parents(":eq(1)");var b=k.data("dataItem");var e=b[a.options.rowIdColumn];var c=$.Event("beforeDelete");c.row=k;c.dataItem=b;c.id=e;a.liteGrid.$el.trigger(c);if(c.cancel){var d=$.Event("actionCancelled");d.message="Delete cancelled: "+c.cancelMessage;a.liteGrid.$el.trigger(d);return false}k.addClass("deleted");b[a.options.deleteColumnName]=true;var j=k;if(a.treeGridEnabled){a.liteGrid.getChildren(e).find(".restore-button").click();j=j.add(a.liteGrid.getChildren(e))}var f=j.clone();for(var g=0;g<f.length;g++){f.eq(g).data("dataItem",j.eq(g).data("dataItem"))}f.insertBefore(k).addClass("pending-delete");j.remove();f.eq(0).data("rowsToDelete",f).find("div.ui-icon-circle-close").removeClass("ui-icon-circle-close delete-button").addClass("ui-icon-arrowreturnthick-1-w restore-button").click(a.restoreClicked)};a.restoreClicked=function(){var c=$(this).parents(":eq(1)");var b=c.data("rowsToDelete");c.removeData("rowsToDelete");b.each(function(){var d=$(this);a.liteGrid.bindRow(d,d.data("dataItem"))});b.removeClass("pending-delete");c.removeClass("deleted");delete c.data("dataItem")[a.options.deleteColumnName]}}function RowSortModule(){var c=this;var a;var b;c.initialize=function(d,e){a=d;b=e;a.$el.bind("headerRendered",c.makeHeadersClickable);c.sortArrow=$("<div class='sort-arrow ui-icon'/>");c.sortColumn=null;c.sortAsc=false};c.makeHeadersClickable=function(){$(b.columns).each(function(d){if(this.sortable===true){$("th:eq("+d+")",a.headerTable).addClass("sortable")}});$("th.sortable",a.headerTable).click(c.columnClicked)};c.columnClicked=function(){var h=$(this);var d=h.parent().children().index(h);var e=b.columns[d];if(c.sortColumn==e){c.sortAsc=!c.sortAsc}else{c.sortColumn=e;c.sortAsc=true}if(c.sortAsc){c.sortArrow.removeClass("ui-icon-carat-1-s");c.sortArrow.addClass("ui-icon-carat-1-n")}else{c.sortArrow.removeClass("ui-icon-carat-1-n");c.sortArrow.addClass("ui-icon-carat-1-s")}var f=[];var g={};$("tr",a.$el).each(function(){var j=$(this);var i=j.data("dataItem");var k={key:i[c.sortColumn.field],row:j,children:[]};g[i[b.rowIdColumn]]=k;if(j.attr("parentId")){g[j.attr("parentId")].children.push(k)}else{f.push(k)}});c.doSortAndAppend(f);c.sortArrow.appendTo($("> div",h));a.$el.trigger("tableUpdated",a)};c.doSortAndAppend=function(d){d.sort(c.compare);$(d).each(function(){var e=this;e.row.appendTo($("tbody",a.$el));if(e.children.length>0){c.doSortAndAppend(e.children)}})};c.compare=function(g,f){var h=g.key;var e=f.key;var d;if(h==e){return 0}if(h>e){d=1}else{d=-1}if(c.sortAsc){return d}else{return -1*d}}}function SafeGridModule(){var a=this;a.initialize=function(b,c){a.liteGrid=b;a.options=c;if(!$.editable){console.log("Error: JEditable is required for use with this module!")}b.$el.bind("valueChanged",a.valueChanged);b.$el.bind("cellEditing",a.cellEditing)};a.valueChanged=function(b){b.newValue=a.htmlEncode(b.newValue)};a.cellEditing=function(b){b.currentValue=a.htmlDecode(b.currentValue)};a.htmlEncode=function(b){return $("<div/>").text(b||"").html()};a.htmlDecode=function(b){return $("<div/>").html(b||"").text()}}function StripifyModule(){var a=this;a.initialize=function(b,c){b.$el.bind("tableUpdated",function(e,d){d.$el.find("tbody tr").removeClass("even odd");d.$el.find("tbody tr:visible:even").addClass("even");d.$el.find("tbody tr:visible:odd").addClass("odd")})}}function ToolbarModule(){var a=this;a.initialize=function(b,c){a.liteGrid=b;a.liteGrid.$el.bind("initializationComplete",a.addToolbar);a.options=$.extend({},ToolbarModule.defaultOptions,c);b.addToolbarButton=a.addToolbarButton;a.buttonBar=$("<div class='ui-widget-header toolbar'></div>")};a.addToolbar=function(){if(!a.liteGrid.footerDiv){console.error("No footer found on the div, can't add a toolbar.  Make sure LayoutManager is already running.");return}$(a.options.toolbarButtons).each(function(){a.addToolbarButton(this)});if(a.options.toolbarLocation=="footer"){a.liteGrid.footerDiv.append(a.buttonBar)}else{if(a.options.toolbarLocation=="header"){a.liteGrid.headerDiv.append(a.buttonBar)}else{$(a.options.toolbarLocation).append(a.buttonBar)}}};a.addToolbarButton=function(c){var b=$("<div class='button'><span class='ui-icon "+c.icon+"'></span>"+c.text+"</div>");b.click(function(){a.liteGrid.$el.trigger("toolbarButtonClicked",[b,c]);if(c.action){c.action()}});b.mouseover(function(){$(this).addClass("ui-state-hover")});b.mouseout(function(){$(this).removeClass("ui-state-hover")});a.buttonBar.append(b)}}ToolbarModule.defaultOptions={toolbarButtons:[],toolbarLocation:"footer"};function TreeGridModule(){var a=this;a.initialize=function(b,c){a.liteGrid=b;if(!("getChildData" in b.dataProvider)){console.error("Specified data provider is not compatible with TreeGridModule, aborting initialization.");return}a.dataProvider=b.dataProvider;$(c.columns).each(function(d){if(this.field=="utils"){a.utilsIndex=d}});if(a.utilsIndex===undefined){console.error("Unable to find a column named 'utils' to add the tree controls to. ");return}a.options=$.extend({},TreeGridModule.prototype.defaultOptions,c);b.$el.bind("rowBound",a.rowBound);b.$el.bind("rowIdChanging",a.rowIdChanging);b.getChildren=a.getChildren};a.getChildren=function(d){var b=a.liteGrid.$el.find("tr.child-of-"+d);var c=$([]);if(b.length>0){b.each(function(){var e=this;c=c.add(e).add(a.getChildren($(e).data("dataItem")[a.options.rowIdColumn]))})}return c};a.getUtilsCell=function(b){return b.children(":eq("+a.utilsIndex+")")};a.rowBound=function(f,h,e,d){var c=a.getUtilsCell(h);var b=$("<div class='controls'></div>");var g=$("<span class='ui-icon expander' />");if(e.HasChildren===true){if(h.attr("expanded")==="true"){g.addClass("ui-icon-minusthick").toggle(function(){a.rowCollapsed(e[a.options.rowIdColumn])},function(){a.rowExpanded(e[a.options.rowIdColumn])})}else{g.addClass("ui-icon-plusthick").toggle(function(){a.rowExpanded(e[a.options.rowIdColumn])},function(){a.rowCollapsed(e[a.options.rowIdColumn])})}}else{g.addClass("ui-icon-bullet")}if(h.attr("expanderPadding")!=undefined){g.css("margin-left",h.attr("expanderPadding"))}c.append(b.append(g))};a.rowCollapsed=function(e){var c=a.liteGrid.$el.find("tr#row-id-"+e);c.attr("expanded",false);var d=a.getUtilsCell(c).find("span.expander").removeClass("ui-icon-minusthick").addClass("ui-icon-plusthick");var b=a.getChildren(e);b.filter(".child-of-"+e).not(".disabled").addClass("hidden");b.hide();a.liteGrid.$el.trigger("tableUpdated",a.liteGrid)};a.rowExpanded=function(f){var c=a.liteGrid.$el.find("#row-id-"+f);c.attr("expanded",true);var e=a.getUtilsCell(c).find("span.expander").removeClass("ui-icon-plusthick").addClass("ui-icon-minusthick");if(c.hasClass("children-loaded")){var b=a.getChildren(f);b.filter(".child-of-"+f).not(".disabled").removeClass("hidden");b.not(".hidden, .disabled").show();a.liteGrid.$el.trigger("tableUpdated",a.liteGrid);return}var d=parseInt(e.css("margin-left"));if(isNaN(d)){d=0}a.dataProvider.getChildData(f,function(g){var h=c;$(g.dataItems).each(function(){var i=a.liteGrid.insertRowAfter(this,h);i.addClass("child-of-"+f).attr("parentId",f);var j=(d+a.options.paddingPerLevel)+"px";a.getUtilsCell(i).find("span.expander").css("margin-left",j);i.attr("expanderPadding",j);h=i})},function(j,h,g){var i=$.Event("TreeGridLoadError");i.request=j;i.error=h;i.status=g;a.liteGrid.raiseErrorEvent(i)});c.addClass("children-loaded")};a.rowIdChanging=function(b){$("tr.child-of-"+b.oldId).attr("parentid",b.newId).removeClass("child-of-"+b.oldId).addClass("child-of-"+b.newId)}}TreeGridModule.prototype.defaultOptions={paddingPerLevel:5};function ValidateModule(){var d=this;var f;var c;var a;d.initialize=function(g,h){if(!h.validateRules){throw ("ValidateModule must be initialized with options.validateRules")}d.liteGrid=g;d.options=h;f=h.validateRules;c=h.validateMessages;a=h.validateTooltipOptions||{position:{corner:{target:"topMiddle",tooltip:"bottomMiddle"}},style:{background:"#F7BDBD",border:{radius:3,color:"#DF3434",},tip:{corner:"bottomMiddle",color:"#DF3434"}}};$.editable.types.text.plugin=d.bindValidate;g.$el.bind("valueChanged",d.valueChanged);g.$el.bind("beforeSave",d.beforeSave);g.$el.bind("beforeDelete",d.beforeDelete);g.$el.bind("rowAdded",d.rowAdded);g.$el.bind("rowBound",d.rowBound)};d.bindValidate=function(j,h){var g=j.tdElement;var i={rules:f,messages:c,errorPlacement:d.errorPlacement};$("form",h).validate(i)};d.errorPlacement=function b(i,j){var g=$(j).parents("form").parent();if(g.data("qtip")==undefined){var h=$.extend({content:{prerender:true,text:i.text()}},a);g.qtip(h);d.liteGrid.bodyDiv.bind("scroll",g,d.scrollCell);g.bind("focus",g,d.focusCell)}g.qtip("show")};d.scrollCell=function(h){var g=h.data;if(g.data("qtip")){g.qtip("api").updatePosition();g.qtip("hide")}};d.focusCell=function(h){var g=h.data;if(g.data("qtip")){g.qtip("show")}};d.valueChanged=function(i){if(i.tdElement==undefined){return}var g=$(i.tdElement);var k=g.parents("tr:first");var h=k.data("dataItem");var j=$("form",g);if(j.valid()){g.removeClass("invalid").removeClass("ui-state-error");if(g.data("qtip")){g.qtip("destroy");d.liteGrid.bodyDiv.unbind("scroll",d.scrollCell);g.unbind("focus",d.focusCell)}if($(".invalid",k).length==0){delete h.invalid}}else{g.addClass("invalid").addClass("ui-state-error");h.invalid=true}};d.beforeSave=function(g){$(g.changes.dataItems).each(function(h){if(this.invalid){g.cancel=true;g.cancelMessage="There are one or more cells with invalid values preventing your action.  Please correct the issues before trying again."}})};d.beforeDelete=function(g){if(g.dataItem.invalid){g.cancel=true;g.cancelMessage="There are one or more cells with invalid values preventing deleting this row. Please correct the issues before trying again."}};d.rowAdded=function(g){e(g.row)};d.rowBound=function(h,i,g){if(g.IsNewRow){e(i)}};function e(h){var g=h.data("dataItem");g.invalid=true;$(d.options.columns).each(function(k){var j=f[this.field];if(j&&j.required){$("td:eq("+k+")",h).addClass("invalid").addClass("ui-state-error")}})}};
