
var chatFriends = function() { };
/************************** IMFriends class implimentation ***********************************/
chatFriends.prototype = {
	initialize: function(friends) {
	    this.content = 'friends';
		this.members  = friends;	
	},

	destroy: function() {
		this.clear();
	},

	clear: function() {
        if(!$(this.content)) return;
        while ($(this.content).firstChild) {
	        $(this.content).removeChild($(this.content).firstChild);
        }
        $(this.content).update('');
	},

	render: function() {
		this.clear();
		for (var i = 0 ; i < this.members.length ; i++){
		    this.renderGroup(this.members[i]);
		}
	},
	
	getmischatcontent:function(){
	 return this.mycontentmischat;
	},
	setmischatcontent:function(ms){
	 this.mycontentmischat=ms;
	},

	relatedUsers:function(){
	   for (var i = 0 ; i < this.members.length ; i++) {
		 if(this.members[i]!= null && this.members[i].G == 2){
		    return this.members[i].M;
		 }
	   }
	},
	
	remove:function(grp,id, NoRender){
	   if(this.members==null) return;
	   for (var i = 0 ; i < this.members.length ; i++) {
		 if(this.members[i].G == grp){
		    for(j = 0; j < this.members[i].M.length; j ++){
		       if(this.members[i].M[j].UserID == id){
		          if(this.members[i]!=null && this.members[i].M[j]!=null)
		          {
		            this.members[i].M[j].splice(j,1);
		            if(NoRender==null) this.render();
		            return;
		          }
		       }
		    }
		 }
	   }
	},
	removemymember:function(id){
	var j=0;
	 for (var i = 0 ; i < this.members.length ; i++) {
	 for(j = 0; j < this.members[i].M.length; j ++){
	 if (typeof(this.members[i].M[j]) != 'undefined' &&this.members[i].M[j].UserID)
	 {
		       if(this.members[i].M[j].UserID == id){
		          this.members[i].M.splice(j,1);
		          this.render();
		          return;
		       }
     }
		    }
		 }
	},
	disable:function(){
	if (document.getElementById('divFriendsHidden'))
	{
	    this.clear();
		this.render();
	}
	else
	{
	  if(!$("lt_header")) return false;
	    this.clear();
		for (var i = 0 ; i < this.members.length ; i++) {
		   var grp =this.members[i]; 
		   if(typeof(grp)=='undefined')continue;
	       if(grp.G==0) continue;
		   var sorted = grp.M.sort();
		   var length = sorted.length;
		   var member   = false;
		
		   new Insertion.Bottom($(this.content), '<h4>'+this.getGroupName(grp.G)+'</h4><ul class="lstFriends"></ul>');
		   var g = $(this.content).lastChild;
		   for (var j = 0 ; j < length ; j++) {
			 member = sorted[j];
			 if(member.UserID != chat.key){
			    new Insertion.Bottom(g, '<li class="member" id="friend'+member.UserID+'"><img src="../im/images/offline_white1.gif" alt="" /><i>'+member.Name+'</i></li>');
			 }
		   }
		}
	  }  
	},
	
	formatName:function(m){
	    return  m.Name + " ("+ m.UserID + ")" 
	},
	
	
	getGroupName:function(g){
	if (g == 1) return "Support";
	   if(g == 0) return "Users";
	},
	
	renderGroup:function(pGroup){
        var grp = pGroup;
	    if(typeof(grp)=='undefined')return;
	    var rs = this.relatedUsers();
	    if(typeof(rs)=='undefined') rs="";
	  
	    if(grp.G != 2){
	      for(var k = 0; k< grp.M.length; k++){
		    for(var ki = 0; ki<rs.length;ki++){
		       if(typeof(grp.M[k]) != 'undefined' && typeof(rs[ki]) != 'undefined' &&grp.M[k].UserID == rs[ki].UserID){
		          // Raman : don let remove online users from related ones...
		          // grp.M.splice(k,1);
		          // break;
		          if( grp.G==1)
		          {
		            /* do nothing */
		          }
		          else
		          {
		            grp.M.splice(k,1);
		            break;
		          }
		          
		       }
		    }
		  }
	    }
	     
	    if(typeof(grp) == 'undefined')return;

	        if(!$(this.content)) return;
	        for(var k = 0; k< grp.M.length; k++){
	           if(typeof(grp.M[k]) == 'undefined') continue;
		       grp.M[k].toString = function(){return this.Status+this.Name;}
		    }
    		
	        var sorted = grp.M.sort();
		    var length = sorted.length;
    		
		    var member   = false;
		    new Insertion.Bottom($(this.content), '<h4>'+this.getGroupName(grp.G)+'</h4><ul class="lstFriends" style="list-style:none;"></ul>');
		    var g = $(this.content).lastChild;
		    for (var i = 0 ; i < length ; i++) {
			    if(typeof(sorted[i]) != 'undefined' &&sorted[i].UserID != chat.key)
			    {
			        this.renderMember(g,sorted[i]);
			    }
		    }
	},
	
	myrender:function(grp)
	{
	  for(var k = 0; k< grp.M.length; k++){
	       if(grp.M[k] == null )
	            continue;
		   
		   grp.M[k].toString = function(){
		    return this.Status+this.Name;
		    }
		}
		var sorted = grp.M.sort();
		var length = sorted.length;
		var member   = false;
	},
	       
	getStatusImg:function(s){
	
	   if(s == 1) return "../im/images/available_white1.gif";
	   else if(s == 2) return "../im/images/idle_white1.gif";
	   else if(s == 3) return "../im/images/busy_white1.gif";
	   else if(s == 4) return "../im/images/idle_white1.gif";
	   else return "../im/images/offline_white1.gif";
	},
	
	renderMember:function(g,m){
		
	   var content = '<li class="member" id="friend'+m.UserID+'" >';
	   if(m.Status != 99){
	      content +='<img onclick="chat.addRequest('+m.UserID+');" src="'+this.getStatusImg(m.Status)+'" alt="" />';
	      content +='<b style="float:left;"><a href="javascript:void(0);" onclick="chat.addRequest('+m.UserID+');return false;">';
	      content += this.formatName(m)+'</a></b>'+'<br class="clear" /></div></li>';
       }else if(m.Status == 99){
	      content +='<img src="'+this.getStatusImg(m.Status)+'" alt="" /><i>'+this.formatName(m)+'</i></li>';
	   }
	   
	   new Insertion.Bottom(g, content);
	},

	add: function(UserID, Name, Status) {
		if (this.indexOf(UserID) == -1) {
			this.members[this.members.length-1].M.push({UserID : UserID, Name : Name, Status: Status});
		}
	},

    onFriendSignOn:function(f){ 
	  if(this.indexOf(f.UserID) >= 0){
	      this.changeStatus(f.UserID,1);
	  }else{
	     if(chat.admin){
	       if(f.Role == 1)
	          this.members[0].M.push(f);
	       else if(f.Role == 5){this.members[2].M.push(f);}
	       else this.members[1].M.push(f);
	     }else if(f.Role == 5){ 
	       this.members[2].M.push(f);
	     }else{
	       if(f.Role == 1 && chat.userId<=0)
	         this.members[1].M.push(f);
	       else
	        this.members[0].M.push(f);
	     }   
	      
	      this.render();
	   }
	},
	
	changeStatus:function(userID,isOnline){
	     for (var i = 0; i < this.members.length; i++) {
	        for (var j = 0; j < this.members[i].M.length; j++) {
			if (typeof(this.members[i].M[j]) != 'undefined'&&this.members[i].M[j].UserID == userID) {
				 this.members[i].M[j].Status = isOnline;
			}
	    }}
	    
	    this.clear();
	    this.render();  
	},
	
	
	indexOf: function(UserID) {
	    for (var i = 0; i < this.members.length; i++) {
	        for (var j = 0; j < this.members[i].M.length; j++) {
			if (typeof(this.members[i].M[j]) != 'undefined'&&this.members[i].M[j].UserID == UserID) {
				return j;
			}
	    }}
	    return -1;
	},
    indexOfMemberInG1: function(ArrayToFind, UserID) {
	    for (var i = 0; i < ArrayToFind.length; i++) 
	    {
            if (ArrayToFind[i].UserID == UserID) 
	        {
		        return i;
	        }
        }
	    return -1;
	},
	member: function(UserID) {
		  for (var i = 0; i < this.members.length; i++) {
	        for (var j = 0; j < this.members[i].M.length; j++) {
			if (typeof(this.members[i].M[j]) != 'undefined'&&this.members[i].M[j].UserID == UserID) {
				return this.members[i].M[j];
			}
	    }}
		return undefined;
	}
}