Merge branch 'master' into navupdate

Conflicts:
	version.num
diff --git a/erpnext/setup/page/permission_engine/permission_engine.html b/erpnext/setup/page/permission_engine/permission_engine.html
index 1b9cab2..7831447 100644
--- a/erpnext/setup/page/permission_engine/permission_engine.html
+++ b/erpnext/setup/page/permission_engine/permission_engine.html
@@ -1,4 +1,8 @@
 <div class="layout_wrapper">
 <div id="pe_header"></div>
 <div id="perm_engine_div" style="margin: 16px;"></div>
-</div>
\ No newline at end of file
+<div id="submittable_warning" class='help-box' style='display: None'>
+	One of the Roles has <b>Submit</b> permission. 
+	You will have to <b>Cancel</b> and then <b>Amend</b> a submitted Document for making changes.
+</div>
+</div>
diff --git a/erpnext/setup/page/permission_engine/permission_engine.js b/erpnext/setup/page/permission_engine/permission_engine.js
index fc24410..1d77e51 100644
--- a/erpnext/setup/page/permission_engine/permission_engine.js
+++ b/erpnext/setup/page/permission_engine/permission_engine.js
@@ -15,399 +15,423 @@
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 pscript['onload_Permission Engine'] = function() {
-  // header and toolbar
-  var h = new PageHeader('pe_header','Permissions Manager','Set specific permissions for Roles')
-  
-  if(!pscript.perm_engine) pscript.perm_engine = new pscript.PermEngine();
+	// header and toolbar
+	var h = new PageHeader('pe_header','Permissions Manager','Set specific permissions for Roles')
+	
+	if(!pscript.perm_engine) pscript.perm_engine = new pscript.PermEngine();
 }
 
 
 pscript.PermEngine = function() {
-  // create UI elements
-  this.wrapper = $i('perm_engine_div');
-  
-  this.head = $a(this.wrapper, 'div');
-  this.body = $a(this.wrapper, 'div');
-  this.footer = $a(this.wrapper, 'div');
+	// create UI elements
+	this.wrapper = $i('perm_engine_div');
+	
+	this.head = $a(this.wrapper, 'div');
+	this.body = $a(this.wrapper, 'div');
+	this.footer = $a(this.wrapper, 'div');
 
-  var lab = $a(this.body,'div', '', {backgroundColor:'#FFD', padding:'8px', margin:'16px 0px'});
-  lab.innerHTML = 'Please select the item for which you want to set permissions';
-  
-  this.make_head();
-  this.load_options();
+	var lab = $a(this.body,'div', '', {backgroundColor:'#FFD', padding:'8px', margin:'16px 0px'});
+	lab.innerHTML = 'Please select the item for which you want to set permissions';
+	
+	this.make_head();
+	this.load_options();
 }
 
 
 // Make Head
 // -------------
 pscript.PermEngine.prototype.make_head = function() {
-  var me = this;
-  
-  var make_select = function(label) {
-    var w = $a(me.head, 'div', '', {margin:'8px 0px'});
-    var t = make_table(w,1,2,'300px',['50%','50%']);
-    $td(t,0,0).innerHTML = label;
-    var s = $a($td(t,0,1),'select','',{width:'140px'});
-    s.wrapper = w;
-    return s;
-  }
-  
-  var make_button = function(label, parent, green) {
-  	return $btn(parent, label, null, {margin:'8px 0px', display:'none'}, (green ? 'green' : null));
-  }
-  
-  
-  // Set Permissions for
-  this.type_select = make_select('Set Permissions For');
-  this.type_select.onchange = function() {
-  	me.get_permissions();
-  }
-    
-  // Update Button
-  this.add_button = make_button('+ Add A New Rule', this.head, 0);
-  this.add_button.onclick = function() {
-    me.add_permission();
-  }
+	var me = this;
+	
+	var make_select = function(label) {
+		var w = $a(me.head, 'div', '', {margin:'8px 0px'});
+		var t = make_table(w,1,2,'300px',['50%','50%']);
+		$td(t,0,0).innerHTML = label;
+		var s = $a($td(t,0,1),'select','',{width:'140px'});
+		s.wrapper = w;
+		return s;
+	}
+	
+	var make_button = function(label, parent, green) {
+		return $btn(parent, label, null, {margin:'8px 0px', display:'none'}, (green ? 'green' : null));
+	}
+	
+	
+	// Set Permissions for
+	this.type_select = make_select('Set Permissions For');
+	this.type_select.onchange = function() {
+		me.get_permissions();
+	}
+		
+	// Update Button
+	this.add_button = make_button('+ Add A New Rule', this.head, 0);
+	this.add_button.onclick = function() {
+		me.add_permission();
+	}
 
-  // Update Button
-  this.update_button = make_button('Update', this.footer, 1);
-  this.update_button.onclick = function() {
-    me.update_permissions();
-  }
+	// Update Button
+	this.update_button = make_button('Update', this.footer, 1);
+	this.update_button.onclick = function() {
+		me.update_permissions();
+	}
 }
 
 // Add Permissions
 // -----------------
 pscript.PermEngine.prototype.add_permission = function() {
-  var me = this;
-  if(!this.add_permission_dialog) {
-  	
-  	// dialog
-    var d = new Dialog(400,400,'Add Permission');
-    d.make_body([['Select','Role'],['Select','Level'],['Button','Add']])
+	var me = this;
+	if(!this.add_permission_dialog) {
+		
+		// dialog
+		var d = new Dialog(400,400,'Add Permission');
+		d.make_body([['Select','Role'],['Select','Level'],['Button','Add']])
 
-    add_sel_options(d.widgets['Role'], this.roles, '');
-    add_sel_options(d.widgets['Level'], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 0);
+		add_sel_options(d.widgets['Role'], this.roles, '');
+		add_sel_options(d.widgets['Level'], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], 0);
 
-    // add
-    d.widgets['Add'].onclick = function() {
-      if(!sel_val(d.widgets['Role'])) {
-        msgprint('Please select Role'); return;
-      }
-      var callback = function(r, rt) {
-      	// reload
-        me.get_permissions();
-        d.hide();
-      }
-      $c_obj('Permission Control','add_permission',JSON.stringify([sel_val(me.type_select), sel_val(d.widgets['Role']), sel_val(d.widgets['Level'])]), callback);
-    }
+		// add
+		d.widgets['Add'].onclick = function() {
+			if(!sel_val(d.widgets['Role'])) {
+				msgprint('Please select Role'); return;
+			}
+			var callback = function(r, rt) {
+				// reload
+				me.get_permissions();
+				d.hide();
+			}
+			$c_obj('Permission Control','add_permission',JSON.stringify([sel_val(me.type_select), sel_val(d.widgets['Role']), sel_val(d.widgets['Level'])]), callback);
+		}
 
-    this.add_permission_dialog = d;
-  }
-  this.add_permission_dialog.show();
+		this.add_permission_dialog = d;
+	}
+	this.add_permission_dialog.show();
 }
 
 
 // Hide Fields
 // -----------------
 pscript.PermEngine.prototype.hide_fields = function() {
-  $dh(this.role_select.wrapper);
-  this.type_select.disabled = false;
-  this.body.innerHTML = '';
+	$dh(this.role_select.wrapper);
+	this.type_select.disabled = false;
+	this.body.innerHTML = '';
 }
 
 
 // Load Roles And Modules
 // -----------------------
 pscript.PermEngine.prototype.load_options = function() {
-  var me = this;
-  $dh(me.update_button);
-  $dh(me.add_button);
+	var me = this;
+	$dh(me.update_button);
+	$dh(me.add_button);
 
-  $c_obj('Permission Control','get_doctype_list','', function(r,rt) {    
-    me.roles = r.message.roles;
-    
-    // Type
-    empty_select(me.type_select);
-    add_sel_options(me.type_select,add_lists([''], r.message.doctypes));
-    
-  });
+	$c_obj('Permission Control','get_doctype_list','', function(r,rt) {		
+		me.roles = r.message.roles;
+		
+		// Type
+		empty_select(me.type_select);
+		add_sel_options(me.type_select,add_lists([''], r.message.doctypes));
+		
+	});
 }
 
 
 // Get DocType and Permissions related to module
 // --------------------------------------------------
 pscript.PermEngine.prototype.get_permissions = function() {
-  var me = this;
-  
-  if(!sel_val(me.type_select)) {
-  	msgprint('Please select a type first!'); return;
-  }
-  
-  $c_obj('Permission Control','get_permissions',sel_val(me.type_select), function(r,rt) {    
-     // Get permissions
-    if(r.message.perms.length)me.get_results(r.message);
-    else me.body.innerHTML = '<div style = "color : red; margin:8px 0px;">No Records Found</div>'
-  });
+	var me = this;
+	
+	if(!sel_val(me.type_select)) {
+		msgprint('Please select a type first!'); return;
+	}
+	
+	$c_obj('Permission Control','get_permissions',sel_val(me.type_select), function(r,rt) {		
+		 // Get permissions
+		if(r.message.perms.length) {
+			me.get_results(r.message);
+		}
+		else me.body.innerHTML = '<div style = "color : red; margin:8px 0px;">No Records Found</div>'
+		pscript.show_submittable();
+	});
 }
 
 // Get Results
 // ------------------
 pscript.PermEngine.prototype.get_results = function(r){
-  var perms = r.perms;
-  var me = this;
-  var doctype = sel_val(me.type_select);
-  
-  // show update button
-  $ds(me.update_button);
-  $ds(me.add_button);
+	var perms = r.perms;
+	var me = this;
+	var doctype = sel_val(me.type_select);
+	
+	// show update button
+	$ds(me.update_button);
+	$ds(me.add_button);
 
-  this.body.innerHTML = ''
-  pscript.all_checkboxes = [];
-  pscript.all_matches = [];
-  
-  var head = $a(this.body, 'h3'); head.innerHTML = 'Rules for ' + doctype;        
-  var permt = make_table(me.body, perms.length+1,9,'80%',[],{border:'1px solid #AAA', padding:'3px', verticalAlign:'middle', height:'30px'});
-    
-  // Create Grid for particular DocType
-  // ------------------------------------
-    
-  // Columns
-  var col_labels = ['Role','Level','Read','Write','Create','Submit','Cancel','Amend','Restrict By']
-  for(var n = 0; n < col_labels.length; n++){
-  	$y($td(permt,0,n), {backgroundColor:'#DDD', width:(n==0?'30%':(n==8?'21%':'7%'))})
-    $td(permt,0,n).innerHTML = col_labels[n];
-    $td(permt,0,n).fieldname = col_labels[n].toLowerCase();
-  }
-    
-  // Rows for Column Level / Role
-  for(var j = 0; j < perms.length; j++){
-    var plevel = $a($td(permt,j+1,1), 'span', 'link_type');
-    plevel.innerHTML = perms[j].permlevel;
-    plevel.doctype = doctype;
-    plevel.value = perms[j].permlevel;
-    plevel.onclick = function() {me.get_fields(this.doctype, this.value)}
+	this.body.innerHTML = ''
+	pscript.all_checkboxes = [];
+	pscript.all_matches = [];
+	
+	var head = $a(this.body, 'h3'); head.innerHTML = 'Rules for ' + doctype;				
+	var permt = make_table(me.body, perms.length+1,9,'80%',[],{border:'1px solid #AAA', padding:'3px', verticalAlign:'middle', height:'30px'});
+		
+	// Create Grid for particular DocType
+	// ------------------------------------
+		
+	// Columns
+	var col_labels = ['Role','Level','Read','Write','Create','Submit','Cancel','Amend','Restrict By']
+	for(var n = 0; n < col_labels.length; n++){
+		$y($td(permt,0,n), {backgroundColor:'#DDD', width:(n==0?'30%':(n==8?'21%':'7%'))})
+		$td(permt,0,n).innerHTML = col_labels[n];
+		$td(permt,0,n).fieldname = col_labels[n].toLowerCase();
+	}
+		
+	// Rows for Column Level / Role
+	for(var j = 0; j < perms.length; j++){
+		var plevel = $a($td(permt,j+1,1), 'span', 'link_type');
+		plevel.innerHTML = perms[j].permlevel;
+		plevel.doctype = doctype;
+		plevel.value = perms[j].permlevel;
+		plevel.onclick = function() {me.get_fields(this.doctype, this.value)}
 
-    // role
-    $td(permt,j+1,0).innerHTML = perms[j].role;
+		// role
+		$td(permt,j+1,0).innerHTML = perms[j].role;
 
-  }  
-    
-  // Get values
-  for(var l = 0; l < perms.length; l++){
-    for(var m = 0; m < 6; m++){                             // (read,write,create,submit,cancel,amend) 
-      var chk = $a_input($td(permt,l+1,m+2), 'checkbox');
-      var val = perms[l][$td(permt,0,m+2).fieldname];
-      if(val == 1) chk.checked = 1;
-      else chk.checked = 0;
-      chk.doctype = doctype;
-      chk.permlevel = perms[l].permlevel; chk.perm_type = col_labels[m+2].toLowerCase(); chk.role = perms[l].role;
-      pscript.all_checkboxes.push(chk);
-    }
-  }
-  
-  // add selects for match
-  me.add_match_select(r, perms, permt, doctype);
+	}	
+		
+	// Get values
+	for(var l = 0; l < perms.length; l++){
+		for(var m = 0; m < 6; m++){														 // (read,write,create,submit,cancel,amend) 
+			var chk = $a_input($td(permt,l+1,m+2), 'checkbox');
+			var val = perms[l][$td(permt,0,m+2).fieldname];
+			if(val == 1) chk.checked = 1;
+			else chk.checked = 0;
+
+			if(m==3) { chk.onclick = pscript.show_submittable }
+
+			chk.doctype = doctype;
+			chk.permlevel = perms[l].permlevel; chk.perm_type = col_labels[m+2].toLowerCase(); chk.role = perms[l].role;
+			pscript.all_checkboxes.push(chk);
+		}
+	}
+	
+	// add selects for match
+	me.add_match_select(r, perms, permt, doctype);
 }
 
