diff --git a/erpnext/accounts/doctype/account/account.js b/erpnext/accounts/doctype/account/account.js
index 4c04fc6..8a9a439 100644
--- a/erpnext/accounts/doctype/account/account.js
+++ b/erpnext/accounts/doctype/account/account.js
@@ -2,26 +2,26 @@
 // License: GNU General Public License v3. See license.txt
 
 
-cur_frm.cscript.refresh = function(doc, cdt, cdn) {
-	if(doc.__islocal) {
-		msgprint(__("Please create new account from Chart of Accounts."));
+cur_frm.cscript.refresh = function (doc, cdt, cdn) {
+	if (doc.__islocal) {
+		frappe.msgprint(__("Please create new account from Chart of Accounts."));
 		throw "cannot create";
 	}
 
 	cur_frm.toggle_display('account_name', doc.__islocal);
 
 	// hide fields if group
-	cur_frm.toggle_display(['account_type', 'tax_rate'], cint(doc.is_group)==0)
+	cur_frm.toggle_display(['account_type', 'tax_rate'], cint(doc.is_group) == 0)
 
 	// disable fields
 	cur_frm.toggle_enable(['account_name', 'is_group', 'company'], false);
 
-	if(cint(doc.is_group)==0) {
+	if (cint(doc.is_group) == 0) {
 		cur_frm.toggle_display('freeze_account', doc.__onload && doc.__onload.can_freeze_account);
 	}
 
 	// read-only for root accounts
-	if(!doc.parent_account) {
+	if (!doc.parent_account) {
 		cur_frm.set_read_only();
 		cur_frm.set_intro(__("This is a root account and cannot be edited."));
 	} else {
@@ -38,53 +38,53 @@
 cur_frm.add_fetch('parent_account', 'report_type', 'report_type');
 cur_frm.add_fetch('parent_account', 'root_type', 'root_type');
 
-cur_frm.cscript.account_type = function(doc, cdt, cdn) {
-	if(doc.is_group==0) {
+cur_frm.cscript.account_type = function (doc, cdt, cdn) {
+	if (doc.is_group == 0) {
 		cur_frm.toggle_display(['tax_rate'], doc.account_type == 'Tax');
-		cur_frm.toggle_display('warehouse', doc.account_type=='Stock');
+		cur_frm.toggle_display('warehouse', doc.account_type == 'Stock');
 	}
 }
 
-cur_frm.cscript.add_toolbar_buttons = function(doc) {
+cur_frm.cscript.add_toolbar_buttons = function (doc) {
 	cur_frm.add_custom_button(__('Chart of Accounts'),
-		function() { frappe.set_route("Tree", "Account"); });
+		function () { frappe.set_route("Tree", "Account"); });
 
 	if (doc.is_group == 1) {
 		cur_frm.add_custom_button(__('Group to Non-Group'),
-			function() { cur_frm.cscript.convert_to_ledger(); }, 'fa fa-retweet', 'btn-default');
+			function () { cur_frm.cscript.convert_to_ledger(); }, 'fa fa-retweet', 'btn-default');
 	} else if (cint(doc.is_group) == 0) {
-		cur_frm.add_custom_button(__('Ledger'), function() {
+		cur_frm.add_custom_button(__('Ledger'), function () {
 			frappe.route_options = {
 				"account": doc.name,
-				"from_date": sys_defaults.year_start_date,
-				"to_date": sys_defaults.year_end_date,
+				"from_date": frappe.sys_defaults.year_start_date,
+				"to_date": frappe.sys_defaults.year_end_date,
 				"company": doc.company
 			};
 			frappe.set_route("query-report", "General Ledger");
 		});
 
 		cur_frm.add_custom_button(__('Non-Group to Group'),
-			function() { cur_frm.cscript.convert_to_group(); }, 'fa fa-retweet', 'btn-default')
+			function () { cur_frm.cscript.convert_to_group(); }, 'fa fa-retweet', 'btn-default')
 	}
 }
 
-cur_frm.cscript.convert_to_ledger = function(doc, cdt, cdn) {
-  return $c_obj(cur_frm.doc,'convert_group_to_ledger','',function(r,rt) {
-    if(r.message == 1) {
-	  cur_frm.refresh();
-    }
-  });
+cur_frm.cscript.convert_to_ledger = function (doc, cdt, cdn) {
+	return $c_obj(cur_frm.doc, 'convert_group_to_ledger', '', function (r, rt) {
+		if (r.message == 1) {
+			cur_frm.refresh();
+		}
+	});
 }
 
-cur_frm.cscript.convert_to_group = function(doc, cdt, cdn) {
-  return $c_obj(cur_frm.doc,'convert_ledger_to_group','',function(r,rt) {
-    if(r.message == 1) {
-	  cur_frm.refresh();
-    }
-  });
+cur_frm.cscript.convert_to_group = function (doc, cdt, cdn) {
+	return $c_obj(cur_frm.doc, 'convert_ledger_to_group', '', function (r, rt) {
+		if (r.message == 1) {
+			cur_frm.refresh();
+		}
+	});
 }
 
-cur_frm.fields_dict['parent_account'].get_query = function(doc) {
+cur_frm.fields_dict['parent_account'].get_query = function (doc) {
 	return {
 		filters: {
 			"is_group": 1,
diff --git a/erpnext/accounts/doctype/account/account_tree.js b/erpnext/accounts/doctype/account/account_tree.js
index 1fbbf4f..2cfafd1 100644
--- a/erpnext/accounts/doctype/account/account_tree.js
+++ b/erpnext/accounts/doctype/account/account_tree.js
@@ -72,8 +72,8 @@
 			click: function(node, btn) {
 				frappe.route_options = {
 					"account": node.label,
-					"from_date": sys_defaults.year_start_date,
-					"to_date": sys_defaults.year_end_date,
+					"from_date": frappe.sys_defaults.year_start_date,
+					"to_date": frappe.sys_defaults.year_end_date,
 					"company": frappe.defaults.get_default('company') ? frappe.defaults.get_default('company'): ""
 				};
 				frappe.set_route("query-report", "General Ledger");
diff --git a/erpnext/accounts/doctype/asset/asset.js b/erpnext/accounts/doctype/asset/asset.js
index a1b3dd3..7c4eeae 100644
--- a/erpnext/accounts/doctype/asset/asset.js
+++ b/erpnext/accounts/doctype/asset/asset.js
@@ -14,7 +14,7 @@
 				}
 			};
 		});
-		
+
 		frm.set_query("warehouse", function() {
 			return {
 				"filters": {
@@ -24,12 +24,12 @@
 			};
 		});
 	},
-	
+
 	refresh: function(frm) {
 		frappe.ui.form.trigger("Asset", "is_existing_asset");
 		frm.toggle_display("next_depreciation_date", frm.doc.docstatus < 1);
 		frm.events.make_schedules_editable(frm);
-				
+
 		if (frm.doc.docstatus==1) {
 			if (frm.doc.status=='Submitted' && !frm.doc.is_existing_asset && !frm.doc.purchase_invoice) {
 				frm.add_custom_button("Make Purchase Invoice", function() {
@@ -40,60 +40,60 @@
 				frm.add_custom_button("Transfer Asset", function() {
 					erpnext.asset.transfer_asset(frm);
 				});
-				
+
 				frm.add_custom_button("Scrap Asset", function() {
 					erpnext.asset.scrap_asset(frm);
 				});
-				
+
 				frm.add_custom_button("Sell Asset", function() {
 					erpnext.asset.make_sales_invoice(frm);
 				});
-				
+
 			} else if (frm.doc.status=='Scrapped') {
 				frm.add_custom_button("Restore Asset", function() {
 					erpnext.asset.restore_asset(frm);
 				});
 			}
-			
+
 			frm.trigger("show_graph");
 		}
 	},
-	
-	show_graph: function(frm) {		
+
+	show_graph: function(frm) {
 		var x_intervals = ["x", frm.doc.purchase_date];
 		var asset_values = ["Asset Value", frm.doc.gross_purchase_amount];
 		var last_depreciation_date = frm.doc.purchase_date;
-		
+
 		if(frm.doc.opening_accumulated_depreciation) {
-			last_depreciation_date = frappe.datetime.add_months(frm.doc.next_depreciation_date, 
+			last_depreciation_date = frappe.datetime.add_months(frm.doc.next_depreciation_date,
 				-1*frm.doc.frequency_of_depreciation);
-			
+
 			x_intervals.push(last_depreciation_date);
-			asset_values.push(flt(frm.doc.gross_purchase_amount) - 
+			asset_values.push(flt(frm.doc.gross_purchase_amount) -
 				flt(frm.doc.opening_accumulated_depreciation));
 		}
-		
+
 		$.each(frm.doc.schedules || [], function(i, v) {
 			x_intervals.push(v.schedule_date);
-			asset_value = flt(frm.doc.gross_purchase_amount) - flt(v.accumulated_depreciation_amount);
-			if(v.journal_entry) {				
+			var asset_value = flt(frm.doc.gross_purchase_amount) - flt(v.accumulated_depreciation_amount);
+			if(v.journal_entry) {
 				last_depreciation_date = v.schedule_date;
 				asset_values.push(asset_value)
 			} else {
 				if (in_list(["Scrapped", "Sold"], frm.doc.status)) {
-	 				asset_values.push(null)
+					asset_values.push(null)
 				} else {
 					asset_values.push(asset_value)
 				}
 			}
 		})
-		
+
 		if(in_list(["Scrapped", "Sold"], frm.doc.status)) {
 			x_intervals.push(frm.doc.disposal_date);
 			asset_values.push(0);
 			last_depreciation_date = frm.doc.disposal_date;
 		}
-		
+
 		frm.dashboard.setup_chart({
 			data: {
 				x: 'x',
@@ -117,9 +117,9 @@
 					padding: {bottom: 10}
 				}
 			}
-		});		
+		});
 	},
-	
+
 	item_code: function(frm) {
 		if(frm.doc.item_code) {
 			frappe.call({
@@ -137,27 +137,27 @@
 			})
 		}
 	},
-	
+
 	is_existing_asset: function(frm) {
 		frm.toggle_enable("supplier", frm.doc.is_existing_asset);
 		frm.toggle_reqd("next_depreciation_date", !frm.doc.is_existing_asset);
 	},
-	
+
 	opening_accumulated_depreciation: function(frm) {
 		erpnext.asset.set_accululated_depreciation(frm);
 	},
-	
+
 	depreciation_method: function(frm) {
 		frm.events.make_schedules_editable(frm);
 	},
-	
+
 	make_schedules_editable: function(frm) {
 		var is_editable = frm.doc.depreciation_method==="Manual" ? true : false;
 		frm.toggle_enable("schedules", is_editable);
 		frm.fields_dict["schedules"].grid.toggle_enable("schedule_date", is_editable);
 		frm.fields_dict["schedules"].grid.toggle_enable("depreciation_amount", is_editable);
 	}
-	
+
 });
 
 frappe.ui.form.on('Depreciation Schedule', {
@@ -177,7 +177,7 @@
 			})
 		}
 	},
-	
+
 	depreciation_amount: function(frm, cdt, cdn) {
 		erpnext.asset.set_accululated_depreciation(frm);
 	}
@@ -186,11 +186,11 @@
 
 erpnext.asset.set_accululated_depreciation = function(frm) {
 	if(frm.doc.depreciation_method != "Manual") return;
-	
-	accumulated_depreciation = flt(frm.doc.opening_accumulated_depreciation);
+
+	var accumulated_depreciation = flt(frm.doc.opening_accumulated_depreciation);
 	$.each(frm.doc.schedules || [], function(i, row) {
 		accumulated_depreciation  += flt(row.depreciation_amount);
-		frappe.model.set_value(row.doctype, row.name, 
+		frappe.model.set_value(row.doctype, row.name,
 			"accumulated_depreciation_amount", accumulated_depreciation);
 	})
 }
@@ -260,9 +260,9 @@
 		title: __("Transfer Asset"),
 		fields: [
 			{
-				"label": __("Target Warehouse"), 
+				"label": __("Target Warehouse"),
 				"fieldname": "target_warehouse",
-				"fieldtype": "Link", 
+				"fieldtype": "Link",
 				"options": "Warehouse",
 				"get_query": function () {
 					return {
@@ -271,13 +271,13 @@
 							["Warehouse", "is_group", "=", 0]
 						]
 					}
-				}, 
-				"reqd": 1 
+				},
+				"reqd": 1
 			},
 			{
-				"label": __("Date"), 
+				"label": __("Date"),
 				"fieldname": "transfer_date",
-				"fieldtype": "Datetime", 
+				"fieldtype": "Datetime",
 				"reqd": 1,
 				"default": frappe.datetime.now_datetime()
 			}
@@ -285,7 +285,7 @@
 	});
 
 	dialog.set_primary_action(__("Transfer"), function() {
-		args = dialog.get_values();
+		var args = dialog.get_values();
 		if(!args) return;
 		dialog.hide();
 		return frappe.call({
diff --git a/erpnext/accounts/doctype/asset/asset_list.js b/erpnext/accounts/doctype/asset/asset_list.js
index 961ab3f..8e262f1 100644
--- a/erpnext/accounts/doctype/asset/asset_list.js
+++ b/erpnext/accounts/doctype/asset/asset_list.js
@@ -1,3 +1,3 @@
 frappe.listview_settings['Asset'] = {
-    add_fields: ['image']
+	add_fields: ['image']
 }
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/asset_movement/asset_movement.js b/erpnext/accounts/doctype/asset_movement/asset_movement.js
index 808f01a..70c4080 100644
--- a/erpnext/accounts/doctype/asset_movement/asset_movement.js
+++ b/erpnext/accounts/doctype/asset_movement/asset_movement.js
@@ -4,7 +4,7 @@
 frappe.ui.form.on('Asset Movement', {
 	onload: function(frm) {
 		frm.add_fetch("asset", "warehouse", "source_warehouse");
-		
+
 		frm.set_query("target_warehouse", function() {
 			return {
 				filters: [
diff --git a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
index 4993202..0439b73 100644
--- a/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
+++ b/erpnext/accounts/doctype/bank_guarantee/bank_guarantee.js
@@ -20,11 +20,11 @@
 		});
 	},
 	start_date: function(frm) {
-		end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
+		var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
 		cur_frm.set_value("end_date", end_date);
 	},
 	validity: function(frm) {
-		end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
+		var end_date = frappe.datetime.add_days(cur_frm.doc.start_date, cur_frm.doc.validity - 1);
 		cur_frm.set_value("end_date", end_date);
 	}
 });
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/cost_center/cost_center.js b/erpnext/accounts/doctype/cost_center/cost_center.js
index 5d11005..cbc37ff 100644
--- a/erpnext/accounts/doctype/cost_center/cost_center.js
+++ b/erpnext/accounts/doctype/cost_center/cost_center.js
@@ -43,7 +43,7 @@
 
 cur_frm.cscript.parent_cost_center = function(doc, cdt, cdn) {
 	if(!doc.company){
-		msgprint(__('Please enter company name first'));
+		frappe.msgprint(__('Please enter company name first'));
 	}
 }
 
diff --git a/erpnext/accounts/doctype/fiscal_year/fiscal_year.js b/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
index a516557..4dc6433 100644
--- a/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
+++ b/erpnext/accounts/doctype/fiscal_year/fiscal_year.js
@@ -13,7 +13,7 @@
 		this.frm.toggle_enable('year_start_date', doc.__islocal)
 		this.frm.toggle_enable('year_end_date', doc.__islocal)
 
-		if (!doc.__islocal && (doc.name != sys_defaults.fiscal_year)) {
+		if (!doc.__islocal && (doc.name != frappe.sys_defaults.fiscal_year)) {
 			this.frm.add_custom_button(__("Default"),
 				this.frm.cscript.set_as_default, "fa fa-star");
 			this.frm.set_intro(__("To set this Fiscal Year as Default, click on 'Set as Default'"));
@@ -30,7 +30,7 @@
 	year_start_date: function(doc, dt, dn) {
 		var me = this;
 
-		year_end_date =
+		var year_end_date =
 			frappe.datetime.add_days(frappe.datetime.add_months(this.frm.doc.year_start_date, 12), -1);
 		this.frm.set_value("year_end_date", year_end_date);
 	},
diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js
index bb01103..4880224 100644
--- a/erpnext/accounts/doctype/journal_entry/journal_entry.js
+++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js
@@ -62,11 +62,10 @@
 		if(this.frm.doc.__islocal && this.frm.doc.company) {
 			frappe.model.set_default_values(this.frm.doc);
 			$.each(this.frm.doc.accounts || [], function(i, jvd) {
-					frappe.model.set_default_values(jvd);
-				}
-			);
+				frappe.model.set_default_values(jvd);
+			});
 
-			if(!this.frm.doc.amended_from) this.frm.doc.posting_date = this.frm.posting_date || get_today();
+			if(!this.frm.doc.amended_from) this.frm.doc.posting_date = this.frm.posting_date || frappe.datetime.get_today();
 		}
 	},
 
@@ -124,7 +123,7 @@
 				// account filter
 				frappe.model.validate_missing(jvd, "account");
 
-				party_account_field = jvd.reference_type==="Sales Invoice" ? "debit_to": "credit_to";
+				var party_account_field = jvd.reference_type==="Sales Invoice" ? "debit_to": "credit_to";
 				out.filters.push([jvd.reference_type, party_account_field, "=", jvd.account]);
 			} else {
 				// party_type and party mandatory
@@ -243,7 +242,7 @@
 cur_frm.cscript.get_balance = function(doc,dt,dn) {
 	cur_frm.cscript.update_totals(doc);
 	return $c_obj(cur_frm.doc, 'get_balance', '', function(r, rt){
-	cur_frm.refresh();
+		cur_frm.refresh();
 	});
 }
 
diff --git a/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js b/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
index 6f3c1c4..7b489de 100644
--- a/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
+++ b/erpnext/accounts/doctype/monthly_distribution/monthly_distribution.js
@@ -2,13 +2,13 @@
 // License: GNU General Public License v3. See license.txt
 
 cur_frm.cscript.onload = function(doc,cdt,cdn){
-  if(doc.__islocal){
-    var callback1 = function(r,rt){
-      refresh_field('percentages');
-    }
+	if(doc.__islocal){
+		var callback1 = function(r,rt){
+			refresh_field('percentages');
+		}
 
-    return $c('runserverobj',args={'method':'get_months', 'docs':doc}, callback1);
-  }
+		return $c('runserverobj', {'method':'get_months', 'docs':doc}, callback1);
+	}
 }
 
 cur_frm.cscript.refresh = function(doc,cdt,cdn){
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 2eef79c..f54193b 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -36,7 +36,7 @@
 		frm.set_query("paid_to", function() {
 			var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable";
 			var account_types = in_list(["Receive", "Internal Transfer"], frm.doc.payment_type) ?
-	 			["Bank", "Cash"] : party_account_type;
+				["Bank", "Cash"] : party_account_type;
 
 			return {
 				filters: {
@@ -182,8 +182,8 @@
 		if(frm.doc.payment_type == "Internal Transfer") {
 			$.each(["party", "party_balance", "paid_from", "paid_to",
 				"references", "total_allocated_amount"], function(i, field) {
-					frm.set_value(field, null);
-			})
+				frm.set_value(field, null);
+			});
 		} else {
 			if(!frm.doc.party)
 				frm.set_value("party_type", frm.doc.payment_type=="Receive" ? "Customer" : "Supplier");
@@ -200,9 +200,10 @@
 			$.each(["party", "party_balance", "paid_from", "paid_to",
 				"paid_from_account_currency", "paid_from_account_balance",
 				"paid_to_account_currency", "paid_to_account_balance",
-				"references", "total_allocated_amount"], function(i, field) {
+				"references", "total_allocated_amount"],
+				function(i, field) {
 					frm.set_value(field, null);
-			})
+				})
 		}
 	},
 
@@ -487,13 +488,17 @@
 						}
 					});
 
-					if((frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
-						(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier")) {
-							if(total_positive_outstanding > total_negative_outstanding)
-								frm.set_value("paid_amount",
-									total_positive_outstanding - total_negative_outstanding);
-					} else if (total_negative_outstanding &&
-							(total_positive_outstanding < total_negative_outstanding)) {
+					if(
+						(frm.doc.payment_type=="Receive" && frm.doc.party_type=="Customer") ||
+						(frm.doc.payment_type=="Pay" && frm.doc.party_type=="Supplier")
+					) {
+						if(total_positive_outstanding > total_negative_outstanding)
+							frm.set_value("paid_amount",
+								total_positive_outstanding - total_negative_outstanding);
+					} else if (
+						total_negative_outstanding &&
+						total_positive_outstanding < total_negative_outstanding
+					) {
 						frm.set_value("received_amount",
 							total_negative_outstanding - total_positive_outstanding);
 					}
@@ -561,9 +566,11 @@
 			row.allocated_amount = 0 //If allocate payment amount checkbox is unchecked, set zero to allocate amount
 			if(frm.doc.allocate_payment_amount){
 				if(row.outstanding_amount > 0 && allocated_positive_outstanding > 0) {
-					if(row.outstanding_amount >= allocated_positive_outstanding)
-							row.allocated_amount = allocated_positive_outstanding;
-					else row.allocated_amount = row.outstanding_amount;
+					if(row.outstanding_amount >= allocated_positive_outstanding) {
+						row.allocated_amount = allocated_positive_outstanding;
+					} else {
+						row.allocated_amount = row.outstanding_amount;
+					}
 
 					allocated_positive_outstanding -= flt(row.allocated_amount);
 				} else if (row.outstanding_amount < 0 && allocated_negative_outstanding) {
@@ -581,7 +588,8 @@
 	},
 
 	set_total_allocated_amount: function(frm) {
-		var total_allocated_amount = base_total_allocated_amount = 0.0;
+		var total_allocated_amount = 0.0;
+		var base_total_allocated_amount = 0.0;
 		$.each(frm.doc.references || [], function(i, row) {
 			if (row.allocated_amount) {
 				total_allocated_amount += flt(row.allocated_amount);
@@ -653,19 +661,21 @@
 				return;
 			}
 
-			if(frm.doc.party_type=="Customer"
-				&& !in_list(["Sales Order", "Sales Invoice", "Journal Entry"], row.reference_doctype)) {
-					frappe.model.set_value(row.doctype, row.name, "reference_doctype", null);
-					frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice or Journal Entry", [row.idx]));
-					return false;
-				}
+			if(frm.doc.party_type=="Customer" &&
+				!in_list(["Sales Order", "Sales Invoice", "Journal Entry"], row.reference_doctype)
+			) {
+				frappe.model.set_value(row.doctype, row.name, "reference_doctype", null);
+				frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Sales Order, Sales Invoice or Journal Entry", [row.idx]));
+				return false;
+			}
 
-			if(frm.doc.party_type=="Supplier" && !in_list(["Purchase Order",
-				"Purchase Invoice", "Journal Entry"], row.reference_doctype)) {
-					frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null);
-					frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
-					return false;
-				}
+			if(frm.doc.party_type=="Supplier" &&
+				!in_list(["Purchase Order", "Purchase Invoice", "Journal Entry"], row.reference_doctype)
+			) {
+				frappe.model.set_value(row.doctype, row.name, "against_voucher_type", null);
+				frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
+				return false;
+			}
 		}
 
 		if (row) {
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
index 272e474..ebd9439 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
@@ -14,7 +14,7 @@
 
 		this.frm.set_query('receivable_payable_account', function() {
 			if(!me.frm.doc.company || !me.frm.doc.party_type) {
-				msgprint(__("Please select Company and Party Type first"));
+				frappe.msgprint(__("Please select Company and Party Type first"));
 			} else {
 				return{
 					filters: {
@@ -29,7 +29,7 @@
 
 		this.frm.set_query('bank_cash_account', function() {
 			if(!me.frm.doc.company) {
-				msgprint(__("Please select Company first"));
+				frappe.msgprint(__("Please select Company first"));
 			} else {
 				return{
 					filters:[
@@ -96,10 +96,11 @@
 	},
 
 	set_invoice_options: function() {
+		var me = this;
 		var invoices = [];
 
 		$.each(me.frm.doc.invoices || [], function(i, row) {
-			if (row.invoice_number && !inList(invoices, row.invoice_number))
+			if (row.invoice_number && !in_list(invoices, row.invoice_number))
 				invoices.push(row.invoice_type + " | " + row.invoice_number);
 		});
 
@@ -108,7 +109,7 @@
 				me.frm.doc.name).options = "\n" + invoices.join("\n");
 
 			$.each(me.frm.doc.payments || [], function(i, p) {
-				if(!inList(invoices, cstr(p.invoice_number))) p.invoice_number = null;
+				if(!in_list(invoices, cstr(p.invoice_number))) p.invoice_number = null;
 			});
 		}
 
diff --git a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
index c5ded6d..03b8f93 100644
--- a/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
+++ b/erpnext/accounts/doctype/period_closing_voucher/period_closing_voucher.js
@@ -3,7 +3,7 @@
 
 frappe.ui.form.on('Period Closing Voucher', {
 	onload: function(frm) {
-		if (!frm.doc.transaction_date) frm.doc.transaction_date = dateutil.obj_to_str(new Date());
+		if (!frm.doc.transaction_date) frm.doc.transaction_date = frappe.datetime.obj_to_str(new Date());
 	},
 	
 	setup: function(frm) {
diff --git a/erpnext/accounts/doctype/pos_profile/pos_profile.js b/erpnext/accounts/doctype/pos_profile/pos_profile.js
index c1aa0c3..83016a9 100755
--- a/erpnext/accounts/doctype/pos_profile/pos_profile.js
+++ b/erpnext/accounts/doctype/pos_profile/pos_profile.js
@@ -35,8 +35,8 @@
 			'company': doc.company,
 			'account_type': "Income Account"
 		}
-	}
-}
+	};
+};
 
 
 // Cost Center
@@ -47,8 +47,8 @@
 			'company': doc.company,
 			'is_group': 0
 		}
-	}
-}
+	};
+};
 
 
 // Expense Account
@@ -60,8 +60,8 @@
 			"company": doc.company,
 			"is_group": 0
 		}
-	}
-}
+	};
+};
 
 // ------------------ Get Print Heading ------------------------------------
 cur_frm.fields_dict['select_print_heading'].get_query = function(doc, cdt, cdn) {
@@ -69,13 +69,13 @@
 		filters:[
 			['Print Heading', 'docstatus', '!=', 2]
 		]
-	}
-}
+	};
+};
 
 
 cur_frm.fields_dict.user.get_query = function(doc,cdt,cdn) {
-	return{	query:"frappe.core.doctype.user.user.user_query"}
-}
+	return{	query:"frappe.core.doctype.user.user.user_query"};
+};
 
 cur_frm.fields_dict.write_off_account.get_query = function(doc) {
 	return{
@@ -84,16 +84,16 @@
 			'is_group': 0,
 			'company': doc.company
 		}
-	}
-}
+	};
+};
 
 // Write off cost center
-//-----------------------
+// -----------------------
 cur_frm.fields_dict.write_off_cost_center.get_query = function(doc) {
 	return{
 		filters:{
 			'is_group': 0,
 			'company': doc.company
 		}
-	}
-}
+	};
+};
diff --git a/erpnext/accounts/doctype/pricing_rule/pricing_rule.js b/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
index 03bb7ae..120329b 100644
--- a/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
+++ b/erpnext/accounts/doctype/pricing_rule/pricing_rule.js
@@ -2,63 +2,65 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Pricing Rule", "refresh", function(frm) {
-	var help_content = ['<table class="table table-bordered" style="background-color: #f9f9f9;">',
-		'<tr><td>',
-			'<h4><i class="fa fa-hand-right"></i> ',
-				__('Notes'),
-			':</h4>',
-			'<ul>',
-				'<li>',
-					__("Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria."),
-				'</li>',
-				'<li>',
-					__("If selected Pricing Rule is made for 'Price', it will overwrite Price List. Pricing Rule price is the final price, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field."),
-				'</li>',
-				'<li>',
-					__('Discount Percentage can be applied either against a Price List or for all Price List.'),
-				'</li>',
-				'<li>',
-					__('To not apply Pricing Rule in a particular transaction, all applicable Pricing Rules should be disabled.'),
-				'</li>',
-			'</ul>',
-		'</td></tr>',
-		'<tr><td>',
-			'<h4><i class="fa fa-question-sign"></i> ',
-				__('How Pricing Rule is applied?'),
-			'</h4>',
-			'<ol>',
-				'<li>',
-					__("Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand."),
-				'</li>',
-				'<li>',
-					__("Then Pricing Rules are filtered out based on Customer, Customer Group, Territory, Supplier, Supplier Type, Campaign, Sales Partner etc."),
-				'</li>',
-				'<li>',
-					__('Pricing Rules are further filtered based on quantity.'),
-				'</li>',
-				'<li>',
-					__('If two or more Pricing Rules are found based on the above conditions, Priority is applied. Priority is a number between 0 to 20 while default value is zero (blank). Higher number means it will take precedence if there are multiple Pricing Rules with same conditions.'),
-				'</li>',
-				'<li>',
-					__('Even if there are multiple Pricing Rules with highest priority, then following internal priorities are applied:'),
-					'<ul>',
-						'<li>',
-							__('Item Code > Item Group > Brand'),
-						'</li>',
-						'<li>',
-							__('Customer > Customer Group > Territory'),
-						'</li>',
-						'<li>',
-							__('Supplier > Supplier Type'),
-						'</li>',
-					'</ul>',
-				'</li>',
-				'<li>',
-					__('If multiple Pricing Rules continue to prevail, users are asked to set Priority manually to resolve conflict.'),
-				'</li>',
-			'</ol>',
-		'</td></tr>',
-	'</table>'].join("\n");
+	var help_content =
+		`<table class="table table-bordered" style="background-color: #f9f9f9;">
+			<tr><td>
+				<h4>
+					<i class="fa fa-hand-right"></i>
+					${__('Notes')}
+				</h4>
+				<ul>
+					<li>
+						${__("Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria.")}
+					</li>
+					<li>
+						${__("If selected Pricing Rule is made for 'Price', it will overwrite Price List. Pricing Rule price is the final price, so no further discount should be applied. Hence, in transactions like Sales Order, Purchase Order etc, it will be fetched in 'Rate' field, rather than 'Price List Rate' field.")}
+					</li>
+					<li>
+						${__('Discount Percentage can be applied either against a Price List or for all Price List.')}
+					</li>
+					<li>
+						${__('To not apply Pricing Rule in a particular transaction, all applicable Pricing Rules should be disabled.')}
+					</li>
+				</ul>
+			</td></tr>
+			<tr><td>
+				<h4><i class="fa fa-question-sign"></i>
+					${__('How Pricing Rule is applied?')}
+				</h4>
+				<ol>
+					<li>
+						${__("Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand.")}
+					</li>
+					<li>
+						${__("Then Pricing Rules are filtered out based on Customer, Customer Group, Territory, Supplier, Supplier Type, Campaign, Sales Partner etc.")}
+					</li>
+					<li>
+						${__('Pricing Rules are further filtered based on quantity.')}
+					</li>
+					<li>
+						${__('If two or more Pricing Rules are found based on the above conditions, Priority is applied. Priority is a number between 0 to 20 while default value is zero (blank). Higher number means it will take precedence if there are multiple Pricing Rules with same conditions.')}
+					</li>
+					<li>
+						${__('Even if there are multiple Pricing Rules with highest priority, then following internal priorities are applied:')}
+						<ul>
+							<li>
+								${__('Item Code > Item Group > Brand')}
+							</li>
+							<li>
+								${__('Customer > Customer Group > Territory')}
+							</li>
+							<li>
+								${__('Supplier > Supplier Type')}
+							</li>
+						</ul>
+					</li>
+					<li>
+						${__('If multiple Pricing Rules continue to prevail, users are asked to set Priority manually to resolve conflict.')}
+					</li>
+				</ol>
+			</td></tr>
+		</table>`;
 
 	set_field_options("pricing_rule_help", help_content);
 
diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
index b48fb20..9462151 100644
--- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
+++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js
@@ -101,8 +101,8 @@
 				account: this.frm.doc.credit_to,
 				price_list: this.frm.doc.buying_price_list,
 			}, function() {
-			me.apply_pricing_rule();
-		})
+				me.apply_pricing_rule();
+			})
 	},
 
 	credit_to: function() {
@@ -130,7 +130,7 @@
 		if(cint(this.frm.doc.is_paid)) {
 			if(!this.frm.doc.company) {
 				this.frm.set_value("is_paid", 0)
-				msgprint(__("Please specify Company to proceed"));
+				frappe.msgprint(__("Please specify Company to proceed"));
 			}
 		}
 		this.calculate_outstanding_amount();
@@ -195,19 +195,19 @@
 // Hide Fields
 // ------------
 function hide_fields(doc) {
-	parent_fields = ['due_date', 'is_opening', 'advances_section', 'from_date', 'to_date'];
+	var parent_fields = ['due_date', 'is_opening', 'advances_section', 'from_date', 'to_date'];
 
 	if(cint(doc.is_paid) == 1) {
 		hide_field(parent_fields);
 	} else {
-		for (i in parent_fields) {
+		for (var i in parent_fields) {
 			var docfield = frappe.meta.docfield_map[doc.doctype][parent_fields[i]];
 			if(!docfield.hidden) unhide_field(parent_fields[i]);
 		}
 
 	}
 
-	item_fields_stock = ['warehouse_section', 'received_qty', 'rejected_qty'];
+	var item_fields_stock = ['warehouse_section', 'received_qty', 'rejected_qty'];
 
 	cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock,
 		(cint(doc.update_stock)==1 || cint(doc.is_return)==1 ? true : false));
diff --git a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
index a1d8bf8..eb0ea7f 100644
--- a/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
+++ b/erpnext/accounts/doctype/purchase_taxes_and_charges_template/purchase_taxes_and_charges_template.js
@@ -9,11 +9,11 @@
 	var d = locals[cdt][cdn];
 
 	if(!d.category && d.add_deduct_tax) {
-		msgprint(__("Please select Category first"));
+		frappe.msgprint(__("Please select Category first"));
 		d.add_deduct_tax = '';
 	}
 	else if(d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
-		msgprint(__("Cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
+		frappe.msgprint(__("Cannot deduct when category is for 'Valuation' or 'Valuation and Total'"));
 		d.add_deduct_tax = '';
 	}
 	refresh_field('add_deduct_tax', d.name, 'taxes');
@@ -23,7 +23,7 @@
 	var d = locals[cdt][cdn];
 
 	if (d.category != 'Total' && d.add_deduct_tax == 'Deduct') {
-		msgprint(__("Cannot deduct when category is for 'Valuation' or 'Vaulation and Total'"));
+		frappe.msgprint(__("Cannot deduct when category is for 'Valuation' or 'Vaulation and Total'"));
 		d.add_deduct_tax = '';
 	}
 	refresh_field('add_deduct_tax', d.name, 'taxes');
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
index 0e4edcc..2107581 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js
@@ -175,8 +175,8 @@
 				account: this.frm.doc.debit_to,
 				price_list: this.frm.doc.selling_price_list,
 			}, function() {
-			me.apply_pricing_rule();
-		})
+				me.apply_pricing_rule();
+			})
 	},
 
 	debit_to: function() {
@@ -267,7 +267,7 @@
 		if(this.frm.doc.is_pos) {
 			if(!this.frm.doc.company) {
 				this.frm.set_value("is_pos", 0);
-				msgprint(__("Please specify Company to proceed"));
+				frappe.msgprint(__("Please specify Company to proceed"));
 			} else {
 				var me = this;
 				return this.frm.call({
@@ -312,19 +312,19 @@
 // Hide Fields
 // ------------
 cur_frm.cscript.hide_fields = function(doc) {
-	parent_fields = ['project', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances',
+	var parent_fields = ['project', 'due_date', 'is_opening', 'source', 'total_advance', 'get_advances',
 		'advances', 'sales_partner', 'commission_rate', 'total_commission', 'advances', 'from_date', 'to_date'];
 
 	if(cint(doc.is_pos) == 1) {
 		hide_field(parent_fields);
 	} else {
-		for (i in parent_fields) {
+		for (var i in parent_fields) {
 			var docfield = frappe.meta.docfield_map[doc.doctype][parent_fields[i]];
 			if(!docfield.hidden) unhide_field(parent_fields[i]);
 		}
 	}
 
-	item_fields_stock = ['batch_no', 'actual_batch_qty', 'actual_qty', 'expense_account',
+	var item_fields_stock = ['batch_no', 'actual_batch_qty', 'actual_qty', 'expense_account',
 		'warehouse', 'expense_account', 'quality_inspection']
 	cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock,
 		(cint(doc.update_stock)==1 || cint(doc.is_return)==1 ? true : false));
@@ -401,7 +401,7 @@
 });
 
 // expense account
-if (sys_defaults.auto_accounting_for_stock) {
+if (frappe.sys_defaults.auto_accounting_for_stock) {
 	cur_frm.fields_dict['items'].grid.get_field('expense_account').get_query = function(doc) {
 		return {
 			filters: {
@@ -443,11 +443,12 @@
 	})
 
 	if(cur_frm.doc.is_pos) {
-		cur_frm.msgbox = frappe.msgprint(format('<a class="btn btn-primary" \
-			onclick="cur_frm.print_preview.printit(true)" style="margin-right: 5px;">{0}</a>\
-			<a class="btn btn-default" href="javascript:frappe.new_doc(cur_frm.doctype);">{1}</a>', [
-			__('Print'), __('New')
-		]));
+		cur_frm.msgbox = frappe.msgprint(
+			`<a class="btn btn-primary" onclick="cur_frm.print_preview.printit(true)" style="margin-right: 5px;">
+				${__('Print')}</a>
+			<a class="btn btn-default" href="javascript:frappe.new_doc(cur_frm.doctype);">
+				${__('New')}</a>`
+			);
 
 	} else if(cint(frappe.boot.notification_settings.sales_invoice)) {
 		cur_frm.email_doc(frappe.boot.notification_settings.sales_invoice_message);
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index dc524e1..b80bf46 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -113,7 +113,7 @@
 
 	email_prompt: function() {
 		var me = this;
-		fields = [{label:__("To"), fieldtype:"Data", reqd: 0, fieldname:"recipients",length:524288},
+		var fields = [{label:__("To"), fieldtype:"Data", reqd: 0, fieldname:"recipients",length:524288},
 			{fieldtype: "Section Break", collapsible: 1, label: "CC & Standard Reply"},
 			{fieldtype: "Section Break"},
 			{label:__("Subject"), fieldtype:"Data", reqd: 1,
@@ -602,7 +602,7 @@
 		var html = "";
 		if(this.si_docs.length) {
 			this.si_docs.forEach(function (data, i) {
-				for (key in data) {
+				for (var key in data) {
 					html += frappe.render_template("pos_invoice_list", {
 						sr: i + 1,
 						name: key,
@@ -965,7 +965,7 @@
 	make_item_list: function () {
 		var me = this;
 		if (!this.price_list) {
-			msgprint(__("Price List not found or disabled"));
+			frappe.msgprint(__("Price List not found or disabled"));
 			return;
 		}
 
@@ -1232,7 +1232,7 @@
 
 	remove_zero_qty_item: function () {
 		var me = this;
-		idx = 0
+		var idx = 0;
 		this.items = []
 		$.each(this.frm.doc["items"] || [], function (i, d) {
 			if (!in_list(me.remove_item, d.idx)) {
@@ -1250,7 +1250,7 @@
 
 		this.wrapper.find('input.discount-percentage').on("change", function () {
 			me.frm.doc.additional_discount_percentage = flt($(this).val(), precision("additional_discount_percentage"));
-			total = me.frm.doc.grand_total
+			var total = me.frm.doc.grand_total
 
 			if (me.frm.doc.apply_discount_on == 'Net Total') {
 				total = me.frm.doc.net_total
@@ -1442,7 +1442,7 @@
 
 		if (this.frm.doc.docstatus == 1) {
 			this.page.set_secondary_action(__("Print"), function () {
-				html = frappe.render(me.print_template_data, me.frm.doc)
+				var html = frappe.render(me.print_template_data, me.frm.doc)
 				me.print_document(html)
 			})
 			this.page.add_menu_item(__("Email"), function () {
@@ -1465,19 +1465,18 @@
 	print_dialog: function () {
 		var me = this;
 
-		this.msgprint = frappe.msgprint(format('<a class="btn btn-primary print_doc" \
-			style="margin-right: 5px;">{0}</a>\
-			<a class="btn btn-default new_doc">{1}</a>', [
-				__('Print'), __('New')
-			]));
+		this.frappe.msgprint = frappe.msgprint(
+			`<a class="btn btn-primary print_doc"
+				style="margin-right: 5px;">${__('Print')}</a>
+			<a class="btn btn-default new_doc">${__('New')}</a>`);
 
 		$('.print_doc').click(function () {
-			html = frappe.render(me.print_template_data, me.frm.doc)
+			var html = frappe.render(me.print_template_data, me.frm.doc)
 			me.print_document(html)
 		})
 
 		$('.new_doc').click(function () {
-			me.msgprint.hide()
+			me.frappe.msgprint.hide()
 			me.make_new_cart()
 		})
 	},
@@ -1506,9 +1505,9 @@
 
 		//Remove the sold serial no from the cache
 		$.each(this.frm.doc.items, function(index, data) {
-			sn = data.serial_no.split('\n')
+			var sn = data.serial_no.split('\n')
 			if(sn.length) {
-				serial_no_list = me.serial_no_data[data.item_code]
+				var serial_no_list = me.serial_no_data[data.item_code]
 				if(serial_no_list) {
 					$.each(sn, function(i, serial_no) {
 						if(in_list(Object.keys(serial_no_list), serial_no)) {
@@ -1531,7 +1530,7 @@
 
 	toggle_input_field: function () {
 		var pointer_events = 'inherit'
-		disabled = this.frm.doc.docstatus == 1 ? true: false;
+		var disabled = this.frm.doc.docstatus == 1 ? true: false;
 		$(this.wrapper).find('input').attr("disabled", disabled);
 		$(this.wrapper).find('select').attr("disabled", disabled);
 		$(this.wrapper).find('input').attr("disabled", disabled);
@@ -1571,7 +1570,7 @@
 		var me = this;
 		this.si_docs = this.get_doc_from_localstorage();
 		$.each(this.si_docs, function (index, data) {
-			for (key in data) {
+			for (var key in data) {
 				if (key == me.name) {
 					me.si_docs[index][key] = me.frm.doc;
 					me.update_localstorage();
@@ -1634,10 +1633,10 @@
 	get_submitted_invoice: function () {
 		var invoices = [];
 		var index = 1;
-		docs = this.get_doc_from_localstorage();
+		var docs = this.get_doc_from_localstorage();
 		if (docs) {
 			invoices = $.map(docs, function (data) {
-				for (key in data) {
+				for (var key in data) {
 					if (data[key].docstatus == 1 && index < 50) {
 						index++
 						data[key].docstatus = 0;
@@ -1656,7 +1655,7 @@
 		this.new_si_docs = [];
 		if (this.removed_items) {
 			$.each(this.si_docs, function (index, data) {
-				for (key in data) {
+				for (var key in data) {
 					if (!in_list(me.removed_items, key)) {
 						me.new_si_docs.push(data);
 					}
@@ -1715,8 +1714,9 @@
 
 	validate_serial_no: function () {
 		var me = this;
-		var item_code = serial_no = '';
-		for (key in this.item_serial_no) {
+		var item_code = ''
+		var serial_no = '';
+		for (var key in this.item_serial_no) {
 			item_code = key;
 			serial_no = me.item_serial_no[key][0];
 		}
@@ -1763,20 +1763,24 @@
 	mandatory_batch_no: function () {
 		var me = this;
 		if (this.items[0].has_batch_no && !this.item_batch_no[this.items[0].item_code]) {
-			frappe.prompt([
-				{'fieldname': 'batch', 'fieldtype': 'Select', 'label': __('Batch No'), 'reqd': 1, 'options':this.batch_no_data[this.items[0].item_code]}
-				],
-				function(values){
-					me.item_batch_no[me.items[0].item_code] = values.batch;
-				},
-				__('Select Batch No'))
-			}
+			frappe.prompt([{
+				'fieldname': 'batch',
+				'fieldtype': 'Select',
+				'label': __('Batch No'),
+				'reqd': 1,
+				'options': this.batch_no_data[this.items[0].item_code]
+			}],
+			function(values){
+				me.item_batch_no[me.items[0].item_code] = values.batch;
+			},
+			__('Select Batch No'))
+		}
 	},
 
 	apply_pricing_rule: function () {
 		var me = this;
 		$.each(this.frm.doc["items"], function (n, item) {
-			pricing_rule = me.get_pricing_rule(item)
+			var pricing_rule = me.get_pricing_rule(item)
 			me.validate_pricing_rule(pricing_rule)
 			if (pricing_rule.length) {
 				item.pricing_rule = pricing_rule[0].name;
@@ -1836,7 +1840,7 @@
 
 	validate_condition: function (data) {
 		//This method check condition based on applicable for
-		condition = this.get_mapper_for_pricing_rule(data)[data.applicable_for]
+		var condition = this.get_mapper_for_pricing_rule(data)[data.applicable_for]
 		if (in_list(condition[1], condition[0])) {
 			return true
 		}
@@ -1869,7 +1873,7 @@
 				}
 			})
 
-			count = 0
+			var count = 0
 			$.each(priority_list, function (index, value) {
 				if (value == priority) {
 					count++
diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.js b/erpnext/accounts/report/accounts_payable/accounts_payable.js
index 3ab522e..0c24feb 100644
--- a/erpnext/accounts/report/accounts_payable/accounts_payable.js
+++ b/erpnext/accounts/report/accounts_payable/accounts_payable.js
@@ -20,13 +20,13 @@
 			"fieldname":"report_date",
 			"label": __("As on Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname":"ageing_based_on",
 			"label": __("Ageing Based On"),
 			"fieldtype": "Select",
-			"options": 'Posting Date' + NEWLINE + 'Due Date',
+			"options": 'Posting Date\nDue Date',
 			"default": "Posting Date"
 		},
 		{
diff --git a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
index 0a1734a..6277cc7 100644
--- a/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
+++ b/erpnext/accounts/report/accounts_payable_summary/accounts_payable_summary.js
@@ -20,13 +20,13 @@
 			"fieldname":"report_date",
 			"label": __("Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname":"ageing_based_on",
 			"label": __("Ageing Based On"),
 			"fieldtype": "Select",
-			"options": 'Posting Date' + NEWLINE + 'Due Date',
+			"options": 'Posting Date\nDue Date',
 			"default": "Posting Date"
 		},
 		{
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
index f98d037..55d8639 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.js
@@ -26,7 +26,7 @@
 			"fieldname":"credit_days_based_on",
 			"label": __("Credit Days Based On"),
 			"fieldtype": "Select",
-			"options": "" + NEWLINE + "Fixed Days" + NEWLINE + "Last Day of the Next Month"
+			"options": "\nFixed Days\nLast Day of the Next Month"
 		},
 		{
 			"fieldtype": "Break",
@@ -35,13 +35,13 @@
 			"fieldname":"report_date",
 			"label": __("As on Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname":"ageing_based_on",
 			"label": __("Ageing Based On"),
 			"fieldtype": "Select",
-			"options": 'Posting Date' + NEWLINE + 'Due Date',
+			"options": 'Posting Date\nDue Date',
 			"default": "Posting Date"
 		},
 		{
diff --git a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
index a18c1a7..ceed5e5 100644
--- a/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
+++ b/erpnext/accounts/report/accounts_receivable_summary/accounts_receivable_summary.js
@@ -26,7 +26,7 @@
 			"fieldname":"credit_days_based_on",
 			"label": __("Credit Days Based On"),
 			"fieldtype": "Select",
-			"options": "" + NEWLINE + "Fixed Days" + NEWLINE + "Last Day of the Next Month"
+			"options": "\nFixed Days\nLast Day of the Next Month"
 		},
 		{
 			"fieldtype": "Break",
@@ -35,13 +35,13 @@
 			"fieldname":"report_date",
 			"label": __("Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname":"ageing_based_on",
 			"label": __("Ageing Based On"),
 			"fieldtype": "Select",
-			"options": 'Posting Date' + NEWLINE + 'Due Date',
+			"options": 'Posting Date\nDue Date',
 			"default": "Posting Date"
 		},
 		{
@@ -70,7 +70,7 @@
 	onload: function(report) {
 		report.page.add_inner_button(__("Accounts Receivable"), function() {
 			var filters = report.get_values();
-			frappe.set_route('query-report', 'Accounts Receivable', {company: filters.company});
+			frappe.set_route('query-report', 'Accounts Receivable', { company: filters.company });
 		});
 	}
 }
diff --git a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
index e4f0384..dbee022 100644
--- a/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
+++ b/erpnext/accounts/report/bank_clearance_summary/bank_clearance_summary.js
@@ -14,7 +14,7 @@
 			"fieldname":"to_date",
 			"label": __("To Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname":"account",
diff --git a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
index e420fb9..0f9fdd7 100644
--- a/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
+++ b/erpnext/accounts/report/bank_reconciliation_statement/bank_reconciliation_statement.js
@@ -25,7 +25,7 @@
 			"fieldname":"report_date",
 			"label": __("Date"),
 			"fieldtype": "Date",
-			"default": get_today(),
+			"default": frappe.datetime.get_today(),
 			"reqd": 1
 		},
 	]
diff --git a/erpnext/accounts/report/budget_variance_report/budget_variance_report.js b/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
index 2b7f1f3..1315b25 100644
--- a/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
+++ b/erpnext/accounts/report/budget_variance_report/budget_variance_report.js
@@ -8,7 +8,7 @@
 			label: __("Fiscal Year"),
 			fieldtype: "Link",
 			options: "Fiscal Year",
-			default: sys_defaults.fiscal_year,
+			default: frappe.sys_defaults.fiscal_year,
 			reqd: 1
 		},
 		{
diff --git a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
index bad826e..8d33524 100644
--- a/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
+++ b/erpnext/accounts/report/item_wise_purchase_register/item_wise_purchase_register.js
@@ -14,7 +14,7 @@
 			"fieldname":"to_date",
 			"label": __("To Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname": "item_code",
diff --git a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
index 142a55f..65cec51 100644
--- a/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
+++ b/erpnext/accounts/report/item_wise_sales_register/item_wise_sales_register.js
@@ -14,7 +14,7 @@
 			"fieldname":"to_date",
 			"label": __("To Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname":"customer",
diff --git a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
index 5c20510..9d4a352 100644
--- a/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
+++ b/erpnext/accounts/report/payment_period_based_on_invoice_date/payment_period_based_on_invoice_date.js
@@ -21,7 +21,7 @@
 			fieldname:"to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
-			default: get_today()
+			default: frappe.datetime.get_today()
 		},
 		{
 			fieldname:"payment_type",
diff --git a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
index cc00b2a..a95cfac 100644
--- a/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
+++ b/erpnext/accounts/report/purchase_invoice_trends/purchase_invoice_trends.js
@@ -3,6 +3,6 @@
 
 frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
 	frappe.query_reports["Purchase Invoice Trends"] = {
-		filters: get_filters()
+		filters: erpnext.get_purchase_trends_filters()
 	}
 });
\ No newline at end of file
diff --git a/erpnext/accounts/report/purchase_register/purchase_register.js b/erpnext/accounts/report/purchase_register/purchase_register.js
index d32f7b6..cd79531 100644
--- a/erpnext/accounts/report/purchase_register/purchase_register.js
+++ b/erpnext/accounts/report/purchase_register/purchase_register.js
@@ -14,7 +14,7 @@
 			"fieldname":"to_date",
 			"label": __("To Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname":"supplier",
diff --git a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
index 0f92223..2d320f5 100644
--- a/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
+++ b/erpnext/accounts/report/sales_invoice_trends/sales_invoice_trends.js
@@ -3,6 +3,6 @@
 
 frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
 	frappe.query_reports["Sales Invoice Trends"] = {
-		filters: get_filters()
+		filters: erpnext.get_sales_trends_filters()
 	}
 });
\ No newline at end of file
diff --git a/erpnext/accounts/report/sales_register/sales_register.js b/erpnext/accounts/report/sales_register/sales_register.js
index d7aac5a..2ac4ae8 100644
--- a/erpnext/accounts/report/sales_register/sales_register.js
+++ b/erpnext/accounts/report/sales_register/sales_register.js
@@ -14,7 +14,7 @@
 			"fieldname":"to_date",
 			"label": __("To Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		},
 		{
 			"fieldname":"customer",
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.js b/erpnext/buying/doctype/purchase_order/purchase_order.js
index cfd3336..c533e6b 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.js
@@ -55,7 +55,7 @@
 
 			if(is_drop_ship && doc.status!="Delivered"){
 				cur_frm.add_custom_button(__('Delivered'),
-					 this.delivered_by_supplier, __("Status"));
+					this.delivered_by_supplier, __("Status"));
 
 				cur_frm.page.set_inner_btn_group_as_primary(__("Status"));
 			}
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order_list.js b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
index f6e7eeb..99f372b 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order_list.js
+++ b/erpnext/buying/doctype/purchase_order/purchase_order_list.js
@@ -1,34 +1,34 @@
 frappe.listview_settings['Purchase Order'] = {
 	add_fields: ["base_grand_total", "company", "currency", "supplier",
 		"supplier_name", "per_received", "per_billed", "status"],
-	get_indicator: function(doc) {
-        if(doc.status==="Closed"){
+	get_indicator: function (doc) {
+		if (doc.status === "Closed") {
 			return [__("Closed"), "green", "status,=,Closed"];
-		} else if (doc.status==="Delivered") {
+		} else if (doc.status === "Delivered") {
 			return [__("Delivered"), "green", "status,=,Closed"];
-		}else if(flt(doc.per_received, 2) < 100 && doc.status!=="Closed") {
-			if(flt(doc.per_billed, 2) < 100) {
+		} else if (flt(doc.per_received, 2) < 100 && doc.status !== "Closed") {
+			if (flt(doc.per_billed, 2) < 100) {
 				return [__("To Receive and Bill"), "orange",
 					"per_received,<,100|per_billed,<,100|status,!=,Closed"];
 			} else {
 				return [__("To Receive"), "orange",
 					"per_received,<,100|per_billed,=,100|status,!=,Closed"];
 			}
-		} else if(flt(doc.per_received, 2) == 100 && flt(doc.per_billed, 2) < 100 && doc.status!=="Closed") {
+		} else if (flt(doc.per_received, 2) == 100 && flt(doc.per_billed, 2) < 100 && doc.status !== "Closed") {
 			return [__("To Bill"), "orange", "per_received,=,100|per_billed,<,100|status,!=,Closed"];
-		} else if(flt(doc.per_received, 2) == 100 && flt(doc.per_billed, 2) == 100 && doc.status!=="Closed") {
+		} else if (flt(doc.per_received, 2) == 100 && flt(doc.per_billed, 2) == 100 && doc.status !== "Closed") {
 			return [__("Completed"), "green", "per_received,=,100|per_billed,=,100|status,!=,Closed"];
 		}
 	},
-	onload: function(listview) {
+	onload: function (listview) {
 		var method = "erpnext.buying.doctype.purchase_order.purchase_order.close_or_unclose_purchase_orders";
 
-		listview.page.add_menu_item(__("Close"), function() {
-			listview.call_for_selected_items(method, {"status": "Closed"});
+		listview.page.add_menu_item(__("Close"), function () {
+			listview.call_for_selected_items(method, { "status": "Closed" });
 		});
 
-		listview.page.add_menu_item(__("Re-open"), function() {
-			listview.call_for_selected_items(method, {"status": "Submitted"});
+		listview.page.add_menu_item(__("Re-open"), function () {
+			listview.call_for_selected_items(method, { "status": "Submitted" });
 		});
 	}
 };
diff --git a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
index 593f667..ce759aa 100644
--- a/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
+++ b/erpnext/buying/doctype/request_for_quotation/request_for_quotation.js
@@ -56,17 +56,17 @@
 		var dialog = new frappe.ui.Dialog({
 			title: __("For Supplier"),
 			fields: [
-				{"fieldtype": "Select", "label": __("Supplier"),
-					"fieldname": "supplier", "options":"Supplier",
-					"options": $.map(doc.suppliers,
-						function(d) { return d.supplier }), "reqd": 1 },
-				{"fieldtype": "Button", "label": __("Make Supplier Quotation"),
-					"fieldname": "make_supplier_quotation", "cssClass": "btn-primary"},
+				{	"fieldtype": "Select", "label": __("Supplier"),
+					"fieldname": "supplier",
+					"options": doc.suppliers.map(d => d.supplier),
+					"reqd": 1 },
+				{	"fieldtype": "Button", "label": __("Make Supplier Quotation"),
+					"fieldname": "make_supplier_quotation", "cssClass": "btn-primary" },
 			]
 		});
 
 		dialog.fields_dict.make_supplier_quotation.$input.click(function() {
-			args = dialog.get_values();
+			var args = dialog.get_values();
 			if(!args) return;
 			dialog.hide();
 			return frappe.call({
@@ -117,7 +117,7 @@
 			+"&supplier_idx="+encodeURIComponent(child.idx)
 			+"&no_letterhead=0"));
 		if(!w) {
-			msgprint(__("Please enable pop-ups")); return;
+			frappe.msgprint(__("Please enable pop-ups")); return;
 		}
 	}
 })
@@ -144,44 +144,44 @@
 						}
 					})
 				}, __("Get items from"));
-				// Get items from open Material Requests based on supplier
-				this.frm.add_custom_button(__('Possible Supplier'), function() {
-					// Create a dialog window for the user to pick their supplier
-					var d = new frappe.ui.Dialog({
-						title: __('Select Possible Supplier'),
-						fields: [
-						{fieldname: 'supplier', fieldtype:'Link', options:'Supplier', label:'Supplier', reqd:1},
-						{fieldname: 'ok_button', fieldtype:'Button', label:'Get Items from Material Requests'},
-						]
-					});
+			// Get items from open Material Requests based on supplier
+			this.frm.add_custom_button(__('Possible Supplier'), function() {
+				// Create a dialog window for the user to pick their supplier
+				var d = new frappe.ui.Dialog({
+					title: __('Select Possible Supplier'),
+					fields: [
+					{fieldname: 'supplier', fieldtype:'Link', options:'Supplier', label:'Supplier', reqd:1},
+					{fieldname: 'ok_button', fieldtype:'Button', label:'Get Items from Material Requests'},
+					]
+				});
 
-					// On the user clicking the ok button
-					d.fields_dict.ok_button.input.onclick = function() {
-						var btn = d.fields_dict.ok_button.input;
-						var v = d.get_values();
-						if(v) {
-							$(btn).set_working();
+				// On the user clicking the ok button
+				d.fields_dict.ok_button.input.onclick = function() {
+					var btn = d.fields_dict.ok_button.input;
+					var v = d.get_values();
+					if(v) {
+						$(btn).set_working();
 
-							erpnext.utils.map_current_doc({
-								method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier",
-								source_name: v.supplier,
-								target: me.frm,
-								setters: {
-									company: me.frm.doc.company
-								},
-								get_query_filters: {
-									material_request_type: "Purchase",
-									docstatus: 1,
-									status: ["!=", "Stopped"],
-									per_ordered: ["<", 99.99]
-								}
-							});
-							$(btn).done_working();
-							d.hide();
-						}
+						erpnext.utils.map_current_doc({
+							method: "erpnext.buying.doctype.request_for_quotation.request_for_quotation.get_item_from_material_requests_based_on_supplier",
+							source_name: v.supplier,
+							target: me.frm,
+							setters: {
+								company: me.frm.doc.company
+							},
+							get_query_filters: {
+								material_request_type: "Purchase",
+								docstatus: 1,
+								status: ["!=", "Stopped"],
+								per_ordered: ["<", 99.99]
+							}
+						});
+						$(btn).done_working();
+						d.hide();
 					}
-					d.show();
-				}, __("Get items from"));
+				}
+				d.show();
+			}, __("Get items from"));
 
 		}
 	},
diff --git a/erpnext/buying/doctype/supplier/supplier.js b/erpnext/buying/doctype/supplier/supplier.js
index 7e5e045..c7df33d 100644
--- a/erpnext/buying/doctype/supplier/supplier.js
+++ b/erpnext/buying/doctype/supplier/supplier.js
@@ -2,10 +2,10 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Supplier", {
-	setup: function(frm) {
-		frm.set_query('default_price_list', { 'buying': 1});
-		frm.set_query('account', 'accounts', function(doc, cdt, cdn) {
-			var d  = locals[cdt][cdn];
+	setup: function (frm) {
+		frm.set_query('default_price_list', { 'buying': 1 });
+		frm.set_query('account', 'accounts', function (doc, cdt, cdn) {
+			var d = locals[cdt][cdn];
 			return {
 				filters: {
 					'account_type': 'Payable',
@@ -15,30 +15,30 @@
 			}
 		});
 	},
-	refresh: function(frm) {
-		frappe.dynamic_link = {doc: frm.doc, fieldname: 'name', doctype: 'Supplier'}
+	refresh: function (frm) {
+		frappe.dynamic_link = { doc: frm.doc, fieldname: 'name', doctype: 'Supplier' }
 
-		if(frappe.defaults.get_default("supp_master_name")!="Naming Series") {
+		if (frappe.defaults.get_default("supp_master_name") != "Naming Series") {
 			frm.toggle_display("naming_series", false);
 		} else {
 			erpnext.toggle_naming_series();
 		}
 
-		if(frm.doc.__islocal){
-	    	hide_field(['address_html','contact_html']);
+		if (frm.doc.__islocal) {
+			hide_field(['address_html', 'contact_html']);
 			frappe.geo.clear_address_and_contact(frm);
 		}
 		else {
-		  	unhide_field(['address_html','contact_html']);
+			unhide_field(['address_html', 'contact_html']);
 			frappe.geo.render_address_and_contact(frm);
 
 			// custom buttons
-			frm.add_custom_button(__('Accounting Ledger'), function() {
+			frm.add_custom_button(__('Accounting Ledger'), function () {
 				frappe.set_route('query-report', 'General Ledger',
-					{party_type:'Supplier', party:frm.doc.name});
+					{ party_type: 'Supplier', party: frm.doc.name });
 			});
-			frm.add_custom_button(__('Accounts Payable'), function() {
-				frappe.set_route('query-report', 'Accounts Payable', {supplier:frm.doc.name});
+			frm.add_custom_button(__('Accounts Payable'), function () {
+				frappe.set_route('query-report', 'Accounts Payable', { supplier: frm.doc.name });
 			});
 
 			// indicators
diff --git a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
index 6bcbdba..3767248 100644
--- a/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
+++ b/erpnext/buying/doctype/supplier_quotation/supplier_quotation.js
@@ -5,7 +5,7 @@
 {% include 'erpnext/public/js/controllers/buying.js' %};
 
 frappe.ui.form.on('Suppier Quotation', {
-	setup: function() {
+	setup: function(frm) {
 		frm.custom_make_buttons = {
 			'Purchase Order': 'Purchase Order'
 		}
diff --git a/erpnext/buying/page/purchase_analytics/purchase_analytics.js b/erpnext/buying/page/purchase_analytics/purchase_analytics.js
index 10d1321..de3d337 100644
--- a/erpnext/buying/page/purchase_analytics/purchase_analytics.js
+++ b/erpnext/buying/page/purchase_analytics/purchase_analytics.js
@@ -10,7 +10,6 @@
 
 	new erpnext.PurchaseAnalytics(wrapper);
 
-
 	frappe.breadcrumbs.add("Buying");
 }
 
@@ -18,7 +17,6 @@
 	init: function(wrapper) {
 		this._super({
 			title: __("Purchase Analytics"),
-			page: wrapper,
 			parent: $(wrapper).find('.layout-main'),
 			page: wrapper.page,
 			doctypes: ["Item", "Item Group", "Supplier", "Supplier Type", "Company", "Fiscal Year",
@@ -193,13 +191,13 @@
 	},
 	prepare_balances: function() {
 		var me = this;
-		var from_date = dateutil.str_to_obj(this.from_date);
-		var to_date = dateutil.str_to_obj(this.to_date);
+		var from_date = frappe.datetime.str_to_obj(this.from_date);
+		var to_date = frappe.datetime.str_to_obj(this.to_date);
 		var is_val = this.value_or_qty == 'Value';
 
 		$.each(this.tl[this.based_on], function(i, tl) {
 			if (me.is_default('company') ? true : tl.company === me.company) {
-				var posting_date = dateutil.str_to_obj(tl.posting_date);
+				var posting_date = frappe.datetime.str_to_obj(tl.posting_date);
 				if (posting_date >= from_date && posting_date <= to_date) {
 					var item = me.item_by_name[tl[me.tree_grid.item_key]] ||
 						me.item_by_name['Not Set'];
diff --git a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
index f7fe90f..83d25d8 100644
--- a/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
+++ b/erpnext/buying/report/purchase_order_trends/purchase_order_trends.js
@@ -3,6 +3,6 @@
 
 frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
 	frappe.query_reports["Purchase Order Trends"] = {
-		filters: get_filters()
+		filters: erpnext.get_purchase_trends_filters()
 	}
 });
\ No newline at end of file
diff --git a/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js b/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js
index 9b0b243..ad6ea7d 100644
--- a/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js
+++ b/erpnext/buying/report/quoted_item_comparison/quoted_item_comparison.js
@@ -3,30 +3,26 @@
 
 frappe.query_reports["Quoted Item Comparison"] = {
 	"filters": [
-	{
-		"fieldname":"supplier_quotation",
-		"label": __("Supplier Quotation"),
-		"fieldtype": "Link",
-		"options": "Supplier Quotation",
-		"default": "",
-		"get_query": function() {
-				return {
-					filters: {"docstatus": ["<",2]}
-				}
+		{
+			"fieldname": "supplier_quotation",
+			"label": __("Supplier Quotation"),
+			"fieldtype": "Link",
+			"options": "Supplier Quotation",
+			"default": "",
+			"get_query": function () {
+				return { filters: { "docstatus": ["<", 2] } }
 			}
-		
-		
-	},{
-		"fieldname":"item",
-		"label": __("Item"),
-		"fieldtype": "Link",
-		"options": "Item",
-		"default": "",
-		"reqd": 1,
-		"get_query": function() {
+		},
+		{
+			"fieldname": "item",
+			"label": __("Item"),
+			"fieldtype": "Link",
+			"options": "Item",
+			"default": "",
+			"reqd": 1,
+			"get_query": function () {
 				var quote = frappe.query_report_filters_by_name.supplier_quotation.get_value();
-				if (quote != "")
-				{
+				if (quote != "") {
 					return {
 						query: "erpnext.buying.doctype.quality_inspection.quality_inspection.item_query",
 						filters: {
@@ -35,79 +31,74 @@
 						}
 					}
 				}
-				else{
-					return{
-						filters: {"disabled":0}
+				else {
+					return {
+						filters: { "disabled": 0 }
 					}
 				}
 			}
-	}
+		}
 	],
-	onload: function(report) {
-		//Create a button for setting the default supplier
-		report.page.add_inner_button(__("Select Default Supplier"), function() {
+	onload: function (report) {
+		// Create a button for setting the default supplier
+		report.page.add_inner_button(__("Select Default Supplier"), function () {
 
 			var reporter = frappe.query_reports["Quoted Item Comparison"];
-			
+
 			//Always make a new one so that the latest values get updated
 			reporter.make_default_supplier_dialog(report);
 			report.dialog.show();
-			setTimeout(function() { report.dialog.input.focus(); }, 1000);
-				
+			setTimeout(function () { report.dialog.input.focus(); }, 1000);
+
 		}, 'Tools');
-		
+
 	},
 	"make_default_supplier_dialog": function (report) {
-		//Get the name of the item to change
+		// Get the name of the item to change
 		var filters = report.get_values();
 		var item_code = filters.item;
-		
-		//Get a list of the suppliers (with a blank as well) for the user to select
+
+		// Get a list of the suppliers (with a blank as well) for the user to select
 		var select_options = "";
-		for (let supplier of report.data)
-		{
-			select_options += supplier.supplier_name+ '\n'
+		for (let supplier of report.data) {
+			select_options += supplier.supplier_name + '\n'
 		}
-		
-		//Create a dialog window for the user to pick their supplier
+
+		// Create a dialog window for the user to pick their supplier
 		var d = new frappe.ui.Dialog({
 			title: __('Select Default Supplier'),
 			fields: [
-			{fieldname: 'supplier', fieldtype:'Select', label:'Supplier', reqd:1,options:select_options},
-			{fieldname: 'ok_button', fieldtype:'Button', label:'Set Default Supplier'},
+				{ fieldname: 'supplier', fieldtype: 'Select', label: 'Supplier', reqd: 1, options: select_options },
+				{ fieldname: 'ok_button', fieldtype: 'Button', label: 'Set Default Supplier' },
 			]
 		});
-		
-		//On the user clicking the ok button
-		d.fields_dict.ok_button.input.onclick = function() {
+
+		// On the user clicking the ok button
+		d.fields_dict.ok_button.input.onclick = function () {
 			var btn = d.fields_dict.ok_button.input;
 			var v = report.dialog.get_values();
-			if(v) {
+			if (v) {
 				$(btn).set_working();
-				
-				//Set the default_supplier field of the appropriate Item to the selected supplier
+
+				// Set the default_supplier field of the appropriate Item to the selected supplier
 				frappe.call({
 					method: "frappe.client.set_value",
 					args: {
-						doctype: "Item", 
+						doctype: "Item",
 						name: item_code,
 						fieldname: "default_supplier",
-						value: v.supplier, 
+						value: v.supplier,
 					},
-					callback: function (r){
+					callback: function (r) {
 						$(btn).done_working();
-						msgprint("Successfully Set Supplier");
+						frappe.msgprint("Successfully Set Supplier");
 						report.dialog.hide();
-
 					}
 				});
 			}
 		}
 		report.dialog = d;
-		
-		
 	}
-	
 }
 
 
diff --git a/erpnext/crm/doctype/lead/lead.js b/erpnext/crm/doctype/lead/lead.js
index 7e22125..36aa186 100644
--- a/erpnext/crm/doctype/lead/lead.js
+++ b/erpnext/crm/doctype/lead/lead.js
@@ -7,34 +7,35 @@
 erpnext.LeadController = frappe.ui.form.Controller.extend({
 	setup: function() {
 		this.frm.fields_dict.customer.get_query = function(doc, cdt, cdn) {
-				return { query: "erpnext.controllers.queries.customer_query" } }
+			return { query: "erpnext.controllers.queries.customer_query" } }
 	},
 
 	onload: function() {
 		if(cur_frm.fields_dict.lead_owner.df.options.match(/^User/)) {
 			cur_frm.fields_dict.lead_owner.get_query = function(doc, cdt, cdn) {
-				return { query:"frappe.core.doctype.user.user.user_query" } }
+				return { query: "frappe.core.doctype.user.user.user_query" }
+			}
 		}
 
 		if(cur_frm.fields_dict.contact_by.df.options.match(/^User/)) {
 			cur_frm.fields_dict.contact_by.get_query = function(doc, cdt, cdn) {
-				return { query:"frappe.core.doctype.user.user.user_query" } }
+				return { query: "frappe.core.doctype.user.user.user_query" } }
 		}
 	},
 
 	refresh: function() {
 		var doc = this.frm.doc;
 		erpnext.toggle_naming_series();
-		frappe.dynamic_link = {doc: this.frm.doc, fieldname: 'name', doctype: 'Lead'}
+		frappe.dynamic_link = {doc: doc, fieldname: 'name', doctype: 'Lead'}
 
-		if(!this.frm.doc.__islocal && this.frm.doc.__onload && !this.frm.doc.__onload.is_customer) {
+		if(!doc.__islocal && doc.__onload && !doc.__onload.is_customer) {
 			this.frm.add_custom_button(__("Customer"), this.create_customer, __("Make"));
 			this.frm.add_custom_button(__("Opportunity"), this.create_opportunity, __("Make"));
 			this.frm.add_custom_button(__("Quotation"), this.make_quotation, __("Make"));
 			cur_frm.page.set_inner_btn_group_as_primary(__("Make"));
 		}
 
-		if(!this.frm.doc.__islocal) {
+		if(!doc.__islocal) {
 			frappe.geo.render_address_and_contact(cur_frm);
 		} else {
 			frappe.geo.clear_address_and_contact(cur_frm);
diff --git a/erpnext/crm/doctype/opportunity/opportunity.js b/erpnext/crm/doctype/opportunity/opportunity.js
index 96d6ac5..ebef4b4 100644
--- a/erpnext/crm/doctype/opportunity/opportunity.js
+++ b/erpnext/crm/doctype/opportunity/opportunity.js
@@ -122,7 +122,8 @@
 
 		$.each([["lead", "lead"],
 			["customer", "customer"],
-			["contact_person", "contact_query"]], function(i, opts) {
+			["contact_person", "contact_query"]],
+			function(i, opts) {
 				me.frm.set_query(opts[0], erpnext.queries[opts[1]]);
 			});
 	},
@@ -153,7 +154,7 @@
 					$.each(r.message, function(k, v) {
 						frappe.model.set_value(cdt, cdn, k, v);
 					});
-				refresh_field('image_view', d.name, 'items');
+					refresh_field('image_view', d.name, 'items');
 				}
 			}
 		})
@@ -180,7 +181,7 @@
 	});
 
 	dialog.fields_dict.update.$input.click(function() {
-		args = dialog.get_values();
+		var args = dialog.get_values();
 		if(!args) return;
 		return cur_frm.call({
 			doc: cur_frm.doc,
@@ -188,7 +189,7 @@
 			args: args.reason,
 			callback: function(r) {
 				if(r.exc) {
-					msgprint(__("There were errors."));
+					frappe.msgprint(__("There were errors."));
 				} else {
 					dialog.hide();
 					cur_frm.refresh();
diff --git a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
index 2b25f1d..0bc77a3 100644
--- a/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
+++ b/erpnext/crm/report/campaign_efficiency/campaign_efficiency.js
@@ -1,19 +1,19 @@
 // Copyright (c) 2016, Frappe Technologies Pvt. Ltd. and contributors
 // For license information, please see license.txt
 frappe.query_reports["Campaign Efficiency"] = {
-		"filters": [
-			{
-				"fieldname": "from_date",
-				"label": __("From Date"),
-				"fieldtype": "Date",
-				"default": frappe.defaults.get_user_default("year_start_date"),
-			},
-			{
-				"fieldname": "to_date",
-				"label": __("To Date"),
-				"fieldtype": "Date",
-				"default": frappe.defaults.get_user_default("year_end_date"),
-			}
-		]
-	};
+	"filters": [
+		{
+			"fieldname": "from_date",
+			"label": __("From Date"),
+			"fieldtype": "Date",
+			"default": frappe.defaults.get_user_default("year_start_date"),
+		},
+		{
+			"fieldname": "to_date",
+			"label": __("To Date"),
+			"fieldtype": "Date",
+			"default": frappe.defaults.get_user_default("year_end_date"),
+		}
+	]
+};
 
diff --git a/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js
index b1e4917..d9c4c8b 100644
--- a/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js
+++ b/erpnext/crm/report/minutes_to_first_response_for_opportunity/minutes_to_first_response_for_opportunity.js
@@ -2,40 +2,40 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Minutes to First Response for Opportunity"] = {
-    "filters": [
-        {
-            "fieldname":"from_date",
-            "label": __("From Date"),
-            "fieldtype": "Date",
+	"filters": [
+		{
+			"fieldname": "from_date",
+			"label": __("From Date"),
+			"fieldtype": "Date",
 			'reqd': 1,
-            "default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
-        },
-        {
-            "fieldname":"to_date",
-            "label": __("To Date"),
-            "fieldtype": "Date",
+			"default": frappe.datetime.add_days(frappe.datetime.nowdate(), -30)
+		},
+		{
+			"fieldname": "to_date",
+			"label": __("To Date"),
+			"fieldtype": "Date",
 			'reqd': 1,
-            "default":frappe.datetime.nowdate()
-        },
-    ],
-	get_chart_data: function(columns, result) {
+			"default": frappe.datetime.nowdate()
+		},
+	],
+	get_chart_data: function (columns, result) {
 		return {
 			data: {
 				x: 'Date',
 				columns: [
-					['Date'].concat($.map(result, function(d) { return d[0]; })),
-					['Mins to first response'].concat($.map(result, function(d) { return d[1]; }))
+					['Date'].concat($.map(result, function (d) { return d[0]; })),
+					['Mins to first response'].concat($.map(result, function (d) { return d[1]; }))
 				]
 				// rows: [['Date', 'Mins to first response']].concat(result)
 			},
-		    axis: {
-		        x: {
-		            type: 'timeseries',
-		            tick: {
-		                format: frappe.ui.py_date_format
-		            }
-		        }
-		    },
+			axis: {
+				x: {
+					type: 'timeseries',
+					tick: {
+						format: frappe.ui.py_date_format
+					}
+				}
+			},
 			chart_type: 'line',
 
 		}
diff --git a/erpnext/hr/doctype/appraisal/appraisal.js b/erpnext/hr/doctype/appraisal/appraisal.js
index 728e5c2..64d6f40 100644
--- a/erpnext/hr/doctype/appraisal/appraisal.js
+++ b/erpnext/hr/doctype/appraisal/appraisal.js
@@ -46,11 +46,11 @@
 	var d = locals[cdt][cdn];
 	if (d.score){
 		if (flt(d.score) > 5) {
-			msgprint(__("Score must be less than or equal to 5"));
+			frappe.msgprint(__("Score must be less than or equal to 5"));
 			d.score = 0;
 			refresh_field('score', d.name, 'goals');
 		}
-		total = flt(d.per_weightage*d.score)/100;
+		var total = flt(d.per_weightage*d.score)/100;
 		d.score_earned = total.toPrecision(2);
 		refresh_field('score_earned', d.name, 'goals');
 	}
diff --git a/erpnext/hr/doctype/attendance/attendance.js b/erpnext/hr/doctype/attendance/attendance.js
index 7f2b18f..c3c3cb8 100644
--- a/erpnext/hr/doctype/attendance/attendance.js
+++ b/erpnext/hr/doctype/attendance/attendance.js
@@ -5,7 +5,7 @@
 cur_frm.add_fetch('employee', 'employee_name', 'employee_name');
 
 cur_frm.cscript.onload = function(doc, cdt, cdn) {
-	if(doc.__islocal) cur_frm.set_value("attendance_date", get_today());
+	if(doc.__islocal) cur_frm.set_value("attendance_date", frappe.datetime.get_today());
 }
 
 cur_frm.fields_dict.employee.get_query = function(doc,cdt,cdn) {
diff --git a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js
index c0c0ef0..376d0c0 100644
--- a/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js
+++ b/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js
@@ -5,7 +5,7 @@
 	
 	onload: function(frm) {
 		frm.doc.department = frm.doc.branch = frm.doc.company = "All";
-		frm.set_value("date", get_today());
+		frm.set_value("date", frappe.datetime.get_today());
 		erpnext.employee_attendance_tool.load_employees(frm);
 	},
 
diff --git a/erpnext/hr/doctype/employee_loan/employee_loan.js b/erpnext/hr/doctype/employee_loan/employee_loan.js
index 71b6356..9720bcb 100644
--- a/erpnext/hr/doctype/employee_loan/employee_loan.js
+++ b/erpnext/hr/doctype/employee_loan/employee_loan.js
@@ -2,8 +2,8 @@
 // For license information, please see license.txt
 
 frappe.ui.form.on('Employee Loan', {
-	onload: function(frm) {
-		frm.set_query("employee_loan_application", function() {
+	onload: function (frm) {
+		frm.set_query("employee_loan_application", function () {
 			return {
 				"filters": {
 					"employee": frm.doc.employee,
@@ -12,19 +12,19 @@
 				}
 			};
 		});
-		
-		frm.set_query("interest_income_account", function() {
+
+		frm.set_query("interest_income_account", function () {
 			return {
 				"filters": {
-						"company": frm.doc.company,
-						"root_type": "Income",
-						"is_group": 0
+					"company": frm.doc.company,
+					"root_type": "Income",
+					"is_group": 0
 				}
 			};
 		});
 
-		$.each(["payment_account", "employee_loan_account"], function(i, field) {
-			frm.set_query(field, function() {
+		$.each(["payment_account", "employee_loan_account"], function (i, field) {
+			frm.set_query(field, function () {
 				return {
 					"filters": {
 						"company": frm.doc.company,
@@ -36,16 +36,16 @@
 		})
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		if (frm.doc.docstatus == 1 && (frm.doc.status == "Sanctioned" || frm.doc.status == "Partially Disbursed")) {
-			frm.add_custom_button(__('Make Disbursement Entry'), function() {
+			frm.add_custom_button(__('Make Disbursement Entry'), function () {
 				frm.trigger("make_jv");
 			})
 		}
 		frm.trigger("toggle_fields");
 	},
 
-	make_jv: function(frm) {
+	make_jv: function (frm) {
 		frappe.call({
 			args: {
 				"employee_loan": frm.doc.name,
@@ -56,36 +56,36 @@
 				"payment_account": frm.doc.payment_account
 			},
 			method: "erpnext.hr.doctype.employee_loan.employee_loan.make_jv_entry",
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message)
 					var doc = frappe.model.sync(r.message)[0];
-					frappe.set_route("Form", doc.doctype, doc.name);
+				frappe.set_route("Form", doc.doctype, doc.name);
 			}
 		})
 	},
-	mode_of_payment: function(frm) {
+	mode_of_payment: function (frm) {
 		frappe.call({
 			method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account",
 			args: {
 				"mode_of_payment": frm.doc.mode_of_payment,
 				"company": frm.doc.company
 			},
-			callback: function(r, rt) {
-				if(r.message) {
+			callback: function (r, rt) {
+				if (r.message) {
 					frm.set_value("payment_account", r.message.account);
 				}
 			}
 		});
 	},
 
-	employee_loan_application: function(frm) {
+	employee_loan_application: function (frm) {
 		return frappe.call({
 			method: "erpnext.hr.doctype.employee_loan.employee_loan.get_employee_loan_application",
 			args: {
 				"employee_loan_application": frm.doc.employee_loan_application
 			},
-			callback: function(r){
-				if(!r.exc && r.message) {
+			callback: function (r) {
+				if (!r.exc && r.message) {
 					frm.set_value("loan_type", r.message.loan_type);
 					frm.set_value("loan_amount", r.message.loan_amount);
 					frm.set_value("repayment_method", r.message.repayment_method);
@@ -97,12 +97,12 @@
 		})
 	},
 
-	repayment_method: function(frm) {
+	repayment_method: function (frm) {
 		frm.trigger("toggle_fields")
 	},
 
-	toggle_fields: function(frm) {
-		frm.toggle_enable("monthly_repayment_amount", frm.doc.repayment_method=="Repay Fixed Amount per Period")
-		frm.toggle_enable("repayment_periods", frm.doc.repayment_method=="Repay Over Number of Periods")
+	toggle_fields: function (frm) {
+		frm.toggle_enable("monthly_repayment_amount", frm.doc.repayment_method == "Repay Fixed Amount per Period")
+		frm.toggle_enable("repayment_periods", frm.doc.repayment_method == "Repay Over Number of Periods")
 	}
 });
diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js
index 95877cf..4ce91c4 100644
--- a/erpnext/hr/doctype/expense_claim/expense_claim.js
+++ b/erpnext/hr/doctype/expense_claim/expense_claim.js
@@ -52,7 +52,7 @@
 		cur_frm.set_value("approval_status", "Draft")
 
 	if (doc.__islocal) {
-		cur_frm.set_value("posting_date", dateutil.get_today());
+		cur_frm.set_value("posting_date", frappe.datetime.get_today());
 		if(doc.amended_from)
 			cur_frm.set_value("approval_status", "Draft");
 		cur_frm.cscript.clear_sanctioned(doc);
@@ -81,15 +81,15 @@
 	refresh_many(['sanctioned_amount', 'total_sanctioned_amount']);
 }
 
-cur_frm.cscript.refresh = function(doc,cdt,cdn){
+cur_frm.cscript.refresh = function(doc,cdt,cdn) {
 	cur_frm.cscript.set_help(doc);
 
 	if(!doc.__islocal) {
 		cur_frm.toggle_enable("exp_approver", doc.approval_status=="Draft");
-		cur_frm.toggle_enable("approval_status", (doc.exp_approver==user && doc.docstatus==0));
+		cur_frm.toggle_enable("approval_status", (doc.exp_approver==frappe.session.user && doc.docstatus==0));
 
-		if (doc.docstatus==0 && doc.exp_approver==user && doc.approval_status=="Approved")
-			 cur_frm.savesubmit();
+		if (doc.docstatus==0 && doc.exp_approver==frappe.session.user && doc.approval_status=="Approved")
+			cur_frm.savesubmit();
 
 		if (doc.docstatus===1 && doc.approval_status=="Approved") {
 			if (cint(doc.total_amount_reimbursed) < cint(doc.total_sanctioned_amount) && frappe.model.can_create("Journal Entry")) {
@@ -97,6 +97,8 @@
 				cur_frm.page.set_inner_btn_group_as_primary(__("Make"));
 			}
 
+			/* eslint-disable */
+			// no idea how `me` works here 
 			if (cint(doc.total_amount_reimbursed) > 0 && frappe.model.can_read("Journal Entry")) {
 				cur_frm.add_custom_button(__('Bank Entries'), function() {
 					frappe.route_options = {
@@ -107,17 +109,18 @@
 					frappe.set_route("List", "Journal Entry");
 				}, __("View"));
 			}
+			/* eslint-enable */
 		}
 	}
 }
 
 cur_frm.cscript.set_help = function(doc) {
 	cur_frm.set_intro("");
-	if(doc.__islocal && !in_list(roles, "HR User")) {
+	if(doc.__islocal && !in_list(frappe.user_roles, "HR User")) {
 		cur_frm.set_intro(__("Fill the form and save it"))
 	} else {
 		if(doc.docstatus==0 && doc.approval_status=="Draft") {
-			if(user==doc.exp_approver) {
+			if(frappe.session.user==doc.exp_approver) {
 				cur_frm.set_intro(__("You are the Expense Approver for this record. Please Update the 'Status' and Save"));
 			} else {
 				cur_frm.set_intro(__("Expense Claim is pending approval. Only the Expense Approver can update status."));
diff --git a/erpnext/hr/doctype/leave_allocation/leave_allocation.js b/erpnext/hr/doctype/leave_allocation/leave_allocation.js
index b7e1f45..4b4bfaf 100755
--- a/erpnext/hr/doctype/leave_allocation/leave_allocation.js
+++ b/erpnext/hr/doctype/leave_allocation/leave_allocation.js
@@ -5,7 +5,7 @@
 
 frappe.ui.form.on("Leave Allocation", {
 	onload: function(frm) {
-		if(!frm.doc.from_date) frm.set_value("from_date", get_today());
+		if(!frm.doc.from_date) frm.set_value("from_date", frappe.datetime.get_today());
 
 		frm.set_query("employee", function() {
 			return {
diff --git a/erpnext/hr/doctype/leave_application/leave_application.js b/erpnext/hr/doctype/leave_application/leave_application.js
index 3bf41bb..2eb155d 100755
--- a/erpnext/hr/doctype/leave_application/leave_application.js
+++ b/erpnext/hr/doctype/leave_application/leave_application.js
@@ -7,7 +7,7 @@
 frappe.ui.form.on("Leave Application", {
 	onload: function(frm) {
 		if (!frm.doc.posting_date) {
-			frm.set_value("posting_date", get_today());
+			frm.set_value("posting_date", frappe.datetime.get_today());
 		}
 
 		frm.set_query("leave_approver", function() {
@@ -76,9 +76,9 @@
 		frm.set_value('half_day_date', '');
 		var half_day_datepicker = frm.fields_dict.half_day_date.datepicker;
 		half_day_datepicker.update({
-				minDate: frappe.datetime.str_to_obj(frm.doc.from_date),
-				maxDate: frappe.datetime.str_to_obj(frm.doc.to_date)
-			})
+			minDate: frappe.datetime.str_to_obj(frm.doc.from_date),
+			maxDate: frappe.datetime.str_to_obj(frm.doc.to_date)
+		})
 	},
 
 	get_leave_balance: function(frm) {
diff --git a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js
index 3720f2f..0eb6414 100644
--- a/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js
+++ b/erpnext/hr/doctype/leave_control_panel/leave_control_panel.js
@@ -1,19 +1,19 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-cur_frm.cscript.onload = function(doc, dt, dn){
-	if(!doc.posting_date)
-		set_multiple(dt, dn, {posting_date: get_today()});
-	if(!doc.leave_transaction_type)
-		set_multiple(dt, dn, {leave_transaction_type: 'Allocation'});
+cur_frm.cscript.onload = function (doc, dt, dn) {
+	if (!doc.posting_date)
+		set_multiple(dt, dn, { posting_date: frappe.datetime.get_today() });
+	if (!doc.leave_transaction_type)
+		set_multiple(dt, dn, { leave_transaction_type: 'Allocation' });
 }
 
-cur_frm.cscript.to_date = function(doc, cdt, cdn) {
-	return $c('runserverobj', args={'method':'to_date_validation','docs':doc},
-		function(r, rt) {
+cur_frm.cscript.to_date = function (doc, cdt, cdn) {
+	return $c('runserverobj', { 'method': 'to_date_validation', 'docs': doc },
+		function (r, rt) {
 			var doc = locals[cdt][cdn];
 			if (r.message) {
-				msgprint(__("To date cannot be before from date"));
+				frappe.msgprint(__("To date cannot be before from date"));
 				doc.to_date = '';
 				refresh_field('to_date');
 			}
@@ -21,11 +21,11 @@
 	);
 }
 
-cur_frm.cscript.allocation_type = function (doc, cdt, cdn){
+cur_frm.cscript.allocation_type = function (doc, cdt, cdn) {
 	doc.no_of_days = '';
 	refresh_field('no_of_days');
 }
 
-frappe.ui.form.on("Leave Control Panel", "refresh", function(frm) {
+frappe.ui.form.on("Leave Control Panel", "refresh", function (frm) {
 	frm.disable_save();
 });
\ No newline at end of file
diff --git a/erpnext/hr/doctype/offer_letter/offer_letter.js b/erpnext/hr/doctype/offer_letter/offer_letter.js
index 125a425..c0d397b 100755
--- a/erpnext/hr/doctype/offer_letter/offer_letter.js
+++ b/erpnext/hr/doctype/offer_letter/offer_letter.js
@@ -4,18 +4,18 @@
 frappe.provide("erpnext.offer_letter");
 
 frappe.ui.form.on("Offer Letter", {
-	select_terms: function(frm) {
-		erpnext.utils.get_terms(frm.doc.select_terms, frm.doc, function(r) {
-			if(!r.exc) {
-				me.frm.set_value("terms", r.message);
+	select_terms: function (frm) {
+		erpnext.utils.get_terms(frm.doc.select_terms, frm.doc, function (r) {
+			if (!r.exc) {
+				frm.set_value("terms", r.message);
 			}
 		});
 	},
 
-	refresh:function(frm){
-		if((!frm.doc.__islocal) && (frm.doc.status=='Accepted') && (frm.doc.docstatus===1)){
+	refresh: function (frm) {
+		if ((!frm.doc.__islocal) && (frm.doc.status == 'Accepted') && (frm.doc.docstatus === 1)) {
 			frm.add_custom_button(__('Make Employee'),
-				function() {
+				function () {
 					erpnext.offer_letter.make_employee(frm)
 				}
 			);
@@ -24,7 +24,7 @@
 
 });
 
-erpnext.offer_letter.make_employee = function(frm) {
+erpnext.offer_letter.make_employee = function (frm) {
 	frappe.model.open_mapped_doc({
 		method: "erpnext.hr.doctype.offer_letter.offer_letter.make_employee",
 		frm: frm
diff --git a/erpnext/hr/doctype/process_payroll/process_payroll.js b/erpnext/hr/doctype/process_payroll/process_payroll.js
index e1bea62..0ec7f70 100644
--- a/erpnext/hr/doctype/process_payroll/process_payroll.js
+++ b/erpnext/hr/doctype/process_payroll/process_payroll.js
@@ -2,7 +2,7 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.ui.form.on("Process Payroll", {
-	onload: function(frm) {
+	onload: function (frm) {
 		frm.doc.posting_date = frappe.datetime.nowdate();
 		frm.doc.start_date = '';
 		frm.doc.end_date = '';
@@ -10,8 +10,8 @@
 		frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet);
 	},
 
-	setup: function(frm) {
-		frm.set_query("payment_account", function() {
+	setup: function (frm) {
+		frm.set_query("payment_account", function () {
 			var account_types = ["Bank", "Cash"];
 			return {
 				filters: {
@@ -21,57 +21,57 @@
 				}
 			}
 		}),
-		frm.set_query("cost_center", function() {
-			return {
-				filters: {
-					"is_group": 0,
-					company: frm.doc.company
+			frm.set_query("cost_center", function () {
+				return {
+					filters: {
+						"is_group": 0,
+						company: frm.doc.company
+					}
 				}
-			}
-		}),
-		frm.set_query("project", function() {
-			return {
-				filters: {
-					company: frm.doc.company
+			}),
+			frm.set_query("project", function () {
+				return {
+					filters: {
+						company: frm.doc.company
+					}
 				}
-			}
-		})
+			})
 	},
 
-	refresh: function(frm) {
+	refresh: function (frm) {
 		frm.disable_save();
 	},
 
-	payroll_frequency: function(frm) {
+	payroll_frequency: function (frm) {
 		frm.trigger("set_start_end_dates");
 	},
 
-	start_date: function(frm) {
+	start_date: function (frm) {
 		frm.trigger("set_start_end_dates");
 	},
 
-	end_date: function(frm) {
+	end_date: function (frm) {
 		frm.trigger("set_start_end_dates");
 	},
 
-	salary_slip_based_on_timesheet: function(frm) {
+	salary_slip_based_on_timesheet: function (frm) {
 		frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet);
 	},
 
-	payment_account: function(frm) {
-		frm.toggle_display(['make_bank_entry'], (frm.doc.payment_account!="" && frm.doc.payment_account!="undefined"));
+	payment_account: function (frm) {
+		frm.toggle_display(['make_bank_entry'], (frm.doc.payment_account != "" && frm.doc.payment_account != "undefined"));
 	},
 
-	set_start_end_dates: function(frm) {
-		if (!frm.doc.salary_slip_based_on_timesheet){
+	set_start_end_dates: function (frm) {
+		if (!frm.doc.salary_slip_based_on_timesheet) {
 			frappe.call({
-				method:'erpnext.hr.doctype.process_payroll.process_payroll.get_start_end_dates',
-				args:{
+				method: 'erpnext.hr.doctype.process_payroll.process_payroll.get_start_end_dates',
+				args: {
 					payroll_frequency: frm.doc.payroll_frequency,
 					start_date: frm.doc.start_date || frm.doc.posting_date
 				},
-				callback: function(r){
-					if (r.message){
+				callback: function (r) {
+					if (r.message) {
 						frm.set_value('start_date', r.message.start_date);
 						frm.set_value('end_date', r.message.end_date);
 					}
@@ -81,60 +81,60 @@
 	},
 })
 
-cur_frm.cscript.display_activity_log = function(msg) {
-	if(!cur_frm.ss_html)
-		cur_frm.ss_html = $a(cur_frm.fields_dict['activity_log'].wrapper,'div');
-	if(msg) {
+cur_frm.cscript.display_activity_log = function (msg) {
+	if (!cur_frm.ss_html)
+		cur_frm.ss_html = $a(cur_frm.fields_dict['activity_log'].wrapper, 'div');
+	if (msg) {
 		cur_frm.ss_html.innerHTML =
-			'<div class="padding"><h4>'+__("Activity Log:")+'</h4>'+msg+'</div>';
+			'<div class="padding"><h4>' + __("Activity Log:") + '</h4>' + msg + '</div>';
 	} else {
 		cur_frm.ss_html.innerHTML = "";
 	}
 }
 
-//Create salary slip
-//-----------------------
-cur_frm.cscript.create_salary_slip = function(doc, cdt, cdn) {
+// Create salary slip
+// -----------------------
+cur_frm.cscript.create_salary_slip = function (doc, cdt, cdn) {
 	cur_frm.cscript.display_activity_log("");
-	var callback = function(r, rt){
+	var callback = function (r, rt) {
 		if (r.message)
 			cur_frm.cscript.display_activity_log(r.message);
 	}
-	return $c('runserverobj', args={'method':'create_salary_slips','docs':doc},callback);
+	return $c('runserverobj', { 'method': 'create_salary_slips', 'docs': doc }, callback);
 }
 
-cur_frm.cscript.submit_salary_slip = function(doc, cdt, cdn) {
+cur_frm.cscript.submit_salary_slip = function (doc, cdt, cdn) {
 	cur_frm.cscript.display_activity_log("");
 
-	frappe.confirm(__("Do you really want to Submit all Salary Slip from {0} to {1}", [doc.start_date, doc.end_date]), function() {
+	frappe.confirm(__("Do you really want to Submit all Salary Slip from {0} to {1}", [doc.start_date, doc.end_date]), function () {
 		// clear all in locals
-		if(locals["Salary Slip"]) {
-			$.each(locals["Salary Slip"], function(name, d) {
+		if (locals["Salary Slip"]) {
+			$.each(locals["Salary Slip"], function (name, d) {
 				frappe.model.remove_from_locals("Salary Slip", name);
 			});
 		}
 
-		var callback = function(r, rt){
+		var callback = function (r, rt) {
 			if (r.message)
 				cur_frm.cscript.display_activity_log(r.message);
 		}
 
-		return $c('runserverobj', args={'method':'submit_salary_slips','docs':doc},callback);
+		return $c('runserverobj', { 'method': 'submit_salary_slips', 'docs': doc }, callback);
 	});
 }
 
-cur_frm.cscript.make_bank_entry = function(doc, cdt, cdn){
-    if(doc.company && doc.start_date && doc.end_date){
+cur_frm.cscript.make_bank_entry = function (doc, cdt, cdn) {
+	if (doc.company && doc.start_date && doc.end_date) {
 		return frappe.call({
 			doc: cur_frm.doc,
 			method: "make_payment_entry",
-			callback: function(r) {
+			callback: function (r) {
 				if (r.message)
 					var doc = frappe.model.sync(r.message)[0];
-					frappe.set_route("Form", doc.doctype, doc.name);
+				frappe.set_route("Form", doc.doctype, doc.name);
 			}
 		});
-    } else {
-  	  msgprint(__("Company, From Date and To Date is mandatory"));
-    }
+	} else {
+		frappe.msgprint(__("Company, From Date and To Date is mandatory"));
+	}
 }
\ No newline at end of file
diff --git a/erpnext/hr/doctype/salary_slip/salary_slip.js b/erpnext/hr/doctype/salary_slip/salary_slip.js
index 09c5337..a96347a 100644
--- a/erpnext/hr/doctype/salary_slip/salary_slip.js
+++ b/erpnext/hr/doctype/salary_slip/salary_slip.js
@@ -39,7 +39,7 @@
 	refresh: function(frm) {
 		frm.trigger("toggle_fields")
 		frm.trigger("toggle_reqd_fields")
-		salary_detail_fields = ['formula', 'abbr', 'statistical_component']
+		var salary_detail_fields = ['formula', 'abbr', 'statistical_component']
 		cur_frm.fields_dict['earnings'].grid.set_column_disp(salary_detail_fields,false);
 		cur_frm.fields_dict['deductions'].grid.set_column_disp(salary_detail_fields,false);
 	},	
diff --git a/erpnext/hr/doctype/salary_structure/salary_structure.js b/erpnext/hr/doctype/salary_structure/salary_structure.js
index 0bc67a7..68c5f25 100755
--- a/erpnext/hr/doctype/salary_structure/salary_structure.js
+++ b/erpnext/hr/doctype/salary_structure/salary_structure.js
@@ -7,8 +7,8 @@
 
 
 cur_frm.cscript.onload = function(doc, dt, dn){
-	e_tbl = doc.earnings || [];
-	d_tbl = doc.deductions || [];
+	var e_tbl = doc.earnings || [];
+	var d_tbl = doc.deductions || [];
 	if (e_tbl.length == 0 && d_tbl.length == 0)
 		return function(r, rt) { refresh_many(['earnings', 'deductions']);};
 }
@@ -16,7 +16,7 @@
 frappe.ui.form.on('Salary Structure', {
 	onload: function(frm) {
 		frm.toggle_reqd(['payroll_frequency'], !frm.doc.salary_slip_based_on_timesheet),
-		
+
 		frm.set_query("salary_component", "earnings", function() {
 			return {
 				filters: {
@@ -40,19 +40,19 @@
 			}
 		});
 	},
-	
+
 	refresh: function(frm) {
 		frm.trigger("toggle_fields");
 		frm.fields_dict['earnings'].grid.set_column_disp("default_amount", false);
 		frm.fields_dict['deductions'].grid.set_column_disp("default_amount", false);
-		
+
 		frm.add_custom_button(__("Preview Salary Slip"),
 			function() { frm.trigger('preview_salary_slip'); }, "fa fa-sitemap", "btn-default");
 
 		frm.add_custom_button(__("Add Employees"),function () {
 			frm.trigger('add_employees')
 		})
-		
+
 	},
 
 	add_employees:function (frm) {
@@ -108,21 +108,24 @@
 	salary_slip_based_on_timesheet: function(frm) {
 		frm.trigger("toggle_fields")
 	},
-	
+
 	preview_salary_slip: function(frm) {
 		var d = new frappe.ui.Dialog({
 			title: __("Preview Salary Slip"),
 			fields: [
-				{"fieldname":"employee", "fieldtype":"Select", "label":__("Employee"),
-				options: $.map(frm.doc.employees, function(d) { return d.employee }), reqd: 1, label:"Employee"},
-				{fieldname:"fetch", "label":__("Show Salary Slip"), "fieldtype":"Button"}
+				{	"fieldname":"employee", "fieldtype":"Select", "label":__("Employee"),
+					options: $.map(frm.doc.employees, function(d) { return d.employee }), reqd: 1 },
+				{	fieldname:"fetch", "label":__("Show Salary Slip"), "fieldtype":"Button"}
 			]
 		});
 		d.get_input("fetch").on("click", function() {
 			var values = d.get_values();
 			if(!values) return;
-			frm.doc.salary_slip_based_on_timesheet?print_format="Salary Slip based on Timesheet":print_format="Salary Slip Standard";
-				
+			var print_format;
+			frm.doc.salary_slip_based_on_timesheet ?
+				print_format="Salary Slip based on Timesheet" :
+				print_format="Salary Slip Standard";
+
 			frappe.call({
 				method: "erpnext.hr.doctype.salary_structure.salary_structure.make_salary_slip",
 				args: {
@@ -140,7 +143,7 @@
 		});
 		d.show();
 	},
-	
+
 	toggle_fields: function(frm) {
 		frm.toggle_display(['salary_component', 'hour_rate'], frm.doc.salary_slip_based_on_timesheet);
 		frm.toggle_reqd(['salary_component', 'hour_rate'], frm.doc.salary_slip_based_on_timesheet);
@@ -184,11 +187,11 @@
 	amount: function(frm) {
 		calculate_totals(frm.doc);
 	},
-	
+
 	earnings_remove: function(frm) {
 		calculate_totals(frm.doc);
-	}, 
-	
+	},
+
 	deductions_remove: function(frm) {
 		calculate_totals(frm.doc);
 	}
diff --git a/erpnext/hr/doctype/upload_attendance/upload_attendance.js b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
index c49720c..f639898 100644
--- a/erpnext/hr/doctype/upload_attendance/upload_attendance.js
+++ b/erpnext/hr/doctype/upload_attendance/upload_attendance.js
@@ -7,8 +7,8 @@
 
 erpnext.hr.AttendanceControlPanel = frappe.ui.form.Controller.extend({
 	onload: function() {
-		this.frm.set_value("att_fr_date", get_today());
-		this.frm.set_value("att_to_date", get_today());
+		this.frm.set_value("att_fr_date", frappe.datetime.get_today());
+		this.frm.set_value("att_to_date", frappe.datetime.get_today());
 	},
 
 	refresh: function() {
@@ -18,7 +18,7 @@
 
 	get_template:function() {
 		if(!this.frm.doc.att_fr_date || !this.frm.doc.att_to_date) {
-			msgprint(__("Attendance From Date and Attendance To Date is mandatory"));
+			frappe.msgprint(__("Attendance From Date and Attendance To Date is mandatory"));
 			return;
 		}
 		window.location.href = repl(frappe.request.url +
diff --git a/erpnext/hr/doctype/vehicle_log/vehicle_log.js b/erpnext/hr/doctype/vehicle_log/vehicle_log.js
index 818a595..e8c6b7e 100644
--- a/erpnext/hr/doctype/vehicle_log/vehicle_log.js
+++ b/erpnext/hr/doctype/vehicle_log/vehicle_log.js
@@ -3,7 +3,7 @@
 
 frappe.ui.form.on("Vehicle Log", {
 	refresh: function(frm,cdt,cdn) {
-		vehicle_log=frappe.model.get_doc(cdt,cdn);
+		var vehicle_log=frappe.model.get_doc(cdt,cdn);
 		if (vehicle_log.license_plate) {
 			frappe.call({
 				method: "erpnext.hr.doctype.vehicle_log.vehicle_log.get_make_model",
@@ -26,16 +26,16 @@
 	},
 
 	expense_claim: function(frm){
-			frappe.call({
-				method: "erpnext.hr.doctype.vehicle_log.vehicle_log.make_expense_claim",
-				args:{
-					docname: frm.doc.name
-				},
-				callback: function(r){
-					var doc = frappe.model.sync(r.message);
-					frappe.set_route('Form', 'Expense Claim', r.message.name);
-					}
-			})
+		frappe.call({
+			method: "erpnext.hr.doctype.vehicle_log.vehicle_log.make_expense_claim",
+			args:{
+				docname: frm.doc.name
+			},
+			callback: function(r){
+				var doc = frappe.model.sync(r.message);
+				frappe.set_route('Form', 'Expense Claim', r.message.name);
+			}
+		});
 	}
 });
 
diff --git a/erpnext/hr/page/team_updates/team_updates.js b/erpnext/hr/page/team_updates/team_updates.js
index e701b5f..d6dd1f4 100644
--- a/erpnext/hr/page/team_updates/team_updates.js
+++ b/erpnext/hr/page/team_updates/team_updates.js
@@ -54,17 +54,18 @@
 		data.avatar = frappe.avatar(data.sender);
 		data.when = comment_when(data.creation);
 
-		var date = dateutil.str_to_obj(data.creation);
+		var date = frappe.datetime.str_to_obj(data.creation);
 		var last = me.last_feed_date;
 
-		if((last && dateutil.obj_to_str(last) != dateutil.obj_to_str(date)) || (!last)) {
-			var diff = dateutil.get_day_diff(dateutil.get_today(), dateutil.obj_to_str(date));
+		if((last && frappe.datetime.obj_to_str(last) != frappe.datetime.obj_to_str(date)) || (!last)) {
+			var diff = frappe.datetime.get_day_diff(frappe.datetime.get_today(), frappe.datetime.obj_to_str(date));
+			var pdate;
 			if(diff < 1) {
 				pdate = 'Today';
 			} else if(diff < 2) {
 				pdate = 'Yesterday';
 			} else {
-				pdate = dateutil.global_date_format(date);
+				pdate = frappe.datetime.global_date_format(date);
 			}
 			data.date_sep = pdate;
 			data.date_class = pdate=='Today' ? "date-indicator blue" : "date-indicator";
diff --git a/erpnext/hr/report/salary_register/salary_register.js b/erpnext/hr/report/salary_register/salary_register.js
index 8b0faf5..794dcb5 100644
--- a/erpnext/hr/report/salary_register/salary_register.js
+++ b/erpnext/hr/report/salary_register/salary_register.js
@@ -7,7 +7,7 @@
 			"fieldname":"date_range",
 			"label": __("Date Range"),
 			"fieldtype": "DateRange",
-			"default": [frappe.datetime.add_months(get_today(),-1), frappe.datetime.get_today()],
+			"default": [frappe.datetime.add_months(frappe.datetime.get_today(),-1), frappe.datetime.get_today()],
 			"reqd": 1
 		},
 		{
diff --git a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
index 84c66b5..de7cd8c 100644
--- a/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
+++ b/erpnext/maintenance/doctype/maintenance_schedule/maintenance_schedule.js
@@ -71,7 +71,7 @@
 
 		if (item.start_date && item.end_date && item.periodicity) {
 			if(item.start_date > item.end_date) {
-				msgprint(__("Row {0}:Start Date must be before End Date", [item.idx]));
+				frappe.msgprint(__("Row {0}:Start Date must be before End Date", [item.idx]));
 				return;
 			}
 
@@ -97,7 +97,7 @@
 	if(!doc.status) set_multiple(dt,dn,{status:'Draft'});
 
 	if(doc.__islocal){
-		set_multiple(dt,dn,{transaction_date:get_today()});
+		set_multiple(dt,dn,{transaction_date: frappe.datetime.get_today()});
 	}
 
 	// set add fetch for item_code's item_name and description
@@ -108,12 +108,12 @@
 
 cur_frm.cscript.generate_schedule = function(doc, cdt, cdn) {
 	if (!doc.__islocal) {
-		return $c('runserverobj', args={'method':'generate_schedule', 'docs':doc},
+		return $c('runserverobj', {'method':'generate_schedule', 'docs':doc},
 			function(r, rt) {
 				refresh_field('schedules');
 			});
 	} else {
-		msgprint(__("Please save the document before generating maintenance schedule"));
+		frappe.msgprint(__("Please save the document before generating maintenance schedule"));
 	}
 }
 
diff --git a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
index e1f501b..a4f3abc 100644
--- a/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
+++ b/erpnext/maintenance/doctype/maintenance_visit/maintenance_visit.js
@@ -2,8 +2,6 @@
 // License: GNU General Public License v3. See license.txt
 
 frappe.provide("erpnext.maintenance");
-me.frm.set_query('contact_person', erpnext.queries.contact_query);
-
 
 frappe.ui.form.on('Maintenance Visit', {
 	setup: function(frm) {
@@ -85,7 +83,7 @@
 
 cur_frm.cscript.onload = function(doc, dt, dn) {
 	if(!doc.status) set_multiple(dt,dn,{status:'Draft'});
-	if(doc.__islocal) set_multiple(dt,dn,{mntc_date:get_today()});
+	if(doc.__islocal) set_multiple(dt,dn,{mntc_date: frappe.datetime.get_today()});
 
 	// set add fetch for item_code's item_name and description
 	cur_frm.add_fetch('item_code', 'item_name', 'item_name');
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 576e46d..03e5390 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -63,7 +63,7 @@
 	
 	item_code: function(doc, cdt, cdn){
 		var scrap_items = false;
-		child = locals[cdt][cdn];
+		var child = locals[cdt][cdn];
 		if(child.doctype == 'BOM Scrap Item') {
 			scrap_items = true;
 		}
@@ -132,12 +132,12 @@
 	var d = locals[cdt][cdn];
 	var scrap_items = false;
 
-	if(child.doctype == 'BOM Scrap Item') {
+	if(cdt == 'BOM Scrap Item') {
 		scrap_items = true;
 	}
 
 	if (d.bom_no) {
-		msgprint(__("You can not change rate if BOM mentioned agianst any item"));
+		frappe.msgprint(__("You can not change rate if BOM mentioned agianst any item"));
 		get_bom_material_detail(doc, cdt, cdn, scrap_items);
 	} else {
 		erpnext.bom.calculate_rm_cost(doc);
@@ -159,8 +159,8 @@
 	doc.base_operating_cost = 0.0;
 
 	for(var i=0;i<op.length;i++) {
-		operating_cost = flt(flt(op[i].hour_rate) * flt(op[i].time_in_mins) / 60, 2);
-		base_operating_cost = flt(flt(op[i].base_hour_rate) * flt(op[i].time_in_mins) / 60, 2);
+		var operating_cost = flt(flt(op[i].hour_rate) * flt(op[i].time_in_mins) / 60, 2);
+		var base_operating_cost = flt(flt(op[i].base_hour_rate) * flt(op[i].time_in_mins) / 60, 2);
 		frappe.model.set_value('BOM Operation',op[i].name, "operating_cost", operating_cost);
 		frappe.model.set_value('BOM Operation',op[i].name, "base_operating_cost", base_operating_cost);
 
@@ -173,11 +173,11 @@
 // rm : raw material
 erpnext.bom.calculate_rm_cost = function(doc) {
 	var rm = doc.items || [];
-	total_rm_cost = 0;
-	base_total_rm_cost = 0;
+	var total_rm_cost = 0;
+	var base_total_rm_cost = 0;
 	for(var i=0;i<rm.length;i++) {
-		amount = flt(rm[i].rate) * flt(rm[i].qty);
-		base_amount = flt(rm[i].rate) * flt(doc.conversion_rate) * flt(rm[i].qty);
+		var amount = flt(rm[i].rate) * flt(rm[i].qty);
+		var base_amount = flt(rm[i].rate) * flt(doc.conversion_rate) * flt(rm[i].qty);
 		frappe.model.set_value('BOM Item', rm[i].name, 'base_rate', flt(rm[i].rate) * flt(doc.conversion_rate))
 		frappe.model.set_value('BOM Item', rm[i].name, 'amount', amount)
 		frappe.model.set_value('BOM Item', rm[i].name, 'qty_consumed_per_unit', flt(rm[i].qty)/flt(doc.quantity))
@@ -192,13 +192,13 @@
 //sm : scrap material
 erpnext.bom.calculate_scrap_materials_cost = function(doc) {
 	var sm = doc.scrap_items || [];
-	total_sm_cost = 0;
-	base_total_sm_cost = 0;
+	var total_sm_cost = 0;
+	var base_total_sm_cost = 0;
 
 	for(var i=0;i<sm.length;i++) {
-		base_rate = flt(sm[i].rate) * flt(doc.conversion_rate);
-		amount =	flt(sm[i].rate) * flt(sm[i].qty);
-		base_amount =	flt(sm[i].rate) * flt(sm[i].qty) * flt(doc.conversion_rate);
+		var base_rate = flt(sm[i].rate) * flt(doc.conversion_rate);
+		var amount =	flt(sm[i].rate) * flt(sm[i].qty);
+		var base_amount =	flt(sm[i].rate) * flt(sm[i].qty) * flt(doc.conversion_rate);
 		frappe.model.set_value('BOM Scrap Item',sm[i].name, 'base_rate', base_rate);
 		frappe.model.set_value('BOM Scrap Item',sm[i].name, 'amount', amount);
 		frappe.model.set_value('BOM Scrap Item',sm[i].name, 'base_amount', base_amount);
@@ -213,15 +213,15 @@
 
 // Calculate Total Cost
 erpnext.bom.calculate_total = function(doc) {
-	total_cost = flt(doc.operating_cost) + flt(doc.raw_material_cost) - flt(doc.scrap_material_cost);
-	base_total_cost = flt(doc.base_operating_cost) + flt(doc.base_raw_material_cost) - flt(doc.base_scrap_material_cost);
+	var total_cost = flt(doc.operating_cost) + flt(doc.raw_material_cost) - flt(doc.scrap_material_cost);
+	var base_total_cost = flt(doc.base_operating_cost) + flt(doc.base_raw_material_cost) - flt(doc.base_scrap_material_cost);
 	cur_frm.set_value("total_cost", total_cost);
 	cur_frm.set_value("base_total_cost", base_total_cost);
 }
 
 
 cur_frm.fields_dict['item'].get_query = function(doc) {
- 	return{
+	return{
 		query: "erpnext.controllers.queries.item_query"
 	}
 }
diff --git a/erpnext/manufacturing/doctype/production_order/production_order.js b/erpnext/manufacturing/doctype/production_order/production_order.js
index d2540de..6465cec 100644
--- a/erpnext/manufacturing/doctype/production_order/production_order.js
+++ b/erpnext/manufacturing/doctype/production_order/production_order.js
@@ -65,10 +65,10 @@
 			'width': (frm.doc.produced_qty / frm.doc.qty * 100) + '%',
 			'progress_class': 'progress-bar-success'
 		});
-		if(bars[0].width=='0%') {
-			 bars[0].width = '0.5%';
-			 added_min = 0.5;
-		 }
+		if (bars[0].width == '0%') {
+			bars[0].width = '0.5%';
+			added_min = 0.5;
+		}
 		message = title;
 
 		// pending qty
@@ -126,10 +126,10 @@
 
 			if(!frm.doc.skip_transfer){
 				if ((flt(doc.material_transferred_for_manufacturing) < flt(doc.qty)) && frm.doc.status != 'Stopped') {
-				frm.has_start_btn = true;
-				var btn = frm.add_custom_button(__('Start'),
-					cur_frm.cscript['Transfer Raw Materials']);
-				btn.addClass('btn-primary');
+					frm.has_start_btn = true;
+					var btn = frm.add_custom_button(__('Start'),
+						cur_frm.cscript['Transfer Raw Materials']);
+					btn.addClass('btn-primary');
 				}
 			}
 
@@ -161,7 +161,7 @@
 			var op = doc.operations;
 			doc.planned_operating_cost = 0.0;
 			for(var i=0;i<op.length;i++) {
-				planned_operating_cost = flt(flt(op[i].hour_rate) * flt(op[i].time_in_mins) / 60, 2);
+				var planned_operating_cost = flt(flt(op[i].hour_rate) * flt(op[i].time_in_mins) / 60, 2);
 				frappe.model.set_value('Production Order Operation',op[i].name, "planned_operating_cost", planned_operating_cost);
 
 				doc.planned_operating_cost += planned_operating_cost;
@@ -198,7 +198,7 @@
 					query: "erpnext.controllers.queries.bom",
 					filters: {item: cstr(doc.production_item)}
 				}
-			} else msgprint(__("Please enter Production Item first"));
+			} else frappe.msgprint(__("Please enter Production Item first"));
 		});
 	},
 
@@ -227,9 +227,9 @@
 		frappe.call({
 			method: "erpnext.manufacturing.doctype.production_order.production_order.get_item_details",
 			args: {
-					item: doc.production_item,
-					project: doc.project
-					},
+				item: doc.production_item,
+				project: doc.project
+			},
 			callback: function(r) {
 				$.each(["description", "stock_uom", "project", "bom_no"], function(i, field) {
 					cur_frm.set_value(field, r.message[field]);
diff --git a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js
index a0e9ce7..f541e5b 100644
--- a/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js
+++ b/erpnext/manufacturing/doctype/production_planning_tool/production_planning_tool.js
@@ -19,9 +19,8 @@
 
 frappe.ui.form.on("Production Planning Tool", {
 	onload_post_render: function(frm) {
-	 		frm.get_field("items").grid.set_multiple_add("item_code", "planned_qty");
-	 },	
-	 
+		frm.get_field("items").grid.set_multiple_add("item_code", "planned_qty");
+	},
 	get_sales_orders: function(frm) {
 		frappe.call({
 			doc: frm.doc,
@@ -96,11 +95,11 @@
 		args["customer"] = doc.customer;
 	}
 
- 	return { filters: args }
+	return { filters: args }
 }
 
 cur_frm.fields_dict['items'].grid.get_field('item_code').get_query = function(doc) {
- 	return erpnext.queries.item({
+	return erpnext.queries.item({
 		'is_stock_item': 1
 	});
 }
@@ -112,7 +111,7 @@
 			query: "erpnext.controllers.queries.bom",
 			filters:{'item': cstr(d.item_code)}
 		}
-	} else msgprint(__("Please enter Item first"));
+	} else frappe.msgprint(__("Please enter Item first"));
 }
 
 cur_frm.fields_dict.customer.get_query = function(doc,cdt,cdn) {
diff --git a/erpnext/manufacturing/page/production_analytics/production_analytics.js b/erpnext/manufacturing/page/production_analytics/production_analytics.js
index cac4b3a..1fb1ef2 100644
--- a/erpnext/manufacturing/page/production_analytics/production_analytics.js
+++ b/erpnext/manufacturing/page/production_analytics/production_analytics.js
@@ -9,7 +9,6 @@
 	});
 
 	new erpnext.ProductionAnalytics(wrapper);
-		
 
 	frappe.breadcrumbs.add("Manufacturing");
 }
@@ -18,7 +17,6 @@
 	init: function(wrapper) {
 		this._super({
 			title: __("Production Analytics"),
-			page: wrapper,
 			parent: $(wrapper).find('.layout-main'),
 			page: wrapper.page,
 			doctypes: ["Item", "Company", "Fiscal Year", "Production Order"]
@@ -73,8 +71,8 @@
 	},
 	set_default_values: function() {
 		var values = {
-			from_date: dateutil.str_to_user(dateutil.add_months(dateutil.now_datetime(),-12) ),
-			to_date: dateutil.str_to_user(dateutil.add_months(dateutil.now_datetime(),1))
+			from_date: frappe.datetime.str_to_user(frappe.datetime.add_months(frappe.datetime.now_datetime(),-12) ),
+			to_date: frappe.datetime.str_to_user(frappe.datetime.add_months(frappe.datetime.now_datetime(),1))
 		}
 
 		var me = this;
@@ -100,17 +98,17 @@
 			checked:true};	
 
 		$.each(frappe.report_dump.data["Production Order"], function(i, d) {
-			var dateobj = dateutil.str_to_obj(d.creation);
-			var date = dateutil.str_to_user(d.creation.split(" ")[0]);
+			var dateobj = frappe.datetime.str_to_obj(d.creation);
+			var date = frappe.datetime.str_to_user(d.creation.split(" ")[0]);
 
 			$.each(me.columns, function(i,col) {
 				if (i > 1){
-					var start_period = dateutil.user_to_obj(dateutil.str_to_user(col.id));
-					var end_period = dateutil.user_to_obj(dateutil.str_to_user(col.name));
-					var astart_date = dateutil.user_to_obj(dateutil.str_to_user(d.actual_start_date));
-					var planned_start_date = dateutil.user_to_obj(dateutil.str_to_user(d.planned_start_date));
-					var aend_date = dateutil.user_to_obj(dateutil.str_to_user(d.actual_end_date));
-					var modified = dateutil.user_to_obj(dateutil.str_to_user(d.modified));
+					var start_period = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(col.id));
+					var end_period = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(col.name));
+					var astart_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.actual_start_date));
+					var planned_start_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.planned_start_date));
+					var aend_date = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.actual_end_date));
+					var modified = frappe.datetime.user_to_obj(frappe.datetime.str_to_user(d.modified));
 					
 					if (dateobj <= start_period || dateobj <= end_period) {
 						all_open_orders[col.field] = flt(all_open_orders[col.field]) + 1;
diff --git a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
index 8aed965..95c78e6 100644
--- a/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
+++ b/erpnext/manufacturing/report/bom_stock_report/bom_stock_report.js
@@ -1,17 +1,17 @@
 frappe.query_reports["BOM Stock Report"] = {
-    "filters": [
-        {
-            "fieldname":"bom",
-            "label": __("BOM"),
-            "fieldtype": "Link",
-            "options": "BOM",
+	"filters": [
+		{
+			"fieldname": "bom",
+			"label": __("BOM"),
+			"fieldtype": "Link",
+			"options": "BOM",
 			"reqd": 1
-        },{
-            "fieldname":"warehouse",
-            "label": __("Warehouse"),
-            "fieldtype": "Link",
-            "options": "Warehouse",
+		}, {
+			"fieldname": "warehouse",
+			"label": __("Warehouse"),
+			"fieldtype": "Link",
+			"options": "Warehouse",
 			"reqd": 1
-        }
-    ]
+		}
+	]
 }
diff --git a/erpnext/manufacturing/report/production_order_stock_report/production_order_stock_report.js b/erpnext/manufacturing/report/production_order_stock_report/production_order_stock_report.js
index 917af5d..94e326d 100644
--- a/erpnext/manufacturing/report/production_order_stock_report/production_order_stock_report.js
+++ b/erpnext/manufacturing/report/production_order_stock_report/production_order_stock_report.js
@@ -3,12 +3,11 @@
 
 frappe.query_reports["Production Order Stock Report"] = {
 	"filters": [
-	{
-		"fieldname":"warehouse",
-		"label": __("Warehouse"),
-		"fieldtype": "Link",
-		"options": "Warehouse"
-		
-	}
+		{
+			"fieldname": "warehouse",
+			"label": __("Warehouse"),
+			"fieldtype": "Link",
+			"options": "Warehouse"
+		}
 	]
 }
diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js
index 5f48a93..78cdb13 100644
--- a/erpnext/projects/doctype/project/project.js
+++ b/erpnext/projects/doctype/project/project.js
@@ -13,12 +13,12 @@
 		}
 
 		frm.set_query('customer', 'erpnext.controllers.queries.customer_query');
-		
+
 		frm.set_query("user", "users", function() {
-					return {
-						query:"erpnext.projects.doctype.project.project.get_users_for_project"
-					}
-				});
+			return {
+				query:"erpnext.projects.doctype.project.project.get_users_for_project"
+			}
+		});
 
 		// sales order
 		frm.set_query('sales_order', function() {
@@ -89,7 +89,7 @@
 		if(doc.task_id) {
 			frappe.set_route("Form", "Task", doc.task_id);
 		} else {
-			msgprint(__("Save the document first."));
+			frappe.msgprint(__("Save the document first."));
 		}
 	},
 	status: function(frm, doctype, name) {
diff --git a/erpnext/projects/doctype/timesheet/timesheet.js b/erpnext/projects/doctype/timesheet/timesheet.js
index 01fa160..7d14d9e 100644
--- a/erpnext/projects/doctype/timesheet/timesheet.js
+++ b/erpnext/projects/doctype/timesheet/timesheet.js
@@ -13,7 +13,7 @@
 		}
 
 		frm.fields_dict['time_logs'].grid.get_field('task').get_query = function(frm, cdt, cdn) {
-			child = locals[cdt][cdn];
+			var child = locals[cdt][cdn];
 			return{
 				filters: {
 					'project': child.project,
@@ -109,7 +109,7 @@
 	},
 
 	activity_type: function(frm, cdt, cdn) {
-		child = locals[cdt][cdn];
+		var child = locals[cdt][cdn];
 		frappe.call({
 			method: "erpnext.projects.doctype.timesheet.timesheet.get_activity_cost",
 			args: {
@@ -127,7 +127,7 @@
 	}
 });
 
-calculate_end_time = function(frm, cdt, cdn){
+var calculate_end_time = function(frm, cdt, cdn) {
 	var child = locals[cdt][cdn];
 
 	var d = moment(child.from_time);
@@ -142,8 +142,9 @@
 }
 
 var calculate_billing_costing_amount = function(frm, cdt, cdn){
-	child = locals[cdt][cdn]
-	billing_amount = costing_amount = 0.0;
+	var child = locals[cdt][cdn]
+	var billing_amount = 0.0;
+	var costing_amount = 0.0;
 
 	if(child.billing_hours && child.billable){
 		billing_amount = (child.billing_hours * child.billing_rate);
@@ -157,10 +158,10 @@
 
 var calculate_time_and_amount = function(frm) {
 	var tl = frm.doc.time_logs || [];
-	total_working_hr = 0;
-	total_billing_hr = 0;
-	total_billable_amount = 0;
-	total_costing_amount = 0;
+	var total_working_hr = 0;
+	var total_billing_hr = 0;
+	var total_billable_amount = 0;
+	var total_costing_amount = 0;
 	for(var i=0; i<tl.length; i++) {
 		if (tl[i].hours) {
 			total_working_hr += tl[i].hours;
diff --git a/erpnext/public/js/account_tree_grid.js b/erpnext/public/js/account_tree_grid.js
index ac8784d..5769298 100644
--- a/erpnext/public/js/account_tree_grid.js
+++ b/erpnext/public/js/account_tree_grid.js
@@ -18,7 +18,6 @@
 	init: function(wrapper, title) {
 		this._super({
 			title: title,
-			page: wrapper,
 			parent: $(wrapper).find('.layout-main'),
 			page: wrapper.page,
 			doctypes: ["Company", "Fiscal Year", "Account", "GL Entry", "Cost Center"],
@@ -77,8 +76,8 @@
 			var fy = $(this).val();
 			$.each(frappe.report_dump.data["Fiscal Year"], function(i, v) {
 				if (v.name==fy) {
-					me.filter_inputs.from_date.val(dateutil.str_to_user(v.year_start_date));
-					me.filter_inputs.to_date.val(dateutil.str_to_user(v.year_end_date));
+					me.filter_inputs.from_date.val(frappe.datetime.str_to_user(v.year_start_date));
+					me.filter_inputs.to_date.val(frappe.datetime.str_to_user(v.year_end_date));
 				}
 			});
 			me.refresh();
@@ -124,8 +123,8 @@
 		var gl = frappe.report_dump.data['GL Entry'];
 		var me = this;
 
-		this.opening_date = dateutil.user_to_obj(this.filter_inputs.from_date.val());
-		this.closing_date = dateutil.user_to_obj(this.filter_inputs.to_date.val());
+		this.opening_date = frappe.datetime.user_to_obj(this.filter_inputs.from_date.val());
+		this.closing_date = frappe.datetime.user_to_obj(this.filter_inputs.to_date.val());
 		this.set_fiscal_year();
 		if (!this.fiscal_year) return;
 
@@ -135,7 +134,7 @@
 		});
 
 		$.each(gl, function(i, v) {
-			var posting_date = dateutil.str_to_obj(v.posting_date);
+			var posting_date = frappe.datetime.str_to_obj(v.posting_date);
 			var account = me.item_by_name[v.account];
 			me.update_balances(account, posting_date, v);
 		});
@@ -146,7 +145,7 @@
 		// opening
 		if (posting_date < this.opening_date || v.is_opening === "Yes") {
 			if (account.report_type === "Profit and Loss" &&
-				posting_date <= dateutil.str_to_obj(this.fiscal_year[1])) {
+				posting_date <= frappe.datetime.str_to_obj(this.fiscal_year[1])) {
 				// balance of previous fiscal_year should
 				//	not be part of opening of pl account balance
 			} else {
@@ -208,21 +207,21 @@
 
 	set_fiscal_year: function() {
 		if (this.opening_date > this.closing_date) {
-			msgprint(__("Opening Date should be before Closing Date"));
+			frappe.msgprint(__("Opening Date should be before Closing Date"));
 			return;
 		}
 
 		this.fiscal_year = null;
 		var me = this;
 		$.each(frappe.report_dump.data["Fiscal Year"], function(i, v) {
-			if (me.opening_date >= dateutil.str_to_obj(v.year_start_date) &&
-				me.closing_date <= dateutil.str_to_obj(v.year_end_date)) {
-					me.fiscal_year = v;
-				}
+			if (me.opening_date >= frappe.datetime.str_to_obj(v.year_start_date) &&
+				me.closing_date <= frappe.datetime.str_to_obj(v.year_end_date)) {
+				me.fiscal_year = v;
+			}
 		});
 
 		if (!this.fiscal_year) {
-			msgprint(__("Opening Date and Closing Date should be within same Fiscal Year"));
+			frappe.msgprint(__("Opening Date and Closing Date should be within same Fiscal Year"));
 			return;
 		}
 	},
diff --git a/erpnext/public/js/communication.js b/erpnext/public/js/communication.js
index 9d54f84..5ce57b6 100644
--- a/erpnext/public/js/communication.js
+++ b/erpnext/public/js/communication.js
@@ -8,7 +8,7 @@
 			}, "Make");
 		}
 
-		if(!inList(["Lead", "Opportunity"], frm.doc.reference_doctype)) {
+		if(!in_list(["Lead", "Opportunity"], frm.doc.reference_doctype)) {
 			frm.add_custom_button(__("Lead"), function() {
 				frappe.confirm("Are you sure you want to create Lead from this email", function(){
 					frm.trigger('make_lead_from_communication');	
diff --git a/erpnext/public/js/controllers/accounts.js b/erpnext/public/js/controllers/accounts.js
index c1c3553..644f0f5 100644
--- a/erpnext/public/js/controllers/accounts.js
+++ b/erpnext/public/js/controllers/accounts.js
@@ -89,7 +89,7 @@
 	}
 })
 
-get_payment_mode_account = function(frm, mode_of_payment, callback){
+var get_payment_mode_account = function(frm, mode_of_payment, callback){
 	return  frappe.call({
 		method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account",
 		args: {
@@ -108,7 +108,7 @@
 cur_frm.cscript.account_head = function(doc, cdt, cdn) {
 	var d = locals[cdt][cdn];
 	if(!d.charge_type && d.account_head){
-		msgprint("Please select Charge Type first");
+		frappe.msgprint("Please select Charge Type first");
 		frappe.model.set_value(cdt, cdn, "account_head", "");
 	} else if(d.account_head && d.charge_type!=="Actual") {
 		frappe.call({
@@ -152,7 +152,7 @@
 		}
 	}
 	if(msg) {
-		validated = false;
+		frappe.validated = false;
 		refresh_field("taxes");
 		frappe.throw(msg);
 	}
@@ -176,9 +176,10 @@
 			// inclusive tax cannot be of type Actual
 			actual_type_error();
 		} else if(tax.charge_type == "On Previous Row Amount" &&
-			!cint(this.frm.doc["taxes"][tax.row_id - 1].included_in_print_rate)) {
-				// referred row should also be an inclusive tax
-				on_previous_row_error(tax.row_id);
+			!cint(this.frm.doc["taxes"][tax.row_id - 1].included_in_print_rate)
+		) {
+			// referred row should also be an inclusive tax
+			on_previous_row_error(tax.row_id);
 		} else if(tax.charge_type == "On Previous Row Total") {
 			var taxes_not_included = $.map(this.frm.doc["taxes"].slice(0, tax.row_id),
 				function(t) { return cint(t.included_in_print_rate) ? null : t; });
diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js
index a8c80fe..06e759f 100644
--- a/erpnext/public/js/controllers/buying.js
+++ b/erpnext/public/js/controllers/buying.js
@@ -18,9 +18,11 @@
 		this.setup_queries();
 		this._super();
 
+		/* eslint-disable */
+		// no idea where me is coming from
 		if(this.frm.get_field('shipping_address')) {
-			this.frm.set_query("shipping_address", function(){
-				if(me.frm.doc.customer){
+			this.frm.set_query("shipping_address", function() {
+				if(me.frm.doc.customer) {
 					return {
 						query: 'frappe.geo.doctype.address.address.address_query',
 						filters: { link_doctype: 'Customer', link_name: me.frm.doc.customer }
@@ -29,6 +31,7 @@
 					return erpnext.queries.company_address_query(me.frm.doc)
 			});
 		}
+		/* eslint-enable */
 	},
 
 	setup_queries: function() {
@@ -206,73 +209,73 @@
 	shipping_address: function(){
 		var me = this;
 		erpnext.utils.get_address_display(this.frm, "shipping_address",
-			"shipping_address_display", is_your_company_address=true)
+			"shipping_address_display", true);
 	},
 
 	tc_name: function() {
 		this.get_terms();
 	},
 	link_to_mrs: function() {
-				my_items = [];
-				for (var i in cur_frm.doc.items) {
-					if(!cur_frm.doc.items[i].material_request){
-						my_items.push(cur_frm.doc.items[i].item_code);
-					}
-				}
-				frappe.call({
-					method: "erpnext.buying.utils.get_linked_material_requests",
-					args:{
-						items: my_items
-					},
-					callback: function(r) {
-						var i = 0;
-						var item_length = cur_frm.doc.items.length;
-						while (i < item_length) {
-							var qty = cur_frm.doc.items[i].qty;
-							(r.message[0] || []).forEach(function(d) {
-								if (d.qty > 0 && qty > 0 && cur_frm.doc.items[i].item_code == d.item_code && !cur_frm.doc.items[i].material_request_item)
+		var my_items = [];
+		for (var i in cur_frm.doc.items) {
+			if(!cur_frm.doc.items[i].material_request){
+				my_items.push(cur_frm.doc.items[i].item_code);
+			}
+		}
+		frappe.call({
+			method: "erpnext.buying.utils.get_linked_material_requests",
+			args:{
+				items: my_items
+			},
+			callback: function(r) {
+				var i = 0;
+				var item_length = cur_frm.doc.items.length;
+				while (i < item_length) {
+					var qty = cur_frm.doc.items[i].qty;
+					(r.message[0] || []).forEach(function(d) {
+						if (d.qty > 0 && qty > 0 && cur_frm.doc.items[i].item_code == d.item_code && !cur_frm.doc.items[i].material_request_item)
+						{
+							cur_frm.doc.items[i].material_request = d.mr_name;
+							cur_frm.doc.items[i].material_request_item = d.mr_item;
+							var my_qty = Math.min(qty, d.qty);
+							qty = qty - my_qty;
+							d.qty = d.qty  - my_qty;
+							cur_frm.doc.items[i].stock_qty = my_qty*cur_frm.doc.items[i].conversion_factor;
+							cur_frm.doc.items[i].qty = my_qty;
+
+							frappe.msgprint("Assigning " + d.mr_name + " to " + d.item_code + " (row " + cur_frm.doc.items[i].idx + ")");
+							if (qty > 0)
+							{
+								frappe.msgprint("Splitting " + qty + " units of " + d.item_code);
+								var newrow = frappe.model.add_child(cur_frm.doc, cur_frm.doc.items[i].doctype, "items");
+								item_length++;
+
+								for (var key in cur_frm.doc.items[i])
 								{
-									cur_frm.doc.items[i].material_request = d.mr_name;
-									cur_frm.doc.items[i].material_request_item = d.mr_item;
-									my_qty = Math.min(qty, d.qty);
-									qty = qty - my_qty;
-									d.qty = d.qty  - my_qty;
-									cur_frm.doc.items[i].stock_qty = my_qty*cur_frm.doc.items[i].conversion_factor;
-									cur_frm.doc.items[i].qty = my_qty;
-
-									frappe.msgprint("Assigning " + d.mr_name + " to " + d.item_code + " (row " + cur_frm.doc.items[i].idx + ")");
-									if (qty > 0)
-									{
-										frappe.msgprint("Splitting " + qty + " units of " + d.item_code);
-										var newrow = frappe.model.add_child(cur_frm.doc, cur_frm.doc.items[i].doctype, "items");
-										item_length++;
-
-										for (key in cur_frm.doc.items[i])
-										{
-											newrow[key] = cur_frm.doc.items[i][key];
-										}
-
-										newrow.idx = item_length;
-										newrow["stock_qty"] = newrow.conversion_factor*qty;
-										newrow["qty"] = qty;
-
-										newrow["material_request"] = "";
-										newrow["material_request_item"] = "";
-
-									}
-
-
-
+									newrow[key] = cur_frm.doc.items[i][key];
 								}
 
-							});
-							i++;
+								newrow.idx = item_length;
+								newrow["stock_qty"] = newrow.conversion_factor*qty;
+								newrow["qty"] = qty;
+
+								newrow["material_request"] = "";
+								newrow["material_request_item"] = "";
+
+							}
+
+
+
 						}
-						refresh_field("items");
-						//cur_frm.save();
-					}
-				});
+
+					});
+					i++;
+				}
+				refresh_field("items");
+				//cur_frm.save();
 			}
+		});
+	}
 });
 
 cur_frm.add_fetch('project', 'cost_center', 'cost_center');
@@ -324,7 +327,7 @@
 	});
 
 	dialog.fields_dict.get_items.$input.click(function() {
-		args = dialog.get_values();
+		var args = dialog.get_values();
 		if(!args) return;
 		dialog.hide();
 		return frappe.call({
diff --git a/erpnext/public/js/controllers/taxes_and_totals.js b/erpnext/public/js/controllers/taxes_and_totals.js
index dc1db35..9be19eb 100644
--- a/erpnext/public/js/controllers/taxes_and_totals.js
+++ b/erpnext/public/js/controllers/taxes_and_totals.js
@@ -14,7 +14,7 @@
 		item.rate = flt(item.rate_with_margin , precision("rate", item));
 
 		if(item.discount_percentage){
-			discount_value = flt(item.rate_with_margin) * flt(item.discount_percentage) / 100;
+			var discount_value = flt(item.rate_with_margin) * flt(item.discount_percentage) / 100;
 			item.rate = flt((item.rate_with_margin) - (discount_value), precision('rate', item));
 		}
 	},
@@ -26,8 +26,8 @@
 
 		// Advance calculation applicable to Sales /Purchase Invoice
 		if(in_list(["Sales Invoice", "Purchase Invoice"], this.frm.doc.doctype)
-			 && this.frm.doc.docstatus < 2 && !this.frm.doc.is_return) {
-				 this.calculate_total_advance(update_paid_amount);
+			&& this.frm.doc.docstatus < 2 && !this.frm.doc.is_return) {
+			this.calculate_total_advance(update_paid_amount);
 		}
 
 		// Sales person's commission
@@ -108,13 +108,14 @@
 
 		$.each(this.frm.doc["taxes"] || [], function(i, tax) {
 			tax.item_wise_tax_detail = {};
-			tax_fields = ["total", "tax_amount_after_discount_amount",
+			var tax_fields = ["total", "tax_amount_after_discount_amount",
 				"tax_amount_for_current_item", "grand_total_for_current_item",
 				"tax_fraction_for_current_item", "grand_total_fraction_for_current_item"]
 
 			if (cstr(tax.charge_type) != "Actual" &&
-				!(me.discount_amount_applied && me.frm.doc.apply_discount_on=="Grand Total"))
-					tax_fields.push("tax_amount");
+				!(me.discount_amount_applied && me.frm.doc.apply_discount_on=="Grand Total")) {
+				tax_fields.push("tax_amount");
+			}
 
 			$.each(tax_fields, function(i, fieldname) { tax[fieldname] = 0.0 });
 
@@ -190,7 +191,7 @@
 	},
 
 	_get_tax_rate: function(tax, item_tax_map) {
-		return (keys(item_tax_map).indexOf(tax.account_head) != -1) ?
+		return (Object.keys(item_tax_map).indexOf(tax.account_head) != -1) ?
 			flt(item_tax_map[tax.account_head], precision("rate", tax)) : tax.rate;
 	},
 
@@ -236,8 +237,9 @@
 
 				// accumulate tax amount into tax.tax_amount
 				if (tax.charge_type != "Actual" &&
-					!(me.discount_amount_applied && me.frm.doc.apply_discount_on=="Grand Total"))
-						tax.tax_amount += current_tax_amount;
+					!(me.discount_amount_applied && me.frm.doc.apply_discount_on=="Grand Total")) {
+					tax.tax_amount += current_tax_amount;
+				}
 
 				// store tax_amount for current item as it will be used for
 				// charge type = 'On Previous Row Amount'
@@ -492,7 +494,7 @@
 				if (tax.charge_type == "Actual")
 					actual_taxes_dict[tax.idx] = tax.tax_amount;
 				else if (actual_taxes_dict[tax.row_id] !== null) {
-					actual_tax_amount = flt(actual_taxes_dict[tax.row_id]) * flt(tax.rate) / 100;
+					var actual_tax_amount = flt(actual_taxes_dict[tax.row_id]) * flt(tax.rate) / 100;
 					actual_taxes_dict[tax.idx] = actual_tax_amount;
 				}
 			});
@@ -571,7 +573,7 @@
 
 	set_default_payment: function(total_amount_to_pay, update_paid_amount){
 		var me = this;
-		payment_status = true;
+		var payment_status = true;
 		if(this.frm.doc.is_pos && (update_paid_amount===undefined || update_paid_amount)){
 			$.each(this.frm.doc['payments'] || [], function(index, data){
 				if(data.type == "Cash" && payment_status && total_amount_to_pay > 0) {
@@ -587,7 +589,8 @@
 
 	calculate_paid_amount: function(){
 		var me = this;
-		var paid_amount = base_paid_amount = 0.0;
+		var paid_amount = 0.0;
+		var base_paid_amount = 0.0;
 		if(this.frm.doc.is_pos) {
 			$.each(this.frm.doc['payments'] || [], function(index, data){
 				data.base_amount = flt(data.amount * me.frm.doc.conversion_rate, precision("base_amount"));
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 6206b28..db94f3c 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -102,7 +102,7 @@
 	onload: function() {
 		var me = this;
 		if(this.frm.doc.__islocal) {
-			var today = get_today(),
+			var today = frappe.datetime.get_today(),
 				currency = frappe.defaults.get_user_default("currency");
 
 			$.each({
@@ -195,10 +195,10 @@
 		var me = this;
 		if(this.frm.doc.__islocal && !(this.frm.doc.taxes || []).length
 			&& !(this.frm.doc.__onload ? this.frm.doc.__onload.load_after_mapping : false)) {
-				this.apply_default_taxes();
+			this.apply_default_taxes();
 		} else if(this.frm.doc.__islocal && this.frm.doc.company && this.frm.doc["items"]
 			&& !this.frm.doc.is_pos) {
-				me.calculate_taxes_and_totals();
+			me.calculate_taxes_and_totals();
 		}
 		if(frappe.meta.get_docfield(this.frm.doc.doctype + " Item", "item_code")) {
 			this.setup_item_selector();
@@ -243,7 +243,7 @@
 	},
 
 	send_sms: function() {
-		var sms_man = new SMSManager(this.frm.doc);
+		var sms_man = new erpnext.SMSManager(this.frm.doc);
 	},
 
 	barcode: function(doc, cdt, cdn) {
@@ -281,8 +281,7 @@
 							currency: me.frm.doc.currency,
 							update_stock: in_list(['Sales Invoice', 'Purchase Invoice'], me.frm.doc.doctype) ? cint(me.frm.doc.update_stock) : 0,
 							conversion_rate: me.frm.doc.conversion_rate,
-							price_list: me.frm.doc.selling_price_list ||
-								 me.frm.doc.buying_price_list,
+							price_list: me.frm.doc.selling_price_list || me.frm.doc.buying_price_list,
 							price_list_currency: me.frm.doc.price_list_currency,
 							plc_conversion_rate: me.frm.doc.plc_conversion_rate,
 							company: me.frm.doc.company,
@@ -423,10 +422,10 @@
 
 		if (frappe.meta.get_docfield(this.frm.doctype, "shipping_address") &&
 			in_list(['Purchase Order', 'Purchase Receipt', 'Purchase Invoice'], this.frm.doctype)){
-				erpnext.utils.get_shipping_address(this.frm, function(){
-					set_party_account(set_pricing);
-				})
-		}else{
+			erpnext.utils.get_shipping_address(this.frm, function(){
+				set_party_account(set_pricing);
+			})
+		} else {
 			set_party_account(set_pricing);
 		}
 
@@ -505,7 +504,7 @@
 		}
 		if(this.frm.doc.currency === this.frm.doc.price_list_currency &&
 			this.frm.doc.plc_conversion_rate !== this.frm.doc.conversion_rate) {
-				this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate);
+			this.frm.set_value("plc_conversion_rate", this.frm.doc.conversion_rate);
 		}
 
 		if(flt(this.frm.doc.conversion_rate)>0.0) {
@@ -555,7 +554,7 @@
 		} else if(this.frm.doc.price_list_currency === this.frm.doc.currency
 			&& this.frm.doc.plc_conversion_rate && cint(this.frm.doc.plc_conversion_rate) != 1 &&
 			cint(this.frm.doc.plc_conversion_rate) != cint(this.frm.doc.conversion_rate)) {
-				this.frm.set_value("conversion_rate", this.frm.doc.plc_conversion_rate);
+			this.frm.set_value("conversion_rate", this.frm.doc.plc_conversion_rate);
 		}
 
 		if(!this.in_apply_price_list) {
@@ -981,10 +980,10 @@
 		$.each(["company", "customer"], function(i, fieldname) {
 			if(frappe.meta.has_field(me.frm.doc.doctype, fieldname) && me.frm.doc.doctype != "Purchase Order") {
 				if (!me.frm.doc[fieldname]) {
-					msgprint(__("Please specify") + ": " +
+					frappe.msgprint(__("Please specify") + ": " +
 						frappe.meta.get_label(me.frm.doc.doctype, fieldname, me.frm.doc.name) +
 						". " + __("It is needed to fetch Item Details."));
-						valid = false;
+					valid = false;
 				}
 			}
 		});
@@ -1076,7 +1075,7 @@
 
 	set_gross_profit: function(item) {
 		if (this.frm.doc.doctype == "Sales Order" && item.valuation_rate) {
-			rate = flt(item.rate) * flt(this.frm.doc.conversion_rate || 1);
+			var rate = flt(item.rate) * flt(this.frm.doc.conversion_rate || 1);
 			item.gross_profit = flt(((rate - item.valuation_rate) * item.stock_qty), precision("amount", item));
 		}
 	},
@@ -1085,9 +1084,9 @@
 		// TODO: remove item selector
 
 		return;
-		if(!this.item_selector) {
-			this.item_selector = new erpnext.ItemSelector({frm: this.frm});
-		}
+		// if(!this.item_selector) {
+		// 	this.item_selector = new erpnext.ItemSelector({frm: this.frm});
+		// }
 	},
 
 	get_advances: function() {
@@ -1118,7 +1117,7 @@
 	},
 
 	get_method_for_payment: function(){
-		method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry"
+		var method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry"
 		if(cur_frm.doc.__onload && cur_frm.doc.__onload.make_payment_via_journal_entry){
 			if(in_list(['Sales Invoice', 'Purchase Invoice'],  cur_frm.doc.doctype)){
 				method = "erpnext.accounts.doctype.journal_entry.journal_entry.get_payment_entry_against_invoice"
diff --git a/erpnext/public/js/payment/payments.js b/erpnext/public/js/payment/payments.js
index 438ad79..77209e0 100644
--- a/erpnext/public/js/payment/payments.js
+++ b/erpnext/public/js/payment/payments.js
@@ -55,7 +55,7 @@
 
 	show_payment_details: function(){
 		var me = this;
-		multimode_payments = $(this.$body).find('.multimode-payments').empty();
+		var multimode_payments = $(this.$body).find('.multimode-payments').empty();
 		if(this.frm.doc.payments.length){
 			$.each(this.frm.doc.payments, function(index, data){
 				$(frappe.render_template('payment_details', {
@@ -126,7 +126,7 @@
 
 	highlight_selected_row: function(){
 		var me = this;
-		selected_row = $(this.$body).find(repl(".pos-payment-row[idx='%(idx)s']",{'idx': this.idx}));
+		var selected_row = $(this.$body).find(repl(".pos-payment-row[idx='%(idx)s']",{'idx': this.idx}));
 		$(this.$body).find('.pos-payment-row').removeClass('selected-payment-mode')
 		selected_row.addClass('selected-payment-mode')
 		$(this.$body).find('.amount').attr('disabled', true);
@@ -195,7 +195,7 @@
 	update_paid_amount: function(update_write_off) {
 		var me = this;
 		if(in_list(['change_amount', 'write_off_amount'], this.idx)){
-			value = me.selected_mode.val();
+			var value = me.selected_mode.val();
 			if(me.idx == 'change_amount'){
 				me.change_amount(value)
 			} else{
diff --git a/erpnext/public/js/purchase_trends_filters.js b/erpnext/public/js/purchase_trends_filters.js
index b2d882c..117d4eb 100644
--- a/erpnext/public/js/purchase_trends_filters.js
+++ b/erpnext/public/js/purchase_trends_filters.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-var get_filters = function(){
+erpnext.get_purchase_trends_filters = function() {
 	return [
 		{
 			"fieldname":"period",
@@ -44,7 +44,7 @@
 			"label": __("Fiscal Year"),
 			"fieldtype": "Link",
 			"options":'Fiscal Year',
-			"default": sys_defaults.fiscal_year
+			"default": frappe.sys_defaults.fiscal_year
 		},
 		{
 			"fieldname":"company",
diff --git a/erpnext/public/js/sales_trends_filters.js b/erpnext/public/js/sales_trends_filters.js
index f28e8f7..b272fdd 100644
--- a/erpnext/public/js/sales_trends_filters.js
+++ b/erpnext/public/js/sales_trends_filters.js
@@ -1,8 +1,8 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-var get_filters = function(){
- 	return[
+erpnext.get_sales_trends_filters = function() {
+	return[
 		{
 			"fieldname":"period",
 			"label": __("Period"),
@@ -45,7 +45,7 @@
 			"label": __("Fiscal Year"),
 			"fieldtype": "Link",
 			"options":'Fiscal Year',
-			"default": sys_defaults.fiscal_year
+			"default": frappe.sys_defaults.fiscal_year
 		},
 		{
 			"fieldname":"company",
diff --git a/erpnext/public/js/setup_wizard.js b/erpnext/public/js/setup_wizard.js
index 658c4fe..488d3c4 100644
--- a/erpnext/public/js/setup_wizard.js
+++ b/erpnext/public/js/setup_wizard.js
@@ -1,7 +1,7 @@
 frappe.provide("erpnext.wiz");
 
 frappe.pages['setup-wizard'].on_page_load = function(wrapper) {
-	if(sys_defaults.company) {
+	if(frappe.sys_defaults.company) {
 		frappe.set_route("desk");
 		return;
 	}
@@ -38,17 +38,17 @@
 			fields: [
 				{fieldname:'company_name',
 					label: frappe.wiz.domain==='Education' ?
-					 	__('Institute Name') : __('Company Name'),
+						__('Institute Name') : __('Company Name'),
 					fieldtype:'Data', reqd:1},
 				{fieldname:'company_abbr',
 					label: frappe.wiz.domain==='Education' ?
-					 	__('Institute Abbreviation') : __('Company Abbreviation'),
+						__('Institute Abbreviation') : __('Company Abbreviation'),
 					fieldtype:'Data'},
 				{fieldname:'company_tagline',
 					label: __('What does it do?'),
 					fieldtype:'Data',
 					placeholder: frappe.wiz.domain==='Education' ?
-					 	__('e.g. "Primary School" or "University"') :
+						__('e.g. "Primary School" or "University"') :
 						__('e.g. "Build tools for builders"'),
 					reqd:1},
 				{fieldname:'bank_account', label: __('Bank Name'), fieldtype:'Data', reqd:1},
@@ -75,12 +75,12 @@
 			validate: function() {
 				// validate fiscal year start and end dates
 				if (this.values.fy_start_date=='Invalid date' || this.values.fy_end_date=='Invalid date') {
-					msgprint(__("Please enter valid Financial Year Start and End Dates"));
+					frappe.msgprint(__("Please enter valid Financial Year Start and End Dates"));
 					return false;
 				}
 
 				if ((this.values.company_name || "").toLowerCase() == "company") {
-					msgprint(__("Company Name cannot be Company"));
+					frappe.msgprint(__("Company Name cannot be Company"));
 					return false;
 				}
 
@@ -102,7 +102,7 @@
 					}
 					
 					var year_start_date = current_year + "-" + fy[0];
-					if(year_start_date > get_today()) {
+					if(year_start_date > frappe.datetime.get_today()) {
 						next_year = current_year
 						current_year -= 1;
 					}
@@ -145,7 +145,7 @@
 
 				slide.get_input("company_abbr").on("change", function() {
 					if(slide.get_input("company_abbr").val().length > 5) {
-						msgprint("Company Abbreviation cannot have more than 5 characters");
+						frappe.msgprint("Company Abbreviation cannot have more than 5 characters");
 						slide.get_field("company_abbr").set_input("");
 					}
 				});
@@ -420,7 +420,7 @@
 		"Thailand": ["10-01", "09-30"],
 		"United Kingdom": ["04-01", "03-31"],
 	};
-};
+}
 
 frappe.wiz.on("before_load", function() {
 	load_erpnext_slides();
@@ -447,7 +447,7 @@
 	}
 });
 
-test_values_edu = {
+var test_values_edu = {
 	"language":"english",
 	"domain":"Education",
 	"country":"India",
diff --git a/erpnext/public/js/shopping_cart.js b/erpnext/public/js/shopping_cart.js
index 2a69deb..2c56b02 100644
--- a/erpnext/public/js/shopping_cart.js
+++ b/erpnext/public/js/shopping_cart.js
@@ -2,9 +2,11 @@
 // License: GNU General Public License v3. See license.txt
 
 // shopping cart
-frappe.provide("shopping_cart");
+frappe.provide("erpnext.shopping_cart");
+var shopping_cart = erpnext.shopping_cart;
 
 frappe.ready(function() {
+	var full_name = frappe.session.user_fullname;
 	// update user
 	if(full_name) {
 		$('.navbar li[data-label="User"] a')
@@ -34,6 +36,7 @@
 	},
 
 	update_cart: function(opts) {
+		var full_name = frappe.session.user_fullname;
 		if(!full_name || full_name==="Guest") {
 			if(localStorage) {
 				localStorage.setItem("last_visited", window.location.pathname);
@@ -110,19 +113,19 @@
 	},
 
 
-	bind_dropdown_cart_buttons: function() {
+	bind_dropdown_cart_buttons: function () {
 		$(".cart-icon").on('click', '.number-spinner button', function () {
 			var btn = $(this),
 				input = btn.closest('.number-spinner').find('input'),
 				oldValue = input.val().trim(),
 				newVal = 0;
 
-				if (btn.attr('data-dir') == 'up') {
-					newVal = parseInt(oldValue) + 1;
-				} else {
-					if (oldValue > 1) {
-						newVal = parseInt(oldValue) - 1;
-					}
+			if (btn.attr('data-dir') == 'up') {
+				newVal = parseInt(oldValue) + 1;
+			} else {
+				if (oldValue > 1) {
+					newVal = parseInt(oldValue) - 1;
+				}
 			}
 			input.val(newVal);
 			var item_code = input.attr("data-item-code");
diff --git a/erpnext/public/js/sms_manager.js b/erpnext/public/js/sms_manager.js
index d6293ea..13e226f 100644
--- a/erpnext/public/js/sms_manager.js
+++ b/erpnext/public/js/sms_manager.js
@@ -1,7 +1,7 @@
 // Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 // License: GNU General Public License v3. See license.txt
 
-function SMSManager(doc) {
+erpnext.SMSManager = function SMSManager(doc) {
 	var me = this;
 	this.setup = function() {
 		var default_msg = {
@@ -42,7 +42,7 @@
 				ref_name: ref_name
 			},
 			callback: function(r) {
-				if(r.exc) { msgprint(r.exc); return; }
+				if(r.exc) { frappe.msgprint(r.exc); return; }
 				me.number = r.message;
 				me.show_dialog();
 			}
@@ -92,7 +92,7 @@
 					},
 					callback: function(r) {
 						$(btn).done_working();
-						if(r.exc) {msgprint(r.exc); return; }
+						if(r.exc) {frappe.msgprint(r.exc); return; }
 						me.dialog.hide();
 					}
 				});
diff --git a/erpnext/public/js/stock_analytics.js b/erpnext/public/js/stock_analytics.js
index 28ff55d..74f5c03 100644
--- a/erpnext/public/js/stock_analytics.js
+++ b/erpnext/public/js/stock_analytics.js
@@ -6,7 +6,6 @@
 	init: function(wrapper, opts) {
 		var args = {
 			title: __("Stock Analytics"),
-			page: wrapper,
 			parent: $(wrapper).find('.layout-main'),
 			page: wrapper.page,
 			doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand",
@@ -120,8 +119,8 @@
 	},
 	prepare_balances: function() {
 		var me = this;
-		var from_date = dateutil.str_to_obj(this.from_date);
-		var to_date = dateutil.str_to_obj(this.to_date);
+		var from_date = frappe.datetime.str_to_obj(this.from_date);
+		var to_date = frappe.datetime.str_to_obj(this.to_date);
 		var data = frappe.report_dump.data["Stock Ledger Entry"];
 
 		this.item_warehouse = {};
@@ -130,7 +129,7 @@
 		for(var i=0, j=data.length; i<j; i++) {
 			var sl = data[i];
 			sl.posting_datetime = sl.posting_date + " " + sl.posting_time;
-			var posting_datetime = dateutil.str_to_obj(sl.posting_datetime);
+			var posting_datetime = frappe.datetime.str_to_obj(sl.posting_datetime);
 
 			if(me.is_default("warehouse") ? true : me.warehouse == sl.warehouse) {
 				var item = me.item_by_name[sl.item_code];
@@ -139,7 +138,7 @@
 				if(me.value_or_qty!="Quantity") {
 					var wh = me.get_item_warehouse(sl.warehouse, sl.item_code);
 					var valuation_method = item.valuation_method ?
-						item.valuation_method : sys_defaults.valuation_method;
+						item.valuation_method : frappe.sys_defaults.valuation_method;
 					var is_fifo = valuation_method == "FIFO";
 
 					if(sl.voucher_type=="Stock Reconciliation") {
@@ -185,7 +184,7 @@
 
 				var parent = me.parent_map[item.name];
 				while(parent) {
-					parent_group = me.item_by_name[parent];
+					var parent_group = me.item_by_name[parent];
 					$.each(me.columns, function(c, col) {
 						if (col.formatter == me.currency_formatter) {
 							parent_group[col.field] =
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index d618fbe..9650862 100644
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -248,7 +248,7 @@
 			"Delivery Note", "Purchase Receipt", "Sales Invoice"], function(i, d) {
 			frappe.ui.form.on(d, "onload", function(frm) {
 				cur_frm.set_df_property("posting_time", "description",
-					sys_defaults.time_zone);
+					frappe.sys_defaults.time_zone);
 			});
 		});
 	}
diff --git a/erpnext/public/js/utils/item_selector.js b/erpnext/public/js/utils/item_selector.js
index 87d2fc8..98a17f2 100644
--- a/erpnext/public/js/utils/item_selector.js
+++ b/erpnext/public/js/utils/item_selector.js
@@ -55,7 +55,7 @@
 		$.each(this.frm.doc.items || [], function(i, d) {
 			if(d.item_code===item_code) {
 				frappe.model.set_value(d.doctype, d.name, 'qty', d.qty + 1);
-				show_alert(__("Added {0} ({1})", [item_code, d.qty]));
+				frappe.show_alert(__("Added {0} ({1})", [item_code, d.qty]));
 				added = true;
 				return false;
 			}
@@ -69,7 +69,7 @@
 			frappe.after_ajax(function() {
 				setTimeout(function() {
 					frappe.model.set_value(d.doctype, d.name, 'qty', 1);
-					show_alert(__("Added {0} ({1})", [item_code, 1]));
+					frappe.show_alert(__("Added {0} ({1})", [item_code, 1]));
 				}, 100);
 			});
 		}
diff --git a/erpnext/public/js/utils/party.js b/erpnext/public/js/utils/party.js
index 19fe277..751d93c 100644
--- a/erpnext/public/js/utils/party.js
+++ b/erpnext/public/js/utils/party.js
@@ -57,7 +57,7 @@
 		var prev_route = frappe.get_prev_route();
 		if(prev_route[1]==='Item' && !(frm.doc.items && frm.doc.items.length)) {
 			// add row
-			item = frm.add_child('items');
+			var item = frm.add_child('items');
 			frm.refresh_field('items');
 
 			// set item
@@ -98,8 +98,8 @@
 	if(frappe.meta.get_docfield(frm.doc.doctype, "taxes") && !is_your_company_address) {
 		if(!erpnext.utils.validate_mandatory(frm, "Lead/Customer/Supplier",
 			frm.doc.customer || frm.doc.supplier || frm.doc.lead, address_field)) {
-				return;
-			}
+			return;
+		}
 
 		if(!erpnext.utils.validate_mandatory(frm, "Posting/Transaction Date",
 			frm.doc.posting_date || frm.doc.transaction_date, address_field)) {
diff --git a/erpnext/schools/doctype/assessment_plan/assessment_plan.js b/erpnext/schools/doctype/assessment_plan/assessment_plan.js
index 3c9ab80..336a32e 100644
--- a/erpnext/schools/doctype/assessment_plan/assessment_plan.js
+++ b/erpnext/schools/doctype/assessment_plan/assessment_plan.js
@@ -6,42 +6,42 @@
 cur_frm.add_fetch("supervisor", "instructor_name", "supervisor_name");
 
 frappe.ui.form.on("Assessment Plan", {
-        refresh: function(frm) {
-        if (frm.doc.docstatus == 1) {
-            frm.add_custom_button(__("Assessment Result"), function() {
-                frappe.route_options = {
-                    assessment_plan: frm.doc.name,
-                    student_group: frm.doc.student_group
-                }
-                frappe.set_route("Form", "Assessment Result Tool");
-            });
-        }
-    },
+	refresh: function(frm) {
+		if (frm.doc.docstatus == 1) {
+			frm.add_custom_button(__("Assessment Result"), function() {
+				frappe.route_options = {
+					assessment_plan: frm.doc.name,
+					student_group: frm.doc.student_group
+				}
+				frappe.set_route("Form", "Assessment Result Tool");
+			});
+		}
+	},
 
-    course: function(frm) {
-        if (frm.doc.course && frm.doc.maximum_assessment_score) {
-            frappe.call({
-                method: "erpnext.schools.api.get_assessment_criteria",
-                args: {
-                    course: frm.doc.course
-                },
-                callback: function(r) {
-                    if (r.message) {
-                        frm.doc.assessment_criteria = [];
-                        $.each(r.message, function(i, d) {
-                            var row = frappe.model.add_child(frm.doc, "Assessment Plan Criteria", "assessment_criteria");
-                            row.assessment_criteria = d.assessment_criteria;
-                            row.maximum_score = d.weightage / 100 * frm.doc.maximum_assessment_score;
-                        });
-                    }
-                    refresh_field("assessment_criteria");
+	course: function(frm) {
+		if (frm.doc.course && frm.doc.maximum_assessment_score) {
+			frappe.call({
+				method: "erpnext.schools.api.get_assessment_criteria",
+				args: {
+					course: frm.doc.course
+				},
+				callback: function(r) {
+					if (r.message) {
+						frm.doc.assessment_criteria = [];
+						$.each(r.message, function(i, d) {
+							var row = frappe.model.add_child(frm.doc, "Assessment Plan Criteria", "assessment_criteria");
+							row.assessment_criteria = d.assessment_criteria;
+							row.maximum_score = d.weightage / 100 * frm.doc.maximum_assessment_score;
+						});
+					}
+					refresh_field("assessment_criteria");
 
-                }
-            });
-        }
-    },
+				}
+			});
+		}
+	},
 
-    maximum_assessment_score: function(frm) {
-        frm.trigger("course");
-    }
+	maximum_assessment_score: function(frm) {
+		frm.trigger("course");
+	}
 });
\ No newline at end of file
diff --git a/erpnext/schools/doctype/assessment_result/assessment_result.js b/erpnext/schools/doctype/assessment_result/assessment_result.js
index 0af5adc..e75f314 100644
--- a/erpnext/schools/doctype/assessment_result/assessment_result.js
+++ b/erpnext/schools/doctype/assessment_result/assessment_result.js
@@ -6,46 +6,46 @@
 cur_frm.add_fetch("assessment_plan", "maximum_assessment_score", "maximum_score");
 
 frappe.ui.form.on("Assessment Result", {
-    assessment_plan: function(frm) {
-        frappe.call({
-            method: "erpnext.schools.api.get_assessment_details",
-            args: {
-                assessment_plan: frm.doc.assessment_plan
-            },
-            callback: function(r) {
-                if (r.message) {
-                    frm.doc.details = [];
-                    $.each(r.message, function(i, d) {
-                        var row = frappe.model.add_child(frm.doc, "Assessment Result Detail", "details");
-                        row.assessment_criteria = d.assessment_criteria;
-                        row.maximum_score = d.maximum_score;
-                    });
-                }
-                refresh_field("details");
-            }
-        });
-    }
+	assessment_plan: function(frm) {
+		frappe.call({
+			method: "erpnext.schools.api.get_assessment_details",
+			args: {
+				assessment_plan: frm.doc.assessment_plan
+			},
+			callback: function(r) {
+				if (r.message) {
+					frm.doc.details = [];
+					$.each(r.message, function(i, d) {
+						var row = frappe.model.add_child(frm.doc, "Assessment Result Detail", "details");
+						row.assessment_criteria = d.assessment_criteria;
+						row.maximum_score = d.maximum_score;
+					});
+				}
+				refresh_field("details");
+			}
+		});
+	}
 });
 
 frappe.ui.form.on("Assessment Result Detail", {
-    score: function(frm, cdt, cdn) {
-        var d  = locals[cdt][cdn];
-        if (d.score >= d.maximum_score) {
-            frappe.throw(_("Score cannot be greater than Maximum Score"));
-        }
-        else {
-            frappe.call({
-                method: "erpnext.schools.api.get_grade",
-                args: {
-                    grading_scale: frm.doc.grading_scale,
-                    percentage: ((d.score/d.maximum_score) * 100)
-                },
-                callback: function(r) {
-                    if (r.message) {
-                        frappe.model.set_value(cdt, cdn, "grade", r.message);
-                    }
-                }
-            });
-        }
-    }
+	score: function(frm, cdt, cdn) {
+		var d  = locals[cdt][cdn];
+		if (d.score >= d.maximum_score) {
+			frappe.throw(__("Score cannot be greater than Maximum Score"));
+		}
+		else {
+			frappe.call({
+				method: "erpnext.schools.api.get_grade",
+				args: {
+					grading_scale: frm.doc.grading_scale,
+					percentage: ((d.score/d.maximum_score) * 100)
+				},
+				callback: function(r) {
+					if (r.message) {
+						frappe.model.set_value(cdt, cdn, "grade", r.message);
+					}
+				}
+			});
+		}
+	}
 });
\ No newline at end of file
diff --git a/erpnext/schools/doctype/course_schedule/course_schedule.js b/erpnext/schools/doctype/course_schedule/course_schedule.js
index 6521469..7778a6e 100644
--- a/erpnext/schools/doctype/course_schedule/course_schedule.js
+++ b/erpnext/schools/doctype/course_schedule/course_schedule.js
@@ -2,15 +2,15 @@
 
 cur_frm.add_fetch("student_group", "course", "course")
 frappe.ui.form.on("Course Schedule", {
-    refresh: function(frm) {
-        if (!frm.doc.__islocal) {
-            frm.add_custom_button(__("Attendance"), function() {
-                frappe.route_options = {
-                    based_on: "Course Schedule",
-                    course_schedule: frm.doc.name
-                }
-                frappe.set_route("Form", "Student Attendance Tool");
-            });
-        }
-    }
+	refresh: function(frm) {
+		if (!frm.doc.__islocal) {
+			frm.add_custom_button(__("Attendance"), function() {
+				frappe.route_options = {
+					based_on: "Course Schedule",
+					course_schedule: frm.doc.name
+				}
+				frappe.set_route("Form", "Student Attendance Tool");
+			});
+		}
+	}
 });
\ No newline at end of file
diff --git a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
index b835ce0..f92f738 100644
--- a/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
+++ b/erpnext/schools/doctype/course_scheduling_tool/course_scheduling_tool.js
@@ -8,13 +8,13 @@
 
 frappe.ui.form.on("Course Scheduling Tool", {
 
-    refresh: function(frm) {
-        frm.disable_save();
-        frm.page.set_primary_action(__("Schedule Course"), function() {
-            frappe.call({
-                method: "schedule_course",
-                doc: frm.doc
-            })
-        });
-    }
+	refresh: function(frm) {
+		frm.disable_save();
+		frm.page.set_primary_action(__("Schedule Course"), function() {
+			frappe.call({
+				method: "schedule_course",
+				doc: frm.doc
+			})
+		});
+	}
 });
\ No newline at end of file
diff --git a/erpnext/schools/doctype/fee_structure/fee_structure.js b/erpnext/schools/doctype/fee_structure/fee_structure.js
index 391c935..fa46278 100644
--- a/erpnext/schools/doctype/fee_structure/fee_structure.js
+++ b/erpnext/schools/doctype/fee_structure/fee_structure.js
@@ -1,6 +1,6 @@
 frappe.ui.form.on("Fee Component", {
 	amount: function(frm) {
-		total_amount = 0;
+		var total_amount = 0;
 		for(var i=0;i<frm.doc.components.length;i++) {
 			total_amount += frm.doc.components[i].amount;
 		}
diff --git a/erpnext/schools/doctype/fees/fees.js b/erpnext/schools/doctype/fees/fees.js
index 7c35de4..e5a840a 100644
--- a/erpnext/schools/doctype/fees/fees.js
+++ b/erpnext/schools/doctype/fees/fees.js
@@ -2,7 +2,7 @@
 cur_frm.add_fetch("student", "title", "student_name");
 
 frappe.ui.form.on("Fees", {
-	
+
 	onload: function(frm){
 		cur_frm.set_query("academic_term",function(){
 			return{
@@ -11,7 +11,7 @@
 				}
 			};
 		});
-		
+
 		cur_frm.set_query("fee_structure",function(){
 			return{
 				"filters":{
@@ -20,7 +20,7 @@
 			};
 		});
 	},
-	
+
 	refresh: function(frm) {
 		if (frm.doc.docstatus === 1 && (frm.doc.total_amount > frm.doc.paid_amount)) {
 			frm.add_custom_button(__("Collect Fees"), function() {
@@ -42,7 +42,7 @@
 			});
 		}
 	},
-	
+
 	program: function(frm) {
 		if (frm.doc.program && frm.doc.academic_term) {
 			frappe.call({
@@ -86,9 +86,9 @@
 			});
 		}
 	},
-	
+
 	calculate_total_amount: function(frm) {
-		total_amount = 0;
+		var total_amount = 0;
 		for(var i=0;i<frm.doc.components.length;i++) {
 			total_amount += frm.doc.components[i].amount;
 		}
diff --git a/erpnext/schools/doctype/fees/fees_list.js b/erpnext/schools/doctype/fees/fees_list.js
index 6b985e3..2b5c9f6 100644
--- a/erpnext/schools/doctype/fees/fees_list.js
+++ b/erpnext/schools/doctype/fees/fees_list.js
@@ -1,8 +1,9 @@
 frappe.listview_settings['Fees'] = {
 	add_fields: [ "total_amount", "paid_amount", "due_date"],
 	get_indicator: function(doc) {
+		var { get_today } = frappe.datetime;
 		if ((doc.total_amount > doc.paid_amount) && doc.due_date < get_today()) {
-			return [__("Overdue"), "red", ["due_date,<,"+get_today()], ["due_date,<,"+get_today()]];
+			return [__("Overdue"), "red", ["due_date,<," + get_today()], ["due_date,<," + get_today()]];
 		}
 		else if (doc.total_amount > doc.paid_amount) {
 			return [__("Pending"), "orange"];
diff --git a/erpnext/schools/doctype/program_enrollment/program_enrollment.js b/erpnext/schools/doctype/program_enrollment/program_enrollment.js
index 207e6a1..b843d44 100644
--- a/erpnext/schools/doctype/program_enrollment/program_enrollment.js
+++ b/erpnext/schools/doctype/program_enrollment/program_enrollment.js
@@ -3,7 +3,7 @@
 
 cur_frm.add_fetch('fee_structure', 'total_amount', 'amount');
 
-frappe.ui.form.on("Program Enrollment", {	
+frappe.ui.form.on("Program Enrollment", {
 	onload: function(frm, cdt, cdn){
 		frm.set_query("academic_term", "fees", function(){
 			return{
@@ -12,7 +12,7 @@
 				}
 			};
 		});
-				
+
 		frm.fields_dict['fees'].grid.get_field('fee_structure').get_query = function(doc, cdt, cdn) {
 			var d = locals[cdt][cdn];
 			return {
@@ -25,7 +25,7 @@
 				return{
 					query: "erpnext.schools.doctype.program_enrollment.program_enrollment.get_program_courses",
 					filters: {
-						'program': frm.doc.program	
+						'program': frm.doc.program
 					}
 				}
 			});
@@ -48,7 +48,7 @@
 			});
 		}
 	},
-	
+
 	student_category: function() {
 		frappe.ui.form.trigger("Program Enrollment", "program");
 	},
diff --git a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.js b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.js
index 3dd00c0..bf6f3e0 100644
--- a/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.js
+++ b/erpnext/schools/doctype/program_enrollment_tool/program_enrollment_tool.js
@@ -7,7 +7,7 @@
 	"refresh": function(frm) {
 		frm.disable_save();
 	},
-	
+
 	"get_students": function(frm) {
 		frm.set_value("students",[]);
 		frappe.call({
@@ -20,13 +20,13 @@
 			}
 		})
 	},
-	
+
 	"enroll_students": function(frm) {
 		frappe.call({
 			method: "enroll_students",
 			doc:frm.doc,
 			callback: function(r) {
-					frm.set_value("students", []);
+				frm.set_value("students", []);
 			}
 		})
 	}
diff --git a/erpnext/schools/doctype/student_applicant/student_applicant.js b/erpnext/schools/doctype/student_applicant/student_applicant.js
index 9b08ee5..974d972 100644
--- a/erpnext/schools/doctype/student_applicant/student_applicant.js
+++ b/erpnext/schools/doctype/student_applicant/student_applicant.js
@@ -28,7 +28,7 @@
 
 		frappe.realtime.on("enroll_student_progress", function(data) {
 			if(data.progress) {
-				frappe.hide_msgprint(true);
+				frappe.hide_frappe.msgprint(true);
 				frappe.show_progress(__("Enrolling student"), data.progress[0],data.progress[1]);
 			}
 		})
diff --git a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js
index 11a79e1..706a148 100644
--- a/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js
+++ b/erpnext/schools/doctype/student_attendance_tool/student_attendance_tool.js
@@ -98,17 +98,6 @@
 				});
 			});
 
-		var get_present_student = function(student) {
-			return students.filter(function(s) {
-				return s.group_roll_number === group_roll_number;
-			})
-		}
-		var get_absent_student = function(group_roll_number) {
-			return students.filter(function(s) {
-				return s.group_roll_number === group_roll_number;
-			})
-		}
-
 		student_toolbar.find(".btn-mark-att")
 			.html(__('Mark Attendence'))
 			.on("click", function() {
diff --git a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.js b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.js
index dd909b2..146f11c 100644
--- a/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.js
+++ b/erpnext/schools/doctype/student_group_creation_tool/student_group_creation_tool.js
@@ -7,10 +7,10 @@
 		})
 	});
 	frappe.realtime.on("student_group_creation_progress", function(data) {
-			if(data.progress) {
-				frappe.hide_msgprint(true);
-				frappe.show_progress(__("Creating student groups"), data.progress[0],data.progress[1]);
-			}
+		if(data.progress) {
+			frappe.hide_frappe.msgprint(true);
+			frappe.show_progress(__("Creating student groups"), data.progress[0],data.progress[1]);
+		}
 	});
 });
 
diff --git a/erpnext/schools/report/absent_student_report/absent_student_report.js b/erpnext/schools/report/absent_student_report/absent_student_report.js
index 7515f22..bf2d10d 100644
--- a/erpnext/schools/report/absent_student_report/absent_student_report.js
+++ b/erpnext/schools/report/absent_student_report/absent_student_report.js
@@ -8,7 +8,7 @@
 			"fieldname":"date",
 			"label": __("Date"),
 			"fieldtype": "Date",
-			"default": get_today(),
+			"default": frappe.datetime.get_today(),
 			"reqd": 1
 		}
 	]
diff --git a/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.js b/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.js
index 51f7346..ad04356 100644
--- a/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.js
+++ b/erpnext/schools/report/student_batch_wise_attendance/student_batch_wise_attendance.js
@@ -2,11 +2,11 @@
 // For license information, please see license.txt
 
 frappe.query_reports["Student Batch-Wise Attendance"] = {
-    "filters": [{
-        "fieldname": "date",
-        "label": __("Date"),
-        "fieldtype": "Date",
-        "default": get_today(),
-        "reqd": 1
-    }]
+	"filters": [{
+		"fieldname": "date",
+		"label": __("Date"),
+		"fieldtype": "Date",
+		"default": frappe.datetime.get_today(),
+		"reqd": 1
+	}]
 }
\ No newline at end of file
diff --git a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
index 57927fa..943238e 100644
--- a/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
+++ b/erpnext/schools/report/student_monthly_attendance_sheet/student_monthly_attendance_sheet.js
@@ -3,40 +3,40 @@
 
 
 frappe.query_reports["Student Monthly Attendance Sheet"] = {
-    "filters": [{
-            "fieldname": "month",
-            "label": __("Month"),
-            "fieldtype": "Select",
-            "options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec",
-            "default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
-                "Dec"
-            ][frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth()],
-        },
-        {
-            "fieldname": "year",
-            "label": __("Year"),
-            "fieldtype": "Select",
-            "reqd": 1
-        },
-        {
-            "fieldname": "student_group",
-            "label": __("Student Group"),
-            "fieldtype": "Link",
-            "options": "Student Group",
-            "reqd": 1
-        }
-    ],
+	"filters": [{
+		"fieldname": "month",
+		"label": __("Month"),
+		"fieldtype": "Select",
+		"options": "Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug\nSep\nOct\nNov\nDec",
+		"default": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
+			"Dec"
+		][frappe.datetime.str_to_obj(frappe.datetime.get_today()).getMonth()],
+	},
+	{
+		"fieldname": "year",
+		"label": __("Year"),
+		"fieldtype": "Select",
+		"reqd": 1
+	},
+	{
+		"fieldname": "student_group",
+		"label": __("Student Group"),
+		"fieldtype": "Link",
+		"options": "Student Group",
+		"reqd": 1
+	}
+	],
 
-    "onload": function() {
-        return frappe.call({
-            method: "erpnext.schools.report.student_monthly_attendance_sheet.student_monthly_attendance_sheet.get_attendance_years",
-            callback: function(r) {
-                var year_filter = frappe.query_report_filters_by_name.year;
-                year_filter.df.options = r.message;
-                year_filter.df.default = r.message.split("\n")[0];
-                year_filter.refresh();
-                year_filter.set_input(year_filter.df.default);
-            }
-        });
-    }
+	"onload": function() {
+		return frappe.call({
+			method: "erpnext.schools.report.student_monthly_attendance_sheet.student_monthly_attendance_sheet.get_attendance_years",
+			callback: function(r) {
+				var year_filter = frappe.query_report_filters_by_name.year;
+				year_filter.df.options = r.message;
+				year_filter.df.default = r.message.split("\n")[0];
+				year_filter.refresh();
+				year_filter.set_input(year_filter.df.default);
+			}
+		});
+	}
 }
\ No newline at end of file
diff --git a/erpnext/selling/doctype/installation_note/installation_note.js b/erpnext/selling/doctype/installation_note/installation_note.js
index 9aff74a..ab35574 100644
--- a/erpnext/selling/doctype/installation_note/installation_note.js
+++ b/erpnext/selling/doctype/installation_note/installation_note.js
@@ -16,9 +16,13 @@
 // TODO commonify this code
 erpnext.selling.InstallationNote = frappe.ui.form.Controller.extend({
 	onload: function() {
-		if(!this.frm.doc.status) set_multiple(dt,dn,{ status:'Draft'});
-		if(this.frm.doc.__islocal) set_multiple(this.frm.doc.doctype, this.frm.doc.name,
-				{inst_date: get_today()});
+		if(!this.frm.doc.status) {
+			set_multiple(this.frm.doc.doctype, this.frm.doc.name, { status:'Draft'});
+		}
+		if(this.frm.doc.__islocal) {
+			set_multiple(this.frm.doc.doctype, this.frm.doc.name,
+				{inst_date: frappe.datetime.get_today()});
+		}
 
 		this.setup_queries();
 	},
diff --git a/erpnext/selling/doctype/quotation/quotation.js b/erpnext/selling/doctype/quotation/quotation.js
index 940daaa..64af35d 100644
--- a/erpnext/selling/doctype/quotation/quotation.js
+++ b/erpnext/selling/doctype/quotation/quotation.js
@@ -94,7 +94,7 @@
 
 	validate_company_and_party: function(party_field) {
 		if(!this.frm.doc.quotation_to) {
-			msgprint(__("Please select a value for {0} quotation_to {1}", [this.frm.doc.doctype, this.frm.doc.name]));
+			frappe.msgprint(__("Please select a value for {0} quotation_to {1}", [this.frm.doc.doctype, this.frm.doc.name]));
 			return false;
 		} else if (this.frm.doc.quotation_to == "Lead") {
 			return true;
@@ -149,7 +149,7 @@
 	});
 
 	dialog.fields_dict.update.$input.click(function() {
-		args = dialog.get_values();
+		var args = dialog.get_values();
 		if(!args) return;
 		return cur_frm.call({
 			method: "declare_order_lost",
@@ -157,7 +157,7 @@
 			args: args.reason,
 			callback: function(r) {
 				if(r.exc) {
-					msgprint(__("There were errors."));
+					frappe.msgprint(__("There were errors."));
 					return;
 				}
 				dialog.hide();
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 7850119..5059d5d 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -69,9 +69,9 @@
 				if (this.frm.has_perm("submit")) {
 					// close
 					if(flt(doc.per_delivered, 2) < 100 || flt(doc.per_billed) < 100) {
-							this.frm.add_custom_button(__('Close'),
-								function() { me.close_sales_order() }, __("Status"))
-						}
+						this.frm.add_custom_button(__('Close'),
+							function() { me.close_sales_order() }, __("Status"))
+					}
 				}
 
 				// delivery note
@@ -93,8 +93,8 @@
 				// material request
 				if(!doc.order_type || ["Sales", "Shopping Cart"].indexOf(doc.order_type)!==-1
 					&& flt(doc.per_delivered, 2) < 100) {
-						this.frm.add_custom_button(__('Material Request'),
-							function() { me.make_material_request() }, __("Make"));
+					this.frm.add_custom_button(__('Material Request'),
+						function() { me.make_material_request() }, __("Make"));
 				}
 
 				// make purchase order
@@ -196,7 +196,7 @@
 						title: __('Select Items to Manufacture'),
 						fields: fields,
 						primary_action: function() {
-							data = d.get_values();
+							var data = d.get_values();
 							me.frm.call({
 								method: 'make_production_orders',
 								args: {
@@ -288,7 +288,7 @@
 		});
 
 		dialog.fields_dict.make_purchase_order.$input.click(function() {
-			args = dialog.get_values();
+			var args = dialog.get_values();
 			if(!args) return;
 			dialog.hide();
 			return frappe.call({
diff --git a/erpnext/selling/doctype/sales_order/sales_order_list.js b/erpnext/selling/doctype/sales_order/sales_order_list.js
index 53b2818..d1ac6d9 100644
--- a/erpnext/selling/doctype/sales_order/sales_order_list.js
+++ b/erpnext/selling/doctype/sales_order/sales_order_list.js
@@ -2,10 +2,10 @@
 	add_fields: ["base_grand_total", "customer_name", "currency", "delivery_date", "per_delivered", "per_billed",
 		"status", "order_type"],
 	get_indicator: function(doc) {
-        if(doc.status==="Closed"){
-        	return [__("Closed"), "green", "status,=,Closed"];
+		if(doc.status==="Closed"){
+			return [__("Closed"), "green", "status,=,Closed"];
 
-        } else if (doc.order_type !== "Maintenance"
+		} else if (doc.order_type !== "Maintenance"
 			&& flt(doc.per_delivered, 2) < 100 && frappe.datetime.get_diff(doc.delivery_date) < 0) {
 			// to bill & overdue
 			return [__("Overdue"), "red", "per_delivered,<,100|delivery_date,<,Today|status,!=,Closed"];
diff --git a/erpnext/selling/page/sales_analytics/sales_analytics.js b/erpnext/selling/page/sales_analytics/sales_analytics.js
index bb47f98..5e603ba 100644
--- a/erpnext/selling/page/sales_analytics/sales_analytics.js
+++ b/erpnext/selling/page/sales_analytics/sales_analytics.js
@@ -18,7 +18,6 @@
 	init: function(wrapper) {
 		this._super({
 			title: __("Sales Analytics"),
-			page: wrapper,
 			parent: $(wrapper).find('.layout-main'),
 			page: wrapper.page,
 			doctypes: ["Item", "Item Group", "Customer", "Customer Group", "Company", "Territory",
@@ -194,13 +193,13 @@
 	},
 	prepare_balances: function() {
 		var me = this;
-		var from_date = dateutil.str_to_obj(this.from_date);
-		var to_date = dateutil.str_to_obj(this.to_date);
+		var from_date = frappe.datetime.str_to_obj(this.from_date);
+		var to_date = frappe.datetime.str_to_obj(this.to_date);
 		var is_val = this.value_or_qty == 'Value';
 
 		$.each(this.tl[this.based_on], function(i, tl) {
 			if (me.is_default('company') ? true : tl.company === me.company) {
-				var posting_date = dateutil.str_to_obj(tl.posting_date);
+				var posting_date = frappe.datetime.str_to_obj(tl.posting_date);
 				if (posting_date >= from_date && posting_date <= to_date) {
 					var item = me.item_by_name[tl[me.tree_grid.item_key]] ||
 						me.item_by_name['Not Set'];
@@ -217,7 +216,7 @@
 		$.each(this.data, function(i, item) {
 			var parent = me.parent_map[item.name];
 			while(parent) {
-				parent_group = me.item_by_name[parent];
+				var parent_group = me.item_by_name[parent];
 
 				$.each(me.columns, function(c, col) {
 					if (col.formatter == me.currency_formatter) {
diff --git a/erpnext/selling/report/quotation_trends/quotation_trends.js b/erpnext/selling/report/quotation_trends/quotation_trends.js
index 294aea0..f00ca27 100644
--- a/erpnext/selling/report/quotation_trends/quotation_trends.js
+++ b/erpnext/selling/report/quotation_trends/quotation_trends.js
@@ -3,7 +3,7 @@
 
 frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
 	frappe.query_reports["Quotation Trends"] = {
-		filters: get_filters()
+		filters: erpnext.get_sales_trends_filters()
 	}
 });
 
diff --git a/erpnext/selling/report/sales_order_trends/sales_order_trends.js b/erpnext/selling/report/sales_order_trends/sales_order_trends.js
index 863afb8..ea320d6 100644
--- a/erpnext/selling/report/sales_order_trends/sales_order_trends.js
+++ b/erpnext/selling/report/sales_order_trends/sales_order_trends.js
@@ -3,6 +3,6 @@
 
 frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
 	frappe.query_reports["Sales Order Trends"] = {
-		filters: get_filters()
+		filters: erpnext.get_sales_trends_filters()
 	}
 });
\ No newline at end of file
diff --git a/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.js b/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.js
index f1cb3b7..8987a74 100644
--- a/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.js
+++ b/erpnext/selling/report/sales_person_target_variance_item_group_wise/sales_person_target_variance_item_group_wise.js
@@ -8,7 +8,7 @@
 			label: __("Fiscal Year"),
 			fieldtype: "Link",
 			options: "Fiscal Year",
-			default: sys_defaults.fiscal_year
+			default: frappe.sys_defaults.fiscal_year
 		},
 		{
 			fieldname: "period",
diff --git a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.js b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.js
index 9258730..90244ce 100644
--- a/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.js
+++ b/erpnext/selling/report/sales_person_wise_transaction_summary/sales_person_wise_transaction_summary.js
@@ -26,7 +26,7 @@
 			fieldname:"to_date",
 			label: __("To Date"),
 			fieldtype: "Date",
-			default: get_today()
+			default: frappe.datetime.get_today()
 		},
 		{
 			fieldname:"company",
diff --git a/erpnext/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.js b/erpnext/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.js
index 7631fcb..55a13d9 100644
--- a/erpnext/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.js
+++ b/erpnext/selling/report/territory_target_variance_item_group_wise/territory_target_variance_item_group_wise.js
@@ -8,7 +8,7 @@
 			label: __("Fiscal Year"),
 			fieldtype: "Link",
 			options: "Fiscal Year",
-			default: sys_defaults.fiscal_year
+			default: frappe.sys_defaults.fiscal_year
 		},
 		{
 			fieldname: "period",
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 1fcf334..35044d7 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -90,7 +90,7 @@
 		if(!item.item_code) {
 			frappe.throw(__("Please enter Item Code to get batch no"));
 		} else {
-			filters = {
+			var filters = {
 				'item_code': item.item_code,
 				'posting_date': me.frm.doc.posting_date || frappe.datetime.nowdate(),
 			}
@@ -180,7 +180,7 @@
 					__(frappe.meta.get_label(this.frm.doc.doctype, "total_commission",
 						this.frm.doc.name)) + " > " +
 					__(frappe.meta.get_label(this.frm.doc.doctype, "base_net_total", this.frm.doc.name)));
-				msgprint(msg);
+				frappe.msgprint(msg);
 				throw msg;
 			}
 
@@ -219,7 +219,7 @@
 					serial_no: item.serial_no || ""
 				},
 				callback:function(r){
-					if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
+					if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
 						me.batch_no(doc, cdt, cdn);
 					}
 				}
@@ -241,7 +241,7 @@
 			if(this.frm.doc.commission_rate > 100) {
 				var msg = __(frappe.meta.get_label(this.frm.doc.doctype, "commission_rate", this.frm.doc.name)) +
 					" " + __("cannot be greater than 100");
-				msgprint(msg);
+				frappe.msgprint(msg);
 				throw msg;
 			}
 
@@ -253,13 +253,13 @@
 	calculate_contribution: function() {
 		var me = this;
 		$.each(this.frm.doc.doctype.sales_team || [], function(i, sales_person) {
-				frappe.model.round_floats_in(sales_person);
-				if(sales_person.allocated_percentage) {
-					sales_person.allocated_amount = flt(
-						me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
-						precision("allocated_amount", sales_person));
-				}
-			});
+			frappe.model.round_floats_in(sales_person);
+			if(sales_person.allocated_percentage) {
+				sales_person.allocated_amount = flt(
+					me.frm.doc.base_net_total * sales_person.allocated_percentage / 100.0,
+					precision("allocated_amount", sales_person));
+			}
+		});
 	},
 
 	shipping_rule: function() {
@@ -282,16 +282,16 @@
 		var item = frappe.get_doc(cdt, cdn);
 
 		if(item.warehouse && item.item_code && item.batch_no) {
-		    return this.frm.call({
-		        method: "erpnext.stock.get_item_details.get_batch_qty",
-		        child: item,
-		        args: {
-		           "batch_no": item.batch_no,
-		           "warehouse": item.warehouse,
-		           "item_code": item.item_code
-		        },
-		         "fieldname": "actual_batch_qty"
-		    });
+			return this.frm.call({
+				method: "erpnext.stock.get_item_details.get_batch_qty",
+				child: item,
+				args: {
+					"batch_no": item.batch_no,
+					"warehouse": item.warehouse,
+					"item_code": item.item_code
+				},
+				"fieldname": "actual_batch_qty"
+			});
 		}
 	},
 
@@ -305,15 +305,15 @@
 		if ((doc.packed_items || []).length) {
 			$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(true);
 
-			if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
-				help_msg = "<div class='alert alert-warning'>" +
+			if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
+				var help_msg = "<div class='alert alert-warning'>" +
 					__("For 'Product Bundle' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Product Bundle' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.")+
 				"</div>";
 				frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = help_msg;
 			}
 		} else {
 			$(cur_frm.fields_dict.packing_list.row.wrapper).toggle(false);
-			if (inList(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
+			if (in_list(['Delivery Note', 'Sales Invoice'], doc.doctype)) {
 				frappe.meta.get_docfield(doc.doctype, 'product_bundle_help', doc.name).options = '';
 			}
 		}
@@ -339,7 +339,7 @@
 
 	margin_rate_or_amount: function(doc, cdt, cdn) {
 		// calculated the revised total margin and rate on margin rate changes
-		item = locals[cdt][cdn];
+		var item = locals[cdt][cdn];
 		this.apply_pricing_rule_on_item(item)
 		this.calculate_taxes_and_totals();
 		cur_frm.refresh_fields();
@@ -347,7 +347,7 @@
 
 	margin_type: function(doc, cdt, cdn){
 		// calculate the revised total margin and rate on margin type changes
-		item = locals[cdt][cdn];
+		var item = locals[cdt][cdn];
 		if(!item.margin_type) {
 			frappe.model.set_value(cdt, cdn, "margin_rate_or_amount", 0);
 		} else {
@@ -369,7 +369,7 @@
 						$.each(frm.doc["items"] || [], function(i, row) {
 							if(r.message) {
 								frappe.model.set_value(row.doctype, row.name, "cost_center", r.message);
-								msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
+								frappe.msgprint(__("Cost Center For Item with Item Code '"+row.item_name+"' has been Changed to "+ r.message));
 							}
 						})
 					}
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index ca60b11..9e8bbe5 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -47,31 +47,32 @@
 				fieldname: "company_name",
 				label: __("Please re-type company name to confirm"),
 				reqd: 1,
-				description: __("Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.")},
-					function(data) {
-						if(data.company_name !== frm.doc.name) {
-							frappe.msgprint("Company name not same");
-							return;
-						}
-						frappe.call({
-							method: "erpnext.setup.doctype.company.delete_company_transactions.delete_company_transactions",
-							args: {
-								company_name: data.company_name
-							},
-							freeze: true,
-							callback: function(r, rt) {
-								if(!r.exc)
-									frappe.msgprint(__("Successfully deleted all transactions related to this company!"));
-							},
-							onerror: function() {
-								frappe.msgprint(__("Wrong Password"));
-							}
-						});
-					}, __("Delete all the Transactions for this Company"), __("Delete")
-				);
-				d.get_primary_btn().addClass("btn-danger");
-			}
-		);
+				description: __("Please make sure you really want to delete all the transactions for this company. Your master data will remain as it is. This action cannot be undone.")
+			},
+			function(data) {
+				if(data.company_name !== frm.doc.name) {
+					frappe.msgprint("Company name not same");
+					return;
+				}
+				frappe.call({
+					method: "erpnext.setup.doctype.company.delete_company_transactions.delete_company_transactions",
+					args: {
+						company_name: data.company_name
+					},
+					freeze: true,
+					callback: function(r, rt) {
+						if(!r.exc)
+							frappe.msgprint(__("Successfully deleted all transactions related to this company!"));
+					},
+					onerror: function() {
+						frappe.msgprint(__("Wrong Password"));
+					}
+				});
+			},
+			__("Delete all the Transactions for this Company"), __("Delete")
+			);
+			d.get_primary_btn().addClass("btn-danger");
+		});
 	}
 });
 
@@ -106,7 +107,7 @@
 	});
 
 	dialog.fields_dict.update.$input.click(function() {
-		args = dialog.get_values();
+		var args = dialog.get_values();
 		if(!args) return;
 		return frappe.call({
 			method: "erpnext.setup.doctype.company.company.replace_abbr",
@@ -117,7 +118,7 @@
 			},
 			callback: function(r) {
 				if(r.exc) {
-					msgprint(__("There were errors."));
+					frappe.msgprint(__("There were errors."));
 					return;
 				} else {
 					cur_frm.set_value("abbr", args.new_abbr);
@@ -154,7 +155,7 @@
 		erpnext.company.set_custom_query(frm, v);
 	});
 
-	if (sys_defaults.auto_accounting_for_stock) {
+	if (frappe.sys_defaults.auto_accounting_for_stock) {
 		$.each([
 			["stock_adjustment_account", 
 				{"root_type": "Expense", "account_type": "Stock Adjustment"}],
diff --git a/erpnext/setup/doctype/email_digest/email_digest.js b/erpnext/setup/doctype/email_digest/email_digest.js
index d822a75..fcd0b0e 100644
--- a/erpnext/setup/doctype/email_digest/email_digest.js
+++ b/erpnext/setup/doctype/email_digest/email_digest.js
@@ -23,21 +23,21 @@
 		});
 	}, "fa fa-eye-open", "btn-default");
 
-	if(user==="Administrator") {
+	if(frappe.session.user==="Administrator") {
 		cur_frm.add_custom_button(__('Send Now'), function() {
 			doc = locals[dt][dn];
 			if(doc.__unsaved != 1) {
 				return $c_obj(doc, 'send', '', function(r, rt) {
 					if(r.exc) {
-						msgprint(err_msg);
+						frappe.msgprint(err_msg);
 						console.log(r.exc);
 					} else {
 						//console.log(arguments);
-						msgprint(__('Message Sent'));
+						frappe.msgprint(__('Message Sent'));
 					}
 				});
 			} else {
-				msgprint(save_msg);
+				frappe.msgprint(save_msg);
 			}
 		}, "fa fa-envelope", "btn-default");
 	}
@@ -47,7 +47,7 @@
 	// Get user list
 	return $c_obj(doc, 'get_users', '', function(r, rt) {
 		if(r.exc) {
-			msgprint(r.exc);
+			frappe.msgprint(r.exc);
 		} else {
 			// Open a dialog and display checkboxes against email addresses
 			doc = locals[dt][dn];
diff --git a/erpnext/setup/doctype/global_defaults/global_defaults.js b/erpnext/setup/doctype/global_defaults/global_defaults.js
index 1dd456f..a78461d 100644
--- a/erpnext/setup/doctype/global_defaults/global_defaults.js
+++ b/erpnext/setup/doctype/global_defaults/global_defaults.js
@@ -4,7 +4,7 @@
 $.extend(cur_frm.cscript, {
 	validate: function(doc, cdt, cdn) {
 		return $c_obj(doc, 'get_defaults', '', function(r, rt){
-			sys_defaults = r.message;
+			frappe.sys_defaults = r.message;
 		});
 	}
 });
diff --git a/erpnext/stock/dashboard/item_dashboard.js b/erpnext/stock/dashboard/item_dashboard.js
index 1f69ad1..e949989 100644
--- a/erpnext/stock/dashboard/item_dashboard.js
+++ b/erpnext/stock/dashboard/item_dashboard.js
@@ -171,7 +171,7 @@
 				var doc = frappe.model.get_new_doc('Stock Entry');
 				doc.from_warehouse = dialog.get_value('source');
 				doc.to_warehouse = dialog.get_value('target');
-				row = frappe.model.add_child(doc, 'items');
+				var row = frappe.model.add_child(doc, 'items');
 				row.item_code = dialog.get_value('item_code');
 				row.f_warehouse = dialog.get_value('target');
 				row.t_warehouse = dialog.get_value('target');
diff --git a/erpnext/stock/doctype/batch/batch.js b/erpnext/stock/doctype/batch/batch.js
index 8a3906e..1822a06 100644
--- a/erpnext/stock/doctype/batch/batch.js
+++ b/erpnext/stock/doctype/batch/batch.js
@@ -66,31 +66,31 @@
 					rows.find('.btn-move').on('click', function() {
 						var $btn = $(this);
 						frappe.prompt({
-								fieldname: 'to_warehouse',
-								label: __('To Warehouse'),
-								fieldtype: 'Link',
-								options: 'Warehouse'
-							},
-							(data) => {
-								frappe.call({
-									method: 'erpnext.stock.doctype.stock_entry.stock_entry_utils.make_stock_entry',
-									args: {
-										item_code: frm.doc.item,
-										batch_no: frm.doc.name,
-										qty: $btn.attr('data-qty'),
-										from_warehouse: $btn.attr('data-warehouse'),
-										to_warehouse: data.to_warehouse
-									},
-									callback: (r) => {
-										frappe.show_alert(__('Stock Entry {0} created',
-											['<a href="#Form/Stock Entry/'+r.message.name+'">' + r.message.name+ '</a>']));
-										frm.refresh();
-									},
-								});
-							},
-							__('Select Target Warehouse'),
-							__('Move')
-						)
+							fieldname: 'to_warehouse',
+							label: __('To Warehouse'),
+							fieldtype: 'Link',
+							options: 'Warehouse'
+						},
+						(data) => {
+							frappe.call({
+								method: 'erpnext.stock.doctype.stock_entry.stock_entry_utils.make_stock_entry',
+								args: {
+									item_code: frm.doc.item,
+									batch_no: frm.doc.name,
+									qty: $btn.attr('data-qty'),
+									from_warehouse: $btn.attr('data-warehouse'),
+									to_warehouse: data.to_warehouse
+								},
+								callback: (r) => {
+									frappe.show_alert(__('Stock Entry {0} created',
+										['<a href="#Form/Stock Entry/'+r.message.name+'">' + r.message.name+ '</a>']));
+									frm.refresh();
+								},
+							});
+						},
+						__('Select Target Warehouse'),
+						__('Move')
+						);
 					});
 
 					// split - ask for new qty and batch ID (optional)
@@ -98,34 +98,34 @@
 					rows.find('.btn-split').on('click', function() {
 						var $btn = $(this);
 						frappe.prompt([{
-								fieldname: 'qty',
-								label: __('New Batch Qty'),
-								fieldtype: 'Float',
-								'default': $btn.attr('data-qty')
-							},
-							{
-								fieldname: 'new_batch_id',
-								label: __('New Batch ID (Optional)'),
-								fieldtype: 'Data',
-							}],
-							(data) => {
-								frappe.call({
-									method: 'erpnext.stock.doctype.batch.batch.split_batch',
-									args: {
-										item_code: frm.doc.item,
-										batch_no: frm.doc.name,
-										qty: data.qty,
-										warehouse: $btn.attr('data-warehouse'),
-										new_batch_id: data.new_batch_id
-									},
-									callback: (r) => {
-										frm.refresh();
-									},
-								});
-							},
-							__('Split Batch'),
-							__('Split')
-						)
+							fieldname: 'qty',
+							label: __('New Batch Qty'),
+							fieldtype: 'Float',
+							'default': $btn.attr('data-qty')
+						},
+						{
+							fieldname: 'new_batch_id',
+							label: __('New Batch ID (Optional)'),
+							fieldtype: 'Data',
+						}],
+						(data) => {
+							frappe.call({
+								method: 'erpnext.stock.doctype.batch.batch.split_batch',
+								args: {
+									item_code: frm.doc.item,
+									batch_no: frm.doc.name,
+									qty: data.qty,
+									warehouse: $btn.attr('data-warehouse'),
+									new_batch_id: data.new_batch_id
+								},
+								callback: (r) => {
+									frm.refresh();
+								},
+							});
+						},
+						__('Split Batch'),
+						__('Split')
+						);
 					})
 
 					frm.dashboard.show();
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index eb8a750..faa1fac 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -38,7 +38,7 @@
 			}
 		});
 
-		if (sys_defaults.auto_accounting_for_stock) {
+		if (frappe.sys_defaults.auto_accounting_for_stock) {
 			frm.set_query('expense_account', 'items', function(doc, cdt, cdn) {
 				return {
 					filters: {
@@ -166,7 +166,7 @@
 		erpnext.stock.delivery_note.set_print_hide(doc, dt, dn);
 
 		// unhide expense_account and cost_center is auto_accounting_for_stock enabled
-		var aii_enabled = cint(sys_defaults.auto_accounting_for_stock)
+		var aii_enabled = cint(frappe.sys_defaults.auto_accounting_for_stock)
 		this.frm.fields_dict["items"].grid.set_column_disp(["expense_account", "cost_center"], aii_enabled);
 	},
 
diff --git a/erpnext/stock/doctype/item/item.js b/erpnext/stock/doctype/item/item.js
index 86c6959..40ad55a 100644
--- a/erpnext/stock/doctype/item/item.js
+++ b/erpnext/stock/doctype/item/item.js
@@ -143,7 +143,7 @@
 frappe.ui.form.on('Item Reorder', {
 	reorder_levels_add: function(frm, cdt, cdn) {
 		var row = frappe.get_doc(cdt, cdn);
-		type = frm.doc.default_material_request_type
+		var type = frm.doc.default_material_request_type
 		row.material_request_type = (type == 'Material Transfer')? 'Transfer' : type;
 	}
 })
@@ -254,8 +254,8 @@
 
 	weight_to_validate: function(frm){
 		if((frm.doc.nett_weight || frm.doc.gross_weight) && !frm.doc.weight_uom) {
-			msgprint(__('Weight is mentioned,\nPlease mention "Weight UOM" too'));
-			validated = 0;
+			frappe.msgprint(__('Weight is mentioned,\nPlease mention "Weight UOM" too'));
+			frappe.validated = 0;
 		}
 	},
 
@@ -326,7 +326,7 @@
 		});
 
 		d.set_primary_action(__("Make"), function() {
-			args = d.get_values();
+			var args = d.get_values();
 			if(!args) return;
 			frappe.call({
 				method:"erpnext.controllers.item_variant.get_variant",
@@ -338,14 +338,14 @@
 					// returns variant item
 					if (r.message) {
 						var variant = r.message;
-						var msgprint_dialog = frappe.msgprint(__("Item Variant {0} already exists with same attributes",
+						frappe.msgprint_dialog = frappe.msgprint(__("Item Variant {0} already exists with same attributes",
 							[repl('<a href="#Form/Item/%(item_encoded)s" class="strong variant-click">%(item)s</a>', {
 								item_encoded: encodeURIComponent(variant),
 								item: variant
 							})]
 						));
-						msgprint_dialog.hide_on_page_refresh = true;
-						msgprint_dialog.$wrapper.find(".variant-click").on("click", function() {
+						frappe.msgprint_dialog.hide_on_page_refresh = true;
+						frappe.msgprint_dialog.$wrapper.find(".variant-click").on("click", function() {
 							d.hide();
 						});
 					} else {
diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
index 3ae61b9..edc3444 100644
--- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
+++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.js
@@ -8,7 +8,7 @@
 	setup: function() {
 		var me = this;
 		this.frm.fields_dict.purchase_receipts.grid.get_field('receipt_document').get_query =
-			function(doc, cdt ,cdn) {
+			function (doc, cdt, cdn) {
 				var d = locals[cdt][cdn]
 
 				var filters = [
@@ -16,15 +16,15 @@
 					[d.receipt_document_type, 'company', '=', me.frm.doc.company],
 				]
 
-				if(d.receipt_document_type == "Purchase Invoice") {
+				if (d.receipt_document_type == "Purchase Invoice") {
 					filters.push(["Purchase Invoice", "update_stock", "=", "1"])
 				}
 
-				if(!me.frm.doc.company) msgprint(__("Please enter company first"));
+				if (!me.frm.doc.company) frappe.msgprint(__("Please enter company first"));
 				return {
-					filters:filters
+					filters: filters
 				}
-		};
+			};
 
 		this.frm.add_fetch("receipt_document", "supplier", "supplier");
 		this.frm.add_fetch("receipt_document", "posting_date", "posting_date");
@@ -33,32 +33,33 @@
 	},
 
 	refresh: function(frm) {
-		var help_content = [
-			'<br><br>',
-			'<table class="table table-bordered" style="background-color: #f9f9f9;">',
-				'<tr><td>',
-					'<h4><i class="fa fa-hand-right"></i> ',
-						__('Notes'),
-					':</h4>',
-					'<ul>',
-						'<li>',
-							__("Charges will be distributed proportionately based on item qty or amount, as per your selection"),
-						'</li>',
-						'<li>',
-							__("Remove item if charges is not applicable to that item"),
-						'</li>',
-						'<li>',
-							__("Charges are updated in Purchase Receipt against each item"),
-						'</li>',
-						'<li>',
-							__("Item valuation rate is recalculated considering landed cost voucher amount"),
-						'</li>',
-						'<li>',
-							__("Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts"),
-						'</li>',
-					'</ul>',
-				'</td></tr>',
-			'</table>'].join("\n");
+		var help_content =
+			`<br><br>
+			<table class="table table-bordered" style="background-color: #f9f9f9;">
+				<tr><td>
+					<h4>
+						<i class="fa fa-hand-right"></i> 
+						${__("Notes")}:
+					</h4>
+					<ul>
+						<li>
+							${__("Charges will be distributed proportionately based on item qty or amount, as per your selection")}
+						</li>
+						<li>
+							${__("Remove item if charges is not applicable to that item")}
+						</li>
+						<li>
+							${__("Charges are updated in Purchase Receipt against each item")}
+						</li>
+						<li>
+							${__("Item valuation rate is recalculated considering landed cost voucher amount")}
+						</li>
+						<li>
+							${__("Stock Ledger Entries and GL Entries are reposted for the selected Purchase Receipts")}
+						</li>
+					</ul>
+				</td></tr>
+			</table>`;
 
 		set_field_options("landed_cost_help", help_content);
 	},
@@ -66,7 +67,7 @@
 	get_items_from_purchase_receipts: function() {
 		var me = this;
 		if(!this.frm.doc.purchase_receipts.length) {
-			msgprint(__("Please enter Purchase Receipt first"));
+			frappe.msgprint(__("Please enter Purchase Receipt first"));
 		} else {
 			return this.frm.call({
 				doc: me.frm.doc,
@@ -84,7 +85,7 @@
 	},
 
 	set_total_taxes_and_charges: function() {
-		total_taxes_and_charges = 0.0;
+		var total_taxes_and_charges = 0.0;
 		$.each(this.frm.doc.taxes || [], function(i, d) {
 			total_taxes_and_charges += flt(d.amount)
 		});
diff --git a/erpnext/stock/doctype/material_request/material_request.js b/erpnext/stock/doctype/material_request/material_request.js
index b386a47..b95d0e7 100644
--- a/erpnext/stock/doctype/material_request/material_request.js
+++ b/erpnext/stock/doctype/material_request/material_request.js
@@ -30,14 +30,13 @@
 });
 
 frappe.ui.form.on("Material Request Item", {
-	"qty": function(frm, doctype, name) {
-			var d = locals[doctype][name];
-			if (flt(d.qty) < flt(d.min_order_qty)) {
-				frappe.msgprint(__("Warning: Material Requested Qty is less than Minimum Order Qty"));
-			}
+	"qty": function (frm, doctype, name) {
+		var d = locals[doctype][name];
+		if (flt(d.qty) < flt(d.min_order_qty)) {
+			frappe.msgprint(__("Warning: Material Requested Qty is less than Minimum Order Qty"));
 		}
 	}
-);
+});
 
 erpnext.buying.MaterialRequestController = erpnext.buying.BuyingController.extend({
 	onload: function(doc) {
@@ -140,7 +139,7 @@
 						return {filters: { docstatus:1 }}
 					}},
 				{"fieldname":"warehouse", "fieldtype":"Link", "label":__("Warehouse"),
-					options:"Warehouse", reqd: 1, label:"For Warehouse"},
+					options:"Warehouse", reqd: 1},
 				{"fieldname":"fetch_exploded", "fieldtype":"Check",
 					"label":__("Fetch exploded BOM (including sub-assemblies)"), "default":1},
 				{fieldname:"fetch", "label":__("Get Items from BOM"), "fieldtype":"Button"}
diff --git a/erpnext/stock/doctype/packing_slip/packing_slip.js b/erpnext/stock/doctype/packing_slip/packing_slip.js
index 2ea1ba9..69d12eb 100644
--- a/erpnext/stock/doctype/packing_slip/packing_slip.js
+++ b/erpnext/stock/doctype/packing_slip/packing_slip.js
@@ -48,14 +48,14 @@
 cur_frm.cscript.validate_case_nos = function(doc) {
 	doc = locals[doc.doctype][doc.name];
 	if(cint(doc.from_case_no)==0) {
-		msgprint(__("Case No. cannot be 0"))
-		validated = false;
+		frappe.msgprint(__("Case No. cannot be 0"))
+		frappe.validated = false;
 	} else if(!cint(doc.to_case_no)) {
 		doc.to_case_no = doc.from_case_no;
 		refresh_field('to_case_no');
 	} else if(cint(doc.to_case_no) < cint(doc.from_case_no)) {
-		msgprint(__("'To Case No.' cannot be less than 'From Case No.'"));
-		validated = false;
+		frappe.msgprint(__("'To Case No.' cannot be less than 'From Case No.'"));
+		frappe.validated = false;
 	}
 }
 
@@ -75,14 +75,14 @@
 	for(var i=0; i<ps_detail.length; i++) {
 		for(var j=0; j<ps_detail.length; j++) {
 			if(i!=j && ps_detail[i].item_code && ps_detail[i].item_code==ps_detail[j].item_code) {
-				msgprint(__("You have entered duplicate items. Please rectify and try again."));
-				validated = false;
+				frappe.msgprint(__("You have entered duplicate items. Please rectify and try again."));
+				frappe.validated = false;
 				return;
 			}
 		}
 		if(flt(ps_detail[i].qty)<=0) {
-			msgprint(__("Invalid quantity specified for item {0}. Quantity should be greater than 0.", [ps_detail[i].item_code]));
-			validated = false;
+			frappe.msgprint(__("Invalid quantity specified for item {0}. Quantity should be greater than 0.", [ps_detail[i].item_code]));
+			frappe.validated = false;
 		}
 	}
 }
@@ -97,15 +97,15 @@
 	for(var i=0; i<ps_detail.length; i++) {
 		var item = ps_detail[i];
 		if(item.weight_uom != doc.net_weight_uom) {
-			msgprint(__("Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM."));
-			validated = false;
+			frappe.msgprint(__("Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM."));
+			frappe.validated = false;
 		}
 		net_weight_pkg += flt(item.net_weight) * flt(item.qty);
 	}
 
-	doc.net_weight_pkg = _round(net_weight_pkg, 2);
+	doc.net_weight_pkg = roundNumber(net_weight_pkg, 2);
 	if(!flt(doc.gross_weight_pkg)) {
-		doc.gross_weight_pkg = doc.net_weight_pkg
+		doc.gross_weight_pkg = doc.net_weight_pkg;
 	}
 	refresh_many(['net_weight_pkg', 'net_weight_uom', 'gross_weight_uom', 'gross_weight_pkg']);
 }
@@ -113,8 +113,8 @@
 var make_row = function(title,val,bold){
 	var bstart = '<b>'; var bend = '</b>';
 	return '<tr><td class="datalabelcell">'+(bold?bstart:'')+title+(bold?bend:'')+'</td>'
-	 +'<td class="datainputcell" style="text-align:left;">'+ val +'</td>'
-	 +'</tr>'
+	+'<td class="datainputcell" style="text-align:left;">'+ val +'</td>'
+	+'</tr>'
 }
 
 cur_frm.pformat.net_weight_pkg= function(doc){
diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
index 5c97e7c..d5986db 100644
--- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
+++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.js
@@ -53,9 +53,9 @@
 		}
 
 		if(!this.frm.doc.is_return && this.frm.doc.status!="Closed") {
-			if(this.frm.doc.docstatus==0) {
+			if (this.frm.doc.docstatus == 0) {
 				this.frm.add_custom_button(__('Purchase Order'),
-					function() {
+					function () {
 						erpnext.utils.map_current_doc({
 							method: "erpnext.buying.doctype.purchase_order.purchase_order.make_purchase_receipt",
 							source_doctype: "Purchase Order",
@@ -70,7 +70,7 @@
 								company: me.frm.doc.company
 							}
 						})
-				}, __("Get items from"));
+					}, __("Get items from"));
 			}
 
 			if(this.frm.doc.docstatus == 1 && this.frm.doc.status!="Closed") {
@@ -153,7 +153,7 @@
 		}
 	}
 	else
-		msgprint(__("Please enter Item Code."));
+		frappe.msgprint(__("Please enter Item Code."));
 }
 
 cur_frm.cscript.select_print_heading = function(doc, cdt, cdn) {
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 4e381ea..6303df1 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -26,7 +26,7 @@
 				if (in_list(["Material Transfer for Manufacture", "Manufacture", "Repack", "Subcontract"], doc.purpose)) {
 					var filters = {
 						'item_code': item.item_code,
-						'posting_date': frm.doc.posting_date || nowdate()
+						'posting_date': frm.doc.posting_date || frappe.datetime.nowdate()
 					}
 				} else {
 					var filters = {
@@ -143,7 +143,7 @@
 	item_code: function(frm, cdt, cdn) {
 		var d = locals[cdt][cdn];
 		if(d.item_code) {
-			args = {
+			var args = {
 				'item_code'			: d.item_code,
 				'warehouse'			: cstr(d.s_warehouse) || cstr(d.t_warehouse),
 				'transfer_qty'		: d.transfer_qty,
@@ -173,7 +173,7 @@
 	expense_account: function(frm, cdt, cdn) {
 		erpnext.utils.copy_value_in_all_row(frm.doc, cdt, cdn, "items", "expense_account");
 	},
-	cost_center: function(doc, cdt, cdn) {
+	cost_center: function(frm, cdt, cdn) {
 		erpnext.utils.copy_value_in_all_row(frm.doc, cdt, cdn, "items", "cost_center");
 	}
 });
@@ -216,14 +216,14 @@
 		if(cint(frappe.defaults.get_default("auto_accounting_for_stock"))) {
 			this.frm.add_fetch("company", "stock_adjustment_account", "expense_account");
 			this.frm.fields_dict.items.grid.get_field('expense_account').get_query =
-					function() {
-				return {
-					filters: {
-						"company": me.frm.doc.company,
-						"is_group": 0
+				function() {
+					return {
+						filters: {
+							"company": me.frm.doc.company,
+							"is_group": 0
+						}
 					}
 				}
-			}
 		}
 
 		this.frm.set_indicator_formatter('item_code',
@@ -243,9 +243,9 @@
 			}
 		});
 
-		if(!this.item_selector && false) {
-			this.item_selector = new erpnext.ItemSelector({frm: this.frm});
-		}
+		// if(!this.item_selector && false) {
+		// 	this.item_selector = new erpnext.ItemSelector({frm: this.frm});
+		// }
 	},
 
 	refresh: function() {
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry_list.js b/erpnext/stock/doctype/stock_entry/stock_entry_list.js
index 0e5aeb7..69d21dd 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry_list.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry_list.js
@@ -4,7 +4,7 @@
 	column_render: {
 		"from_warehouse": function(doc) {
 			var html = "";
-	 		if(doc.from_warehouse) {
+			if(doc.from_warehouse) {
 				html += '<span class="filterable h6"\
 					data-filter="from_warehouse,=,'+doc.from_warehouse+'">'+doc.from_warehouse+' </span>';
 			}
diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
index 636b2af..a6d5383 100644
--- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
+++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.js
@@ -133,7 +133,7 @@
 	set_default_expense_account: function() {
 		var me = this;
 		if(this.frm.doc.company) {
-			if (sys_defaults.auto_accounting_for_stock && !this.frm.doc.expense_account) {
+			if (frappe.sys_defaults.auto_accounting_for_stock && !this.frm.doc.expense_account) {
 				return this.frm.call({
 					method: "erpnext.accounts.utils.get_company_default",
 					args: {
@@ -155,7 +155,7 @@
 
 		this.setup_posting_date_time_check();
 
-		if (sys_defaults.auto_accounting_for_stock) {
+		if (frappe.sys_defaults.auto_accounting_for_stock) {
 			this.frm.add_fetch("company", "stock_adjustment_account", "expense_account");
 			this.frm.add_fetch("company", "cost_center", "cost_center");
 
diff --git a/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.js b/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.js
index eeeb9ad..a7d7149 100644
--- a/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.js
+++ b/erpnext/stock/report/batch_item_expiry_status/batch_item_expiry_status.js
@@ -8,7 +8,7 @@
 			"label": __("From Date"),
 			"fieldtype": "Date",
 			"width": "80",
-			"default": sys_defaults.year_start_date,
+			"default": frappe.sys_defaults.year_start_date,
 		},
 		{
 			"fieldname":"to_date",
diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.js b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.js
index a60b3eb..b23c908 100644
--- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.js
+++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.js
@@ -8,7 +8,7 @@
 			"label": __("From Date"),
 			"fieldtype": "Date",
 			"width": "80",
-			"default": sys_defaults.year_start_date,
+			"default": frappe.sys_defaults.year_start_date,
 		},
 		{
 			"fieldname":"to_date",
diff --git a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
index 0e12907..ade004c 100644
--- a/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
+++ b/erpnext/stock/report/delivery_note_trends/delivery_note_trends.js
@@ -3,7 +3,7 @@
 
 frappe.require("assets/erpnext/js/sales_trends_filters.js", function() {
 	frappe.query_reports["Delivery Note Trends"] = {
-		filters: get_filters()
+		filters: erpnext.get_sales_trends_filters()
 	}
 });
 
diff --git a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.js b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.js
index ba61ee5..2482cf8 100644
--- a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.js
+++ b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.js
@@ -7,13 +7,13 @@
 			"fieldname":"from_date",
 			"label": __("From Date"),
 			"fieldtype": "Date",
-			"default": sys_defaults.year_start_date
+			"default": frappe.sys_defaults.year_start_date
 		},
 		{
 			"fieldname":"to_date",
 			"label": __("To Date"),
 			"fieldtype": "Date",
-			"default": get_today()
+			"default": frappe.datetime.get_today()
 		}
 	]
 }
\ No newline at end of file
diff --git a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
index d94b49e..63d53fb 100644
--- a/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
+++ b/erpnext/stock/report/purchase_receipt_trends/purchase_receipt_trends.js
@@ -3,7 +3,7 @@
 
 frappe.require("assets/erpnext/js/purchase_trends_filters.js", function() {
 	frappe.query_reports["Purchase Receipt Trends"] = {
-		filters: get_filters()
+		filters: erpnext.get_sales_trends_filters()
 	}
 });
 
diff --git a/erpnext/stock/report/stock_balance/stock_balance.js b/erpnext/stock/report/stock_balance/stock_balance.js
index 36d018c..90f4de0 100644
--- a/erpnext/stock/report/stock_balance/stock_balance.js
+++ b/erpnext/stock/report/stock_balance/stock_balance.js
@@ -9,7 +9,7 @@
 			"fieldtype": "Date",
 			"width": "80",
 			"reqd": 1,
-			"default": sys_defaults.year_start_date,
+			"default": frappe.sys_defaults.year_start_date,
 		},
 		{
 			"fieldname":"to_date",
diff --git a/erpnext/support/page/support_analytics/support_analytics.js b/erpnext/support/page/support_analytics/support_analytics.js
index 01b7b48..bca5987 100644
--- a/erpnext/support/page/support_analytics/support_analytics.js
+++ b/erpnext/support/page/support_analytics/support_analytics.js
@@ -19,7 +19,6 @@
 	init: function(wrapper) {
 		this._super({
 			title: __("Support Analtyics"),
-			page: wrapper,
 			parent: $(wrapper).find('.layout-main'),
 			page: wrapper.page,
 			doctypes: ["Issue", "Fiscal Year"],
@@ -67,7 +66,7 @@
 
 
 		$.each(frappe.report_dump.data["Issue"], function(i, d) {
-			var dateobj = dateutil.str_to_obj(d.creation);
+			var dateobj = frappe.datetime.str_to_obj(d.creation);
 			var date = d.creation.split(" ")[0];
 			var col = me.column_map[date];
 			if(col) {
@@ -77,17 +76,17 @@
 					total_closed[col.field] = flt(total_closed[col.field]) + 1;
 
 					days_to_close[col.field] = flt(days_to_close[col.field])
-						+ dateutil.get_diff(d.resolution_date, d.creation);
+						+ frappe.datetime.get_diff(d.resolution_date, d.creation);
 
 					hours_to_close[col.field] = flt(hours_to_close[col.field])
-						+ dateutil.get_hour_diff(d.resolution_date, d.creation);
+						+ frappe.datetime.get_hour_diff(d.resolution_date, d.creation);
 
 				}
 				if (d.first_responded_on) {
 					total_responded[col.field] = flt(total_responded[col.field]) + 1;
 
 					hours_to_respond[col.field] = flt(hours_to_respond[col.field])
-						+ dateutil.get_hour_diff(d.first_responded_on, d.creation);
+						+ frappe.datetime.get_hour_diff(d.first_responded_on, d.creation);
 				}
 			}
 		});
diff --git a/erpnext/templates/includes/cart.js b/erpnext/templates/includes/cart.js
index ee98b23..51be954 100644
--- a/erpnext/templates/includes/cart.js
+++ b/erpnext/templates/includes/cart.js
@@ -4,7 +4,8 @@
 // js inside blog page
 
 // shopping cart
-frappe.provide("shopping_cart");
+frappe.provide("erpnext.shopping_cart");
+var shopping_cart = erpnext.shopping_cart;
 
 $.extend(shopping_cart, {
 	show_error: function(title, text) {
@@ -18,7 +19,7 @@
 		shopping_cart.bind_change_qty();
 		shopping_cart.bind_dropdown_cart_buttons();
 	},
-	
+
 	bind_address_select: function() {
 		$(".cart-addresses").find('input[data-address-name]').on("click", function() {
 			if($(this).prop("checked")) {
@@ -65,13 +66,13 @@
 			var newVal = $(this).val();
 			shopping_cart.shopping_cart_update(item_code, newVal);
 		});
-		
-		$(".cart-items").on('click', '.number-spinner button', function () {  
+
+		$(".cart-items").on('click', '.number-spinner button', function () {
 			var btn = $(this),
 				input = btn.closest('.number-spinner').find('input'),
 				oldValue = input.val().trim(),
 				newVal = 0;
-	
+
 			if (btn.attr('data-dir') == 'up') {
 				newVal = parseInt(oldValue) + 1;
 			} else {
@@ -80,17 +81,17 @@
 				}
 			}
 			input.val(newVal);
-			var item_code = input.attr("data-item-code"); 
+			var item_code = input.attr("data-item-code");
 			shopping_cart.shopping_cart_update(item_code, newVal);
 		});
 	},
-	
+
 	render_tax_row: function($cart_taxes, doc, shipping_rules) {
 		var shipping_selector;
 		if(shipping_rules) {
 			shipping_selector = '<select class="form-control">' + $.map(shipping_rules, function(rule) {
-					return '<option value="' + rule[0] + '">' + rule[1] + '</option>' }).join("\n") +
-				'</select>';
+				return '<option value="' + rule[0] + '">' + rule[1] + '</option>' }).join("\n") +
+			'</select>';
 		}
 
 		var $tax_row = $(repl('<div class="row">\
@@ -162,6 +163,6 @@
 });
 
 function show_terms() {
-  var html = $(".cart-terms").html();
-    frappe.msgprint(html);
+	var html = $(".cart-terms").html();
+	frappe.msgprint(html);
 }
diff --git a/erpnext/templates/includes/product_list.js b/erpnext/templates/includes/product_list.js
index 28c626f..7f63c17 100644
--- a/erpnext/templates/includes/product_list.js
+++ b/erpnext/templates/includes/product_list.js
@@ -13,7 +13,6 @@
 	$.ajax({
 		method: "GET",
 		url: "/",
-		dataType: "json",
 		data: {
 			cmd: "erpnext.templates.pages.product_search.get_product_list",
 			start: window.start,
diff --git a/erpnext/templates/includes/product_page.js b/erpnext/templates/includes/product_page.js
index 4d1446b..e61ead1 100644
--- a/erpnext/templates/includes/product_page.js
+++ b/erpnext/templates/includes/product_page.js
@@ -21,9 +21,9 @@
 					$(".item-stock").html("<div style='color: red'> <i class='fa fa-close'></i> Not in stock</div>");
 				}
 				else if(r.message.in_stock==1) {
-					qty_display = "In stock"
+					var qty_display = "In stock";
 					if (r.message.show_stock_qty) {
-						qty_display = "Available ("+r.message.stock_qty+ " in stock)"
+						qty_display = "Available ("+r.message.stock_qty+ " in stock)";
 					}
 					$(".item-stock").html("<div style='color: green'>\
 						<i class='fa fa-check'></i> "+__(qty_display)+"</div>");
@@ -40,7 +40,9 @@
 	})
 
 	$("#item-add-to-cart button").on("click", function() {
-		shopping_cart.update_cart({
+		frappe.provide('erpnext.shopping_cart');
+
+		erpnext.shopping_cart.update_cart({
 			item_code: get_item_code(),
 			qty: 1,
 			callback: function(r) {
@@ -66,7 +68,7 @@
 			var item_code = find_closest_match(attribute, attribute_value);
 
 			if (!item_code) {
-				msgprint(__("Cannot find a matching Item. Please select some other value for {0}.", [attribute]))
+				frappe.msgprint(__("Cannot find a matching Item. Please select some other value for {0}.", [attribute]))
 				throw e;
 			}
 		}
@@ -87,7 +89,8 @@
 }
 
 function get_item_code() {
-	if(window.variant_info) {
+	var variant_info = window.variant_info;
+	if(variant_info) {
 		var attributes = get_selected_attributes();
 		var no_of_attributes = Object.keys(attributes).length;
 
@@ -102,9 +105,10 @@
 			var match = true;
 			for(var j in variant.attributes) {
 				if(attributes[variant.attributes[j].attribute]
-					!= variant.attributes[j].attribute_value) {
-						match = false;
-						break;
+					!= variant.attributes[j].attribute_value
+				) {
+					match = false;
+					break;
 				}
 			}
 			if(match) {
@@ -113,7 +117,7 @@
 		}
 		throw "Unable to match variant";
 	} else {
-		return item_code;
+		return window.item_code;
 	}
 }
 
@@ -126,6 +130,7 @@
 	var previous_no_of_attributes = 0;
 	var matched;
 
+	var variant_info = window.variant_info;
 	for(var i in variant_info) {
 		var variant = variant_info[i];
 		var match_score = 0;
diff --git a/erpnext/templates/pages/projects.js b/erpnext/templates/pages/projects.js
index ecacc34..99f0663 100644
--- a/erpnext/templates/pages/projects.js
+++ b/erpnext/templates/pages/projects.js
@@ -47,7 +47,6 @@
 				project: '{{ doc.name }}',
 				item_status: item_status,
 			},
-			dataType: "json",
 			success: function(data) {
 				if(typeof data.message == 'undefined') {
 					$('.project-'+ item).html("No "+ item_status +" "+ item);
@@ -68,8 +67,7 @@
 	}
 
 	var more_items = function(item, item_status){
-		if(item_status)
-		{
+		if(item_status) {
 			var item_status = $('.project-'+ item +'-section .btn-group .bold').hasClass('btn-closed-'+ item)
 				? 'closed' : 'open';
 		}
@@ -83,14 +81,13 @@
 				start: start,
 				item_status: item_status,
 			},
-			dataType: "json",
 			success: function(data) {
 
 				$(data.message).appendTo('.project-'+ item);
 				if(typeof data.message == 'undefined') {
 					$(".more-"+ item).toggle(false);
 				}
-			start = start+10;
+				start = start+10;
 			}
 		});
 	}
