var current_module;
var is_system_manager = 0;
var module_content_dict = {};
var user_full_nm = {};

wn.provide('erpnext.startup');

erpnext.startup.set_globals = function() {
	pscript.is_erpnext_saas = cint(wn.control_panel.sync_with_gateway)
	if(inList(user_roles,'System Manager')) is_system_manager = 1;
}

erpnext.startup.start = function() {
	erpnext.startup.set_globals();
	
	if(user == 'Guest'){
		$dh(page_body.left_sidebar);
		wn.require('erpnext/website/css/website.css');
		wn.require('erpnext/website/js/topbar.js');
	} else {
		// modules
		wn.require('erpnext/startup/modules.js');
		pscript.startup_make_sidebar();

		// setup toolbar
		wn.require('erpnext/startup/toolbar.js');
		erpnext.toolbar.setup();
		wn.require('erpnext/startup/feature_setup.js');
	}
	
	// border to the body
	// ------------------
	$('footer').html('<div class="erpnext-footer">\
		Powered by <a href="https://erpnext.com">ERPNext</a></div>');

}

// chart of accounts
// ====================================================================
show_chart_browser = function(nm, chart_type){

  var call_back = function(){
    if(nm == 'Sales Browser'){
      var sb_obj = new SalesBrowser();
      sb_obj.set_val(chart_type);
    }
    else if(nm == 'Accounts Browser')
      pscript.make_chart(chart_type);
  }
  loadpage(nm,call_back);
}


// Module Page
// ====================================================================

ModulePage = function(parent, module_name, module_label, help_page, callback) {
	this.parent = parent;

	// add to current page
	page_body.cur_page.module_page = this;

	this.wrapper = $a(parent,'div');
	this.module_name = module_name;
	this.transactions = [];
	this.page_head = new PageHeader(this.wrapper, module_label);

	if(help_page) {
		var btn = this.page_head.add_button('Help', function() { loadpage(this.help_page) }, 1, 'ui-icon-help')
		btn.help_page = help_page;
	}

	if(callback) this.callback = function(){ callback(); }
}

// start
erpnext.startup.start();