var perPage = 30;
var page = 1;
var selectors;
var current = {language: document.documentElement.lang, period: 'today', group: '', geo: '', country: '', region: '', search: '', nick: '', page: 1};
var totalRows = 0;
function updateLiveInternetCounter()
{
new Image().src = '//counter.yadro.ru/hit?r='+
((typeof(screen)=='undefined')?'':';s'+screen.width+
'*'+screen.height+'*'+(screen.colorDepth?screen.colorDepth:
screen.pixelDepth))+';u'+escape(document.URL)+
';'+Math.random();
}
function niceNumber(n)
{
n = Math.floor(n);
if (Math.abs(n) < 1000) return n;
return n.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ' ');
}
function safeText(s)
{
return s.replace(/&/g,'&').replace(//g,'>');
}
function emptyRow(nick)
{
return {nick: nick, visitors: 0, visitorsDiv: null, rowDiv: null};
}
function aHref(key, value, cloud, aux)
{
var period = key == 'period' ? value : current.period;
var geo = key == 'geo' ? value : current.geo;
var group = key == 'group' ? value : current.group;
var search = key == 'search' ? value : current.search;
var page = key == 'page' ? value : 1;
var language = key == 'language' ? value : current.language;
return " 1 ? 'page=' + page + ';' : '') +
"' " + (cloud >= 0 ? ' class="cloud' + cloud + '" ' : '') + aux +
" onClick='return getRows(\"" + key + "\", \"" + encodeURIComponent(value) + "\");'>";
}
function getSelectors()
{
var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
request.open("GET", '/rating/index.json?what=selectors;lang=' + current.language, true);
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) {
selectors = JSON.parse(request.responseText);
showMessages();
showSelectors();
prevInit();
getRows();
}
}
request.send(null);
}
function showSelectors()
{
var h = '';
var i;
for (i = 0; i < selectors.language.length; i++) {
if (selectors.language[i][0] == current.language)
current.languageTitle = selectors.language[i][1];
}
for (i = 0; i < selectors.period.length; i++) {
if (selectors.period[i][0] == current.period) {
current.periodName = selectors.period[i][1];
break;
}
}
if (i == selectors.period.length) current.periodName = selectors.period[0][1];
for (i = 0; i < selectors.group.length; i++) {
if (selectors.group[i][0] == current.group) {
current.groupName = selectors.group[i][1];
break;
}
}
if (i == selectors.group.length) current.groupName = selectors.group[0][1];
for (i = 0; i < selectors.country.length; i++) {
if (selectors.country[i][0] == current.country) {
current.countryName = selectors.country[i][1];
break;
}
}
if (i == selectors.country.length) current.countryName = selectors.country[0][1];
for (i = 0; i < selectors.region.length; i++) {
if (selectors.region[i][0] == current.geo) {
current.regionName = selectors.region[i][1];
break;
}
}
if (i == selectors.region.length) current.regionName = selectors.region[0][1];
h += '' +
'
' + current.groupName + '';
for (i = 0; i < selectors.group.length; i++) {
h += aHref('group', selectors.group[i][0], selectors.group[i][2], '') + selectors.group[i][1] + '';
}
h += '
';
h += '' +
'
' + current.regionName + '';
for (i = 0; i < selectors.region.length; i++) {
h += aHref('geo', selectors.region[i][0], selectors.region[i][2], '') + selectors.region[i][1] + '';
}
h += '
';
h += '' +
'
' + current.countryName + '';
for (i = 0; i < selectors.country.length; i++) {
h += aHref('geo', selectors.country[i][0], selectors.country[i][2], '') + selectors.country[i][1] + '';
}
h += '
';
h += '';
for (i = 0; i < selectors.period.length; i++) {
h += aHref('period', selectors.period[i][0], -1, selectors.period[i][0] == current.period ? 'class="act"' : '') + selectors.period[i][1] + '';
}
h += '
';
/*
h += '' +
'
' +
'
';
for (i = 0; i < selectors.language.length; i++) {
h += '
' +
aHref('language', selectors.language[i][0], -1, '') +
'
' +
selectors.language[i][1] + '
';
}
h += '
';
*/
document.getElementById("selectors").innerHTML = h;
h = '' + aHref('search', '') + current.groupName + ' [' +
(current.geo == current.country ? current.countryName : current.regionName) + ', ' +
current.periodName +
(current.search ? ', ' + selectors.messages["search"] + ': «' + safeText(current.search) + '»' : '') +
']';
document.getElementById("rating_title").innerHTML = h;
}
function showMessages()
{
for (var key in selectors.messages){
var e = document.getElementById('msg_' + key);
if (e) e.innerHTML = selectors.messages[key];
}
document.title = "Ядро: " + selectors.messages["rating_title"];
}
function getRows(key, value)
{
if (key) {
updateLiveInternetCounter();
current.page = 1;
value = decodeURIComponent(value);
if (key == 'period') current.period = value;
else if (key == 'geo') current.geo = value;
else if (key == 'group') current.group = value;
else if (key == 'search') current.search = value;
else if (key == 'page') current.page = parseInt(value);
else if (key == 'language') {
current.language = value;
document.cookie = "lang=" + encodeURIComponent(value) + '; expires=Wed, 17-Aug-2016 18:14:04 GMT; path=/';
getSelectors();
return true;
}
var g = current.geo.split('/');
current.country = g[0];
current.region = g.length > 1 ? g[1] : '';
showSelectors();
}
var request = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0");
request.open("GET", '/rating/' + current.geo + '/' + current.group + '/' + current.period + '.tsv?' +
(current.page > 1 ? 'page=' + current.page : '') +
(current.search ? ';search=' + encodeURIComponent(current.search) : ''),
true);
request.onreadystatechange = function() {
if (request.readyState == 4 && request.status == 200) handleRows(request.responseText);
}
request.send(null);
return true;
}
function handleRows(text)
{
var count = 0;
var rows = text.split('\n');
var header = rows[0].split('\t');
//var now = header[4];
data = new Array(rows.length - 1);
totalRows = parseInt(header[1]);
for (var i = 1; i < rows.length; i++) {
// 0:url 1:title 2:visitors 3:delta 4:shift 5:id 6:mark
// 7:domain 8:prevDelta 9:visitorsDiv 10:timestamp
var v = rows[i].split('\t');
if (v.length < 4) continue;
var d = emptyRow(v[0]);
d.url = v[1];
d.title = v[2];
d.visitors = parseInt(v[3]);
d.domain = (d.url.indexOf('/') > 0) ? d.url.substring(0, d.url.indexOf('/')) : d.url;
d.share = parseInt(v[4]);
d.access = v[5];
//d.mark = v[6] ? ' result-hot' : '';
d.pos = count;
data[count++] = d;
}
showPage();
}
function rowCode(i)
{
var d = data[i];
var pos = (current.page - 1) * perPage + i + 1;
if (!d) return "";
var code =
'
'+ // onclick="location.href=\'http://'+ d.url +'\'"> '+
'
' + niceNumber(pos) + '
'+
'
' +
(d.domain ? '
' : '') +
'
'+
'
' + niceNumber(d.visitors) + '
'+
'
'+
'
'+
'
' +
(d.share ? '
' + d.share + '%' : '') +
'
';
return code;
}
function pagesNavigation()
{
var h = '';
if (current.geo)
h = '' + selectors.messages.stat_of_group + ', ' +
niceNumber(totalRows) + ' ' + selectors.messages.sites;
else
h = '';
document.getElementById("stat_of_group").innerHTML = h;
var pagesCount = Math.floor((totalRows - 1) / perPage) + 1;
if (current.page > pagesCount) current.page = pagesCount;
if (pagesCount <= 1) {
document.getElementById('paging').innerHTML = '';
return;
}
h = '';
for (var p = 1; p <= pagesCount; p++) {
if (p == current.page) {
h +='' + p + ' ';
} else if (p == 3 && current.page > 6) {
h += '... ';
p = current.page - 3;
} else if (p == current.page + 3 && pagesCount > current.page + 5) {
h += '... ';
p = pagesCount - 2;
} else {
h += aHref('page', p, -1, '') + p + ' ';
}
}
document.getElementById('paging').innerHTML = h;
}
function showPage()
{
document.body.scrollTop = 0 + 'px';
document.body.scrollLeft = 0 + 'px';
var h = '';
for (i = 0; i < data.length; i++) h += rowCode(i);
var d = document.getElementById('rows');
if (d) d.innerHTML = h;
pagesNavigation();
}
function doSearch()
{
var i = document.getElementById("inp_search");
if (i) getRows("search", encodeURIComponent(i.value));
return false;
}
function prevInit()
{
if ( Modernizr.touch ) {
$('.city').click(function() {
if($(this).hasClass('show')){
$(this).removeClass('show');
} else {
$('.city').removeClass('show');
$('.sort').removeClass('show');
$(this).addClass('show');
}
});
$('.sort').click(function() {
if($(this).hasClass('show')){
$(this).removeClass('show');
} else {
$('.city').removeClass('show');
$('.sort').removeClass('show');
$(this).addClass('show');
}
});
} else {
$('.city').hover(
function(){
$(this).stop(true,true).addClass('show');
},
function(){
$(this).stop(true,true).removeClass('show');
}
);
};
$("body").click(function (event) {
if(event.target.id == "flag_ico"){
$(".hbl").removeClass("act");
$(".flag-block").addClass("act")
}else if(event.target.id == "personal_ico"){
$(".hbl").removeClass("act");
$(".personal-block").addClass("act")
}else if(event.target.id == "search_ico" || event.target.id == "form_search" || event.target.id == "inp_search" || event.target.id == "btn_search" || event.target.id == "bl_search"){
var i = document.getElementById("inp_search");
if (i) i.value = current.search;
$(".hbl").removeClass("act");
$(".search-block").addClass("act")
}else{
$(".hbl").removeClass("act");
}
});
$("#btn_search").click(function () {
return doSearch();
//$('#form_search').submit();
//return false;
});
// $(window).scroll(function(){
// var top = $(this).scrollTop();
// var elem = $('#header');
// elem.css('top', top);
// });
}
function setParameters(str)
{
var p = str.substr(1).split(';');
for (var i = 0; i < p.length; i++) {
var a = p[i].split('=');
a[1] = decodeURIComponent(a[1]);
var s = a[1];
if (a.length > 1) s = s.replace(/[ -,:-?\\]/g, "");
if (a[0] == 'page') current.page = parseInt(a[1]);
else if (a[0] == 'group') current.group = s;
else if (a[0] == 'period') current.period = s;
else if (a[0] == 'search') current.search = a[1];
else if (a[0] == 'lang') current.language = a[1];
else if (a[0] == 'nick') current.nick = a[1];
else if (a[0] == 'country') current.country = s;
else if (a[0] == 'region') current.region = s;
else if (a[0] == 'geo') {
var g = a[1].split('/');
current.geo = a[1];
current.country = g[0];
current.region = g.length > 1 ? g[1] : '';
}
}
}
if (document.cookie) {
var p = document.cookie.split(';');
for (var i = 0; i < p.length; i++) {
var a = p[i].split('=');
a[0] = a[0].replace(/ /g, "");
if (a.length > 1) a[1] = a[1].replace(/[ -,:-?\\]/g, "");
if (a[0] == 'lang') current.language = a[1];
}
}
if (document.location.pathname) { // for compability with old addressing: /rating/ru/495/today.html
var p = document.location.pathname.split('/');
if (p.length > 3) {
var i = 2;
if (p[i].length == 2) {
current.country = p[i++];
if (p.length > i + 1 && parseInt(p[i])) {
current.region = p[i++];
current.geo = current.country + '/' + current.region;
} else {
current.geo = current.country;
}
if (p.length > i + 1) current.group = p[i++];
}
}
var a = p[p.length - 1].split('.');
if (a.length > 1) current.period = a[0];
if (document.location.search) setParameters(document.location.search);
}
if (document.location.hash) setParameters(document.location.hash);
getSelectors();