added blog
diff --git a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py b/erpnext/patches/jan_mar_2012/subdomain_login_patch.py
index 5c58b08..df26e4d 100644
--- a/erpnext/patches/jan_mar_2012/subdomain_login_patch.py
+++ b/erpnext/patches/jan_mar_2012/subdomain_login_patch.py
@@ -21,8 +21,8 @@
 	reload_doc("core", "doctype", "control_panel")
 
 	# cleanup page
-	delete_doc("DocType", "Control Panel")
-	reload_doc("core", "doctype", "control_panel")
+	delete_doc("DocType", "Page")
+	reload_doc("core", "doctype", "page")
 	
 	webnotes.conn.sql("""delete from tabSingles
 		where field like 'startup_%' and doctype='Control Panel'""")
diff --git a/erpnext/patches/jan_mar_2012/website.py b/erpnext/patches/jan_mar_2012/website.py
index ee1f251..dfa0a3d 100644
--- a/erpnext/patches/jan_mar_2012/website.py
+++ b/erpnext/patches/jan_mar_2012/website.py
@@ -9,13 +9,18 @@
 	cleanup_file_data()
 	update_patch_log()
 	from webnotes.modules import reload_doc
-	reload_doc('website', 'Module Def', 'Website')
 	reload_doc('website', 'Role', 'Website Manager')
+	reload_doc('website', 'Module Def', 'Website')
 	reload_doc('website', 'doctype', 'home_settings')
 	reload_doc('website', 'doctype', 'top_bar_settings')
 	reload_doc('website', 'doctype', 'top_bar_item')
-	reload_doc('website', 'page', 'home')
+	reload_doc('website', 'doctype', 'contact_us_settings')
+	reload_doc('website', 'doctype', 'about_us_settings')
 
