//alert(listBool);
var chatURL = "/chat/chat.php";
var updateInterval = 1; // how many miliseconds to wait to get new message
var debugMode = false;
var lastMessageID = -1; 
var cache = new Array();
var entry = 0;
var XMLHttpRequestObject = getXMLHttp();

if (window.XMLHttpRequest) {
	XMLHttpRequestObject = new XMLHttpRequest();
} else if (window.ActiveXObject) {
	XMLHttpRequestObject = new ActiveXObject("Microsoft.XMLHTTP");
}



function getXMLHttp() {
  var XMLHttp = null;
  if (window.XMLHttpRequest) {
    try {
      XMLHttp = new XMLHttpRequest();
    } catch (e) { }
  } else if (window.ActiveXObject) {
    try {
      XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) { }
    }
  }
  return XMLHttp;
}



function createXmlHttpRequestObject() 
{
	
	var xmlHttp;
	
	try
	{
		xmlHttp = new XMLHttpRequest();
	}
	catch(e)
	{
		var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
																		"MSXML2.XMLHTTP.5.0",
																		"MSXML2.XMLHTTP.4.0",
																		"MSXML2.XMLHTTP.3.0",
																		"MSXML2.XMLHTTP",
																		"Microsoft.XMLHTTP");
		// try every prog id until one works
		for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
		{
			try 
			{ 
				// try to create XMLHttpRequest object
				xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
			} 
			catch (e) {}
		}
	}
	
	if (!xmlHttp)
		alert("Error creating the XMLHttpRequest object.");
	else 
		return xmlHttp;
}


if (listBool==1) {
	Event.observe(window, 'load', function () {



			if ( $('grp_id') ) {
				updateChattingList($('grp_id').value);

				var chatXhr	= '/chat/chat_xhr_users_online.php';
				var chatArg = 'grp_id='+$('grp_id').value;
				new Ajax.PeriodicalUpdater('wrap_users_chatting', 
																	 chatXhr, 
																	 {
																		method: 'get', 
																		parameters: chatArg,
																		frequency: 3 


																	 });		
			}		


	});
}


//																		frequency: 5, 
//																		decay: 2


Event.observe (window, 'load', function() {
	if ( $('grp_id') ) {
		init();
	}
}, false);


function updateChattingList(grp_chat_id)
{
	var chatXhr	= '/chat/chat_xhr_users_online.php';
	var chatArg	= 'grp_id='+grp_chat_id;
	new Ajax.Updater( 'wrap_users_chatting', chatXhr, {
					method: 'get',
					parameters: chatArg
			
			});
	                   


}




function init() 
{
  var oRoomLoc 		= $("grp_id");
  $('messageBox').setAttribute("autocomplete", "off");    
  $('messageBox').focus();
  requestNewMessages();
  
  if ( $('debug') )  $('debug').update('loaded');
}

function sendMessage()
{
  var groupLoc 				= $('grp_id').value;
  var msgBoxValue 		= $('messageBox');
  var user_id  				= $('user_id').value;  
  var currentUser 		= $('userName').value;
  var currentColor 		= $('color').value;
  
  
	if(msgBoxValue.value=='')
	{
		msgBoxValue.value='joinedtheroom';
	}  

  
  
  if (trim(msgBoxValue.value) != "" &&
      trim(currentUser) != "" && trim (currentColor) != "")
  {

  	
  	
    // if we need to send and retrieve messages
    params =  "mode=SendAndRetrieveNew" +
              "&id=" + encodeURIComponent(lastMessageID) + 
              "&user_id=" + encodeURIComponent(user_id) + 
              "&name=" + encodeURIComponent(currentUser) + 
              "&grouploc=" + encodeURIComponent(groupLoc) + 
              "&message=" + encodeURIComponent(msgBoxValue.value) + 
              "&color=" + encodeURIComponent(currentColor);

    cache.push(params);

    msgBoxValue.value = "";
  }
}


function deleteMessages()
{
  
  params = "mode=DeleteAndRetrieveNew";  
  
  cache.push(params);
}

/* makes asynchronous request to retrieve new messages, post new messages, delete messages */


