
var USERS = new Array(); /* array of ChatWindow objects, will resemble in chatboxes and upper tabs */
var MAP_OBJECTS = new Array(); /* array to store the markers on map */
var hide_map_reactions=false; /* se true to stop map reactions to chat*/
var stopGroupQueries=0; /* if set to 1 the functions will not make ajax request any more */
var stopGroupListRequest=1; /* if set to 1 the functions will not make ajax request any more */

var requesting_group_chat_messages = false; /*flag stating if a ajax request is in process for new chat messages*/

function updateGroupScroll(){
	/* moves the diolog window to the bottom*/
	$('parent_group_chat_box').scrollTop=$('parent_group_chat_box').scrollHeight;
}

var requesting_group_chat_messages=false;


function getChatGroupMessages() {
	/* retrieves new group messages*/



	if(stopQueries!=1)
	setTimeout("getChatGroupMessages();",(speed));



	/* gets new messages from a certain user to the page's page content area*/
	if (requesting_group_chat_messages || groupRequestID==0) {
		return false;
	}

	var addr=BASE_URL+'/ajax/group-messaging/getgroupmessagesxml.php';
	var params='uid='+groupRequestID;

	var myAjax = new Ajax.Request(addr,
									{
										method:'get',
										parameters:params,
										onComplete: processGroupMessages,
										onFailure: systemError
									});

	requesting_group_chat_messages = true;


}


function requestChatUserList() {
	/* retrieves list of users in chat*/


	var addr=BASE_URL+'/ajax/group-messaging/requestuserlist.php';
	var params='gid='+groupRequestID;

	var myAjax = new Ajax.Request(addr,
									{
										method:'get',
										parameters:params,
										onComplete: processGroupUserList,
										onFailure: systemError
									});

}


function requestPartChat() {
	/* retrieves list of users in chat*/

	var addr=BASE_URL+'/ajax/group-messaging/partchatgroup.php';
	var params='gid='+groupRequestID;

	var myAjax = new Ajax.Request(addr,
									{
										method:'get',
										parameters:params,
										onFailure: systemError
									});

}

function processGroupMessages(request_msg) {

		try{
			if (request_msg.readyState == 4) {
					requesting_chat_messages = false;
				if(request_msg.status == 200) {
					var htmlDoc = request_msg.responseText;

					requesting_group_chat_messages = false;

						var new_msgs = new Array();

						var the_object = eval('(' + htmlDoc + ')');
						//alert(the_object);
						if(the_object && the_object.messages){
							var messages = the_object.messages;

							for (var i=0;i<messages.length-1;i++) {
								var nextitem = new_msgs.length;
								new_msgs[nextitem] = new Array();
								new_msgs[nextitem]["id"] = messages[i].id;
								new_msgs[nextitem]["uid"] = messages[i].uid;
								new_msgs[nextitem]["rcpt_id"] = messages[i].rcpt_id;
								new_msgs[nextitem]["username"] = decode(messages[i].username);
								new_msgs[nextitem]["online_state"] = decode(messages[i].online_state);
								new_msgs[nextitem]["date"] = messages[i].date;
								if(messages[i].uid==-1) {
								new_msgs[nextitem]["lng"] = messages[i].lng;
								new_msgs[nextitem]["lat"] = messages[i].lat;
								new_msgs[nextitem]["gender"] = messages[i].gender;
								new_msgs[nextitem]["member"] = messages[i].member;
								}
								new_msgs[nextitem]["content"] = decode(messages[i].content);

							}
						}

						for(i=0;i<new_msgs.length;i++){

					if(new_msgs[i]['uid']=='-1') {
						//join command
						//alert("Join command: "+i+" "+new_msgs[nextitem]["rcpt_id"]+" "+new_msgs[nextitem]["username"]);

						addJoinedUser(new_msgs[i]['rcpt_id'],new_msgs[i]['username']); //add user to list of users

						objAux=isInMapObjects(new_msgs[i]['rcpt_id']); //show or add user marker to the map
						//alert(htmlDoc);

						if(objAux!=false) objAux.showMarker();
						else if(new_msgs[i]['member']=='1')
							MAP_OBJECTS[MAP_OBJECTS.length]=new GroupChatUser(new_msgs[i]['rcpt_id'],new_msgs[i]['username'],new_msgs[i]['lat'],new_msgs[i]['lng'],new_msgs[i]['gender']);

						new Insertion.Bottom('group_chat_box',"<div style='margin:1px;'>["+new_msgs[i]["date"]+"]: "+new_msgs[i]["content"]+"</div>");


					} else if(new_msgs[i]['uid']=='-2') {

						removePartedUser(new_msgs[i]['rcpt_id']);

						objAux=isInMapObjects(new_msgs[i]['rcpt_id']);
						if(objAux!=false) objAux.hideMarker();

						new Insertion.Bottom('group_chat_box',"<div style='margin:1px;'>["+new_msgs[i]["date"]+"]: "+new_msgs[i]["content"]+"</div>");
					}
					else {

						//if(UserId!=new_msgs[i]['uid'])
						new Insertion.Bottom('group_chat_box',"<div style='margin:1px;'>["+new_msgs[i]["date"]+"] <b>"+new_msgs[i]["username"]+":</b> <code>"+new_msgs[i]["content"]+"</code>");
						aux=isInMapObjects(new_msgs[i]['uid']);
						if(aux!=false) aux.showMessage(new_msgs[i]["content"]);
					}


						}

						if(new_msgs.length>0) {
								updateGroupScroll();
						}


				}
				else {
					debugOUT('Request error.');
				}
			}

		}
		catch(e){
			// caught an error
			debugOUT('Response failed.\n'+e);
		}
		finally{}
	}