+	reload_doc('website', 'page', 'home')
+	reload_doc('website', 'page', 'contact')
+	reload_doc('website', 'page', 'about')
+		
 def add_website_manager():
 	"""add website manager to system manager"""
 	for i in webnotes.conn.sql("""select distinct parent from tabUserRole 
diff --git a/erpnext/website/Module Def/Website/Website.txt b/erpnext/website/Module Def/Website/Website.txt
index 1d5985b..1fe0444 100644
--- a/erpnext/website/Module Def/Website/Website.txt
+++ b/erpnext/website/Module Def/Website/Website.txt
@@ -5,13 +5,14 @@
 	{
 		'creation': '2012-01-23 17:05:32',
 		'docstatus': 0,
-		'modified': '2012-01-27 10:14:58',
+		'modified': '2012-01-27 14:30:06',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
 
 	# These values are common for all Module Def Role
 	{
+		'__islocal': 1,
 		'doctype': 'Module Def Role',
 		'name': '__common__',
 		'parent': 'Website',
@@ -21,7 +22,7 @@
 
 	# These values are common for all Module Def Item
 	{
-		'doc_type': 'Single DocType',
+		'__islocal': 1,
 		'doctype': 'Module Def Item',
 		'name': '__common__',
 		'parent': 'Website',
@@ -49,6 +50,15 @@
 	{
 		'display_name': 'Top Bar Settings',
 		'doc_name': 'Top Bar Settings',
+		'doc_type': 'Single DocType',
+		'doctype': 'Module Def Item'
+	},
+
+	# Module Def Item
+	{
+		'display_name': 'Blog',
+		'doc_name': 'Blog',
+		'doc_type': 'Forms',
 		'doctype': 'Module Def Item'
 	},
 
@@ -56,6 +66,15 @@
 	{
 		'display_name': 'Home Settings',
 		'doc_name': 'Home Settings',
+		'doc_type': 'Single DocType',
+		'doctype': 'Module Def Item'
+	},
+
+	# Module Def Item
+	{
+		'display_name': 'Top Bar Settings',
+		'doc_name': 'Top Bar Settings',
+		'doc_type': 'Single DocType',
 		'doctype': 'Module Def Item'
 	},
 
@@ -63,6 +82,15 @@
 	{
 		'display_name': 'Contact Us Settings',
 		'doc_name': 'Contact Us Settings',
+		'doc_type': 'Single DocType',
+		'doctype': 'Module Def Item'
+	},
+
+	# Module Def Item
+	{
+		'display_name': 'Home Settings',
+		'doc_name': 'Home Settings',
+		'doc_type': 'Single DocType',
 		'doctype': 'Module Def Item'
 	},
 
@@ -70,6 +98,23 @@
 	{
 		'display_name': 'About Us Settings',
 		'doc_name': 'About Us Settings',
+		'doc_type': 'Single DocType',
+		'doctype': 'Module Def Item'
+	},
+
+	# Module Def Item
+	{
+		'display_name': 'Contact Us Settings',
+		'doc_name': 'Contact Us Settings',
+		'doc_type': 'Single DocType',
+		'doctype': 'Module Def Item'
+	},
+
+	# Module Def Item
+	{
+		'display_name': 'About Us Settings',
+		'doc_name': 'About Us Settings',
+		'doc_type': 'Single DocType',
 		'doctype': 'Module Def Item'
 	},
 
@@ -82,6 +127,18 @@
 	# Module Def Role
 	{
 		'doctype': 'Module Def Role',
+		'role': 'System Manager'
+	},
+
+	# Module Def Role
+	{
+		'doctype': 'Module Def Role',
+		'role': 'Website Manager'
+	},
+
+	# Module Def Role
+	{
+		'doctype': 'Module Def Role',
 		'role': 'Website Manager'
 	}
 ]
\ No newline at end of file
diff --git a/erpnext/website/doctype/about_us_settings/template.html b/erpnext/website/doctype/about_us_settings/template.html
index 21d6729..47ef402 100644
--- a/erpnext/website/doctype/about_us_settings/template.html
+++ b/erpnext/website/doctype/about_us_settings/template.html
@@ -1,5 +1,5 @@
 <div class="layout_wrapper">
-	<div class="web-content" id="content-contact-us">
+	<div class="web-content" id="content-about-us">
 		{% if doc.headline %}
 			<h1>{{ doc.headline }}</h1>
 		{% endif %}
diff --git a/erpnext/website/doctype/blog/__init__.py b/erpnext/website/doctype/blog/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/website/doctype/blog/__init__.py
diff --git a/erpnext/website/doctype/blog/blog.py b/erpnext/website/doctype/blog/blog.py
new file mode 100644
index 0000000..1545741
--- /dev/null
+++ b/erpnext/website/doctype/blog/blog.py
@@ -0,0 +1,58 @@
+"""
+record of files
+
+naming for same name files: file.gif, file-1.gif, file-2.gif etc
+"""
+
+import webnotes
+
+class DocType():
+	def __init__(self, d, dl):
+		self.doc, self.doclist = d, dl
+		
+	def autoname(self):
+		"""save file by its name"""
+		import re
+		self.doc.name = re.sub('[~!@#$%^&*()<>,."\']', '', self.doc.title.lower())
+		self.doc.name = '-'.join(self.doc.name.split()[:4])
+		if webnotes.conn.sql("""select name from tabBlog where name=%s""", self.doc.name) or \
+			webnotes.conn.sql("""select name from tabPage where name=%s""", self.doc.name):
+			webnotes.msgprint("Another page with similar title exists, please change the title",\
+				raise_exception=1)
+	
+	def on_update(self):
+		"""write/update 'Page' with the blog"""
+		from webnotes.model.doc import Document
+		
+		if webnotes.conn.sql("""select name from tabPage where name=%s""", self.doc.name):
+			p = Document('Page', self.doc.name)
+		else:
+			p = Document('Page')
+			
+		p.title = self.doc.title
+		p.name = p.page_name = self.doc.name
+		p.module = 'Website'
+		p.standard = 'No'
+		
+		from jinja2 import Template
+		import markdown2
+		import os
+		
+		self.doc.content_html = markdown2.markdown(self.doc.content 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__), 'blog_page.js'), 'r') as f:
+			p.script = Template(f.read()).render(doc=self.doc)
+		
+		p.save()
+		
+		# add guest access
+		if not webnotes.conn.sql("""select parent from `tabPage Role`
+			where role='Guest' and parent=%s""", self.doc.name):
+			d = Document('Page Role')
+			d.parent = self.doc.name
+			d.role = 'Guest'
+			d.save()
+			
\ No newline at end of file
diff --git a/erpnext/website/doctype/blog/blog.txt b/erpnext/website/doctype/blog/blog.txt
new file mode 100644
index 0000000..9e09492
--- /dev/null
+++ b/erpnext/website/doctype/blog/blog.txt
@@ -0,0 +1,88 @@
+# DocType, Blog
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2012-01-27 12:24:03',
+		'docstatus': 0,
+		'modified': '2012-01-27 12:24:03',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all DocType
+	{
+		'colour': 'White:FFF',
+		'doctype': 'DocType',
+		'module': 'Website',
+		'name': '__common__',
+		'section_style': 'Simple',
+		'show_in_menu': 0,
+		'version': 1
+	},
+
+	# These values are common for all DocField
+	{
+		'doctype': 'DocField',
+		'name': '__common__',
+		'parent': 'Blog',
+		'parentfield': 'fields',
+		'parenttype': 'DocType',
+		'permlevel': 0
+	},
+
+	# These values are common for all DocPerm
+	{
+		'create': 1,
+		'doctype': 'DocPerm',
+		'name': '__common__',
+		'parent': 'Blog',
+		'parentfield': 'permissions',
+		'parenttype': 'DocType',
+		'permlevel': 0,
+		'read': 1,
+		'write': 1
+	},
+
+	# DocType, Blog
+	{
+		'doctype': 'DocType',
+		'name': 'Blog'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'Website Manager'
+	},
+
+	# DocPerm
+	{
+		'doctype': 'DocPerm',
+		'role': 'Blogger'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'title',
+		'fieldtype': 'Data',
+		'label': 'Title'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'published',
+		'fieldtype': 'Check',
+		'label': 'Published'
+	},
+
+	# DocField
+	{
+		'doctype': 'DocField',
+		'fieldname': 'content',
+		'fieldtype': 'Code',
+		'label': 'Content'
+	}
+]
\ No newline at end of file
diff --git a/erpnext/website/doctype/blog/blog_page.js b/erpnext/website/doctype/blog/blog_page.js
new file mode 100644
index 0000000..1df9b54
--- /dev/null
+++ b/erpnext/website/doctype/blog/blog_page.js
@@ -0,0 +1,71 @@
+// js inside blog page
+
+pscript['onload_{{ doc.name }}'] = function(wrapper) {
+	// sidebar
+	var side = $(wrapper).find('.web-side-section')
+		.append('<h4>Recent Posts</h4>').get(0);
+		
+	wrapper.recent_list = new wn.widgets.Listing({
+		parent: side,
+		query: 'select name, title, left(content, 100) as content from tabBlog\
+			where ifnull(published,1)=1',
+		hide_refresh: true,
+		render_row: function(parent, data) {
+			if(data.content.length==100) data.content += '...';
+			parent.innerHTML = repl('<a href="#!%(name)s">%(title)s</a>\
+				<div class="comment">%(content)s</div><br>', data);
+		},
+		page_length: 5
+	});
+	wrapper.recent_list.run();
+	
+	
+	// comments
+	$(wrapper).find('.web-main-section').append('<h3>Comments</h3>');
+
+	wrapper.comment_list = new wn.widgets.Listing({
+		parent: $(wrapper).find('.web-main-section').get(0),
+		query: 'select comment, comment_by_fullname, comment_date\
+			from `tabComment Widget Record` where comment_doctype="Page"\
+			and comment_docname="{{ doc.name }}"',
+		no_result_message: 'Be the first one to comment',
+		render_row: function(parent, data) {
+			data.comment_date = dateutil.str_to_user(data.comment_date);
+			$(parent).html(repl("<div style='color:#777'>\
+				On %(comment_date)s %(comment_by_fullname)s said:\
+				</div>\
+				<p style='margin-left: 20px;'>%(comment)s</p><br>", data))
+		},
+		hide_refresh: true
+	});
+	wrapper.comment_list.run();
+	
+	// add comment
+	$(wrapper).find('.web-main-section').append('<br><button class="btn add-comment">\
+		Add Comment</button>');
+	$(wrapper).find('button.add-comment').click(function(){
+		d = new wn.widgets.Dialog({
+			title: 'Add Comment',
+			fields: [
+				{fieldname:'comment_by_fullname', label:'Your Name', reqd:1, fieldtype:'Data'},
+				{fieldname:'comment_by', label:'Email Id', reqd:1, fieldtype:'Data'},
+				{fieldname:'comment', label:'Comment', reqd:1, fieldtype:'Text'},
+				{fieldname:'post', label:'Post', fieldtype:'Button'}
+			]
+		});
+		d.fields_dict.post.input.onclick = function() {
+			var btn = this;
+			var args = d.get_values();
+			if(!args) return;
+			args.comment_doctype = 'Page';
+			args.comment_docname = '{{ doc.name }}';
+			$(btn).set_working();
+			$c('webnotes.widgets.form.comments.add_comment', args, function(r) {
+				$(btn).done_working();
+				d.hide();
+				wrapper.comment_list.refresh();
+			})
+		}
+		d.show();
+	})
+}
\ No newline at end of file
diff --git a/erpnext/website/doctype/blog/template.html b/erpnext/website/doctype/blog/template.html
new file mode 100644
index 0000000..8a22cc2
--- /dev/null
+++ b/erpnext/website/doctype/blog/template.html
@@ -0,0 +1,13 @@
+<div class="layout_wrapper">
+	<div class="web-content" id="blog-{{ doc.name }}">
+		<h1>Blog</h1>
+		<br>
+		<div class="web-main-section">
+			<h2>{{ doc.title }}</h2>
+			{{ doc.content_html }}
+		</div>
+		<div class="web-side-section">
+		</div>
+		<div style="clear: both"></div>
+	</div>
+</div>
\ No newline at end of file
diff --git a/erpnext/website/page/about/about.txt b/erpnext/website/page/about/about.txt
index 7e045de..a106513 100644
--- a/erpnext/website/page/about/about.txt
+++ b/erpnext/website/page/about/about.txt
@@ -5,7 +5,7 @@
 	{
 		'creation': '2012-01-27 11:37:57',
 		'docstatus': 0,
-		'modified': '2012-01-27 11:37:57',
+		'modified': '2012-01-27 13:26:42',
 		'modified_by': 'Administrator',
 		'owner': 'Administrator'
 	},
@@ -16,7 +16,8 @@
 		'module': 'Website',
 		'name': '__common__',
 		'page_name': 'about',
-		'standard': 'Yes'
+		'standard': 'Yes',
+		'title': 'About Us'
 	},
 
 	# These values are common for all Page Role
diff --git a/erpnext/website/page/blog/__init__.py b/erpnext/website/page/blog/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/erpnext/website/page/blog/__init__.py
diff --git a/erpnext/website/page/blog/blog.txt b/erpnext/website/page/blog/blog.txt
new file mode 100644
index 0000000..4443ec8
--- /dev/null
+++ b/erpnext/website/page/blog/blog.txt
@@ -0,0 +1,44 @@
+# Page, blog
+[
+
+	# These values are common in all dictionaries
+	{
+		'creation': '2012-01-27 15:47:52',
+		'docstatus': 0,
+		'modified': '2012-01-27 15:47:52',
+		'modified_by': 'Administrator',
+		'owner': 'Administrator'
+	},
+
+	# These values are common for all Page
+	{
+		'doctype': 'Page',
+		'module': 'Website',
+		'name': '__common__',
+		'page_name': 'blog',
+		'standard': 'Yes',
+		'title': 'Blog'
+	},
+
+	# These values are common for all Page Role
+	{
+		'__islocal': 1,
+		'doctype': 'Page Role',
+		'name': '__common__',
+		'parent': 'blog',
+		'parentfield': 'roles',
+		'parenttype': 'Page',
+		'role': 'Guest'
+	},
+
+	# Page, blog
+	{
+		'doctype': 'Page',
+		'name': 'blog'
+	},
+
+	# Page Role
+	{
+		'doctype': 'Page Role'
+	}
+]
\ No newline at end of file
diff --git a/index.html b/index.html
index 02a2e50..9d2726d 100644
--- a/index.html
+++ b/index.html
@@ -3,7 +3,7 @@
 	<meta charset="utf-8">
 	<title>ERPNext</title>
 	<meta name="author" content="">
-	<script type="text/javascript">window._version_number="215";
+	<script type="text/javascript">window._version_number="228";
 
 /*
 *	lib/js/wn/class.js
diff --git a/version.num b/version.num
index 58e77f3..b3b2268 100644
--- a/version.num
+++ b/version.num
@@ -1 +1 @@
-215
\ No newline at end of file
+228
\ No newline at end of file