function requestNewMessages()
{  
  // retrieve the roomlocation, username and color from the page
  var rGroupLoc 			= $("grp_id").value;
  var user_id  				= $('user_id').value;  
  var currentUser 		= $('userName').value;
  var currentColor 		= $('color').value;

	//alert(rGroupLoc);
	
	

  // only continue if XMLHttpRequestObject isn't void
  if(XMLHttpRequestObject)
  {
    try
    {
      // don't start another server operation if such an operation 
      //   is already in progress 
      if (XMLHttpRequestObject.readyState == 4 || 
          XMLHttpRequestObject.readyState == 0) 
      {
        // we will store the parameters used to make the server request
        var params = "";
        // if there are requests stored in queue, take the oldest one
        if (cache.length>0)
          params = cache.shift();
        // if the cache is empty, just retrieve new messages        
        else
          params = "mode=RetrieveNew" +
              "&id=" + encodeURIComponent(lastMessageID) + 
              "&user_id=" + encodeURIComponent(user_id) + 
              "&name=" + encodeURIComponent(currentUser) + 
              "&grouploc=" + encodeURIComponent(rGroupLoc) + 
              "&color=" + encodeURIComponent(currentColor);
					

        XMLHttpRequestObject.open("POST", chatURL, true);
        XMLHttpRequestObject.setRequestHeader("Content-Type", 
                                   "application/x-www-form-urlencoded");
        XMLHttpRequestObject.onreadystatechange = handleReceivingMessages;
 
        XMLHttpRequestObject.send(params);
      }
      else
      {
        // we will check again for new messages 
        setTimeout("requestNewMessages();", updateInterval);
        
        
      }
    }
    catch(e)
    {
      displayError(e.toString());
    }
  }
}

/* function that handles the http response when updating messages */
function handleReceivingMessages() 
{
  // continue if the process is completed
  if (XMLHttpRequestObject.readyState == 4) 
  {
    // continue only if HTTP status is "OK"
    if (XMLHttpRequestObject.status == 200) 
    {
      try
      {
        // process the server's response
        readMessages();
      }
      catch(e)
      {
        // display the error message
        displayError(e.toString());
      }
    } 
    else
    {
      
      displayError(XMLHttpRequestObject.statusText);
    }
  }
}

/* function that processes the server's response when updating messages */
function readMessages()
{  
  // retrieve the server's response 
  var response = XMLHttpRequestObject.responseText;
  
  response = XMLHttpRequestObject.responseXML.documentElement;
  // retrieve the flag that says if the chat window has been cleared or not 
  clearChat = false;
           //response.getElementsByTagName("clear").item(0).firstChild.data;
  
  if(clearChat == "true")
  {
    // clear chat window and reset the id
    $("scroll").innerHTML = '';
    //lastMessageID = -1;
    lastMessageID = 0;
 	}
  
  idArray 			= response.getElementsByTagName("id");
  colorArray 		= response.getElementsByTagName("color");
  nameArray 		= response.getElementsByTagName("name");
  messageArray 	= response.getElementsByTagName("message");
  
  
  displayMessages(idArray, colorArray, nameArray, messageArray);
  
  
  // the ID of the last received message is stored locally
  if(idArray.length>0)
    lastMessageID = idArray.item(idArray.length - 1).firstChild.data;
  // restart sequence
  setTimeout("requestNewMessages();", updateInterval);
}

/* function that appends the new messages to the chat list  */
function displayMessages(idArray, colorArray, nameArray, messageArray)
{
  
  for(var i=0; i<idArray.length; i++)
  {
    var colorHex 		= colorArray.item(i).firstChild.data.toString();
    var nameStr 		= nameArray.item(i).firstChild.data.toString();
    var msgStr 			= messageArray.item(i).firstChild.data.toString();
    
    
    
    var htmlMessage = "";
    htmlMessage += "<div  ";
    htmlMessage += "class=\"item\" style=\""
    
    if ( colorHex == 'rgb(0, 0, 0)' ) {
    	htmlMessage += "background:#000;color: " + colorHex + "\">"; 
    }
    else {
    	htmlMessage += "color: " + colorHex + "\">"; 
    }
    
    
    //htmlMessage += "<a title=\"Click to send a private message to " +nameStr + "\"  href=\"javascript:;\" onclick=\"$('messageBox').value='@ "+nameStr+" > ';$('messageBox').focus();return false;\">";
    
    //htmlMessage += "<b>" +nameStr + ":</b></a> ";
    htmlMessage += "<b>" +nameStr + ":</b> ";
    
    if ( nameStr == $('host_user').value ) htmlMessage += '<b>';
    
    htmlMessage += msgStr.toString();
    
    if ( nameStr == $('host_user').value ) htmlMessage += '</b>';
    
    htmlMessage += "</div>";
    
		document.title = nameStr + ' is talking';
    
    displayMessage (htmlMessage);
  }
}


function displayMessage(message)
{
  var oScroll 		= $("scroll");
  var scrollDown 	= (oScroll.scrollHeight - oScroll.scrollTop <= oScroll.offsetHeight );

  oScroll.innerHTML += message;
	oScroll.scrollTop = scrollDown ? oScroll.scrollHeight+100 : oScroll.scrollTop+100;
}

