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() {
	$('#startup_div').html('Starting up...').toggle(true);
	
	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>');

	$('#startup_div').toggle(false);
}

// 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();