var host_root = '/';

var chat = new function () {

	this.content = null;
	this.lastrequest = 0;
	this.timeout = null;
	this.requestInterval = 3000;

	this.submit = function () {
		var text = this.textinput.value;
		if (text.length == 0)
			return;
		
		var postvalue = {	'action'		: 'submit',
							'text'			: text,
							'lastrequest'	: this.lastrequest	}
		
		var submit = host_root + 'chat.php';
		http('POST', submit, chat.recieve, postvalue);
		this.form.reset();
		this.textinput.focus();
	}
	
	this.request = function () {
		var postvalue = {	'action'		: 'request',
							'lastrequest'	: chat.lastrequest	}
							
		var submit = host_root + 'chat.php';
		http('POST', submit, chat.recieve, postvalue);
		this.timeout = window.setTimeout('chat.request();', this.requestInterval);
	}
	
	this.recieve = function (data) {
		if (data.length > 0)
			chat.setEntries(data);
	}
	
	this.setEntries = function (entries) {
		for (var i = 0; i < entries.length; i++) {
			if (entries[i].timestamp > this.lastrequest)
				this.lastrequest = entries[i].timestamp;
				
			var id = 'chat#'+entries[i].nickname+'#'+entries[i].timestamp+'#'+entries[i].time;
			if (!document.getElementById(id)) {
				//add to screen
				
				
				var islast = false;
				if (this.entries.lastChild) {
					var lastlayer = this.entries.lastChild.id.split('#');
					var islast = lastlayer[1] == entries[i].nickname;
				}
				
				
				var layer = document.createElement('div');
				layer.id = id;
				layer.className = 'entry';
				
				
				if (islast)
					layer.className += ' repeat';
				
				
				
				
				
				var userlink = document.createElement('a');
				userlink.href = host_root + 'profile/' + entries[i].nickname;
				userlink.className = (entries[i].gender == '0') ? 'female' : 'male';
				userlink.appendChild(document.createTextNode(entries[i].nickname));
				
				
				
				
				if (!islast || lastlayer[3] != entries[i].time) {
					var time = document.createElement('span')
					time.className = 'time';
					time.appendChild(document.createTextNode(entries[i].time))
					layer.appendChild(time);
				}
				
				
				var text = document.createElement('p')
				if (!islast)
					text.appendChild(userlink);
				text.appendChild(document.createTextNode(entries[i].text))
				layer.appendChild(text);
				layer.style.opacity = 0;
				
				
				this.entries.appendChild(layer);
				
				
				new Motion(layer, 'opacity', null, false, 0, 1, 400);
				//	this.entries.style.marginTop = diff+'px';
				
			
			}	
		}
		
		var diff = this.messages.offsetHeight - this.entries.offsetHeight;
		if (diff < 0) {
			var start = (this.entries.style.marginTop.length == 0) ? 0 : parseInt(this.entries.style.marginTop);
			new Motion(this.entries, 'marginTop', 'px', true, start, diff, 400);
		}
		
	}

	this.init = function () {
	
		this.shadow = document.createElement('div');
		this.shadow.className = 'chat shadow';
		this.shadow.style.height = document.body.offsetHeight + 'px';
		
		
		this.content = document.createElement('div');
		this.content.className = 'content';
		
		
		
	
		this.entries = document.createElement('div');
		this.entries.className = 'entries';

		this.messages = document.createElement('div');
		this.messages.className = 'messages';
		this.messages.appendChild(this.entries);
		
		
		this.form = document.createElement('form');
		
		this.textinput = document.createElement('input');
		this.textinput.type = 'text';
		this.textinput.setAttribute('maxlength', '255');
		this.submitbutton = document.createElement('button');
		this.submitbutton.type = 'submit';
		this.submitbutton.appendChild(document.createTextNode('senden'));

		
		this.closebutton = document.createElement('button');
		this.closebutton.type = 'button';
		this.closebutton.appendChild(document.createTextNode('ausblenden'));
		this.closebutton.onclick = function (e) {
			chat.shadow.style.display = 'none';
			return false;
		}
		
		this.form.appendChild(this.textinput);
		this.form.appendChild(this.closebutton);
		this.form.appendChild(this.submitbutton);
		this.form.onsubmit = function (e) {
			chat.submit();
			return false;
		} 

		this.content.appendChild(this.messages);
		this.content.appendChild(this.form);
		this.shadow.appendChild(this.content);
		
		document.body.appendChild(this.shadow);
	
		this.request();
	}

	this.open = function () {
		if (!this.content)
			this.init();
		
		this.shadow.style.display = 'block';
		this.textinput.focus();
	}

}