+// Show submittable warning
+pscript.show_submittable = function() {
+	var submittable = 0;
+	for(i in pscript.all_checkboxes) {
+		c = pscript.all_checkboxes[i];
+		if(c.perm_type=='submit' && c.checked) {
+			submittable = 1;
+			break;
+		}
+	}
+	if(submittable) {
+		$('#submittable_warning').toggle(true);
+	} else {
+		$('#submittable_warning').toggle(false);
+	}
+}
+
+
 // render selects for match
 // --------------------------------------------
 
 pscript.PermEngine.prototype.add_match_select = function(r, perms, permt, doctype) {
-  var me = this;
-  
-  // add select for match
-  for(var i=0; i<perms.length; i++) {
-    if(perms[i].permlevel==0) {
-      // select
-      var sel = $a($td(permt,i+1,8),'select','',{width:'100%'});
-      add_sel_options(sel, r.fields);
-      sel.details = perms[i]; sel.details.parent = doctype;
-      sel.onchange = function() { 
-      	if(sel_val(this) && sel_val(this)!='owner') $ds(this.div); 
-      	else $dh(this.div); }
-      
-      // link
-      var div = $a($td(permt,i+1,8),'div','link_type',{marginTop: '2px', fontSize:'10px', display:'none'});
-      div.onclick = function() { this.details.match = sel_val(this.sel); me.show_match_dialog(this.details); }
-      div.innerHTML = 'Set Users / Roles';
-      div.details = perms[i];
-      sel.div = div; div.sel = sel;
+	var me = this;
+	
+	// add select for match
+	for(var i=0; i<perms.length; i++) {
+		if(perms[i].permlevel==0) {
+			// select
+			var sel = $a($td(permt,i+1,8),'select','',{width:'100%'});
+			add_sel_options(sel, r.fields);
+			sel.details = perms[i]; sel.details.parent = doctype;
+			sel.onchange = function() { 
+				if(sel_val(this) && sel_val(this)!='owner') $ds(this.div); 
+				else $dh(this.div); }
+			
+			// link
+			var div = $a($td(permt,i+1,8),'div','link_type',{marginTop: '2px', fontSize:'10px', display:'none'});
+			div.onclick = function() { this.details.match = sel_val(this.sel); me.show_match_dialog(this.details); }
+			div.innerHTML = 'Set Users / Roles';
+			div.details = perms[i];
+			sel.div = div; div.sel = sel;
 
-      // set the value
-      if(perms[i].match) { sel.value = perms[i].match; $ds(div); }
-      
-      pscript.all_matches.push(sel);
-    }
-  }
+			// set the value
+			if(perms[i].match) { sel.value = perms[i].match; $ds(div); }
+			
+			pscript.all_matches.push(sel);
+		}
+	}
 }
 
 // match users Dialog
 // =======================================================
 
 pscript.PermEngine.prototype.show_match_dialog=function(details) {
-  if(!this.match_defaults_dialog) {
-    var d = new Dialog(750, 500, 'Permission Applies To');
-    d.make_body([['HTML','Body']]);
-    var w = d.widgets['Body'];
-    $y(w,{height:'350px', overflow:'auto'});
-    this.match_defaults_dialog = d;
-  }
-  
-  // dialog
-  this.match_defaults_dialog.show();
-  
-  // render the rules
-  var me = this;
-  var callback = function(r,rt) {
-  	me.render_match_dialog(r, details);
-  }
-  // load the rules
-  $c_obj('Permission Control','get_defaults', details.match + '~~~' + (this.profiles ? 'No' : 'Yes'), callback); 
+	if(!this.match_defaults_dialog) {
+		var d = new Dialog(750, 500, 'Permission Applies To');
+		d.make_body([['HTML','Body']]);
+		var w = d.widgets['Body'];
+		$y(w,{height:'350px', overflow:'auto'});
+		this.match_defaults_dialog = d;
+	}
+	
+	// dialog
+	this.match_defaults_dialog.show();
+	
+	// render the rules
+	var me = this;
+	var callback = function(r,rt) {
+		me.render_match_dialog(r, details);
+	}
+	// load the rules
+	$c_obj('Permission Control','get_defaults', details.match + '~~~' + (this.profiles ? 'No' : 'Yes'), callback); 
 }
 
 // --------------------------------------------
 
 pscript.PermEngine.prototype.render_match_dialog=function(r, details) {
-  var d = this.match_defaults_dialog;
-  var w = d.widgets['Body'];
-  w.innerHTML = '<div style="background-color:#FFD; padding: 4px; color: #440; margin-bottom:16px">Please Note: Any action will also affect other permissions with similar rules!</div>'
-  
-  // header
-  var t=make_table($a(w,'div','',{borderBottom:'1px solid #AAA'}),1,3,'90%',['40%','40%','20%'],{fontWeight:'bold', padding:'3px', fontSize:'14px'});
-  $td(t,0,0).innerHTML = 'Who?'; $td(t,0,1).innerHTML = 'Is allowed if '+details.match+' equals';
-  
-  // existing defaults
-  var dl = r.message.dl; this.options = r.message.ol;
-  if(!this.profiles) {
-    this.profiles = r.message.pl;
-  }
-  
-  for(var i=0; i<dl.length; i++) {
-    new MatchDefaultValue(this, w, dl[i], details.match);
-  }
-  
-  this.add_new_match_row(details.match);
+	var d = this.match_defaults_dialog;
+	var w = d.widgets['Body'];
+	w.innerHTML = '<div style="background-color:#FFD; padding: 4px; color: #440; margin-bottom:16px">Please Note: Any action will also affect other permissions with similar rules!</div>'
+	
+	// header
+	var t=make_table($a(w,'div','',{borderBottom:'1px solid #AAA'}),1,3,'90%',['40%','40%','20%'],{fontWeight:'bold', padding:'3px', fontSize:'14px'});
+	$td(t,0,0).innerHTML = 'Who?'; $td(t,0,1).innerHTML = 'Is allowed if '+details.match+' equals';
+	
+	// existing defaults
+	var dl = r.message.dl; this.options = r.message.ol;
+	if(!this.profiles) {
+		this.profiles = r.message.pl;
+	}
+	
+	for(var i=0; i<dl.length; i++) {
+		new MatchDefaultValue(this, w, dl[i], details.match);
+	}
+	
+	this.add_new_match_row(details.match);
 }
 
 pscript.PermEngine.prototype.add_new_match_row = function(fieldname) {
-  // add new default
-  new MatchDefaultValue(this, this.match_defaults_dialog.widgets['Body'], null, fieldname, 1);
-}  
-  
+	// add new default
+	new MatchDefaultValue(this, this.match_defaults_dialog.widgets['Body'], null, fieldname, 1);
+}	
+	
 // --------------------------------------------
 
 MatchDefaultValue = function(pe, parent, details, fieldname, editable) {
-  this.pe = pe;
-  this.wrapper = $a(parent, 'div', '', {margin:'4px'});
-  this.clear();
-  this.details = details;
-  this.fieldname = fieldname;
-  this.render(editable);
+	this.pe = pe;
+	this.wrapper = $a(parent, 'div', '', {margin:'4px'});
+	this.clear();
+	this.details = details;
+	this.fieldname = fieldname;
+	this.render(editable);
 }
 
 
 // --------------------------------------------
 
 MatchDefaultValue.prototype.clear = function() {
-  this.wrapper.innerHTML = '';
-  this.tab = make_table(this.wrapper, 1, 3, '90%', ['40%','40%','20%'], {verticalAlign:'middle', padding:'3px'});
+	this.wrapper.innerHTML = '';
+	this.tab = make_table(this.wrapper, 1, 3, '90%', ['40%','40%','20%'], {verticalAlign:'middle', padding:'3px'});
 }
 
 // --------------------------------------------
 
 MatchDefaultValue.prototype.render = function(editable) {
 
-  if(editable) {
-  	this.render_editable();
-  } else {
-    this.render_static();
-  }
+	if(editable) {
+		this.render_editable();
+	} else {
+		this.render_static();
+	}
 }
 
 // --------------------------------------------
 
 MatchDefaultValue.prototype.render_editable = function() {
-  var me = this;
+	var me = this;
 
-  // profile or role
-  this.profile_or_role = $a($td(this.tab,0,0), 'select', '', {width:'60px', marginRight:'8px'});
-  add_sel_options(this.profile_or_role,['Profile', 'Role'], 'Profile');
-  this.profile_or_role.onchange = function() {
-    if(sel_val(this)=='Profile') { $di(me.profile_sel); $dh(me.role_sel); }
-    else { $dh(me.profile_sel); $di(me.role_sel); }
-  }
+	// profile or role
+	this.profile_or_role = $a($td(this.tab,0,0), 'select', '', {width:'60px', marginRight:'8px'});
+	add_sel_options(this.profile_or_role,['Profile', 'Role'], 'Profile');
+	this.profile_or_role.onchange = function() {
+		if(sel_val(this)=='Profile') { $di(me.profile_sel); $dh(me.role_sel); }
+		else { $dh(me.profile_sel); $di(me.role_sel); }
+	}
 
-  // role sel
-  this.role_sel = $a($td(this.tab,0,0), 'select', '', {width:'100px',display:'none'});
-  add_sel_options(this.role_sel,this.pe.roles);
-  
-  // profile sel
-  this.profile_sel = $a($td(this.tab,0,0), 'select', '', {width:'100px'});
-  add_sel_options(this.profile_sel,this.pe.profiles);
+	// role sel
+	this.role_sel = $a($td(this.tab,0,0), 'select', '', {width:'100px',display:'none'});
+	add_sel_options(this.role_sel,this.pe.roles);
+	
+	// profile sel
+	this.profile_sel = $a($td(this.tab,0,0), 'select', '', {width:'100px'});
+	add_sel_options(this.profile_sel,this.pe.profiles);
 
-  // options sel
-  this.options_sel = $a($td(this.tab,0,1), 'select', '', {width:'120px'});
-  add_sel_options(this.options_sel,this.pe.options);
+	// options sel
+	this.options_sel = $a($td(this.tab,0,1), 'select', '', {width:'120px'});
+	add_sel_options(this.options_sel,this.pe.options);
 
-   // add
-  var span = $a($td(this.tab,0,2),'span','link_type',{marginLeft:'8px'});
-  span.innerHTML = 'Add'
-  span.onclick = function() { me.save(); }
+	 // add
+	var span = $a($td(this.tab,0,2),'span','link_type',{marginLeft:'8px'});
+	span.innerHTML = 'Add'
+	span.onclick = function() { me.save(); }
 }
 
 // --------------------------------------------
 
 MatchDefaultValue.prototype.render_static = function() {
-  var me = this;
-  
-  $td(this.tab,0,0).innerHTML = this.details.parenttype;
-  $td(this.tab,0,0).innerHTML += '&nbsp;' + this.details.parent;
-  $td(this.tab,0,1).innerHTML = this.details.defvalue;
+	var me = this;
+	
+	$td(this.tab,0,0).innerHTML = this.details.parenttype;
+	$td(this.tab,0,0).innerHTML += '&nbsp;' + this.details.parent;
+	$td(this.tab,0,1).innerHTML = this.details.defvalue;
 
-   // delete
-  var span = $a($td(this.tab,0,2),'span','link_type',{marginLeft:'8px'});
-  span.innerHTML = 'Cancel'
-  span.onclick = function() { me.delete_def(); }
+	 // delete
+	var span = $a($td(this.tab,0,2),'span','link_type',{marginLeft:'8px'});
+	span.innerHTML = 'Cancel'
+	span.onclick = function() { me.delete_def(); }
 }
 
 // --------------------------------------------
 
 MatchDefaultValue.prototype.delete_def = function() {	
-  var me = this;
-  this.wrapper.innerHTML = '<div style="color: #888; padding: 3px;">Deleting...</div>';
-  var callback = function(r,rt) {
-  	$dh(me.wrapper);
-    if(r.exc) msgprint('There were errors!')
-  }
-  $c_obj('Permission Control','delete_default'
-    ,[this.details.parent, this.fieldname, this.details.defvalue].join('~~~')
-    ,callback)
+	var me = this;
+	this.wrapper.innerHTML = '<div style="color: #888; padding: 3px;">Deleting...</div>';
+	var callback = function(r,rt) {
+		$dh(me.wrapper);
+		if(r.exc) msgprint('There were errors!')
+	}
+	$c_obj('Permission Control','delete_default'
+		,[this.details.parent, this.fieldname, this.details.defvalue].join('~~~')
+		,callback)
 }
 
 // --------------------------------------------
 
 MatchDefaultValue.prototype.save = function() {
-  var me= this;
-  
-  var callback = function(r,rt) {
-    me.details = r.message;
-    me.clear();
-    me.render();
-    me.pe.add_new_match_row(me.fieldname);
-  }
-  	
-  // values
-  if(sel_val(this.profile_or_role)=='Profile') { var parent = sel_val(this.profile_sel); var parenttype = 'Profile'; }
-  else { var parent = sel_val(this.role_sel); var parenttype = 'Role'; }
+	var me= this;
+	
+	var callback = function(r,rt) {
+		me.details = r.message;
+		me.clear();
+		me.render();
+		me.pe.add_new_match_row(me.fieldname);
+	}
+		
+	// values
+	if(sel_val(this.profile_or_role)=='Profile') { var parent = sel_val(this.profile_sel); var parenttype = 'Profile'; }
+	else { var parent = sel_val(this.role_sel); var parenttype = 'Role'; }
 
-  if(!sel_val(this.options_sel) || !parent) { msgprint("Please select all values"); return; }
-  	
-  $c_obj('Permission Control','add_default'
-    ,[parent, parenttype, this.fieldname, sel_val(this.options_sel)].join('~~~')
-    ,callback);
-      
-  this.wrapper.innerHTML = '<div style="color: #888; padding: 3px;">Adding...</div>';
+	if(!sel_val(this.options_sel) || !parent) { msgprint("Please select all values"); return; }
+		
+	$c_obj('Permission Control','add_default'
+		,[parent, parenttype, this.fieldname, sel_val(this.options_sel)].join('~~~')
+		,callback);
+			
+	this.wrapper.innerHTML = '<div style="color: #888; padding: 3px;">Adding...</div>';
 }
 
 
