// Buddylist Class
var Buddylist = {  
   buddyListWin: null,

   create: function() {
      Event.observe(window, 'resize', Buddylist.fixBuddyList);
      
      if(!$('bl')) {
         this.buddyListWin = new Window({id: 'bl', className: "dialog", width: 210, height: (Browser.height() - 60), zIndex: 100, resizable: true, title: 'ZicZac! Messenger', draggable: true, closable: false, maximizable: false, detachable: false, minWidth: 205, minHeight: 150,showEffectOptions: {duration: 0}, hideEffectOptions: {duration: 0}});
         this.buddyListWin.setConstraint(true, {left: 0, right: 0, top: 0, bottom: 0});
      }
      
      this.buddyListWin.getContent().innerHTML = '<div id="blTopToolbar"><span class="toolbarButton">' +
                                                  '<img id="addbuddy" src="'+STATIC_ZICZAC+'/themes/'+theme+'/window/addbuddy.png" class="toolbarButton" onclick="Dialogs.newBuddy(\'\',\'add\');" alt="' + Languages.get('addBuddyButton') + '" title="' + Languages.get('addBuddyButton') + '" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);" /></span>' +
                                                  '<span class="toolbarButton toolbarSpacer"><img id="removebuddy" src="'+STATIC_ZICZAC+'/themes/'+theme+'/window/removebuddy.png" class="toolbarButton" onclick="Dialogs.removeBuddy(\'\');" alt="' + Languages.get('removeBuddyButton') + '" title="' + Languages.get('removeBuddyButton') + '" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);" /></span>' +
                                                  '<span class="toolbarButton"><img id="imanyone" src="'+STATIC_ZICZAC+'/themes/'+theme+'/window/imanyone.png" class="toolbarButton" onclick="Dialogs.conferenceBox(\'\');" alt="' + Languages.get('IMAnyoneButton') + '" title="' + Languages.get('IMAnyoneButton') + '" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);" /></span>' +
                                                  '<span class="toolbarButton toolbarSpacer"><img id="joinroom" src="'+STATIC_ZICZAC+'/themes/'+theme+'/window/joinroom.png" class="toolbarButton" onclick="Dialogs.newRoom();" alt="' + Languages.get('joinChatroomButton') + '" title="' + Languages.get('joinChatroomButton') + '" onmouseover="buttonHover(this);" onmouseout="buttonNormal(this);" onmousedown="buttonDown(this);" onmouseup="buttonNormal(this);"/></span>' +
                                                  '<span class="toolbarButton"><img id="toggleaudio" src="'+STATIC_ZICZAC+'/themes/'+theme+'/window/audio_'+(audioNotify ? 'on' : 'off')+'.png" onclick="toggleAudio();" alt="' + Languages.get('toggleSoundButton') + '" title="' + Languages.get('toggleSoundButton') + '" /></span>' +
                                                  '<div style="display:block; margin-top:3px"><input type="text" id="strKeywordUname" value="' + Languages.get('searchforbuddy') + '" onkeyup="Search.processSearch(event);" onclick="checkSearchUname();" /></div>' +
                                                  '</div><div id="blContainer"><div id="search_suggest"></div><ul id="buddylist" class="sortable box"></ul></div><div id="blBottomToolbar"><img onclick="ShowAddTransport()" src="'+STATIC_ZICZAC+'/themes/transport/big/yahoo_big.gif" style="cursor:hand;cursor:pointer;border:0;margin-bottom:2px;"><img onclick="ShowAddTransport()" src="'+STATIC_ZICZAC+'/themes/transport/big/msn_big.gif" style="cursor:hand;cursor:pointer;border:0;margin-bottom:2px;"><img onclick="ShowAddTransport()" src="'+STATIC_ZICZAC+'/themes/transport/big/aim_big.gif" style="cursor:hand;cursor:pointer;border:0;margin-bottom:2px;"><img onclick="ShowAddTransport()" src="'+STATIC_ZICZAC+'/themes/transport/big/gtalk_big.gif" style="cursor:hand;cursor:pointer;border:0;margin-bottom:2px;"><img onclick="System.logout(\'' + Languages.get('signOff') + '\');return false;" src="'+STATIC_ZICZAC+'/themes/'+theme+'/window/signoff.gif" style="cursor:hand;cursor:pointer;border:0;margin-bottom:2px;"></div>';
      Event.observe(this.buddyListWin.getContent(), 'contextmenu', function() { return false; });
      
      $('bl_minimize').setStyle({left: (this.buddyListWin.getSize()['width'] - 21) + 'px'});
      
      this.sizeBuddyList();
      
      this.buddyListWin.showCenter(false, (((Browser.height()-40) / 2) - (this.buddyListWin.getSize()['height'] / 2)), (buddyListLoc == 0 ? 10 : (Browser.width() - this.buddyListWin.getSize()['width'] - 10)));
      this.buddyListWin.toFront();
      
      this.list = {};
      this.listObjects = {};
	  
   },
   
   destroy: function() {
      this.buddyListWin.destroy();
   },
   
   fixBuddyList: function() {
      if(Buddylist.buddyListWin.isVisible()) {
         Buddylist.buddyListWin.setSize(210, (Browser.height() - 60));
         Buddylist.buddyListWin.setLocation((((Browser.height()-40) / 2) - (Buddylist.buddyListWin.getSize()['height'] / 2)), (buddyListLoc == 0 ? 10 : (Browser.width() - Buddylist.buddyListWin.getSize()['width'] - 10)));
         Buddylist.sizeBuddyList();
      }
   },

   sizeBuddyList: function() {
      $('blContainer').setStyle({width:  (this.buddyListWin.getSize()['width'] - 8) + 'px',
                                 height: (this.buddyListWin.getSize()['height'] - 95) + 'px'});
                                 
      $('blBottomToolbar').setStyle({width:  (this.buddyListWin.getSize()['width'] - 8) + 'px',
                                     top:    (this.buddyListWin.getSize()['height'] - 7) + 'px'});

      $('bl_minimize').setStyle({left: (this.buddyListWin.getSize()['width'] - 21) + 'px'});                                     
   },

	addNewBuddy: function(username, groupname, type, called_win_name) {
		username = username.toLowerCase();
		var userID = '';
		var transport = '';
		var idRosterItem = '';	
		if(username=='')
		{
			Dialogs.alertBasic('alertAddnick3', Languages.get('alert_addnick3'), (selected_transport=='' ? 'ziczac.big-error.png' : selected_transport+'.big-error.png'));
			return;
		}
		if(selected_transport=='')
		{
			Dialogs.alertBasic('alertAddnick1', Languages.get('alert_addnick1'), 'ziczac.big-error.png');
			return;
		}
		if(trim(groupname).length=0)
		{
			Dialogs.alertBasic('alertAddnick2', Languages.get('alert_addnick2'), selected_transport+'.big-error.png');
			return;
		}
		var escpasedJID = username;
		// convert username co @ sang \40
			escpasedJID = escpasedJID.replace("\\", "\\5c");
			escpasedJID = escpasedJID.replace("@", "\\40");
			escpasedJID = escpasedJID.replace(" ", "\\20");
			escpasedJID = escpasedJID.replace("&", "\\26");
			escpasedJID = escpasedJID.replace(">", "\\3e");
			escpasedJID = escpasedJID.replace("<", "\\3c");
			escpasedJID = escpasedJID.replace(":", "\\3a");
			escpasedJID = escpasedJID.replace("\"", "\\2f");
			escpasedJID = escpasedJID.replace('"', "\\22");
			escpasedJID = escpasedJID.replace("'", "\\27");
		if(selected_transport==JSERVER)
		{
			transport = 'ziczac';
			// convert username co @ sang \40
			userID = escpasedJID + '@' + JSERVER;
			idRosterItem = username + '@' + JSERVER;
		}
		else
		{
			transport = selected_transport;
			if (transport=='yahoo'){
				username = username.replace(/@yahoo.com.vn/i,'');
				username = username.replace(/@yahoo.com/i,'');
			}
			if (transport=='aim')
				username = username.replace(/@aol.com/i,'');
			if (transport=='msn'){
				if (username.search("@") < 0)
					username = username + '@hotmail.com';
			}
			if (transport=='gtalk'){
				if (username.search("@") < 0)
					username = username + '@gmail.com';
			}
			userID = escpasedJID + '@' + selected_transport + '.' + JSERVER;
			idRosterItem = username + '@' + selected_transport + '.' + JSERVER;
		}
		//Neu chua ton tai username nay trong buddylist
	  
		if(!inArray(Buddylist.list, idRosterItem) && (!Buddylist.listObjects[idRosterItem] || !$(Buddylist.listObjects[idRosterItem].obj)))
	  	{
			if(type=='accept_and_add')
			{
				objJS.aeCt(userID,groupname);
			}
			else
			{
				objJS.adCt(userID, username.replace('\\40','@'), groupname, true);
			}

               	if(!$(groupname.replace(/\s/, '_') + '_group'))
			   	{
                  	Buddylist.addGroup(groupname);
                  	Buddylist.list[groupname] = {};
               	}
               
               	Buddylist.addBuddy(idRosterItem, groupname, 'addnick');
				Buddylist.moveBuddy(idRosterItem, 'Offline');
				Buddylist.list[groupname][idRosterItem] = {'username': idRosterItem};
				if(selected_transport==JSERVER)
				{
					$(Buddylist.listObjects[idRosterItem].img).src = ''+STATIC_ZICZAC+'/themes/transport/ziczac-offline.gif';
				}
				else
				{
					$(Buddylist.listObjects[idRosterItem].img).src = ''+STATIC_ZICZAC+'/themes/transport/'+selected_transport+'-offline.gif';
				}
				
				$(idRosterItem+'_status').innerHTML = '<i>('+Languages.get('adding_request')+')</i>';

               //Buddylist.list[groupname][idRosterItem] = {'username': username, 'ask': 'subscribe', 'subscription': 'none'};

			   selected_transport = '';
			   Windows.close(''+called_win_name+'');

      	}
		else
		{
			//Dialogs.alertBasic('alertAddnick2', Languages.get('alert_addnick4'), transport+'.big-error.png');
			if(type=='accept_and_add')
			{
				objJS.aeCt(userID,groupname);
			}
			else
			{
				Dialogs.alertBasic('alertAddnick2', Languages.get('alert_addnick4'), transport+'.big-error.png');
				//objJS.adCt(userID, username.replace('\\40','@'), groupname, true);
			}
			selected_transport = '';
			Windows.close(''+called_win_name+'');
		}
   },

	addBuddy: function(username, groupname, type) {  
		if(!$(groupname.replace(/\s/, '_') + '_group')) this.addGroup(groupname);
		
		var groupList = $(groupname.replace(/\s/, '_') + '_group');
		
      	/*var randId = Math.floor(Math.random()*1000000000);
      	while($(randId + '_blItem'))
		{
         	randId = Math.floor(Math.random()*1000000000);
		}/**/
		 
		var strJid = GetUsernameWithoutReource(username);
		var strDisplayName = chatnhe_get_username(strJid);
	  	//var transport = username.slice((strDisplayName.length)+1,(username.length - (JSERVER.length+1)));
		
		var arrTransportInfo = strJid.split('@');
		if(typeof(arrTransportInfo[2]) != 'undefined')
		{
			var arrTransportInfo2 = arrTransportInfo[2].split('.'+JSERVER)
		}
		else
		{
			var arrTransportInfo2 = arrTransportInfo[1].split('.'+JSERVER)
		}
		var transport = arrTransportInfo2[0];

		if(transport=='' || transport==JSERVER)
		{
			transport = 'ziczac';	
		}
		
		if(type=='build_roster')
		{
			strHtmlBuddyList += '<li title="" style="display:block; list-style-type:none; width:800px; " id="'+strJid+'_blItem" name="'+strJid+'" class="buddy" onmousedown="Buddylist.clickBuddy(\''+strJid+'\');return false;" onselectstart="return false;" onmouseover="Buddylist.selectBuddy(this, \''+strJid+'\', true);" onmouseout="Buddylist.selectBuddy(this, \''+strJid+'\', false);" ondblclick="Buddylist.onBuddyDblClick();">&nbsp;&nbsp;&nbsp;&nbsp;<img src="'+STATIC_ZICZAC+'/themes/transport/'+transport+'-offline.gif" alt="" id="'+strJid+'_blImg" />&nbsp;'+strDisplayName+' <span id="'+strJid+'_status" class="buddy_status" ></span></li>';
		}
		else
		{
			groupList.innerHTML += '<li title="" style="display:block; list-style-type:none" id="'+strJid+'_blItem" name="'+strJid+'" class="buddy" onmousedown="Buddylist.clickBuddy(\''+strJid+'\');return false;" onselectstart="return false;" onmouseover="Buddylist.selectBuddy(this, \''+strJid+'\', true);" onmouseout="Buddylist.selectBuddy(this, \''+strJid+'\', false);" ondblclick="Buddylist.onBuddyDblClick();">&nbsp;&nbsp;&nbsp;&nbsp;<img src="'+STATIC_ZICZAC+'/themes/transport/'+transport+'-offline.gif" alt="" id="'+strJid+'_blImg" />&nbsp;'+strDisplayName+' <span id="'+strJid+'_status" class="buddy_status"></span></li>';
		}

		Buddylist.listObjects[strJid] = {};
		Buddylist.listObjects[strJid].obj 	= strJid + '_blItem';
		Buddylist.listObjects[strJid].img 	= strJid + '_blImg';
		Buddylist.listObjects[strJid].group = groupname;
		Buddylist.listObjects[strJid].jid	= Gateways.list[transport];
   },

   moveBuddy: function(username, groupname) {

      if(groupname == null) return;
      if($(Buddylist.listObjects[username].obj).parentNode == $(groupname.replace(/\s/, '_') + '_group')) return;
      if(!$(groupname.replace(/\s/, '_') + '_group')) this.addGroup(groupname);
      var group = $(groupname.replace(/\s/, '_') + '_group');
      group.insertBefore($(Buddylist.listObjects[username].obj), null);
   },

   addGroup: function(groupname) {
      var bList = $('buddylist');
      bList.innerHTML = (groupname=='Offline' ? bList.innerHTML : '') + '<li id="' + groupname.replace(/\s/, '_') + '_groupTop" class="groupTop" onmousedown="return false;" onselectstart="return false;" onclick="Buddylist.toggleGroup(\'' + groupname + '\');"><img id="' + groupname.replace(/\s/, '_') + '_groupArrow" src="'+STATIC_ZICZAC+'/themes/' + theme + '/window/arrow.gif" />&nbsp;&nbsp;<b>' + groupname + '</b></li>' + "\n" + '<ul id="' + groupname.replace(/\s/, '_') + '_group" class="group"></ul>' + (groupname!='Offline' ? bList.innerHTML : '');
   },
   
	deleteBuddy: function(username)
	{
		if(username.indexOf('_group') != -1)
		{
			this.deleteGroup(username.substring(0, username.length - 6));
			return;
		}
   
		var ingroup = null;
		for (var group in this.list)
		{
			if(typeof(this.list[group][username]) !== 'undefined' && this.list[group][username].username == username)
			{
				ingroup = group;
				break;
			}
		}
   
		var buddyToRmv = $(Buddylist.listObjects[username].obj);
		
		if(typeof(buddyToRmv) !== 'undefined')
		{
			buddyToRmv.parentNode.removeChild(buddyToRmv);
			delete this.listObjects[username];
			if(this.list[ingroup])
			{
				delete this.list[ingroup][username];
				objJS.rCt(username);
			}
			Dialog.closeInfo();
		}
	},

   deleteGroup: function(groupname) {
      var groupNoSpaces = groupname.replace(/\s/, '_');
      var groupToRmv = $(groupNoSpaces+"_group");
      var groupTop   = $(groupNoSpaces+"_groupTop");
         
      if(typeof(groupToRmv) !== 'undefined')
	  {
         groupToRmv.parentNode.removeChild(groupToRmv);
         groupTop.parentNode.removeChild(groupTop);
      }
   },

   toggleGroup: function(groupname) {
      var groupList = $(groupname.replace(/\s/, '_') + '_group');
      var groupArrow = $(groupname.replace(/\s/, '_') + '_groupArrow');
      
      if(groupList.style.display != 'none') {
         groupList.hide();
         groupArrow.src = ''+STATIC_ZICZAC+'/themes/' + theme + '/window/arrow_up.gif';
      } else {
         groupList.show();
         groupArrow.src = ''+STATIC_ZICZAC+'/themes/' + theme + '/window/arrow.gif';
      }
   },

   	selectBuddy: function(sel, username, selected)
   	{
      	if(selected === false)
	  	{
         	if(curSelected != username)
			{
				try
				{
					sel.style.background = '#fff';
					sel.style.color = '#333';
				} catch(e) { }
         	}
			else
			{
			 	sel.style.background = '#d0dae6';
			 	sel.style.color = '#000000';
         	}
      	}
	  	else
	  	{
		  sel.style.background = '#e1ebf7';
		  sel.style.color = '#000000';
      	}
   	},

	clickBuddy: function(username)
   	{
      	if(curSelected.length > 0)
		{
			try
			{
            	var el = $(Buddylist.listObjects[curSelected].obj);
			  	el.style.background = '#fff';
			  	el.style.color = '#333';
         	}
			catch(e){ }
      	}
      
      	curSelected = username;
      
      	var oel = $(Buddylist.listObjects[curSelected].obj);
	   	oel.style.background = '#d0dae6';
	   	oel.style.color = '#333';
   	},

   	onBuddyDblClick: function()
	{
		if(curSelected.length > 0) {
         	if(typeof(IM.windows[curSelected]) == 'undefined')
			{
            	IM.create(curSelected, chatnhe_get_username(curSelected), 'normal');
         	}
			else 
			{
				Buddylist.activeIMWin(curSelected);
         	}
      	}
	},
   
	activeIMWin: function(user_name)
	{
		if(IM.windows[user_name].detached) {
		   if(IM.windows[user_name].popup.closed) {
			  IM.windows[user_name] = IM.windows[user_name].old;
			  IM.windows[user_name].show();
		   } else {
			  IM.windows[user_name].popup.focus();
		   }
		} else if(!IM.windows[user_name].isVisible()) {
		   IM.windows[user_name].show();
		   IM.windows[user_name].toFront();
		   setTimeout("scrollToBottom('" + IM.windows[user_name].getId() + "_rcvd')", 125);
		   setTimeout("$('" + IM.windows[user_name].getId() + "_sendBox').focus();", 250);
		} else {
		   IM.windows[user_name].toFront();
		   setTimeout("$('" + IM.windows[user_name].getId() + "_sendBox').focus();", 250);
		}   
	}
};
