[fix] Edge case in variant selection in website - when variant has less number of attributes than template
diff --git a/erpnext/templates/includes/product_page.js b/erpnext/templates/includes/product_page.js
index f7a2360..cec4f2a 100644
--- a/erpnext/templates/includes/product_page.js
+++ b/erpnext/templates/includes/product_page.js
@@ -67,16 +67,17 @@
 	$("[itemscope] .item-view-attribute .form-control").on("change", function() {
 		try {
 			var item_code = encodeURIComponent(get_item_code());
+
 		} catch(e) {
 			// unable to find variant
 			// then chose the closest available one
 
 			var attribute = $(this).attr("data-attribute");
 			var attribute_value = $(this).val()
-			var item_code = update_attribute_selectors(attribute, attribute_value);
+			var item_code = find_closest_match(attribute, attribute_value);
 
 			if (!item_code) {
-				msgprint(__("Please select some other value for {0}", [attribute]))
+				msgprint(__("Cannot find a matching Item. Please select some other value for {0}.", [attribute]))
 				throw e;
 			}
 		}
@@ -99,9 +100,16 @@
 function get_item_code() {
 	if(window.variant_info) {
 		var attributes = get_selected_attributes();
+		var no_of_attributes = Object.keys(attributes).length;
 
 		for(var i in variant_info) {
 			var variant = variant_info[i];
+
+			if (variant.attributes.length < no_of_attributes) {
+				// the case when variant has less attributes than template
+				continue;
+			}
+
 			var match = true;
 			for(var j in variant.attributes) {
 				if(attributes[variant.attributes[j].attribute]
@@ -120,13 +128,15 @@
 	}
 }
 
-function update_attribute_selectors(selected_attribute, selected_attribute_value) {
+function find_closest_match(selected_attribute, selected_attribute_value) {
 	// find the closest match keeping the selected attribute in focus and get the item code
 
 	var attributes = get_selected_attributes();
 
 	var previous_match_score = 0;
+	var previous_no_of_attributes = 0;
 	var matched;
+
 	for(var i in variant_info) {
 		var variant = variant_info[i];
 		var match_score = 0;
@@ -142,9 +152,13 @@
 			}
 		}
 
-		if (has_selected_attribute && (match_score > previous_match_score)) {
+		if (has_selected_attribute
+			&& ((match_score > previous_match_score) || (match_score==previous_match_score && previous_no_of_attributes < variant.attributes.length))) {
 			previous_match_score = match_score;
 			matched = variant;
+			previous_no_of_attributes = variant.attributes.length;
+
+
 		}
 	}