updates to product_page (search) and kb fix
diff --git a/public/js/kb_common.js b/public/js/kb_common.js
index 032d2db..0686677 100644
--- a/public/js/kb_common.js
+++ b/public/js/kb_common.js
@@ -33,7 +33,7 @@
 	
 	this.make_timestamp = function() {
 		this.line1.innerHTML = repl('By %(name)s | %(when)s', {
-			name: wn.utils.full_name(this.det.first_name, this.det.last_name),
+			name: wn.user_info(this.det.owner).fullname,
 			when: wn.datetime.comment_when(this.det.modified)
 		});
 		
diff --git a/stock/doctype/item/item.txt b/stock/doctype/item/item.txt
index ce54443..10017a6 100644
--- a/stock/doctype/item/item.txt
+++ b/stock/doctype/item/item.txt
@@ -4,7 +4,7 @@
   "docstatus": 0, 
   "creation": "2012-12-17 14:56:32", 
   "modified_by": "Administrator", 
-  "modified": "2012-12-17 16:02:00"
+  "modified": "2012-12-18 14:23:19"
  }, 
  {
   "allow_attach": 1, 
@@ -823,11 +823,12 @@
   "permlevel": 0
  }, 
  {
+  "description": "Will appear in search", 
   "depends_on": "show_in_website", 
   "doctype": "DocField", 
   "label": "Short Description", 
   "fieldname": "web_short_description", 
-  "fieldtype": "Text", 
+  "fieldtype": "Text Editor", 
   "permlevel": 0
  }, 
  {
diff --git a/utilities/page/questions/questions.py b/utilities/page/questions/questions.py
index b38bc1e..20d3803 100644
--- a/utilities/page/questions/questions.py
+++ b/utilities/page/questions/questions.py
@@ -35,7 +35,7 @@
 			conds += ' and t1._user_tags like "%'+ t +'%"'
 	
 	return webnotes.conn.sql("""select t1.name, t1.owner, t1.question, t1.modified, t1._user_tags,
-			t2.first_name, t2.last_name, (select count(*) from tabAnswer where
+			(select count(*) from tabAnswer where
 			tabAnswer.question = t1.name) as answers
 		from tabQuestion t1, tabProfile t2
 		where t1.docstatus!=2
diff --git a/website/helpers/product.py b/website/helpers/product.py
index fec4626..ceec17d 100644
--- a/website/helpers/product.py
+++ b/website/helpers/product.py
@@ -25,14 +25,6 @@
 
 @webnotes.whitelist(allow_guest=True)
 def get_product_list(args=None):
-	"""
-		args = {
-			'limit_start': 0,
-			'limit_page_length': 20,
-			'search': '',
-			'product_group': '',
-		}
-	"""
 	import webnotes
 	from webnotes.utils import cstr
 	
@@ -40,11 +32,11 @@
 	
 	# base query
 	query = """\
-		select name, item_name, page_name, website_image,
-		description, web_short_description
+		select name, item_name, page_name, website_image, item_group, 
+			if(ifnull(web_short_description,'')='', web_long_description, 
+			web_short_description) as web_short_description
 		from `tabItem`
-		where is_sales_item = 'Yes'
-		and docstatus = 0
+		where docstatus = 0
 		and show_in_website = 1"""
 	
 	# search term condition
@@ -65,75 +57,6 @@
 			and item_group = %(product_group)s"""
 	
 	# order by
-	query += """
-		order by item_name asc, name asc"""
+	query += """order by item_name asc, name asc limit %s, 10""" % args.start
 
-	from webnotes.widgets.query_builder import add_limit_to_query
-	query, args = add_limit_to_query(query, args)
-
-	return webnotes.conn.sql(query, args, as_dict=1)
-
-@webnotes.whitelist(allow_guest=True)
-def get_product_category_list(args=None):
-	"""
-		args = {
-			'limit_start': 0,
-			'limit_page_length': 5,
-		}
-	"""
-	import webnotes
-	
-	if not args: args = webnotes.form_dict
-	
-	query = """\
-		select count(name) as items, item_group
-		from `tabItem`
-		where is_sales_item = 'Yes'
-		and docstatus = 0
-		and show_in_website = 1
-		group by item_group
-		order by items desc"""
-		
-	from webnotes.widgets.query_builder import add_limit_to_query
-	query, args = add_limit_to_query(query, args)
-
-	
-	result = webnotes.conn.sql(query, args, as_dict=1)
-
-	# add All Products link
-	total_count = sum((r.get('items') or 0 for r in result))
-	result = [{'items': total_count, 'item_group': 'All Products'}] + (result or [])
-	
-	return result
-	
-@webnotes.whitelist(allow_guest=True)
-def get_similar_product_list(args=None):
-	"""
-		args = {
-			'limit_start': 0,
-			'limit_page_length': 5,
-			'product_name': '',
-			'product_group': '',
-		}
-	"""
-	import webnotes
-	
-	if not args: args = webnotes.form_dict
-	
-	query = """\
-		select name, item_name, page_name, website_image,
-		description, web_short_description
-		from `tabItem`
-		where is_sales_item = 'Yes'
-		and docstatus = 0
-		and show_in_website = 1
-		and name != %(product_name)s
-		and item_group = %(product_group)s
-		order by item_name"""
-	
-	from webnotes.widgets.query_builder import add_limit_to_query
-	query, args = add_limit_to_query(query, args)
-	
-	result = webnotes.conn.sql(query, args, as_dict=1)
-		
-	return result
\ No newline at end of file
+	return webnotes.conn.sql(query, args, as_dict=1)
\ No newline at end of file
diff --git a/website/templates/html/product_page.html b/website/templates/html/product_page.html
index 80108f1..50b3060 100644
--- a/website/templates/html/product_page.html
+++ b/website/templates/html/product_page.html
@@ -20,15 +20,19 @@
 	<div class="layout-wrapper layout-wrapper-background">
 		<div class="web-content" id="content-product-{{ name }}">
 			<div class="layout-main" style="padding: 30px;">
-				{% include 'html/product_search.html' %}
+				{% include 'html/product_search_box.html' %}
 				<h1>{{ item_name }}</h1>
 				<div class="product-page-content">
 					<div class="span6">
 					{% if website_image %}
 					<image class="item-main-image" src="files/{{ website_image }}" />
 					{% else %}
-					<div class="img-area"></div>
-					<span style="font-size: 11px">This is an auto-generated Image</span>
+					<div class="img-area">
+						<div style='background-color: #eee; padding: 40px;
+							width: 32px; font-size: 32px; color: #888;'>
+						<i class='icon-camera'></i></div>
+					</div>
+					
 					{% endif %}
 					<br><br>
 					</div>
@@ -51,7 +55,7 @@
 							{% for d in obj.doclist.get(
 								{"doctype":"Item Website Specification"}) %}
 								<tr>
-									<td>{{ d.label }}</td>
+									<td style="min-width: 150px;">{{ d.label }}</td>
 									<td>{{ d.description }}</td>
 								</tr>
 							{% endfor %}
diff --git a/website/templates/html/product_search.html b/website/templates/html/product_search.html
deleted file mode 100644
index 034ec11..0000000
--- a/website/templates/html/product_search.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="pull-right">
-	<form class="form-search">
-		<div class="input-append">
-			<input type="text" class="span2 search-query" id="product-search">
-			<button class="btn"><i class="icon-search"></i></button>
-		</div>
-	</form>
-</div>
-<div class="clearfix"></div>
\ No newline at end of file
diff --git a/website/templates/html/product_search_box.html b/website/templates/html/product_search_box.html
new file mode 100644
index 0000000..3cbb3e9
--- /dev/null
+++ b/website/templates/html/product_search_box.html
@@ -0,0 +1,24 @@
+<div class="pull-right">
+	<form class="form-search">
+		<div class="input-append">
+			<input type="text" class="span2 search-query" id="product-search">
+			<button class="btn" id="btn-product-search">
+				<i class="icon-search"></i></button>
+		</div>
+	</form>
+	<script>
+		// redirect to product search page
+		$(document).ready(function() {
+			$("#btn-product-search").click(function() {
+				var txt = $("#product-search").val();
+				if(txt) {
+					window.location.href="product_search.html?q=" + txt;
+				}
+				return false;
+			});
+			$("#product-search").keypress(function(e) {
+				if(e.which==13) $("#product-search-btn").click();
+			})
+		})
+	</script>
+</div>
\ No newline at end of file
diff --git a/website/templates/pages/product_search.html b/website/templates/pages/product_search.html
new file mode 100644
index 0000000..53a0572
--- /dev/null
+++ b/website/templates/pages/product_search.html
@@ -0,0 +1,88 @@
+{% extends "html/page.html" %}
+
+{% block title %}Product Search{% endblock %}
+
+{% block content %}
+<script>
+$(document).ready(function() {
+	var txt = get_url_arg("q");
+	$(".search-results").html("Search results for: " + txt);
+
+	window.start = 0;
+	var get_list = function() {
+		$.ajax({
+			method: "GET",
+			url: "server.py",
+			dataType: "json",
+			data: {
+				cmd: "website.helpers.product.get_product_list",
+				start: window.start,
+				search: txt
+			},
+			dataType: "json",
+			success: function(data) {
+				render(data.message);
+			}
+		})
+	}
+	
+	var render = function(data) {
+		if(data.length) {
+			var table = $("#search-list .table");
+			if(!table.length)
+				var table = $("<table class='table'>").appendTo("#search-list");
+				
+			$.each(data, function(i, d) {
+				if(!d.web_short_description)
+					d.web_short_description = "No description given."
+				var $tr = $(repl('<tr>\
+					<td style="width: 30%;">\
+						<img class="product-image" style="width: 80%;" src="files/%(website_image)s">\
+					</td>\
+					<td>\
+						<h4><a href="%(page_name)s">%(item_name)s</a></h4>\
+						<p class="help">Item Code: %(name)s</p>\
+						<p>%(web_short_description)s</p>\
+					</td>\
+				</tr>', d)).appendTo(table);
+				
+				if(!d.website_image) {
+					$tr.find(".product-image").replaceWith("<div\
+						style='background-color: #eee; padding: 40px; \
+							width: 32px; font-size: 32px; color: #888;'>\
+						<i class='icon-camera'></i></div>");
+				}
+			});
+			
+		}
+		if(data.length < 10) {
+			$(".more-btn").replaceWith("<div class='alert'>Nothing more to show</div>");
+		} else {
+			$(".more-btn").toggle(true)
+		}
+		window.start += (data.length || 0);
+	}
+	
+	get_list();
+	$(".more-btn .btn").click(function() {
+		get_list()
+	});
+});
+</script>
+
+<div class="layout-wrapper layout-wrapper-background">
+	<div class="web-content" id="content-product_search">
+		<div class="layout-main" style="padding: 30px;">
+			{% include 'html/product_search_box.html' %}
+			<h3 class="search-results">Search Results</h3>
+			<div id="search-list">
+				
+			</div>
+			<div class="more-btn" style="text-align: middle; display: none;">
+				<button class="btn">More...</button>
+			</div>
+		</div>
+	</div>
+</div>
+
+{% endblock %}
\ No newline at end of file