@@ -415,36 +439,36 @@
 // =======================================================
 
 pscript.PermEngine.prototype.make_fields_dialog=function(){
-  if(!pscript.get_field_dialog) {
-    pscript.get_field_dialog = new Dialog(750,500,'Fields');
-    pscript.get_field_dialog.make_body([['HTML','Fields','<div id="perm_engine_get_fields"></div>'],['Button','OK']]);
-  }
-  else $i('perm_engine_get_fields').innerHTML = '';
+	if(!pscript.get_field_dialog) {
+		pscript.get_field_dialog = new Dialog(750,500,'Fields');
+		pscript.get_field_dialog.make_body([['HTML','Fields','<div id="perm_engine_get_fields"></div>'],['Button','OK']]);
+	}
+	else $i('perm_engine_get_fields').innerHTML = '';
 }
 
 // Get Fields
 // --------------------
 pscript.PermEngine.prototype.get_fields = function(dt, permlevel) {
-  var me = this;
-  var callback = function(r,rt){
-    // Get Parent DocType Fields
-    var parent_fields_dict = r.message.parent_fields_dict;
-    
-    // Get Child Table Fields if any
-    var table_fields_dict = r.message.table_fields_dict;
-    
-    // Make Fields Dialog Box
-    me.make_fields_dialog();
-    
-    me.make_fields_table(dt, parent_fields_dict, table_fields_dict, permlevel);
-    
-    pscript.get_field_dialog.show();
-    pscript.get_field_dialog.widgets['OK'].onclick=function(){
-      pscript.get_field_dialog.hide();
-    }
-  }
-  var args = "{'dt':'"+dt+"','permlevel':"+permlevel+"}"
-  $c_obj('Permission Control','get_fields', args, callback);
+	var me = this;
+	var callback = function(r,rt){
+		// Get Parent DocType Fields
+		var parent_fields_dict = r.message.parent_fields_dict;
+		
+		// Get Child Table Fields if any
+		var table_fields_dict = r.message.table_fields_dict;
+		
+		// Make Fields Dialog Box
+		me.make_fields_dialog();
+		
+		me.make_fields_table(dt, parent_fields_dict, table_fields_dict, permlevel);
+		
+		pscript.get_field_dialog.show();
+		pscript.get_field_dialog.widgets['OK'].onclick=function(){
+			pscript.get_field_dialog.hide();
+		}
+	}
+	var args = "{'dt':'"+dt+"','permlevel':"+permlevel+"}"
+	$c_obj('Permission Control','get_fields', args, callback);
 }
 
 