function addJoinedUser(user_id,username){
	//alert("adding "+user_id+" "+username);
	if($('user_'+user_id)) {

		//alert("User is in list \n".$('user_'+user_id).innerHTML);
		return; //user is in list
	}
	else if(user_id>0) new Insertion.Bottom('user_list',"<div style='margin:1px;' id='user_"+user_id+"' name='user_"+user_id+"'><a href='"+BASE_URL+"/user_profile.php?id="+user_id+"'>"+username+"</a></div>");
	else new Insertion.Bottom('user_list',"<div style='margin:1px;' id='user_"+user_id+"' name='user_"+user_id+"'>"+username+"</div>");
}

function removePartedUser(user_id){
	//alert("Removing "+user_id);
	Element.remove('user_'+user_id);
}


var sending_group_chat_message=false;

function sendGroupChatMessage(){
	if(groupRequestID==0)
		return;

		var message=$F('group_input');
		$('group_input').value='';

		if(message==''){
	  		return false;
	  	}


				var addr=BASE_URL+'/ajax/group-messaging/sendmessage.php';
				var parameters='rcpt_uid='+groupRequestID+'&message='+encode(message);

				var myAjax = new Ajax.Request(addr,
									{
										method:'post',
										parameters:parameters,
										onFailure: systemError,
										onComplete: groupMessageSent
									});

				sending_chat_message = true;

var today = new Date();
var seconds = today.getSeconds();
var minutes = today.getMinutes();
var hours = today.getHours();

				//new Insertion.Bottom('group_chat_box',"<div style='margin:1px;'>["+hours+":"+minutes+":"+seconds+"] <b>"+UserName+":</b> <code>"+message+"</code>");
				//updateGroupScroll();

}

function groupMessageSent(request_sendmsg) {

	if (request_sendmsg.readyState == 4) {
		var htmlDoc = request_sendmsg.responseText;
		//alert(htmlDoc);
		if(htmlDoc!='success') {
			new Insertion.Bottom('group_chat_box',"<div style='margin:1px;'><i><font color=#FF0000>error sending message</font></i>");
		}

		sending_group_chat_message = false;
		delete request_sendmsg;

	}
}


