Ext.namespace ("Ext.Chatium");

Ext.Chatium.MyClass = function(){
};

Ext.Chatium.Channel = function(id){
  this.id = id;
  this.lastMessageId = 0;
	this.usersIds = new Array ();
	this.bannedUsersIds = new Array ();
	this.users = new Array ();
	this.messages = new Array ();
	this.view = new Ext.Chatium.ChannelView (this);
	this.moderators = {};
	this.toBuffer = false;
	this.name = "";
	this.authorId = null;
  Ext.Chatium.Channel.superclass.constructor.call(this);
};



// Class Channel
Ext.extend(Ext.Chatium.Channel, Ext.Chatium.MyClass, {
		
	addUser: function (messageId, userId, userInfo) {
		this.usersIds.remove(userId);
		this.usersIds.push(userId);
		this.users[userId]= {id: userId, info: userInfo, nick: userInfo.nick, city: userInfo.city, age: userInfo.age, gender: userInfo.gender, data: userInfo, isTemp: userId> 1000000};
		//if (this.lastMessageId < messageId)
			this.lastMessageId = messageId;
		this.view.addUser(this.users[userId]);
		//if (!this.toBuffer)
			//this.view.outBuffer ();
	},
		
	delUser: function (messageId, userId) {
		this.usersIds.remove(userId);
		//if (this.lastMessageId < messageId)
			this.lastMessageId = messageId;				
		this.view.delUser(userId);
		//if (!this.toBuffer)
			//this.view.outBuffer ();
	},
		
	getUser: function (userId) {
		return this.users[userId];		
	},
		
	getUserStatus: function (user) {
		var status = {name: "guest", title: locStrings.user_status_guest};
		
		if (!user)
			return status;
		
		if (this.authorId == user.id)
			status = {name: "author", title: locStrings.user_status_author};
		else if (this.supermoders && this.supermoders[user.id] != null)
			status = {name: "supermoder", title: "SuperModer"};
		else if (this.moderators[user.id] != null)
			status = {name: "moderator", title: locStrings.user_status_moderator};
		else if (user.id < ChatApp.guestIdStart)
			status = {name: "user", title: locStrings.user_status_user};
		
		return status;
	},
		
	renameUser: function (messageId, userId, newNick) {
		/*this.delUser(messageId, userId);
		this.addUser(messageId, userId, {nick: newNick});*/
		if (this.users[userId])
			this.users[userId].nick = newNick;
		if (!this.toBuffer)
			this.view.outBuffer ();
	},
		
	addMessage: function (messageId, userId, userNick, messageTime, messageText) {
		if (!this.canAddMessage(messageText))
			return false;
		
		if (this.users[userId] == null) {
			this.addUser (messageId, userId, userNick);
			//if (!this.toBuffer)
			//	this.view.outBuffer ();
		}
		else {
			if (this.users[userId].nick != userNick) {
				this.renameUser (messageId, userId, userNick);
			}
		}
		var tp = messageTime.split(":");
		messageTime = (((tp[0]*1)+3)%24) + ":" + tp[1] + ":" + tp[2];
		var cMessage = {id: messageId, time: messageTime, text: messageText, userId : userId, userNick: userNick};
		
		this.messageAdded (cMessage);
	},
		
	addSystemMessage: function (messageId, messageText) {
		var cMessage = {id: messageId, type: "system", text: messageText};
		this.messageAdded (cMessage);
	},
		
	messageAdded: function (message) {
		message.index = this.messages.length;
		this.messages.push (message);
		//if (this.lastMessageId < message.id)
			this.lastMessageId = message.id;
		if (!this.toBuffer)
			this.view.outBuffer();
	},
		
	userBanned: function (messageId, userId, userNick, clearMessages, timeStr, reason, mod) {
		if (Ext.isGecko || Ext.isOpera)
			userNick = userNick.replace(/\$/g, "$$$$")
		var str = locStrings["user_banned_msg"].replace("%s", userNick);
		str += " <b>" + locStrings["user_banned_bytime"] + " " + timeStr + "</b>";
		if (reason && reason != "")
			str += "<BR><i>&quot;" + reason + "&quot</i>";
		if (mod)
			str += " - " + this.view.getUserNickLink(mod.id, mod.nick);
		
		this.addSystemMessage(messageId, str);
		//this.delUser(messageId, userId);
		if (clearMessages) {
			this.view.removeUserMessages(userId);
			this.bannedUsersIds[userId] = this.messages.length;
		}
	},
		
	userChangeNick: function (messageId, userId, oldNick, newNick) {
		//var str = locStrings["user_changenick_msg"].replace("%oldNick", oldNick).replace("%newNick", newNick);
		//this.addSystemMessage(messageId, str);
	},
		
	canAddMessage: function (messageText) {
		if ((messageText.search(/murclub\.ru|russchat\.(ru|com)|rus-rus\.ru|august4u\.ru|smchat\.ru|mpchat\.(com|ru|de|az)|navorotov\.net|tinyurl\.(com|ru)|chatlist\.su|mychatlist\.ru|chatname\.ru|b23\.ru|potusim\.ucoz\.ru|8uc\.joo\.ru|ucoz\.(ru|com|kz|net|ua|org|de|co\.uk|lv|es|hu|ae|de)|at\.ua|3dn\.ru|my1\.ru|clan\.su|moy\.su|do\.am|sun-say\.co\.cc|http:.*tk|http:.*nl.ae/) > -1)  && (this.id == 1728 || this.id == 216 || this.id == 23)) {
			return false;
		}
		return true;
	},
		
	moderatorAdded: function (messageId, userId) {
		this.moderators[userId] = 1;
		this.refreshUser (userId);
		//this.addSystemMessage (messageId, "moderator added: " + userId);
	},
		
	moderatorDeleted: function (messageId, userId) {
		this.moderators[userId] = null;
		this.refreshUser (userId);
	},
	
	refreshUser: function (userId) {
		this.usersIds.remove(userId);
		this.usersIds.push(userId);
		if (this.users[userId] == null)
			return;
		this.view.addUser(this.users[userId]);
	},
		
	banUser: function (userId) {
		ChatApp.banUser (this.id, userId);
	},
		
	setUserModerator: function (userId, action) {
		ChatApp.setUserModerator (this.id, userId, action);
	}	
});