@@ -452,90 +476,90 @@
 // Make Table of Fields for Dialog Box
 // --------------------------------------
 pscript.PermEngine.prototype.make_fields_table = function(dt, parent_fields_dict, table_fields_dict, permlevel) {
-  
-  var make_grid = function(table, fields_dict) {
-    var col_labels = ['Label','Fieldtype','Fieldname','Options'];
-    for(var n = 0; n < col_labels.length; n++){
-      $a_input(($td(table,0,n)), 'data');
-      $td(table,0,n).innerHTML = '<b>'+col_labels[n]+'</b>';
-      $td(table,0,n).fieldname = col_labels[n].toLowerCase();
-    }
-    
-    // Add values
-    for(var i = 0; i < keys(fields_dict).length; i++){
-      for(var j = 0; j < 4; j++){
-        $a_input(($td(table,i+1,j)), 'data');
-        $td(table,i+1,j).innerHTML = cstr(fields_dict[i][$td(table,0,j).fieldname])
-      }
-    }
-  }
+	
+	var make_grid = function(table, fields_dict) {
+		var col_labels = ['Label','Fieldtype','Fieldname','Options'];
+		for(var n = 0; n < col_labels.length; n++){
+			$a_input(($td(table,0,n)), 'data');
+			$td(table,0,n).innerHTML = '<b>'+col_labels[n]+'</b>';
+			$td(table,0,n).fieldname = col_labels[n].toLowerCase();
+		}
+		
+		// Add values
+		for(var i = 0; i < keys(fields_dict).length; i++){
+			for(var j = 0; j < 4; j++){
+				$a_input(($td(table,i+1,j)), 'data');
+				$td(table,i+1,j).innerHTML = cstr(fields_dict[i][$td(table,0,j).fieldname])
+			}
+		}
+	}
 
-  
-  $i('perm_engine_get_fields').innerHTML = '<b>'+ dt + ' Fields at Level '+ permlevel +':</b><br><br>';
-  var parent_field_table = make_table('perm_engine_get_fields',keys(parent_fields_dict).length+1, 4,'100%',['25%','25%','25%','25%'],{border:'1px solid #AAA',padding:'2px'});
-  make_grid(parent_field_table, parent_fields_dict);
-  
-  child_tables = keys(table_fields_dict)
-  if(child_tables.length > 0){
-    for(var k = 0; k < child_tables.length; k++){
-      var tab_fields_det = table_fields_dict[child_tables[k]];
-      if(keys(tab_fields_det).length > 0){
-        $i('perm_engine_get_fields').innerHTML += '<br><b>'+ child_tables[k] + ' Fields at Level '+ permlevel +':</b><br><br>'
-        var child_field_table = make_table('perm_engine_get_fields',keys(tab_fields_det).length+1, 4,'100%',['25%','25%','25%','25%'],{border:'1px solid #AAA',padding:'2px'});
-        make_grid(child_field_table, tab_fields_det);
-      }
-    }
-  }
+	
+	$i('perm_engine_get_fields').innerHTML = '<b>'+ dt + ' Fields at Level '+ permlevel +':</b><br><br>';
+	var parent_field_table = make_table('perm_engine_get_fields',keys(parent_fields_dict).length+1, 4,'100%',['25%','25%','25%','25%'],{border:'1px solid #AAA',padding:'2px'});
+	make_grid(parent_field_table, parent_fields_dict);
+	
+	child_tables = keys(table_fields_dict)
+	if(child_tables.length > 0){
+		for(var k = 0; k < child_tables.length; k++){
+			var tab_fields_det = table_fields_dict[child_tables[k]];
+			if(keys(tab_fields_det).length > 0){
+				$i('perm_engine_get_fields').innerHTML += '<br><b>'+ child_tables[k] + ' Fields at Level '+ permlevel +':</b><br><br>'
+				var child_field_table = make_table('perm_engine_get_fields',keys(tab_fields_det).length+1, 4,'100%',['25%','25%','25%','25%'],{border:'1px solid #AAA',padding:'2px'});
+				make_grid(child_field_table, tab_fields_det);
+			}
+		}
+	}
 }
 
 
 // Update Permissions
 // -----------------------
 pscript.PermEngine.prototype.update_permissions = function() {
-  var me = this;
-  var out = {};
+	var me = this;
+	var out = {};
 
-  var add_to_out = function(doctype, permlevel, role, key, value) {
-    if(!out[doctype]) out[doctype] = {};
-    if(!out[doctype][permlevel]) out[doctype][permlevel] = {};
-    if(!out[doctype][permlevel][role]) out[doctype][permlevel][role] = {};
-    out[doctype][permlevel][role][key] = value; 
-  }
+	var add_to_out = function(doctype, permlevel, role, key, value) {
+		if(!out[doctype]) out[doctype] = {};
+		if(!out[doctype][permlevel]) out[doctype][permlevel] = {};
+		if(!out[doctype][permlevel][role]) out[doctype][permlevel][role] = {};
+		out[doctype][permlevel][role][key] = value; 
+	}
 
-  // check boxes
-  for(i in pscript.all_checkboxes) {
-    c = pscript.all_checkboxes[i];
-    add_to_out(c.doctype, c.permlevel, c.role, c.perm_type, c.checked ? 1 : 0);
-  }
-
-  // matches
-  for(var i=0; i<pscript.all_matches.length; i++) {
-  	var s = pscript.all_matches[i];
-    if(sel_val(s))
-      add_to_out(s.details.parent, s.details.permlevel, s.details.role, 'match', sel_val(s));
-  }
-  
-  var args = "{'perm_dict': "+JSON.stringify(out)+"}"
-  $c_obj('Permission Control','update_permissions', args, function(r,rt) {});
+	// check boxes
+	for(i in pscript.all_checkboxes) {
+		c = pscript.all_checkboxes[i];
+		add_to_out(c.doctype, c.permlevel, c.role, c.perm_type, c.checked ? 1 : 0);
+	}
+	
+	// matches
+	for(var i=0; i<pscript.all_matches.length; i++) {
+		var s = pscript.all_matches[i];
+		if(sel_val(s))
+			add_to_out(s.details.parent, s.details.permlevel, s.details.role, 'match', sel_val(s));
+	}
+	
+	var args = "{'perm_dict': "+JSON.stringify(out)+"}"
+	$c_obj('Permission Control','update_permissions', args, function(r,rt) {});
 }
 
 
 // Update Page Roles
 // ----------------------
 pscript.PermEngine.prototype.update_page_roles = function() {
-  var me = this;
-  var out = {};
-  for(i in pscript.all_pg_checkboxes) {
-    c = pscript.all_pg_checkboxes[i];
-    out[c.page_name] = c.checked ? 1 : 0
-  }
-  var args = "{'page_role_dict': "+JSON.stringify(out)+", 'role': '"+sel_val(me.role_select)+"'}"
-  $c_obj('Permission Control','update_page_role', args, function(r,rt) {});
+	var me = this;
+	var out = {};
+	for(i in pscript.all_pg_checkboxes) {
+		c = pscript.all_pg_checkboxes[i];
+		out[c.page_name] = c.checked ? 1 : 0
+	}
+	var args = "{'page_role_dict': "+JSON.stringify(out)+", 'role': '"+sel_val(me.role_select)+"'}"
+	$c_obj('Permission Control','update_page_role', args, function(r,rt) {});
 }
 
 // Reset Permission Engine
 // -------------------------
 pscript.PermEngine.prototype.reset_perm_engine = function(){
-  this.type_select.selectedIndex = 0;
-  this.load_options();
+	this.type_select.selectedIndex = 0;
+	this.load_options();
 }
