function ChatMessage(){
	var uid;
	var to;
	var stamp;
	var text;
	var hash;
	this.fromLine = function(line){
		bl = line.split4();
		uid = parseInt(bl[0]);
		to = parseInt(bl[1]);
		stamp = parseInt(bl[2]);
		text = bl[3]? bl[3]:'';
		hash = ''+stamp;
		if (text.length>3){
			hash += text.substring(0,3);
		}
	}
	this.getText = function() {return text;}
	this.getStamp = function() {return stamp;}
	this.getTo = function() {return to;}
	this.getUid = function() {return uid;}
	this.getHash = function() {return hash;}
}

function Chat(){
	var messageslog = new Array();
	this.addMessages = function(line){
		lines = line.split3();
		messages = new Array();
		uids = new Array();
		for (index in lines){
			line = lines[index];
			if (line!=''){
				cm = new ChatMessage();
				cm.fromLine(line);
				messages.push(cm);
				uids.push(cm.getUid());
			}
		}
		UsrUiCache.prepCache(uids);
		for (index in messages){
			this.addPLine(messages[index]);
		}
		UsrList.updateScrolls();
	}
	
	this.addPLine = function(mes){
		var hash = mes.getHash();
		if (messageslog[hash]) return;
		messageslog[hash]=mes;
		var html = '<h2 class="<%sex%>"><%name%></h2><h4 class="<%sex%>"><%text%></h4><br class="clear">';
		uid = mes.getUid();
		
		if (uid){
			var ui = UsrUiCache.getCache(uid);
			html = html.varReplace('sex', ui.getSexCl());
			html = html.varReplace('name', ui.getNickname());
			html = html.varReplace('text', mes.getText());
			if (mes.getText()!=''){
				$('#chatlist').prepend(html);
			}
		}
		
	}
	
	this.sendMessage = function(){
		if (notLogged()) return false;
		mes = $('#chatmessage').val();
		url = '/fa/de/chat-addMessage/'+Spiel.uid+'/'+Spiel.gameId+'/'+Spiel.pass+'/0';
		$.post(url, { message: mes},
				  function(data){
						mes = new ChatMessage();
						mes.fromLine(data);
						Chat.addPLine(mes);
				   });
		$('#chatmessage').val('');
		
		return false;
	}
	
	this.keypress = function(event){
		
	  if(event.ctrlKey && (event.keyCode == 13 || event.keyCode==10)){
		event.preventDefault();
		event.stopPropagation();
		this.sendMessage();
	  }
	}
}
Chat = new Chat();

function WaitChat(uid, gameId, pass){
	this.uid = uid;
	this.gameId = gameId;
	this.pass = pass;
	
	var messageslog = new Array();
	this.addMessages = function(line){
		lines = line.split3();
		messages = new Array();
		uids = new Array();
		for (index in lines){
			line = lines[index];
			if (line!=''){
				cm = new ChatMessage();
				cm.fromLine(line);
				messages.push(cm);
				uids.push(cm.getUid());
			}
		}
		UsrUiCache.prepCache(uids);
		for (index in messages){
			this.addPLine(messages[index]);
		}
	}
	
	this.addPLine = function(mes){
		hash = mes.getHash();
		if (messageslog[hash]) return;
		messageslog[hash]=mes;
		html = '<h2 class="<%sex%>"><%name%></h2><h4 class="<%sex%>"><%text%></h4><br class="clear">';
		uid = mes.getUid();
		ui = UsrUiCache.getCache(uid);
		html = html.varReplace('sex', ui.getSexCl());
		
		html = html.varReplace('name', ui.getTxtNick());
		
		html = html.varReplace('text', mes.getText());
		if (mes.getText()!=''){
			$('#chatlist').prepend(html);
		}
		UsrList.updateScrolls();
		
	}
	
	this.updateScrolls = function(){
		$('#chatlist').jScrollPane({showArrows:true, scrollbarWidth: 13, arrowSize: 13});
	}
	
	this.sendMessage = function(){
		mes = $('#chatmessage').val();
		url = '/fa/de/chat-addMessage/'+Chat.uid+'/'+Chat.gameId+'/'+Chat.pass+'/0';
		$.post(url, { message: mes},
				  function(data){
			
						mes = new ChatMessage();
						mes.fromLine(data);
						Chat.addPLine(mes);
				   });
		$('#chatmessage').val('');
	}
	
	this.keypress = function(event){
		
	  if(event.ctrlKey && (event.keyCode == 13 || event.keyCode==10)){
		event.preventDefault();
		event.stopPropagation();
		Chat.sendMessage();
	  }
	}
	
	this.ping = function(){
		$.ajax({url:'/fa/de/ghandler-usrstatlist/'+Chat.uid+'/'+Chat.gameId+'/'+Chat.pass, async:true, success:function(data){
				var blocks = data.split('^^^\n');
				var chat = '';
				var data = blocks[0];
				if (blocks.length>1){
					chat = blocks[1];
				}
				Chat.addMessages(chat);
				setTimeout(Chat.ping, 3000);
			}
		});
		
	}
}

