	
	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,"");
	}
	String.prototype.ltrim = function() {
		return this.replace(/^\s+/,"");
	}
	String.prototype.rtrim = function() {
		return this.replace(/\s+$/,"");
	}

	var memory;
	var AjaxRequestIsActive = false;
	var FailedRequests = 0;
	
	var UserRequestIsActive = false;
	var FailedUserRequests = 0;
	
	function getUserList(){
		if (UserRequestIsActive == false){
			// also update the users list
			upd = new Ajax.Updater('onlineUsers','/_scripts/chat/chatControl.scr.php', {
				method:'post',
				parameters:'user_id='+document.getElementById('chatuserid').value+'&mode=getUserList',
				onCreate:function(transport){
					UserRequestIsActive = true;
				}, 
				onComplete:function(transport){
					UserRequestIsActive = false;
					FailedUserRequests = 0;
				}
			});
		} else {
			//alert("failed user request");
			FailedUserRequests++;
			if (FailedUserRequests > 5){
				upd.transport.abort();
				FailedUserRequests = 0;
				UserRequestIsActive = false;
			}
		}
	}
	
	function getNewContent(){
		if (AjaxRequestIsActive == false){
			chatElement = document.getElementById('chatContent');
			var last_id_collected = chatElement.lastChild.id;
	
			req = new Ajax.Request('/_scripts/chat/chatControl.scr.php', {
				method:'post',
				parameters:'last_id='+last_id_collected+'&user_id='+document.getElementById('chatuserid').value+'&mode=getLatest',
				onCreate:function(transport){
					AjaxRequestIsActive = true;
				}, 
				onSuccess:function(transport){
					Element.insert(chatElement,transport.responseText.trim());
					var objDiv = document.getElementById('chatWindow');
					objDiv.scrollTop = objDiv.scrollHeight;
				},
				onComplete:function(transport){
					AjaxRequestIsActive = false;
					FailedRequests = 0;
				}
			});
		} else {
			FailedRequests++;
			if (FailedRequests > 5){
				req.transport.abort();
				FailedRequests = 0;
				AjaxRequestIsActive = false;
			}
		}
	}
			
	function addContent(){
		var textToSend = document.getElementById('chattext').value;
		if (textToSend==""){
			return false;
		}
		document.getElementById('chattext').value='';
			
		ContentRequest = new Ajax.Request('/_scripts/chat/chatControl.scr.php', {
				method:'post',
				parameters:Form.Element.serialize('chatuserid')+"&"+Form.Element.serialize('chatMode')+"&chattext="+escape(textToSend),
				onSuccess:function(transport){
					getNewContent();
				}
		});
		return false;
	}
	
	function startStop() {
		if (typeof(chatUpdater) == "undefined"){
			chatUpdater = new PeriodicalExecuter(getNewContent, 5);
			userUpdater = new PeriodicalExecuter(getUserList, 10);
			setupRunningFields();
			return true;
		}
		
		if (chatUpdater.isAlive() == true){
			chatUpdater.stop();
			userUpdater.stop();
			StartStopRequest = new Ajax.Request('/_scripts/chat/chatControl.scr.php', {
					method:'post',
					parameters:'mode=stopChat&user_id='+document.getElementById('chatuserid').value,
					onSuccess:function(transport){
						AjaxRequestIsActive = false;
						UserRequestIsActive = false;
						setupStoppedFields();
				}
			});
		} else {
			setupRunningFields();
			chatUpdater.restart();
			userUpdater.restart();
		}
	}
	
	function setupRunningFields(){
		
		document.getElementById('stopButton').value="Stop Chat";
		document.getElementById('chatsubmit').disabled=false;
		document.getElementById('chattext').disabled=false;
	}
	
	function setupStoppedFields(){
		
		document.getElementById('stopButton').value="Start Chat";
		document.getElementById('chatsubmit').disabled=true;
		document.getElementById('chattext').disabled=true;
						
	}
	
	setupStoppedFields();
	