function processGroupUserList(request_list_msg) {
				//alert("Processing");
		try{
			if (request_list_msg.readyState == 4) {

				if(request_list_msg.status == 200) {
					var htmlDoc = request_list_msg.responseText;

			var the_object = eval('(' + htmlDoc + ')');
					//alert(the_object);
					//alert(the_object.messages.message[0].id+" "+the_object.messages.message[0].content);
					//return;
						var new_msgs = new Array();
						if(the_object && the_object.chatusers){
							var chatusers = the_object.chatusers;

					for (var i=0;i<chatusers.length-1;i++) {	//	alert(i);
					uid = chatusers[i].uid;
					lng = chatusers[i].lng;
					lat = chatusers[i].lat;
					gender = chatusers[i].gender;
					member = chatusers[i].member;
					username = decode(chatusers[i].username);
				//	alert("22");
					if(uid && username)
						addJoinedUser(uid,username);

						//map reaction section
					objAux=isInMapObjects(uid);

				//	alert("OBj: "+objAux);
					if(objAux!=false)
						objAux.showMarker();
					else {
						//alert("Adding marker");
						if(member=='1')
						MAP_OBJECTS[MAP_OBJECTS.length]=new GroupChatUser(uid,username,lat,lng,gender,member);
					}


					}


			}




					}else {
						debugOUT('Request error.');
					}

				}
		}
	catch(e){
		// caught an error
		debugOUT('Response failed.\n'+e);
	}
	finally{}


	getChatGroupMessages();
}

function unloadFunc(){

	eraseCookie('global_chat_window_state');
	if(self.GMap2){
		GUnload();
	}
	//requestPartChat();
}


var GroupChatUser = Class.create();

GroupChatUser.prototype = {
/* class for the map markers */
	initialize: function(userID,userName,lat,lng,gender){

		this.uid=userID;
		this.user=userName;
		this.is_online=null;

	var point = new GLatLng(lat,lng);
	///var icon = new GIcon();
	this.point=point;
	///alert("Adding marker at "+lat+" "+lng+" "+userName);
	///if (gender == 'female') {
	///	icon.image = BASE_URL+"/images/icons/girl.gif";
	///} else {
	///	icon.image = BASE_URL+"/images/icons/man.gif";
	///}
	//icon.shadow = BASE_URL+"/images/icons/small_shadow.png";
	///icon.iconSize = new GSize(12, 30);
	//icon.shadowSize = new GSize(22, 20);
	///icon.iconAnchor = new GPoint(12, 5);
	///var marker = new GMarker(point, icon);
	///GEvent.addListener(marker, "click", function() {
		///showChatWindow();
		///addUserChatTab(userID,userName);
		//map.openInfoWindowHtml(point, html);

	///});
	///this.marker = marker;
	///map.addOverlay(marker);
	this.showed=true;
	map.panTo(this.point);
	},

	hideMarker: function(){
		//alert('hiding');
	map.closeInfoWindow();
	///map.removeOverlay(this.marker);
	this.showed=false;

	},

	showMarker: function() {
	///map.addOverlay(this.marker);
	this.showed=true;
	map.panTo(this.point);
	},


	showMessage: function(text) {
		if(self.show_msg_popups && show_msg_popups){
			map.openInfoWindowHtml(this.point, "<div align='left'><b>"+this.user+":</b> "+text+"</div>");
			map.panTo(this.point);
		}
	}

};

function isInMapObjects(userid){
	/* search a marker in the marker array*/
	//alert("in seach for "+userid);
	if(MAP_OBJECTS && MAP_OBJECTS.length){
		for(i=0;i<MAP_OBJECTS.length;i++){
			if(MAP_OBJECTS[i].uid==userid)
				return MAP_OBJECTS[i];
		}
	}

//	alert("not found");
	return false;

}

function hideGroupChatWindow() {
	if(MAP_OBJECTS && MAP_OBJECTS.length){
		for(i=0;i<MAP_OBJECTS.length;i++){
			if(MAP_OBJECTS[i].showed)
				MAP_OBJECTS[i].hideMarker();
		}
	}
	requestPartChat();
	Hide('group_messaging');
}
function groupInputEnter(event)
{

	var code = event.keyCode

	switch (code)
	{
	case 13:
	//alert(event.keyCode)
			sendGroupChatMessage();
			return false;
		break;
	}
}