diff --git a/js/all-app.js b/js/all-app.js
index 911938a..ac7b327 100644
--- a/js/all-app.js
+++ b/js/all-app.js
Binary files differ
diff --git a/js/all-web.js b/js/all-web.js
index 7ab7df3..c79d5aa 100644
--- a/js/all-web.js
+++ b/js/all-web.js
@@ -279,7 +279,7 @@
 if(sel_val)s.inp.value=sel_val;return;}
 if(s.inp)s=s.inp;for(var i=0,len=list.length;i<len;i++){var o=new Option(list[i],list[i],false,(list[i]==sel_val?true:false));if(o_style)$y(o,o_style);s.options[s.options.length]=o;}}
 function cint(v,def){v=v+'';v=lstrip(v,['0']);v=parseInt(v);if(isNaN(v))v=def?def:0;return v;}
-function validate_email(id){if(strip(id).search("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")==-1)return 0;else return 1;}
+function validate_email(id){if(strip(id.toLowerCase()).search("[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?")==-1)return 0;else return 1;}
 function validate_spl_chars(txt){if(txt.search(/^[a-zA-Z0-9_\- ]*$/)==-1)return 1;else return 0;}
 function d2h(d){return cint(d).toString(16);}
 function h2d(h){return parseInt(h,16);}
@@ -1088,4 +1088,4 @@
     <a href="https://erpnext.com">erpnext.com</a></div>\
   </div>',wn.boot.website_settings));this.make_items();},make_items:function(){var items=wn.boot.website_menus
 for(var i=0;i<items.length;i++){var item=items[i];if(!item.parent_label&&item.parentfield=='footer_items'){item.route=item.url||item.custom_page;$('.web-footer-menu ul').append(repl('<li><a href="#!%(route)s" \
-     data-label="%(label)s">%(label)s</a></li>',item))}}}});$(document).bind('startup',function(){erpnext.footer=new erpnext.Footer();erpnext.navbar.navbar=new erpnext.navbar.navbar();})
\ No newline at end of file
+     data-label="%(label)s">%(label)s</a></li>',item))}}}});$(document).bind('startup',function(){erpnext.footer=new erpnext.Footer();erpnext.navbar.navbar=new erpnext.navbar.navbar();})
diff --git a/version.num b/version.num
index 8d75cc7..dc19332 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-705
\ No newline at end of file
+705