Вход Регистрация
Файл: js/api/widgets/al_comments.js
Строк: 3794
<?php
WComments 
= {
  
getSectionParams: function () {
    var 
params = {
      
appcur.options.app,
      
limitcur.options.limit
    
};
    switch (
cur.section) {
      case 
'admin_browse':
        
params.act 'admin_browse';
        break;

      case 
'admin_bl':
        
params.act 'admin_bl';
        break;

      case 
'admin_updates':
        
params.act 'admin_updates';
        break;

      case 
'browse':
        
params.browse 1;
        
params.replies cur.options.replies;
        break;

      default: 
// page
        
params.page_query cur.options.page_query;
        
params.part 1;
    }
    
// debugLog(cur.section, params);
    
return params
  
},
  
showMore: function () {
    if (
cur.options.offset >= cur.options.count) {
      
hide('wcomments_more_link');
      return;
    }
    if (
cur.moreLoading) return;
    
cur.moreLoading true;
    var 
params extend(WComments.getSectionParams(), {
      
offsetcur.options.offset,
      
part1
    
});
    
ajax.post('al_widget_comments.php'params, {
      
onDone: function (optionsrows) {
        
ge('wcomments_posts').appendChild(ce('div', {innerHTMLrows}));
        
WComments.resizeWidget();
        
WComments.applyOptions(options);
        
cur.scrollbar && cur.scrollbar.update(falsetrue);
        
cur.moreLoading false;
      },
      
showProgress: function () {
        
hide('wcomments_more');
        
show('wcomments_more_progress');
        
cur.moreLoading true;
      },
      
hideProgress: function () {
        
hide('wcomments_more_progress');
        
show('wcomments_more');
        
cur.moreLoading false;
      }
    });
  },
  
switchSection: function (newSection) {
    var 
toAdmin = !newSection.indexOf('admin'),
        
curTab ge('wcomments_tab_' cur.section),
        
newTab ge('wcomments_tab_' newSection),
        
topLnk ge('wcomments_admin_link');

    
toggle('wcomments_admin_nav'toAdmin);
    
toggle('wcomments_form', !toAdmin);
    if (
curTab) {
      
curTab.className 'wcomments_tab';
    }
    
cur.section newSection;
    if (
newTab) {
      
newTab.className 'wcomments_tab_selected';
    }
    
removeEvent(topLnk'click');
    
topLnk.removeAttribute('onclick');
    if (
toAdmin) {
      
topLnk.innerHTML getLang('widgets_comments_moder_return');
      
topLnk.onclick = function () {
        
WComments.switchSection('page');
        return 
false;
      };
    } else {
      
topLnk.innerHTML getLang('widgets_comments_moder_browse');
      
topLnk.onclick = function () {
        
WComments.switchSection('admin_browse');
        return 
false;
      };
    }
    
ge('wcomments_posts').innerHTML '<div class="wcomments_posts_loading"></div>';
    
hide('wcomments_more_link');
    var 
params extend(WComments.getSectionParams(), {
      
// part: 1
    
});
    
ajax.post('al_widget_comments.php'params, {
      
onDone: function (optionsrows) {
        
ge('wcomments_posts').innerHTML rows;
        
cur.scrollbar && cur.scrollbar.update(falsetrue);
        
WComments.applyOptions(options);
      }
    });
  },
  
refresh: function () {
    var 
params extend(WComments.getSectionParams(), {
      
part1
    
});
    
ajax.post('al_widget_comments.php'params, {
      
onDone: function (optionsrows) {
        
ge('wcomments_posts').innerHTML rows;
        
WComments.applyOptions(options);
        
WComments.resizeWidget();
      },
      
showProgress: function() {
        
ge('wcomments_posts').innerHTML '<div class="wcomments_posts_loading"></div>';
        
hide('wcomments_more_link');
        
WComments.resizeWidget();
      },
      
hideProgress: function() {
      }
    });
  },
  
applyOptions: function (options) {
    if (
options.reply_names) {
      
cur.options.reply_names extend(cur.options.reply_names || {}, options.reply_names);
      
delete options.reply_names;
    }
    if (
options.head_count && cur.section != 'browse') {
      
ge('wcomments_count').innerHTML options.head_count;
      
delete options.head_count;
    }
    if (
options.script) {
      eval(
options.script);
      
delete options.script;
    }
    
extend(cur.optionsoptions);
    
toggle('wcomments_more_link'options.offset options.count);
  },
  
addToBl: function (midhashlink) {
    
ajax.post('al_widget_comments.php', {act'a_add_to_bl'idmidhashhashappcur.options.app}, {
      
onDone: function (summary) {
        
hide('wcomments_bl_label' mid);
        
link.onclick = function () {
          
WComments.delFromBl(midhashlink);
          return 
false;
        };
        
link.innerHTML getLang('widgets_remove_from_banlist');
      },
      
showProgress: function () {
        
hide(link);
        
show('wcomments_progress' mid);
      },
      
hideProgress: function () {
        
show(link);
        
hide('wcomments_progress' mid);
      }
    });
  },
  
delFromBl: function (midhashlink) {
    
ajax.post('al_widget_comments.php', {act'a_del_from_bl'idmidhashhashappcur.options.app}, {
      
onDone: function (summary) {
        
setStyle('wcomments_bl_label' mid'display''inline');
        
link.onclick = function () {
          
WComments.addToBl(midhashlink);
          return 
false;
        };
        
link.innerHTML getLang('widgets_restore_to_banlist');
      },
      
showProgress: function () {
        
hide(link);
        
show('wcomments_progress' mid);
      },
      
hideProgress: function () {
        
show(link);
        
hide('wcomments_progress' mid);
      }
    });
  },
  
deleteAllAndBan: function (post_idmidhashbtn) {
    
ajax.post('al_widget_comments.php', {act'a_add_to_bl'idmidhashhashappcur.options.app}, {
      
onDone: function (response) {
        
each(geByClass('wcomments_post'ge('wcomments_posts'), 'div'), function () {
          if (!
this.id.indexOf('post' mid) && this.id != 'post' post_id) {
            
hide(this);
          }
        });
        
ge('post_del' post_id).innerHTML response;
      },
      
showProgress: function () {
        
lockButton(btn);
      },
      
hideProgress: function () {
        
unlockButton(btn);
      }
    });
  },
  
showLikesBox: function (obj) {
    
cur.Rpc.callMethod('showBox''widget_like.php?' ajx2q({act'a_stats_box'objobjfrom'wcomments'appcur.options.appwidget_width620}), {heightwindow.outerHeight || screen.availHeight || 768widthwindow.outerWidth || screen.availWidth || 1028});
  },
  
resizeWidget: function () {
    if (!
cur.heightEl || !cur.Rpc) return;
    var 
size getSize(cur.heightEl)[1];
    if (
browser.msie && !browser.msie8 || browser.operasize += 15;
    if (
window.onBodyResizeonBodyResize();

    
// if (window.mentions_mod && size < 150 && window.mention) { // fix for mentions list
    //   if (mention.select.isVisible()) {
    //     size += Math.max(getSize(mention.select.list)[1] - 35, 0);
    //   }
    // }
    
cur.Rpc.callMethod('resize'size);
  },
  
auth: function () {
    var
      
screenX typeof window.screenX != 'undefined' window.screenX window.screenLeft,
      
screenY typeof window.screenY != 'undefined' window.screenY window.screenTop,
      
outerWidth typeof window.outerWidth != 'undefined' window.outerWidth document.body.clientWidth,
      
outerHeight typeof window.outerHeight != 'undefined' window.outerHeight : (document.body.clientHeight 22),
      
features 'width=554,height=207,left=' parseInt(screenX + ((outerWidth 554) / 2), 10) + ',top=' parseInt(screenY + ((outerHeight 207) / 2.5), 10);
      var 
active this.active window.open('/login.php?app=-1&layout=widgets''vk_openapi'features);
      function 
checkWnd() {
         if (
active.closed) {
           
window.gotSession(true);
         } else {
           
setTimeout(checkWnd1000);
         }
      }
      
checkWnd();
  },
  
initQTransport: function (options) {
    
window.curNotifier extend(options, {
      
lp_connectedfalse,
      
error_timeout1
    
});
    
WComments.lpInit();
    
WComments.lpStart();
  },
  
lpGetTransportWrap: function () {
    var 
queueCont ge('queue_transport_wrap');
    if (!
queueCont) {
      
queueCont ce('div', {id'queue_transport_wrap'});
      
utilsNode.appendChild(queueCont);
    }
    return 
queueCont;
  },
  
/* Long-poll methods */
  
lpInit: function () {
    if (
curNotifier.lpMakeRequest) return;
    
delete curNotifier.lpMakeRequest;
    
re('queue_transport_frame');
    
WComments.lpGetTransportWrap().appendChild(
      
ce('iframe', {
        
id'queue_transport_frame',
        
name'queue_transport_frame',
        
srccurNotifier.frame_path
      
})
    );
  },
  
lpStart: function () {
    
curNotifier.lp_started true;
    
WComments.lpCheck();
  },
  
lpStop: function () {
    
curNotifier.lp_started false;
    
clearTimeout(curNotifier.lp_check_to);
    
clearTimeout(curNotifier.lp_error_to);
  },
  
lpCheck: function () {
    if (!
curNotifier.lp_started) return;
    if (!
curNotifier.lpMakeRequest) {
      
curNotifier.lp_check_to setTimeout(this.lpCheck.bind(this), 1000);
      return;
    }
    
curNotifier.lpMakeRequest(curNotifier.frame_url, {
      
act'a_check',
      
tscurNotifier.timestamp,
      
keycurNotifier.key,
      
idcurNotifier.uid,
      
wait25
    
}, function (text) {
      if (!
curNotifier.lp_started) return;
      try {
        var 
success this.lpChecked(eval('(' text ')'));
        if (
success) {
          
this.lpCheck();
          
curNotifier.error_timeout 1;
        }
      } catch (
e) {
        
topError('Notify error: ' e.message);

        
curNotifier.lp_error_to setTimeout(this.lpCheck.bind(this), curNotifier.error_timeout 1000);
        if (
curNotifier.error_timeout 64) {
          
curNotifier.error_timeout *= 2;
        }
      }
    }.
bind(this), function (msg) {
//        topError('Notify error: ' + msg);

        
curNotifier.lp_error_to setTimeout(this.lpCheck.bind(this), curNotifier.error_timeout 1000);
        if (
curNotifier.error_timeout 64) {
          
curNotifier.error_timeout *= 2;
        }
    }.
bind(this));
  },
  
lpChecked: function(response) {
    
// debugLog('response', response);
    
var failed response.failed;
    if (
failed == 2) {
      
curNotifier.lp_error_to setTimeout(this.lpGetKey.bind(this), curNotifier.error_timeout 1000);
      if (
curNotifier.error_timeout 64) {
        
curNotifier.error_timeout *= 2;
      }
      return 
false;
    } else if (
failed) {
      throw 
getLang('global_unknown_error');
    }

    
curNotifier.timestamp response.ts;
    if (!
cur.section.indexOf('admin')) {
      return 
true;
    }
    if (
cur.options.fixed_height) {
      var 
scrollCont ge('wcomments_posts_wrap'),
          
postsCont ge('wcomments_posts'),
          
st scrollCont.scrollTopsh postsCont.offsetHeight;
    }
    
each (response.events, function (kv) {
      
WComments.pushEvent(v);
    });
    if (
cur.options.fixed_height) {
      if (
st 100) {
        
scrollCont.scrollTop st + (postsCont.offsetHeight sh);
      } else {
        
scrollCont.scrollTop 0;
      }
      
cur.scrollbar && cur.scrollbar.update(falsetrue);
    }
    return 
true;
  },
  
lpGetKey: function () {
    var 
stNow vkNow();
    
ajax.post('al_widget_comments.php', {act'a_get_key'idcurNotifier.uidappcur.options.apppage_querycur.options.page_query}, {
      
onDone: function (keyts) {
        
curNotifier.timestamp ts;
        
curNotifier.key key;
        
this.lpCheck();
      }.
bind(this),
      
onFail: function (code) {
        if (
code == 3) {
          
location.reload();
          return;
        }
        
curNotifier.error_timeout 64;
        
this.lp_error_to setTimeout(this.lpGetKey.bind(this), curNotifier.error_timeout 1000);
        if (
curNotifier.error_timeout 64) {
          
curNotifier.error_timeout *= 2;
        }
        return 
true;
      }.
bind(this)
    });
  },
  
pushEvent: function (ev_text) {
    var 
ev ev_text.split('<!>'), ev_ver ev[0], ev_type ev[1], post_id ev[2], el ge('post' post_id);
    if (
ev_ver != cur.options.qversion) {
      
location.reload();
      return;
    }
    switch (
ev_type) {
      case 
'new_post':
        if (
el) break;
        var 
cont ge('wcomments_posts'),
            
newEl ce('div', {innerHTMLWall.getNewPostHTML(evcur.options.is_admin)}).firstChild,
            
newCnt intval(ev[8]),
            
posts geByClass('wcomments_post'cont'div'),
            
lastPost posts && posts.length && posts[posts.length 1];

        
cont.insertBefore(newElcont.firstChild);
        
placeholderSetup(ge('reply_field' post_id));
        
setStyle(newEl, {backgroundColor'#FEFAE4'});
        
animate(newEl, {backgroundColor'#FFF'}, 6000);
        if (
cur.section != 'browse') {
          
val('wcomments_count'newCnt getLang('widgets_comments_top_count'newCnt) : getLang('widgets_comments'));
        }
        
lastPost && lastPost.parentNode.removeChild(lastPost);
        break;

      case 
'del_post':
        if (
el) {
          !
cur.wallMyDeleted[post_id] && hide(el);
          
cur.options.offset--;
        }
        break;

      case 
'res_post':
        
el && cur.options.offset++;
        break;

      case 
'new_reply':
        if (!
el || cur.wallMyReplied[post_id] || ge('post' ev[3])) break;

        var 
repliesEl ge('replies' post_id),
            
newEl ce('div', {innerHTMLWall.getNewReplyHTML(evcur.options.is_admin)}).firstChild,
            
highlight false;

        if (
isVisible('reply_link' post_id)) {
          
re('reply_link' post_id);
          
show('replies_wrap' post_id);
          
highlight true;
        } else {
          var 
openEl repliesEl.nextSiblingnewCnt geByClass('new_reply'repliesEl'div').length 1;
          if (!
cur.wallMyOpened[post_id]) {
            
addClass(newEl'new_reply');
            if (!
openEl || openEl.className != 'replies_open') {
              
openEl ce('div', {className'replies_open'onclickWall.openNewComments.pbind(post_id)});
              
repliesEl.parentNode.insertBefore(openElrepliesEl.nextSibling);
            }
            
openEl.innerHTML getLang('news_x_new_replies_more'Math.min(100newCnt));
            
openEl.newCnt newCnt;
          } else {
            if (
openEl && openEl.className == 'replies_open're(openEl);
            
highlight true;
            var 
headerEl geByClass1('wr_header'repliesEl'a'),
                
shown geByClass('reply'repliesEl'div').length 1,
                
total shown;
            if (
headerEl) {
              
total intval(headerEl.getAttribute('offs').split('/')[1]) + 1;
            }
            if (
total || shown total) {
              if (!
headerEl) {
                
repliesEl.insertBefore(headerEl ce('a', {className'wr_header'}), repliesEl.firstChild);
              }
              
Wall.updateRepliesHeader(post_idheaderElshowntotal);
            }
          }
        }
        
repliesEl.appendChild(newEl);
        if (
highlight) {
          
setStyle(newEl, {backgroundColor'#FEFAE4'});
          
animate(newEl, {backgroundColor'#FFF'}, 6000);
        }
        break;

      case 
'del_reply':
        !
cur.wallMyDeleted[post_id] && re(el);
        break;
    }
  },
  
updateMini: function () {
    if (
cur.options.mini == 'auto') {
      
cur.options.mini cur.heightEl.clientWidth 630;
    } else {
      
cur.options.mini intval(cur.options.mini) == 1;
    }
    
toggleClass('wcomments_posts''wide_wall_module', !cur.options.mini);
    
toggleClass(bodyNode'font_medium', !cur.options.mini);
  },
  
init: function (options) {
    
cur.options options;
    
extend(cur, {
      
oidoptions.user_id,
      
postTooptions.user_id,
      
heightElge('wcomments_page'),
      
fullPostView1,
      
fullPostHeight56,
      
noNavGotrue,
      
section'posts',
      
noAwayChecktrue
    
});
    
cur.section options.browse 'browse' 'posts';
    
Wall.init(options);
    
WComments.updateMini();
    if (
options.fixed_height) {
      if (
browser.msie6) {
        
setStyle('wcomments_posts_wrap', {heightoptions.fixed_height 127});
      } else {
        
setStyle('wcomments_posts_wrap', {maxHeightoptions.fixed_height 127});
      }
      
cur.scrollbar = new Scrollbar('wcomments_posts_wrap', {
        
moreWComments.showMore,
        
startDrag: function() {
          try {
            
cur.Rpc.callMethod('startDrag');
          } catch(
e) {}
        },
        
stopDrag: function() {
          try {
            
cur.Rpc.callMethod('stopDrag');
          } catch(
e) {}
        }
      });

      
cur.mouseMove = function(ev) {
        
cur.scrollbar.mouseMove(ev);
      }
      
cur.mouseUp = function() {
        
cur.scrollbar.mouseUp();
      }
    }
    if (
options.qtransport) {
      
WComments.initQTransport(options.qtransport);
    }
    
// Times update interval. For relative time correction
    
timeUpdateInt setInterval(function () {WComments.updateTimes();}, 10000);

    
cur.RpcMethods = {
      
onInit: function() {
        
setTimeout(function () {
          
WComments.resizeWidget();
        }, 
0);
        
setTimeout(function () {
          
WComments.resizeWidget();
        }, 
500);
      },
      
mouseMove: function(screenY) {
        
cur.mouseMove(intval(screenY));
      },
      
mouseUp: function() {
        
cur.mouseUp();
      },
      
chooseMedia: function() {
        var 
args = [];
        var 
argsUnclean = Array.prototype.slice.apply(arguments);
        for(var 
i in argsUnclean) {
          
args.push(cleanObj(argsUnclean[i]))
        }
        
cur.chooseMedia.apply(cur.chooseMediaargs);
      },
      
showMediaProgress: function() {
        var 
args = [cleanObj(arguments[0]), cleanObj(arguments[1]), cleanObj(arguments[2]), arguments[3]];
        
cur.showMediaProgress.apply(cur.showMediaProgressargs);
      }
    };
    try {
      
cur.Rpc = new fastXDM.Client(cur.RpcMethods, {safetrue});
      
cur.resizeInt setInterval(WComments.resizeWidget1000);
    } catch (
e) {
      
debugLog(e);
      
// Return scroll
    
}
    if (!
options.user_id) {
      
addEvent('send_post''click'WComments.auth);
      
addEvent('post_field''click focus'WComments.auth);
      
// addEvent(document, 'click', WComments.auth);
    
}
  },
  
langWordNumeric: function(numwordsarr) {
    if (
num words.length) {
      return 
words[num];
    }
    return 
langNumeric(numarr);
  },
  
updateTimes: function() {
    var 
timeNow intval(vkNow() / 1000), rm_class = [];
    
each(geByClass('rel_date_needs_update'ge('wcomments_posts'), 'span'), function(kv) {
      if (!
v) return;
      var 
timeRow intval(v.getAttribute('time')), diff timeNow timeRowtimeText v.getAttribute('abs_time');
      if (
diff 5) {
        
timeText getLang('news_just_now');
      } else if (
diff 60) {
        
timeText WComments.langWordNumeric(diffcur.lang.news_X_seconds_ago_wordscur.lang.news_X_seconds_ago);
      } else if (
diff 3600) {
        
timeText WComments.langWordNumeric(intval(diff 60), cur.lang.news_X_minutes_ago_wordscur.lang.news_X_minutes_ago);
      } else if (
diff 3600) {
        
timeText WComments.langWordNumeric(intval(diff 3600), cur.lang.news_X_hours_ago_wordscur.lang.news_X_hours_ago);
      } else {
        
rm_class.push(v);
      }
      
v.innerHTML timeText;
    });
    
each (rm_class, function () {
      
removeClass(this'rel_date_needs_update');
    });
  },
  
addAudioPreview: function(mediadata) {
    
stManager.add(['audioplayer.css']);
    var 
rnd Math.floor((Math.random()) * 1000000000), aid media '_' rndnfo data.info;
    return 
'
<div class="medadd_aud inl_bl" id="audio' 
aid '"><table cellspacing="0" cellpadding="0" width="100%"><tr>
  <td rowspan="2"><div class="medadd_aud_playwrap" onclick="playAudioNew('' + aid + '') + data">
    <div class="medadd_aud_play" id="play' 
aid '"></div>
    <input type="hidden" id="audio_info' 
aid '" value="' nfo '"/>
  </div></td>
  <td class="info medadd_aud_td medadd_aud_wid"><div class="title_wrap fl_l" onmouseover="setTitle(this)">
    <b class="medadd_aud_perf">' 
data.performer '</b> &ndash; <span class="title" id="title' aid '">' data.title ' </span>
  </div><div class="duration fl_r" onmousedown="if (window.audioPlayer) audioPlayer.switchTimeFormat('' + aid + '', event)">' 
data.duration '</div></td></tr><tr>
  <td class="medadd_aud_td"><div class="audio_back_line medadd_aud_ph"></div><div id="player' 
aid '" class="player" ondragstart="return false;" onselectstart="return false;">
    <table cellspacing="0" cellpadding="0" border="0" width="100%"><tr>
      <td class="medadd_aud_td medadd_aud_wid">
        <div id="audio_pr' 
aid '" class="audio_pr" onmouseover="addClass(this, 'over'); if (cur.hideTipTO) clearTimeout(cur.hideTipTO);" onmouseout="removeClass(this, 'over'); removeClass(this, 'down'); cur.hideTipTO = setTimeout(hide.pbind('audio_tip_wrap'), 100);" onmousedown="addClass(this, 'down'); audioPlayer.prClick(event);" onmouseup="removeClass(this, 'down')">
          <div id="audio_white_line' 
aid '" class="audio_white_line" onmousedown="audioPlayer.prClick(event);"></div>
          <div id="audio_back_line' 
aid '" class="audio_back_line" onmousedown="audioPlayer.prClick(event);"><!-- --></div>
          <div id="audio_load_line' 
aid '" class="audio_load_line" onmousedown="audioPlayer.prClick(event);"><!-- --></div>
          <div id="audio_pr_line' 
aid '" class="audio_progress_line" onmousedown="audioPlayer.prClick(event);">
            <div id="audio_pr_slider' 
aid '" class="audio_slider"><!-- --></div>
          </div>
        </div>
      </td><td class="medadd_aud_td">
        <div id="audio_vol' 
aid '" class="audio_vol" onmouseover="addClass(this, 'over')" onmouseout="removeClass(this, 'over'); removeClass(this, 'down')" onmousedown="addClass(this, 'down'); audioPlayer.volClick(event)" onmouseup="removeClass(this, 'down')">
          <div id="audio_vol_white_line' 
aid '" class="audio_vol_white_line" onmousedown="audioPlayer.volClick(event);"><!-- --></div>
          <div id="audio_vol_back_line' 
aid '" class="audio_load_line" onmousedown="audioPlayer.volClick(event);"><!-- --></div>
          <div id="audio_vol_line' 
aid '" class="audio_progress_line" onmousedown="audioPlayer.volClick(event);">
            <div id="audio_vol_slider' 
aid '" class="audio_slider" onmousedown="audioPlayer.volClick(event);"><!-- --></div>
          </div>
        </div>
      </td>
    </tr></table>
  </div></td>
</tr></table></div>'
;
  }
};



var 
Wall = {
  
checkTextLen: function(inpwarnforce) {
    return;
  },
  
checkPostLen: function(valforce) {
    return;
  },
  
showEditPost: function() {
    if (
cur.viewAsBox) {
      
setTimeout(function() { ge('post_field').blur() }, 0);
      return 
cur.viewAsBox();
    }

    if (
cur.editing === 0) return;
    if (
cur.withMentions && !cur.mentionsAdded) {
      
cur.mentionsAdded true;
      
stManager.add(['ui_controls.css''ui_controls.js''mentions.js'], function() {
        
initMentionClass();
        
cur.postMention = new MentionAutocomplete('post_field', {
          
minHeightcur.fullPostView ? (cur.fullPostHeight || 50) : 32,
          
introTextgetLang('profile_mention_start_typing'),
          
noResultgetLang('profile_mention_not_found'),
          
onSubmitWall.sendPost,
          
checkLenWall.checkPostLen,
          
onValueChange: (cur.wallAddMedia || {}).checkMessageURLs
        
});
        
addEvent(cur.postMention.rtaEl'focus'Wall.showEditPost);
        if (
ge('post_field').focused !== false) {
          
triggerEvent(ge('post_field'), 'focus');
        }
      });
    } else if (
cur.postMention) {
      
cur.postMention.options.minHeight cur.fullPostView ? (cur.fullPostHeight || 50) : 32;
    }
    
Wall.hideEditPostReply();
    
show('submit_post');
    
autosizeSetup('post_field', {minHeightcur.fullPostView ? (cur.fullPostHeight || 50) : 32});
    
cur.editing 0;
  },
  
hideEditPost: function(force) {
    
cur.editing false;
    var 
rf ge('post_field');
    if (
browser.opera_mobile || !rf || cur.fullPostView) return;
    if (!
force && rf.getValue && trim(rf.getValue())) return;
    
hide('submit_post');
    if (
rf && !rf.value) {
      if (
cur.postMention) {
        
cur.postMention.options.minHeight 14;
      }
      
setStyle(rf, {height14});
      if (
rf.phonsizerf.phonsize();
    }
  },
  
sendPost: function() {
    var 
addmedia cur.wallAddMedia || {}, media addmedia.chosenMedia || {}, medias addmedia.getMedias addmedia.getMedias() : [], share = (addmedia.shareData || {});
    var 
msg ge('post_field').getValue();
    var 
attachI 0;
    if (
share.initialPattern && (trim(msg) == share.initialPattern)) {
      
msg '';
    }

    var 
params = {
      
act'post',
      
messagemsg,
      
to_idcur.postTo,
      
type'widget_comments',
      
status_export'',
      
widget_appcur.options.app,
      
widget_page_urlcur.options.page_url,
      
widget_page_titlecur.options.page_title,
      
widget_page_desccur.options.page_desc,
      
widget_page_querycur.options.page_query,
      
hashcur.options.post_hash
    
};

    if (
isArray(media) && media.length) {
      
medias.push(clone(media));
    }

    if ((!
medias || !medias.length) && !msg) {
      
elfocus('post_field');
      return;
    }

    if (
medias.length) {
      var 
ret false;
      
each (medias, function (kv) {
        if (!
v) return;
        var 
type this[0], attachVal this[1];
        switch (
type) {
          case 
'poll':
            var 
poll addmedia.pollData();
            if (!
poll) {
              
ret true;
              return 
false;
            }
            
attachVal poll.media;
            
delete poll.media;
            
params extend(paramspoll);
            break;
          case 
'share':
            if (
share.failed || !share.url ||
                !
share.title && (!share.images || !share.images.length) && !share.photo_url) {
              if (
cur.shareLastParseSubmitted && vkNow() - cur.shareLastParseSubmitted 2000) {
                
ret true;
                return 
false;
              } else {
                return;
              }
            }
            
attachVal share.user_id '_' share.photo_id;
            if (
share.images && share.images.length) {
              
addmedia.uploadShare(Wall.sendPost);
              
ret true;
              return 
false;
            }
            if (
share.initialPattern && (trim(msg) == share.initialPattern)) {
              
params.message '';
            }
            
params extend(params, {
              
urlshare.url,
              
titlereplaceEntities(share.title),
              
descriptionreplaceEntities(share.description),
              
extrashare.extra,
              
extra_datashare.extraData,
              
photo_urlreplaceEntities(share.photo_url),
              
open_graph_data: (share.openGraph || {}).data,
              
open_graph_hash: (share.openGraph || {}).hash
            
});
            break;
          case 
'page':
            if (
share.initialPattern && (trim(msg) == share.initialPattern)) {
              
params.message '';
            }
            break;
          case 
'postpone':
            var 
ts val('postpone_date' addmedia.lnkId);
            
params extend(params, {postponets});
            
cur.postponedLastDate ts;
            
postponePost true;
            return;
        }
        if (
this[3] && trim(msg) == this[3]) {
          
params.message '';
        }
        
params['attach' + (attachI 1) + '_type'] = type;
        
params['attach' + (attachI 1)] = attachVal;
        
attachI++;
      });
      if (
ret) {
        return;
      }
    }

    
ajax.post('al_wall.php'params, {
      
onDone: function(post_id) {
        if (
post_id) {
          var 
params = {
            
act'a_post',
            
postpost_id,
            
hashcur.options.post_hash,
            
appcur.options.app,
            
limitcur.options.limit,
            
'export'isChecked('wcomments_export')
          };

          
ajax.post('al_widget_comments.php'params, {
            
onDone: function (optionsrows) {
              if (
cur.section == 'posts' && cur.Rpc) {
                
cur.Rpc.callMethod('publish''widgets.comments.new_comment'options.countoptions.last_commentoptions.dateoptions.full_hashoptions.pageId);
                
// cur.Rpc.callMethod('onChange', options.count, options.last_comment, options.date, options.full_hash, options.pageId);
              
}
              
ge('wcomments_posts').innerHTML rows;
              
WComments.applyOptions(options);
              
cur.scrollbar && cur.scrollbar.update(falsetrue);
            },
            
showProgress: function() {
              
lockButton(ge('send_post'));
            },
            
hideProgress: function() {
              
unlockButton(ge('send_post'));
            }
          });
        }

        var 
rf ge('post_field');
        if (
cur.withMentions) {
          var 
mention data(rf'mention');
          if (
mention) {
            
mention.rtaEl.innerHTML '';
            
hide(mention.cont);
            
show(rf);
          }
        }
        
rf.value '';
        
rf.blur();
        
rf.phonblur();
        
Wall.hideEditPost(true);
        if (
cur.wallAddMediacur.wallAddMedia.unchooseMedia();
        
hide('post_warn');
        return

        
// Wall.receive(rows, names);
      
},
      
showProgress: function() {
        
lockButton(ge('send_post'));
      },
      
hideProgress: function() {
        
unlockButton(ge('send_post'));
      }
    });
  },

  
_repliesLoaded: function(posthlrepliesnames) {
     var 
ge('replies' post), openEl r.nextSibling;
     if (
hl) {
      var 
el browser.msie6 pageNode : ((browser.chrome || browser.safari) ? bodyNode htmlNode);
      var 
r.offsetHeight;
      
r.innerHTML replies;
      
el.scrollTop intval(el.scrollTop) + (r.offsetHeight h);
      
setTimeout(Wall.highlightReply.pbind('post' hl), 0);
    } else {
      
r.innerHTML replies;
    }
    if (
openEl && openEl.className == 'replies_open') {
      
re(openEl);
    }
    
extend(cur.options.reply_namesnames);
  },
  
highlightReply: function(el) {
    
el ge(el);
    if (!
el) return;

    var 
hlfunc animate.pbind(el, {backgroundColor'#ECEFF3'}, 200, function() {
      
setTimeout(function() {
        
animate(el, {backgroundColor'#FFF'}, 200);
      }, 
1000);
    });

    var 
xy getXY(el), top xy[1] - (bodyNode.scrollTop || htmlNode.scrollTop || 0);
    if (
top 0) {
      var 
cont browser.msie6 pageNode : ((browser.chrome || browser.safari) ? bodyNode htmlNode);
      
animate(cont, {scrollTopcont.scrollTop top 50}, 300hlfunc);
    } else {
      
hlfunc();
    }
  },
  
showReply: function(postreply) {
    if (
cur.viewAsBox) return false;
    var 
ge('post' reply);
    if (
p) {
      
Wall.highlightReply(p);
    } else {
      
Wall.showReplies(postfalsereply);
    }
    return 
false;
  },
  
showReplies: function(postcounthlev) {
    if (
checkEvent(ev || window.event)) { return; }
    if (
cur.viewAsBox) return cur.viewAsBox();
    
hide('wrh_text' post);
    
cur.wallMyOpened[post] = (count != 3);
    
ajax.post('al_wall.php', {act'get_replies'postpostcountcount}, {
      
onDoneWall._repliesLoaded.pbind(posthl),
      
onFailshow.pbind('wrh_text' post),
      
progress'wrh_prg' post
    
});
    return 
false;
  },
  
showEditReply: function(post) {
    if (!
vk.id) {
      
WComments.auth();
      return 
false;
    }

    var 
rf ge('reply_field' post),
        
postEl ge('post' post),
        
fakeBox ge('reply_fakebox' post),
        
realBox ge('reply_box' post),
        
replyLink;

    if (
fakeBox) {
      
realBox se(rs(cur.wallTpl.reply_form, {post_idpost}));
      
fakeBox.parentNode.replaceChild(realBoxfakeBox);
      
rf ge('reply_field' post);
      !
browser.msie6 && placeholderSetup(rf, {pad: {margin0padding0}});
    }
    if (
cur.editing === post) {
      
elfocus(rf);
      return;
    }
    
Wall.hideEditPostReply();
    
addClass(postEl'reply_box_open');
    
setStyle('replies_wrap' post, {display''});
    
autosizeSetup(rf, {minHeightgeByClass1('reply_form_image'realBox'a').clientHeight 8});
    
Wall.replyFormHintUpdate(post);
    
cur.editing post;
    
setTimeout(elfocus.pbind(rf), 0);
  },
  
hideEditReply: function(post) {
    
cur.editing false;

    var 
rf ge('reply_field' post),
        
postEl ge('post' post),
        
replyName cur.reply_to && cur.options.reply_names[cur.reply_to[0]],
        
trim(val(rf)),
        
replyLink;
    if (!
rf) return;
    if (
replyName && isArray(replyName)) {
      if (!
|| !replyName[1].indexOf(v)) {
        
val(rf'');
        
'';
      }
    }
    if (
browser.opera_mobile || browser.safari_mobile || v) return;
    
removeClass(postEl'reply_box_open');
    if (
replyLink ge('reply_link' post)) {
      
hide('replies_wrap' post);
    }
    
rf.blur();
    if (!
rf.active) {
      
setStyle(rf, {height14});
    }
    
rf.phonblur && rf.phonblur();
    
val('reply_to' post'');
    
hide('reply_to_title' post);
    
cur.reply_to false;

    var 
point cur.replySubmitSettings;
    
point && point.tt && point.tt.destroy();
  },
  
replyTo: function(posttoMsgIdtoIdevent) {
    
Wall.showEditReply(post);
    
val('reply_to' posttoMsgId);
    
cur.reply_to = [toIdtoMsgId];
    var 
replyName cur.options.reply_names[toId];
    if (
isArray(replyName)) {
      
val('reply_to_title' postreplyName[0]);
      var 
rf ge('reply_field' post),
          
replyNameOld cur.reply_to && cur.options.reply_names[cur.reply_to[0]],
          
trim(val(rf));
      if (!
|| replyNameOld && isArray(replyNameOld) && !replyNameOld[1].indexOf(v)) {
        
val(rf, !checkEvent(event) ? replyName[1] : '');
      }
    } else {
      
val('reply_to_title' postreplyName);
    }
    
show('reply_to_title' post);
    
Wall.replyFormHintUpdate(post);
    return 
false;
  },
  
replySubmitTooltip: function (postover) {
    var 
box ge('reply_box' post),
        
place box && geByClass1('reply_hint'box'div'),
        
point cur.replySubmitSettings;

    if (!
place) return;

    if (!
point) {
      
point cur.replySubmitSettings ce('div', {className'reply_multiline_tt_point'});
    }
    if (!
over) {
      if (
point && point.tt && point.tt.hide) {
        
point.tt.hide();
      }
      return;
    }

    if (
point.parentNode == place && point.tt && point.tt.show) {
      
point.tt.show();
      return;
    }

    
point.tt && point.tt.destroy && point.tt.destroy();
    
place.insertBefore(pointplace.firstChild);
    var 
ctrlSubmit cur.wallTpl.reply_multiline 0,
        
hint rs(cur.wallTpl.reply_multiline_hint, {
      
enabledctrlSubmit 'on' '',
      
disabled: !ctrlSubmit 'on' ''
    
});

    
showTooltip(point, {
      
texthint,
      
className'reply_multiline_tt rich wall_tt',
      
shift: [31513],
      
forcetodown1,
      
slide15,
      
showdt400,
      
hidedt400,
      
hasover1,
      
onCreate: function () {
        
radioBtns.reply_submit = {
          
els: Array.prototype.slice.apply(geByClass('radiobtn'ge('reply_submit_hint_opts'))),
          
valhint 0
        
};
      }
    });
  },
  
onReplySubmitChanged: function (valuefrom) {
    
cur.wallTpl.reply_multiline value;
    if (
from) {
      var 
point cur.replySubmitSettings;
      
point && point.tt && point.tt.destroy();
    } else {
      
ajax.post('al_wall.php', {act'a_save_ctrl_submit'valuevaluehashcur.wallTpl.poll_hash})
      
window.Notifier && Notifier.lcSend('wall_reply_multiline', {valuevalue});
    }
    if (
cur.editing) {
      
Wall.replyFormHintUpdate(cur.editing);
    }
  },
  
replyFormHintUpdate: function (post) {
    var 
replyHint ge('reply_hint' post),
        
value cur.wallTpl.reply_multiline,
        
wrap ge('submit_reply' post),
        
btn ge('reply_button' post),
        
title ge('reply_to_title' post);
    if (!
replyHint) return;

    var 
wrap.clientWidth btn.clientWidth title.clientWidth 24;
    
val(geByTag1('span'replyHint), getLang('wall_reply_submit_hint_' + (value 1) + (300 '_more' '')));
    
setStyle(replyHint'width'w);
  },
  
onReplySubmit: function (poste) {
    if (
e.keyCode == KEY.RETURN || e.keyCode == 10) {
      if (
cur.wallTpl.reply_multiline && (e.ctrlKey || browser.mac && e.metaKey) ||
          !
cur.wallTpl.reply_multiline && !e.shiftKey && !(e.ctrlKey || browser.mac && e.metaKey)) {
        
Wall.sendReply(post);
        return 
cancelEvent(e);
      }
    }
    if (
e.ctrlKey && e.keyCode == KEY.RETURN) {
      var 
rf ge('reply_field' post), val(rf);
      if (
typeof rf.selectionStart == 'number' && typeof rf.selectionEnd == 'number') {
        var 
start rf.selectionStart;
        
rf.value v.slice(0start) + "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;
    }
  },
  
sendReply: function(post) {
    var 
rf ge('reply_field' post),
        
msg val(rf),
        
trim(msg),
        
replyNameparams;
    if (!
|| isArray(replyName = (cur.reply_to && cur.options.reply_names[cur.reply_to[0]])) && !replyName[1].indexOf(v)) {
      
elfocus('reply_field' post);
      return;
    }
    
val(rf'');
    
elfocus(rf);
    var 
post_hash ge('post_hash' post) ? ge('post_hash' post).value cur.options.post_hash;
    
cur.wallMyReplied[post] = 1;
    
cur.wallMyOpened[post] = 1;
    
ajax.post('al_wall.php'params = {
      
act'post',
      
typecur.wallType,
      
reply_topost,
      
reply_to_msgval('reply_to' post),
      
start_idval('start_reply' post),
      
messagemsg,
      
from'widget',
      
hashpost_hash
    
}, {
      
onDone: function(replyrepliesnames) {
        
cur.wallMyReplied[post] = 0;
        
re('reply_link' post);
        
hide('reply_warn' post);
        
Wall._repliesLoaded(postfalserepliesnames);
        
cur.wallMyReplies[reply] = {
          
messagemsg,
          
reply_toparams.reply_to,
          
reply_to_msgparams.reply_to_msg,
          
reply_to_userparams.reply_to_user
        
};
      },
      
onFail: function () {
        
newEl && re(newEl);
        
val(rfmsg);
      },
      
showProgresslockButton.pbind(ge('reply_button' post)),
      
hideProgressunlockButton.pbind(ge('reply_button' post))
    });


    var 
repliesEl ge('replies' post),
        
replyId = -(++cur.wallMyRepliesCnt);
        
newEl se(rs(cur.wallTpl.reply_fast, {
          
reply_id'0_' replyId,
          
messagemsg.replace(/n/g'<br/>'),
          
dateWall.getNowRelTime()
        }));

    if (
repliesEl && !isVisible(repliesEl) || ge('reply_link' post)) {
      
re('reply_link' post);
      
show('replies_wrap' post);
    } else {
      var 
openEl repliesEl.nextSibling;
      if (
openEl && openEl.className == 'replies_open') {
        
Wall.openNewComments(post);
      }
      var 
headerEl geByClass1('wr_header'repliesEl'a'),
          
shown geByClass('reply'repliesEl'div').length 1,
          
total shown;
      if (
headerEl) {
        
total intval(headerEl.getAttribute('offs').split('/')[1]) + 1;
      }
      if (
total || shown total) {
        if (!
headerEl) {
          
repliesEl.insertBefore(headerEl ce('a', {className'wr_header'}), repliesEl.firstChild);
        }
        
Wall.updateRepliesHeader(postheaderElshowntotal);
      }
    }
    
repliesEl.appendChild(newEl);
  },
  
postTooltip: function(elpostopts) {
    if (
cur.viewAsBox) return;

    
showTooltip(el, {
      
url'al_wall.php',
      
paramsextend({act'post_tt'postpost}, opts || {}),
      
slide15,
      
shift: [35, -30],
      
ajaxdt100,
      
showdt400,
      
forcetodown1,
      
hidedt200,
      
className'rich wall_tt'
    
});
  },

  
hideEditPostReply: function(e) {
    if (
cur.editing === false) return;
    var 
el = (&& e.target) ? e.target : {};
    var 
id el.id;
    if (
cur.editing) {
      if (!
|| !hasClass(el'reply_link') && id != 'reply_field' cur.editing && el.className != 'reply_to_link') {
        
Wall.hideEditReply(cur.editing);
      }
    } else if (!
cur.chosenMedia) {
      if (!
|| id != 'post_field') {
        
Wall.hideEditPost();
      }
    }
  },
  
deletePost: function(posthash) {
    
cur.wallMyDeleted[post] = 1;
    var 
ge('post' post);
    
ajax.post('al_wall.php', {
      
act'delete',
      
postpost,
      
hashhash,
      
from'widget',
      
appcur.options.app
    
}, {
      
onDone: function(msgoptions) {
        var 
geByClass1('post_table'r) || geByClass1('reply_table'r);
        var 
pd ge('post_del' post);
        if (
pd) {
          
pd.innerHTML msg;
          
show(pd);
        } else {
          
r.appendChild(ce('div', {id'post_del' postclassName'dld'innerHTMLmsg}));
        }
        if (
cur.section == 'posts' && cur.Rpc) {
          
cur.Rpc.callMethod('publish''widgets.comments.delete_comment'options.countoptions.last_commentoptions.dateoptions.full_hashoptions.pageId);
          
// cur.Rpc.callMethod('onChange', options.count, options.last_comment, options.date, options.full_hash, options.pageId);
        
}
        
hide(t);
      }
    });
    var 
btn ge('delete_post' post), myReply;
    if (
btn && btn.tt && btn.tt.destroy) {
      
btn.tt.destroy();
    }
    if (
myReply cur.wallMyReplies[post]) {
      
val('reply_field' myReply.reply_tomyReply.message);
      if (
myReply.reply_to_msg && myReply.reply_to_user) {
        
Wall.replyTo(myReply.reply_tomyReply.reply_to_msgmyReply.reply_to_user);
      } else {
        
Wall.showEditReply(myReply.reply_to);
      }
      
elfocus('reply_field' myReply.reply_to);
    }
  },
  
markAsSpam: function(posthash) {
    if (!
vk.id) {
      
WComments.auth();
      return 
false;
    }
    
ajax.post('al_wall.php', {
      
act'spam',
      
postpost,
      
hashhash
    
}, {
      
onDone: function(msg) {
        var 
ge('post' post), geByClass1('post_table'r) || geByClass1('reply_table'r);
        var 
pd ge('post_del' post);
        if (
pd) {
          
pd.innerHTML msg;
          
show(pd);
        } else {
          
r.appendChild(ce('div', {id'post_del' postclassName'dld'innerHTMLmsg}));
        }
        
hide(t);
      }
    });
    var 
btn ge('delete_post' post);
    if (
btn && btn.tt && btn.tt.el) {
      
btn.tt.destroy();
    }
  },
  
restorePost: function(posthash) {
    
cur.wallMyDeleted[post] = 0;
    
ajax.post('al_wall.php', {
      
act'restore',
      
postpost,
      
hashhash,
      
from'widget'
    
}, {
      
onDone: function(msg) {
        var 
pd ge('post_del' post);
        if (!
pd) return;
        var 
ge('post' post), geByClass1('post_table'r) || geByClass1('reply_table'r);
        
show(t);
        
hide(pd);
      }
    });
  },

  
checkPostClick: function (elevent) {
    
event event || window.event;
    if (!
el || !event) return false;
    var 
target event.target || event.srcElement,
        
8,
        
foundGood false,
        
classRE = /wall_post_text|post_media|event_share|public_share|group_share|feed_friends|feed_gifts|feed_videos|feed_explain_list|explain|feed_photos|feedback_row/;
    do {
      if (!
target ||
          
target == el ||
          
target.onclick ||
          
target.onmousedown ||
          
inArray(target.tagName, ['A''IMG''TEXTAREA''EMBED''OBJECT']) ||
          
inArray(target.className, ['play_new''page_video_inline_wrap']) ||
          (
foundGood target.className.match(classRE))
      ) {
        break;
      }
    } while (
i-- && (target target.parentNode));
    if (!
foundGood) {
      return 
true;
    }
    var 
sel trim((
      
window.getSelection && window.getSelection() ||
      
document.getSelection && document.getSelection() ||
      
document.selection && document.selection.createRange().text || ''
    
).toString());
    if (
sel) {
      return 
true;
    }
    return 
false;
  },
  
postClick: function (postevent) {
    var 
matches = (post || '').match(/^(-?d+)_(wall)?(d+)$/),
        
el ge('post' post);
    if (!
matches) return;
    if (
Wall.checkPostClick(elevent)) return;

    var 
moreLink geByClass1('wall_post_more'el'a');
    if (
moreLink && isVisible(moreLink)) {
      
moreLink.onclick();
      return;
    }
    if (
hasClass(ge('wcomments_posts'), 'no_post_click')) return;

    
window.open('wall' matches[1] + '_' matches[3], '_blank');
  },
  
checkReplyClick: function (elevent) {
    
event event || window.event;
    if (!
el || !event) return false;
    var 
target event.target || event.srcElement,
        
8,
        
foundGood false,
        
classRE = /reply_dived/;
    do {
      if (!
target ||
          
target == el ||
          
target.onclick ||
          
target.onmousedown ||
          
inArray(target.tagName, ['A''IMG''TEXTAREA''EMBED''OBJECT']) ||
          (
foundGood hasClass(target'reply_table'))
      ) {
        break;
      }
    } while (
i-- && (target target.parentNode));
    if (!
foundGood) {
      return 
true;
    }
    var 
sel trim((
      
window.getSelection && window.getSelection() ||
      
document.getSelection && document.getSelection() ||
      
document.selection && document.selection.createRange().text || ''
    
).toString());
    if (
sel) {
      return 
true;
    }
    return 
false;
  },
  
replyClick: function (postreplyeventanswering) {
    var 
oid intval(post),
        
matches = (post || '').match(/^(-?d+)_(wall)?(d+)$/),
        
el ge('post' oid '_' reply);
    if (!
matches) return;
    (
event || {}).cancelBubble true;
    if (
Wall.checkReplyClick(elevent)) return;

    var 
moreLink geByClass1('wall_reply_more'el'a');
    if (
moreLink && isVisible(moreLink)) {
      
removeClass(el'reply_moreable');
      
moreLink.onclick();
      return;
    }
    if (
answering) {
      
Wall.replyTo(postreplyansweringevent);
    }
  },
  
postOver: function(post) {
    var 
el ge('post' post);
    if (!
el || hasClass(el'one')) return;
    if (
post.match(/^(-?d+)_(wall)?(d+)$/)) {
      
addClass(el'wall_post_over');
    }
    if (!
vk.id) return;

    
Wall.showDeletePost(post);
  },
  
postOut: function(post) {
    var 
el ge('post' post);
    if (!
el || hasClass(el'one')) return;
    if (
post.match(/^(-?d+)_(wall)?(d+)$/)) {
      
removeClass(el'wall_post_over');
    }
    if (!
vk.id) return;

    if (!
el || hasClass(el'one')) return;
    
Wall.hideDeletePost(post);
  },
  
replyOver: function(post) {
    if (!
vk.id) return;
    var 
postParts post.split('_'),
        
reply postParts.join(postParts[0].match(/(-?d+)(photo|video|note|topic)/) ? '_reply' '_wall_reply'),
        
lnk ge('like_link' reply),
        
icon ge('like_icon' reply);

    if (!
lnk) {
      
Wall._animDelX(0.3undefinedpost'reply_delete');
      
Wall._animDelX(0.3undefinedpost'reply_edit');
      return;
    }

    if (
lnk.timeout) {
      
clearTimeout(lnk.timeout);
      
removeAttr(lnk'timeout');
    } else {
      
fadeTo(lnk2001);
      
Wall._animDelX(0.3undefinedpost'reply_delete');
      
Wall._animDelX(0.3undefinedpost'reply_edit');
      if (
hasClass(icon'no_likes')) {
        
setStyle(icon'visibility''visible');
        
animate(icon, {opacity0.4}, 200);
      }
    }
  },
  
replyOut: function(post) {
    if (!
vk.id) return;
    var 
postParts post.split('_'),
        
reply postParts.join(postParts[0].match(/(-?d+)(photo|video|note|topic)/) ?  '_reply' '_wall_reply'),
        
lnk ge('like_link' reply),
        
icon ge('like_icon' reply);

    if (!
lnk) {
      
Wall._animDelX(0undefinedpost'reply_delete');
      
Wall._animDelX(0undefinedpost'reply_edit');
      return;
    }

    
lnk.timeout setTimeout(function() {
      
removeAttr(lnk'timeout');
      
fadeTo(lnk2000);
      
Wall._animDelX(0undefinedpost'reply_delete');
      
Wall._animDelX(0undefinedpost'reply_edit');
      if (
hasClass(icon'no_likes')) {
        
animate(icon, {opacity0}, 200, function () {
          
hasClass(icon'no_likes') && (icon.style.visibility 'hidden');
        });
      }
    }, 
1);
  },
  
likeOver: function(post) {
    var 
icon ge('like_icon' post),
        
link ge('like_link' post),
        
count ge('like_count' post);

    if (!
icon) return;
    if (!
hasClass(icon'my_like') && !hasClass(icon'fw_my_like')) {
      
setTimeout(animate.pbind(icon, {opacity1}, 200false), 1);
    } else {
      
icon.style.visibility 'visible';
      
setStyle(icon, {opacity1});
    }

    var 
matches post.match(/(-?d+)(_?)(photo|video|note|topic|wall_reply|note_reply|photo_comment|video_comment|topic_comment|)(d+)/)
        
like_obj = (matches[3] || 'wall') + matches[1] + '_' matches[4],
        
linkW link.clientWidth || link.offsetWidth,
        
ttW 230,
        
leftShift ttW - (icon.parentNode.clientWidth || icon.parentNode.offsetWidth) + 4,
        
pointerShift ttW - (count.clientWidth || count.offsetWidth) - 14;

    
showTooltip(icon.parentNode, {
      
url'like.php',
      
params: {act'a_get_stats''object'like_objfrom'wcomments'},
      
slide15,
      
shift: [leftShift59],
      
ajaxdt100,
      
showdt400,
      
hidedt200,
      
tip: {
        
over: function() {
          
Wall.postOver(post);
          
Wall.likeOver(post);
        },
        
out: function() {
          
Wall.likeOut(post);
          
Wall.postOut(post);
        }
      },
      
className'rich like_tt',
      
onShowStart: function (tt) {
        if (!
tt.container) return;
        var 
bp geByClass1('bottom_pointer'tt.container'div');
        var 
tp geByClass1('top_pointer'tt.container'div');
        
setStyle(bp, {marginLeftpointerShift});
        
setStyle(tp, {marginLeftpointerShift});
      }
    });
  },
  
likeOut: function(posttthide) {
    var 
icon ge('like_icon' post);
    if (!
icon) return;
    if (!
hasClass(icon'my_like') && !hasClass(icon'fw_my_like')) {
      
setTimeout(animate.pbind(ge('like_icon' post), {opacity0.4}, 200false), 1);
    }
    if (
tthide) {
      
triggerEvent(icon.parentNode'mouseout');
    }
  },
  
postLikeOver: function(post) {
    var 
icon ge('like_icon' post),
        
link ge('like_link' post),
        
count ge('like_count' post);

    if (!
icon || cur.viewAsBox) return;
    var 
matches post.match(/(-?d+)(_?)(photo|video|note|topic|wall_reply|note_reply|photo_comment|video_comment|topic_comment|)(d+)/)
        
like_obj = (matches[3] || 'wall') + matches[1] + '_' matches[4],
        
linkW link.clientWidth || link.offsetWidth,
        
ttW 230,
        
leftShift ttW - (icon.parentNode.clientWidth || icon.parentNode.offsetWidth) + 7,
        
pointerShift ttW - (count.clientWidth || count.offsetWidth) - 14;

    
showTooltip(icon.parentNode, {
      
url'like.php',
      
params: {act'a_get_stats''object'like_obj},
      
slide15,
      
shift: [leftShift77],
      
ajaxdt100,
      
showdt400,
      
hidedt200,
      
tip: {
        
over: function() {
          
Wall.postOver(post);
          
Wall.likeOver(post);
        },
        
out: function() {
          
Wall.likeOut(post);
          
Wall.postOut(post);
        }
      },
      
className'rich like_tt',
      
onShowStart: function (tt) {
        if (!
tt.container || pointerShift === false) return;
        var 
bp geByClass1('bottom_pointer'tt.container'div');
        var 
tp geByClass1('top_pointer'tt.container'div');
        
setStyle(bp, {marginLeftpointerShift});
        
setStyle(tp, {marginLeftpointerShift});
      }
    });
  },
  
postLikeOut: function () {

  },
  
likeUpdate: function(postmycounttitle) {
    
count intval(count);

    var 
post.match(/(-?d+)_(photo|video|note|topic|wall_reply|)(d+)/), like_obj = (m[2] || 'wall') + m[1] + '_' m[3];

    var 
countInput ge('like_real_count_' like_obj) || {}, rows ge('like_table_' like_obj);
    var 
titleNode ge('like_title_' like_obj), countNode ge('like_count' post);
    var 
icon ge('like_icon' post);
    var 
tt countNode.parentNode.tt || {}, opts = clone(tt.opts || {}), newleft = (my : -31);

    if (
title && titleNode) {
      
val(titleNodetitle);
    }
    
countInput.value count;
    
animateCount(countNodecount);

    if (
my) {
      
addClass(iconhasClass(icon'fw_like_icon') ? 'fw_my_like' 'my_like');
    } else {
      
removeClass(iconhasClass(icon'fw_like_icon') ? 'fw_my_like' 'my_like');
      var 
cb ge('like_share_wall' post);
      if (
cbcheckbox(cbfalse);
    }
    if (
count) {
      var 
styleName vk.rtl 'right' 'left';
      if (
tt.el && !isVisible(tt.container) && !title) {
        
rows.style[styleName] = newleft 'px';
        
tooltips.show(tt.elextend(opts, {showdt0}));
      } else if (
rows) {
        var 
params = {};
        
params[styleName] = newleft;
        
animate(rowsparams200);
      }
      
removeClass(icon'no_likes');
    } else {
      if (
tt.eltt.hide();
      
addClass(icon'no_likes');
    }
  },

  
like: function(posthash) {
    if (!
vk.id || cur.viewAsBox) return;
    var 
my hasClass(ge('like_icon' post), 'my_like'), matches post.match(/(-?d+)_(photo|video|note|topic|wall_reply|)(d+)/), like_obj = (matches[2] || 'wall') + matches[1] + '_' matches[3];
    
ajax.post('like.php', {act'a_do_' + (my 'un' '') + 'like''object'like_objhashhashwall1from'wcomments'}, {
      
onDoneWall.likeUpdate.pbind(post, !my)
    });
    var 
countInput ge('like_real_count_wall' post);
    var 
count countInput countInput.value ge('like_count' post).innerHTML;
    
Wall.likeUpdate(post, !myintval(count) + (my ? -1));
  },
  
likeShare: function(posthash) {
    var 
el ge('like_share_wall' post), was isChecked(el);
    
checkbox(el);
    
ajax.post('like.php', {act'a_do_' + (was 'un' '') + 'publish'object'wall' posthashhashwall1from'wcomments'}, {
      
onDoneWall.likeUpdate.pbind(posttrue)
    });
    var 
countInput ge('like_real_count_wall' post);
    var 
count countInput countInput.value ge('like_count' post).innerHTML;
    var 
my hasClass(ge('like_icon' post), 'my_like');
    
Wall.likeUpdate(posttrueintval(count) + (my 1));
  },
  
showLikesPage: function(postpublishedoffset) {
    
cur.likesBox.loadTabContent('like.php', {act'a_get_members'object'wall' postpublishedpublishedoffsetoffsetwall1}, published);
  },
  
showPhoto: function(to_idphhashelev) {
    return !
showBox('al_photos.php', {act'photo_box'to_idto_idphotophhashhash}, {cache1}, el.href ev false);
  },
  
_animDelX: function(opacitynew_activepostaction) {
    if (
post === undefined) {
      
post new_active;
      
new_active undefined;
    }
    var 
el ge((action || 'delete_post') + post);
    if (!
el) return;
    if (
new_active !== undefined) {
      
el.active new_active;
    } else if (
el.active) {
      return;
    }
    
animate(el, {opacityopacity}, 200);
  },
  
update: function(count) {
    if (
cur.wallType != 'all' && cur.wallType != 'own') return;
    var 
cnts = {}, sw ge('page_wall_switch'), pnw ge('page_no_wall');
    
each(['all''own'], function() {
      var 
el ge('page_wall_count_' this);
      
cnts[this ''] = el && intval(el.value);
    });
    if (
cnts.all && pnw) {
      
pnw.parentNode.removeChild(pnw);
    }
    if (!
cnts.own || cnts.own >= cnts.all) {
      
hide(sw);
    } else {
      
show(sw);
      
sw.innerHTML cur.options[cur.wallType '_link'];
    }
    
ge('page_wall_posts_count').innerHTML cnts[cur.wallType] ? langNumeric(cnts[cur.wallType], cur.options.wall_counts) : '';
    
ge('page_wall_header').href '/wall' cur.oid + ((cur.wallType == 'own') ? '?own=1' '');
    var 
morelnk ge('wall_more_link'), count geByClass(cur.wallTypege('page_wall_posts')).length;
    if (
count >= cnts[cur.wallType]) {
      
hide(morelnk);
    } else {
      
show(morelnk);
      
morelnk.onclick Wall.showMore.pbind(count);
    }
  },

  
getAbsDate: function (ts) {
    var 
date = new Date(ts || vkNow()),
        
hours date.getHours(),
        
minutes date.getMinutes(),
        
ampm ''numhours;
    if (
cur.wallTpl.time_system) {
      
ampm cur.wallTpl.time_system[hours 11 0];
      
hours = (hours 12) || 12;
    }
    
numhours hours hours : ('0' hours);
    
minutes minutes minutes : ('0' minutes);
    return 
cur.wallTpl.date_format.replace('{am_pm}'ampm).replace('{hour}'hours).replace('{num_hour}'numhours).replace('{minute}'minutes);
  },
  
getNowRelTime: function () {
    var 
ts vkNow();
    return 
'<span class="rel_date rel_date_needs_update" time="' intval(ts 1000 - (cur.tsDiff || 0)) + '" abs_time="' Wall.getAbsDate(ts) + '">' getLang('wall_just_now') + '</span>';
  },
  
getNewPostHTML: function (evisAdminextendCb) {
    var 
post_id ev[2],
        
html cur.wallTpl.post,
        
actions rs(cur.wallTpl.post_actions, {actions: (isAdmin || !ev[2].indexOf(vk.id '_')) ? cur.wallTpl.del cur.wallTpl.spam}),
        
repls = {
      
nameev[3].replace('mem_link''author'),
      
online'',
      
actionsactions,
      
photoev[4],
      
linkev[5],
      
textev[6],
      
dateev[7],
      
post_idev[2],
      
date_postfix'',
      
post_urlpost_id.replace('_wall_reply''_')
    };
    
extendCb && extend(evextendCb(ev));
    
each (repls, function (kv) {
      
html html.replace(new RegExp('%' '%''g'), v);
    });
    return 
html;
  },
  
getNewReplyHTML: function (evisAdminextendCb) {
    var 
acts = [],
        
can_reply ge('reply_field' ev[2]) || ge('reply_fakebox' ev[2]) || ge('fwr_text'),
        
className '';
        
attr '';

    if (
isAdmin || !ev[2].indexOf(vk.id '_') || !ev[4].indexOf(vk.id '_')) {
      
acts.push(cur.wallTpl.del_reply);
    } else if (
ev[2].split('_')[0] != ev[4]) {
      
acts.push(cur.wallTpl.spam_reply);
    }
    if (
ev[8].indexOf('class="wall_reply_more"') != -1) {
      
className += 'reply_moreable';
    }
    if (
can_reply) {
      if (
cur.onepost) {
        
acts.push(cur.wallTpl.answer_reply);
      } else {
        
className += ' reply_replieable';
      }
      if (!
cur.options.reply_names[ev[4]]) {
        
cur.options.reply_names[ev[4]] = [ev[11], ev[12]]; // name link, name greeting
      
}
    }
    if (
className) {
      
attr ' onclick="Wall.replyClick('%post_id%', %reply_msg_id%, event, %reply_uid%)"';
    }
    if (
cur.onepost) {
      
acts.push('');
      
acts acts.join('<span class="divide">|</span>');
    } else {
      
acts rs(cur.wallTpl.post_actions, {actionsacts.join('')});
    }
    var 
repls = {
      
nameev[5].replace('mem_link''author'),
      
photopsr(ev[6]),
      
online'',
      
linkev[7],
      
textpsr(ev[8]),
      
media''// not returned by now
      
classnameclassName,
      
actionsacts,
      
attrattr,
      
dateWall.getNowRelTime(),
      
to_linkev[10],
      
post_idev[2],
      
reply_idev[3],
      
like_idev[3].replace('_''_wall_reply'),
      
reply_msg_idev[3].split('_')[1],
      
reply_uidev[4] || 'false'
    
};
    
extendCb && extend(replsextendCb(repls));
    return 
rs(cur.wallTpl.replyrepls);
  },
  
openNewComments: function (post_raw) {
    var 
repliesEl ge('replies' post_raw),
        
openEl repliesEl.nextSibling,
        
headerEl geByClass1('wr_header'repliesEl'a'),
        
newCnt 0,
        
shown geByClass('reply'repliesEl'div').length,
        
total shown,
        
newTotal openEl.newCnt;
    
each ([].slice.call(geByClass('new_reply'repliesEl'div')), function () {
      
removeClass(this'new_reply');
      
this.style.backgroundColor '#FEFAE4';
      
animate(this, {backgroundColor'#FFF'}, 6000);
      
newCnt++;
      if (
newCnt == 100) return false;
    });
    if (
headerEl) {
      
total newCnt intval(headerEl.getAttribute('offs').split('/')[1]);
    }
    
shown += - newTotal newCnt;
    if (
total || shown total) {
      if (!
headerEl) {
        
repliesEl.insertBefore(headerEl ce('a', {className'wr_header'}), repliesEl.firstChild);
      }
      
Wall.updateRepliesHeader(post_rawheaderElshowntotal);
    }
    
cur.wallMyOpened[post_raw] = 1;
    if (
openEl && openEl.className == 'replies_open') {
      if (
newTotal 100) {
        
openEl.innerHTML getLang('news_x_new_replies_more'Math.min(100newTotal newCnt));
        
openEl.newCnt -= newCnt;
      } else {
        
re(openEl);
      }
    }
  },
  
updateRepliesHeader: function (post_rawheaderElshowntotal) {
    var 
headerTexthref headerEl.hrefmatchesshowCount 3cls 0;

    if (!
href && (matches post_raw.match(/^(-?d+)_(photo|video|note|topic|video|)(d+)$/))) {
      var 
type matches[2] || 'wall';
      
href '/' type matches[1] + '_' matches[3];
      switch (
type) {
        case 
'topic':
          
href += '?offset=last&scroll=1';
          break;
        case 
'wall':
          
href += '?offset=last&f=replies';
          break;
      }
      
headerEl.href href;
    }
    if (
total shown) {
      if (
shown 100) {
        if (
total 100) {
          
headerText getLang('wall_show_n_of_m_last'100);
          
headerText headerText.replace('{count}'total);
        } else {
          
headerText getLang('wall_show_all_n_replies'total);
        }
        
showCount false;
      } else {
        
headerText getLang('wall_hide_replies');
      }
    } else {
      
headerText getLang('wall_hide_replies');
      
cls 1;
    }
    
toggleClass(headerEl'wrh_all'cls);
    
headerEl.innerHTML '<div class="wrh_text" id="wrh_text' post_raw '">' headerText '</div><div class="progress wrh_prg" id="wrh_prg' post_raw '"></div>';
    
headerEl.onclick Wall.showReplies.pbind(post_rawshowCountfalse);
    
headerEl.setAttribute('offs'shown '/' total);
  },
  
checkRepliesLink: function (elev) {
    
ev ev || window.event;
    var 
post_raw el.id.match(/^replies_link(-?d+)_(photo|video|note|topic|video|)(d+)$/),
        
href el.href;

    if (!
checkEvent(ev)) {
      
el.parentNode.onclick();
      return 
cancelEvent(ev);
    }

    if (!
post_raw) {
      return;
    }
    if (!
href) {
      var 
type post_raw[2] || 'wall';
      
href '/' type post_raw[1] + '_' post_raw[3];
      switch (
type) {
        case 
'topic':
          
href += '?offset=last&scroll=1';
          break;
        case 
'wall':
          
href += '?offset=last&f=replies';
          break;
      }
      
el.href href;
    }
    if (
ev.type == 'mousedown') {
      return;
    }
    if (
browser.mozilla) {
      var 
wnd window.open(el.href'_blank');
      try {
wnd.blur(); window.focus();} catch (e) {}
      return 
cancelEvent(ev);
    } else {
      
ev.cancelBubble true;
    }
  },

  
init: function(opts) {
    
extend(cur, {
      
postFieldge('post_field'),
      
sendPostBtnge('send_post'),
      
wallTypeopts.wall_type,
      
withMentions: !(browser.mozilla && browser.version.match(/^2./) || browser.mobile),
      
wallTplopts.wall_tpl,
      
wallMyDeleted: {},
      
wallMyOpened: {},
      
wallMyReplied: {},
      
wallMyReplies: {},
      
wallMyRepliesCnt0
    
});
    if (
opts.wall_tpl && opts.wall_tpl.lang) {
      
cur.lang extend(cur.lang || {}, opts.wall_tpl.lang);
    }

    
Wall.update();

    if (!
cur.sendPostBtn) return; // banned

    
cur.sendPostBtn.onclick Wall.sendPost;
    
placeholderSetup(cur.postField);

    
each(geByTag('textarea'ge('page_wall_posts')), function() { placeholderSetup(this); });

    
removeEvent(document'click'Wall.hideEditPostReply);
    
addEvent(document'click'Wall.hideEditPostReply);

    if (
opts.media_types && ge('page_add_media')) {
      
cur.wallAddMedia initAddMedia(ge('page_add_media').firstChild'media_preview'opts.media_types);
      
cur.wallAddMedia.onChange = function() {
        
Wall.checkPostLen(ge('post_field').valuetrue);
      }
    }
  }
}

var 
wall extend(Wall, {
  
showDeletePost: function (post) {
    
Wall._animDelX(0.3undefinedpost'post_delete');
    
Wall._animDelX(0.3undefinedpost'post_edit');
  },
  
hideDeletePost: function (post) {
    
Wall._animDelX(0undefinedpost'post_delete');
    
Wall._animDelX(0undefinedpost'post_edit');
  },
  
activeDeletePost: function(postttaction) {
    
Wall._animDelX(11postaction);
    if (
ttshowTooltip(ge((action || 'delete_post') + post), {textttshowdt0black1shift: [1433]});
  },
  
deactiveDeletePostWall._animDelX.pbind(0.30)
});

function 
initCustomMedia(lnktypesopts) {
  
lnk ge(lnk);
  if (!
lnk) return false;

  
opts opts || {};

  if (!
window.__addMediaIndex__addMediaIndex 0;
  var 
menuId = ++__addMediaIndex;

  if (
opts.bgsprite) {
    var 
icons opts.bgsprite;
  } else if (
window.devicePixelRatio >= 2) {
    var 
icons '/images/icons/attach_icons_2x.png?6';
    
opts.bgSize '20px 220px';
  } else {
    var 
icons '/images/icons/attach_icons.png?6';
  }
  
vkImage().src icons;

  var 
html '<div class="rows"><div class="add_media_head"><nobr>' lnk.innerHTML '</nobr></div></div>';

  if (!
window.customMenuNode) {
    
window.customMenuNode domFC(domFC(pageNode.appendChild(ce('div', {
      
id'',
      
innerHTML'<div class="scroll_fix" id="custom_menu_wrap" style="width:' + (lastInnerWidth 1) + 'px"><div id="custom_menu_cont"></div></div>'
    
}))));
  }
  var 
menuNode ce('div', {
    
id'add_media_menu_' menuId,
    
className'add_media_menu',
    
innerHTML'<div class="add_media_rows">' html '</div>'
  
}, {position'absolute'}), rowsNode geByClass1('rows'menuNode'div');
  
customMenuNode.appendChild(menuNode);

  var 
_hideTimermediaMenu = {
    
idmenuId,
    
fixed: -1,
    
menuNodemenuNode,
    
updateFixed: function(newVal) {
      if (
mediaMenu.fixed != -&& newVal != -&& newVal !== undefined && mediaMenu.fixed == newVal) {
        return;
      }
      if (
mediaMenu.fixed == -|| newVal !== undefined) {
        if (
newVal === undefined || newVal == -1) {
          var 
el lnk;
          
mediaMenu.fixed false;
          while (
el) {
            if (
getStyle(el'position') == 'fixed') {
              
mediaMenu.fixed true;
              break;
            }
            
el el.offsetParent;
          }
        } else {
          
mediaMenu.fixed newVal;
        }
        if (
mediaMenu.fixed) {
          
setStyle(customMenuNode, {position''});
          
addClass(customMenuNode'fixed');
        } else {
          
setStyle(customMenuNode, {position'absolute'});
          
removeClass(customMenuNode'fixed');
        }
        if (
isVisible(menuNode)) {
          
mediaMenu._updatePosition(true);
        }
      }
    },
    
show: function() {
      
clearTimeout(_hideTimer);
      if (
menuNode && !isVisible(menuNode)) {
        
lnk.blur();
        
mediaMenu.updateFixed(-1);
        var 
mediaMenu._updatePosition(), el menuNode.firstChild;

        if (
browser.msie && browser.version || browser.mobile) {
          
show(menuNode);
        } else {
          
setStyle(el, {height26overflow'hidden'});
          
fadeIn(menuNode200);
          if (
mediaMenu.reverse) {
            
setStyle(el, {position'absolute'bottom'-25px'widthgetSize(el.firstChild)[0]});
            
setStyle(el.firstChild, {position'absolute'bottom'0px'});
          }
          
animate(el, {height2}, 200, function() {
            
setStyle(el.firstChild, {position'relative'bottom''});
            
setStyle(el, {height''overflow''position'static'});
          });
        }
        
opts.onShow && opts.onShow();
      }
    },
    
_updatePosition: function(visible) {
      var 
coords getXY(lnkmediaMenu.fixed);
      var 
top coords[1] - + (browser.msie && browser.version 0);
      var 
rowsEl menuNode.firstChildmore geByClass1('add_media_more'menuNode);
      if (
vk.rtl) {
        var 
right = (lastInnerWidth 1) - (coords[0] + getSize(lnk)[0] + 8);
        
setStyle(menuNode, {rightrighttoptop});
      } else {
        var 
left coords[0] - + (browser.msie6 0);
        
setStyle(menuNode, {leftlefttoptop});
      }

      
// Showing to up in case of little widget height
      
if (!visible) {
        
setStyle(menuNode, {visibility'hidden'display'block'});
        if (
more) {
          
hide(more);
          
show(more.nextSibling);
        }
      }
      var 
countSize getSize(rowsEl), st = (mediaMenu.fixed scrollGetY()), size countSize;
      if (!
visible) {
        if (
more) {
          
show(more);
          
hide(more.nextSibling);
          
size getSize(rowsEl);
        }
        
setStyle(menuNode, {visibility''display'none'});
      }

      var 
needReverse false;
      if (
countSize[1] - 25 top st && lastWindowHeight st top countSize[1]) {
        
setStyle(rowsEl'marginTop', -size[1] + 25);
        if (!
mediaMenu.reverseneedReverse true;
      } else {
        
setStyle(rowsEl'marginTop', -4);//(/mac/.test(_ua) && browser.mozilla ? 22 : 20));
        
if (mediaMenu.reverseneedReverse true;
      }
      if (
needReverse) {
        var 
els rowsNode.childNodeslen els.lengthel = (mediaMenu.moreWrap || {}).lastChild || {};
        while (
len--) {
          
rowsNode.appendChild(els[len]);
        }
        
els el.childNodeslen = (els || []).length;
        while (
len--) {
          
el.appendChild(els[len]);
        }
        
mediaMenu.reverse = !mediaMenu.reverse;
        (
mediaMenu.reverse addClass removeClass)(menuNode'add_media_rev');
      }

      return 
size[1];
    },
    
hide: function(noTimeout) {
      
clearTimeout(_hideTimer);
      var 
hideFunc = (browser.msie && browser.version || browser.mobile) ? hide.pbind(menuNode) : fadeOut.pbind(menuNode100);
      if (
noTimeout === true) {
        
hideFunc();
      } else {
        
_hideTimer setTimeout(hideFunc300);
      }
      
opts.onHide && opts.onHide();
    },
    
setItems: function(types) {
      for (var 
rowsNode.firstChildrowsNode.lastChild!= lrowsNode.firstChildrowsNode.lastChild) {
        
rowsNode.removeChild(f.className == 'add_media_head' f);
      }
      var 
test '';
      var 
spec_style = (/mac/.test(_ua) && browser.mozilla) ? {height19paddingTop3} : {};
      var 
moreNode false;

      var 
needHide = (types.length && getLang('global_add_media_more'));
      
mediaMenu.moreWrap false;

      
each(types, function(iv) { // [id, name, bg-position, onclick, href, bg-url, customStyle]

        
var attrs = {
          
innerHTML'<nobr>' v[1].replace(/s/g'&nbsp;') + '</nobr>',
          
className'add_media_type_' menuId '_' v[0] + ' add_media_item'
        
}, style v[6] || {
          
backgroundImage'url(' + (v[5] || icons) + ')',
          
backgroundPosition: (v[2] || '0 0')
        }, 
row;
        if (
opts.bgSize) {
          
style.backgroundSize opts.bgSize;
        }

        if (
needHide && == 3) {
          var 
rowsEl menuNode.firstChild;
          var 
moreWrap rowsNode.appendChild(ce('div', {
            
className"add_media_more_wrap"
          
}));
          
addEvent(moreWrap'mouseover click', function() {
            
clearTimeout(mediaMenu.moreHide);
            if (
isVisible(moreWrap.lastChild)) return;
            
show(moreWrap.lastChild);
            
hide(moreWrap.firstChild);
            if (!
mediaMenu.reverse) return;
            var 
size getSize(rowsEl);
            
setStyle(rowsEl'marginTop', -size[1] + 25);
          });
          
addEvent(moreWrap'mouseout', function () {
            
clearTimeout(mediaMenu.moreHide);
            
mediaMenu.moreHide setTimeout(function() {
              
hide(moreWrap.lastChild);
              
show(moreWrap.firstChild);
              if (!
mediaMenu.reverse) return;
              var 
size getSize(rowsEl);
              
setStyle(rowsEl'marginTop', -size[1] + 25);
            }, 
300);
          });
          
row moreWrap.appendChild(ce('a', {
            
className'add_media_more add_media_item',
            
innerHTML'<nobr>'+getLang('global_add_media_more')+'</nobr>'
          
}));
          
moreNode ce('div', {
            
className'add_media_more_node',
            
innerHTML'<div class="unshown"></div>'
          
}, {
            
display'none'
          
});
          
row moreWrap.appendChild(moreNode);
          
mediaMenu.moreWrap moreWrap;
        }

        
extend(stylespec_style);
        if (
v[4]) {
          
attrs.href v[4];
        }
        
row = (moreNode moreNode rowsNode).appendChild(ce('a'attrsstyle));
        if (
v[3]) {
          
addEvent(row'click', function () {
            
mediaMenu.hide(true);
            
v[3]();
            return 
false;
          });
        }
      });
    }
  };

  
types && mediaMenu.setItems(types);

  
removeEvent(lnk'mouseover');
  
addEvent(lnk'mouseover click'mediaMenu.show);
  
addEvent(lnk'mouseout'mediaMenu.hide);
  
addEvent(menuNode'mouseover'mediaMenu.show);
  
addEvent(menuNode'mouseout'mediaMenu.hide);
  
addEvent(menuNode'click'cancelEvent);
  
addEvent(geByClass1('add_media_header'menuNode), 'click', function(e) {
    
mediaMenu.show(true);
    
cancelEvent(e);
  });

  
cur.destroy.push(function() {
    
cleanElems(menuNode);
    
re(menuNode);
    
removeEvent(lnk'click'mediaMenu.show);
  });

  return 
mediaMenu;
}

var 
urlActiveExp = /([!()?., nrt u00A0]|^)((https?://)?((?:[a-z0-9_-]+.)+[a-z]{2,6})(/.*?)?)(&nbsp;|[ trn u00A0])/i,
    
urlInactiveExp = /([!()?., nrt u00A0]|^)((https?://)?((?:[a-z0-9_-]+.)+[a-z]{2,6})(/.*?)?)(&nbsp;|[ trn u00A0]|$)/i;

function initAddMedia(lnkpreviewIdmediaTypesopts) {
  var 
types = [], bgposes = {graffiti: -151video: -19photo3audio: -41}, addMedia;
  
opts opts || {};
  
each (mediaTypes || [], function (iv) {
    if (!
v[1]) return;
    var 
handler falsetoId opts.toId || cur.postToparams = {to_idtoIdscrollbar_widthsbWidth()};
    var 
preps = {heightwindow.outerHeight || screen.availHeight || 768widthwindow.outerWidth || screen.availWidth || 1028};
    switch (
v[0]) {
      case 
'graffiti':
        
handler = function () {
          
cur.Rpc.callMethod('showBox''al_wall.php?' ajx2q({act'canvas_draw_box'to_idcur.postTowidget1}), preps);
        }
        break;

      case 
'photo':
        
handler = function () {
          
stManager.add(['page.css'], function() {
            
cur.Rpc.callMethod('showBox''al_photos.php?' ajx2q({act'choose_photo'to_idcur.postToscrollbar_widthwindow.sbWidth(), preview1widget1widget_width590}), preps);
          });
        }
        break;

      case 
'video':
        
handler = function () {
          
cur.Rpc.callMethod('showBox''al_video.php?' ajx2q({act'a_choose_video_box'to_idcur.postToscrollbar_widthwindow.sbWidth(), preview1widget1}), preps);
        }
        break;

      case 
'audio':
        
handler = function () {
          
stManager.add(['page.css'], function() {
            
cur.Rpc.callMethod('showBox''al_audio.php?' ajx2q({act'a_choose_audio_box'to_idcur.postToscrollbar_widthwindow.sbWidth(), preview1widget1addCss'profile.css'}), preps);
          });
        }
        break;

      default: 
topError('Unknown type: ' v[0]);
    }
    var 
icon falsebgpos = ('3px ' bgposes[v[0]] + 'px'), url falsename v[1].replace(/s/g'&nbsp;');
    
types.push([v[0], v[1], bgposhandlerurlicon]);
  });

  var 
menu initCustomMedia(lnktypes, {
    
onShow: function () {
      
cur.chooseMedia addMedia.chooseMedia;
      
cur.showMediaProgress addMedia.showMediaProgress;
    }
  });

  if (!
menu) return;
  
previewId previewId || 'media_preview';

  var 
lnkId menu.id,
      
previewEl ge(previewId),
      
progressEl;

  var 
limit opts.limit || 10,
      
multi limit 1,
      
editable = (!browser.msie || browser.version 8),
      
sortable = (!browser.msie || browser.version 8);
  
val(previewEl'<div id="page_pics_preview' lnkId '" class="page_pics_preview media_preview clear_fix"></div><div id="page_dpics_preview' lnkId '" class="page_pics_preview page_media_sortable media_preview clear_fix"></div><div id="page_docs_preview' lnkId '" class="page_docs_preview page_media_sortable media_preview clear_fix"></div><div id="page_pdocs_preview' lnkId '" class="page_docs_preview media_preview clear_fix"></div><div id="page_ldocs_preview' lnkId '" class="page_docs_preview media_preview clear_fix"></div><div id="page_mpics_preview' lnkId '" class="page_pics_preview media_preview clear_fix"></div><div id="page_ppdocs_preview' lnkId '" class="page_docs_preview media_preview clear_fix"></div><div id="page_progress_preview' lnkId '" class="page_progress_preview media_preview clear_fix"></div>');
  var 
picsEl domFC(previewEl),
      
dpicsEl domNS(picsEl),
      
docsEl domNS(dpicsEl),
      
pdocsEl domNS(docsEl),
      
ldocsEl domNS(pdocsEl),
      
mpicsEl domNS(ldocsEl),
      
ppdocsEl domNS(mpicsEl),
      
progressEl domNS(ppdocsEl);
  
removeClass(previewEl'media_preview');
  
addClass(previewEl'multi_media_preview');

  
addMedia = {
    
_addMediaLinklnk,
    
lnkIdlnkId,
    
menumenu,
    
handlers: {},
    
chosenMedias: [],
    
_showAddMedia: function() {
      
menu.show();
    },
    
_hideAddMedia: function(noTimeout) {
      
menu.hide(noTimeout);
    },
    
chooseMedia: function(typemediadataurlnoboxhideisGraffiti) {
      if (
addMedia.onChange && addMedia.onChange(typemediadataurl) === false) {
        return 
false;
      }
      if (
inArray(typeopts.disabledTypes || [])) {
        return 
false;
      }
      if (
addMedia.attachCount() >= limit && data.upload_ind === undefined && type !== 'postpone') {
        if (
multi) {
          return 
false;
        } else {
          
addMedia.unchooseMedia();
        }
      }
      var 
already falsealreadyTypes = {};
      if (
multi) {
        
each (addMedia.chosenMedias, function () {
          if (
this[0] == type && this[1] == media) {
            
already true;
            return 
false;
          }
          
alreadyTypes[this[0]] = alreadyTypes[this[0]] ? alreadyTypes[this[0]] + 1;
        });
        if (
already) {
          return 
false;
        }
      }
      var 
preview ''postview ''toPics falsetoEl docsElonclattrs '';
      switch (
type) {
        case 
'graffiti':
          if (!
isObject(data)) {
            
data = {thumbdata || ''};
          }
          
preview '<div class="fl_l page_preview_graffiti"><img class="page_preview_graffiti" src="' data.thumb '" /></div>';
          
toEl toPics mpicsEl;
        break;

        case 
'photos_list':
          
hide(this._addMediaLink);
          
vkImage().src data[1];
          
oncl opts.nocl '' ' onclick="return showPhoto('' + data[4] + '', '' + data[2] + '', ' data[3].replace(/"/g, '&quot;') + ');"';
          preview = '
<div' + oncl + ' class="fl_l page_preview_photo"><img class="page_preview_photo" src="' + data[1] + '" /></div>';
          toEl = toPics = picsEl;
        break;

        case '
photo':
          if (!isObject(data)) {
            data = {
              thumb_m: data[0] || '',
              thumb_s: data[1] || '',
              list: data[2] || '',
              view_opts: data[3] || '',
              upload_ind: data.upload_ind || undefined
            };
          }
          vkImage().src = data.thumb_m;
          if (editable) {
            if (!data.editable) return false;
            if (!opts.nocl) data.editable.click = showPhoto.pbind(media, data.list, parseJSON(data.view_opts.replace(/&quot;/g, '"')));
          }

          var _vopts = data.view_opts.replace(/"
/g'&quot;').replace(/^{|}$/g'');
          if (
_vopts_vopts += ',';
          
_vopts += 'queue:1';
          
oncl opts.nocl '' ' onclick="return showPhoto('' + media + '', '' + data.list + '', {' _vopts '});"';
          
preview '<div ' oncl ' class="fl_l page_preview_photo'+(isGraffiti ' page_preview_ph_graff' '')+'"><img class="page_preview_photo" src="' data.thumb_m '" /></div>';
          
toPics 1;
          
toEl picsEl;
        break;

        case 
'video':
          if (!
isObject(data)) {
            
data = {
              
thumbdata || ''
            
};
          }
          if (
editable) {
            if (!
data.editable) return false;
            if (!
opts.nocldata.editable.click showVideo.pbind(media);
          }

          
oncl opts.nocl '' ' onclick="return showVideo('' + media + '', false, {queue:1});"';
          
preview '<div' oncl ' class="fl_l page_preview_video"><img class="page_preview_video" src="' data.thumb '" /></div>';
          
toPics 1;
          
toEl picsEl;
        break;

        case 
'audio':
          if (!
data.info) return false;
          
preview WComments.addAudioPreview(mediadata);
          
attrs ' id="pam' lnkId '_audio' media '"';
        break;

        case 
'app':
          
preview '<div class="app fl_l"><img src="' data[0] + '" /><span>' data[1] + '</span></div>';
          
each(geByClass('add_media_type_' lnkId '_app'menu.menuNode'a'), function () {hide(this);});
        break;

        case 
'doc':
          if (!
data.lang) return false;
          if (
data.thumb && data.thumb_s) {
            
preview '<a onclick="if (cur.cancelClick) return (cur.cancelClick = false);" target="_blank" href="' data.href '" class="fl_l pam_dpic"><div class="page_preview_doc_photo"><img src="' data.thumb_s '" align="center"></div><div class="page_preview_doc_photo_hint">' data.title '</div>';
            
postview '</a><div class="pam_bg"></div>';
            
toEl toPics dpicsEl;
            
attrs ' id="pam' lnkId '_doc' media '"';
          } else {
            
preview '<a target="_blank" href="' data.href '" class="medadd_h medadd_h_doc inl_bl">' data.lang.profile_choose_doc '</a>';
            
postview '<div class="medadd_c medadd_c_doc"><a target="_blank" href="' data.href '">' data.title '</a></div>';
            
attrs ' id="pam' lnkId '_doc' media '"';
          }
        break;

        case 
'share':
          if (
alreadyTypes.share || alreadyTypes.page || !data.lang) {
            return 
false;
          }
          if (
isArray(data)) {
            
data = {
              
domaindata[0],
              
urldata[1],
              
initialPatterndata[2],
              
titledata[3],
              
descriptiondata[4],
              
images: [data[5]],
              
user_iddata[6],
              
photo_iddata[7]
            };
          };
          
preview '<a target="_blank" href="/away.php?to=' encodeURIComponent(data.url) + '" class="medadd_h medadd_h_link inl_bl">' data.lang.profile_choose_link '</a>';
          
addMedia.shareData extend(addMedia.shareData || {}, data, {imagesStyles: ['']});
          
toEl ldocsEl;
        break;

        case 
'poll':
          if (!
data.lang) return false;
          
preview '<div class="medadd_h medadd_h_poll inl_bl">' data.lang.'</div>';
          
hide(geByClass1('add_media_type_' lnkId '_poll'menu.menuNode'a'));
          
toEl pdocsEl;
        break;

        case 
'map':
          
preview '<div class="fl_l"><a onclick="return showBox('al_places.php', {act: 'geo_box', lat: '+data[0]+', long: '+data[1]+', provider: '+intval(data[3])+'}, {dark: 1});"><div class="page_media_map_point"></div><img class="page_preview_map" width="180" height="70" src="'+locProtocol+'//maps.googleapis.com/maps/api/staticmap?center='+data[0]+','+data[1]+'&zoom=11&size='+(window.devicePixelRatio >= '360x140' '180x70')+'&sensor=false&language='+data[2]+'" /></a></div>';
          
toEl toPics mpicsEl;
          
hide(geByClass1('add_media_type_' lnkId '_map'ge('add_media_menu_' lnkId)));
        break;

        case 
'page':
          if (
alreadyTypes.share || alreadyTypes.page || !data.lang) {
            return 
false;
          }
          var 
lst data.media.split('_');
          
preview '<a href="/page' data.media '" onclick="return showWiki({oid: ' lst[0] + ', id: ' lst[1] + '}, false, event, {queue: 1})" class="medadd_h medadd_h_page inl_bl">' data.lang.profile_choose_page '</a>';
          
toEl ldocsEl;
        break;

        case 
'album':
          if (
editable) {
            if (!
data.editable) return false;
            
extend(data.editable, {
              
titledata.title,
              
sizedata.count,
              
clickopts.nocl false nav.change.pbind({z'album' media})
            });
          }

          
vkImage().src data.thumb;
          
oncl opts.nocl '' ' href="/album' media '" onclick="return nav.change({z: 'album' + media + ''}, event)"';
          var 
cls 'fl_l page_preview_album wall_album_cover_wrap' + (data.thumb '' ' wall_album_nocover');
          
preview '<a class="' cls '" ' oncl '>
+ (data.thumb '<img class="wall_album_cover" src="' data.thumb '"/>' '') + '
  <div class="wall_album_caption">
    <div class="wall_album_title_wrap clear_fix">
      <div class="wall_album_title fl_l">' 
data.title '</div>
      <div class="wall_album_count fl_r">' 
data.count '</div>
    </div>
  </div>
</a>'
;
          
toPics 1;
          
toEl picsEl;
        break;

        case 
'note':
          if (!
data.lang) return false;
          
preview '<a onclick="showWiki({w: 'note' + data.raw + '', edit: 1}, true, event)" class="medadd_h medadd_h_note inl_bl">' data.lang.profile_choose_note '</a>';
          
postview '<div class="medadd_c medadd_c_note"><a onclick="showWiki({w: 'note' + data.raw + '', edit: 1}, true, event)" id="share_note_title' data.raw '">' data.title '</a></div>';
          
toEl ldocsEl;
        break;

        case 
'postpone':
          
preview '<div class="medadd_h medadd_h_timer inl_bl">' data.lang.profile_choose_timer '<span id="postpone_preview' lnkId '"></span></div>';

          if (
cur.editingPost && domPN(ppdocsEl).id == 'wpe_media_preview') {
            
media intval(media);
            if (
media) {
              
data.date media;
            } else {
              
data.date intval(cur.editingPost[6]);
            }
            var 
exp geByClass1('medadd_c_timersett'ppdocsEl);
            if (
exp) {
              var 
pn domPN(exp);
              
exp pn.innerHTML;
              
re(pn);
            } else {
              
exp '';
            }
            
geByTag1('button'geByClass1('button_blue'ge('post'+cur.editingPost[0]))).innerHTML getLang('global_save');
          } else {
            if (
cur.postponedLastDate) {
              
data.date intval(cur.postponedLastDate) + 14400;
            }
            var 
chk ge('official');
            if (
chk) {
              if (!
isChecked(chk)) {
                
checkbox(chk);
                
toggle('signed'true);
              }
              
addClass(chk'disabled');
            }
            var 
btn ge('send_post');
            if (
btn) {
              
btn.innerHTML data['lang']['profile_wall_postpone_btn'];
            }
          }
          
hide(geByClass1('add_media_type_' lnkId '_postpone'menu.menuNode'a'));
          
toEl ppdocsEl;
        break;
      }

      if (
multi) {
        var 
medias addMedia.chosenMedias,
            
ind medias.length,
            
mediaEl = (editable && toPics === 1) ? false : ((type == 'photos_list') ?
              
se('<div class="page_preview_' type '_wrap" style="position: relative">' preview '<div class="page_photos_count">' media.split(',').length '</div></div>') :
              
se('<div class="page_preview_' type '_wrap"' + (opts.nocl ' style="cursor: default"' '') + attrs '>' preview '<div nosorthandle="1" class="page_media_x_wrap inl_bl" '+ (browser.msie && browser.version 'title' 'tootltip') + '="'+getLang('dont_attach')+'" onmouseover="if (browser.msie && browser.version < 9) return; showTooltip(this, {text: this.getAttribute('tootltip'), shift: [14, 3, 3], black: 1})" onclick="cur.addMedia['+addMedia.lnkId+'].unchooseMedia(' ind '); return cancelEvent(event);"><div class="page_media_x" nosorthandle="1"></div></div>' postview '</div>'));
        
addClass(mediaEltoPics 'fl_l' 'clear_fix');
        if (
data.upload_ind !== undefinedre('upload' data.upload_ind '_progress_wrap');
        if (
opts.toggleLnktoggle(lnkaddMedia.attachCount() + limit);

        if (
editable && toPics === 1) {
          
addClass(toEl'editable_thumbs_wrap');
          if (!
domLC(toEl) || !hasClass(domLC(toEl), 'editable_thumbs')) {
            
toEl toEl.appendChild(ce('div', {id'thumbs_edit' lnkIdclassName'editable_thumbs'}));
          } else {
            
toEl domLC(toEl);
          }
          
stManager.add(['thumbs_edit.css''thumbs_edit.js'], function() {
            if (
opts.toggleLnktoggle(lnkaddMedia.attachCount() + limit);
            
data.editable.remove addMedia.unchooseMedia.pbind(ind);
            
show(domPN(toEl));
            var 
teMed ThumbsEdit.convert(typemediadata.editable);
            if (
domFC(toEl)) {
              
ThumbsEdit.addMedia(toElteMed);
            } else if (
opts.teWidth && opts.teHeight) {
              
ThumbsEdit.init(toEl, [teMed], {widthopts.teWidthheightopts.teHeight});
            } else {
              
ThumbsEdit.init(toEl, [teMed]);
            }
          }, 
true);
        } else {
          
show(toEl);
          
toEl.appendChild(mediaEl);
          if (
sortable) {
            if (
toEl == docsEl) {
              
stManager.add(['sorter.js'], function() {
                if (
docsEl.sorter) {
                  
sorter.added(docsEl);
                } else if (
toEl.childNodes.length 1) {
                  
sorter.init(docsEl, {});
                }
              }, 
true);
            } else if (
toEl == dpicsEl) {
              
stManager.add(['qsorter.js'], function() {
                if (
dpicsEl.qsorter) {
                  
qsorter.added(dpicsEl);
                } else if (
toEl.childNodes.length 1) {
                  
qsorter.init(dpicsEladdMedia.qsorterOpts());
                }
              }, 
true);
            }
          }
        }
        
medias.push([typemediamediaElurl]);
      } else {
        
val(previewEl'<div class="fl_l">' preview '</div><div class="x fl_l" onmouseover="showTooltip(this, {text: '' + getLang('dont_attach') + '', shift: [0, 3, 3]})" onclick="cur.addMedia[' lnkId '].unchooseMedia()"></div>');
        
show(previewEl);
        
addMedia.chosenMedia = [typemedia];
        
addMedia.chosenMediaData data;
      }

      if (
type == 'share') {
        if (
data.title && !url) {
          
cur.shareShowImg 0;
          
addMedia.showPreview(true);
          
addMedia.shareData.images false;
        } else {
          
addMedia.showExternalPreview();
        }
      } else if (
type == 'page') {
        if (!
data['nopreview']) {
          
cur.shareShowImg 0;
          
addMedia.shareData extend(addMedia.shareData || {}, data, {imagesfalse});
          
addMedia.showPreview();
        }
      } else if (
type == 'poll') {
        
addMedia.createPoll(data);
      } else if (
type == 'postpone') {
        
addMedia.setupPostpone(dataexp);
      }

      var 
ev window.event;
      if (
ev && ev.type == 'click' && (event.ctrlKey || event.metaKey || event.shiftKey)) {
        
noboxhide true;
      }
      if (!
cur.fileApiUploadStarted && !cur.preventBoxHide && noboxhide !== true && !inArray(type, ['poll''share''page''postpone'])) {
        
boxQueue.hideLast();
      }

      
cur.lastPostMsg false;
      if (
opts.onMediaAdd) {
        
opts.onMediaAdd();
      }

      if (
data.upload_ind !== undefined) {
        
delete data.upload_ind;
      }
      return 
false;
    },
    
unchooseMedia: function(ind) {
      if (
addMedia.onChange && addMedia.onChange(falseind) === false) {
        return 
false;
      }
      if (
multi) {
        if (
ind === undefined) {
          if (
window.ThumbsEdit) {
            
ThumbsEdit.removeAll('thumbs_edit' lnkId);
          }
          
each (addMedia.chosenMedias, function (kv) {
            if (
&& !== undefinedaddMedia.unchooseMedia(k);
          });
          
addMedia.urlsCancelled = [];
          return;
        }
        var 
medias addMedia.chosenMediasx;
        if (
medias[ind]) {
          if (
medias[ind][2]) {
            if ((
geByClass1('page_media_x_wrap'medias[ind][2], 'div')) && x.tt && x.tt.el) {
              
x.tt.destroy();
            }
            if (
domPN(medias[ind][2]) == docsEl && docsEl.sorter) {
              
each (docsEl.sorter.elems, function() {
                
setStyle(this, {top'auto'left'auto'cursor'auto'});
              });
              
docsEl.sorter.destroy();
              
re(medias[ind][2]);
              if (
docsEl.childNodes.length 1sorter.init(docsEl, {});
            } else if (
domPN(medias[ind][2]) == dpicsEl && dpicsEl.qsorter) {
              
each (dpicsEl.qsorter.elems, function() {
                
setStyle(domFC(this), {top'auto'left'auto'});
                
setStyle(this, {cursor'auto'});
              });
              
dpicsEl.qsorter.destroy();
              
re(medias[ind][2]);
              if (
dpicsEl.childNodes.length 1qsorter.init(dpicsEladdMedia.qsorterOpts());
            } else {
              
re(medias[ind][2]);
            }
          } else if (
medias[ind][0] == 'photo' || medias[ind][0] == 'video' || medias[ind][0] == 'album') {
            if (
window.ThumbsEdit) {
              
ThumbsEdit.removeById('thumbs_edit' lnkIdmedias[ind][0] + medias[ind][1]);
            }
          }
          switch (
medias[ind][0]) {
            case 
'page':
            case 
'share':
              
addMedia.shareData = {};
              
re(addMedia.sharePreview);
              
delete addMedia.sharePreview;
              break;

            case 
'poll':
              
re(addMedia.pollPreview);
              
addMedia.pollPreview false;
              
show(geByClass1('add_media_type_' lnkId '_poll'menu.menuNode'a'));
              break;

            case 
'app':
              
each(geByClass('add_media_type_' lnkId '_app'menu.menuNode'a'), function () {show(this);});
              break;

            case 
'map':
              
show(geByClass1('add_media_type_' lnkId '_map'ge('add_media_menu_' lnkId)));
              break;

            case 
'postpone':
              var 
exp geByClass1('medadd_c_timersett'addMedia.postponePreview);
              if (
cur.editingPost && exp) {
                
re(domFC(addMedia.postponePreview));
              } else {
                
re(addMedia.postponePreview);
              }
              
addMedia.postponePreview false;
              
removeClass('official''disabled');
              if (!
cur.editingPost) {
                
ge('send_post').innerHTML getLang('wall_send');
              } else {
                
geByTag1('button'geByClass1('button_blue'ge('post'+cur.editingPost[0]))).innerHTML getLang('wall_publish_now');
              }
              
show(geByClass1('add_media_type_' lnkId '_postpone'menu.menuNode'a'));
              break;
          }
          
medias[ind] = false;
        }
        if (
opts.toggleLnktoggle(lnkaddMedia.attachCount() < limit);
        
toggle(picsEl, !!(editable geByClass1('thumb_wrap'picsEl) : domFC(picsEl)));
        
toggle(dpicsEl, !!domFC(dpicsEl));
        
toggle(docsEl, !!domFC(docsEl));
        
toggle(pdocsEl, !!domFC(pdocsEl));
        
toggle(ldocsEl, !!domFC(ldocsEl));
        
toggle(mpicsEl, !!domFC(mpicsEl));
        
toggle(ppdocsEl, !!domFC(ppdocsEl));
        
toggle(progressEl, !!domFC(progressEl));
      } else {
        var 
sharex;
        if (
addMedia.chosenMedia) {
          if ((
previewEl.firstChild.nextSibling) && x.tt && x.tt.el) {
            
x.tt.destroy();
          }
          
addMedia.chosenMedia false;
          
addMedia.chosenMediaData false;
          
val(previewEl'');
          
hide(previewEl);
        }
        if (
share addMedia.shareData) {
          if (
share.url) {
            
addMedia.urlsCancelled.push(share.url);
          }
          if (
share.initialPattern) {
            
addMedia.urlsCancelled.push(share.initialPattern);
          }
          
addMedia.shareData = {};
        }
        
each([addMedia.sharePreviewaddMedia.pollPreviewaddMedia.postponePreview], function () {re(this);});
        
addMedia.sharePreview addMedia.pollPreview addMedia.postponePreview false;
      }

      
cur.lastPostMsg false;
      if (
inArray(cur.module, ['profile''feed''wall']) && cur.postTo && cur.wallAddMedia == addMedia) {
        
setTimeout(function() {
          
Wall.postChanged(val('post_field'), true);
        }, 
0);
      }

      if (
addMedia.onChangeaddMedia.onChange(false);
    },
    
getMedias: function() {
      var 
edited window.ThumbsEdit ThumbsEdit.getMedias('thumbs_edit' lnkId) : [], already = {};
      var 
chosen addMedia.chosenMedias || [], result = [], check = function(idckcv) {
        if (
cv[0] + cv[1] == id) {
          
result.push(cv);
          
already[id] = true;
          return 
false;
        }
      };
      
each(edited, function(kv) {
        
each(chosencheck.pbind(v[0] + v[1]));
      });
      
each(dpicsEl.childNodes, function(kv) {
        var 
= (v.id || '').match(/^pamd+_([a-z]+)(-?d+_d+)/);
        if (
meach(chosencheck.pbind(m[1] + m[2]));
      });
      
each(docsEl.childNodes, function(kv) {
        var 
= (v.id || '').match(/^pamd+_([a-z]+)(-?d+_d+)/);
        if (
meach(chosencheck.pbind(m[1] + m[2]));
      });
      
each(chosen, function(kv) {
        if (
&& isArray(v) && v.length && !already[v[0] + v[1]]) {
          
result.push(v);
        }
      });
      return 
result;
    },
    
showMediaProgress: function(typeiinfocancelFunc) {
      if (
addMedia.onProgress && addMedia.onProgress(typeiinfo) === false) {
        return 
false;
      }
      var 
frac info.loaded info.totalpercent intval(frac 100),
          
fileName info.fileName || info.name || '',
          
// ind = i,
          
ind fileName '_' fileName i,
          
label fileName ? (fileName.length 33 fileName.substr(030) + '...' fileName) : '';

      var 
prg ge('upload' ind '_progress');
      if (!
prg) {
        if (!
cur.attachMediaIndexescur.attachMediaIndexes = {};
        
cur.attachMediaIndexes[ind] = lnkId;

        var 
progress '
<div class="fl_l"><div class="page_attach_progress_wrap" style="margin-top: 3px; margin-bottom: 4px;">
  <div id="upload' 
ind '_progress" class="page_attach_progress"></div>
</div></div></div>' 
+ (label '<div class="attach_label fl_l">' label '</div>' '') + '<div class="progress_x fl_l" onmouseover="animate(this, {opacity: 1}, 200); showTooltip(this, {text: '' + getLang('dont_attach') + '', shift: [6, 3, 3]})" onmouseout="animate(this, {opacity: 0.6}, 200);" onclick="cur['terminate_upload_' + i + '']('' + (fileName || i) + '');"></div>';

        if (
multi) {
          
progressEl.appendChild(ce('div', {id'upload' ind '_progress_wrap'innerHTMLprogressclassName'clear_fix upload_' '_progress'}, {marginTop'6px'}));
          
show(progressEl);
          if (
opts.toggleLnktoggle(lnkaddMedia.attachCount() < limit);
        } else {
          
val(previewElprogress);
          
addMedia.chosenMedia 'progress';
        }
        
prg ge('upload' ind '_progress');
        
prg.full false;//intval(getStyle(prg.parentNode, 'width'));

        
cur['terminate_upload_'+i] = function() {
          
re('upload' ind '_progress_wrap');
          
cancelFunc();
        }

        if (
percent) {
          
setStyle(prg, {widthprg.full ? (intval(prg.full frac) + 'px') : percent '%'})
        } else {
          
setStyle(prg, {width'1px'});
          
hide(prg);
        }
      } else {
        
show(prg);
        if (
prg.full) {
          var 
tw data(prg'tween'), intval(prg.full frac);
          if (
tw && tw.isTweening) {
            
tw.to.width w;
          } else {
            
animate(prg, {width'px'}, 500);
          }
        } else {
          
setStyle(prg, {widthpercent '%'});
        }
      }
      
// show(previewEl);
    
},

    
attachCount: function() {
      if (
addMedia.attachedCount) {
        return 
addMedia.attachedCount();
      }
      if (!
previewEl) {
        return 
0;
      }
      if (!
multi) {
        return 
previewEl.childNodes.length;
      }
      var 
num = (editable && window.ThumbsEdit ? ((ThumbsEdit.cache()['thumbs_edit' lnkId] || {}).previews || []) : picsEl.childNodes).length dpicsEl.childNodes.length mpicsEl.childNodes.length docsEl.childNodes.length / (docsEl.sorter 1) + progressEl.childNodes.length;
      if (
addMedia.sharePreview) {
        ++
num;
      }
      if (
addMedia.pollPreview) {
        ++
num;
      }
      return 
num;
    },

    
// Inline Polls
    
createPoll: function(data) {
      var 
= (browser.msie6 || data.question) ? '' '1px'html = [], ans;
      var 
incCl data[+ (10 1) * 2] ? 'disabled' ''decCl data[2] ? '' 'disabled';
      
addMedia.pollPreview pdocsEl.appendChild(ce('div', {className'medadd_c medadd_c_poll'innerHTML'
<input onkeydown="cur.addMedia[' 
lnkId '].keyPoll(this, event)" class="text medadd_c_pollq" id="create_poll_question' lnkId '" value="' + (data.question || '') + '" />
<div class="medadd_c_pollh">' 
data.lang.'</div>
<div class="medadd_c_pollans" id="create_poll_answers' 
lnkId '"></div>
<div class="medadd_c_polladd_wr" id="create_poll_add' 
lnkId '">
  <div class="medadd_c_polladd" onclick="cur.addMedia[' 
lnkId '].incPoll()">' data.lang.'</div>
</div>' 
+ (data.edit '' '<div class="checkbox medadd_c_pollcb' + (data.anon ' on' '') + '" id="create_poll_anonymous' lnkId '" onclick="checkbox(this)"><div></div>' data.lang.'</div>')}));
      if (!
data.answersdata.answers = [[0''], [0'']];
      
cur.pollAnswerTemplate '<input onkeydown="cur.addMedia[%lnkid%].keyPoll(this, event)" class="text medadd_c_polla" %attrs%/><div class="page_media_x_wrap medadd_c_pollrem inl_bl" '+ (browser.msie 'title' 'tootltip') + '="'+data.lang.d+'" onmouseover="if (browser.msie) return; showTooltip(this, {text: this.getAttribute('tootltip'), shift: [14, 3, 3], black: 1})" onclick="cur.addMedia[%lnkid%].decPoll(this)"><div class="page_media_x"></div></div>';
      for (var 
0data.answers.lengthl; ++i) {
        
ans data.answers[i];
        
html.push('<div class="medadd_c_polla_wr">' rs(cur.pollAnswerTemplate, {
          
attrs: (ans[0] ? 'id="create_poll_ans' ans[0] + '" value="' ans[1] + '" ' ''),
          
lnkidlnkId
        
}) + '</div>');
        if (
== 9hide('create_poll_add' lnkId);
      }
      
val('create_poll_answers' lnkIdhtml.join(''));
      if (
browser.msie6 || data.question) {
        
elfocus('create_poll_question' lnkId);
        return;
      }
      
addMedia.pollPreview.style.height h;
      
animate(addMedia.pollPreview, {height166}, 200, function() {
        
addMedia.pollPreview.style.height 'auto';
        
elfocus('create_poll_question' lnkId);
      });
    },
    
incPoll: function() {
      var 
answers ge('create_poll_answers' lnkId), answers.childNodes.length;
      if (
10) {
        
elfocus(geByTag1('input'answers.appendChild(ce('div', {
          
className'medadd_c_polla_wr',
          
innerHTMLrs(cur.pollAnswerTemplate, {attrs''lnkidlnkId})
        }))));
      }
      
toggle('create_poll_add' lnkId9);
    },
    
decPoll: function(el) {
      if (
el.tt && el.tt.elel.tt.destroy();
      
re(domPN(el));
      
show('create_poll_add' lnkId);
    },
    
keyPoll: function(elev) {
      
ev ev || window.event;
      if (
ev && (ev.keyCode == 10 || ev.keyCode == 13 || ev.keyCode == 9)) {
        var 
hasClass(el'medadd_c_pollq') ? domFC(domNS(domNS(el))) : domNS(domPN(el));
        if (
n) {
          
elfocus(geByTag1('input'n));
        } else {
          
this.incPoll();
        }
        return 
cancelEvent(ev);
      }
    },
    
pollData: function() {
      var 
answers ge('create_poll_answers' lnkId), trim(val('create_poll_question' lnkId)), a;
      var 
result = {mediaqanonymousisChecked('create_poll_anonymous' lnkId)}, ind 0found false;
      for (var 
el domFC(answers); elel domNS(el)) {
        
trim(val(domFC(el)));
        if (
a) {
          var 
id = -intval((domFC(el).id.match(/^create_poll_ans(d+)$/) || [0, -(ind++)])[1]); // -id or ind
          
result['answers[' id ']'] = a;
          
found true;
        }
      }
      if (!
q) {
        
notaBene('create_poll_question' lnkId);
        return 
false;
      }
      if (!
found) {
        if (!
domFC(answers)) cur.addMedia[lnkId].incPoll();
        
notaBene(domFC(domFC(answers)));
        return 
false;
      }
      return 
result;
    },

    
// Inline Share
    
urlsCancelled: [],
    
shareData: {},
    
checkMessageURLs: function(messageinactive) {
      if (
addMedia.chosenMedia || addMedia.urlAttachmentLoading && addMedia.urlAttachmentLoading[0] > vkNow() - 10000 || addMedia.attachCount() >= limit) {
        return;
      }
      var 
rx inactive urlInactiveExp urlActiveExp,
          
matches;
      while (
message && (matches message.match(rx))) {
        
message message.substr(matches.index matches[0].length);
        var 
url matches[2],
            
query matches[5] || '',
            
initialUrl url;
        if (!
url.match(/^https?:///)) {
          
url 'http://' url;
        }
        if ((
matches[6] || '').length || inArray(urladdMedia.urlsCancelled) || inArray(initialUrladdMedia.urlsCancelled)) {
          continue;
        }
        var 
valid true;
        if (
matches[4].match(/(^|.|//)vkontakte.ru|vk.com/)) {
          
valid query.match(/(#photo|^/(photo|video|album|page|audio|doc)|z=(album|photo|video)|w=(page))(-?d+_)?d+|.(jpg|png|gif)$/) ? true : false;
        
}
        if (
valid) {
         
addMedia.checkURL(initialUrl);
         return;
        }
      }
    },
    
onCheckURLDone: function(resultdata) {
      var 
url '';
      if (
addMedia.urlAttachmentLoading) {
        
re(addMedia.urlAttachmentLoading[2]);
        
toggle(progressElprogressEl.childNodes 0);
        
url addMedia.urlAttachmentLoading[1];
        
addMedia.urlAttachmentLoading false;
        
setStyle(bodyNode, {cursor'default'});
      }
      if (
result) {
        
addMedia.chooseMedia(data[0], data[1], data[2], urltrue);
      }
    },
    
checkURL: function(url) {
      if (!
url) return;
      
addMedia.urlsCancelled.push(url);
      
addMedia.urlAttachmentLoading = [vkNow(), url];

      
re(addMedia.checkURLForm);
      
addMedia.checkURLForm ce('div', {innerHTML'<iframe name="share_parse_iframe' lnkId '"></iframe>'});
      
utilsNode.appendChild(addMedia.checkURLForm);
      var 
parseForm addMedia.checkURLForm.appendChild(ce('form', {
        
action'share.php?act=url_attachment',
        
method'post',
        
target'share_parse_iframe' lnkId
      
}));

      
each({hashcur.share_timehash || cur.options.share.timehash || ''indexlnkIdurlurl}, function(iv) {
        
parseForm.appendChild(ce('input', {type'hidden'nameivaluev}));
      });

      
// var progress = ce('div', {className: 'share_parse_progress progress'});
      // progressEl.appendChild(progress);
      // show(progressEl);
      // addMedia.urlAttachmentLoading.push(progress);
      
setStyle(bodyNode, {cursor'wait'});

      
window.onUploadDone addMedia.onCheckURLDone.pbind(true);
      
window.onUploadFail addMedia.onCheckURLDone.pbind(false);

      
parseForm.submit();
    },
    
addPreview: function(progress) {
      return (
addMedia.sharePreview ldocsEl.appendChild(ce('div', {className'medadd_c medadd_c_link'innerHTML'
<div class="medadd_c_linkcon"><div></div>' 
+ (progress '<div class="progress medadd_c_linkprg"></div>' '') + '</div>'})));
    },
    
showPreview: function(fast) {
      var 
data addMedia.shareData,
          
prev addMedia.sharePreview || addMedia.addPreview();

      if (
data.failed) {
        var 
html getLang('page_not_loaded');
      } else {
        var 
onloadStr fast '' 'onload="if (this.width < 130) cur.shareShowNext();"';
        var 
html = (data.images && data.images[cur.shareShowImg]  ? '<img class="medadd_c_linkimg fl_l" src="' clean(data.images[cur.shareShowImg]) + '" ' onloadStr + (data.imagesStyles && data.imagesStyles[cur.shareShowImg] || '') + ' />' '') + (data.title '<h4 class="medadd_c_linkhead">' data.title '</h4>' '') + (data.description '<div class="medadd_c_linkdsc">' data.description '</div>' '') + '<div class="clear"></div>';
      }

      if (
fast) {
        
val(domFC(prev), html);
        
domFC(prev).style.height 'auto';
      } else {
        var 
hidden = !isVisible(ldocsEl);
        
show(ldocsEl);
        var 
tmpDiv ge(previewId).appendChild(ce('div', {
          
innerHTML'<div class="medadd_c_linkcon">' html '</div>'
        
}, {
          
position'absolute',
          
widthgetSize(prev)[0] - 10,
          
visibility'hidden'
        
}));
        var 
height getSize(tmpDiv)[1] - 12;
        
re(tmpDiv);

        
animate(domFC(prev), {heightheight}, 200, function () {
          
val(domFC(prev), html);
        });
      }
    },
    
showExternalPreview: function () {
      var 
data addMedia.shareData;
      if (!
data.images || !data.images.length) {
        
cur.shareShowImg 0;
        
addMedia.showPreview();
        return;
      } else {
        
cur.shareShowImg = -1;
        
addMedia.addPreview(true);
      }
      
data.imagesStyles = {};
      var 
fast false;

      
cur.shareShowNext = function () {
        var 
tmpImg vkImage();
        
cur.shareShowImg += 1;

        if (
cur.shareShowImg data.images.length 1) {
          
cur.shareShowImg 0;
        } else if (
cur.shareShowImg == 0) {
          for (var 
1data.images.length 1i++) {
            var 
vkImage();
            
t.src data.images[i];
          }
        }
        if (!
data.images.length || isEmpty(data.images) || data.images[cur.shareShowImg] === undefined) {
          
addMedia.showPreview(fast);
          
fast true;
          return;
        }
        
tmpImg.src data.images[cur.shareShowImg];

        var 
imgLoadTimeout setTimeout(function() {
          if (
cur.shareImgInterval === true) return;
          
data.images.splice(cur.shareShowImg1);
          
cur.shareShowNext();
        }, 
5000);

        var 
updatePreview = function() {
          if (
tmpImg.width || tmpImg.height) {
            var 
tmpImg.widthtmpImg.height;
            var 
imgStyle '';
            var 
imgParams '';
            if (
imgLoadTimeout) {
              
clearTimeout(imgLoadTimeout);
            }
            
clearInterval(cur.shareImgInterval);
            if (
20 || 20) {
              
data.images.splice(cur.shareShowImg1);
              if (
data.images.length) {
                return 
setTimeout(cur.shareShowNext0);
              }
            } else {
              if (
&& 150) {
                
150 w;
                
150;
              } else if (
150) {
                
150 h;
                
150;
              }
              
imgStyle 'width: ' 'px; height: ' 'px;';
            }
            if (
data.images.length 1) {
              
imgStyle += 'cursor: pointer';
              
imgParams ' onclick="cur.shareShowNext();"';
            }
            
data.imagesStyles[cur.shareShowImg] = 'style="' imgStyle '"' imgParams;
            
addMedia.showPreview(fast);
            
fast true;
          }
        }
        
clearInterval(cur.shareImgInterval);
        
cur.shareImgInterval setInterval(updatePreview300);
        
setTimeout(updatePreview0);
      }
      
cur.shareShowNext();
    },
    
uploadShare: function(callback) {
      var 
data addMedia.shareDataprev addMedia.sharePreview;
      var 
uploadCont prev.appendChild(ce('div', {innerHTML'<iframe class="upload_frame" name="share_upload_iframe' lnkId '"></iframe>'})),
          
uploadForm uploadCont.appendChild(ce('form', {action'/share.php'method'post'target'share_upload_iframe' lnkId})),
          
photoUrl data.images[cur.shareShowImg];
      
each({
        
act'a_photo',
        
urldata.url,
        
indexlnkId,
        
imagephotoUrl,
        
extradata.extra || 0
      
}, function (iv) {
        
uploadForm.appendChild(ce('input', {type'hidden'nameivaluev}));
      });
      
window.onUploadDone = function(indexparams) {
        
window.onUploadFail window.onUploadDone = function () {};
        
prev.removeChild(uploadCont);
        
addMedia.shareData extend(addMedia.shareData, {
          
user_idparams.user_id,
          
photo_idparams.photo_id,
          
photo_urlphotoUrl,
          
images: []
        });
        
setTimeout(callback0);
      };
      
window.onUploadFail = function(indexmsg) {
        
window.onUploadFail window.onUploadDone = function () {};
        
prev.removeChild(uploadCont);
        
addMedia.shareData.images = [];
        
setTimeout(callback0);
      };
      
cur.shareLastParseSubmitted vkNow();
      
uploadForm.submit();
    },

    
setupPostpone: function(dataexport_row) {
      var 
ed = (cur.editingPost && domPN(ppdocsEl).id == 'wpe_media_preview'), = (browser.msie6 || ed) ? '' '1px'addedhtml false;
      var 
html '<div class="clear_fix">
<div class="fl_l"><input type="hidden" id="postpone_date' 
lnkId '" value="' + (data.date || '') + '" /></div>
<div class="fl_l medadd_c_timerat">' 
data.lang.profile_wall_postpone_at '</div>
<div class="fl_l"><input type="hidden" id="postpone_time' 
lnkId '"/></div></div>';
      if (
cur.editingPost && data.friends_only != undefined) {
        
html += '<div class="medadd_c_timersett">';
        if (
data.status_export != undefined) {
          
html += '<div class="checkbox_status_export' + (data.status_export ' on' '') + ' fl_l" id="status_export' lnkId '" onclick="checkbox(this)" onmouseover="showTooltip(this, {text: '' + data.lang.export_to_twitter + '', black: 1, shift: [12,4,0]});"><div></div></div>';
        }
        if (
data.facebook_export != undefined) {
          
html += '<div class="checkbox_facebook_export' + (data.facebook_export ' on' '') + ' fl_l" id="facebook_export' lnkId '" onclick="checkbox(this)" onmouseover="showTooltip(this, {text: '' + data.lang.export_to_facebook + '', black: 1, shift: [12,4,0]});"><div></div></div>';
        }
        
html += '<div class="checkbox' + (data.friends_only ' on' '') + ' fl_l" id="friends_only' lnkId '" onclick="checkbox(this);checkbox('status_export' + lnkId + '',!isChecked(this));checkbox('facebook_export' + lnkId + '',!isChecked(this));"><div></div>'data.lang.friends_only +'</div></div>';
        
addedhtml true;
      } else if (
cur.editingPost && export_row) {
        
html += export_row;
        
addedhtml true;
      }
      
addMedia.postponePreview ppdocsEl.appendChild(ce('div', {className'medadd_c medadd_c_timer clear_fix' + (addedhtml ' medadd_c_nofixed' ''), innerHTMLhtml}));
      
addMedia.postponePreview.style.height h;
      
stManager.add(['ui_controls.css''ui_controls.js''datepicker.css''datepicker.js'], function() {
        new 
Datepicker('postpone_date' lnkId, {time'postpone_time' lnkIdwidth120noPasttrue});
        if (!
browser.msie6 && !ed) {
          
animate(addMedia.postponePreview, {height33}, 200, function() {
            
addMedia.postponePreview.style.height '';
          });
        }
      });
    },

    
destroy: function() {
      if (
docsEl.sorter) {
        
docsEl.sorter.destroy();
      }
      if (
dpicsEl.qsorter) {
        
dpicsEl.qsorter.destroy();
      }
    },
    
qsorterOpts: function() {
      return {
        
xsizeMath.floor(dpicsEl.offsetWidth 110),
        
width110,
        
height83,
        
clsUp'pam_dpic_up'
      
};
    },
    
resized: function() {
      if (
window.ThumbsEdit) {
        
ThumbsEdit.setWide('thumbs_edit' cur.wallEditComposer.addMedia.lnkId);
      }
      if (
dpicsEl.qsorter) {
        
dpicsEl.qsorter.destroy();
        
qsorter.init(dpicsEladdMedia.qsorterOpts());
      }
    }
  }

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

  
cur.addMedia[lnkId] = addMedia;
  return 
addMedia;
}
function 
goAway(url) { return true; }
function 
gotSession (session_data) {
  
location.reload();
}
function 
showPhoto(photo, list) {
  var 
607607;

  
cur.Rpc.callMethod('showBox''al_photos.php?' ajx2q({act'photo_box'photophotowall_ownerphoto.split('_')[0], widget1, list: list, widget_width654widget1}), {heightwindow.outerHeight || screen.availHeight || 768widthwindow.outerWidth || screen.availWidth || 1028});
  return 
false;
}

function 
showVideo(video, list) {
  
revertLastInlineVideo();
  
cur.Rpc.callMethod('showBox''al_video.php?' ajx2q({act'video_box'videovideo, list: list, wall_ownervideo.split('_')[0], widget_width654widget1}), {heightwindow.outerHeight || screen.availHeight || 768widthwindow.outerWidth || screen.availWidth || 1028});
  return 
false;
}


function 
showCaptchaBox (siddifboxo) {
    
// debugLog(arguments);
  
var difficulty intval(dif) ? '' '&s=1';
  var 
imgSrc o.imgSrc || '/captcha.php?sid=' sid difficulty;
  
cur.Rpc.callMethod('showBox''captcha.php?' ajx2q({act'show_captcha_box'sidsidsrcimgSrcneed_mobilewindow.need_mobile_act == 0widget1widget_width322}), {heightwindow.outerHeight || screen.availHeight || 768widthwindow.outerWidth || screen.availWidth || 1028});
  
cur.RpcMethods.captcha o.onSubmit;
  
cur.RpcMethods.captchaHide o.onHide;
}

try{
stManager.done('api/widgets/al_comments.js');}catch(e){}


// Tiny Scrollbars start (from al_community.js)
(function(w) {
w.Scrollbar = function (objoptions) {
  
this.obj obj ge(obj);
  
this.options options || {};

  
setTimeout((function() {
    
setStyle(obj, {
      
overflow'hidden'
    
});

    var 
size getSize(obj);
    
this.scrollHeight size[1];

    
this.scrollbar ce('div', {
      
className'scrollbar_cont'
    
});
    
setStyle(this.scrollbar, {
      
marginLeft: (size[0] - 16)+'px',
      
heightsize[1] + 'px'
    
});

    
this.inner ce('div', {
      
className'scrollbar_inner'
    
});
    
this.scrollbar.appendChild(this.inner);

    
this.topShadowDiv ce('div', {
      
className'scrollbar_top'
    
});
    
this.bottomShadowDiv ce('div', {
      
className'scrollbar_bottom',
      
widthsize[0]+'px'
    
});
    
this.bottomShadowDiv.style.width this.topShadowDiv.style.width size[0]+'px';
    
obj.parentNode.insertBefore(this.topShadowDivobj);
    
obj.parentNode.insertBefore(this.bottomShadowDivobj.nextSibling);
    
obj.parentNode.insertBefore(this.scrollbarobj);

    
this.mouseMove this._mouseMove.bind(this);
    
this.mouseUp this._mouseUp.bind(this);

    var 
self this;

    function 
down(event) {
      if (
self.moveY) return;

      
addEvent(w.document'mousemove'self.mouseMove);
      
addEvent(w.document'mouseup'self.mouseUp);


      
self.moveY event.screenY - (parseInt(self.inner.style.marginTop) || 0);

      
w.document.body.style.cursor 'pointer';
      
addClass(self.inner'scrollbar_hovered');
      if (
options.startDrag) {
        
options.startDrag();
      }
      return 
cancelEvent(event);
    }


    function 
keydown(event) {
      var 
key event.keyCode;
      switch (
key) {
        case 
40:  self.obj.scrollTop += 20; break;
        case 
38:  self.obj.scrollTop -= 20; break;
        case 
34:  self.obj.scrollTop += self.scrollHeight; break;
        case 
33:  self.obj.scrollTop -= self.scrollHeight; break;
        default: return 
true;
      }
      
self.update(true);
      return 
cancelEvent(event);
    }

    
addEvent(obj'mousewheel'this.wheel.bind(this));
    
addEvent(w'DOMMouseScroll'this.wheel.bind(this));

    if (
browser.safari_mobile) {
      
addEvent(obj'touchstart', function(event) {
        
cur.touchY  event.touches[0].pageY;
        
//return cancelEvent(event);
      
});
      
addEvent(obj'touchmove', function(event) {
        var 
touchY event.touches[0].pageY;
        
cur.touchDiff cur.touchY touchY;
        
obj.scrollTop += cur.touchDiff;
        
cur.touchY touchY;
        
self.update(true);
        return 
cancelEvent(event);
      });
      
addEvent(obj'touchend', function() {
        
cur.animateInt setInterval(function() {
          
cur.touchDiff cur.touchDiff 0.9;
          if (
cur.touchDiff && cur.touchDiff > -1) {
            
clearInterval(cur.animateInt);
          } else {
            
obj.scrollTop += cur.touchDiff;
            
self.update(true);
          }
        }, 
0);
      })
    }

    
addEvent(this.inner'mousedown'down);
    
addEvent(w'keydown'keydown);

    if (
this.contHeight() <= this.scrollHeight) {
      
hide(this.bottomShadowDiv);
    } else {
      
this.bottomShadow true;
    }
    
this.inited true;
    
this.update(true);
  }).
bind(this), 0);
}

w.Scrollbar.prototype._mouseMove = function(event) {
  
this.obj.scrollTop Math.floor((this.contHeight() - this.scrollHeight) * Math.min(1, (event.screenY this.moveY) / (this.scrollHeight 26)));
  
this.update(true);
  return 
false;
}

w.Scrollbar.prototype._mouseUp = function(event) {
  
this.moveY false;
  
removeEvent(w.document'mousemove'this.mouseMove);
  
removeEvent(w.document'mouseup'this.mouseUp);
  
w.document.body.style.cursor 'default';
  
removeClass(this.inner'scrollbar_hovered');
  if (
this.options.stopDrag) {
    
this.options.stopDrag();
  }
  return 
false;
}

w.Scrollbar.prototype.wheel = function(event) {
  if (!
eventevent window.event;
  var 
delta 0;
  if (
event.wheelDeltaY || event.wheelDelta) {
    
delta = (event.wheelDeltaY || event.wheelDelta) / 4;
  } else if (
event.detail) {
    
delta = -event.detail 10
  
}
  var 
stWas this.obj.scrollTop;
  
this.obj.scrollTop -= delta;
  if (
stWas != this.obj.scrollTop && this.shown !== false) {
    
this.update(true);
    return 
false;
  }
}

w.Scrollbar.prototype.contHeight = function() {
  if (
this.contHashCash) {
    return 
this.contHashCash;
  }
  var 
nodes this.obj.childNodes;
  var 
height 0;
  var 
nodes.length;
  while (
i--) {
    
height += nodes[i].offsetHeight || 0;
  }
  
this.contHashCash height;
  return 
height;
}

w.Scrollbar.prototype.update = function(noChangeupdateScroll) {
  if (!
this.inited) {
    return;
  }
  if (!
noChange) {
    
this.contHashCash false;
    if (
this.moveY) {
      return 
true;
    }
  }
  if (
updateScroll) {
    var 
size getSize(this.obj);
    
this.scrollHeight size[1];
  }

  var 
height this.contHeight();
  if (
height <= this.scrollHeight) {
    
hide(this.inner);
    
this.shown false;
    return;
  } else if (!
this.shown) {
    
show(this.inner);
    
this.shown true;
  }
  var 
progress Math.min(1this.obj.scrollTop / (height this.scrollHeight));
  if (
progress != this.topShadow) {
    (
this.topShadow hide show)(this.topShadowDiv);
    
this.topShadow = !this.topShadow;
  }
  if (
progress != this.bottomShadow) {
    (
this.bottomShadow hide show)(this.bottomShadowDiv);
    
this.bottomShadow = !this.bottomShadow;
  }
  if (
height this.obj.scrollTop this.scrollHeight 2) {
    
this.options.more();
  }
  
this.inner.style.marginTop Math.floor((this.scrollHeight 56) * progress) + 'px';
}
})(
window);
// Tiny Scrollbars end



/* Inline video from common.js */
window._videoLastInlined false;
function 
showInlineVideo(videoIdlistIdoptionsevthumb) {
  if (
checkEvent(ev)) return true;

  if (
window.mvcur && mvcur.mvShown) {
    return 
showVideo(videoIdlistIdoptionsev);
  }

  
options options || {};
  
options.params options.params || {act'show_inline'videovideoId, list: listIdautoplay: (options.autoplay) ? 0};
  var 
thumb.clientHeight,
      
thumb.clientWidth,
      
btn geByClass1('video_play_inline'thumb'div');

  
extend(options.params, {widthwheighth});
  
options.onDone = function (titlehtmljsopts) {
    
revertLastInlineVideo();
    
hide(thumb);
    var 
videoWrap ce('div', {id'page_video_inline_wrap' videoIdclassName'page_video_inline_wrap'innerHTMLhtml}, {widthwheighth}),
        
videoBg ge('video_background' videoId);
    
_videoLastInlined = [videoWrapthumb]
    
thumb.parentNode.appendChild(videoWrap);
    
videoBg && setStyle(geByTag1('img'videoBg), {widthwheighth});
    try {
      eval(
'(function () {' js '})();');
    } catch (
e) {
      
debugLog('video inline error'e.messagee.stackejs);
    }
    var 
_n window.Notifier_a window.audioPlayer;
    if (
_nsetTimeout(function() { _n.lcSend('video_start'); }, 0);
    if (
_a && _a.player && !_a.player.paused()) {
      
_a.pauseTrack();
      
_a.pausedByVideo 1;
    }
  };
  
options.showProgress = function () {
    
addClass(btn'video_play_inline_loading');
  };
  
options.hideProgress = function () {
    
removeClass(btn'video_play_inline_loading');
  };
  
ajax.post('al_video.php'options.paramsoptions);
  return 
false;
}

function 
revertLastInlineVideo() {
  if (!
window._videoLastInlined) {
    return;
  }
  
re(_videoLastInlined[0]);
  
show(_videoLastInlined[1]);
  
_videoLastInlined false;
}

function 
showWiki(likeInfo) {
  
likeInfo likeInfo['w'].split('/');
  if (
likeInfo[0] != 'likes') {
    return 
false;
  }
  
WComments.showLikesBox(likeInfo[1]);
}
?>
Онлайн: 2
Реклама