diff --git a/css/all-app.css b/css/all-app.css
index 0e432d4..3fb5692 100644
--- a/css/all-app.css
+++ b/css/all-app.css
@@ -1944,6 +1944,24 @@
 body {
 	font-family: "Helvetica Neue", Helvetica, "Helvetica Neue", sans-serif;
 	font-size: 13px;
+	background-color: #eee;
+}
+
+footer {
+	background: #b7b7b7; /* Old browsers */
+	background: -moz-linear-gradient(top,  #b7b7b7 0%, #eeeeee 36%); /* FF3.6+ */
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b7b7b7), color-stop(36%,#eeeeee)); /* Chrome,Safari4+ */
+	background: -webkit-linear-gradient(top,  #b7b7b7 0%,#eeeeee 36%); /* Chrome10+,Safari5.1+ */
+	background: -o-linear-gradient(top,  #b7b7b7 0%,#eeeeee 36%); /* Opera 11.10+ */
+	background: -ms-linear-gradient(top,  #b7b7b7 0%,#eeeeee 36%); /* IE10+ */
+	background: linear-gradient(top,  #b7b7b7 0%,#eeeeee 36%); /* W3C */
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b7b7b7', endColorstr='#eeeeee',GradientType=0 ); /* IE6-9 */
+	border-top: 1px solid #999;
+	text-align: center;
+	color: inherit;
+	padding: 10px;
+	font-size: 12px;
+	line-height: 1.7;	
 }
 
 span, div, td, input, textarea, button, select {
@@ -2049,10 +2067,10 @@
 }
 
 div#body_div {
-	display: none;
 	padding-right: 7px;
 	padding-top: 70px;
 	padding-bottom: 50px;
+	min-height: 400px;
 }
 
 .content {
diff --git a/css/all-web.css b/css/all-web.css
index 9fbfd3a..802b787 100644
--- a/css/all-web.css
+++ b/css/all-web.css
@@ -1805,6 +1805,24 @@
 body {
 	font-family: "Helvetica Neue", Helvetica, "Helvetica Neue", sans-serif;
 	font-size: 13px;
+	background-color: #eee;
+}
+
+footer {
+	background: #b7b7b7; /* Old browsers */
+	background: -moz-linear-gradient(top,  #b7b7b7 0%, #eeeeee 36%); /* FF3.6+ */
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b7b7b7), color-stop(36%,#eeeeee)); /* Chrome,Safari4+ */
+	background: -webkit-linear-gradient(top,  #b7b7b7 0%,#eeeeee 36%); /* Chrome10+,Safari5.1+ */
+	background: -o-linear-gradient(top,  #b7b7b7 0%,#eeeeee 36%); /* Opera 11.10+ */
+	background: -ms-linear-gradient(top,  #b7b7b7 0%,#eeeeee 36%); /* IE10+ */
+	background: linear-gradient(top,  #b7b7b7 0%,#eeeeee 36%); /* W3C */
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#b7b7b7', endColorstr='#eeeeee',GradientType=0 ); /* IE6-9 */
+	border-top: 1px solid #999;
+	text-align: center;
+	color: inherit;
+	padding: 10px;
+	font-size: 12px;
+	line-height: 1.7;	
 }
 
 span, div, td, input, textarea, button, select {
@@ -1910,10 +1928,10 @@
 }
 
 div#body_div {
-	display: none;
 	padding-right: 7px;
 	padding-top: 70px;
 	padding-bottom: 50px;
+	min-height: 400px;
 }
 
 .content {
@@ -2597,21 +2615,7 @@
 
 
 footer {
-	background-color: #eee;
-	box-shadow: inset 0 10px 10px rgba(0,0,0,0.3), inset 0 3px 3px rgba(0,0,0,0.3);
-	border-top: 1px solid #555;
-	padding-top: 10px;
-	text-align: center;
-}
 
-.web-footer {
-	color: inherit;
-	padding: 10px;
-	line-height: 1.7;
-}
-
-.web-footer div, .web-footer a {
-	font-size: 12px;
 }
 
 .web-footer-menu {
diff --git a/erpnext/startup/event_handlers.py b/erpnext/startup/event_handlers.py
index 37ffe9b..c58d378 100644
--- a/erpnext/startup/event_handlers.py
+++ b/erpnext/startup/event_handlers.py
@@ -67,7 +67,7 @@
 			parent_label, parentfield
 			from `tabTop Bar Item` where parent='Website Settings' order by idx asc""", as_dict=1)
 		bootinfo['startup_code'] = \
-			webnotes.conn.get_value('Website Settings', None, 'startup_code')		
+			webnotes.conn.get_value('Website Settings', None, 'startup_code')
 	else:	
 		bootinfo['letter_heads'] = get_letter_heads()
 
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index ab61f28..aa77e85 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -156,6 +156,9 @@
 		if self.doc.has_serial_no == 'Yes' and self.doc.is_stock_item == 'No':
 			msgprint("'Has Serial No' can not be 'Yes' for non-stock item", raise_exception=1)
 
+		# make product page
+		self.make_page()
+
 	def check_non_asset_warehouse(self):
 		if self.doc.is_asset_item == "Yes":
 			existing_qty = sql("select t1.warehouse, t1.actual_qty from tabBin t1, tabWarehouse t2 where t1.item_code=%s and (t2.warehouse_type!='Fixed Asset' or t2.warehouse_type is null) and t1.warehouse=t2.name and t1.actual_qty > 0", self.doc.name)
@@ -208,3 +211,35 @@
 	def on_rename(self,newdn,olddn):
 		sql("update tabItem set item_code = %s where name = %s", (newdn, olddn))
 
+	def make_page(self):
+		if self.doc.show_in_website=='Yes':
+
+			import website.utils
+
+			if self.doc.page_name:
+				import webnotes.model
+				webnotes.model.delete_doc('Page', self.doc.page_name)
+				
+			p = website.utils.add_page("Product " + self.doc.item_name)
+			self.doc.page_name = p.name
+
+			from jinja2 import Template
+			import markdown2
+			import os
+
+
+			self.doc.long_description_html = markdown2.markdown(self.doc.description or '')
+
+			with open(os.path.join(os.path.dirname(__file__), 'template.html'), 'r') as f:
+				p.content = Template(f.read()).render(doc=self.doc)
+
+			with open(os.path.join(os.path.dirname(__file__), 'product_page.js'), 'r') as f:
+				p.script = Template(f.read()).render(doc=self.doc)
+
+			p.save()
+
+			website.utils.add_guest_access_to_page(p.name)
+
+			del self.doc.fields['long_description_html']
+
+			
\ No newline at end of file
diff --git a/erpnext/stock/doctype/item/item.txt b/erpnext/stock/doctype/item/item.txt
index 28efdf8..9cdb99f 100644
--- a/erpnext/stock/doctype/item/item.txt
+++ b/erpnext/stock/doctype/item/item.txt
@@ -3,9 +3,9 @@
 
 	# These values are common in all dictionaries
 	{
-		'creation': '2012-03-27 14:36:31',
+		'creation': '2012-04-02 16:02:29',
 		'docstatus': 0,
-		'modified': '2012-03-27 18:51:27',
+		'modified': '2012-04-30 14:08:08',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -29,7 +29,7 @@
 		'show_in_menu': 0,
 		'subject': u'%(item_name)s',
 		'tag_fields': u'item_group',
-		'version': 172
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -59,6 +59,73 @@
 
 	# DocPerm
 	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Material Manager',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Material Manager',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Material User',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'amend': 0,
+		'cancel': 0,
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Material User',
+		'submit': 0,
+		'write': 0
+	},
+
+	# DocPerm
+	{
+		'cancel': 1,
+		'create': 1,
+		'doctype': u'DocPerm',
+		'permlevel': 0,
+		'role': u'Material Master Manager',
+		'write': 1
+	},
+
+	# DocPerm
+	{
+		'create': 0,
+		'doctype': u'DocPerm',
+		'permlevel': 1,
+		'role': u'Material Master Manager',
+		'write': 0
+	},
+
+	# DocPerm
+	{
 		'cancel': 1,
 		'create': 1,
 		'doctype': u'DocPerm',
@@ -69,78 +136,11 @@
 
 	# DocPerm
 	{
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Material Master Manager',
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'cancel': 1,
-		'create': 1,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Material Master Manager',
-		'write': 1
-	},
-
-	# DocPerm
-	{
 		'doctype': u'DocPerm',
 		'permlevel': 1,
 		'role': u'System Manager'
 	},
 
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Material Manager',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Material Manager',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 1,
-		'role': u'Material User',
-		'submit': 0,
-		'write': 0
-	},
-
-	# DocPerm
-	{
-		'amend': 0,
-		'cancel': 0,
-		'create': 0,
-		'doctype': u'DocPerm',
-		'permlevel': 0,
-		'role': u'Material User',
-		'submit': 0,
-		'write': 0
-	},
-
 	# DocField
 	{
 		'doctype': u'DocField',
@@ -725,6 +725,26 @@
 	# DocField
 	{
 		'doctype': u'DocField',
+		'fieldname': u'show_in_website',
+		'fieldtype': u'Select',
+		'label': u'Show in Website',
+		'options': u'No\nYes',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'website_image',
+		'fieldtype': u'Select',
+		'label': u'website_image',
+		'options': u'attach_files:',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
 		'fieldname': u'max_discount',
 		'fieldtype': u'Currency',
 		'label': u'Max Discount (%)',
@@ -767,6 +787,17 @@
 
 	# DocField
 	{
+		'colour': u'White:FFF',
+		'description': u'website page link',
+		'doctype': u'DocField',
+		'fieldname': u'page_name',
+		'fieldtype': u'Data',
+		'label': u'Page Name',
+		'permlevel': 1
+	},
+
+	# DocField
+	{
 		'doctype': u'DocField',
 		'fieldname': u'column_break3',
 		'fieldtype': u'Column Break',
diff --git a/erpnext/utilities/page/messages/messages.py b/erpnext/utilities/page/messages/messages.py
index 212a268..db27805 100644
--- a/erpnext/utilities/page/messages/messages.py
+++ b/erpnext/utilities/page/messages/messages.py
@@ -55,6 +55,7 @@
 
 @webnotes.whitelist()
 def post(arg=None):
+	import webnotes
 	"""post message"""
 	if arg:
 		import json
diff --git a/erpnext/website/css/website.css b/erpnext/website/css/website.css
index fa27d4a..a68209f 100644
--- a/erpnext/website/css/website.css
+++ b/erpnext/website/css/website.css
@@ -65,21 +65,7 @@
 
 
 footer {
-	background-color: #eee;
-	box-shadow: inset 0 10px 10px rgba(0,0,0,0.3), inset 0 3px 3px rgba(0,0,0,0.3);
-	border-top: 1px solid #555;
-	padding-top: 10px;
-	text-align: center;
-}
 
-.web-footer {
-	color: inherit;
-	padding: 10px;
-	line-height: 1.7;
-}
-
-.web-footer div, .web-footer a {
-	font-size: 12px;
 }
 
 .web-footer-menu {
diff --git a/erpnext/website/doctype/blog/blog.py b/erpnext/website/doctype/blog/blog.py
index c78a9cc..37f77a5 100644
--- a/erpnext/website/doctype/blog/blog.py
+++ b/erpnext/website/doctype/blog/blog.py
@@ -33,6 +33,10 @@
 	
 	def validate(self):
 		"""write/update 'Page' with the blog"""
+		# we need the name for the templates
+		if not self.doc.name:
+			self.autoname()
+		
 		if self.doc.page_name:
 			webnotes.conn.sql("""delete from tabPage where name=%s""", self.doc.page_name)
 		
diff --git a/erpnext/website/doctype/product/__init__.py b/erpnext/website/doctype/product/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/website/doctype/product/__init__.py
+++ /dev/null
diff --git a/erpnext/website/doctype/product/product.js b/erpnext/website/doctype/product/product.js
deleted file mode 100644
index ebdc90a..0000000
--- a/erpnext/website/doctype/product/product.js
+++ /dev/null
@@ -1,22 +0,0 @@
-// ERPNext - web based ERP (http://erpnext.com)
-// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-// 
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-// 
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-// 
-// You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-$.extend(cur_frm.cscript, {
-	onload: function() {
-		cur_frm.add_fetch('item', 'description', 'short_description');
-		cur_frm.add_fetch('item', 'item_name', 'title');
-	}
-});
\ No newline at end of file
diff --git a/erpnext/website/doctype/product/product.py b/erpnext/website/doctype/product/product.py
deleted file mode 100644
index 4abddc0..0000000
--- a/erpnext/website/doctype/product/product.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# ERPNext - web based ERP (http://erpnext.com)
-# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-# 
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import webnotes
-
-class DocType:
-	def __init__(self, d, dl):
-		self.doc, self.doclist = d, dl
-		
-	def validate(self):
-		"""make page for this product"""
-		import website.utils
-		
-		p = website.utils.add_page("Product " + self.doc.title)
-		
-		from jinja2 import Template
-		import markdown2
-		import os
-		
-		self.doc.item_group = webnotes.conn.get_value('Item', self.doc.item, 'item_group')
-		self.doc.long_description_html = markdown2.markdown(self.doc.long_description or '')
-		
-		with open(os.path.join(os.path.dirname(__file__), 'template.html'), 'r') as f:
-			p.content = Template(f.read()).render(doc=self.doc)
-		
-		with open(os.path.join(os.path.dirname(__file__), 'product_page.js'), 'r') as f:
-			p.script = Template(f.read()).render(doc=self.doc)
-		
-		p.save()
-		
-		website.utils.add_guest_access_to_page(p.name)
-		self.doc.page_name = p.name
-		self.make_item_group_active()
-
-		del self.doc.fields['long_description_html']
-		del self.doc.fields['item_group']
-
-	def make_item_group_active(self):
-		"""show item group in website"""
-		if self.doc.published:
-			from webnotes.model.doc import Document
-			ig = Document('Item Group', self.doc.item_group)
-			ig.show_in_website = 1
-			ig.save()
diff --git a/erpnext/website/doctype/product/product.txt b/erpnext/website/doctype/product/product.txt
deleted file mode 100644
index 7d9c770..0000000
--- a/erpnext/website/doctype/product/product.txt
+++ /dev/null
@@ -1,266 +0,0 @@
-# DocType, Product
-[
-
-	# These values are common in all dictionaries
-	{
-		'creation': '2012-03-27 14:36:47',
-		'docstatus': 0,
-		'modified': '2012-03-27 14:36:47',
-		'modified_by': u'Administrator',
-		'owner': u'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'_last_update': u'1327997783',
-		'allow_attach': 1,
-		'autoname': u'field:item',
-		'colour': u'White:FFF',
-		'description': u'A Product is shown on the website and is linked to an item.',
-		'doctype': 'DocType',
-		'document_type': u'Master',
-		'max_attachments': 5,
-		'module': u'Website',
-		'name': '__common__',
-		'section_style': u'Simple',
-		'show_in_menu': 0,
-		'version': 12
-	},
-
-	# These values are common for all DocField
-	{
-		'doctype': u'DocField',
-		'name': '__common__',
-		'parent': u'Product',
-		'parentfield': u'fields',
-		'parenttype': u'DocType'
-	},
-
-	# These values are common for all DocPerm
-	{
-		'amend': 0,
-		'create': 1,
-		'doctype': u'DocPerm',
-		'name': '__common__',
-		'parent': u'Product',
-		'parentfield': u'permissions',
-		'parenttype': u'DocType',
-		'permlevel': 0,
-		'read': 1,
-		'submit': 0,
-		'write': 1
-	},
-
-	# DocType, Product
-	{
-		'doctype': 'DocType',
-		'name': u'Product'
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'doctype': u'DocPerm',
-		'role': u'Sales Manager'
-	},
-
-	# DocPerm
-	{
-		'cancel': 0,
-		'doctype': u'DocPerm',
-		'role': u'Sales User'
-	},
-
-	# DocPerm
-	{
-		'cancel': 1,
-		'doctype': u'DocPerm',
-		'role': u'Website Manager'
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'doctype': u'DocField',
-		'fieldname': u'item',
-		'fieldtype': u'Link',
-		'label': u'Item',
-		'options': u'Item',
-		'permlevel': 0,
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'title',
-		'fieldtype': u'Data',
-		'label': u'Title',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'published',
-		'fieldtype': u'Check',
-		'label': u'Published',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Select Price List for the web. Leave blank to hide price.',
-		'doctype': u'DocField',
-		'fieldname': u'price_list',
-		'fieldtype': u'Link',
-		'label': u'Price List',
-		'options': u'Price List',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Select shipping warehouse to show "In Stock" or "Out of Stock". To hide, leave blank',
-		'doctype': u'DocField',
-		'fieldname': u'warehouse',
-		'fieldtype': u'Link',
-		'label': u'Warehouse',
-		'options': u'Warehouse',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'column_break0',
-		'fieldtype': u'Column Break',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Image for listing (Width: 100px) (Attach First)',
-		'doctype': u'DocField',
-		'fieldname': u'thumbnail_image',
-		'fieldtype': u'Select',
-		'label': u'Thumbnail Image',
-		'options': u'attach_files:',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Image for listing (Width: 300px) (Attach First)',
-		'doctype': u'DocField',
-		'fieldname': u'full_image',
-		'fieldtype': u'Select',
-		'label': u'Full Image',
-		'options': u'attach_files:',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'doctype': u'DocField',
-		'fieldname': u'short_description',
-		'fieldtype': u'Text',
-		'label': u'Short Description',
-		'permlevel': 0,
-		'reqd': 1
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'section_break0',
-		'fieldtype': u'Section Break',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Full description (formatted as markdown)',
-		'doctype': u'DocField',
-		'fieldname': u'long_description',
-		'fieldtype': u'Code',
-		'label': u'Long Description',
-		'permlevel': 0,
-		'reqd': 0
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'section_break1',
-		'fieldtype': u'Section Break',
-		'permlevel': 0
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'page_name',
-		'fieldtype': u'Data',
-		'label': u'Page Name',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'doctype': u'DocField',
-		'fieldname': u'price',
-		'fieldtype': u'Currency',
-		'hidden': 0,
-		'label': u'Price',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		'colour': u'White:FFF',
-		'doctype': u'DocField',
-		'fieldname': u'sales',
-		'fieldtype': u'Currency',
-		'label': u'Sales',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'stock',
-		'fieldtype': u'Currency',
-		'label': u'Stock',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'currency',
-		'fieldtype': u'Link',
-		'label': u'Currency',
-		'options': u'Currency',
-		'permlevel': 1
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'file_list',
-		'fieldtype': u'Text',
-		'hidden': 1,
-		'label': u'File List',
-		'no_copy': 1,
-		'permlevel': 0,
-		'print_hide': 1
-	}
-]
\ No newline at end of file
diff --git a/erpnext/website/doctype/product/product_page.js b/erpnext/website/doctype/product/product_page.js
deleted file mode 100644
index 926ef69..0000000
--- a/erpnext/website/doctype/product/product_page.js
+++ /dev/null
@@ -1,63 +0,0 @@
-// ERPNext - web based ERP (http://erpnext.com)
-// Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-// 
-// This program is free software: you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-// 
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-// 
-// You should have received a copy of the GNU General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-wn.require('erpnext/website/js/product_category.js');
-
-pscript["onload_{{ doc.page_name }}"] = function(wrapper) {
-	wrapper.product_group = "{{ doc.item_group }}";
-	wrapper.product_name = "{{ doc.name }}";
-	erpnext.make_product_categories(wrapper);
-	$(wrapper).find('.product-inquiry').click(function() {
-		loadpage('contact', function() {
-			$('#content-contact-us [name="contact-message"]').val("Hello,\n\n\
-			Please send me more information on {{ doc.title }} (Item Code:{{ doc.item }})\n\n\
-			My contact details are:\n\nThank you!\
-			");
-		})
-	});
-	
-	// similar products
-	wrapper.similar = new wn.ui.Listing({
-		parent: $(wrapper).find('.similar-products').get(0),
-		hide_refresh: true,
-		page_length: 5,
-		get_query: function() {
-			args = {
-				cat: wrapper.product_group,
-				name: wrapper.product_name
-			};
-			return repl('select t1.name, t1.title, t1.thumbnail_image, \
-				t1.page_name, t1.short_description \
-				from tabProduct t1, tabItem t2 \
-				where t1.item = t2.name \
-				and ifnull(t1.published,0)=1 \
-				and t1.name != "%(name)s" \
-				and t2.item_group="%(cat)s" order by t1.modified desc', args)
-		},
-		render_row: function(parent, data) {
-			if(data.short_description.length > 100) {
-				data.short_description = data.short_description.substr(0,100) + '...';
-			}
-			parent.innerHTML = repl('<div style="float:left; width: 60px;">\
-				<img src="files/%(thumbnail_image)s" style="width:55px;"></div>\
-				<div style="float:left; width: 180px">\
-					<b><a href="#!%(page_name)s">%(title)s</a></b>\
-					<p>%(short_description)s</p></div>\
-				<div style="clear: both; margin-bottom: 15px;"></div>', data);
-		}
-	});
-	wrapper.similar.run();
-}
\ No newline at end of file
diff --git a/erpnext/website/doctype/product/template.html b/erpnext/website/doctype/product/template.html
deleted file mode 100644
index 926b650..0000000
--- a/erpnext/website/doctype/product/template.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<div class="layout_wrapper">
-	<div class="web-content" id="content-product-{{ doc.name }}">
-		<h1>{{ doc.title }}</h1>
-		<div class="web-main-section">
-			<div style="float: left;">
-				<image src="files/{{ doc.full_image }}" style="width: 300px; 
-					margin-left: 15px;" />
-				{{ doc.long_description_html }}
-				<button class="btn primary product-inquiry" 
-					data-product="{{ doc.name }}"
-					data-description="{{ doc.short_description }}">Send Inquiry</button>
-			</div>
-		</div>
-		<div class="web-side-section">
-			<div class="info-box round">
-				<p><b>Item Code:</b> {{ doc.item }}</p>
-				<p>{{ doc.short_description }}</p>
-				<p><button class="btn primary product-inquiry" 
-					data-product="{{ doc.name }}"
-					data-description="{{ doc.short_description }}">Send Inquiry</button>
-				</p>
-			</div>
-			<br>
-			<h4>More Categories</h4>
-			<div class="more-categories"></div>
-			<br>
-			<h4>Similar Products</h4>
-			<div class="similar-products"></div>
-		</div>
-		<div style="clear: both"></div>
-	</div>
-</div>
\ No newline at end of file
diff --git a/erpnext/website/doctype/product_group/__init__.py b/erpnext/website/doctype/product_group/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/website/doctype/product_group/__init__.py
+++ /dev/null
diff --git a/erpnext/website/doctype/product_group/product_group.txt b/erpnext/website/doctype/product_group/product_group.txt
deleted file mode 100644
index e199b86..0000000
--- a/erpnext/website/doctype/product_group/product_group.txt
+++ /dev/null
@@ -1,57 +0,0 @@
-# DocType, Product Group
-[
-
-	# These values are common in all dictionaries
-	{
-		'creation': '2012-03-27 14:36:48',
-		'docstatus': 0,
-		'modified': '2012-03-27 14:36:48',
-		'modified_by': u'Administrator',
-		'owner': u'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'colour': u'White:FFF',
-		'doctype': 'DocType',
-		'istable': 1,
-		'module': u'Website',
-		'name': '__common__',
-		'section_style': u'Simple',
-		'show_in_menu': 0,
-		'version': 1
-	},
-
-	# These values are common for all DocField
-	{
-		'doctype': u'DocField',
-		'name': '__common__',
-		'parent': u'Product Group',
-		'parentfield': u'fields',
-		'parenttype': u'DocType',
-		'permlevel': 0
-	},
-
-	# DocType, Product Group
-	{
-		'doctype': 'DocType',
-		'name': u'Product Group'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'item_group',
-		'fieldtype': u'Link',
-		'label': u'Item Group',
-		'options': u'Item Group'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField',
-		'fieldname': u'label',
-		'fieldtype': u'Data',
-		'label': u'Label'
-	}
-]
\ No newline at end of file
diff --git a/erpnext/website/doctype/products_settings/__init__.py b/erpnext/website/doctype/products_settings/__init__.py
deleted file mode 100644
index e69de29..0000000
--- a/erpnext/website/doctype/products_settings/__init__.py
+++ /dev/null
diff --git a/erpnext/website/doctype/products_settings/products_settings.py b/erpnext/website/doctype/products_settings/products_settings.py
deleted file mode 100644
index 23c247d..0000000
--- a/erpnext/website/doctype/products_settings/products_settings.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# ERPNext - web based ERP (http://erpnext.com)
-# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
-# 
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-# 
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-# 
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-import webnotes
-
-class DocType:
-	def __init__(self, d, dl):
-		self.doc, self.doclist = d, dl
-	
-	def on_update(self):
-		tmp = None
-		for d in self.doclist:
-			if d.doctype=="Product Group":
-				import json
-				tmp = json.dumps({"item_group": d.item_group, "label":d.label})
-				break
-				
-		webnotes.conn.set_default("default_product_category", tmp)
-		
-		from webnotes.session_cache import clear_cache
-		clear_cache('Guest')
\ No newline at end of file
diff --git a/erpnext/website/doctype/products_settings/products_settings.txt b/erpnext/website/doctype/products_settings/products_settings.txt
deleted file mode 100644
index 31d2074..0000000
--- a/erpnext/website/doctype/products_settings/products_settings.txt
+++ /dev/null
@@ -1,72 +0,0 @@
-# DocType, Products Settings
-[
-
-	# These values are common in all dictionaries
-	{
-		'creation': '2012-03-27 14:36:48',
-		'docstatus': 0,
-		'modified': '2012-03-27 14:36:48',
-		'modified_by': u'Administrator',
-		'owner': u'Administrator'
-	},
-
-	# These values are common for all DocType
-	{
-		'_last_update': u'1327911653',
-		'colour': u'White:FFF',
-		'description': u'\n\n',
-		'doctype': 'DocType',
-		'issingle': 1,
-		'module': u'Website',
-		'name': '__common__',
-		'section_style': u'Simple',
-		'show_in_menu': 0,
-		'version': 4
-	},
-
-	# These values are common for all DocField
-	{
-		'colour': u'White:FFF',
-		'description': u'Product Groups that are listed on the website. The first product group from this list will be listed by default on the "Products Page"',
-		'doctype': u'DocField',
-		'fieldname': u'groups',
-		'fieldtype': u'Table',
-		'label': u'Groups',
-		'name': '__common__',
-		'options': u'Product Group',
-		'parent': u'Products Settings',
-		'parentfield': u'fields',
-		'parenttype': u'DocType',
-		'permlevel': 0
-	},
-
-	# These values are common for all DocPerm
-	{
-		'create': 1,
-		'doctype': u'DocPerm',
-		'name': '__common__',
-		'parent': u'Products Settings',
-		'parentfield': u'permissions',
-		'parenttype': u'DocType',
-		'permlevel': 0,
-		'read': 1,
-		'role': u'Website Manager',
-		'write': 1
-	},
-
-	# DocType, Products Settings
-	{
-		'doctype': 'DocType',
-		'name': u'Products Settings'
-	},
-
-	# DocPerm
-	{
-		'doctype': u'DocPerm'
-	},
-
-	# DocField
-	{
-		'doctype': u'DocField'
-	}
-]
\ No newline at end of file
diff --git a/erpnext/website/doctype/web_page/web_page.py b/erpnext/website/doctype/web_page/web_page.py
index ff8a904..7f50d53 100644
--- a/erpnext/website/doctype/web_page/web_page.py
+++ b/erpnext/website/doctype/web_page/web_page.py
@@ -27,8 +27,13 @@
 
 	def validate(self):
 		"""make page for this product"""
-		if not self.doc.name:				
-			self.doc.name = website.utils.page_name(self.doc.title)
+
+		# we need the name for the templates
+		if not self.doc.name:
+			self.autoname()
+
+		if self.doc.page_name:
+			webnotes.conn.sql("""delete from tabPage where name=%s""", self.doc.page_name)
 
 		p = website.utils.add_page(self.doc.name)
 		
@@ -38,9 +43,7 @@
 	
 		self.doc.updated = global_date_format(self.doc.modified)
 		website.utils.markdown(self.doc, ['head_section','main_section', 'side_section'])
-		
-		self.add_page_links()
-		
+				
 		with open(os.path.join(os.path.dirname(__file__), 'template.html'), 'r') as f:
 			p.content = Template(f.read()).render(doc=self.doc)
 
diff --git a/erpnext/website/doctype/web_page/web_page.txt b/erpnext/website/doctype/web_page/web_page.txt
index fb6febd..f5d1280 100644
--- a/erpnext/website/doctype/web_page/web_page.txt
+++ b/erpnext/website/doctype/web_page/web_page.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2012-04-02 16:02:43',
 		'docstatus': 0,
-		'modified': '2012-04-25 16:03:57',
+		'modified': '2012-04-28 10:03:45',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -22,7 +22,7 @@
 		'name': '__common__',
 		'section_style': u'Simple',
 		'show_in_menu': 0,
-		'version': 16
+		'version': 17
 	},
 
 	# These values are common for all DocField
@@ -31,8 +31,7 @@
 		'name': '__common__',
 		'parent': u'Web Page',
 		'parentfield': u'fields',
-		'parenttype': u'DocType',
-		'permlevel': 0
+		'parenttype': u'DocType'
 	},
 
 	# These values are common for all DocPerm
@@ -71,7 +70,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'sb0',
 		'fieldtype': u'Section Break',
-		'label': u'Title and Style'
+		'label': u'Title and Style',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -82,6 +82,7 @@
 		'fieldname': u'title',
 		'fieldtype': u'Data',
 		'label': u'Title',
+		'permlevel': 0,
 		'reqd': 1
 	},
 
@@ -90,6 +91,7 @@
 		'doctype': u'DocField',
 		'fieldname': u'cb1',
 		'fieldtype': u'Column Break',
+		'permlevel': 0,
 		'width': u'50%'
 	},
 
@@ -99,7 +101,8 @@
 		'fieldname': u'layout',
 		'fieldtype': u'Select',
 		'label': u'Layout',
-		'options': u'Two column with header\nTwo column\nSingle column'
+		'options': u'Two column with header\nTwo column\nSingle column',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -109,7 +112,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'sb1',
 		'fieldtype': u'Section Break',
-		'label': u'Content'
+		'label': u'Content',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -119,7 +123,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'head_section',
 		'fieldtype': u'Text',
-		'label': u'Head Section'
+		'label': u'Head Section',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -129,7 +134,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'main_section',
 		'fieldtype': u'Code',
-		'label': u'Main Section'
+		'label': u'Main Section',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -139,7 +145,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'side_section',
 		'fieldtype': u'Code',
-		'label': u'Side Section'
+		'label': u'Side Section',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -149,7 +156,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'sb2',
 		'fieldtype': u'Section Break',
-		'label': u'More'
+		'label': u'More',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -158,7 +166,8 @@
 		'fieldname': u'text_align',
 		'fieldtype': u'Select',
 		'label': u'Text Align',
-		'options': u'Left\nCenter\nRight'
+		'options': u'Left\nCenter\nRight',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -167,7 +176,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'insert_code',
 		'fieldtype': u'Check',
-		'label': u'Insert Code'
+		'label': u'Insert Code',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -175,7 +185,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'javascript',
 		'fieldtype': u'Code',
-		'label': u'Javascript'
+		'label': u'Javascript',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -183,7 +194,8 @@
 		'doctype': u'DocField',
 		'fieldname': u'insert_style',
 		'fieldtype': u'Check',
-		'label': u'Insert Style'
+		'label': u'Insert Style',
+		'permlevel': 0
 	},
 
 	# DocField
@@ -191,7 +203,17 @@
 		'doctype': u'DocField',
 		'fieldname': u'css',
 		'fieldtype': u'Code',
-		'label': u'CSS'
+		'label': u'CSS',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
+		'doctype': u'DocField',
+		'fieldname': u'page_name',
+		'fieldtype': u'Data',
+		'label': u'Page Name',
+		'permlevel': 1
 	},
 
 	# DocField
@@ -202,6 +224,7 @@
 		'hidden': 1,
 		'label': u'File List',
 		'no_copy': 1,
+		'permlevel': 0,
 		'print_hide': 1
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/website/doctype/website_settings/website_settings.txt b/erpnext/website/doctype/website_settings/website_settings.txt
index ce2a18e..71093dd 100644
--- a/erpnext/website/doctype/website_settings/website_settings.txt
+++ b/erpnext/website/doctype/website_settings/website_settings.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2012-04-02 16:38:02',
 		'docstatus': 0,
-		'modified': '2012-04-27 16:41:40',
+		'modified': '2012-04-30 14:20:56',
 		'modified_by': u'Administrator',
 		'owner': u'Administrator'
 	},
@@ -23,7 +23,7 @@
 		'name': '__common__',
 		'section_style': u'Simple',
 		'show_in_menu': 0,
-		'version': 11
+		'version': 1
 	},
 
 	# These values are common for all DocField
@@ -111,6 +111,16 @@
 
 	# DocField
 	{
+		'doctype': u'DocField',
+		'fieldname': u'default_product_category',
+		'fieldtype': u'Link',
+		'label': u'Default Product Category',
+		'options': u'Item Group',
+		'permlevel': 0
+	},
+
+	# DocField
+	{
 		'colour': u'White:FFF',
 		'description': u'Brand is what appears on the top-right of the toolbar. If it is an image, make sure it\nhas a transparent background and use the &lt;img /&gt; tag',
 		'doctype': u'DocField',
diff --git a/erpnext/website/js/product_category.js b/erpnext/website/js/product_category.js
index 956d7a6..8d3f898 100644
--- a/erpnext/website/js/product_category.js
+++ b/erpnext/website/js/product_category.js
@@ -14,25 +14,16 @@
 // You should have received a copy of the GNU General Public License
 // along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-// make sidelisting of categories
-erpnext.product_item_group = {}
-
 erpnext.make_product_categories = function(wrapper) {
 	wrapper.category_list = new wn.ui.Listing({
 		parent: $(wrapper).find('.more-categories').get(0),
-		query: 'select label, count(t2.name) as items, t1.item_group \
-			from `tabProduct Group` t1, `tabProduct` t2, tabItem t3\
-			where t1.parent="Products Settings" \
-			and t2.item = t3.name \
-			and t3.item_group = t1.item_group \
-			and ifnull(t2.published, 0)=1 \
-			group by t1.item_group \
-			order by t1.idx',
+		query: 'select count(name) as items, item_group \
+			from tabItem where is_sales_item="Yes" \
+			group by item_group order by items desc',
 		hide_refresh: true,
 		render_row: function(parent, data) {
-			parent.innerHTML = repl('<a href="#!products/%(label)s">%(label)s</a> (%(items)s)', 
+			parent.innerHTML = repl('<a href="#!products/%(item_group)s">%(item_group)s</a> (%(items)s)', 
 				data);
-			erpnext.product_item_group[data.label] = data.item_group;
 		}
 	});
 	wrapper.category_list.run();	
diff --git a/erpnext/website/page/products/products.html b/erpnext/website/page/products/products.html
index 3e460d2..30eca4a 100644
--- a/erpnext/website/page/products/products.html
+++ b/erpnext/website/page/products/products.html
@@ -1,11 +1,12 @@
-<div class="layout_wrapper" id="content-products">
-	<h1 class="products-category"></h1>
-	<div class="web-main-section">
+<div class="layout-wrapper layout-wrapper-background" id="content-products">
+	<div class="layout-main-section">
+		<h1 class="products-category"></h1>
 		<div class="products-search" style="margin-bottom: 15px;">
 			<input name="products-search" /><button class="btn" style="margin-left: 7px">Search</button>
 		</div>
+		<div class="products-list"></div>
 	</div>
-	<div class="web-side-section">
+	<div class="layout-side-section">
 		<h3>Categories</h3>
 		<div class="more-categories"></div>
 	</div>
diff --git a/erpnext/website/page/products/products.js b/erpnext/website/page/products/products.js
index 09ccba0..d7abfe4 100644
--- a/erpnext/website/page/products/products.js
+++ b/erpnext/website/page/products/products.js
@@ -19,11 +19,10 @@
 wn.require('erpnext/website/js/product_category.js');
 
 pscript.onload_products = function(wrapper) {
-	sys_defaults.default_product_category = JSON.parse(sys_defaults.default_product_category);
+	erpnext.make_product_categories(wrapper);
 	erpnext.products.wrapper = wrapper;	
 
 	// make lists
-	erpnext.make_product_categories(wrapper);
 	erpnext.products.make_product_list(wrapper);
 	
 	// button
@@ -42,15 +41,15 @@
 }
 
 erpnext.products.get_group = function() {
-	var route = window.location.hash.split('/');
+	route = wn.get_route();
 	if(route.length>1) {
 		// from url
-		var grp = erpnext.product_item_group[route[1]];
+		var grp = route[1];
 		var label = route[1];
 	} else {
 		// default
-		var grp = sys_defaults.default_product_category.item_group;
-		var label = sys_defaults.default_product_category.label;
+		var grp = wn.boot.website_settings.default_product_category;
+		var label = wn.boot.website_settings.default_product_category;
 	}
 	erpnext.products.cur_group = grp;
 	return {grp:grp, label:label};
@@ -58,32 +57,39 @@
 
 erpnext.products.make_product_list = function(wrapper) {
 	wrapper.mainlist = new wn.ui.Listing({
-		parent: $(wrapper).find('.web-main-section').get(0),
+		parent: $(wrapper).find('.products-list').get(0),
 		run_btn: $(wrapper).find('.products-search .btn').get(0),
-		hide_refresh: true,
+		no_toolbar: true,
 		get_query: function() {
 			var srch = $('input[name="products-search"]').val()
-			var search_cond = 'and (t1.short_description like "%%(srch)s%"\
-				or t1.title like "%%(srch)s%")';
+			var search_cond = 'and (description like "%%(srch)s%"\
+				or item_name like "%%(srch)s%")';
 			args = {
 				search_cond: srch ? repl(search_cond, {srch:srch}) : '',
 				cat: erpnext.products.cur_group
 			};
-			return repl('select t1.name, t1.title, t1.thumbnail_image, \
-				t1.page_name, t1.short_description \
-				from tabProduct t1, tabItem t2 \
-				where t1.item = t2.name \
-				and ifnull(t1.published,0)=1 \
-				and t2.item_group="%(cat)s" \
+			return repl('select name, item_name, website_image, \
+				description, page_name \
+				from tabItem \
+				where is_sales_item="Yes" \
+				and item_group="%(cat)s" \
 				%(search_cond)s', args)
 		},
 		render_row: function(parent, data) {
-			parent.innerHTML = repl('<div style="float:left; width: 115px;">\
-				<img src="files/%(thumbnail_image)s" style="width:100px;"></div>\
+			parent.innerHTML = repl('<div style="float:left; width: 115px;" class="img-area">\
+				</div>\
 				<div style="float:left; width: 400px">\
-					<p><b><a href="#!%(page_name)s">%(title)s</a></b></p>\
-					<p>%(short_description)s</p></div>\
-				<div style="clear: both;"></div><hr />', data);
+					<p><b><a href="#!%(page_name)s">%(item_name)s</a></b></p>\
+					<p>%(description)s</p></div>\
+				<div style="clear: both;"></div>', data);
+				
+			if(data.website_image) {
+				$(parent).find('.img-area').append(repl(
+					'<img src="files/%(website_image)s" style="width:100px;">', data))
+			} else {
+				$(parent).find('.img-area').append(wn.dom.placeholder(70, 
+					data.item_name));
+			}
 		}
 	});
 }
diff --git a/erpnext/website/page/website_home/website_home.html b/erpnext/website/page/website_home/website_home.html
index ad8bb55..76dab6a 100644
--- a/erpnext/website/page/website_home/website_home.html
+++ b/erpnext/website/page/website_home/website_home.html
@@ -3,13 +3,11 @@
 	<div class="layout-main-section">
 		<h1>Website</h1>
 		<hr>
+
 		<div style="width: 48%; float: left;">
 			<h4><a href="#!List/Web Page">Web Page</a></h4>
 			<p class="help">Static (content) web page</p>
 			<br>
-			<h4><a href="#!List/Product">Product</a></h4>
-			<p class="help">Product listed in catolog</p>
-			<br>
 			<h4><a href="#!List/Blog">Blog</a></h4>
 			<p class="help">Weblog (blog) entry</p>
 		</div>
@@ -19,9 +17,6 @@
 			<br>
 			<h4><a href="#!Form/Style Settings/Style Settings">Style Settings</a></h4>
 			<p class="help">Setup of fonts and background</p>
-			<br>
-			<h4><a href="#!Form/Products Settings/Products Settings">Products Settings</a></h4>
-			<p class="help">Setup product categories</p>
 		</div>
 		<div style="clear: both"></div>
 		<hr>
@@ -31,9 +26,19 @@
 	<div class="layout-side-section">
 		<div class="psidebar">
 			<div class="section">
-			</div>
+				<p><b>Create website with static pages and blogs</b></p>
+				<ul>
+				<li>"Website Settings" - to setup header and footers.
+				<li>"Web Page" - for static web page.
+				<li>"Blog" - for blog entry.
+				</ul>
+				<p><b>Notes: </b></p>
+				<ul>
+				<li>All pages are accessible via `#` + page name appended to your url.
+				<li>Product catalogue is updated from Item Master (set Show in Website = 'Yes', in
+				 Sales Settings).
+				</ul>			</div>
 		</div>
-
 	</div>
 	<div style="clear: both;"></div>
 </div>
\ No newline at end of file
diff --git a/js/all-app.js b/js/all-app.js
index 675bcab..2e8c721 100644
--- a/js/all-app.js
+++ b/js/all-app.js
@@ -170,17 +170,30 @@
 /*
  *	lib/js/wn/dom.js
  */
-wn.provide('wn.dom');wn.dom.by_id=function(id){return document.getElementById(id);}
-wn.dom.eval=function(txt){if(!txt)return;var el=document.createElement('script');el.appendChild(document.createTextNode(txt));document.getElementsByTagName('head')[0].appendChild(el);}
-wn.dom.set_style=function(txt){if(!txt)return;var se=document.createElement('style');se.type="text/css";if(se.styleSheet){se.styleSheet.cssText=txt;}else{se.appendChild(document.createTextNode(txt));}
-document.getElementsByTagName('head')[0].appendChild(se);}
-wn.dom.add=function(parent,newtag,className,cs,innerHTML,onclick){if(parent&&parent.substr)parent=wn.dom.by_id(parent);var c=document.createElement(newtag);if(parent)
+wn.provide('wn.dom');wn.dom={by_id:function(id){return document.getElementById(id);},eval:function(txt){if(!txt)return;var el=document.createElement('script');el.appendChild(document.createTextNode(txt));document.getElementsByTagName('head')[0].appendChild(el);},set_style:function(txt){if(!txt)return;var se=document.createElement('style');se.type="text/css";if(se.styleSheet){se.styleSheet.cssText=txt;}else{se.appendChild(document.createTextNode(txt));}
+document.getElementsByTagName('head')[0].appendChild(se);},add:function(parent,newtag,className,cs,innerHTML,onclick){if(parent&&parent.substr)parent=wn.dom.by_id(parent);var c=document.createElement(newtag);if(parent)
 parent.appendChild(c);if(className){if(newtag.toLowerCase()=='img')
 c.src=className
 else
 c.className=className;}
-if(cs)wn.dom.css(c,cs);if(innerHTML)c.innerHTML=innerHTML;if(onclick)c.onclick=onclick;return c;}
-wn.dom.css=function(ele,s){if(ele&&s){for(var i in s)ele.style[i]=s[i];};return ele;}
+if(cs)wn.dom.css(c,cs);if(innerHTML)c.innerHTML=innerHTML;if(onclick)c.onclick=onclick;return c;},css:function(ele,s){if(ele&&s){for(var i in s)ele.style[i]=s[i];};return ele;},placeholder:function(dim,letter){function getsinglecol(){return Math.min(Math.round(Math.random()*9)*Math.round(Math.random()*1)+3,9)}
+function getcol(){return''+getsinglecol()+getsinglecol()+getsinglecol();}
+args={width:Math.round(flt(dim)*0.7)+'px',height:Math.round(flt(dim)*0.7)+'px',padding:Math.round(flt(dim)*0.15)+'px','font-size':Math.round(flt(dim)*0.6)+'px',col1:getcol(),col2:getcol(),letter:letter.substr(0,1).toUpperCase()}
+return repl('<div style="\
+   height: %(height)s; \
+   width: %(width)s; \
+   font-size: %(font-size)s; \
+   color: #fff; \
+   text-align: center; \
+   padding: %(padding)s; \
+   background: -moz-linear-gradient(top,  #%(col1)s 0%, #%(col2)s 99%); /* FF3.6+ */\
+   background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#%(col1)s), color-stop(99%,#%(col2)s)); /* Chrome,Safari4+ */\
+   background: -webkit-linear-gradient(top,  #%(col1)s 0%,#%(col2)s 99%); /* Chrome10+,Safari5.1+ */\
+   background: -o-linear-gradient(top,  #%(col1)s 0%,#%(col2)s 99%); /* Opera 11.10+ */\
+   background: -ms-linear-gradient(top,  #%(col1)s 0%,#%(col2)s 99%); /* IE10+ */\
+   background: linear-gradient(top,  #%(col1)s 0%,#%(col2)s 99%); /* W3C */\
+   filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'#%(col1)s\', endColorstr=\'#%(col2)s\',GradientType=0 ); /* IE6-9 */\
+   ">%(letter)s</div>',args);}}
 wn.get_cookie=function(c){var t=""+document.cookie;var ind=t.indexOf(c);if(ind==-1||c=="")return"";var ind1=t.indexOf(';',ind);if(ind1==-1)ind1=t.length;return unescape(t.substring(ind+c.length+1,ind1));}
 wn.dom.set_box_shadow=function(ele,spread){$(ele).css('-moz-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')
 $(ele).css('-webkit-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')
@@ -313,7 +326,7 @@
 $.extend(args,this.args)
 if(this.get_args){$.extend(args,this.get_args(opts));}
 return args;},render_results:function(r){if(this.start==0)this.clear();this.$w.find('.btn-more').toggle(false);if(r.message)r.values=r.message;if(r.values&&r.values.length){this.data=this.data.concat(r.values);this.render_list(r.values);this.update_paging(r.values);}else{if(this.start==0){this.$w.find('.result').toggle(false);this.$w.find('.no-result').toggle(true);}}
-if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);}},update_paging:function(values){if(values.length>=this.page_length){this.$w.find('.btn-more').toggle(true);this.start+=this.page_length;}},add_row:function(){return this.$w.find('.result-list').append('<div class="list-row">').find('.list-row:last').get(0);},refresh:function(){this.run();},add_limits:function(){this.query+=' LIMIT '+this.start+','+(this.page_length+1);}});
+if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);}},update_paging:function(values){if(values.length>=this.page_length){this.$w.find('.btn-more').toggle(true);this.start+=this.page_length;}},add_row:function(){return $('<div class="list-row">').appendTo(this.$w.find('.result-list')).get(0);},refresh:function(){this.run();},add_limits:function(){this.query+=' LIMIT '+this.start+','+(this.page_length+1);}});
 /*
  *	lib/js/wn/ui/filters.js
  */
@@ -1368,7 +1381,7 @@
 /*
  *	lib/js/wn/ui/toolbar/search.js
  */
-wn.ui.toolbar.Search=wn.ui.toolbar.SelectorDialog.extend({init:function(){this._super({title:"Search",execute:function(val){selector.set_search(val);selector.show();},});this.set_values(profile.can_search.join(',').split(','));makeselector();}});
+wn.ui.toolbar.Search=wn.ui.toolbar.SelectorDialog.extend({init:function(){this._super({title:"Search",execute:function(val){selector.set_search(val);selector.show();},});this.set_values(wn.boot.profile.can_search.join(',').split(','));makeselector();}});
 /*
  *	lib/js/wn/ui/toolbar/report.js
  */
@@ -1904,22 +1917,20 @@
 _f.cur_grid;_f.cur_grid_ridx;_f.Grid.prototype.set_cell_value=function(cell){if(cell.row.is_newrow)return;var hc=this.head_row.cells[cell.cellIndex];if(hc.fieldname){var v=locals[hc.doctype][cell.row.docname][hc.fieldname];}else{var v=(cell.row.rowIndex+1);}
 if(v==null){v='';}
 var me=this;if(cell.cellIndex){var ft=hc.fieldtype;if(ft=='Link'&&cur_frm.doc.docstatus<1)ft='Data';$s(cell.div,v,ft,hc.options);}else{cell.div.style.padding='2px';cell.div.style.textAlign='left';cell.innerHTML='';var t=make_table(cell,1,3,'60px',['20px','20px','20px'],{verticalAlign:'middle',padding:'2px'});$y($td(t,0,0),{paddingLeft:'4px'});$td(t,0,0).innerHTML=cell.row.rowIndex+1;if(cur_frm.editable&&this.can_edit){var ed=$a($td(t,0,1),'i','icon-edit',{cursor:'pointer'});ed.cell=cell;ed.title='Edit Row';ed.onclick=function(){_f.cur_grid=me;_f.cur_grid_ridx=this.cell.row.rowIndex;_f.edit_record(me.doctype,this.cell.row.docname,1);}}else{cell.div.innerHTML=(cell.row.rowIndex+1);cell.div.style.cursor='default';cell.div.onclick=function(){}}}}
-$(document).bind('click',function(e){var is_target_toolbar=function(){return $(e.target).parents('.grid_tbarlinks').length;}
+$(document).bind('click',function(e){var me=this;var is_target_toolbar=function(){return $(e.target).parents('.grid_tbarlinks').length;}
 var is_target_input=function(){if(e.target.tagName.toLowerCase()=='option')return true;return $(e.target).parents().get().indexOf(_f.cur_grid_cell)!=-1;}
 if(_f.cur_grid_cell&&!is_target_input()&&!is_target_toolbar()){if(!(text_dialog&&text_dialog.display)&&!datepicker_active&&!(selector&&selector.display)){setTimeout('_f.cur_grid_cell.grid.cell_deselect()',500);return false;}}});_f.Grid.prototype.cell_deselect=function(){if(_f.cur_grid_cell){var c=_f.cur_grid_cell;c.grid.remove_template(c);c.div.className='grid_cell_div';if(c.is_odd)c.div.style.border='2px solid '+c.grid.alt_row_bg;else c.div.style.border='2px solid #FFF';_f.cur_grid_cell=null;}}
-_f.Grid.prototype.cell_select=function(cell,ri,ci){if(ri!=null&&ci!=null)
+_f.Grid.prototype.cell_select=function(cell,ri,ci){if(_f.cur_grid_cell==cell&&cell.hc)return;if(ri!=null&&ci!=null)
 cell=this.tab.rows[ri].cells[ci];var hc=this.head_row.cells[cell.cellIndex];if(!hc.template){this.make_template(hc);}
 hc.template.perm=this.field?this.field.perm:hc.perm;if(hc.fieldname&&hc.template.get_status()=='Write'){this.cell_deselect();cell.div.style.border='2px solid #88F';_f.cur_grid_cell=cell;this.add_template(cell);}}
-_f.Grid.prototype.add_template=function(cell){if(!cell.row.docname&&this.add_newrow){this.add_newrow();this.cell_select(cell);}else{var hc=this.head_row.cells[cell.cellIndex];cell.div.innerHTML='';cell.div.appendChild(hc.template.wrapper);hc.template.activate(cell.row.docname);hc.template.activated=1;if(hc.template.input&&hc.template.input.set_width){hc.template.input.set_width($(cell).width());}}}
+_f.Grid.prototype.add_template=function(cell){if(!cell.row.docname&&this.add_newrow){this.add_newrow();this.cell_select(cell);}else{var hc=this.head_row.cells[cell.cellIndex];cell.div.innerHTML='';cell.div.appendChild(hc.template.wrapper);hc.template.activate(cell.row.docname);hc.template.activated=1;cell.hc=hc;if(hc.template.input&&hc.template.input.set_width){hc.template.input.set_width($(cell).width());}}}
 _f.Grid.prototype.get_field=function(fieldname){for(var i=0;i<this.head_row.cells.length;i++){var hc=this.head_row.cells[i];if(hc.fieldname==fieldname){if(!hc.template){this.make_template(hc);}
 return hc.template;}}
 return{}}
 _f.grid_date_cell='';_f.grid_refresh_date=function(){_f.grid_date_cell.grid.set_cell_value(_f.grid_date_cell);}
-_f.grid_refresh_field=function(temp,input){if(input.value!=_f.get_value(temp.doctype,temp.docname,temp.df.fieldname))
-if(input.onchange)input.onchange();}
-_f.Grid.prototype.remove_template=function(cell){var hc=this.head_row.cells[cell.cellIndex];if(!hc.template)return;if(!hc.template.activated)return;if(hc.template.txt){if(hc.template.df.fieldtype=='Date'){_f.grid_date_cell=cell;setTimeout('_f.grid_refresh_date()',100);}
-if(hc.template.txt.value)
-_f.grid_refresh_field(hc.template,hc.template.txt);}else if(hc.template.input){_f.grid_refresh_field(hc.template,hc.template.input);}
+_f.grid_refresh_field=function(temp,input){if($(input).val()!=_f.get_value(temp.doctype,temp.docname,temp.df.fieldname))
+$(input).trigger('change');}
+_f.Grid.prototype.remove_template=function(cell){var hc=this.head_row.cells[cell.cellIndex];if(!hc.template)return;if(!hc.template.activated)return;if(hc.template.df.fieldtype=='Date'){_f.grid_date_cell=cell;setTimeout('_f.grid_refresh_date()',100);}else{var input=hc.template.txt||hc.template.input;_f.grid_refresh_field(hc.template,input)}
 if(hc.template&&hc.template.wrapper.parentNode)
 cell.div.removeChild(hc.template.wrapper);this.set_cell_value(cell);hc.template.activated=0;}
 _f.Grid.prototype.notify_keypress=function(e,keycode){if(keycode>=37&&keycode<=40&&e.shiftKey){if(text_dialog&&text_dialog.display){return;}}else
@@ -2201,7 +2212,7 @@
 wn.Application=Class.extend({init:function(){this.load_bootinfo();this.make_page_container();this.make_nav_bar();this.set_favicon();$(document).trigger('startup');wn.route();},load_bootinfo:function(){LocalDB.sync(wn.boot.docs);wn.control_panel=wn.boot.control_panel;if(wn.boot.error_messages)
 console.log(wn.boot.error_messages)
 if(wn.boot.server_messages)
-msgprint(wn.boot.server_messages);this.set_globals();},set_globals:function(){profile=wn.boot.profile;user=wn.boot.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;sys_defaults=wn.boot.sysdefaults;},make_page_container:function(){wn.container=new wn.views.Container();wn.views.make_403();wn.views.make_404();$('#startup_div').toggle(false);$('#body_div').toggle(true);},make_nav_bar:function(){if(wn.user.name!='Guest'){wn.container.wntoolbar=new wn.ui.toolbar.Toolbar();}},logout:function(){var me=this;wn.call({method:'logout',callback:function(r){if(r.exc){console.log(r.exc);return;}
+msgprint(wn.boot.server_messages);this.set_globals();},set_globals:function(){profile=wn.boot.profile;user=wn.boot.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;sys_defaults=wn.boot.sysdefaults;},make_page_container:function(){wn.container=new wn.views.Container();wn.views.make_403();wn.views.make_404();},make_nav_bar:function(){if(wn.user.name!='Guest'){wn.container.wntoolbar=new wn.ui.toolbar.Toolbar();}},logout:function(){var me=this;wn.call({method:'logout',callback:function(r){if(r.exc){console.log(r.exc);return;}
 me.redirect_to_login();}})},redirect_to_login:function(){window.location.hash='';window.location.reload();},set_favicon:function(){var link=$('link[type="image/x-icon"]').remove().attr("href");var favicon='\
    <link rel="shortcut icon" href="'+link+'" type="image/x-icon"> \
    <link rel="icon" href="'+link+'" type="image/x-icon">'
diff --git a/js/all-web.js b/js/all-web.js
index 41512cd..42811f7 100644
--- a/js/all-web.js
+++ b/js/all-web.js
@@ -57,17 +57,30 @@
 /*
  *	lib/js/wn/dom.js
  */
-wn.provide('wn.dom');wn.dom.by_id=function(id){return document.getElementById(id);}
-wn.dom.eval=function(txt){if(!txt)return;var el=document.createElement('script');el.appendChild(document.createTextNode(txt));document.getElementsByTagName('head')[0].appendChild(el);}
-wn.dom.set_style=function(txt){if(!txt)return;var se=document.createElement('style');se.type="text/css";if(se.styleSheet){se.styleSheet.cssText=txt;}else{se.appendChild(document.createTextNode(txt));}
-document.getElementsByTagName('head')[0].appendChild(se);}
-wn.dom.add=function(parent,newtag,className,cs,innerHTML,onclick){if(parent&&parent.substr)parent=wn.dom.by_id(parent);var c=document.createElement(newtag);if(parent)
+wn.provide('wn.dom');wn.dom={by_id:function(id){return document.getElementById(id);},eval:function(txt){if(!txt)return;var el=document.createElement('script');el.appendChild(document.createTextNode(txt));document.getElementsByTagName('head')[0].appendChild(el);},set_style:function(txt){if(!txt)return;var se=document.createElement('style');se.type="text/css";if(se.styleSheet){se.styleSheet.cssText=txt;}else{se.appendChild(document.createTextNode(txt));}
+document.getElementsByTagName('head')[0].appendChild(se);},add:function(parent,newtag,className,cs,innerHTML,onclick){if(parent&&parent.substr)parent=wn.dom.by_id(parent);var c=document.createElement(newtag);if(parent)
 parent.appendChild(c);if(className){if(newtag.toLowerCase()=='img')
 c.src=className
 else
 c.className=className;}
-if(cs)wn.dom.css(c,cs);if(innerHTML)c.innerHTML=innerHTML;if(onclick)c.onclick=onclick;return c;}
-wn.dom.css=function(ele,s){if(ele&&s){for(var i in s)ele.style[i]=s[i];};return ele;}
+if(cs)wn.dom.css(c,cs);if(innerHTML)c.innerHTML=innerHTML;if(onclick)c.onclick=onclick;return c;},css:function(ele,s){if(ele&&s){for(var i in s)ele.style[i]=s[i];};return ele;},placeholder:function(dim,letter){function getsinglecol(){return Math.min(Math.round(Math.random()*9)*Math.round(Math.random()*1)+3,9)}
+function getcol(){return''+getsinglecol()+getsinglecol()+getsinglecol();}
+args={width:Math.round(flt(dim)*0.7)+'px',height:Math.round(flt(dim)*0.7)+'px',padding:Math.round(flt(dim)*0.15)+'px','font-size':Math.round(flt(dim)*0.6)+'px',col1:getcol(),col2:getcol(),letter:letter.substr(0,1).toUpperCase()}
+return repl('<div style="\
+   height: %(height)s; \
+   width: %(width)s; \
+   font-size: %(font-size)s; \
+   color: #fff; \
+   text-align: center; \
+   padding: %(padding)s; \
+   background: -moz-linear-gradient(top,  #%(col1)s 0%, #%(col2)s 99%); /* FF3.6+ */\
+   background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#%(col1)s), color-stop(99%,#%(col2)s)); /* Chrome,Safari4+ */\
+   background: -webkit-linear-gradient(top,  #%(col1)s 0%,#%(col2)s 99%); /* Chrome10+,Safari5.1+ */\
+   background: -o-linear-gradient(top,  #%(col1)s 0%,#%(col2)s 99%); /* Opera 11.10+ */\
+   background: -ms-linear-gradient(top,  #%(col1)s 0%,#%(col2)s 99%); /* IE10+ */\
+   background: linear-gradient(top,  #%(col1)s 0%,#%(col2)s 99%); /* W3C */\
+   filter: progid:DXImageTransform.Microsoft.gradient( startColorstr=\'#%(col1)s\', endColorstr=\'#%(col2)s\',GradientType=0 ); /* IE6-9 */\
+   ">%(letter)s</div>',args);}}
 wn.get_cookie=function(c){var t=""+document.cookie;var ind=t.indexOf(c);if(ind==-1||c=="")return"";var ind1=t.indexOf(';',ind);if(ind1==-1)ind1=t.length;return unescape(t.substring(ind+c.length+1,ind1));}
 wn.dom.set_box_shadow=function(ele,spread){$(ele).css('-moz-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')
 $(ele).css('-webkit-box-shadow','0px 0px '+spread+'px rgba(0,0,0,0.3);')
@@ -200,7 +213,7 @@
 $.extend(args,this.args)
 if(this.get_args){$.extend(args,this.get_args(opts));}
 return args;},render_results:function(r){if(this.start==0)this.clear();this.$w.find('.btn-more').toggle(false);if(r.message)r.values=r.message;if(r.values&&r.values.length){this.data=this.data.concat(r.values);this.render_list(r.values);this.update_paging(r.values);}else{if(this.start==0){this.$w.find('.result').toggle(false);this.$w.find('.no-result').toggle(true);}}
-if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);}},update_paging:function(values){if(values.length>=this.page_length){this.$w.find('.btn-more').toggle(true);this.start+=this.page_length;}},add_row:function(){return this.$w.find('.result-list').append('<div class="list-row">').find('.list-row:last').get(0);},refresh:function(){this.run();},add_limits:function(){this.query+=' LIMIT '+this.start+','+(this.page_length+1);}});
+if(this.onrun)this.onrun();if(this.callback)this.callback(r);},render_list:function(values){var m=Math.min(values.length,this.page_length);for(var i=0;i<m;i++){this.render_row(this.add_row(),values[i],this,i);}},update_paging:function(values){if(values.length>=this.page_length){this.$w.find('.btn-more').toggle(true);this.start+=this.page_length;}},add_row:function(){return $('<div class="list-row">').appendTo(this.$w.find('.result-list')).get(0);},refresh:function(){this.run();},add_limits:function(){this.query+=' LIMIT '+this.start+','+(this.page_length+1);}});
 /*
  *	lib/js/wn/ui/filters.js
  */
@@ -808,7 +821,7 @@
 wn.Application=Class.extend({init:function(){this.load_bootinfo();this.make_page_container();this.make_nav_bar();this.set_favicon();$(document).trigger('startup');wn.route();},load_bootinfo:function(){LocalDB.sync(wn.boot.docs);wn.control_panel=wn.boot.control_panel;if(wn.boot.error_messages)
 console.log(wn.boot.error_messages)
 if(wn.boot.server_messages)
-msgprint(wn.boot.server_messages);this.set_globals();},set_globals:function(){profile=wn.boot.profile;user=wn.boot.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;sys_defaults=wn.boot.sysdefaults;},make_page_container:function(){wn.container=new wn.views.Container();wn.views.make_403();wn.views.make_404();$('#startup_div').toggle(false);$('#body_div').toggle(true);},make_nav_bar:function(){if(wn.user.name!='Guest'){wn.container.wntoolbar=new wn.ui.toolbar.Toolbar();}},logout:function(){var me=this;wn.call({method:'logout',callback:function(r){if(r.exc){console.log(r.exc);return;}
+msgprint(wn.boot.server_messages);this.set_globals();},set_globals:function(){profile=wn.boot.profile;user=wn.boot.profile.name;user_fullname=wn.user_info(user).fullname;user_defaults=profile.defaults;user_roles=profile.roles;user_email=profile.email;sys_defaults=wn.boot.sysdefaults;},make_page_container:function(){wn.container=new wn.views.Container();wn.views.make_403();wn.views.make_404();},make_nav_bar:function(){if(wn.user.name!='Guest'){wn.container.wntoolbar=new wn.ui.toolbar.Toolbar();}},logout:function(){var me=this;wn.call({method:'logout',callback:function(r){if(r.exc){console.log(r.exc);return;}
 me.redirect_to_login();}})},redirect_to_login:function(){window.location.hash='';window.location.reload();},set_favicon:function(){var link=$('link[type="image/x-icon"]').remove().attr("href");var favicon='\
    <link rel="shortcut icon" href="'+link+'" type="image/x-icon"> \
    <link rel="icon" href="'+link+'" type="image/x-icon">'
