Вход Регистрация
Файл: js/al/friends.js
Строк: 2301
<?php
var Friends = {
  
init: function(objfriendsTplcommonTpl) {
    
extend(cur, {
      
fSearchge('s_search'),
      
module'friends',
      
fListElge('friends_list'),
      
showMorege('show_more'),
      
pageEndge('page_end'),
      
fContentge('list_content'),
      
friendsTplfriendsTpl,
      
commonTplcommonTpl,
      
savedMasks: {},
      
bigphCache: {},
      
bigphShown: {}
    });
    
extend(curobj);

    if (!
cur.secData) {
      
cur.secData = {};
    }

    
cur.curList cur.section;

    
placeholderSetup(cur.fSearch, {backtrue})
    
elfocus(cur.fSearch);

    
Friends.scrollNode browser.msie6 pageNode window;

    
addEvent(Friends.scrollNode'scroll'Friends.scrollResize);

    
setTimeout(function() {
      
cur.destroy.push(function() {
        
clearTimeout(cur.resizeTimeout);
        
removeEvent(Friends.scrollNode'scroll'Friends.scrollResize);
      });
    }, 
0);

    
cur.friends = {};

    if (!
cur.silent) {
      
this.indexAll(function() {
        if (
cur.section.substr(04) == 'list') {
          
cur.friendsList[cur.section] = Friends.filter(cur.friendsList['all'], cur.section);
        }
        if (!
cur.friendsList[cur.section] || !cur.friendsList[cur.section].length) {
          if (
cur.section != 'requests' || !cur.suggCount) {
            
show('not_found');
          }
        }
      });
    }

    
cur.timeouts = {};

    
cur.nav.push((function(changedoldn) {
      if (
'id' in changed || 'sort' in changed || isEmpty(changed)) {
        return 
true;
      }
      if (
n[0] == 'friends' || n[0] == 'al_friends.php' && (changed.section)) {
        var 
changed.section;

        if ((
== 'requests' || == 'all_requests' || == 'out_requests') && !cur.requestsCount && !cur.suggCount && !cur.allRequestsCount && !cur.outRequestsCount) {
          return 
nav.change({section'all'});
        } else if (
== 'requests' && !cur.requestsCount && !cur.suggCount) {
          return 
nav.change({sectioncur.allRequestsCount 'all_requests' 'out_requests'});
        } else if (
== 'all_requests' && !cur.allRequestsCount) {
          return 
nav.change({sectioncur.requestsCount || cur.suggCount 'requests' 'out_requests'});
        } else if (
== 'out_requests' && !cur.outRequestsCount) {
          return 
nav.change({section'all'});
        }

        if (
== 'all' || == 'online' || == 'requests' || == 'all_requests' || == 'out_requests') {
          
__adsLoaded 0;
          
__adsUpdate();
        }
        if (
== 'all_requests' && !('sort' in changed) && !cur.sortByDate) {
          
delete n.sort;
          
setTimeout(Friends.changeSummary0);
        }
        
this.section(n.section, (function() {
          
this.changeSummary();
          
nav.setLoc(n);
        }).
bind(this));
        return 
false;
      } else if (
n[0] == 'al_friends.php' || n[0] == 'friends') {
        return 
false;
      }
    }).
bind(this));

    if (
cur.silent) {
      
addClass(cur.showMore'load_more');
      
ajax.post('al_friends.php', {act'load_friends_silent'idcur.oidgidcur.gidsortnav.objLoc.sort}, {
        
onDone: (function(datauniversitiesfilters) {
          
removeClass(cur.showMore'load_more');
          
cur.silent false;
          var 
obj = eval('('+data+')');
          
// load friends json
          
if (!obj) {
            return;
          }
          
cur.universities universities;
          for (var 
i in obj) {
            
cur.friendsList[i] = obj[i];
          }
          
this.indexAll(function() {
            
//Friends.selectTabAndSection(cur.section);
            
if (cur.section.substr(04) == 'list') {
              
cur.friendsList[cur.section] = Friends.filter(cur.friendsList['all'], cur.section);
            }
            (
cur.onSilentLoad || Friends.showMore)();
          });
          if (
filters.cities) {
            
stManager.add(['ui_controls.js''ui_controls.css'], function() {
              
cur.cityFilter.setData(filters.cities);
              if (
cur.cityFilterOpened) {
                
hide('friends_fltr_progress');
                
cur.cityFilter.showDefaultList()
              }
            });
          }
        }).
bind(this)
      });
    }

  },
  
indexAll: function(callback) {
    var 
all cur.friendsList['all'];

    
cur.friendsIndex = new vkIndexer(all, function(obj) {
      var 
mid parseInt(obj[0]);
      if (
cur.friends && mid) {
        
cur.friends[mid] = obj;
      }
      return 
obj[5] || '';
    }, function() {
      if (!
cur.silent) {
        
cur.friendsList['online'] = Friends.filter(all'online');
        if (
cur.section == 'common') {
          
cur.friendsList['common'] = Friends.filter(all'common');
        }
        if (
callback) {
          
callback();
        }
      }
      
Friends.initBackFunc();
    });

    if (
cur.section == 'phonebook') {
      
Friends.indexPhone();
    }
  },
  
indexPhone: function() {
    
cur.phoneIndex = new vkIndexer(cur.friendsList['phonebook'], function(obj) {
      var 
mobile obj[10][0] || '';
      var 
home obj[10][1] || '';
      return [
obj[5], mobilemobile.replace(/[^0-9+]/g''), homehome.replace(/[^0-9+]/g'')].join(' ');
    });
  },
  
initBackFunc: function() {
    
cur._back = {show: [function() {
      
addEvent(Friends.scrollNode'scroll'Friends.scrollResize);
    }], 
hide: [function() {
      if (
Friends.searchTimout) {
        
clearTimeout(Friends.searchTimout);
      }
      if (
cur.timeouts) {
        for (var 
i in cur.timeouts) {
          
clearTimeout(cur.timeouts);
        }
      }
      for (var 
i in cur.bigphShown) {
        
animate(cur.bigphShown[i], {marginTop100}, 0);
      }
      
cur.bigphShown = {};
      
removeEvent(Friends.scrollNode'scroll'Friends.scrollResize);
    }], 
textcur.backLang};
  },
  
switchTab: function(sectionev) {
    var 
param = {'0':'friends'sectionsection};
    return 
checkEvent(ev) || nav.change(param);
  },
  
filter: function(arrtype) {
    var 
len = (arr) ? arr.length 0;
    var 
res = [];
    if (
type.substr(04) == 'list') {
      var 
listNum parseInt(type.substr(4));
      
type 'list';
    }
    for (var 
0leni++) {
      var 
obj arr[i];
      if (
cur.filterIds && !cur.filterIds[parseInt(obj[0])]) {
        continue;
      }
      switch (
type) {
        case 
'online':
          if (
intval(obj[4])) {
            
res.push(obj);
          }
          break;
        case 
'common':
          if (
cur.commonCount && obj[10]) {
            
res.push(obj);
          }
          break;
        case 
'list':
          if (
parseInt(obj[6]) & (<< listNum)) {
            
res.push(obj);
          }
          break;
        default:
          
res.push(obj);
          break;
      }
    }
    return 
res;
  },
  
loadMore: function(startend) {
    var 
section cur.section;
    var list = 
cur.curList;
    var 
curData cur.secData[section];
    if (
curData.loading) {
      return;
    }
    
curData.loading true;
    
addClass(cur.showMore'load_more');
    
show(cur.showMore);
    
ajax.post('/friends'extend({
      
act'get_section_friends',
      
sectionsection,
      
offsetstart,
      
gidcur.gid,
      
sortnav.objLoc.sort,
      
sugg_revcur.suggRev
    
}, cur.filter), {
      
onDone: (function(datapreload) {
        
removeClass(cur.showMore'load_more');
        var 
response = eval('('+data+')')
        if (!
cur.friendsList[list]) {
          
cur.friendsList[list] = [];
        }
        Array.
prototype.push.apply(cur.friendsList[list], response[section]);
        if (list == 
'requests' && response['sugg_requests']) {
          Array.
prototype.push.apply(cur.friendsList['sugg_requests'], response['sugg_requests']);
        }
        
this.showMore(falsestartend);
        
curData.loading false;
        
curData.preload preload;
      }).
bind(this)
    });
  },
  
canSugSwitch: function(list) {
    if (!list) {
      return 
cur.suggCount true true;
    }
    if (
cur.suggRev) {
      return list.
length >= cur.suggCount || !cur.secData.requests.preload;
    } else {
      return list.
length >= cur.requestsCount || !cur.secData.requests.preload;
    }
  },
  
showMore: function(clearstartendplain) {
    if (!
cur.friendsList) {
      return 
false;
    }
    var 
clist cur.curList;
    var list = 
cur.friendsList[clist];
    if (
start == undefined) {
      
start cur.shownFriends;
    }
    if (
end == undefined) {
      
end cur.shownFriends cur.friendsPerPage;
    }
    if (
cur.section == 'requests') {
      if (
cur.suggRev) {
        list = (
cur.friendsList['sugg_requests'] || []).slice();
        if (
Friends.canSugSwitch(list)) {
          var 
suggSwitch parseInt(cur.suggCount);
          list.
push.apply(list, cur.friendsList[cur.curList] || []);
        }
      } else if (!
cur.suggRev && cur.requestsCount end && Friends.canSugSwitch(list)) {
        list = (list || []).
slice();
        var 
suggSwitch parseInt(cur.requestsCount);
        list.
push.apply(list, cur.friendsList['sugg_requests']);
      }
    }
    if (!list || !list.
length) {
      if (
cur.shownFriends == && !cur.searchCount) {
        if (
cur.isLoading) {
          return 
false// Dont show empty msg while search
        
}
        if (
cur.searchStr) {
          
addClass(ge('not_found'), 'f_search');
          
ge('search_ph').innerHTML cur.searchStr.replace(/([<>&#]*)/g, '');
        
} else {
          
removeClass(ge('not_found'), 'f_search');
        }
        var 
text '';
        if (
cur.curList.substr(04) == 'list') {
          if (
cur.filterIds) {
            
text cur.summaryLang['list_not_found_filter'];
            
text text.replace('{link}''<a onclick="Friends.clearFilter(true);">').replace('{/link}''</a>');
          } else {
            
text cur.summaryLang['list_not_found'];
            
text text.replace('{link}''<a onclick="Friends.editList(-1);">').replace('{/link}''</a>');
          }
        } else if (
cur.filter) {
          
text cur.summaryLang['not_found_filter'];
          
text text.replace('{link}''<a onclick="Friends.clearFilter(true);">').replace('{/link}''</a>');
        } else {
          
text cur.summaryLang['not_found'];
        }
        
ge('not_found_text').innerHTML text;
        
show('not_found');
      }
      if (
clear) {
        
cur.fContent.innerHTML '';
      }
      if (
cur.searchCount) {
        
Friends.serverSearchMore();
      }
      
hide('show_more');
      return;
    } else if (
isVisible('not_found')) {
      
hide('not_found');
    }

    var 
friends = list.slice(startend);
    if (!
friends.length) {
      
// can upload
      
var secData cur.secData[cur.section];
      if (
secData && secData.preload) {
        
Friends.loadMore(startend);
      }
      if (
cur.searchCount) {
        
Friends.serverSearchMore();
      }
      if (
cur.shownFriends >= cur.sectionCount) {
        
hide('show_more');
      }
      return;
    }
    var 
html = [];
    var 
first = (cur.shownFriends == 0) ? ' user_block_first' '';
    if (
clear) {
      
cur.fContent.innerHTML '';
    }
    for (
i in friends) {
      var 
iSt parseInt(i) + start;
      if (
suggSwitch && suggSwitch == iSt) {
        if (
cur.suggRev) {
          var 
summaryText langNumeric(cur.requestsCountcur.summaryLang['requests']);
          if (
nav.objLoc.sort != 'date') {
            
summaryText += '<span class="divide">|</span><span><a href="/friends?section=' cur.section '&sort=date">' cur.summaryLang['friends_sort_by_date'] + '</a></span>';
          } else {
            
summaryText += '<span class="divide">|</span><span><a href="/friends?section=' cur.section '">' cur.summaryLang['friends_sort_by_common'] + '</a></span>';
          }
        } else {
          var 
summaryText langNumeric(cur.suggCountcur.summaryLang['friends_sugg_summary']);
        }
        
html.push('<div id="friends_sub_summary" class="summary_wrap"><div class="summary">',summaryText,'</div></div>');
        
first ' user_block_first';
      }
      if (
cur.selection) {
        var 
friend friends[i].slice();
        
friend[5] = friend[5].replace(cur.selection.recur.selection.val);
      } else {
        var 
friend friends[i];
      }
      if (
cur.importCount && cur.importCount == cur.shownFriends && cur.section == 'suggestions') {
        
html.push('<div id="friends_sub_summary" class="summary_wrap"><div class="summary">',cur.summaryLang['suggestions'],'</div></div>');
        
first ' user_block_first';
      }
      
/*if (friend[0] && ge('user_block' + friend[0])) { // bad with search
        debugLog('here');
        continue;
      }*/
      
++cur.shownFriends;
      if (!
friend) {
        continue;
      }
      var 
tplType '';
      if (
cur.section == 'requests') {
        if (
suggSwitch <= iSt) {
          
tplType = (!cur.suggRev 'sugg_requests' '');
        } else {
          
tplType = (!cur.suggRev '' 'sugg_requests');
        }
      }
      Array.
prototype.push.apply(htmlFriends.drawFriend(friendfirsttplType));
      
first '';
    }
    if (
plain) {
      return 
'<div>'+html.join('')+'</div>';
    }
    
cur.fContent.appendChild(ce('div', {innerHTMLhtml.join('')}));
    if (
cur.shownFriends >= cur.sectionCount) {
      
hide('show_more');
    } else {
      
show('show_more');
    }
  },

  
updateList: function(eobjforce) {
    if (!
obj || e.keyCode == KEY.ESC) {
      
obj cur.fSearch;
      
val(obj'');
      
cur.searchStr '';
    }
    if (
cur.silent) {
      
cur.onSilentLoad = function() {
        
Friends.updateList(eobjtrue);
      };
      if (
trim(obj.value)) {
        
hide(cur.showMore);
        
cur.fContent.innerHTML '<div class="wide_loading"></div>';
      }
      return;
    }
    
clearTimeout(this.searchTimout);
    
this.searchTimout setTimeout((function() {
      var 
str trim(obj.value);
      if (
str && cur.searchStr == str) return;
      
cur.searchStr str;
      if (
str) {
        if (
cur.section != 'all' && cur.section != 'phonebook') {
          
this.selectTab('all');
          
this.selectSection('all');
          
cur.curList cur.section 'all';

          
nav.setLoc(extend(nav.objLoc, {'section''all'}));
        }
        
this.search(strcur.section);
        
this.changeSummary();
      } else if (
cur.section != cur.curList || force) {
        
this.showSection();
        
this.changeSummary();
        
this.showMore();
      } else {
        
this.hideLoading();
        
cur.searchCount 0;
        
this.showMore();
      }
    }).
bind(this), 10);
  },
  
showSection: function(section) {
    
cur.shownFriends 0;
    
cur.curList cur.section section || cur.section;
    if (
vk.id == cur.oid) {
      if (
cur.section == 'requests' || cur.section == 'all_requests' || cur.section == 'out_requests') {
        
hide('friends_search');
        var 
tabsCount = ((cur.requestsCount || cur.suggCount) ? 0) + (cur.allRequestsCount 0) + (cur.outRequestsCount 0);
        
toggle('friends_req_tabs'tabsCount 1);
        
toggle('friends_hide_all', (cur.section == 'requests') && (cur.requestsCount || cur.suggCount));
        
toggle(ge('sum_tab_requests').parentNodecur.requestsCount || cur.suggCount 0);
        
toggle(ge('sum_tab_all_requests').parentNodecur.allRequestsCount 0);
        
toggle(ge('sum_tab_out_requests').parentNodecur.outRequestsCount 0);
        
show('tab_requests');
        
addClass(ge('main_class'), 'wide');
      } else {
        
show('friends_search');
        
hide('friends_req_tabs');
        (
cur.allFriendsCount removeClass addClass)(ge('main_class'), 'wide');
      }
      
toggle('tab_requests'nav.objLoc.act != 'invite' && (cur.requestsCount || cur.allRequestsCount || cur.outRequestsCount || cur.suggCount));
    }
    if (
cur.filterIds) {
      
cur.curList += '_filter';
    }
    var list = 
cur.friendsList[cur.curList];
    if (!list) {
      if (
section == 'recent' || section == 'phonebook' || section == 'requests') {
        var 
friendsList section;
      } else {
        var 
friendsList 'all';
      }
      list = 
cur.friendsList[cur.curList] = this.filter(cur.friendsList[friendsList], cur.section);
    }
    
cur.sectionCount = (list) ? list.length 0;
    
cur.selection false;
    if (
cur.filter && !cur.filterIds && section != 'suggestions') {
      
Friends.changeFilter();
      if (!
cur.searchStr) {
        
hide('friends_reset_search');
        
this.clearServerSearch();
      }
      return 
false;
    }
    
this.showMore(true);
    if (!
cur.searchStr) {
      
hide('friends_reset_search');
      
this.clearServerSearch();
    }
  },

  
updateView: function() {
    
cur.fContent.innerHTML this.showMore(false0cur.shownFriendstrue);
  },

  
showLoading: function() {
    
cur.isLoading 1;
    
show('friends_loading');
    
hide('friends_reset_search');
  },

  
hideLoading: function() {
    
cur.isLoading 0;
    
hide('friends_loading');
    if (
cur.searchStr) {
      
show('friends_reset_search');
    }
  },

  
serverSearchMore: function() {
    if (
cur.serverLoadingMore) {
      return;
    }
    if (
cur.searchFinished) {
      return;
    }
    
cur.serverLoadingMore true;
    
ajax.post('friends', {
      
act'server_search',
      
qcur.searchStr,
      
offsetcur.searchOffset
    
}, {
      
onDone: function(htmlfoundsummarynewOffset) {
        
cur.searchFinished = !found;
        if (
cur.searchFinished) {
          
hide('friends_search_more');
        }
        
cur.searchOffset newOffset;
        
cur.serverLoadingMore false;
        
ge('friends_search_cont').appendChild(ce('div', {innerHTMLhtml}));
      },
      
showProgress: function() {
        
addClass(ge('friends_search_more'), 'load_more');
      },
      
hideProgress: function() {
        
removeClass(ge('friends_search_more'), 'load_more');
      }
    });
  },

  
serverSearch: function(strcountexclude) {
    
cur.searchCount 0;
    
Friends.showLoading();
    
cur.serverSearchStr str;
    
clearTimeout(cur.serverSearchTimeout);
    var 
excludeList = [];
    for (var 
i in exclude) {
      
excludeList.push(exclude[i][0]);
    }
    
cur.serverSearchTimeout setTimeout((function() {
      
ajax.post('friends', {
        
act'server_search',
        
qstr,
        
excludeexcludeList.join(',')
      }, {
        
onDone: function(htmlfoundsummarynewOffset) {
          
cur.searchOffset newOffset;
          
cur.searchFinished = !found;
          
Friends.hideLoading();
          if (
cur.searchStr != str) return;
          var 
cont ge('friends_search_cont');
          
cur.searchCount found;
          if (
cur.shownFriends == 0) {
            
hide(cont);
            
cur.fContent.innerHTML '';
            
Friends.showMore();
          }
          if (!
found) {
            
Friends.changeSummary();
            return;
          }
          if (
cur.searchFinished) {
            
hide('friends_search_more');
          } else {
            
show('friends_search_more');
          }
          
cur.searchSummary summary;
          if (
count) {
            
html '<div class="summary_wrap"><div class="summary">'+summary+'</div></div>'+html;
          }
          
cont.innerHTML html;
          
show(cont);
          
Friends.changeSummary();
          
hide('not_found');
        },
        
onFailFriends.hideLoading
      
});
    }).
bind(this), 300);
  },

  
clearServerSearch: function() {
    
hide('friends_search_cont');
    
hide('friends_search_more');
    
cur.searchCount 0;
  },

  
goToSearch: function(obj) {
    
nav.go('search?c%5Bname%5D=1&c%5Bq%5D='+encodeURIComponent(cur.searchStr)+'&c%5Bsection%5D=people');
  },

  
search: function(strtypecallbackfilter) {
    
cur.shownFriends 0;
    
cur.section type;
    if (
str) {
      var 
index = (type == 'phonebook') ? cur.phoneIndex cur.friendsIndex;
      var 
checkTime = new Date().getTime();
      if (
str == -1) {
        if (
type == 'recent' || type == 'phonebook') {
          var 
friendsList type;
        } else {
          var 
friendsList 'all';
        }
        var 
res this.filter(cur.friendsList[friendsList], type);
        
str '';
        if (
str != cur.searchStr) {
          
this.clearServerSearch();
        }
      } else {
        var 
res index.search(str);
        if (
cur.filterIds) {
          
res this.filter(restype);
        }
        var 
count res.length;
        if (
count) {
          if (
str != cur.serverSearchStr && !cur.sectionCount) {
            
this.clearServerSearch();
          }
        }
        if (
count && cur.oid == vk.id) { // try to find some on the server side
          
this.serverSearch(strcountres);
        }
      }
      var 
newList cur.section;
      if (
cur.filterIds) {
        
newList += '_filter';
      }
      if (
str) {
        
newList += '_search_'+str;
      }
      if (
cur.curList == newList && !filter) {
        return; 
// now at this section
      
}
      
cur.curList newList;
      
cur.friendsList[cur.curList] = res;

      if (
str) {
        
str += ' '+(parseLatin(str) || '');
        
str trim(escapeRE(str.replace(/[,]/g'')));
        
cur.selection = {
          
re: new RegExp('('+str.replace(index.delimiter'|')+')''gi'),
          
val'<em>$1</em>'
        
};
      }
      if (!
cur.isLoading) {
        
show('friends_reset_search');
      }
    } else {
      
cur.curList cur.section;
      
cur.selection false;
      
hide('friends_reset_search');
      if (
cur.searchStr) {
        
this.clearServerSearch();
      }
    }

    
cur.sectionCount cur.friendsList[cur.curList].length;
    
this.searchTimout setTimeout((function() {
      
this.showMore(true);
      if (
callback) {
        
Friends.onSectionChange();
        
callback();
      }
    }).
bind(this), 10);
  },

  
changeSummary: function() {
    var 
sum ge('friends_summary');
    var 
html '';
    if (
cur.curList.indexOf('_search_') != -|| cur.filterIds) {
      if (!
cur.sectionCount) {
        if (
cur.searchCount) {
          
html cur.searchSummary;
        } else {
          if (
cur.isLoading) {
            return; 
// no update while loading
          
}
          
html cur.summaryLang['search_no'];
        }
      } else {
        
html langNumeric(cur.sectionCountcur.summaryLang['search'], true);
      }
    } else if (
cur.curList.slice(04) == 'list') {
      var 
langKey = (parseInt(cur.curList.slice(4)) < 25) ? 'list' 'pub_list';
      if (
cur.sectionCount) {
        
html langNumeric(cur.sectionCountcur.summaryLang[langKey], true);
      } else {
        
html cur.summaryLang[langKey+'_no'];
      }
    } else if (
cur.section == 'suggestions') {
      if (!
cur.importCount) {
        
html cur.summaryLang['suggestions'];
      } else {
        
html cur.summaryLang['import'];
      }
    } else if (
cur.section == 'recent') {
      
html cur.summaryLang['recent'];
    } else if (
cur.section == 'requests' && cur.requestsCount 0) {
      if (
cur.suggRev && cur.suggCount 0) {
        
html langNumeric(cur.suggCountcur.summaryLang['friends_sugg_summary'], true);
      } else {
        
html langNumeric(cur.requestsCountcur.summaryLang[cur.section], true);
      }
    } else if (
cur.section == 'requests' && cur.suggCount 0) {
      
html langNumeric(cur.suggCountcur.summaryLang['friends_sugg_summary'], true);
    } else if (
cur.section == 'all_requests' && cur.sectionCount 0) {
      
html langNumeric(cur.allRequestsCountcur.summaryLang[cur.section], true);
    } else if (
cur.section == 'out_requests' && cur.sectionCount 0) {
      
html langNumeric(cur.outRequestsCountcur.summaryLang[cur.section], true);
    } else if (
cur.sectionCount 0) {
      
html langNumeric(cur.sectionCountcur.summaryLang[cur.section], true);
    } else {
      
html cur.summaryLang['all_no'];
    }
    if (
cur.section.indexOf('list') == && cur.oid == vk.id) {
      
listNum parseInt(cur.curList.substr(4));
      var 
list_edit_text cur.summaryLang[(cur.sectionCount 'list_edit''list_start_edit')];
      
html += '<span class="divider">|</span><span><a onclick="Friends.editList('+listNum+');">'+list_edit_text+'</a></span>';
      if (
listNum 25) {
        
html += '<span class="divider">|</span><span><a onclick="Friends.deleteList('+listNum+');">'+cur.summaryLang['list_delete']+'</a></span>';
      }
    }
    if (
vk.id != cur.oid) {
      
html += '<span class="divider">|</span><span>' cur.summaryLang['to_users_page'] + '</span>';
    }
    if ((
cur.section == 'requests' && cur.requestsCount 50) || cur.section == 'all_requests') {
      if (!
cur.suggRev || !cur.suggCount) {
        if (
nav.objLoc.sort != 'date') {
          
html += '<span class="divide">|</span><span><a href="/friends?section=' cur.section '&sort=date">' cur.summaryLang['friends_sort_by_date'] + '</a></span>';
        } else {
          
html += '<span class="divide">|</span><span><a href="/friends?section=' cur.section '">' cur.summaryLang['friends_sort_by_common'] + '</a></span>';
        }
      }

    }
    
sum.innerHTML html;

    
document.title replaceEntities(stripHTML(cur.htitles[cur.section] || cur.htitles.all));
  },
  
selectTab: function(tab) {
    var 
section geByClass1('active_link'ge('friends_tabs'));
    
removeClass(section'active_link');
    
addClass(ge('tab_' tab), 'active_link');
    if (
cur.oid != vk.id) {
      
toggleClass(ge('main_class'), 'wide'tab != 'all' || !cur.allFriendsCount);
    }
  },
  
selectSection: function(tab) {
    var 
section geByClass1('cur_section'ge('sections_block'));
    
removeClass(section'cur_section');
    
addClass(ge('section_' tab), 'cur_section');
  },
  
selectSumTab: function(tab) {
    var 
section geByClass1('summary_tab_sel'ge('friends_req_tabs'));
    
removeClass(section'summary_tab_sel');
    
addClass(section'summary_tab');
    var 
el ge('sum_tab_' tab).parentNode;
    
removeClass(el'summary_tab');
    
addClass(el'summary_tab_sel');
  },
  
selectTabAndSection: function(type) {
    if (
type == 'all' || type == 'online' || type == 'common' || type == 'members') {
      
this.selectTab(type);
      
this.selectSection('all');
    } else if (
type == 'all_requests' || type == 'requests' || type == 'out_requests') {
      
this.selectTab('requests');
      
this.selectSumTab(type);
    } else {
      
this.selectTab('all');
      
this.selectSection(type);
    }
  },
  
onSectionChange: function() {
    if (
window.tooltips) {
      
tooltips.hideAll();
    }
  },
  
section: function(typecallbackupdateData) {
    
Friends.clearServerSearch();
    if (!
type) {
      
type 'all';
    }
    
//if (!updateData && (type != 'all' || cur.section != type) && type.substr(0, 4) != 'list') {
    
if (!updateData && ((type == 'online' && cur.oid != vk.id) || type.indexOf('requests') != -1) && type.substr(04) != 'list') {
      
Friends.clearFilter();
    }
    if (!
type) {
      if ((
cur.requestsCount && cur.requestsCount && cur.requestsCount 100) || cur.suggCount) {
        
type 'requests';
      } else {
        
type 'all';
      }
    }
    if (!
cur.requestsCount && !cur.suggCount && !cur.allRequestsCount && !cur.outRequestsCount) {
      
hide('tab_requests');
    }
    if (
type != cur.section) {
      
cur.fSearch.setValue('');
      
cur.searchStr '';
    }
    
// Select section filter
    
this.selectTabAndSection(type);

    if (
cur.silent && type != 'suggestions' && type != 'out_requests') {
      
cur.onSilentLoad = function() {
        
Friends.section(typecallback);
      };
      if (
type != cur.section) {
        
hide(cur.showMore);
        
cur.fContent.innerHTML '<div class="wide_loading"></div>';
      }
      return;
    }


    if (!
cur.secData[type]) {
      
cur.secData[type] = {};
    }
    
// from cache
    
if (!updateData && cur.friendsList[type] || type == 'all' || (type == 'requests' && cur.friendsList['sugg_requests'])) {
      if (!
cur.filter || type != 'suggestions') {
        
this.showSection(type);
        
callback();
        
Friends.onSectionChange();
        return;
      }
    }
    
// generate
    
switch (type) {
      case 
'online':
      case 
'common':
        
this.search(-1typecallback);
        break;
      case 
'phonebook':
        
this.loadingState('phonebook');
        
ajax.post('/al_friends.php', {act'phonebook'idnav.objLoc.id}, {onDone: (function(data) {
          if (!
data) {
            return;
          }
          
cur.shownFriends 0;
          
cur.curList cur.section type;
          var list = 
cur.friendsList['all'];
          var 
phoneList = [];
          if (list) {
            for (var 
0len = list.lengthleni++) {
              var 
friend = list[i];
              var 
phone data[friend[0]];
              if (
phone) {
                
friend.push(phone);
                
phoneList.push(friend);
              }
            }
          }
          
cur.friendsList[cur.section] = phoneList;
          
cur.sectionCount phoneList.length;
          
cur.fContent.innerHTML '';
          
this.loadingState('phonebook'true);
          
Friends.onSectionChange();
          
callback();
          
Friends.indexPhone();
          if (
cur.filterIds) {
            
cur.curList += '_filter';
            
Friends.search(cur.searchStr || -1cur.sectionfalsetrue);
            
Friends.changeSummary();
            return;
          }
          
this.showMore();
        }).
bind(this)});
        break;
      case 
'recent':
        
this.loadingState('recent');
        
ajax.post('/al_friends.php', {act'recent'}, {onDone: (function(data) {
          if (!
data) {
            return;
          }
          
cur.shownFriends 0;
          
cur.curList cur.section type;
          var list = [];
          
len data.length;
          for (var 
0leni++) {
            var 
cur.friends[data[i]];
            if (
f) {
              list.
push(f);
            }
          }
          
cur.friendsList[cur.section] = list;
          
cur.sectionCount = list.length;
          
cur.fContent.innerHTML '';
          
this.loadingState('recent'true);
          
Friends.onSectionChange();
          
callback();
          if (
cur.filterIds) {
            
cur.curList += '_filter';
            
Friends.search(cur.searchStr || -1cur.sectionfalsetrue);
            
Friends.changeSummary();
            return;
          }
          
this.showMore();
        }).
bind(this)});
        break;
      case 
'suggestions':
        
this.loadingState('suggestions');
        
ajax.post('/friends'extend({
          
act'get_section_friends',
          
section'suggestions'
        
}, cur.filter || {}), {
          
onDone: (function(list, preloaddata) {
            var list = eval(
'('+list+')');
            
extend(curdata || {});
            var 
keyType type + (cur.filterIds '_filter' '');
            
cur.friendsList[keyType] = list[type];
            
this.loadingState(typetrue);
            
this.showSection(type);
            
cur.secData[type].preload preload;
            
Friends.onSectionChange();
            
callback();
          }).
bind(this)
        });
        break;
      case 
'out_requests':
        
hide(cur.showMore'friends_hide_all');
        
cur.fContent.innerHTML '<div class="wide_loading"></div>';
        
ajax.post('/friends', {act'out_requests'}, {onDone: (function(datauniversities) {
          var 
obj = eval('('+data+')');

          
// load friends json
          
if (!obj) {
            return;
          }
          
extend(cur.universitiesuniversities);
          
extend(cur.friendsListobj);

          
this.indexAll(function() {
            
Friends.section(typecallback);
          });
        }).
bind(this)});
        break;
      default:
        if (
type.substr(04) == 'list') {
          
this.search(-1typecallback);
        }

    }
  },
  
loadingState: function(sectionstate) {
    if (
state) {
      if (
cur.oldSection) {
        
removeClass(cur.oldSection'loading');
      }
    } else {
      
cur.oldSection ge('section_' section);
      
addClass(cur.oldSection'loading');
    }
  },
  
scrollResize: function() {
    if (
browser.mobile) return;
    var 
docEl document.documentElement;
    var 
ch window.innerHeight || docEl.clientHeight || bodyNode.clientHeight;
    var 
st scrollGetY();
    if (!
cur.pageEnd) {
      return;
    }
    if (
st ch cur.pageEnd.offsetTop) {
      
setTimeout(function() {
        
Friends.showMore();
      }, 
0);
    }
  },
  
drawFriend: function(friendfirsttype) {
    if (
cur.section == 'requests' || cur.section == 'all_requests' || cur.section == 'out_requests' || cur.section == 'suggestions') {
      return 
cur.commonTpl(friendtype || cur.sectionfirst);
    } else {
      return 
cur.friendsTpl(friendcur.sectionfirst);
    }
  },

  
inviteToGroup: function(evgidmidinvitedhash) {
    var 
setInvited = function(invited) {
      for(var 
i in cur.friendsList[cur.curList]) {
        var 
row cur.friendsList[cur.curList][i];
        if (
row[0] == mid) {
          
row[10] = invited;
          
//Friends.updateView();
          
var block ge('user_block'+mid), link '';
          if (
invited) {
            
link '<a href="" onclick="return Friends.inviteToGroup(event, '+gid+', '+mid+', 1, ''+row[11]+'')">'+getLang('friends_cancel_invite')+'</a>';
          } else {
            
link '<a href="" onclick="return Friends.inviteToGroup(event, '+gid+', '+mid+', 0, ''+row[11]+'')">'+getLang('friends_send_invite')+'</a>';
          }
          
geByClass('actions'block)[0].innerHTML link;
          break;
        }
      }
    }
    if (
invited) {
      
ajax.post('/al_page.php', {act:'a_cancel_invite'mid:midgid:gidhash:hash}, {onDone:function(res){ }});
      
setInvited(0);
    } else {
      
ajax.post('/al_page.php', {act:'a_invite'mid:midgid:gidhash:hash}, {onDone:function(resmessage) {
        if (!
res) {
          
setInvited(0);
          
ge('res'+mid).innerHTML '<div class="res">'+message+'</div>';
          
hide('lists'+mid);
          var 
block ge('user_block'+mid);
          
hide(geByClass('actions'block)[0]);
        }
      }});
      
setInvited(1);
    }
    return 
false;
  },

  
acceptRequest: function(midhashel) {
    var 
controls ge('request_controls_'+mid);
    var 
controlsCont controls.parentNode;
    if (!
el) {
      
controls.innerHTML '<div align="center"><img src="/images/upload.gif"></div>';
    }
    
ajax.post('al_friends.php', {act'add'midmidhashhashrequest1'select_list'1}, {onDone: function(text) {
      
controls.innerHTML text;
      
delete cur.friendsList['recent'];
    }, 
onFail: function(text) {
      if (!
text) return;

      
showFastBox(getLang('global_error'), text);
      return 
true;
    }, 
showProgresslockButton.pbind(el), hideProgressunlockButton.pbind(el)});
    
Friends.processRequest(midtrue);
    
delete cur.friendsList['online'];
    
Friends.indexAll();
  },

  
declineRequest: function(midhashel) {
    var 
controls ge('request_controls_'+mid);
    var 
controlsCont controls.parentNode;
    if (!
el) {
      
controls.innerHTML '<div align="center"><img src="/images/upload.gif"></div>';
    }
    
ajax.post('al_friends.php', {act'remove'midmidhashhashreport_spam1from_sectioncur.section}, {onDone: function(text) {
      
controls.innerHTML text;
    }, 
onFail: function(text) {
      if (!
text) return;

      
showFastBox(getLang('global_error'), text);
      return 
true;
    }, 
showProgresslockButton.pbind(el), hideProgressunlockButton.pbind(el)});

    
Friends.processRequest(midfalse);
  },

  
processRequest: function(midaddsugg) {
    var 
reqs cur.friendsList[sugg 'sugg_requests' 'requests'] || [];
    var 
len reqs.lengthfound false;
    while (
len--) {
      if (
reqs[len][0] == mid) {
        var 
friend reqs.splice(len1)[0];
        if (
sugg) {
          --
cur.suggCount;
        } else {
          --
cur.requestsCount;
        }
        
val(geByClass1('tab_word'ge('tab_requests')), cur.summaryLang['requests_title'] + (cur.requestsCount ? ('<span class="count">+' cur.requestsCount '</span>') : ''));
        
toggleClass(ge('tab_requests'), 'count', !!cur.requestsCount);
        if (
add) {
          
found true;
          
friend.pop();
          if (
cur.friendsList['all']) {
            
cur.friendsList['all'].push(friend);
          } else {
            
cur.friendsList['all'] = [friend];
          }
          
cur.friends[friend[0]] = friend;
        }
      }
    }
    if (
add) {
      var 
reqs cur.friendsList['all_requests'] || [];
      var 
len reqs.length;
      while (
len--) {
        if (
reqs[len][0] == mid) {
          var 
friend reqs.splice(len1)[0];
          --
cur.allRequestsCount;
          if (!
found) {
            
friend.pop();
            if (
cur.friendsList['all']) {
              
cur.friendsList['all'].push(friend);
            } else {
              
cur.friendsList['all'] = [friend];
            }
            
cur.friends[friend[0]] = friend;
          }
        }
      }
    } else {
      var 
reqs cur.friendsList['out_requests'] || [];
      var 
len reqs.length;
      while (
len--) {
        if (
reqs[len][0] == mid) {
          var 
friend reqs.splice(len1)[0];
          --
cur.outRequestsCount;
        }
      }
    }
  },

  
reportSpam: function(midhash) {
    var 
controls ge('request_controls_' mid);
    if (!
controls) {
      
controls ge('result_msg');
      
removeClass(controls'msg');
    }
    
controls.innerHTML '<div align="center"><img src="/images/upload.gif"></div>';
    
ajax.post('al_friends.php', {act'report_spam'midmidhashhash}, {onDone: function(text) {
      
controls.innerHTML text;
    }});
  },

  
restoreFriend: function(elid) {
    var 
back el.innerHTML;
    
ajax.post('al_friends.php', {act'add'mididhashcur.userHashcatscur.savedMasks[id]}, {
      
onDoneFriends.onRemoveFriend.pbind(idtrue),
      
showProgress: function() {
        
el.innerHTML '<center><img src="/images/upload.gif" /></center>';
      },
      
hideProgress: function() {
        
el.innerHTML back;
      }
    });
  },

  
deleteFriend: function(eidel) {
    var 
back el.innerHTML;
    
ajax.post('al_friends.php', {act'remove'mididhashcur.userHash}, {
      
onDoneFriends.onRemoveFriend.pbind(idfalse),
      
showProgress: function() {
        
el.innerHTML '<center><img src="/images/upload.gif" /></center>';
      },
      
hideProgress: function() {
        
el.innerHTML back;
      }
    });
    return 
false;
  },

  
onRemoveFriend: function(midres) {
    var 
needUpdateView = (cur.friendsList[cur.curList] || []).length 10;

    for (var 
i in cur.friendsList) {
      if (
!= 'all' && != 'requests' && != 'all_requests' && != 'out_requests' && != 'suggestions') {
        
delete cur.friendsList[i];
      }
    }
    var list = 
cur.friendsList['all'];
    var 
len = list.length;
    
mid positive(mid);

    var 
block ge('user_block' mid);
    var 
fr cur.friends[mid];
    if (
fr && block) {
      if (
res) {
        
fr[6] = cur.savedMasks[mid];
        
delete(cur.savedMasks[mid]);
      } else {
        
cur.savedMasks[mid] = fr[6];
        
fr[6] = 0// zero mask - removed friend
      
}
      
block.parentNode.replaceChild(ce('div', {innerHTMLcur.friendsTpl(frcur.sectionhasClass(block'user_block_first') ? ' user_block_first' '').join('')}).firstChildblock);
    } else {
      
re(block);
    }

    
Friends.indexAll(function() {
    });
  },
  
showCommonBox: function(eidhash) {
    if (
checkEvent(e)) return true;
    
showBox('al_friends.php', {act'common_friends'mididhashhash}, {params: {bodyStyle"padding: 0px;"}});
    return 
false;
  },
  
toList: function(num) {
    
nav.change({'0':'al_friends.php'section:'list' num});
    
scrollToTop(0);
    return 
false;
  },

  
/*ddShowSearchActs: function(obj, ev, uid) {
    var elems = [];
    elems.push('<a class="friends_dd_item" onclick="Friends.ddHide(ge('friends_dd_menu_'+uid+''), '+uid+');return showWriteMessageBox(event, '+uid+')">'+cur.summaryLang['global_write_msg']+'</a>');
    Friends.ddShowCustom(obj, ev, elems, uid);
  },*/

  
ttActToggle: function(objuidhashadd) {
    var 
back obj.innerHTML;
    
ajax.post('al_friends.php', {actadd 'add' 'remove'miduidhashhashfrom'friends'}, {
      
onDone: function(text) {
        
//re(obj);
        
cur['friends_info'+uid] = add;
        
showDoneBox('<div class="friends_done">'+text+'</div>')
        
tooltips.destroyAll();
        
//ge('friends_tt_cont_'+uid).tt.close();
      
},
      
showProgress: function() {
        
obj.innerHTML '<center><img src="/images/upload.gif" /></center>';
      },
      
hideProgress: function() {
        
obj.innerHTML back;
      }
    })
  },

  
ttActGift: function(uid) {
    return !
showBox('al_gifts.php', {act'get_gift_box'miduidfr: (uid == vk.id 0)}, {stat: ['gifts.css''ui_controls.js''ui_controls.css'], cache1}, false);
  },

  
ttActsMenu: function(objevuidhash) {
    if (
obj.tt) {
      if (!
obj.tt.show) return;
      return 
obj.tt.show();
    }
    if (
window.tooltips) {
      
tooltips.hideAll();
    }
    var 
info cur['friends_info'+uid] || '';
    var 
html = ['<div class="friends_tt_menu">'];
    
html.push('<a class="friends_tt_item" onclick="return showWriteMessageBox(event, '+uid+')"><div class="friends_tt_icon friends_tt_msg"></div>'+cur.summaryLang['global_write_msg']+'</a>');
    if (
info) {
      
html.push('<a class="friends_tt_item" onclick="return Friends.ttActToggle(this, '+uid+', ''+hash+'', 0);"><div class="friends_tt_icon friends_tt_cancel"></div>'+cur.summaryLang['friends_add_cancel']+'</a>');
    } else if (!
cur.friends[uid]) {
      
html.push('<a class="friends_tt_item" onclick="return Friends.ttActToggle(this, '+uid+', ''+hash+'', 1);"><div class="friends_tt_icon friends_tt_add"></div>'+cur.summaryLang['friends_add_act']+'</a>');
    }
    
html.push('<a class="friends_tt_item" onclick="return Friends.ttActGift('+uid+');"><div class="friends_tt_icon friends_tt_gift"></div>'+cur.summaryLang['friends_gift_act']+'</a>');
    
html.push('</div>');
    
showTooltip(obj, {
      
texthtml.join(''),
      
className'friends_tt wall_tt',
      
shift: [00, -2],
      
forcetodown1,
      
hasover1,
      
center1
    
});
  },

  
ddShow: function(uidobjev) {
    if (
cur.silent) {
      
cur.onSilentLoad = function() {
        
Friends.ddShow(uidobjev);
      };
      return;
    }

    var 
friend cur.friends[parseInt(uid)];
    var 
cats parseInt(friend[6]);

    var 
elems = [];

    var 
publicLists = [2829272526];
    for (var 
0i5; ++j) {
      
publicLists[j];
      if (
cur.publicLists[i]) {
        
elems.push('<a class="friends_dd_item'+((cats & (<< parseInt(i))) ? ' checked' '')+'" onclick="Friends.checkCat(this, '+uid+', '+i+');">'+cur.publicLists[i]+'</a>');
      }
    }
    for (var 
i in cur.userLists) {
      if (
25) {
        var 
lname cur.userLists[i];
        if (
lname.length 20) {
          
lname trim(lname.substr(018))+'...';
        }
        
elems.push('<a class="friends_dd_item'+((cats & (<< parseInt(i))) ? ' checked' '')+'" onclick="Friends.checkCat(this, '+uid+', '+i+');">'+lname+'</a>');
      }
    }
    
Friends.ddShowCustom(objevelemsuid);
  },

  
ddShowCustom: function(objeventelemsddId) {
    var 
text obj.innerHTML;
    var 
pos getXY(obj);
    var 
height window.innerHeight window.innerHeight : (document.documentElement.clientHeight document.documentElement.clientHeight document.body.offsetHeight);
    var 
posY pos[1] - scrollGetY();
    var 
ddHeight elems.length 22;

    var 
params = {
      
className'lists_menu'
    
}

    var 
styleAdd '';
    var 
headerAdd '';

    if (
posY > (height 2) && (height posY) < ddHeight) {
      
headerAdd ' friends_header_up';
      
elems elems.reverse();
      
styleAdd ' style="margin-top: -'+(ddHeight 1)+'px;"';
    }

    var 
htmlH = ['<div id="friends_dd_menu_',ddId,'" onmouseout="Friends.ddHide(this, ',ddId,');" onmouseover="Friends.ddActive(this, ',ddId,');"><div class="lists_header'headerAdd,'"><div>'text'</div></div><div class="lists_body" 'styleAdd,'><table cellspacing="0" cellpadding="0"><tbody><tr><td class="lists_shad_l"><div></div></td><td><div class="lists_shad_t2"></div><div class="lists_shad_t"></div><div class="lists_rows"><div id="rows3">'];

    var 
htmlF '</div></div><div class="lists_shad_b"></div><div class="lists_shad_b2"></div></td><td class="lists_shad_r"><div> </div></td></tr></tbody></table></div></div>';

    
params.innerHTML htmlH.join('') + elems.join('') + htmlF;

    var 
dd ce('div'params);

    
obj.parentNode.insertBefore(ddobj);
    
cur.onMouseClick = function(ev) {
      var 
menuId 'friends_dd_menu_'+ddId;
      var 
obj ev.target;
      while (
obj) {
        if (
hasClass(obj'lists_select') || obj.id == menuId) {
          return 
false;
        }
        
obj obj.parentNode;
      }
      if (
ev.target)
      
Friends.ddHide(ge(menuId), ddId1);
    }
  },

  
ddHide: function(objddIdfast) {
    
cur.timeouts['dd_fade'+ddId] = setTimeout(function() {
      
fadeOut(objfast 100, function() {
        var 
parentEl obj.parentNode.parentNode;
        if (
parentEl) {
          
parentEl.removeChild(obj.parentNode);
        }
      });
    }, 
fast 600);
  },
  
ddActive: function(objddId) {
    if (
cur.timeouts['dd_fade'+ddId]) {
      
clearTimeout(cur.timeouts['dd_fade'+ddId]);
    }
  },
  
checkCat: function(objuidlistIdfrom) {
    if (
from == 1) {
      var 
checked isChecked(obj);
    } else {
      var 
checked hasClass(obj'checked');
      var 
lists ge('lists' uid);
    }
    var 
friend cur.friends[uid];
    if (!
friend) {
      return 
false;
    }
    
friend[6] = parseInt(friend[6]);
    if (
checked) {
      if (
friend[6] & (<< listId)) {
        
friend[6] -= (<< listId);
      }
      if (
lists) {
        
lists.innerHTML Friends.getLists(friend[6]);
      }
    } else {
      if (!(
friend[6] & (<< listId))) {
        
friend[6] += (<< listId);
      }
      if (
lists) {
        
lists.innerHTML Friends.getLists(friend[6]);
      }
    }

    if (
from == 1) {
      
checkbox(obj);
    } else {
      (
checked removeClass addClass)(obj'checked');
    }
    if (
cur.timeouts['list'+uid]) {
      
clearTimeout(cur.timeouts['list'+uid]);
    }
    
delete cur.friendsList['list'+listId];
    
delete cur.friendsList['list'+friend[6]]
    
cur.timeouts['list'+uid] = setTimeout(function() {
      
ajax.post('al_friends.php', {act'save_cats'uiduidcatsfriend[6], hashcur.userHash}, {
        
onDone: function(text) {
          if (
from) {
            var 
info ge('friends_added_'+uid);
            if (!
cur['fr_add_text_'+uid] && info) {
              
cur['fr_add_text_'+uid] = info.innerHTML;
            }
            
fadeTo(info1000, function() {
              
info.innerHTML text;
              
fadeTo(info1001);
            });
            
clearTimeout(cur['fr_add_timeout_'+uid]);
            
cur['fr_add_timeout_'+uid] = setTimeout(function() {
              
fadeTo(info1000, function() {
                
info.innerHTML cur['fr_add_text_'+uid];
                
fadeTo(info1001);
              });
            }, 
2000);
          }
        }
      });
    });
  },
  
getLists: function(cats) {
    var 
info = [];
    for (var 
29>= 25i--) {
      if ((
<< i) & cats && cur.publicLists[i]) {
        
info.push('<span class="group', (1) % 1' fl_l" onmousedown="Friends.toList('i');">'cur.publicLists[i], '</span>');
      }
    }
    if (
vk.id == cur.oid) {
      for (var 
i in cur.userLists) {
        if ((
<< i) & cats && !cur.publicLists[i] && cur.userLists[i]) {
          
info.push('<span class="group', (1) % 1' fl_l" onmousedown="Friends.toList('i');">'cur.userLists[i], '</span>');
        }
      }
    }
    return 
info.join('');
  },
  
subscribeAllRequests: function(objhash) {
    
ajax.post('al_friends.php', {act'subscribe_all_requests'hashhashonce1}, {
      
showProgresslockButton.pbind(obj),
      
hideProgressunlockButton.pbind(obj)
    });
  },
  
onAllRequestsRemove: function() {
    return 
nav.go('/friends?section=all_requests'false, {nocurtrue});
  },
  
editList: function(listId) {
    var 
checked = [];
    if (
listId == -1) {
      
listId intval(cur.curList.substr(4));
    }
    if (
listId) {
      var list = 
Friends.filter(cur.friendsList['all'], cur.curList);
      var 
len = list.length;
      while (
len--) {
        
checked.push(list[len][0]);
      }
    } else {
      
listId 0;
    }
    
showTabbedBox('al_friends.php', {
      
act'select_friends_box',
      
Checkedchecked.join(','),
      
from'list',
      
list_name: (listId cur.userLists[listId] : ''),
      
list_idlistId
    
}, {
      
stat: ['privacy.js''ui_controls.js''ui_controls.css'],
      
cache1,
      
onFail: function(text) {
        
setTimeout(showFastBox(getLang('global_error'), text).hide3000);
        return 
true;
      }
    });
    
cur.onFlistSave = function (ids, list, hashtitle) {
      var 
friendsList = [];
      for (var 
i in list) {
        
friendsList.push(parseInt(i));
      }

      
ajax.post('al_friends.php', {act'save_list'titletitlecat_idlistIdFriendsfriendsList.join(','), hashhash}, {
        
onDone: function(idtitle) {
          
Friends.editListClient(listIdidtitlefriendsList);
        },
        
onFail: function(text) {
          
setTimeout(showFastBox({titlegetLang('global_error')}, textgetLang('global_close')).hide4000);
          return 
true;
        }
      });

      
Friends.clearFilter();

      return 
false;
    };

  },
  
editListClient: function(listIdidtitlefriendsList) {
    var 
listName 'list' id;
    if (
listId == 0) {
      var 
html '<a onmousedown="return nav.change({'0':'al_friends.php', section:'list'+id+''});" id="section_list'+id+'" class="side_filter">'+title+'</a>';
      
ge('sections_block').insertBefore(ce('div', {
        
innerHTMLhtml
      
}), ge('friends_create_list'));
      var 
len friendsList.length;
      var 
mask << parseInt(id);
      
cur.friendsList[listName] = [];
      while (
len--) {
        var 
friend cur.friends[friendsList[len]];
        
friend[6] = parseInt(friend[6]);

        if (!(
friend[6] & mask)) {
          
friend[6] += mask;
          
cur.friendsList[listName].push(friend)
        }
      }
      
cur.userLists[id] = title;
      
//Friends.indexAll();
      
Friends.indexAll();
      
removeClass(ge('main_class'), 'no_lists');
      return 
nav.change({'0':'friends'sectionlistName});
    } else {
      if (
id 25) {
        
ge('section_list'+id).innerHTML title;
        
cur.userLists[id] = title;
      }
      var 
mask = (<< id);
      
cur.friendsList[listName] = [];
      for (var 
i in cur.friends) {
        var 
friend cur.friends[i];
        var 
inList = (friendsList.indexOf(parseInt(friend[0])) != -1);
        if (
inList) {
          
cur.friendsList[listName].push(friend);
        }
        
friend[6] = parseInt(friend[6]);
        if (
friend[6] & mask) {
          if (!
inList) {
            
friend[6] -= mask;
          }
        } else {
          if (
inList) {
            
friend[6] += mask;
          }
        }
      }
      
Friends.indexAll();
      return 
Friends.section(listName, function() {
        
Friends.changeSummary();
        
nav.setLoc({'0':'friends'sectionlistName});
      });
    }
  },
  
createList: function(event) {
    
Friends.editList(0);
  },
  
deleteList: function(listId) {
    
showBox('al_friends.php', {act'delete_list_box'list_idlistId});
  },
  
deleteListClient: function(listId) {
    var 
listSection ge('section_list'+listId);
    
listSection.parentNode.removeChild(listSection);
    var 
mask = (<< listId);
    for (var 
i in cur.friends) {
      if (
cur.friends[i][6] & mask) {
        
cur.friends[i][6] -= mask;
      }
    }
    
delete cur.userLists[listId];
    var 
listsCount 0;
    for (var 
i in cur.userListslistsCount++;
    if (!
listsCount) {
      
addClass(ge('main_class'), 'no_lists');
    }
    
//Friends.indexAll();
    
return nav.change({'0':'friends'section:'all'});
  },
  
searchForFriends: function() {
    
showBox('al_friends.php', {act'search'}, {stat: ['friends_search.js''friends_search.css'], dark1});
  },
  
selectList: function(objidevent) {
    
Friends.ddShow(idobjevent);
  },
  
_animDelX: function(colornew_activepost) {
    if (
post === undefined) {
      
post new_active;
      
new_active undefined;
    }
    var 
el ge('delete_row' post);
    if (!
el) return;
    if (
new_active !== undefined) {
      
el.active new_active;
    } else if (
el.active) {
      return;
    }
    
animate(el, {backgroundColorcolor}, 200);
  },
  
hideSuggestion: function(midhashel) {
    var 
controls ge('request_controls_'+mid);
    var 
controlsCont controls.parentNode;
    (
el || controls).innerHTML '<div align="center"><img src="/images/upload.gif"></div>';
    
ajax.post('al_friends.php', {act'hide_suggestion'midmidhashhashreport_spam1}, {onDone: function(text) {
      
controls.innerHTML text;
      
cur.suggCount -= 1;
    }, 
onFail: function(text) {
      if (!
text) return;

      
showFastBox(getLang('global_error'), text);
      return 
true;
    }});
    
Friends.processRequest(midfalsetrue);

  },
  
addRecommend: function(miduidhashobj) {
    
obj obj.parentNode;
    
obj.innerHTML '<img src="/images/upload.gif" />';
    
ajax.post('al_friends.php', {
      
act'a_suggest_friends',
      
midmid,
      
uidsuid,
      
hashhash,
      
from'add'
    
}, {
      
onDone: function(text) {
        
obj.innerHTML text;
      },
      
onFail: function(text) {
        
obj.innerHTML text;
      }
    })

  },
  
suggestBox: function(mid) {
    var 
box showBox('al_friends.php', {
      
act'select_friends_box',
      
from'suggest_friends',
      
friend_idmid
    
}, {stat: ['privacy.js''privacy.css''indexer.js''profile.css']});
    
box.leaveOnSave true;
    
cur.onFlistSave = function(ids, list, hash) {
      
//if (!ids || !ids.length) return;
      
ajax.post('al_friends.php', {
        
act'a_suggest_friends',
        
midmid,
        
idsids.join(','),
        
hashhash
      
}, {
        
onDone: function(text) {
          
box.hide();
          
showDoneBox(text);
        },
        
showProgressbox.showProgress,
        
hideProgressbox.hideProgress
      
});
    }
  },
  
getAgeFromData: function(maxopts) {
    
max parseInt(max);
    if (!
max 0max opts.ageTo;
    return 
Friends.getRangeData(opts.ageFrommax1opts.langAgeFrom+' 'opts.langAgeFromEmpty);
  },
  
getAgeToData: function(minopts) {
    
min parseInt(min);
    if (!
min 0min opts.ageFrom;
    return 
Friends.getRangeData(minopts.ageTo1opts.langAgeTo+' 'opts.langAgeToEmpty);
  },
  
getRangeData: function(minmaxstepprefixlabel) {
    if (
min max) return false;
    var 
ret = [[0label]];
    if (
step 0) {
      for (var 
max>= min+= step)
        
ret.push([iprefix i]);
    } else if (
step 0) {
      for (var 
min<= max+= step)
        
ret.push([iprefix i]);
    }
    return 
ret;
  },
  
radioFilter: function(elvaluefireEvent) {
    
radiobtn(elvalue'friends_radio_sex');
    if (
fireEvent || fireEvent == undefined) {
      
Friends.changeFilter();
    }
  },
  
initFilters: function(opts) {
    
stManager.add(['ui_controls.js''ui_controls.css'], function() {
      
cur.cityFilter = new Dropdown(ge('friends_fltr_city'), opts.cities, {
        
width150,
        
zeroPlaceholdertrue,
        
placeholderopts.citiesPl,
        
placeholderColor'#777',
        
//selectedItems: '{$school_year}',
        
onChangeFriends.changeFilter,
        
onShow: function() {
          if (
cur.silent) {
            
cur.cityFilterOpened true;
            
show('friends_fltr_progress');
          }
        }
      });

      
cur.ageFromFilter = new Dropdown(ge('friends_age_from'), Friends.getAgeFromData(opts.ageToopts), {
        
zeroPlaceholdertrue,
        
placeholderColor'#777',
        
width70,
        
onChange: function(value){
         
cur.ageToFilter.setData(Friends.getAgeToData(valueopts));
         
Friends.changeFilter();
        }
      });

      
cur.ageToFilter = new Dropdown(ge('friends_age_to'), Friends.getAgeToData(opts.ageFromopts), {
        
zeroPlaceholdertrue,
        
placeholderColor'#777',
        
width70,
        
onChange: function(value){
          
cur.ageFromFilter.setData(Friends.getAgeFromData(valueopts));
          
Friends.changeFilter();
        }
      });

      
window.radioBtns['friends_radio_sex'] = {
        
els: Array.prototype.slice.apply(geByClass('radiobtn'ge('friends_radio_sex'))),
        
val0
      
}
    });
  },
  
clearFilter: function(fireEvent) {
    if (!
cur.cityFilter) return;
    
cur.cityFilter.selectItem(0false);
    
cur.ageFromFilter.selectItem(0false);
    
cur.ageToFilter.selectItem(0false);
    
Friends.radioFilter(ge('friends_radio_any'), 0false);
    
cur.filterIds false;
    
cur.filter false;
    if (
fireEvent) {
      
Friends.changeFilter();
    }
  },
  
filterParams: function() {
    var 
= {
      
cityparseInt(cur.cityFilter.val()),
      
sexparseInt(radioBtns['friends_radio_sex'].val),
      
age_fromparseInt(cur.ageFromFilter.val()),
      
age_toparseInt(cur.ageToFilter.val())
    }
    if (
p.city || p.sex || p.age_from || p.age_to) {
      return 
p;
    } else {
      return 
false;
    }
  },
  
changeFilter: function() {
    if (
cur.silent) {
      
cur.onSilentLoad = function() {
        
Friends.changeFilter();
      };
      
hide(cur.showMore);
      
cur.fContent.innerHTML '<div class="wide_loading"></div>';
      return;
    }
    
cur.filter Friends.filterParams();
    if (
cur.section == 'suggestions') {
      return 
Friends.section(cur.section, function() {}, cur.filter || true);
    }
    if (
cur.filter) {
      
ajax.post('friends'extend({act'filter_friends'uidcur.oid}, cur.filter), {
        
onDone: function(ids) {
          
cur.filterIds = {};
          for (var 
i in ids) {
            
cur.filterIds[ids[i]] = 1;
          }
          for (var 
i in cur.friendsList) {
            if (
i.split('_').pop() == 'filter') {
              
delete cur.friendsList[i];
            }
          }
          
Friends.search(cur.searchStr || -1cur.sectionfalsetrue);
          
Friends.changeSummary();
        },
        
progress'friends_fltr_progress',
        
cache1
      
})
    } else {
      if (
cur.filterIds) {
        
cur.filterIds false;
      }
      
Friends.updateList();
    }
  },

  
bigphOver: function(objuid) {
    if (!
window.lang || !lang.global_photo_full_size || browser.mobile) return;
    var 
obj.firstChildch cur.bigphCache[uid];
    if (
o.tagName != 'A' || o.className != 'friends_bigph') {
      (
obj.insertBefore(ce('a', {className'friends_bigph'hrefch && ch._id ? ('/photo' ch._id '?all=1') : ('/albums' uid), innerHTML'<span class="friends_bigph_label">' getLang('global_photo_full_size') + '</span>'}), obj.firstChild)).onclick Friends.bigphClick.pbind(uid);
      
o._uid uid;
    }

    
clearTimeout(o.hideTO);
    
animate(o, {marginTop75}, {duration200transitionFx.Transitions.easeOutCirc});
    
cur.bigphShown[uid] = o;

    if (
ch === undefined) {
      
cur.bigphCache[uid] = 'load';
      
ajax.post('al_photos.php', {act'fast_get_photo'oiduid}, {onDone: function(res) {
        if (!
res) {
          
obj.onmouseover = function() {};
          
re(obj.firstChild);
          return;
        }
        var 
sh = (cur.bigphCache[uid] == 'show');
        
cur.bigphCache[uid] = res;
        
o.href '/photo' res._id '?all=1';
        if (
shFriends.bigphClick(uid);
      }, 
onFail: function() {
        
obj.onmouseover = function() {};
        
re(obj.firstChild);
        return 
true;
      }});
    }

    if (!
obj.onmouseoutobj.onmouseout Friends.bigphOut.pbind(obj);
  },
  
bigphOut: function(obj) {
    var 
obj.firstChild;
    if (!
|| o.tagName != 'A' || o.className != 'friends_bigph') return;

    
clearTimeout(o.hideTO);
    
o.hideTO setTimeout(function() {
      
animate(o, {marginTop100}, 200);
      
delete(cur.bigphShown[o._uid]);
    }, 
150);
  },
  
bigphClick: function(uidev) {
    if (
checkEvent(ev) !== false) return;

    var 
ch cur.bigphCache[uid];
    if (
ch == 'load' || ch == 'show') {
      
cur.bigphCache[uid] = 'show';
      return 
cancelEvent(ev);
    }
    if (!
ch) return;
    return 
showPhoto(ch._id'album' uid '_0/rev'extend({jumpTo: {z'albums' uid}}, ch), ev);
  }

}

extend(Friends, {
  
rowOverFriends._animDelX.pbind('#C4D2E1'),
  
rowOutFriends._animDelX.pbind('#FFF'),
  
activeDeleteRow: function(posttt) {
    
Friends._animDelX('#6B8DB1'1post);
    if (
ttshowTooltip(ge('delete_row' post), {textttshowdt500black1});
  },
  
deactiveDeleteRowFriends._animDelX.pbind('#C4D2E1'0),
  
deleteRow: function(rowhash) {
    
rowInfo row.split('_');
    var 
obj ge('suggestion'+row);
    if (
hasClass(obj'user_block_first')) {
      
nobj obj.nextSibling;
      while (
nobj && !isVisible(nobj)) {
        
nobj nobj.nextSibling;
      }
      if (
nobj) {
        if (
nobj.id == 'friends_sub_summary') {
          var 
summ nobj.childNodes[0].innerHTML;
          
ge('friends_summary').innerHTML summ;
          
re(nobj);
        } else if (
nobj.className) {
          
addClass(nobj'user_block_first')
        }
      }
    }
    
slideUp('suggestion' row100);
    if (
tooltips) {
      
tooltips.hide(ge('delete_row' row))
    }
    
ajax.post('al_friends.php', {act'hide_possible'midrowInfo[1], hashhash}, {onDone: function() {
    }});
    var list = 
cur.friendsList['suggestions'];
    
row row.split('_');
    for (var 
i in list) {
      if (
parseInt(list[i][0]) == parseInt(row[1])) {
        
cur.friendsList['suggestions'].splice(i1);
      }
    }
    
cur.importCount -= 1;
  }
});

try{
stManager.done('friends.js');}catch(e){}
?>
Онлайн: 0
Реклама