Given provision to enter write off and change amount on POS
diff --git a/erpnext/public/js/payment/payments.js b/erpnext/public/js/payment/payments.js
index 7437f2a..06df425 100644
--- a/erpnext/public/js/payment/payments.js
+++ b/erpnext/public/js/payment/payments.js
@@ -13,6 +13,14 @@
 		this.$body = this.dialog.body;
 		this.set_payment_primary_action();
 		this.make_keyboard();
+		this.select_text()
+	},
+
+	select_text: function(){
+		var me = this;
+		$(this.$body).find('.form-control').click(function(){
+			$(this).select();
+		})
 	},
 
 	set_payment_primary_action: function(){
@@ -20,7 +28,7 @@
 	
 		this.dialog.set_primary_action(__("Submit"), function() {
 			me.dialog.hide()
-			me.write_off_amount()
+			me.submit_invoice()
 		})
 	},
 
@@ -78,7 +86,7 @@
 			//When user first time click on row
 			this.payment_val = flt(this.frm.doc.outstanding_amount)
 			this.selected_mode.val(format_number(this.payment_val, 2));
-			this.update_paid_amount()
+			this.update_payment_amount()
 		}else if(flt(this.selected_mode.val()) > 0){
 			//If user click on existing row which has value
 			this.payment_val = flt(this.selected_mode.val());
@@ -90,17 +98,29 @@
 	bind_keyboard_event: function(){
 		var me = this;
 		this.payment_val = '';
-		this.bind_payment_mode_keys_event();
-		this.bind_keyboard_keys_event();
+		this.bind_form_control_event();
+		this.bind_numeric_keys_event();
 	},
 
-	bind_payment_mode_keys_event: function(){
+	bind_form_control_event: function(){
 		var me = this;
 		$(this.$body).find('.pos-payment-row').click(function(){
-			if(me.frm.doc.outstanding_amount > 0){
-				me.idx = $(this).attr("idx");
-				me.set_outstanding_amount()
-			}
+			me.idx = $(this).attr("idx");
+			me.set_outstanding_amount()
+		})
+		
+		$(this.$body).find('.form-control').click(function(){
+			me.idx = $(this).attr("idx");
+			me.set_outstanding_amount();
+			me.update_paid_amount();
+		})
+		
+		$(this.$body).find('.write_off_amount').change(function(){
+			me.write_off_amount(flt($(this).val()));
+		})
+		
+		$(this.$body).find('.change_amount').change(function(){
+			me.change_amount(flt($(this).val()));
 		})
 	},
 
@@ -113,13 +133,13 @@
 		this.selected_mode.attr('disabled', false);
 	},
 	
-	bind_keyboard_keys_event: function(){
+	bind_numeric_keys_event: function(){
 		var me = this;
 		$(this.$body).find('.pos-keyboard-key').click(function(){
 			me.payment_val += $(this).text();
 			me.selected_mode.val(format_number(me.payment_val, 2))
 			me.idx = me.selected_mode.attr("idx")
-			me.update_paid_amount()
+			me.selected_mode.change()
 		})
 		
 		$(this.$body).find('.delete-btn').click(function(){
@@ -137,15 +157,11 @@
 			me.payment_val =  flt($(this).val()) || 0.0;
 			me.selected_mode.val(format_number(me.payment_val, 2))
 			me.idx = me.selected_mode.attr("idx")
-			me.update_paid_amount()
-		})
-
-		this.selected_mode.click(function(){
-			me.selected_mode.select();
+			me.update_payment_amount()
 		})
 	},
 
-	clear_amount: function(){
+	clear_amount: function() {
 		var me = this;
 		$(this.$body).find('.clr').click(function(e){
 			e.stopPropagation();
@@ -154,25 +170,65 @@
 			me.payment_val = 0.0;
 			me.selected_mode.val(0.0);
 			me.highlight_selected_row();
-			me.update_paid_amount();
+			me.update_payment_amount();
 		})
 	},
 
-	update_paid_amount: function(){
+	write_off_amount: function(write_off_amount) {
 		var me = this;
+
+		if(this.frm.doc.paid_amount > 0){
+			this.frm.doc.write_off_amount = write_off_amount;
+			this.frm.doc.base_write_off_amount = flt(this.frm.doc.write_off_amount * this.frm.doc.conversion_rate,
+				precision("base_write_off_amount"));
+			this.calculate_outstanding_amount(false)
+			this.show_amounts()
+		}
+	},
+
+	change_amount: function(change_amount) {
+		var me = this;
+
+		this.frm.doc.change_amount = change_amount;
+		this.calculate_write_off_amount()
+		this.show_amounts()
+	},
+
+	update_paid_amount: function() {
+		var me = this;
+		if(in_list(['change_amount', 'write_off_amount'], this.idx)){
+			value = flt(me.selected_mode.val(), 2)
+			if(me.idx == 'change_amount'){
+				me.change_amount(value)
+			} else{
+				if(value == 0) { 
+					value = me.frm.doc.outstanding_amount;
+				}
+				me.write_off_amount(value)
+			}
+		}else{
+			this.update_payment_amount()
+		}
+	},
+
+	update_payment_amount: function(){
+		var me = this;
+
 		$.each(this.frm.doc.payments, function(index, data){
 			if(cint(me.idx) == cint(data.idx)){
 				data.amount = flt(me.selected_mode.val(), 2)
 			}
 		})
+
 		this.calculate_outstanding_amount(false);
 		this.show_amounts();
 	},
-	
+
 	show_amounts: function(){
 		var me = this;
+		$(this.$body).find(".write_off_amount").val(format_number(this.frm.doc.write_off_amount, 2));
 		$(this.$body).find('.paid_amount').text(format_currency(this.frm.doc.paid_amount, this.frm.doc.currency));
-		$(this.$body).find('.change_amount').text(format_currency(this.frm.doc.change_amount, this.frm.doc.currency))
+		$(this.$body).find('.change_amount').val(format_number(this.frm.doc.change_amount, 2))
 		$(this.$body).find('.outstanding_amount').text(format_currency(this.frm.doc.outstanding_amount, this.frm.doc.currency))
 		this.update_invoice();
 	}