/*
 *
 *
 *
 */
(function($) { 
$.chatFriends = function(o,options) {
     this.options = $.extend({}, $.chatFriends.DEFAULTS, options || {});  
	 this.content = 'friends';
	 this.members  = options.members;
	 this.mycontentmischat="";
	 this.mycontentdefault="";
	 this.refresh();
	 this.setmischatcontent(this.getmischatcontent());
		if($('#imsum').length>0){
		    this.render();
		    $("#imsum").show();
		}
     if($('#divFriendsHidden').length> 0) 
		this.options.showmini=true;
		
     if(this.options.showmini) this.render();
};
$.extend($.chatFriends, {    
    DEFAULTS: { bar:'.livebar',showmini:false}
});
$.chatFriends.prototype = {
	destroy: function() {
		this.clear();
	},

	clear: function() {
	if (this.options.showmini){
		$(this.options.bar + " .sellers").remove();
	}else {
        if(!$(this.content)) return;
        while ($(this.content).firstChild) {
	        $(this.content).removeChild($(this.content).firstChild);
        }
        $(this.content).html('');
	  }
	},

	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;
	},
	
	mynewrender: function(misch,isremove) {
		this.clear();
		for (var i = 0 ; i < this.members.length ; i++) {
		    this.renderGroup(this.members[i]);
		}

   if(isremove!='')
      this.mycontentmischat=misch;
   else
      this.mycontentmischat+=misch;

	},
	
	pheader:function(hd){    
     var r = $('<div class="livedivdata sellers" style="width:930px;" />');
     var h = $('<div class="headchatdiv" />').html(hd);
     return r.append(h);
	},

	refresh: function(){
	    var RefinedMems=[];
	    
	    var iindex = -1;
	    for (var i = 0 ; i < this.members.length ; i++){
           if(this.members[i]!= null && ( this.members[i].G ==1 || this.members[i].G ==2 ) )  {
	            if(this.members[i].G ==1)        {
	                iindex = i; /* we need to track G:1 */
	            }
	            var currMembers = this.members[i].M;
	            
	            for (var j=0;j<currMembers.length;j++){
	                var m = currMembers[j];
	                
	                if( m!=null   && this.indexOfMemberInG1(RefinedMems, m.Id)<0 )
	                {
	                    m.Status = 1; /* Make user online */
	                    RefinedMems.push( m );
	                }
                }
	        }
	    }
        if(iindex>=0)
            this.members[iindex].M = RefinedMems;
        
	},
	
	getOnlinePlanIDs: function(){
	    var retVal = "";
	    var currMembers = this.onlineSellers();
	    for (var i=0;i<currMembers.length;i++) {
	        var m = currMembers[i];
	        if(m.Plans==null)
	            continue;
	        for (var j=0;j<m.Plans.length;j++){
	            retVal+= m.Plans[j].ID + ",";
	        }
	    }
	    if(retVal.length>0)
	        retVal = retVal.substring(0, retVal.length-1);
	    
	    return retVal;
	},
	
	onlineSellers:function(){
	    for (var i = 0 ; i < this.members.length ; i++){
           if(this.members[i]!= null && this.members[i].G == 1){
	            return this.members[i].M;
	        }
	    }
	    return null;
	},
	
	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].Id == 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++) {
	    if(!this.members[i].M)continue;
	    for(j = 0; j < this.members[i].M.length; j ++){
	       if (typeof(this.members[i].M[j]) != 'undefined' &&this.members[i].M[j].Id){
		       if(this.members[i].M[j].Id == id){
		          this.members[i].M.splice(j,1);
		          this.render();
		          return;
		       }
            }
		 }
      }
	},
	disable:function(){
	if ($('#divFriendsHidden').length > 0){
	    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;
		
		  $(this.content).append('<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.Id != chat.account.Id){
			    g.append('<li class="member"><img src="../im/images/offline_white1.gif" alt="" /><i>'+member.Name+'</i></li>');
			 }
		   }
		}
	  }  
	},
	
	formatName:function(m){
	    return  m.Name + " ("+ m.Id + ")" 
	},
	
	getSKU:function(m){
	  if(m.Plans && m.Plans.length > 0){
	  if(window.location.href.indexOf("live.aspx") > 0){
	      var content = "";
	      for(var i=0;i<m.Plans.length;i++){
	     	plan = m.Plans[i];
	        content +=  '<br /><div class="plandetail"><a target="blank" style="float:left;" href="'+$.getPlanUrl(plan.ID)+'" >'+'<img height="35" class="planlogo" src="'+plan.Image+'" alt="" style="float:left"/>' ;
            content += '<b>'+plan.MonthsRemaining +' months</b></a>';
            if(plan.PhoneImage != "")  content += '<img class="phonelogo" height="35" src="'+plan.PhoneImage +'" alt="" />';
            if(plan.CashOffered > 0) {
              content += '<a style="font-weight:bold;float:left;text-decoration:none;" href="javascript:void(0);">$' +plan.CashOffered +' Bonus </a>';
            }
            content += '<a href="javascript:void(0);" onclick="chat.requestPlan(\''+plan.ID+'\','+m.Id+');return false;"><img src="/live/images/chat.png" alt=""></a>';
          }
          return content
	  } else  {
	     var content = '<a target="blank" href="'+$.getPlanUrl(m.Plans[0].ID)+'" > ' + m.Plans[0].ID + "</a>";
	     content += '<a href="javascript:void(0);" onclick="chat.addRequest('+m.Id+');return false;"><img src="/live/images/chat.png" alt=""></a>';
	  }}
	  return "";
	},
	
	getGroupName:function(g){
	   if(g == 1) return "Sellers Online";
	   if(g == 0) return "Customer Support";
	   if(g == 2) return "Related Users";
	},
	
	renderGroup:function(pGroup){
        var grp = pGroup;
	    if(typeof(grp)=='undefined')return;
	    if(grp.G==0)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].Id == rs[ki].Id){
		          if( grp.G!=1)  {
		            grp.M.splice(k,1);
		            break;
		          }
		          
		       }
		    }
		  }
	    }
	     
	    if(typeof(grp) == 'undefined')return;
	    if ($('#divFriendsHidden').length>0)  {
	      $(this.options.bar).prepend(this.myrender($("<div />"),grp));
	      var cnt = $('.livebar .sellers a').length;
	      if(cnt>1)
	        $('.live-status .sellers').html(cnt+" Sellers Online");
	      else
	        $('.live-status .sellers').html(cnt+" Seller Online");
	    }  else    {
	        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;
		    $(this.content).append('<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].Id != chat.account.Id){
			        this.renderMember(g,sorted[i]);
			    }
		    }
    		
	    }
	},
	myrender:function(e,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;
		var hasSeller = false;
		var sellers = $("<span />");
		var hasRs = false;
		var rs = $("<span />");
        for (var i = 0 ; i < length ; i++)  {
            if(sorted[i] == null) continue;
            if (this.getGroupName(grp.G)=="Sellers Online"){
                if(hasSeller == false){
                     sellers = this.pheader("Live Sellers");
                     hasSeller = true;
                 }
                 sellers = this.rendermypanelbyliveseller(sellers,sorted[i]);
             }else if (this.getGroupName(grp.G)=="Related Users"){
              if(hasRs == false){
                       rs = this.pheader("Related Users");
                       hasRs = true;
                 }
                 rs = this.rendermypanelbyruser(rs,sorted[i]);
            }
        }
          
        return sellers;
	},
	
	myformatName:function(m,plan){
	var st="";
	 if(plan)
	 st=  m.Name + " ("+ plan.ID + ")" ;
     else {
      st=m.Name + "(";
      if(m.City!="") 
	  st+= m.City; 
	  if(m.StateName!="") {
            if(m.City!="")
            st+=", ";
            st+=m.StateName;
            st+= ")" ;
	  }  else   {
	   st=m.Name;
	  }
	 
	 }
	 return st;
	},
	myformatPlan:function(m,plan){
	var pret="";
	
	if(plan){
	
	if(plan.ContactTerm!='undefined')
	if(plan.ContactTerm>0)
        pret+=plan.ContactTerm +" MONTHS"+",";
   var phone;
    if (plan.phones.length>0){   
       phone=plan.phones[0]; 
       if(phone.ProductName!='undefined'){
        if(phone.ProductName != "")
        pret+=phone.ProductName+",";
      } 
     }  
        if(plan.CashOffered!='undefined')
        if(plan.CashOffered > 0)
        pret+= plan.CashOffered+" CASH";
	
	}

	return pret;
	 
	}, 
	       
     rendermypanelbyliveseller:function(e,m){ 
        if(m.Plans==null)
            return e;
        var recno = 0;
        var self = this;
        jQuery(m.Plans).each(function(i){
           var plan = m.Plans[i];
    	    recno=i+1;
            var pli = jQuery('<div class="lsdatachatdiv" style="float:left" />')
            var a = jQuery('<a href="javascript:void(0);" class="dchatlink" />')
            a.append(jQuery('<div class="namedatachatdiv" />').html(self.myformatName(m,plan)));
            a.append(jQuery('<div class="detaildatachatdiv" />').html(self.myformatPlan(m,plan)));
            pli.append(a);
            e.append(pli);
            if(recno%18==0){
               e.append(jQuery( "<div style='clear:left' />"));
            }
            
            $.data(pli.get(0),"plan",plan);
            
            a.click(function(){
                var t = jQuery(this).parent();
                var pl = jQuery.data(t.get(0),"plan");
                chat.requestPlan(pl.ID,pl.VendorID);
           });
           
        }   );    
       return e;
      },
      
      rendermypanelbyruser:function(e,m){  
        var r = $('<div class="rsdatachatdiv" />');
        var bl="";
        var a = $('<a href="javascript:void(0);" class="dchatlink" />');
        a.append($('<div class="rsnamedatachatdiv" />').html(this.myformatName(m,'')));
        return r.append(a);
     },
     rendermypanelbydefault:function() {  
        var defaulthtml="";      
            defaulthtml+='<div style="clear:both;">';
            defaulthtml+='&nbsp; </div>';
            return defaulthtml;
	},
	getStatusImg:function(s){
	   if(s == 1) return "/live/images/available_white1.gif";
	   else if(s == 2) return "/live/images/idle_white1.gif";
	   else if(s == 3) return "/live/images/busy_white1.gif";
	   else if(s == 4) return "/live/images/idle_white1.gif";
	   else return "/live/images/offline_white1.gif";
	},
	
	renderMember:function(g,m){
	   var content = '<li class="member" id="friend'+m.Id+'" >';
	   if(m.Status != 99){
	      content +='<img  src="'+this.getStatusImg(m.Status)+'" alt="" />';
	      content +='<b style="float:left;"><a href="javascript:void(0);" >';
	      content += this.formatName(m)+'</a></b>'+this.getSKU(m)+'<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(Id, Name, Status) {
		if (this.indexOf(Id) == -1) {
			this.members[this.members.length-1].M.push({Id : Id, Name : Name, Status: Status});
		}
	},

    onFriendSignOn:function(f){ 
	   if(this.indexOf(f.Id) >= 0){
	      this.changeStatus(f.Id,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.account.Id<=0)
	         this.members[1].M.push(f);
	       else
	        this.members[0].M.push(f);
	       
	       }
	        
	       this.render();
	   }
	},
	
	
	changeStatus:function(Id,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].Id == Id) {
				 this.members[i].M[j].Status = isOnline;
			}
	    }}
	    
	    this.clear();
	    this.render();  
	},
	
	hasSupport:function(){
	   for (var i = 0; i < this.members.length; i++) {
	        if(!this.members[i].M)continue;
	        for (var j = 0; j < this.members[i].M.length; j++) {
			if (typeof(this.members[i].M[j]) != 'undefined'&&this.members[i].M[j].Role == "admin") {
				return true;
			}
	    }}
	    
	    return false;
	},
	
	
	indexOf: function(Id) {
	    for (var i = 0; i < this.members.length; i++) {
	        if(!this.members[i].M)continue;
	        for (var j = 0; j < this.members[i].M.length; j++) {
			if (typeof(this.members[i].M[j]) != 'undefined'&&this.members[i].M[j].Id == Id) {
				return j;
			}
	    }}
	    return -1;
	},
    indexOfMemberInG1: function(ArrayToFind, Id) {
	    for (var i = 0; i < ArrayToFind.length; i++) 
	    {
            if (ArrayToFind[i].Id == Id) 
	        {
		        return i;
	        }
        }
	    return -1;
	},
	member: function(Id) {
		  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].Id == Id) {
				return this.members[i].M[j];
			}
	    }}
		return undefined;
	}
}

})(jQuery);	
