merge
diff --git a/erpnext/accounts/doctype/gl_control/gl_control.py b/erpnext/accounts/doctype/gl_control/gl_control.py
index 5be3809..84fea75 100644
--- a/erpnext/accounts/doctype/gl_control/gl_control.py
+++ b/erpnext/accounts/doctype/gl_control/gl_control.py
@@ -35,12 +35,6 @@
 		self.doc, self.doclist = d, dl
 		self.entries = []
 
-	# Get Company List
-	# ----------------
-	def get_companies(self,arg=''):
-		ret = webnotes.conn.sql("select name, abbr from tabCompany where docstatus != 2")
-		return {'cl':[r[0] for r in ret]}
-
 	def get_company_currency(self,arg=''):
 		dcc = TransactionBase().get_company_currency(arg)
 		return dcc
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.css b/erpnext/accounts/page/accounts_browser/accounts_browser.css
index 4a55dd3..1e3904f 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.css
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.css
@@ -1,9 +1,20 @@
-h1 { padding: 8px 0px; margin: 0px; }
-#ledger_area { padding: 16px;}
-.ac_head { display: none; }
-.ac_head div { padding: 2px; }
-.ac_ledger { display: none; padding: 8px; margin-top: 8px; border-top: 1px solid #DDD; }
-.ac_balance { margin-left: 4px; font-size: 16px; font-weight: bold; background-color: #FFFAB0; }
+select.accbrowser-company-select {
+	width: 200px;
+	margin-top: 2px;
+	margin-left: 10px;
+}
 
-.ac_page_sel_tab { width:90%; background-color: #EEE; margin-bottom: 8px }
-.ac_page_sel_tab td { vertical-align: middle; padding: 3px; }
\ No newline at end of file
+span.accbrowser-node-toolbar {
+	padding: 2px;
+	margin-left: 15px;
+	border-radius: 3px;
+	-moz-border-radius: 3px;
+	-webkit-border-radius: 3px;
+	border-radius: 3px;
+	background-color: #ddd;
+}
+
+.tree-area a.selected {
+	font-weight: bold;
+	text-decoration: underline;
+}
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.html b/erpnext/accounts/page/accounts_browser/accounts_browser.html
index cb44cec..de55f08 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.html
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.html
@@ -1,7 +1,12 @@
-<div class="layout-wrapper layout-wrapper-appframe">
+<div class="layout-wrapper layout-wrapper-background">
 	<div class="appframe-area"></div>
-	<div style="padding: 15px;">
-		<div id="ab_header"></div>
-		<div id="ab_body" style="margin: 16px;"></div>
+	<div class="layout-main-section">
+		<div class="tree-area"></div>
 	</div>
+	<div class="layout-side-section">
+		<div class="help">1. To add child nodes, explore tree and click on the node under which you want to add more nodes.<br><br>
+			2. Please do NOT create accounts (ledgers) for Customers and Suppliers. They are created directly from the Customer / Supplier masters.<br>
+		</div>
+	</div>
+	<div class="clear"></div>
 </div>
\ No newline at end of file
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.js b/erpnext/accounts/page/accounts_browser/accounts_browser.js
index 28e55ab..3c900e9 100644
--- a/erpnext/accounts/page/accounts_browser/accounts_browser.js
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.js
@@ -14,37 +14,183 @@
 // You should have received a copy of the GNU General Public License
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-pscript['onshow_Accounts Browser'] = function(wrapper){
-	wn.require('lib/js/legacy/widgets/tree.js');
+// tree of chart of accounts / cost centers
+// multiple companies
+// add node
+// edit node
+// see ledger
 
+pscript['onload_Accounts Browser'] = function(wrapper){
 	wrapper.appframe = new wn.ui.AppFrame($(wrapper).find('.appframe-area'));
 	wrapper.appframe.add_button('New Company', function() { newdoc('Company'); }, 'icon-plus');
 
-	var route = decodeURIComponent(location.hash);
-	if(route.indexOf('/')!=-1) {
-		var chart_type = route.split('/')[1];
-		pscript.make_chart(chart_type);
-		return;
+	// company-select
+	wrapper.$company_select = $('<select class="accbrowser-company-select"></select>')
+		.change(function() {
+			var ctype = wn.get_route()[1] || 'Account';
+			erpnext.account_chart = new erpnext.AccountsChart(ctype, $(this).val(), wrapper);
+		})
+		.appendTo(wrapper.appframe.$w.find('.appframe-toolbar'));
+		
+	// default company
+	if(sys_defaults.company) {
+		$('<option>')
+			.html(sys_defaults.company)
+			.attr('value', sys_defaults.company)
+			.appendTo(wrapper.$company_select);
+
+		wrapper.$company_select
+			.val(sys_defaults.company).change();
 	}
-	
-	// if the user directly loads the page, ask to select the chart
-	var parent = $i('ab_body');
-	parent.innerHTML = 'Please select your chart: '
-	var sel = $a(parent,'select');
-	add_sel_options(sel, ['Account', 'Cost Center'], 'Account');
-	var btn = $btn(parent, 'Go', function() { pscript.make_chart(sel_val(sel)); }, {marginTop:'8px'});
+
+	// load up companies
+	wn.call({
+		method:'accounts.page.accounts_browser.accounts_browser.get_companies',
+		callback: function(r) {
+			wrapper.$company_select.empty();
+			$.each(r.message, function(i, v) {
+				$('<option>').html(v).attr('value', v).appendTo(wrapper.$company_select);
+			});
+			wrapper.$company_select.val(sys_defaults.company || r[0]);
+		}
+	});
 }
 
-pscript.make_chart = function(b) {
-  pscript.chart_type = b;
-  $i('ab_header').innerHTML ='';
-  $i('ab_body').innerHTML ='';
+pscript['onshow_Accounts Browser'] = function(wrapper){
+	//wn.require('lib/js/wn/ui/tree.js');
 
-  //===============comment area========================================
-  var comment = $a($i('ab_body'),'div','comment',{marginBottom:"8px"});
-  comment.innerHTML = "Note: Explore and click on the tree node to add a new child";
-  
-  var select_area = $a('ab_body', 'div', '', {margin:'8px 0px'});
+	// set route
+	var ctype = wn.get_route()[1] || 'Account';
+	wrapper.appframe.$titlebar.find('.appframe-title').html('Chart of '+ctype+'s');  
+
+	if(erpnext.account_chart && erpnext.account_chart.ctype != ctype) {
+		wrapper.$company_select.change();
+	} 
+
+}
+
+erpnext.AccountsChart = Class.extend({
+	init: function(ctype, company, wrapper) {
+		$(wrapper).find('.tree-area').empty();
+		var me = this;
+		me.ctype = ctype;
+		this.tree = new wn.ui.Tree({
+			parent: $(wrapper).find('.tree-area'), 
+			label: company,
+			args: {ctype: ctype},
+			method: 'accounts.page.accounts_browser.accounts_browser.get_children',
+			click: function(link) {
+				if(me.cur_toolbar) 
+					$(me.cur_toolbar).toggle(false);
+
+				if(!link.toolbar) 
+					me.make_link_toolbar(link);
+
+				if(link.toolbar) {
+					me.cur_toolbar = link.toolbar;
+					$(me.cur_toolbar).toggle(true);					
+				}
+			
+			}
+		});
+		this.tree.rootnode.$a.click();		
+	},
+	make_link_toolbar: function(link) {
+		var data = $(link).data('node-data');
+		if(!data) return;
+
+		link.toolbar = $('<span class="accbrowser-node-toolbar"></span>').insertAfter(link);
+		
+		// edit
+		$('<a href="#!Form/'+encodeURIComponent(this.ctype)+'/'
+			+encodeURIComponent(data.value)+'">Edit</a>').appendTo(link.toolbar);
+
+		if(data.expandable) {
+			link.toolbar.append(' | <a>Add Child</a>');
+		} else {
+			link.toolbar.append(' | <a>View Ledger</a>');
+		}		
+	},
+	new_account: function() {
+	  var d = new Dialog(300,400,'Create A New Account');
+	  d.make_body([
+	    ['HTML','Heading'],
+	    ['Data','New Account Name'],
+	    ['Select','Group or Ledger','Specify whether the new account is a Ledger or Group'],
+	    ['Select','Account Type','[Optional] Specify the type of this account'],
+	    ['Data','Tax Rate','Specify the default tax rate'],
+			['Select','Master Type','Specify the master type of this account'],
+	    ['Button','Create']
+	  ]);
+
+	  add_sel_options(d.widgets['Group or Ledger'], ['Group', 'Ledger'],'Group');
+	  add_sel_options(d.widgets['Account Type'], ['', 'Fixed Asset Account','Bank or Cash','Expense Account','Tax','Income Account','Chargeable'], '');
+		add_sel_options(d.widgets['Master Type'], ['NA', 'Supplier','Customer','Employee'],'NA');
+
+	  // hide / show account type
+	  d.widgets['Group or Ledger'].onchange = function() {
+	    if(sel_val(this)=='Ledger')$ds(d.rows['Account Type']);
+	    else $dh(d.rows['Account Type']);
+	  }
+
+	  // hide / show tax rate
+	  d.widgets['Account Type'].onchange = function() {
+	    if(sel_val(this)=='Tax' || sel_val(this)=='Chargeable')$ds(d.rows['Tax Rate']);
+	    else $dh(d.rows['Tax Rate']);
+	  }
+
+	  d.onshow = function() {
+	    $dh(this.rows['Account Type']);
+	    $dh(this.rows['Tax Rate']);
+	    this.widgets['Group or Ledger'].selectedIndex = 0;
+	    this.widgets['Account Type'].selectedIndex = 0;
+			this.widgets['Master Type'].selectedIndex = 0;
+	    d.widgets['New Account Name'].value = '';
+	    d.widgets['Tax Rate'].value = '';
+	  }
+
+	  d.widgets['Create'].onclick = function() {
+	    if(!d.widgets['New Account Name'].value) {
+	      msgprint('Please enter New Account Name'); return;
+	    }
+			if(!sel_val(d.widgets['Master Type'])) {
+	      msgprint('Please enter master type of this new account'); return;
+	    }
+	    args = {
+	      'account_name' : d.widgets['New Account Name'].value,
+	      'parent_account' : pscript.cur_node.rec.name,
+	      'group_or_ledger' : sel_val(d.widgets['Group or Ledger']),
+	      'company' : sel_val(pscript.ab_company_sel),
+	      'account_type' : sel_val(d.widgets['Account Type']),
+	      'tax_rate' : d.widgets['Tax Rate'].value,
+	      'master_type': sel_val(d.widgets['Master Type'])
+	    }
+	    $c_obj('GL Control', 'add_ac', docstring(args), function(r,rt) { d.hide(); pscript.group_area.ref_btn.onclick(); });
+	  }
+	  pscript.new_acc_dialog = d;
+
+	},
+
+	new_cost_center: function(){
+	  pscript.cc_dialog = new Dialog(300,400,'Create A New Cost Center');
+	  pscript.cc_dialog.make_body([
+	    ['HTML','Heading'],
+	    ['Data','New Cost Center Name'],
+	    ['Select','Group or Ledger','Specify whether the new cost center is a Ledger or Group'],
+	    ['Button','Create']
+	    ]);
+
+	  add_sel_options(pscript.cc_dialog.widgets['Group or Ledger'], ['Group','Ledger'], 'Group');
+
+	  pscript.new_cost_center_dialog = pscript.cc_dialog;
+	}	
+});
+
+/*
+pscript.make_chart = function(b, wrapper) {
+	pscript.ctype = b;
+	$(wrapper).find('.tree-area').empty()
+	$(wrapper).find('.layout-sidesection').empty()
   
   //================== table body======================================  
   var ac_main_grid = make_table($i('ab_body'),1,2,'100%',['60%','40%'],{border:"0px", padding:"4px",tableLayout: "fixed", borderCollapse: "collapse"});
@@ -55,7 +201,7 @@
   pscript.acc_period_bal = $a($td(ac_main_grid,0,1),'div');
   
   //=====================footer area ==================================
-  if (pscript.chart_type == 'Account') {
+  if (pscript.ctype == 'Account') {
     var footer = $a($i('ab_body'),'div','',{backgroundColor: "#FFD", padding: "8px", color: "#444", fontSize: "12px", marginTop: "14px"});
     
     var help1 = $a(footer,'span');
@@ -65,12 +211,7 @@
 
   // header and toolbar
   // ------------------
-  
-  var h1 = 'Chart of '+pscript.chart_type+'s';
-  if(pscript.chart_type == 'Account') var d = 'accounting';
-  else var d = 'cost center';
-  var desc = 'Manage multiple companies and the '+d+' structures of each company.';
-  $i('ab_body').page_head = new PageHeader('ab_header',h1,desc);
+  wrapper.appframe.$titlebar.find('.appframe-title').html('Chart of '+pscript.ctype+'s');  
 
   // select company
   // --------------
@@ -115,8 +256,8 @@
 }
 
 pscript.make_ac_tree = function() {
-  //var type= sel_val($i('chart_type'))
-  var type= pscript.chart_type;
+  //var type= sel_val($i('ctype'))
+  var type= pscript.ctype;
   var tree = new Tree(pscript.account_tree, '90%');
   pscript.ac_tree = tree;
 
@@ -171,9 +312,9 @@
     }
 
     if (type=='Account'){
-      var arg = [node.rec.name, node.rec.account_name, sel_val(pscript.ab_company_sel), pscript.chart_type];
+      var arg = [node.rec.name, node.rec.account_name, sel_val(pscript.ab_company_sel), pscript.ctype];
     } else{
-        var arg = [node.rec.name, node.rec.cost_center_name,sel_val(pscript.ab_company_sel), pscript.chart_type];
+        var arg = [node.rec.name, node.rec.cost_center_name,sel_val(pscript.ab_company_sel), pscript.ctype];
     }
 
     $c_obj('GL Control','get_cl',arg.join(','),callback);
@@ -338,10 +479,6 @@
   pscript.gl_rep.innerHTML = '<img src="lib/images/icons/report.png" style="margin-right: 8px"><span class="link_type">Open Ledger</span>';
   pscript.gl_rep.onclick = function(){ pscript.make_report('gl'); }
 
-  //Budget report link
-  /*pscript.cc_rep = $a(pscript.ledger_area, 'div','', {fontSize: '14px',marginBottom: '8px', fontWeight: 'bold'});
-  pscript.cc_rep.innerHTML = '<img src="images/icons/report.png" style="margin-right: 8px"><span class="link_type">Budget vs Actual Analysis Report</span>';
-  pscript.cc_rep.onclick = function(){ pscript.make_report('budget'); }*/
 }
 
 pscript.make_report = function(flag){
@@ -352,12 +489,6 @@
     }
     loadreport('GL Entry','General Ledger',callback);
   }
-  /*else {
-    loadreport('Budget Detail','Periodical Budget Report',function(f){
-      f.set_filter('Cost Center','ID',pscript.cur_node.rec.name);
-      f.dt.run();
-    });
-  }*/
 }
 
 // New Account
@@ -435,3 +566,4 @@
 
   pscript.new_cost_center_dialog = pscript.cc_dialog;
 }
+*/
\ No newline at end of file
diff --git a/erpnext/accounts/page/accounts_browser/accounts_browser.py b/erpnext/accounts/page/accounts_browser/accounts_browser.py
new file mode 100644
index 0000000..ee4ec55
--- /dev/null
+++ b/erpnext/accounts/page/accounts_browser/accounts_browser.py
@@ -0,0 +1,31 @@
+import webnotes
+
+@webnotes.whitelist()
+def get_companies():
+	return [r[0] for r in webnotes.conn.sql("""select name from tabCompany where docstatus!=2""")]
+	
+@webnotes.whitelist()
+def get_children():
+	args = webnotes.form_dict
+	ctype = args['ctype']
+	company_field = ctype=='Account' and 'company' or 'company_name'
+	
+	# root
+	if args['parent'] in get_companies():
+		return webnotes.conn.sql("""select 
+			name as value, if(group_or_ledger='Group', 1, 0) as expandable
+			from `tab%s`
+			where ifnull(parent_%s,'') = ''
+			and %s = %s
+			and docstatus<2 
+			order by name""" % (ctype, ctype.lower().replace(' ','_'), company_field, '%s'),
+				args['parent'], as_dict=1)
+	
+	# other
+	return webnotes.conn.sql("""select 
+		name as value, if(group_or_ledger='Group', 1, 0) as expandable
+	 	from `tab%s` 
+		where ifnull(parent_%s,'') = %s
+		and docstatus<2 
+		order by name""" % (ctype, ctype.lower().replace(' ','_'), '%s'),
+			args['parent'], as_dict=1)
\ No newline at end of file
diff --git a/version.num b/version.num
index d32d224..6aec59a 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-1684
\ No newline at end of file
+1687