function handleKey(e) 
{
  // get the event
  e = (!e) ? window.event : e;
  // get the code of the character that has been pressed        
  code = (e.charCode) ? e.charCode :
         ((e.keyCode) ? e.keyCode :
         ((e.which) ? e.which : 0));
  // handle the keydown event       
  if (e.type == "keydown") 
  {
  	if ( code==113) {
  		var d = new Date();
  		var H	= d.getHours();
  		var i	= d.getMinutes();
  		
  		h = (H>=13) ? H-12 : H;
  		a = (H>=13) ? 'pm' : 'am';
  		
  		$('messageBox').value += h + ':' + i + ' ' + a;
  	}
    // if enter (code 13) is pressed
    if(code == 13)
    {
      // send the current message  
      sendMessage();
    }
  }
}



function insertEmoticon(emoticon)
{
	$('messageBox').value  += ' ' + emoticon; 
	$('smilePicker').hide();
}



function switchSwatch(newColor) 
{
	if ( $('debug') )  $('debug').update(newColor);
	$('color').value									= newColor.toUpperCase();
  //$('swatch').style.background     	= newColor;
  //$('swatch').style.color						= getOppositeColor();
  
  $('swatch').style.color						= newColor;
  
	$('messageBox').setStyle( { color: newColor } ).focus();
  $('colorPicker').toggle();
  
}


function switchBGSwatch(newColor) 
{
	$('bgcolor').value									= newColor.toUpperCase();
  $('bgswatch').style.background     	= newColor
  
  
  
  
	$('messageBox').setStyle( { backgroundColor: newColor } ).focus();
  $('bgcolorPicker').toggle();
}



function getOppositeColor()
{
	var b 	= $('swatch');
	var bg 	= b.style.backgroundColor;
	//alert('the present background is '+b.style.backgroundColor)
	//alert('the present background will be change into inversed RGB color')
	var oldCol = bg.split('(')[1].split(')')[0].split(',');
	var newCol = new Array();
	for(var i=0;i<oldCol.length;i++){
	newCol[i] = 255-Number(oldCol[i]);
	}
	//b.style.color = 'rgb('+newCol[0]+','+newCol[1]+','+newCol[2]+')';
	//alert('the new background is '+b.style.backgroundColor)
	
	return 'rgb('+newCol[0]+','+newCol[1]+','+newCol[2]+')';
}



function trim(s)
{
    return s.replace(/(^\s+)|(\s+$)/g, "")
}

function displayError(message)
{
  displayMessage("Error accessing the server! "+ message);
}



function msgTo(userName_userId)
{
	var userArr	= userName_userId.split('~');
	
	
	$('messageBox').value= '@ '+ userArr[0] + ' > ';
	
	
	panelXHR(userArr[1]);
	
}



function getPanelProfile(userName_userId)
{
	var userArr	= userName_userId.split('~');

	panelXHR(userArr[1]);
}


function panelXHR(user_id)
{
	
	
	
	var xhrUrl		= '/chat/grp_xhr_chat_profile.php';
	var xhrTar		= 'userPanel';
	var xhrPar		= '&user_id='+user_id;
	var xhrCall 	= new Ajax.Updater(xhrTar, xhrUrl, {	method: 'get',	parameters: xhrPar});

}




Image1 = new Image(19,19);
Image1.src = "/img/smilies/smiley1.gif";
Image2 = new Image(19,19);
Image2.src = "/img/smilies/smiley10.gif";
Image3 = new Image(19,19);
Image3.src = "/img/smilies/smiley11.gif";
Image4 = new Image(19,19);
Image4.src = "/img/smilies/smiley12.gif";
Image5 = new Image(19,19);
Image5.src = "/img/smilies/smiley13.gif";
Image6 = new Image(19,19);
Image6.src = "/img/smilies/smiley14.gif";
Image7 = new Image(19,19);
Image7.src = "/img/smilies/smiley15.gif";
Image8 = new Image(19,19);
Image8.src = "/img/smilies/smiley16.gif";
Image9 = new Image(19,19);
Image9.src = "/img/smilies/smiley17.gif";
Image10 = new Image(19,19);
Image10.src = "/img/smilies/smiley18.gif";
Image11 = new Image(19,19);
Image11.src = "/img/smilies/smiley19.gif";
Image12 = new Image(19,19);
Image12.src = "/img/smilies/smiley2.gif";
Image13 = new Image(19,19);
Image13.src = "/img/smilies/smiley20.gif";
Image14 = new Image(19,19);
Image14.src = "/img/smilies/smiley3.gif";
Image15 = new Image(19,19);
Image15.src = "/img/smilies/smiley4.gif";
Image16 = new Image(19,19);
Image16.src = "/img/smilies/smiley5.gif";
Image17 = new Image(19,19);
Image17.src = "/img/smilies/smiley6.gif";
Image18 = new Image(19,19);
Image18.src = "/img/smilies/smiley7.gif";
Image19 = new Image(19,19);
Image19.src = "/img/smilies/smiley8.gif";
Image20 = new Image(19,19);
Image20.src = "/img/smilies/smiley9.gif";