// 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 .
wn.provide('erpnext.messages');
wn.pages.messages.onload = function(wrapper) {
	wn.ui.make_app_page({
		parent: wrapper,
		title: "Messages"
	});
	
	$('
\
		

\
		
Everyone
\
	
\
	\
	').appendTo($(wrapper).find('.layout-main-section'));
	
	erpnext.messages = new erpnext.Messages(wrapper);
	erpnext.toolbar.set_new_comments(0);
}
$(wn.pages.messages).bind('show', function() {
	// remove alerts
	$('#alert-container .alert').remove();
	
	erpnext.toolbar.set_new_comments(0);	
	erpnext.messages.show();
	setTimeout("erpnext.messages.refresh()", 17000);
})
erpnext.Messages = Class.extend({
	init: function(wrapper) {
		this.wrapper = wrapper;
		this.show_active_users();
		this.make_post_message();
		this.make_list();
		//this.update_messages('reset'); //Resets notification icons		
	},
	make_post_message: function() {
		var me = this;
		$('#post-message textarea').keydown(function(e) {
			if(e.which==13) {
				$('#post-message .btn').click();
				return false;
			}
		});
		
		$('#post-message .btn').click(function() {
			var txt = $('#post-message textarea').val();
			if(txt) {
				wn.call({
					module:'utilities',
					page:'messages',
					method:'post',
					args: {
						txt: txt,
						contact: me.contact
					},
					callback:function(r,rt) {
						$('#post-message textarea').val('')
						me.list.run();
					},
					btn: this
				});
			}			
		});
	},
	show: function() {
		var contact = this.get_contact() || this.contact || user;
		$('#message-title').html(contact==user ? "Everyone" :
			wn.user_info(contact).fullname)
		$('#avatar-image').attr("src", wn.utils.get_file_link(wn.user_info(contact).image));
		$("#show-everyone").toggle(contact!=user);
		
		$("#post-message button").text(contact==user ? "Post Publicly" : "Post to user")
		
		this.contact = contact;
		this.list.opts.args.contact = contact;
		this.list.run();
		
	},
	// check for updates every 5 seconds if page is active
	refresh: function() {
		setTimeout("erpnext.messages.refresh()", 17000);
		if(wn.container.page.label != 'Messages') return;
		this.show();
	},
	get_contact: function() {
		var route = location.hash;
		if(route.indexOf('/')!=-1) {
			var name = decodeURIComponent(route.split('/')[1]);
			if(name.indexOf('__at__')!=-1) {
				name = name.replace('__at__', '@');
			}
			return name;
		}
	},
	make_list: function() {
		this.list = new wn.ui.Listing({
			parent: $(this.wrapper).find('.all-messages'),
			method: 'utilities.page.messages.messages.get_list',
			args: {
				contact: null
			},
			hide_refresh: true,
			no_loading: true,
			render_row: function(wrapper, data) {
				$(wrapper).removeClass('list-row');
				
				data.creation = dateutil.comment_when(data.creation);
				data.comment_by_fullname = wn.user_info(data.owner).fullname;
				data.image = wn.utils.get_file_link(wn.user_info(data.owner).image);
				data.mark_html = "";
				data.reply_html = '';
				if(data.owner==user) {
					data.cls = 'message-self';
					data.comment_by_fullname = 'You';	
				} else {
					data.cls = 'message-other';
				}
				// delete
				data.delete_html = "";
				if(data.owner==user || data.comment.indexOf("assigned to")!=-1) {
					data.delete_html = repl('×', data);
				}
				
				if(data.owner==data.comment_docname && data.parenttype!="Assignment") {
					data.mark_html = ""
				}
				wrapper.innerHTML = repl('%(mark_html)s\
						
s) %(comment)s
%(comment)s\
						%(delete_html)s\
						
by %(comment_by_fullname)s, %(creation)s
\
					
Users
\
					\
				').appendTo($body);
				r.message.sort(function(a, b) { return b.has_session - a.has_session; });
				for(var i in r.message) {
					var p = r.message[i];
					if(p.name != user) {
						p.fullname = wn.user_info(p.name).fullname;
						p.image = wn.utils.get_file_link(wn.user_info(p.name).image);
						p.name = p.name.replace('@', '__at__');
						p.status_color = p.has_session ? "green" : "#ddd";
						p.status = p.has_session ? "Online" : "Offline";
						$(repl('\
							s) \
							%(fullname)s\
\
							%(fullname)s\
							
', p))
							.appendTo($body);						
					}
				}
			}
		});
	}
});