Вход Регистрация
Файл: js/al/pads.js
Строк: 1142
<?php
var Pads = {
  
coords: {
    
fr: {w: 378},
    
ph: {w: 378},
    
vid: {w: 378},
    
msg: {w: 470},
    
gr: {w: 470},
    
nws: {w: 470},
    
ap: {w: 378},
    
mus: {w: 520},
    
game: {w: 456, bottom: 1}
  },
  
getCache: function(id, set) {
    var 
c = _pads.cache[id], t = vkNow();
    if ((
c || {}).tim && (t - c.tim) < 86400000 || (t - intval(c)) < 20000) return c;
    if (
set) _pads.cache[id] = t;
    return 
false;
  },
  
preload: function(id) {
    if (
_pads.shown == id || Pads.getCache(id, true) || vk.isBanned) return;
    if (
id == 'msg') stManager.add(['pads_im.css', 'pads_im.js', 'page.css', 'page.js']);
    var 
query = {act: 'pad', pad_id: id};
    if (
id == 'mus') {
      if (!
padAudioPlaylist()) query.playlist = 1;
      if (!
Pads.audioInited) query.init = 1;
    }
    
ajax.post('pads.php', query, {onDone: function(html, script, data) {
      if (
data.onLoadScript) {
        eval(
data.onLoadScript);
        
delete data.onLoadScript;
      }
      
_pads.cache[id] = {html: html, script: script, data: data, tim: vkNow()};
      if (
_pads.shown == id && hasClass(_pads.cont, 'pad_loading')) Pads.show(id, true);
    }});
  },
  
go: function(el, ev) {
    if (
checkEvent(ev) === false) Pads.hide();
    return 
nav.go(el, ev);
  },
  
decr: function(id, toZero) {
    if (
vk.counts[id] <= 0) return;
    var 
mp = {fr: 'friends', ph: 'albums' + vk.id, vid: 'video', gr: 'groups'};
    
handlePageCount(id, toZero ? 0 : (vk.counts[id] - 1), mp[id], 1);
  },
  
reposition: function() {
    if (!
_pads.shown) return;
    
setStyle(_pads.wrap, {left: getXY(ge('l_' + _pads.shown), true)[0] + (vk.rtl ? (-Pads.coords[_pads.shown].w - 7) : 143)});
  },
  
getEl: function(id) {
    var 
el;
    switch (
id) {
      case 
'mus':
        
el = ge('head_play_btn');
        break;
      case 
'game':
        
el = ge('head_games');
        break;
      default:
        
el = ge('l_' + id);
    }
    return 
el;
  },
  
setPos: function(id) {
    var 
d = Pads.coords[id], c = _pads.cache[id], el = Pads.getEl(id), xy = getXY(el, true),
        
barHeight = getXY('page_layout')[1], topOffset = 33 + barHeight;
    if (
id == 'mus') {
      var 
w3 = ge('wrap3'), posStyle = getStyle(ge('page_header'), 'position'), y = scrollGetY(),
          
playBtn = ge('head_play_btn'), gp = ge('gp'), reverse = isVisible(gp) && hasClass(gp, 'reverse'),
          
fixed = (posStyle == 'fixed' || posStyle != 'fixed' && y >= topOffset && isVisible(gp) || reverse || !ge('head_play_btn')), l, r, t, b;
      if (
cur.module == 'im' || cur.module == 'audio') {
        
fixed = 1;
      }
      if (
vk.rtl) {
        
l = reverse ? getXY(w3)[0] + getSize(w3)[0] - d.w - 1 : getXY(w3)[0] + 1;
      } else {
        
l = reverse ? getXY(w3)[0] + 1 : getXY(w3)[0] + getSize(w3)[0] - d.w - 1;
      }
      
t = reverse ? 'auto' : ((y >= topOffset && isVisible(gp) || !playBtn) ? 12 : 46) + barHeight;
      
b = reverse ? 15 : 'auto';
      
setStyle(_pads.wrap, {left: l, top: t, bottom: b});
      
toggleClass(_pads.wrap, 'fixed', fixed);
      
toggleClass(_pads.wrap, 'pad_no_fixed', !fixed);

      
toggleClass(_pads.arrow, 'head', (y < topOffset || !isVisible(gp)) && playBtn && !_pads.gpClicked);
      
toggleClass(gp, 'head', (y < topOffset || !isVisible(gp)) && playBtn && !_pads.gpClicked);
      
toggleClass(_pads.arrow, 'right', (y >= topOffset && isVisible(gp) || !playBtn) && !hasClass(gp, 'reverse'));
      
toggleClass(_pads.arrow, 'left', (y >= topOffset && isVisible(gp) || !playBtn) && hasClass(gp, 'reverse'));
      var 
toup = (y < topOffset || !isVisible(gp)) && playBtn && !_pads.gpClicked;
      if (
vk.rtl) {
        
l = reverse ? 'auto' : (toup ? getXY(playBtn)[0] - getXY(w3)[0] + 1 : -10);
        
r = reverse ? -10 : 'auto';
      } else {
        
l = reverse ? -10 : 'auto';
        
r = reverse ? 'auto' : (toup ? getSize(w3)[0] + getXY(w3)[0] - getXY(playBtn)[0] - 20 : -10);
      }
      
t = reverse ? 'auto' : (toup ? -10 : 17);
      
b = reverse ? 15 : 'auto';
      
setStyle(_pads.arrow, {top: t, bottom: b, left: l, right: r});
    } else {
      var 
c = {}, wasvis = isVisible(_stlSide), obj = Pads.coords[id];
      if (!
wasvis) show(_stlSide);
      
c.fixpos = intval((_fMenuLnks[id] || {}).offsetTop + (_fMenu || {}).offsetTop);
      if (!
wasvis) hide(_stlSide);
      
c.menuh = el.offsetHeight;
      
c.middle = Math.floor((_pads.restrict[1] + _pads.restrict[0] - c.menuh) / 2);
      
c.fixtop = Math.max(c.fixpos - c.middle, 4);
      
c.fixbot = 7;
      
c.justarrtop = xy[1];
      
c.basearrtop = xy[1] - c.fixtop;
      
c.basetop = xy[1] - c.middle;

      
extend(_pads.cur, c);

      
removeClass(_pads.arrow, 'left');
      
removeClass(_pads.arrow, 'right');

      if (
obj.bottom) {
        var 
w3 = ge('wrap3');
        
addClass(_pads.arrow, 'head');
        
addClass(gp, 'head');
        var 
w = el.offsetWidth;
        var 
cntr = obj.w / 2;
        var 
rightPos = getXY(w3)[0] + getSize(w3)[0] - 1;
        var 
diff = (xy[0] + w / 2 + cntr) - rightPos;
        if (
diff > 0) {
          
//cntr += diff;
        
}
        
cntr -= 46 + barHeight;
        var 
l = (xy[0] + w / 2 - cntr);
        
_pads.wrap.style.left = l + 'px';
        
_pads.wrap.style.top = (46 + barHeight) + 'px';
        
setStyle(_pads.arrow, {top: '-10px', left: (cntr - 8)+'px'});
        if (
cur.module == 'im' || cur.module == 'audio') {
          
fixed = 1;
        }
        
toggleClass(_pads.wrap, 'fixed', fixed);
        
toggleClass(_pads.wrap, 'pad_no_fixed', !fixed);
      } else {
        
removeClass(_pads.arrow, 'head');
        
removeClass(gp, 'head');
        
_pads.wrap.style.left = (xy[0] + (vk.rtl ? (-d.w - 7) : 143)) + 'px';
        
_pads.wrap.style.bottom = 'auto';
      }
    }
    
Pads.onScroll(true, id);
  },
  
onScroll: function(cacheFix, id) {
    var 
y = scrollGetY(), barHeight = getXY('page_layout')[1], topOffset = 33 + barHeight;
    if ((
id || _pads.shown) == 'mus') {
      var 
playBtn = ge('head_play_btn'), gp = ge('gp'),
          
fixed = getStyle(ge('page_header'), 'position') == 'fixed' || !playBtn,
          
reverse = isVisible(gp) && hasClass(gp, 'reverse');
      if (
reverse) {
        var 
fixed = getStyle(_pads.wrap, 'position') == 'fixed';
        
toggleClass(_pads.arrow, 'left', fixed);
        
removeClass(_pads.arrow, 'right');
        
toggleClass(_pads.arrow, 'head', !fixed && !_pads.gpClicked);
        
toggleClass(gp, 'head', !fixed && !_pads.gpClicked);
        
setStyle(_pads.wrap, {bottom: fixed ? '15px' : 'auto', top: fixed ? 'auto' : 46 + barHeight});
        
toggleClass(_pads.wrap, 'fixed', fixed);
        
toggleClass(_pads.wrap, 'pad_no_fixed', !fixed);
      } else if (
y >= topOffset && isVisible(gp) && !fixed || !playBtn) {
        
addClass(_pads.arrow, 'right');
        
removeClass(_pads.arrow, 'left');
        
removeClass(_pads.arrow, 'head');
        
removeClass(gp, 'head');
        
setStyle(_pads.wrap, {top: '12px', bottom: 'auto'});
        
addClass(_pads.wrap, 'fixed');
        
removeClass(_pads.wrap, 'pad_no_fixed');
        if (
vk.rtl) {
          
setStyle(_pads.arrow, {top: '17px', left: '-10px'});
        } else {
          
setStyle(_pads.arrow, {top: '17px', right: '-10px'});
        }
      } else {
        
removeClass(_pads.arrow, 'left');
        
toggleClass(_pads.arrow, 'right', _pads.gpClicked);
        
toggleClass(_pads.arrow, 'head', !_pads.gpClicked);
        
toggleClass(gp, 'head', !_pads.gpClicked);
        
toggleClass(_pads.wrap, 'fixed', fixed);
        
toggleClass(_pads.wrap, 'pad_no_fixed', !fixed);
        
setStyle(_pads.wrap, {top: 46 + barHeight, bottom: 'auto'});
        if (
_pads.gpClicked) {
          if (
vk.rtl) {
            
setStyle(_pads.arrow, {top: '17px', left: '-10px'});
          } else {
            
setStyle(_pads.arrow, {top: '17px', right: '-10px'});
          }
        } else {
          var 
w3 = ge('wrap3');
          if (
vk.rtl) {
            var 
l = getXY(playBtn)[0] - getXY(w3)[0] + 1;
            
setStyle(_pads.arrow, {top: '-10px', left: l + 'px', right: 'auto'});
          } else {
            var 
r = getSize(w3)[0] + getXY(w3)[0] - getXY(playBtn)[0] - 20;
            
setStyle(_pads.arrow, {top: '-10px', right: r + 'px'});
          }
        }
      }
    } else if (
Pads.coords[id || _pads.shown].bottom) {
      return 
false;
    } else {
      if (
_fixedNav) y = 0;
      var 
top = _pads.cur.fixtop, arrtop = _pads.cur.basearrtop - y, cf = (cacheFix === true);
      if (
arrtop > _pads.cur.middle) {
        
top += arrtop - _pads.cur.middle;
        
arrtop = _pads.cur.middle;
      }
      if (
arrtop > _pads.restrict[1] - _pads.cur.menuh) {
        
top = _pads.cur.basetop - y;
      }
      if (
top + _pads.height > lastWindowHeight - _pads.cur_fixbot) {
        
top = lastWindowHeight - _pads.cur_fixbot - _pads.height;
        if (
top < 4) top = 4;
      }
      if (
top + y < 7) top = 7 - y;

      
arrtop = _pads.cur.justarrtop - y - top;
      if (
arrtop < _pads.restrict[0]) {
        if (
_pads.cur.fixpos && _fMenuShown && !_fMenuHidden) {
          
arrtop = _stlSideTop + _pads.cur.fixpos - top;
        }
      }

      if (
top > _pads.cur.fixtop && top > 7 && cur.module != 'im' && cur.module != 'audio') {
        
top += y;
        if (
cf || _pads.cur.fixed !== false) {
          
removeClass(_pads.wrap, 'fixed');
          
addClass(_pads.wrap, 'pad_no_fixed');
          
_pads.cur.fixed = false;
        }
      } else {
        if (
cf || _pads.cur.fixed !== true) {
          
removeClass(_pads.wrap, 'pad_no_fixed');
          
addClass(_pads.wrap, 'fixed');
          
_pads.cur.fixed = true;
        }
      }
      
_pads.wrap.style.top = top + 'px';
      if (
arrtop < _pads.restrict[0] - _pads.cur.menuh && arrtop > 0) {
        if (
cf || _pads.cur.arrshown !== 'blue') {
          
show(_pads.arrow);
          
addClass(_pads.arrow, 'blue');
          
_pads.cur.arrshown = 'blue';
        }
      } else if (
arrtop > _pads.restrict[1] - _pads.cur.menuh || arrtop < _pads.restrict[0]) {
        if (
cf || _pads.cur.arrshown !== false) {
          
hide(_pads.arrow);
          
_pads.cur.arrshown = false;
        }
      } else {
        if (
cf || _pads.cur.arrshown !== true) {
          
show(_pads.arrow);
          
removeClass(_pads.arrow, 'blue');
          
_pads.cur.arrshown = true;
        }
      }
      if (
_pads.cur.arrshown) {
        
_pads.arrow.style.top = Math.ceil(arrtop + (_pads.cur.menuh - 17) / 2) + 'px';
      }
    }
  },
  
show: function(id, ev) {
    if (
checkEvent(ev) === true || browser.msie6 || vk.isBanned) return;
    if (
_pads.shown == id && ev !== true) {
      
Pads.hide();
      return 
cancelEvent(ev);
    }
    if (
_pads.shown && _pads.topLoad) {
      
removeClass(ge('head_'+(_pads.shown == 'mus' ? 'music' : 'games')), 'over');
    }
    
_pads.topLoad = false;

    if (
id == 'msg') stManager.add(['pads_im.css', 'pads_im.js', 'page.css', 'page.js']);
    if (
id == 'mus' && !padAudioPlaylist()) {
      
Pads.invalidate(id);
    }
    if (
id != 'mus' && _pads.gpClicked) {
      
_pads.gpClicked = false;
    }
    
_pads.gpClicked = !!_pads.gpClicked;
    var 
d = Pads.coords[id], el = Pads.getEl(id), c = _pads.cache[id], bd = (browser.msie && browser.version < 9), playBtn = ge('head_play_btn');
    if (!
c) {
      
Pads.preload(id);
    } else if (!
c.tim) {
      
c = 0;
    }

    if (!
_pads.wrap) {
      
_pads.cont = domLC((_pads.wrap = bodyNode.appendChild(ce('div', {
        
id: 'pad_wrap',
        
className: 'fixed',
        
innerHTML: '<div id="pad_arrow"></div><div id="pad_cont"></div>'
      
}, {opacity: bd ? '' : 0}))));
      
_pads.arrow = ge('pad_arrow');
    }

    if (
ge('gp')) {
      var 
topOffset = 33 + getXY('page_layout')[1];
      
toggleClass(ge('gp'), 'head', id == 'mus' && scrollGetY() < topOffset && !hasClass(ge('gp'), 'reverse') && !_pads.gpClicked);
      
toggleClass(ge('gp').firstChild, 'active', id == 'mus');
    }
    if (
id == 'mus') {
      if (!
c) addClass(_pads.arrow, 'no_data');
    }
    if (
id == 'game' || id == 'mus' && !_pads.gpClicked) {
      if (
id == 'mus') {
        var 
wDiff = 0;
        var 
loadEl = ge('head_music_text');
      } else {
        var 
wDiff = -20;
        var 
loadEl = el;
      }
      if (
loadEl) {
        if (
c) {
          if (
loadEl.padLoad) {
          
loadEl.innerHTML = loadEl.padLoad;
          
delete loadEl.padLoad;
          }
          
animate(_pads.wrap, {opacity: 1}, 200);
        } else {
          var 
s = getSize(loadEl);
          
setStyle(loadEl, {width: s[0] + wDiff, display: 'inline-block'})
          
loadEl.padLoad = loadEl.innerHTML;
          
loadEl.innerHTML = '<img style="position: absolute; margin-top: 3px; margin-left: '+((s[0] + wDiff) / 2 - 16)+'px;" src="/images/upload_inv'+(window.devicePixelRatio >= 2 ? '_2x' : '')+'.gif" width="32" height="8"/>&nbsp;';
        }
      }
      
addClass(ge('head_'+(id == 'mus' ? 'music' : 'games')), 'over');
      
_pads.topLoad = true;
    }

    
setStyle(_pads.cont, {width: c ? d.w : d.w - 2});

    (
c ? removeClass : addClass)(_pads.cont, 'pad_loading');
    
val(_pads.cont, (c || {}).html || '');

    if (!
_pads.shown) {
      if (
bd) {
        
show(_pads.wrap);
      } else {
        if (!
isVisible(_pads.wrap)) {
          
setStyle(_pads.wrap, {opacity: 0});
          
show(_pads.wrap);
        }
        if (!
_pads.topLoad) {
          
animate(_pads.wrap, {opacity: 1}, 200);
        }
      }
    } else if (
_pads.shown != id) {
      var 
lnk = ge('l_' + _pads.shown), flnk = _fMenuLnks[_pads.shown];
      
removeClass(domFC(lnk), 'left_nav_over');
      
removeClass(flnk, 'fmenu_item_over');
      if (
vk.counts[_pads.shown] < 0) {
        
hide(lnk, flnk);
      } else if (
vk.counts[_pads.shown] == 0 && !geByClass1('left_count_persist', lnk)) {
        
hide(flnk);
      }
    }
    if (
cur.hideGifts) {
      
cur.hideGifts();
    }
    
addClass(domFC(el), 'left_nav_over');
    
addClass(_fMenuLnks[id], 'fmenu_item_over');

    
Pads.deinit();
    
_pads.wrap.style.position = _pads.arrow.style.left = _pads.arrow.style.right = _pads.arrow.style.bottom = '';
    
removeClass(_pads.arrow, 'blue');
    
_pads.cur = {};
    
_pads.content = ge('pad_content');
    if (
c && c.script) eval('(function(id){' + c.script + '})('' + id + '')');
    if (
id == 'msg' && window.PadsIm && ge('pad_im_hrows')) {
      
PadsIm.init();
    } else if (
_pads.content) {
      
_pads.scroll = new Scrollbar(_pads.content, {
        
prefix: 'pad_',
        
shadows: (id == 'game'),
        
nomargin: true,
        global: 
true,
        
nokeys: true,
        
right: vk.rtl ? 'auto' : 1,
        
left: !vk.rtl ? 'auto' : 1,
        
wheelObj: _pads.content
      
});
      
_pads.content.onscroll = Pads.scroll;
      
_pads.scroll.scrollTop(0);
    } else {
      
_pads.scroll = 0;
    }

    var 
row = domFC(ge('pad_rows')), needClean = (id == 'nws' && vk.counts[id] > 0);

    
Pads.init(id);
    
Pads.setPos(id);

    
_pads.shown = id;

    if (
row) {
      if (
vkNow() - c.tim > 3000) {
        
ajax.post('pads.php', {act: 'pad', offset: 0, pad_id: id, till: row.id.replace('pad_' + id, '')}, {
          
onDone: function(rows, all) {
            if (
_pads.shown != id) return;
            if (!
rows) Pads.invalidate();
            
Pads.feed(rows, all, true);
            if (
needClean) {
              
ajax.post('pads.php', {act: 'clean', pad_id: id, hash: _pads.hash});
            }
          }
        });
      } else if (
needClean) {
        
ajax.post('pads.php', {act: 'clean', pad_id: id, hash: _pads.hash});
      }
//      var mp = {fr: 'friends', ph: 'albums' + vk.id, vid: 'video', gr: 'groups', nws: 'feed'};
//      handlePageCount(id, 0, mp[id], 1);
    
} else {
      
Pads.invalidate();
    }

    return 
ev ? cancelEvent(ev) : false;
  },
  
deinit: function() {
    if (!
_pads.cur) return;

    if (
_pads.shown == 'msg' && window.PadsIm && ge('pad_im_hrows')) PadsIm.destroy();
    if (((
_pads.cur.tipEl || {}).tt || {}).destroy) _pads.cur.tipEl.tt.destroy();
    
_pads.cur = 0;
  },
  
hide: function() {
    if (!
_pads.shown || _pads.cont && hasClass(_pads.cont, 'pad_loading')) return true;

    if (
_pads.shown == 'mus') {
      if (
ge('gp')) {
        
removeClass(ge('gp').firstChild, 'active');
        
_pads.gpClicked = false;
      }
      if (
window.audioPlayer && audioPlayer.controls && audioPlayer.controls.pd && audioPlayer.controls.pd.status && audioPlayer.controls.pd.status.tt) {
        
hide(audioPlayer.controls.pd.status.tt.container);
      }
    }
    if (
_pads.topLoad) {
      
removeClass(ge('head_'+(_pads.shown == 'mus' ? 'music' : 'games')), 'over');
    }

    if (
_pads.layerBG) {
      
re(_pads.layerBG);
      
_pads.layerBG = 0;
    }

    var 
lnk = ge('l_' + _pads.shown), flnk = _fMenuLnks[_pads.shown];
    
removeClass(domFC(lnk), 'left_nav_over');
    
removeClass(flnk, 'fmenu_item_over');
    if (
vk.counts[_pads.shown] < 0) {
      
hide(lnk, flnk);
    } else if (
vk.counts[_pads.shown] == 0 && !geByClass1('left_count_persist', lnk)) {
      
hide(flnk);
    }

    
_pads.shown = 0;
    
updGlobalPlayer();
    if (
browser.msie && browser.version < 9) {
      
Pads.hidden();
    } else {
      
animate(_pads.wrap, {opacity: 0}, 200, Pads.hidden);
    }

    return 
true;
  },
  
boxHide: function() {
    
curBox().hide();
    
Pads.hide();
  },
  
hidden: function() {
    
Pads.deinit();
    
re(_pads.wrap);
    if (
_pads.scroll) _pads.scroll.destroy();
    
_pads.scroll = _pads.cont = _pads.content = _pads.wrap = 0;
  },

  
lock: function(el) {
    if (
el.tagName == 'A') {
      
el.saved = val(el);
      
val(el, '<span class="progress_inline"></span>');
    } else if (
el.className == 'button') {
      
addClass(domPN(el), 'pad_btn_prg');
    } else {
      
lockButton(el);
    }
  },
  
unlock: function(el) {
    if (
el.saved) {
      
val(el, el.saved);
      
el.saved = false;
    } else if (
el.className == 'button') {
      
removeClass(domPN(el), 'pad_btn_prg');
    } else {
      
unlockButton(el);
    }
  },
  
invalidate: function(id) {
    
delete(_pads.cache[id || _pads.shown]);
  },
  
preloadMore: function() {
    if (
_pads.cur.more !== undefined || !isVisible('pad_more')) return;
    
_pads.cur.more = 'load';
    
ajax.post('pads.php', {act: 'pad', offset: _pads.cur.offset, pad_id: _pads.shown, pad_section: _pads.cur.sect || 0}, {
      
onDone: function(rows, all) {
        var 
sh = (_pads.cur.more == 'show');
        
_pads.cur.more = rows;
        
_pads.cur.all = all;
        if (
sh) Pads.more();
      }
    });
  },
  
feed: function(rows, all, up) {
    var 
c = ce('div', {innerHTML: rows}), ids = [], r = ge('pad_rows'), f = r.firstChild;
    if (!
rows || all) hide('pad_more');
    if (
up && !ge(domLC(c).id)) {
      
val(r, rows);
      
Pads.init(_pads.shown);
      return;
    }
    for (var 
el = domFC(c); el; el = domFC(c)) {
      ++
_pads.cur.offset;
      if (
ge(el.id)) {
        if (
up) {
          --
_pads.cur.offset;
          break;
        }
        
re(el);
        continue;
      }
      if (
up) {
        
r.insertBefore(el, f);
        
Pads.invalidate();
      } else {
        
r.appendChild(el);
      }
      if (
hasClass(el, 'pad_msg_new')) {
        
ids.push(el.id.replace('pad_msg', ''));
      } else if (
hasClass(el, 'pad_ap_new')) {
        
ids.push(el.id.replace(/pad_apn_d+_/, ''));
      }
    }
    
Pads.updateHeight();
    if (
_pads.shown == 'msg') {
      
Pads.msgMark(ids);
    } else if (
_pads.shown == 'ap') {
      
Pads.apMark(ids);
    }
  },
  
more: function(ev) {
    if (
checkEvent(ev) === true) return;
    if (
_pads.cur.more !== undefined) {
      if (
_pads.cur.more == 'load') {
        
_pads.cur.more = 'show';
      } else if (
_pads.cur.more != 'show') {
        
Pads.feed(_pads.cur.more, _pads.cur.all);
        
delete(_pads.cur.more);
        
Pads.preloadMore();
      }
    } else {
      
_pads.cur.more = 'show';
      
Pads.preloadMore();
    }
    return 
ev ? cancelEvent(ev) : false;
  },
  
scroll: function() {
    if (
_pads.shown == 'mus') {
      var 
more = ge('pad_more_audio');
      if (!
more || !isVisible(more) || !Pads.showAudios) return;
      if (
_pads.content.scrollTop + _pads.content.offsetHeight > more.offsetTop) {
        
Pads.showAudios();
      }
      return;
    }
    var 
more = ge('pad_more');
    if (!
more || !isVisible(more)) return;
    if (
_pads.content.scrollTop > 0) {
      
Pads.preloadMore();
    }
    if (
_pads.content.scrollTop + _pads.content.offsetHeight > more.offsetTop) {
      
Pads.more();
    }
  },

  
init: function(id) {
    var 
el = ge('pad_rows');
    if (
el && domFC(el)) {
      
extend(_pads.cur, {
        
processed: {},
        
savedcnts: {},
        
offset: el.childNodes.length
      
});
    }
    
Pads.updateHeight(id);
  },
  
update: function() {
    if (
_pads.scroll) _pads.scroll.update(false, true);
  },

  
showTip: function(id, over) {
    var 
place = geByClass1('pad_' + _pads.shown + '_btns'), el = _pads.cur.tipEl;

    if (!
place || !el) return;

    if (!
over) {
      if (((
el || {}).tt || {}).hide) el.tt.hide();
      return;
    }

    if (
domPN(el) != place) {
      
place.insertBefore(el, domFC(el));
    }

    if ((
el.tt || {}).show) {
      
el.tt.show();
      return;
    }

    
showTooltip(el, {
      
text: _pads.cur.tip,
      
className: 'pad_submit_tt rich wall_tt',
      
shift: [3, 15, 13],
      
forcetodown: 1,
      
slide: 15,
      
showdt: 400,
      
hidedt: 400,
      
hasover: 1,
      
onCreate: function () {
        var 
els = Array.prototype.slice.apply(geByClass('radiobtn', ge('pad_submit_hint_opts'))), val = _pads.cur.subm ? 1 : 0;
        
addClass(els[val], 'on');
        
removeClass(els[1 - val], 'on');
        
radioBtns.pad_submit = {
          
els: els,
          
val: val
        
};
      }
    });
  },
  
submitChange: function(newval) {
    
_pads.cur.subm = newval;
    if (
_pads.cache[_pads.shown]) {
      
_pads.cache[_pads.shown].subm = newval;
    }
    var 
url = (_pads.shown == 'msg') ? 'al_im.php' : 'al_wall.php';
    
ajax.post(url, {act: 'a_save_ctrl_submit', value: newval, hash: _pads.hash});
  },
  
onSubmit: function(rf, e, cb) {
    
e = e || window.event;
    if (
e.keyCode == KEY.RETURN || e.keyCode == 10) {
      if (
_pads.cur.subm && (e.ctrlKey || browser.mac && e.metaKey) ||
          !
_pads.cur.subm && !e.shiftKey && !(e.ctrlKey || browser.mac && e.metaKey)) {
        
cb();
        return 
cancelEvent(e);
      }
    }
    if (
e.ctrlKey && e.keyCode == KEY.RETURN) {
      var 
v = val(rf);
      if (
typeof rf.selectionStart == 'number' && typeof rf.selectionEnd == 'number') {
        var 
start = rf.selectionStart;
        
rf.value = v.slice(0, start) + "n" + v.slice(rf.selectionEnd);
        
rf.selectionStart = rf.selectionEnd = start + 1;
      } else if (
document.selection && document.selection.createRange) {
        
rf.focus();
        var 
range = document.selection.createRange();
        
range.text = "rn";
        
range.collapse(false);
        if (
browser.opera) {
          
range.moveEnd('character', 0);
          
range.moveStart('character', 0);
        }
        
range.select();
      }
      
rf.autosize.update();
      
setTimeout(function () {
        
rf.autosize.update();
      }, 
0);
      return 
false;
    }
  },

  
updateHeight: function(id) {
    var 
el = ge('pad_rows'), lh = intval(window.lastWindowHeight);
    if (!
el) {
      
_pads.restrict = [0, (_pads.height = _pads.wrap.offsetHeight)];
      return;
    }

    var 
wh, ct = _pads.content.offsetTop, oh = _pads.content.offsetHeight;
    switch (
id || _pads.shown) {
    case 
'fr':
    case 
'gr':
      var 
ch = el.childNodes, l = ch.length, i = Math.min(2, l - 1);
      
wh = ch[i].offsetTop + ch[i].offsetHeight - (l > 3 ? 1 : 0);
    break;

    case 
'ph':
    case 
'vid':
      
wh = 520;
    break;

    case 
'mus':
      
wh = 430;
      var 
barHeight = getXY('page_layout')[1];
      if (
lh) wh = Math.max(Math.min(wh, lh - 104 - (hasClass(_pads.arrow, 'right') ? 12 : 46) + barHeight), 200);
    break;

    case 
'msg':
      
wh = 520;

      
extend(_pads, {
        
editing: {}
      });
      var 
ids = [];
      for (var 
i = domFC(el); i; i = domNS(i)) {
        if (
hasClass(i, 'pad_msg_new')) {
          
ids.push(i.id.replace('pad_msg', ''));
        }
      }
      
Pads.msgMark(ids);
    break;

    case 
'nws':
      
wh = 520;

      
extend(_pads, {
        
editing: {}
      });
      
handlePageCount('nws', 0, 'feed', 'section=notifications');
    break;

    case 
'ap':
      var 
ch = el.childNodes, l = ch.length, i = Math.min(3, l - 1);
      
wh = ch[i].offsetTop + ch[i].offsetHeight - (l > 4 ? 1 : 0);

      var 
ids = [];
      for (var 
i = domFC(el); i; i = domNS(i)) {
        if (
hasClass(i, 'pad_ap_new')) {
          
ids.push(i.id.replace(/pad_apn_d+_/, ''));
        }
      }
      
Pads.apMark(ids);
    break;
    }
    
_pads.height = _pads.wrap.offsetHeight;
    if (
lh && (id || _pads.shown) != 'mus') {
      
wh = Math.max(Math.min(wh, lh - (_pads.height - oh) - 11), 150);
    }
    
wh = Math.min(el.offsetHeight, wh);
    
setStyle(_pads.content, {height: wh});
    
_pads.height += wh - oh;
    
_pads.restrict = [ct, ct + wh];

    
Pads.update();
  },

  
frDone: function(uid, fail, text) {
    if (
fail) {
      
text = '<span class="pad_error">' + text + '</span>';
      if (
_pads.cur.processed[uid] > 0) {
        
delete(_pads.cur.processed[uid]);
      }
    } else if (
_pads.cur.processed[uid] > 0 && vk.counts.fr >= _pads.cur.savedcnts[uid]) {
      
Pads.decr('fr');
      for (var 
i in _pads.cur.savedcnts) {
        --
_pads.cur.savedcnts[i];
      }
    }
    
delete(_pads.cur.savedcnts[uid]);
    var 
el = ge('pad_fr' + uid), btns = geByClass1('pad_fr_btns', el) || geByClass1('pad_fr_result', el);
    
domPN(btns).replaceChild(ce('div', {
      
innerHTML: text,
      
className: 'pad_fr_result'
    
}), btns);
    return 
true;
  },
  
frProcess: function(el, uid, res) {
    if (!
_pads.cur.processed[uid]) {
      
_pads.cur.processed[uid] = 1;
      
_pads.cur.savedcnts[uid] = vk.counts.fr;
      --
_pads.cur.offset;
    } else if (
res != -2) {
      return;
    } else {
      
_pads.cur.processed[uid] = -1;
    }
    var 
act = (res == -2 ? 'report_spam' : (res == -1 ? 'hide_suggestion' : (res ? 'add' : 'remove')));
    
ajax.post('al_friends.php', {act: act, mid: uid, from: 'pad', hash: _pads.hash}, {
      
onDone: Pads.frDone.pbind(uid, false),
      
onFail: Pads.frDone.pbind(uid, true),
      
showProgress: Pads.lock.pbind(el),
      
hideProgress: Pads.unlock.pbind(el)
    });
    
Pads.invalidate();
  },
  
frPhotoOut: function(el) {
    var 
o = domFC(el);
    if (!
o || o.tagName != 'A' || o.className != 'pad_fr_phbig') return;

    
clearTimeout(o.hideTO);
    
o.hideTO = setTimeout(function() {
      
animate(o, {marginTop: 75}, 200);
      
delete(_pads.frPhotoShown[o._uid]);
    }, 
150);
  },
  
frPhotoClick: function(uid, ev) {
    if (
checkEvent(ev) !== false) return;

    var 
ch = _pads.frPhotoCache[uid];
    if (
ch == 'load' || ch == 'show') {
      
_pads.frPhotoCache[uid] = 'show';
      return 
cancelEvent(ev);
    }
    if (!
ch) return;
    return 
showPhoto(ch._id, 'album' + uid + '_0/rev', extend({jumpTo: {z: 'albums' + uid}}, ch), ev);
  },
  
frPhotoOver: function(el, uid) {
    if (!
window.lang || !lang.global_photo_full_size || browser.mobile) return;

    if (!
_pads.frPhotoCache) extend(_pads, {frPhotoCache: {}, frPhotoShown: {}});

    var 
o = domFC(el), ch = _pads.frPhotoCache[uid];
    if (
o.tagName != 'A' || o.className != 'pad_fr_phbig') {
      (
o = el.insertBefore(ce('a', {className: 'pad_fr_phbig', href: ch && ch._id ? ('/photo' + ch._id + '?all=1') : ('/albums' + uid), innerHTML: '<span class="pad_fr_phlabel">' + getLang('global_photo_full_size') + '</span>'}), el.firstChild)).onclick = Pads.frPhotoClick.pbind(uid);
      
o._uid = uid;
    }

    
clearTimeout(o.hideTO);
    
animate(o, {marginTop: 50}, {duration: 200, transition: Fx.Transitions.easeOutCirc});
    
_pads.frPhotoShown[uid] = o;

    if (
ch === undefined) {
      
_pads.frPhotoCache[uid] = 'load';
      
ajax.post('al_photos.php', {act: 'fast_get_photo', oid: uid}, {onDone: function(res) {
        if (!
res) {
          
el.onmouseover = function() {};
          
re(el.firstChild);
          return;
        }
        var 
sh = (_pads.frPhotoCache[uid] == 'show');
        
_pads.frPhotoCache[uid] = res;
        
o.href = '/photo' + res._id + '?all=1';
        if (
sh) Pads.frPhotoClick(uid);
      }, 
onFail: function() {
        
el.onmouseover = function() {};
        
re(el.firstChild);
        return 
true;
      }});
    }

    if (!
el.onmouseout) el.onmouseout = Pads.frPhotoOut.pbind(el);
  },

  
// called in photoview.js
  
phDone: function(ph, fail, text) {
    if (
fail) {
      
text = '<span class="pad_error">' + text + '</span>';
      if (
_pads.cur.processed[ph] > 0) {
        
delete(_pads.cur.processed[ph]);
      }
    } else if (
_pads.cur.processed[ph] > 0 && vk.counts.ph >= _pads.cur.savedcnts[ph]) {
      
Pads.decr('ph');
      for (var 
i in _pads.cur.savedcnts) {
        --
_pads.cur.savedcnts[i];
      }
    }
    
delete(_pads.cur.savedcnts[ph]);

    var 
el = ge('pad_ph' + ph), btns = geByClass1('pad_ph_btns', el) || geByClass1('pad_ph_result', el);
    if (!
el) return;

    
geByClass1('pad_ph_lnk', el).href = '/photo' + ph;
    
domPN(btns).replaceChild(ce('div', {
      
innerHTML: text,
      
className: 'pad_ph_result'
    
}), btns);
    return 
true;
  },
  
phProcess: function(el, ph, res) {
    if (!
_pads.cur.processed[ph]) {
      
_pads.cur.processed[ph] = 1;
      
_pads.cur.savedcnts[ph] = vk.counts.ph;
      --
_pads.cur.offset;
    } else if (
res != -2) {
      return;
    } else {
      
_pads.cur.processed[ph] = -1;
    }
    var 
act = (res == -2 ? 'spam_photo' : (res ? 'confirm_tag' : 'delete_tag'));
    
ajax.post('al_photos.php', {act: act, photo: ph, from: 'pad', hash: _pads.hash}, {
      
onDone: Pads.phDone.pbind(ph, false),
      
onFail: Pads.phDone.pbind(ph, true),
      
showProgress: Pads.lock.pbind(el),
      
hideProgress: Pads.unlock.pbind(el)
    });
    
Pads.invalidate();
    for (var 
i in cur.pvData || {}) {
      if (
i.match(/^[a-f0-9]+$/)) {
        
delete(cur.pvData[i]);
      }
    }
    for (var 
i in ajaxCache) {
      if (
i.match(//al_photos.php#act=show&list=[a-f0-9]+&/)) {
        
delete(ajaxCache[i]);
      }
    }
  },


  
// called in videoview.js
  
vidDone: function(vid, fail, text) {
    if (
fail) {
      
text = '<span class="pad_error">' + text + '</span>';
      if (
_pads.cur.processed[vid] > 0) {
        
delete(_pads.cur.processed[vid]);
      }
    } else if (
_pads.cur.processed[vid] > 0 && vk.counts.vid >= _pads.cur.savedcnts[vid]) {
      
Pads.decr('vid');
      for (var 
i in _pads.cur.savedcnts) {
        --
_pads.cur.savedcnts[i];
      }
    }
    
delete(_pads.cur.savedcnts[vid]);

    var 
el = ge('pad_vid' + vid), btns = geByClass1('pad_vid_btns', el) || geByClass1('pad_vid_result', el);
    if (!
el) return;

    
domPN(btns).replaceChild(ce('div', {
      
innerHTML: text,
      
className: 'pad_vid_result'
    
}), btns);
    return 
true;
  },
  
vidProcess: function(el, vid, res) {
    if (!
_pads.cur.processed[vid]) {
      
_pads.cur.processed[vid] = 1;
      
_pads.cur.savedcnts[vid] = vk.counts.vid;
      --
_pads.cur.offset;
    } else if (
res != -2) {
      return;
    } else {
      
_pads.cur.processed[vid] = -1;
    }
    var 
act = (res == -2 ? 'spam_video' : (res ? 'confirm_tag' : 'delete_tag'));
    
ajax.post('al_video.php', {act: act, video: vid, from: 'pad', hash: _pads.hash}, {
      
onDone: Pads.vidDone.pbind(vid, false),
      
onFail: Pads.vidDone.pbind(vid, true),
      
showProgress: Pads.lock.pbind(el),
      
hideProgress: Pads.unlock.pbind(el)
    });
    
Pads.invalidate();
    if (
window.mvcur && !mvcur.mvShown) {
      
mvcur.mvData = false;
    }
    for (var 
i in ajaxCache) {
      if (
i.match(//al_video.php#act=show&autoplay=1&list=[a-f0-9]+&/)) {
        
delete(ajaxCache[i]);
      }
    }
  },

  
grShowMapBox: function(place) {
    if (
window.showZeroZoneBox && showZeroZoneBox('places', function() {
      
Pads.grShowMapBox(place);
    })) return;

    
showTabbedBox('places.php', {act: 'a_get_place_box', id: place}, {stat: ['places.css', 'map.css', 'maps.js', 'ui_controls.css', 'ui_controls.js']});
  },
  
grDone: function(gid, fail, text) {
    if (
fail) {
      
text = '<span class="pad_error">' + text + '</span>';
      if (
_pads.cur.processed[gid] > 0) {
        
delete(_pads.cur.processed[gid]);
      }
    } else if (
_pads.cur.processed[gid] > 0 && vk.counts.gr >= _pads.cur.savedcnts[gid]) {
      
Pads.decr('gr');
      for (var 
i in _pads.cur.savedcnts) {
        --
_pads.cur.savedcnts[i];
      }
    }
    
delete(_pads.cur.savedcnts[gid]);

    var 
el = ge('pad_gr' + gid), btns = geByClass1('pad_gr_btns', el) || geByClass1('pad_gr_result', el);
    
domPN(btns).replaceChild(ce('div', {
      
innerHTML: text,
      
className: 'pad_gr_result'
    
}), btns);
    return 
true;
  },
  
grProcess: function(el, gid, res) {
    if (!
_pads.cur.processed[gid]) {
      
_pads.cur.processed[gid] = 1;
      
_pads.cur.savedcnts[gid] = vk.counts.gr;
      --
_pads.cur.offset;
    } else if (
res != -2) {
      return;
    } else {
      
_pads.cur.processed[gid] = -1;
    }
    var 
act = (res == -2) ? 'spam' : (res ? 'enter' : 'leave'), context = (res == -1) ? '_decline' : ((res == 2) ? '_unsure' : '');
    
ajax.post('al_groups.php', {act: act, gid: gid, from: 'pad', context: context, hash: _pads.hash}, {
      
onDone: Pads.grDone.pbind(gid, false),
      
onFail: Pads.grDone.pbind(gid, true),
      
showProgress: Pads.lock.pbind(el),
      
hideProgress: Pads.unlock.pbind(el)
    });
    
Pads.invalidate();
  },

  
msgAnswer: function(el, msg, ev) {
    var 
t = ge('pad_msg_field' + msg), d = val('pad_msgd' + msg).split('/'), rcpts = '';
    if (
ev === false || ev === true) {
      if (!
t) return;
    } else {
      
ev = ev || window.event;
      for (var 
tg = ev.target || ev.srcElement; tg; tg = domPN(tg)) {
        if (
tg.tagName == 'A' || (tg.className || '').match(/(s|^)pad_msgr(s|$)/)) return;
      }
      if (
trim((
        
window.getSelection && window.getSelection() ||
        
document.getSelection && document.getSelection() ||
        
document.selection && document.selection.createRange().text || ''
      
).toString()).length) {
        return;
      }
    }
    if (
t) {
      if (
ev !== false && trim(val(t))) return (ev === true) ? true : elfocus(t);
      
re(geByClass1('pad_msgr', el));
      
removeClass(el, 'pad_msg_reply');
      
delete(_pads.editing[msg]);
      if (
ev !== true) {
        if (
isEmpty(_pads.editing) && _pads.layerBG) {
          
re(_pads.layerBG);
          
_pads.layerBG = 0;
        }
        
Pads.update();
      }
    } else {
      for (var 
i in _pads.editing) {
        
Pads.msgAnswer(ge('pad_msg' + i), i, true);
      }
      if (
d[1]) {
        
rcpts = '<a onclick="showBox('al_im.php', {act: 'a_show_members_box', chat: ' + (intval(d[0]) - 2e9) + '}, {stat: ['im.css', 'boxes.css']})" class="pad_msg_rcpts fl_l">' + getLang('mail_chat_X_rcpts', intval(d[1])) + '</a>';
      }
      var 
c = geByClass1('pad_msg_wrap', el).appendChild(ce('div', {
        
className: 'pad_msga pad_msgr',
        
innerHTML: val('pad_msg_reply_tpl').replace('{field}', '
<textarea onkeydown="Pads.onSubmit(this, event, Pads.msgSend.pbind(geByTag1('
button', this.parentNode), ' + msg + '))" id="pad_msg_field' + msg + '" class="pad_msg_field"></textarea>
<div class="pad_msg_btns clear_fix">
  <div class="pad_msg_btn button_blue fl_l">
    <button onclick="Pads.msgSend(this, ' 
+ msg + ')" onmouseover="Pads.showTip(' + msg + ', 1)" onmouseout="Pads.showTip(' + msg + ', 0)">' + getLang('global_send') + '</button>
  </div>' 
+ rcpts + '
</div>'
)
      }));
      
t = ge('pad_msg_field' + msg);
      
addClass(el, 'pad_msg_reply');
      
autosizeSetup(t, {minHeight: 31, onResize: Pads.update});
      
_pads.editing[msg] = 1;

      if (!
_pads.layerBG) {
        
_pads.layerBG = bodyNode.appendChild(ce('div', {id: 'pad_layer_bg', className: 'fixed', onclick: Pads.msgHide}));
      }

      var 
dy = c.offsetTop + c.offsetHeight - _pads.content.scrollTop - _pads.content.offsetHeight + 15, d = function() {
        
Pads.update();
        
elfocus(t);
      };
      if (
dy > 0) {
        
animate(_pads.content, {scrollTop: (_pads.content.scrollTop + dy)}, 200, d);
      }  else {
        
d();
      }
    }
  },
  
msgHide: function(e) {
    
e = e || window.event;
    if (
e.target != ge('pad_layer_bg')) return;
    for (var 
i in _pads.editing) {
      if (
trim(val('pad_msg_field' + i))) {
        return 
showFastBox(getLang('global_warning'), getLang('mail_are_sure_close'), getLang('mail_pad_cancel'), Pads.boxHide, getLang('global_cancel'));
      }
    }
    
Pads.hide();
  },
  
msgMark: function(ids) {
    if (!
ids.length) return;
    
ajax.post('al_mail.php', {act: 'a_mark', mark: 'read', msgs_ids: ids.join(','), hash: _pads.hash}, {
      
onDone: function(res, cnt) {
        
handlePageCount('msg', cnt);
      }
    });
  },
  
msgDone: function(msg, fail, text) {
    var 
c = ge('pad_msg' + msg);
    if (
fail) {
      var 
f = geByClass1('pad_msg_error', c), h = 0;
      if (
f) {
        
h -= f.offsetHeight;
      } else {
        var 
w = geByClass1('pad_msga_wrap', geByClass1('pad_msgr', c));
        if (!
w) return;
        
f = w.insertBefore(ce('div', {className: 'pad_msg_error msg'}), domFC(w));
        
h = 8;
      }
      
val(f, text);
      
h += f.offsetHeight;
      if (
h) {
        
_pads.content.scrollTop += h;
        
Pads.update();
      }

      
setStyle(f, {backgroundColor: '#F4EBBD'});
      
animate(f, {backgroundColor: '#F9F6E7'}, 2000);
      
setTimeout(elfocus.pbind('pad_msg_field' + msg), 0);
    } else {
      if (
ge('pad_msg_field' + msg)) {
        
Pads.msgAnswer(ge('pad_msg' + msg), msg, false);
      }
      var 
w = geByClass1('pad_msg_wrap', c), a = geByClass1('pad_msga', c), n = se(text);
      if (
a) {
        
w.replaceChild(n, a);
      } else {
        
w.appendChild(n);
      }
    }
    return 
true;
  },
  
msgSend: function(el, msg) {
    if (
buttonLocked(el)) return;

    var 
text = trim(val('pad_msg_field' + msg));
    if (!
text) return elfocus('pad_msg_field' + msg);
    
ajax.post('al_mail.php', {
      
act: 'a_send',
      
to_id: intval(val('pad_msgd' + msg)),
      
from: 'pad',
      
hash: _pads.hash,
      
message: text
    
}, {
      
onDone: Pads.msgDone.pbind(msg, false),
      
onFail: Pads.msgDone.pbind(msg, true),
      
showProgress: Pads.lock.pbind(el),
      
hideProgress: Pads.unlock.pbind(el)
    })
    
Pads.invalidate();
  },

  
nwsAnswer: function(nws, ev, opts) {
    var 
op = _pads.editing[nws], t = ge('pad_nws_field' + nws), d = val('pad_nwsd' + nws).split('/'), el = ge('pad_nws' + nws);
    if (
ev === false || ev === true) {
      if (!
op) return;
    } else {
      
ev = ev || window.event;
      for (var 
tg = ev.target || ev.srcElement; tg; tg = domPN(tg)) {
        if (
tg.tagName == 'A' || (tg.className || '').match(/(s|^)pad_nwsr(s|$)/)) return;
      }
      if (
trim((
        
window.getSelection && window.getSelection() ||
        
document.getSelection && document.getSelection() ||
        
document.selection && document.selection.createRange().text || ''
      
).toString()).length) {
        return;
      }
    }
    if (
op) {
      if (
ev !== false) {
        var 
v = t ? val(t) : '';
        if (
trim(v) && op.greet.indexOf(v) !== 0) return (ev === true) ? true : elfocus(t);
      }
      if (
t) cleanElems(t);
      
re(geByClass1('pad_nwsr', el));
      
removeClass(el, 'pad_nws_reply');
      
delete(_pads.editing[nws]);
      if (
ev !== true) {
        if (
isEmpty(_pads.editing) && _pads.layerBG) {
          
re(_pads.layerBG);
          
_pads.layerBG = 0;
        }
        
Pads.update();
      }
    } else {
      for (var 
i in _pads.editing) {
        
Pads.nwsAnswer(i, true, _pads.editing[i]);
      }
      
addClass(el, 'pad_nws_reply');
      
_pads.editing[nws] = opts;
      if (
opts.disabled) {
        var 
c = geByClass1('pad_nws_cont', el).appendChild(ce('div', {
          
className: 'pad_nwsa pad_nwsr',
          
innerHTML: val('pad_nws_dis_tpl').replace('{text}', opts.disabled)
        }));
      } else {
        var 
c = geByClass1('pad_nws_cont', el).appendChild(ce('div', {
          
className: 'pad_nwsa pad_nwsr',
          
innerHTML: val('pad_nws_reply_tpl').replace('{field}', '
<textarea onkeydown="Pads.onSubmit(this, event, Pads.nwsSend.pbind(geByTag1('
button', this.parentNode), '' + nws + ''))" id="pad_nws_field' + nws + '" class="pad_nws_field" placeholder="' + opts.ph + '">' + opts.greet + '</textarea>
<div class="pad_nws_btns clear_fix">
  <div class="pad_nws_btn button_blue fl_l">
    <button onclick="Pads.nwsSend(this, '' + nws + '')" onmouseover="Pads.showTip('' + nws + '', 1)" onmouseout="Pads.showTip('' + nws + '', 0)">' 
+ opts.btn + '</button>
  </div>
</div>'
)
        }));
        
t = ge('pad_nws_field' + nws);
        
placeholderSetup(t, {back: true});
        
autosizeSetup(t, {minHeight: 31, onResize: Pads.update});
      }
      
// if (window.Wall) {
      //   Wall.initComposer(t, {
      //     lang: {
      //       introText: getLang('profile_mention_start_typing'),
      //       noResult: getLang('profile_mention_not_found')
      //     }
      //   });
      // }

      
if (!_pads.layerBG) {
        
_pads.layerBG = bodyNode.appendChild(ce('div', {id: 'pad_layer_bg', className: 'fixed', onclick: Pads.nwsHide}));
      }

      var 
dy = c.offsetTop + c.offsetHeight - _pads.content.scrollTop - _pads.content.offsetHeight + 15, d = function() {
        
Pads.update();
        if (
t) elfocus(t);
      };
      if (
dy > 0) {
        
animate(_pads.content, {scrollTop: (_pads.content.scrollTop + dy)}, 200, d);
      }  else {
        
d();
      }
    }
  },
  
nwsHide: function(e) {
    
e = e || window.event;
    if (
e.target != ge('pad_layer_bg')) return;
    for (var 
i in _pads.editing) {
      var 
v = val('pad_nws_field' + i);
      if (
trim(v) && _pads.editing[i].greet.indexOf(v) !== 0) {
        return 
showFastBox(getLang('global_warning'), getLang('news_are_sure_close'), getLang('news_pad_cancel'), Pads.boxHide, getLang('global_cancel'));
      }
    }
    
Pads.hide();
  },
  
nwsDone: function(nws, fail, text) {
    var 
c = ge('pad_nws' + nws);
    if (
fail) {
      var 
f = geByClass1('pad_nws_error', c), h = 0;
      if (
f) {
        
h -= f.offsetHeight;
      } else {
        var 
w = geByClass1('pad_nwsa_wrap', geByClass1('pad_nwsr', c));
        if (!
w) return;
        
f = w.insertBefore(ce('div', {className: 'pad_nws_error nws'}), domFC(w));
        
h = 8;
      }
      
val(f, text);
      
h += f.offsetHeight;
      if (
h) {
        
_pads.content.scrollTop += h;
        
Pads.update();
      }

      
setStyle(f, {backgroundColor: '#F4EBBD'});
      
animate(f, {backgroundColor: '#F9F6E7'}, 2000);
      
setTimeout(elfocus.pbind('pad_nws_field' + nws), 0);
    } else {
      if (
ge('pad_nws_field' + nws)) {
        
Pads.nwsAnswer(nws, false);
      }
      var 
w = geByClass1('pad_nws_cont', c), a = geByClass1('pad_nwsa', c), n = se(text);
      if (
a) {
        
w.replaceChild(n, a);
      } else {
        
w.appendChild(n);
      }
    }
    return 
true;
  },
  
nwsSend: function(el, nws) {
    if (
buttonLocked(el)) return;

    var 
opts = _pads.editing[nws], item = val('pad_nwsd' + nws), text = trim(val('pad_nws_field' + nws));
    if (!
text || opts.greet.indexOf(text) === 0) return elfocus('pad_nws_field' + nws);

    var 
params = extend({
      
act: 'post',
      
message: text,
      
from: 'pad',
      
item: item
    
}, opts.params || {});
    
ajax.post('al_wall.php', params, {
      
onDone: Pads.nwsDone.pbind(nws, false),
      
onFail: Pads.nwsDone.pbind(nws, true),
      
showProgress: Pads.lock.pbind(el),
      
hideProgress: Pads.unlock.pbind(el)
    });
    
Pads.invalidate();
  },
  
nwsTooltip: function(el, post) {
    var 
url = 'al_wall.php';

    if (!
post.indexOf('topic_comment')) {
      
url = 'al_board.php';
      
post = post.replace('topic_comment', '');
    } else {
      
post = post.replace('wall_reply', '').replace('wall', '');
    }

    
showTooltip(el, {
      
url: url,
      
params: extend({act: 'post_tt', post: post, self: 1, from: 'pad'}),
      
slide: 15,
      
shift: [35, -3, 0],
      
ajaxdt: 100,
      
showdt: 400,
      
hidedt: 200,
      
className: 'rich wall_tt'
    
});
  },

  
apMark: function(ids) {
    if (!
ids.length) return;
    
ajax.post('al_apps.php', {act: 'a_mark', mark: 'read', notif_ids: ids.join(','), hash: _pads.hash}, {
      
onDone: function(res, cnt) {
        
handlePageCount('ap', cnt);
      }
    });
  },
  
apDone: function(nid, fail, text) {
    if (
fail) {
      
text = '<span class="pad_error">' + text + '</span>';
      if (
_pads.cur.processed[nid] > 0) {
        
delete(_pads.cur.processed[nid]);
      }
    } else if (
_pads.cur.processed[nid] > 0 && vk.counts.ap >= _pads.cur.savedcnts[nid]) {
      
Pads.decr('ap');
      for (var 
i in _pads.cur.savedcnts) {
        --
_pads.cur.savedcnts[i];
      }
    }
    
delete(_pads.cur.savedcnts[nid]);
    var 
el = ge('pad_ap' + nid), btns = geByClass1('pad_ap_btns', el) || geByClass1('pad_ap_result', el);
    
domPN(btns).replaceChild(ce('div', {
      
innerHTML: text,
      
className: 'pad_ap_result'
    
}), btns);
    return 
true;
  },
  
apProcess: function(el, nid, res) {
    if (!
_pads.cur.processed[nid]) {
      
_pads.cur.processed[nid] = 1;
      
_pads.cur.savedcnts[nid] = vk.counts.ap;
      --
_pads.cur.offset;
    } else if (
res != -2 && res != -3 && res != -4) {
      return;
    } else {
      
_pads.cur.processed[nid] = -1;
    }
    var 
act = (res == -2 ? 'report_invite_spam' : (res == -1 ? 'a_reject_request' : (res == -3 ? 'a_request_ban_user' : (res == -4 ? 'deny_notifications' : 'delete_notif'))));
    
ajax.post('al_apps.php', {act: act, nid: nid, from: 'pad', hash: _pads.hash}, {
      
onDone: Pads.apDone.pbind(nid, false),
      
onFail: Pads.apDone.pbind(nid, true),
      
showProgress: Pads.lock.pbind(el),
      
hideProgress: Pads.unlock.pbind(el)
    });
    
Pads.invalidate();
  },
  
apRemoveAll: function(hash) {
    
ajax.post('apps', {act: 'a_remove_all_notifies', hash: hash, requests: 1}, {
      
onDone: function() {
        
Pads.decr('ap', true);
      }
    });
  }
};

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