Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/erpnext/accounts/page/financial_analytics/financial_analytics.js b/erpnext/accounts/page/financial_analytics/financial_analytics.js
index 19cf355..5445fc9 100644
--- a/erpnext/accounts/page/financial_analytics/financial_analytics.js
+++ b/erpnext/accounts/page/financial_analytics/financial_analytics.js
@@ -36,19 +36,7 @@
 				var out = (val=='Profit and Loss') ? item.is_pl_account=='Yes' : item.is_pl_account!='Yes';
 				if(!out) return false;
 				
-				// show only non-zero values
-				if(!me.show_zero) {
-					for(var i=0, j=me.columns.length; i<j; i++) {
-						var col = me.columns[i];
-						if(col.formatter==me.currency_formatter) {
-							if(flt(item[col.field]) > 0.001) {
-								return true;
-							} 
-						}
-					}					
-					return false;
-				} 
-				return true;
+				return me.apply_zero_filter(val, item, opts, me);
 			}},
 		{fieldtype:"Select", label: "Company", link:"Company", default_value: "Select Company...",
 			filter: function(val, item, opts) {
@@ -151,9 +139,6 @@
 			me.filter_inputs.refresh.click();
 		});
 		this.wrapper.bind('make', function() {
-			me.wrapper.find('.show-zero').toggle(true).find('input').click(function(){
-				me.refresh();
-			});
 			me.wrapper.on("click", ".plot-check", function() {
 				var checked = $(this).attr("checked");
 				me.account_by_name[$(this).attr("data-id")].checked = checked ? true : false;
@@ -206,7 +191,6 @@
 		}
 		this.update_groups();
 		this.accounts_initialized = true;
-		this.show_zero = $('.show-zero input:checked').length;
 	},
 	add_balance: function(field, account, gl) {
 		account[field] = flt(account[field]) + 
@@ -233,7 +217,7 @@
 		var pl_or_bs = this.filter_inputs.pl_or_bs.val();
 		$.each(this.accounts, function(i, account) {
 			var show = pl_or_bs == "Profit and Loss" ? account.is_pl_account=="Yes" : account.is_pl_account!="Yes";
-			if (show && account.checked) {
+			if (show && account.checked && me.apply_filter(account, "company")) {
 				data.push({
 					label: account.name,
 					data: $.map(me.columns, function(col, idx) {
@@ -267,5 +251,5 @@
 				min: dateutil.str_to_obj(this.from_date).getTime(),
 				max: dateutil.str_to_obj(this.to_date).getTime() }
 		}
-	}
+	},
 })
\ No newline at end of file
diff --git a/erpnext/accounts/page/general_ledger/general_ledger.js b/erpnext/accounts/page/general_ledger/general_ledger.js
index c74b8c5..8a57b06 100644
--- a/erpnext/accounts/page/general_ledger/general_ledger.js
+++ b/erpnext/accounts/page/general_ledger/general_ledger.js
@@ -137,13 +137,57 @@
 								
 			
 			if(!me.is_default("account")) {
+				if(me.account_by_name[me.account].debit_or_credit == "Debit") {
+					opening.debit -= opening.credit; opening.credit = 0;
+					closing.debit -= closing.credit; closing.credit = 0;
+				} else {
+					opening.credit -= opening.debit; opening.debit = 0;
+					closing.credit -= closing.debit; closing.debit = 0;
+				}
 				var out = [opening].concat(out).concat([totals, closing]);
 			} else {
 				var out = out.concat([totals]);
 			}
 			
+			// sanitize opening / closing
+			
+			this.data = out;
 			this.prepare_data_view(out);
 		},
+		get_plot_data: function() {
+			var data = [];
+			var me = this;
+			if(me.is_default("account") || me.voucher_no) return false;
+			var debit_or_credit = me.account_by_name[me.account].debit_or_credit;
+			var balance = debit_or_credit=="Debit" ? me.data[0].debit : me.data[0].credit;
+			data.push({
+				label: me.account,
+				data: [[dateutil.str_to_obj(me.from_date).getTime(), balance]]
+					.concat($.map(me.data, function(col, idx) {
+						if (col.posting_date) {
+							var diff = (debit_or_credit == "Debit" ? 1 : -1) * (flt(col.debit) - flt(col.credit));
+							balance += diff;
+							return [[dateutil.str_to_obj(col.posting_date).getTime(), balance - diff],
+									[dateutil.str_to_obj(col.posting_date).getTime(), balance]]
+						}
+						return null;
+					})).concat([
+						// closing
+						[dateutil.str_to_obj(me.to_date).getTime(), balance]
+					]),
+				points: {show: true},
+				lines: {show: true, fill: true},
+			});
+			return data;
+		},
+		get_plot_options: function() {
+			return {
+				grid: { hoverable: true, clickable: true },
+				xaxis: { mode: "time", 
+					min: dateutil.str_to_obj(this.from_date).getTime(),
+					max: dateutil.str_to_obj(this.to_date).getTime() }
+			}
+		},
 	});
 
 }
diff --git a/erpnext/stock/page/stock_ledger/stock_ledger.js b/erpnext/stock/page/stock_ledger/stock_ledger.js
index ee97868..d4778ce 100644
--- a/erpnext/stock/page/stock_ledger/stock_ledger.js
+++ b/erpnext/stock/page/stock_ledger/stock_ledger.js
@@ -13,6 +13,7 @@
 		doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry"],
 
 		setup_columns: function() {
+			this.hide_balance = (this.is_default("item_code") || this.voucher_no) ? true : false;
 			this.columns = [
 				{id: "posting_datetime", name: "Posting Date", field: "posting_datetime", width: 120,
 					formatter: this.date_formatter},
@@ -27,7 +28,8 @@
 				{id: "qty", name: "Qty", field: "qty", width: 100,
 					formatter: this.currency_formatter},
 				{id: "balance", name: "Balance", field: "balance", width: 100,
-					formatter: this.currency_formatter},
+					formatter: this.currency_formatter,
+					hidden: this.hide_balance},
 				{id: "voucher_type", name: "Voucher Type", field: "voucher_type", width: 120},
 				{id: "voucher_no", name: "Voucher No", field: "voucher_no", width: 160,
 					link_formatter: {
@@ -38,6 +40,7 @@
 				{id: "description", name: "Description", field: "description", width: 200,
 					formatter: this.text_formatter},
 			];
+			
 		},
 		filters: [
 			{fieldtype:"Select", label: "Warehouse", link:"Warehouse", default_value: "Select Warehouse...",
@@ -134,7 +137,7 @@
 			if(me.item_code != me.item_code_default && !me.voucher_no) {
 				var closing = {
 					item_code: "On " + dateutil.str_to_user(this.to_date), 
-					balane: me.item_by_name[sl.item_code].balance, qty: 0,
+					balance: (out ? out[out.length-1].balance : 0), qty: 0,
 					id:"_closing", _show: true, _style: "font-weight: bold"
 				};
 				var out = [opening].concat(out).concat([total_in, total_out, closing]);
@@ -143,5 +146,41 @@
 			this.data = out;
 			this.prepare_data_view(out);			
 		},
+		get_plot_data: function() {
+			var data = [];
+			var me = this;
+			if(me.hide_balance) return false;
+			data.push({
+				label: me.item_code,
+				data: [[dateutil.str_to_obj(me.from_date).getTime(), me.data[0].balance]]
+					.concat($.map(me.data, function(col, idx) {
+						if (col.posting_datetime) {
+							return [[dateutil.str_to_obj(col.posting_datetime).getTime(), col.balance - col.qty],
+									[dateutil.str_to_obj(col.posting_datetime).getTime(), col.balance]]
+						}
+						return null;
+					})).concat([
+						// closing
+						[dateutil.str_to_obj(me.to_date).getTime(), me.data[me.data.length - 1].balance]
+					]),
+				points: {show: true},
+				lines: {show: true, fill: true},
+			});
+			return data;
+		},
+		get_plot_options: function() {
+			return {
+				grid: { hoverable: true, clickable: true },
+				xaxis: { mode: "time", 
+					min: dateutil.str_to_obj(this.from_date).getTime(),
+					max: dateutil.str_to_obj(this.to_date).getTime() }
+			}
+		},
+		get_tooltip_text: function(label, x, y) {
+			var d = new Date(x);
+			var date = dateutil.obj_to_user(d + " " + d.getHours() + ":" + d.getMinutes());
+		 	var value = fmt_money(y);
+			return value + " on " + date;
+		},
 	});
 }
\ No newline at end of file
diff --git a/public/js/all-app.js b/public/js/all-app.js
index dc2904e..238bffa 100644
--- a/public/js/all-app.js
+++ b/public/js/all-app.js
@@ -353,11 +353,11 @@
  */
 wn.provide('wn.pages');wn.provide('wn.views');wn.views.Container=Class.extend({init:function(){this.container=$('#body_div').get(0);this.page=null;this.pagewidth=$('#body_div').width();this.pagemargin=50;},add_page:function(label,onshow,onhide){var page=$('<div class="content"></div>').attr('id',"page-"+label).appendTo(this.container).get(0);if(onshow)
 $(page).bind('show',onshow);if(onshow)
-$(page).bind('hide',onhide);page.label=label;wn.pages[label]=page;return page;},change_to:function(label){if(this.page&&this.page.label==label){return;}
+$(page).bind('hide',onhide);page.label=label;wn.pages[label]=page;return page;},change_to:function(label){if(this.page&&this.page.label==label){$(this.page).trigger('show');return;}
 var me=this;if(label.tagName){var page=label;}else{var page=wn.pages[label];}
 if(!page){console.log('Page not found '+label);return;}
 if(this.page&&this.page!=page){$(this.page).toggle(false);$(this.page).trigger('hide');}
-if(!this.page||this.page!=page){this.page=page;$(this.page).fadeIn();}
+if(!this.page||this.page!=page){this.page=page;$(this.page).toggle(true);}
 this.page._route=window.location.hash;document.title=this.page.label;$(this.page).trigger('show');scroll(0,0);return this.page;}});wn.views.add_module_btn=function(parent,module){$(parent).append(repl('<span class="label" style="margin-right: 8px; cursor: pointer;"\
      onclick="wn.set_route(\'%(module_small)s-home\')">\
      <i class="icon-home icon-white"></i> %(module)s Home\
@@ -486,11 +486,13 @@
 val=d[1]+'/'+d[2]+'/'+d[0]+time_str;else if(user_fmt=='mm-dd-yyyy')
 val=d[1]+'-'+d[2]+'-'+d[0]+time_str;}
 return val;},full_str:function(){var d=new Date();return d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate()+' '
-+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();},user_to_str:function(d){var user_fmt=this.get_user_fmt();if(user_fmt=='dd-mm-yyyy'){var d=d.split('-');return d[2]+'-'+d[1]+'-'+d[0];}
-else if(user_fmt=='dd/mm/yyyy'){var d=d.split('/');return d[2]+'-'+d[1]+'-'+d[0];}
-else if(user_fmt=='yyyy-mm-dd'){return d;}
-else if(user_fmt=='mm/dd/yyyy'){var d=d.split('/');return d[2]+'-'+d[0]+'-'+d[1];}
-else if(user_fmt=='mm-dd-yyyy'){var d=d.split('-');return d[2]+'-'+d[0]+'-'+d[1];}},user_to_obj:function(d){return dateutil.str_to_obj(dateutil.user_to_str(d));},global_date_format:function(d){if(d.substr)d=this.str_to_obj(d);return nth(d.getDate())+' '+month_list_full[d.getMonth()]+' '+d.getFullYear();},get_today:function(){var today=new Date();var m=(today.getMonth()+1)+'';if(m.length==1)m='0'+m;var d=today.getDate()+'';if(d.length==1)d='0'+d;return today.getFullYear()+'-'+m+'-'+d;},get_cur_time:function(){var d=new Date();var hh=d.getHours()+''
++d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();},user_to_str:function(d){var user_fmt=this.get_user_fmt();var time_str='';if(d.search(/ /)!=-1){time_str=" "+d.split(" ")[1];d=d.split(" ")[0];}
+if(user_fmt=='dd-mm-yyyy'){var d=d.split('-');var val=d[2]+'-'+d[1]+'-'+d[0];}
+else if(user_fmt=='dd/mm/yyyy'){var d=d.split('/');var val=d[2]+'-'+d[1]+'-'+d[0];}
+else if(user_fmt=='yyyy-mm-dd'){var val=d;}
+else if(user_fmt=='mm/dd/yyyy'){var d=d.split('/');var val=d[2]+'-'+d[0]+'-'+d[1];}
+else if(user_fmt=='mm-dd-yyyy'){var d=d.split('-');var val=d[2]+'-'+d[0]+'-'+d[1];}
+return val+time_str;},user_to_obj:function(d){return dateutil.str_to_obj(dateutil.user_to_str(d));},global_date_format:function(d){if(d.substr)d=this.str_to_obj(d);return nth(d.getDate())+' '+month_list_full[d.getMonth()]+' '+d.getFullYear();},get_today:function(){var today=new Date();var m=(today.getMonth()+1)+'';if(m.length==1)m='0'+m;var d=today.getDate()+'';if(d.length==1)d='0'+d;return today.getFullYear()+'-'+m+'-'+d;},get_cur_time:function(){var d=new Date();var hh=d.getHours()+''
 var mm=cint(d.getMinutes()/5)*5+''
 return(hh.length==1?'0'+hh:hh)+':'+(mm.length==1?'0'+mm:mm);}}
 wn.datetime.only_date=function(val){if(val==null||val=='')return null;if(val.search(':')!=-1){var tmp=val.split(' ');var d=tmp[0].split('-');}else{var d=val.split('-');}
@@ -1081,10 +1083,10 @@
    <div class="progress progress-striped active">\
     <div class="bar" style="width: 10%"></div></div>').appendTo(this.wrapper);},make_filters:function(){var me=this;$.each(this.filters,function(i,v){v.fieldname=v.fieldname||v.label.replace(/ /g,'_').toLowerCase();var input=null;if(v.fieldtype=='Select'){input=me.appframe.add_select(v.label,v.options||[v.default_value]);}else if(v.fieldtype=='Button'){input=me.appframe.add_button(v.label);if(v.icon){$('<i class="icon '+v.icon+'"></i>').prependTo(input);}}else if(v.fieldtype=='Date'){input=me.appframe.add_date(v.label);}else if(v.fieldtype=='Label'){input=me.appframe.add_label(v.label);}else if(v.fieldtype=='Data'){input=me.appframe.add_data(v.label);}
 if(input){input&&(input.get(0).opts=v);if(v.cssClass){input.addClass(v.cssClass);}
-input.keypress(function(e){if(e.which==13){me.refresh();}})}
+input.keypress(function(e){if(e.which==13){me.set_route();}})}
 me.filter_inputs[v.fieldname]=input;});},load_filter_values:function(){var me=this;$.each(this.filter_inputs,function(i,f){var opts=f.get(0).opts;if(opts.fieldtype!='Button'){me[opts.fieldname]=f.val();if(opts.fieldtype=="Date"){me[opts.fieldname]=dateutil.user_to_str(me[opts.fieldname]);}else if(opts.fieldtype=="Select"){me[opts.fieldname+'_default']=opts.default_value;}}});},make_name_map:function(data,key){var map={};key=key||"name";$.each(data,function(i,v){map[v[key]]=v;})
 return map;},import_slickgrid:function(){wn.require('js/lib/slickgrid/slick.grid.css');wn.require('js/lib/slickgrid/slick-default-theme.css');wn.require('js/lib/slickgrid/jquery.event.drag.min.js');wn.require('js/lib/slickgrid/slick.core.js');wn.require('js/lib/slickgrid/slick.grid.js');wn.require('js/lib/slickgrid/slick.dataview.js');wn.dom.set_style('.slick-cell { font-size: 12px; }');},refresh:function(){this.waiting.toggle(false);if(!this.grid_wrapper)
-this.make();this.setup_columns();this.apply_link_formatters();this.load_filter_values();this.prepare_data();this.render();this.render_plot();},make:function(){$('<div class="plot" style="margin-bottom: 15px; display: none; \
+this.make();this.show_zero=$('.show-zero input:checked').length;this.load_filter_values();this.setup_columns();this.setup_dataview_columns();this.apply_link_formatters();this.prepare_data();this.render();this.render_plot();},setup_dataview_columns:function(){this.dataview_columns=$.map(this.columns,function(col){return!col.hidden?col:null;});},make:function(){$('<div class="plot" style="margin-bottom: 15px; display: none; \
    height: 300px; width: 100%;"></div>').appendTo(this.wrapper);$('<div style="text-align: right;"> \
    <a href="#" class="grid-report-print"><i class="icon icon-print"></i> Print</a> \
    <span style="color: #aaa; margin: 0px 10px;"> | </span> \
@@ -1092,19 +1094,22 @@
   </div>').appendTo(this.wrapper);this.wrapper.find(".grid-report-export").click(function(){return me.export();});this.grid_wrapper=$("<div style='height: 500px; border: 1px solid #aaa; \
    background-color: #eee; margin-top: 15px;'>").appendTo(this.wrapper);this.id=wn.dom.set_unique_id(this.grid_wrapper.get(0));$('<div style="margin: 10px 0px; text-align: right; display: none" class="show-zero">\
     <input type="checkbox"> Show rows with zero values\
-   </div>').appendTo(this.wrapper);this.bind_show();wn.cur_grid_report=this;this.apply_filters_from_route();$(this.wrapper).trigger('make');},apply_filters_from_route:function(){var hash=window.location.hash;var me=this;if(hash.indexOf('/')!=-1){$.each(hash.split('/').splice(1).join('/').split('&'),function(i,f){var f=f.split("=");if(me.filter_inputs[f[0]]){me.filter_inputs[f[0]].val(decodeURIComponent(f[1]));}else{console.log("Invalid filter: "+f[0]);}});}},set_route:function(){wn.set_route(wn.container.page.page_name,$.map(this.filter_inputs,function(v){var val=v.val();var opts=v.get(0).opts;if(val&&val!=opts.default_value)
+   </div>').appendTo(this.wrapper);this.bind_show();wn.cur_grid_report=this;this.apply_filters_from_route();$(this.wrapper).trigger('make');},apply_filters_from_route:function(){var hash=window.location.hash;var me=this;if(hash.indexOf('/')!=-1){$.each(hash.split('/').splice(1).join('/').split('&'),function(i,f){var f=f.split("=");if(me.filter_inputs[f[0]]){me.filter_inputs[f[0]].val(decodeURIComponent(f[1]));}else{console.log("Invalid filter: "+f[0]);}});}else{this.init_filter_values();}},set_route:function(){wn.set_route(wn.container.page.page_name,$.map(this.filter_inputs,function(v){var val=v.val();var opts=v.get(0).opts;if(val&&val!=opts.default_value)
 return encodeURIComponent(opts.fieldname)
-+'='+encodeURIComponent(val);}).join('&'))},render:function(){this.grid=new Slick.Grid("#"+this.id,this.dataView,$.map(this.columns,function(col){return!col.hidden?col:null;}),this.options);var me=this;this.dataView.onRowsChanged.subscribe(function(e,args){me.grid.invalidateRows(args.rows);me.grid.render();});this.dataView.onRowCountChanged.subscribe(function(e,args){me.grid.updateRowCount();me.grid.render();});this.add_grid_events&&this.add_grid_events();},prepare_data_view:function(items){this.dataView=new Slick.Data.DataView({inlineFilters:true});this.dataView.beginUpdate();this.dataView.setItems(items);this.dataView.endUpdate();},export:function(){var me=this;var res=[$.map(this.columns,function(v){return v.name;})].concat(this.get_view_data());wn.require("js/lib/downloadify/downloadify.min.js");wn.require("js/lib/downloadify/swfobject.js");var id=wn.dom.set_unique_id();var msgobj=msgprint('<p id="'+id+'">You must have Flash 10 installed to download this file.</p>');Downloadify.create(id,{filename:function(){return me.title+'.csv';},data:function(){return wn.to_csv(res);},swf:'js/lib/downloadify/downloadify.swf',downloadImage:'js/lib/downloadify/download.png',onComplete:function(){msgobj.hide();},onCancel:function(){msgobj.hide();},onError:function(){msgobj.hide();},width:100,height:30,transparent:true,append:false});return false;},render_plot:function(){if(!this.get_plot_data)return;wn.require('js/lib/flot/jquery.flot.js');$.plot(this.wrapper.find('.plot').toggle(true),this.get_plot_data(),this.get_plot_options());this.setup_plot_hover();},setup_plot_hover:function(){var me=this;this.tooltip_id=wn.dom.set_unique_id();function showTooltip(x,y,contents){$('<div id="'+me.tooltip_id+'">'+contents+'</div>').css({position:'absolute',display:'none',top:y+5,left:x+5,border:'1px solid #fdd',padding:'2px','background-color':'#fee',opacity:0.80}).appendTo("body").fadeIn(200);}
-this.previousPoint=null;this.wrapper.find('.plot').bind("plothover",function(event,pos,item){if(item){if(me.previousPoint!=item.dataIndex){me.previousPoint=item.dataIndex;$("#"+me.tooltip_id).remove();var x=dateutil.obj_to_user(new Date(item.datapoint[0])),y=fmt_money(item.datapoint[1]);showTooltip(item.pageX,item.pageY,item.series.label+" on "+x+" = "+y);}}
-else{$("#"+me.tooltip_id).remove();me.previousPoint=null;}});},get_view_data:function(){var res=[];var col_map=$.map(this.columns,function(v){return v.field;});for(var i=0,len=this.dataView.getLength();i<len;i++){var d=this.dataView.getItem(i);var row=[];$.each(col_map,function(i,col){var val=d[col];if(val===null||val===undefined){val=""}
++'='+encodeURIComponent(val);}).join('&'))},render:function(){this.grid=new Slick.Grid("#"+this.id,this.dataView,this.dataview_columns,this.options);var me=this;this.dataView.onRowsChanged.subscribe(function(e,args){me.grid.invalidateRows(args.rows);me.grid.render();});this.dataView.onRowCountChanged.subscribe(function(e,args){me.grid.updateRowCount();me.grid.render();});this.add_grid_events&&this.add_grid_events();},prepare_data_view:function(items){this.dataView=new Slick.Data.DataView({inlineFilters:true});this.dataView.beginUpdate();this.dataView.setItems(items);if(this.dataview_filter)this.dataView.setFilter(this.dataview_filter);this.dataView.endUpdate();},export:function(){var me=this;var res=[$.map(this.columns,function(v){return v.name;})].concat(this.get_view_data());wn.require("js/lib/downloadify/downloadify.min.js");wn.require("js/lib/downloadify/swfobject.js");var id=wn.dom.set_unique_id();var msgobj=msgprint('<p id="'+id+'">You must have Flash 10 installed to download this file.</p>');Downloadify.create(id,{filename:function(){return me.title+'.csv';},data:function(){return wn.to_csv(res);},swf:'js/lib/downloadify/downloadify.swf',downloadImage:'js/lib/downloadify/download.png',onComplete:function(){msgobj.hide();},onCancel:function(){msgobj.hide();},onError:function(){msgobj.hide();},width:100,height:30,transparent:true,append:false});return false;},render_plot:function(){var plot_data=this.get_plot_data?this.get_plot_data():null;if(!plot_data){this.wrapper.find('.plot').toggle(false);return;}
+wn.require('js/lib/flot/jquery.flot.js');$.plot(this.wrapper.find('.plot').toggle(true),plot_data,this.get_plot_options());this.setup_plot_hover();},setup_plot_hover:function(){var me=this;this.tooltip_id=wn.dom.set_unique_id();function showTooltip(x,y,contents){$('<div id="'+me.tooltip_id+'">'+contents+'</div>').css({position:'absolute',display:'none',top:y+5,left:x+5,border:'1px solid #fdd',padding:'2px','background-color':'#fee',opacity:0.80}).appendTo("body").fadeIn(200);}
+this.previousPoint=null;this.wrapper.find('.plot').bind("plothover",function(event,pos,item){if(item){if(me.previousPoint!=item.dataIndex){me.previousPoint=item.dataIndex;$("#"+me.tooltip_id).remove();showTooltip(item.pageX,item.pageY,me.get_tooltip_text(item.series.label,item.datapoint[0],item.datapoint[1]));}}
+else{$("#"+me.tooltip_id).remove();me.previousPoint=null;}});},get_tooltip_text:function(label,x,y){var date=dateutil.obj_to_user(new Date(x));var value=fmt_money(y);return value+" on "+date;},get_view_data:function(){var res=[];var col_map=$.map(this.columns,function(v){return v.field;});for(var i=0,len=this.dataView.getLength();i<len;i++){var d=this.dataView.getItem(i);var row=[];$.each(col_map,function(i,col){var val=d[col];if(val===null||val===undefined){val=""}
 row.push(val);})
 res.push(row);}
 return res;},options:{editable:false,enableColumnReorder:false},apply_filters:function(item){var filters=this.filter_inputs;if(item._show)return true;for(i in filters){if(!this.apply_filter(item,i))return false;}
 if(this.custom_dataview_filter){return this.custom_dataview_filter(item);}
 return true;},apply_filter:function(item,fieldname){var filter=this.filter_inputs[fieldname].get(0);if(filter.opts.filter){if(!filter.opts.filter(this[filter.opts.fieldname],item,filter.opts,this)){return false;}}
-return true;},is_default:function(fieldname){return this[fieldname]==this[fieldname+"_default"];},date_formatter:function(row,cell,value,columnDef,dataContext){return dateutil.str_to_user(value);},currency_formatter:function(row,cell,value,columnDef,dataContext){return repl('<div style="text-align: right; %(_style)s">%(value)s</div>',{_style:dataContext._style||"",value:fmt_money(value)});},text_formatter:function(row,cell,value,columnDef,dataContext){return repl('<span style="%(_style)s" title="%(esc_value)s">%(value)s</span>',{_style:dataContext._style||"",esc_value:cstr(value).replace(/"/g,'\"'),value:cstr(value)});},check_formatter:function(row,cell,value,columnDef,dataContext){return repl("<input type='checkbox' data-id='%(id)s' \
-   class='plot-check' %(checked)s>",{"id":dataContext.id,"checked":dataContext.checked?"checked":""})},apply_link_formatters:function(){var me=this;$.each(this.columns,function(i,col){if(col.link_formatter){col.formatter=function(row,cell,value,columnDef,dataContext){if(!value)return"";if(dataContext._show){return repl('<span style="%(_style)s">%(value)s</span>',{_style:dataContext._style||"",value:value});}
-var link_formatter=wn.cur_grid_report.columns[cell].link_formatter;var html=repl('<a href="#" \
+return true;},apply_zero_filter:function(val,item,opts,me){if(!me.show_zero){for(var i=0,j=me.columns.length;i<j;i++){var col=me.columns[i];if(col.formatter==me.currency_formatter){if(flt(item[col.field])>0.001||flt(item[col.field])<-0.001){return true;}}}
+return false;}
+return true;},show_zero_check:function(){var me=this;this.wrapper.bind('make',function(){me.wrapper.find('.show-zero').toggle(true).find('input').click(function(){me.refresh();});});},is_default:function(fieldname){return this[fieldname]==this[fieldname+"_default"];},date_formatter:function(row,cell,value,columnDef,dataContext){return dateutil.str_to_user(value);},currency_formatter:function(row,cell,value,columnDef,dataContext){return repl('<div style="text-align: right; %(_style)s">%(value)s</div>',{_style:dataContext._style||"",value:fmt_money(value)});},text_formatter:function(row,cell,value,columnDef,dataContext){return repl('<span style="%(_style)s" title="%(esc_value)s">%(value)s</span>',{_style:dataContext._style||"",esc_value:cstr(value).replace(/"/g,'\"'),value:cstr(value)});},check_formatter:function(row,cell,value,columnDef,dataContext){return repl("<input type='checkbox' data-id='%(id)s' \
+   class='plot-check' %(checked)s>",{"id":dataContext.id,"checked":dataContext.checked?"checked":""})},apply_link_formatters:function(){var me=this;$.each(this.dataview_columns,function(i,col){if(col.link_formatter){col.formatter=function(row,cell,value,columnDef,dataContext){if(!value)return"";if(dataContext._show){return repl('<span style="%(_style)s">%(value)s</span>',{_style:dataContext._style||"",value:value});}
+var link_formatter=wn.cur_grid_report.dataview_columns[cell].link_formatter;var html=repl('<a href="#" \
       onclick="wn.cur_grid_report.filter_inputs.%(col_name)s.val(\'%(value)s\'); \
        wn.cur_grid_report.set_route(); return false;">\
       %(value)s</a>',{value:value,col_name:link_formatter.filter_input,page_name:wn.container.page.page_name})
diff --git a/public/js/all-web.js b/public/js/all-web.js
index 5bf2dab..4a22d2d 100644
--- a/public/js/all-web.js
+++ b/public/js/all-web.js
@@ -240,11 +240,11 @@
  */
 wn.provide('wn.pages');wn.provide('wn.views');wn.views.Container=Class.extend({init:function(){this.container=$('#body_div').get(0);this.page=null;this.pagewidth=$('#body_div').width();this.pagemargin=50;},add_page:function(label,onshow,onhide){var page=$('<div class="content"></div>').attr('id',"page-"+label).appendTo(this.container).get(0);if(onshow)
 $(page).bind('show',onshow);if(onshow)
-$(page).bind('hide',onhide);page.label=label;wn.pages[label]=page;return page;},change_to:function(label){if(this.page&&this.page.label==label){return;}
+$(page).bind('hide',onhide);page.label=label;wn.pages[label]=page;return page;},change_to:function(label){if(this.page&&this.page.label==label){$(this.page).trigger('show');return;}
 var me=this;if(label.tagName){var page=label;}else{var page=wn.pages[label];}
 if(!page){console.log('Page not found '+label);return;}
 if(this.page&&this.page!=page){$(this.page).toggle(false);$(this.page).trigger('hide');}
-if(!this.page||this.page!=page){this.page=page;$(this.page).fadeIn();}
+if(!this.page||this.page!=page){this.page=page;$(this.page).toggle(true);}
 this.page._route=window.location.hash;document.title=this.page.label;$(this.page).trigger('show');scroll(0,0);return this.page;}});wn.views.add_module_btn=function(parent,module){$(parent).append(repl('<span class="label" style="margin-right: 8px; cursor: pointer;"\
      onclick="wn.set_route(\'%(module_small)s-home\')">\
      <i class="icon-home icon-white"></i> %(module)s Home\
@@ -373,11 +373,13 @@
 val=d[1]+'/'+d[2]+'/'+d[0]+time_str;else if(user_fmt=='mm-dd-yyyy')
 val=d[1]+'-'+d[2]+'-'+d[0]+time_str;}
 return val;},full_str:function(){var d=new Date();return d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate()+' '
-+d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();},user_to_str:function(d){var user_fmt=this.get_user_fmt();if(user_fmt=='dd-mm-yyyy'){var d=d.split('-');return d[2]+'-'+d[1]+'-'+d[0];}
-else if(user_fmt=='dd/mm/yyyy'){var d=d.split('/');return d[2]+'-'+d[1]+'-'+d[0];}
-else if(user_fmt=='yyyy-mm-dd'){return d;}
-else if(user_fmt=='mm/dd/yyyy'){var d=d.split('/');return d[2]+'-'+d[0]+'-'+d[1];}
-else if(user_fmt=='mm-dd-yyyy'){var d=d.split('-');return d[2]+'-'+d[0]+'-'+d[1];}},user_to_obj:function(d){return dateutil.str_to_obj(dateutil.user_to_str(d));},global_date_format:function(d){if(d.substr)d=this.str_to_obj(d);return nth(d.getDate())+' '+month_list_full[d.getMonth()]+' '+d.getFullYear();},get_today:function(){var today=new Date();var m=(today.getMonth()+1)+'';if(m.length==1)m='0'+m;var d=today.getDate()+'';if(d.length==1)d='0'+d;return today.getFullYear()+'-'+m+'-'+d;},get_cur_time:function(){var d=new Date();var hh=d.getHours()+''
++d.getHours()+':'+d.getMinutes()+':'+d.getSeconds();},user_to_str:function(d){var user_fmt=this.get_user_fmt();var time_str='';if(d.search(/ /)!=-1){time_str=" "+d.split(" ")[1];d=d.split(" ")[0];}
+if(user_fmt=='dd-mm-yyyy'){var d=d.split('-');var val=d[2]+'-'+d[1]+'-'+d[0];}
+else if(user_fmt=='dd/mm/yyyy'){var d=d.split('/');var val=d[2]+'-'+d[1]+'-'+d[0];}
+else if(user_fmt=='yyyy-mm-dd'){var val=d;}
+else if(user_fmt=='mm/dd/yyyy'){var d=d.split('/');var val=d[2]+'-'+d[0]+'-'+d[1];}
+else if(user_fmt=='mm-dd-yyyy'){var d=d.split('-');var val=d[2]+'-'+d[0]+'-'+d[1];}
+return val+time_str;},user_to_obj:function(d){return dateutil.str_to_obj(dateutil.user_to_str(d));},global_date_format:function(d){if(d.substr)d=this.str_to_obj(d);return nth(d.getDate())+' '+month_list_full[d.getMonth()]+' '+d.getFullYear();},get_today:function(){var today=new Date();var m=(today.getMonth()+1)+'';if(m.length==1)m='0'+m;var d=today.getDate()+'';if(d.length==1)d='0'+d;return today.getFullYear()+'-'+m+'-'+d;},get_cur_time:function(){var d=new Date();var hh=d.getHours()+''
 var mm=cint(d.getMinutes()/5)*5+''
 return(hh.length==1?'0'+hh:hh)+':'+(mm.length==1?'0'+mm:mm);}}
 wn.datetime.only_date=function(val){if(val==null||val=='')return null;if(val.search(':')!=-1){var tmp=val.split(' ');var d=tmp[0].split('-');}else{var d=val.split('-');}
diff --git a/public/js/app/account_tree_grid.js b/public/js/app/account_tree_grid.js
index f1bf6bf..b1e7fb5 100644
--- a/public/js/app/account_tree_grid.js
+++ b/public/js/app/account_tree_grid.js
@@ -42,8 +42,11 @@
 	},
 	filters: [
 		{fieldtype:"Select", label: "Company", link:"Company", default_value: "Select Company...",
-			filter: function(val, item, opts) {
-				return item.company == val || val == opts.default_value || item._show;
+			filter: function(val, item, opts, me) {
+				if (item.company == val || val == opts.default_value) {
+					return me.apply_zero_filter(val, item, opts, me);
+				}
+				return false;
 			}},
 		{fieldtype:"Select", label: "Fiscal Year", link:"Fiscal Year", 
 			default_value: "Select Fiscal Year..."},
@@ -67,6 +70,7 @@
 			});
 			me.set_route();
 		});
+		me.show_zero_check()
 	},
 	init_filter_values: function() {
 		this.filter_inputs.company.val(sys_defaults.company);
@@ -75,7 +79,8 @@
 		this.filter_inputs.to_date.val(dateutil.str_to_user(sys_defaults.year_end_date));
 	},
 	prepare_data: function() {
-		var me = this;				
+		var me = this;
+		this.data = []			
 		if(this.accounts) {
 			// refresh -- only initialize
 			$.each(this.accounts, function(i, d) {
@@ -256,7 +261,9 @@
 			}
 		});
 	},
-	custom_dataview_filter: function(item) {
+	dataview_filter: function(item) {
+		if(!wn.cur_grid_report.apply_filters(item)) return false;
+		
 		if (item.parent_account) {
 			var parent = item.parent_account;
 			while (parent) {