dailyhwm / Time_Seconds*

// ==UserScript==
// @name Time_Seconds*
// @author Ilovemycomp 2017, Рианти 29.9.2015, demin 2011-2014.
// @version 3.3.1
// @description Время сервера с секундами. Синхронизация с сервером - раз в 10 мин.
// @homepage https://greasyfork.org/ru/scripts/1240-hwm-time-seconds
// @icon http://i.imgur.com/LZJFLgt.png
// @encoding utf-8
// @include https://*heroeswm.*/*
// @include https://*lordswm.com/*
// @exclude */rightcol.php*
// @exclude */ch_box.php*
// @exclude */chat*
// @exclude */ticker.html*
// @exclude */frames*
// @exclude */brd.php*
// @grant GM_deleteValue
// @grant GM_getValue
// @grant GM_listValues
// @grant GM_setValue
// @grant GM_addStyle
// @grant GM_log
// @grant GM_openInTab
// @license GPL-3.0-or-later; https://www.gnu.org/licenses/gpl-3.0.txt
// ==/UserScript==
try{
    (function() {
        //var b = document.querySelector("body");
        //var online = time_serv.exec(b.innerHTML);
        //console.log("123");
	var version = '3.3.1'
        if (typeof GM_getValue != 'function') {
            this.GM_getValue=function (key,def) {return localStorage[key] || def;};
            this.GM_setValue=function (key,value) {return localStorage[key]=value;};
            this.GM_deleteValue=function (key) {return delete localStorage[key];};
        }
        var url_cur = location.href;
        var url = 'http://'+location.hostname+'/';
        if ( document.querySelector("body") ) {
            if( !GM_getValue("95725_hwm_time_sec_add") ) GM_setValue("95725_hwm_time_sec_add" , '0');
            if( !GM_getValue("95725_time_error_gm") ) GM_setValue("95725_time_error_gm", '0');
            if( !GM_getValue("95725_time_error2_gm") ) GM_setValue("95725_time_error2_gm", '0');
            if( !GM_getValue("95725_last_synch_gm") ) GM_setValue("95725_last_synch_gm", '1318000000000');
            var time_serv = /([^,]*)(, \d+ online.*)/;
            var time_top = /(\d+):(\d+), \d+ online/;
            var all_td = document.getElementsByTagName('td');
            var td_len = all_td.length;
            var td_i;
            var td_ih;
            var time_sec;
            var online;
            var hm;
            for (var i=0; i<td_len; i++) {
                td_i = all_td[i];
                td_ih = td_i.innerHTML;
                if (td_ih.indexOf("<td")!=-1) {continue;}
                if (td_ih.search(time_top)!=-1) {
                    online = (time_serv.exec(td_ih))[2];
                    hm = time_top.exec(td_ih);
                    td_add = document.createElement( 'td' );
                    td_add.setAttribute('align', 'right');
                    td_add.setAttribute('id', 'jsset_ts');
                    td_add.setAttribute('valign', 'bottom');
                    td_add.setAttribute('width', '60');
                    td_add.innerHTML="";
                    td_i.parentNode.insertBefore(td_add, td_i);
                    addEvent($("jsset_ts"), "click", settings);
                    if (Number(GM_getValue("95725_last_synch_gm", '0')) + 60 * 60 * 1000 < (new Date().getTime())) { get_time(); }
                    else if ( GM_getValue("95725_time_sec_gm") ) { show_time(); }
                    else { get_time(); }
                    break;
                }
            }
        }
        function show_time() {
            time_sec = Number(GM_getValue("95725_time_sec_gm"));
// true time
            ct = Math.round( ((new Date().getTime())-time_sec)/1000 );
            dd = Math.floor( ct / 86400 );
            dh = Math.floor( ( ct - dd * 86400 ) / 3600 );
            dm = Math.floor( ( ct - dd * 86400 - dh * 3600 ) / 60 );
            ds = ct % 60;
            if ( (dh!=hm[1]) || (dm-hm[2])>1 || hm[2]>dm ) {
                if ( (dh-hm[1]==1 || hm[1]-dh==23) && (hm[2]-dm==59) ) { showtop(td_i); }
                else {
                    GM_setValue("95725_time_sec_gm", '');
                    var err4 = Number(GM_getValue("95725_time_error2_gm"))+1;
                    GM_setValue("95725_time_error2_gm", ''+err4);
                //alert(hm[1]+':'+hm[2]+' - '+dh+':'+dm+':'+ds);
                    get_time();
                }
            }
            else { GM_setValue("95725_time_error2_gm", '0'); showtop(td_i); }
        }
        function get_time() {
            if ( Number(GM_getValue("95725_time_error_gm"))<4 && Number(GM_getValue("95725_time_error2_gm"))<4 ) {
                if ( Number(GM_getValue("95725_last_synch_gm", '0')) + 60000 < (new Date().getTime()) ) {
                    GM_setValue("95725_last_synch_gm", ''+(new Date().getTime()));
                    var objXMLHttpReqTime = new XMLHttpRequest();
                    objXMLHttpReqTime.open('GET', 'time.php' + '?rand=' + (Math.random()* 1000000), true);
                    objXMLHttpReqTime.onreadystatechange = function() { handleHttpResponseTime(objXMLHttpReqTime); }
                    objXMLHttpReqTime.send(null);
                } else {
                    setTimeout(function() { get_time(); }, 60000);
                }
            }
        }
        function handleHttpResponseTime(obj) {
            if (obj.readyState == 4 && obj.status == 200) {
                if ( sec_serv = /now (\d+)/.exec(obj.responseText) ) {
// 1318550400000  75600000
                    sec_serv = Number( sec_serv[1] ) * 1000 + Number( GM_getValue("95725_hwm_time_sec_add") ) * 1000 - 1318626000000;
                    sec_serv = new Date().getTime() - sec_serv;
                    GM_setValue("95725_time_sec_gm", '' + sec_serv);
                    GM_setValue("95725_time_error_gm", '0');
                    show_time();
                }
                else {
                    var err3 = Number(GM_getValue("95725_time_error_gm"))+1;
                    GM_setValue("95725_time_error_gm", ''+err3);
                    setTimeout(function() { get_time(); }, 30000); // таймер периода обновления, в мс. сейчас = 1 мин.
                }
            }
        }
        function showtop(td_i) {
            ct = Math.round( ((new Date().getTime())-time_sec)/1000 );
            dd = Math.floor( ct / 86400 );
            dh = Math.floor( ( ct - dd * 86400 ) / 3600 );
            dm = Math.floor( ( ct - dd * 86400 - dh * 3600 ) / 60 );
            ds = ct % 60;
            td_i.innerHTML = dh + ':' + ( (dm < 10) ? '0' : '' ) + dm + ':' + ( (ds < 10) ? '0' : '') + ds + online;
            setTimeout(function() {showtop(td_i)}, 1000);
        }
        function settings_close()
        {
            var bg = $('bgOverlay');
            var bgc = $('bgCenter');
            bg.parentNode.removeChild(bg);
            bgc.parentNode.removeChild(bgc);
        }
        function settings()
        {
            var bg = $('bgOverlay');
            var bgc = $('bgCenter');
            var bg_height = ScrollHeight();
            if ( !bg )
            {
                bg = document.createElement('div');
                document.body.appendChild( bg );
                bgc = document.createElement('div');
                document.body.appendChild( bgc );
            }
            bg.id = 'bgOverlay';
            bg.style.position = 'absolute';
            bg.style.left = '0px';
            bg.style.width = '100%';
            bg.style.background = "#000000";
            bg.style.opacity = "0.5";
            bg.style.zIndex = "7";
            bgc.id = 'bgCenter';
            bgc.style.position = 'absolute';
            bgc.style.left = ( ( ClientWidth() - 650 ) / 2 ) + 'px';
            bgc.style.width = '650px';
            bgc.style.background = "#F6F3EA";
            bgc.style.zIndex = "8";
            addEvent(bg, "click", settings_close);
            if ( url.match('lordswm') ) {
                var st_1 = 'Adding';
                var st_2 = 'second(s) to the sync (page load time from the server)';
                var st_4 = 'Restart the script';
            } else {
                var st_1 = 'Добавим';
                var st_2 = 'сеКунд';
				var st_3 = ' (ставим ЗАДЕРЖКУ в загрузке страниц - с сервера)';
                var st_4 = 'Синхронизация!';
            }
            bgc.innerHTML = '<div style="border:6px solid #abc; padding:5px; margin:2px; text-align:center;">'+
				'<div style="float:right; border:1px solid #abc; width:11px; height:15px; text-align:center; cursor:pointer;" id="bt_close_tr">x</div>'+
				'<b style="text-decoration: none; color: #1199FF;">ОТОБРАЖЕНИЕ СЕКУНД. СИНХРОНИЗАЦИЯ С СЕРВЕРОМ.</b>'+
				'<b style="color:red"> v. '+version+'</b>'+
				'<table>'+
                '<tr><td>'+st_1+' <b><input id="hwm_time_add" value="'+
                GM_getValue("95725_hwm_time_sec_add")+
                '" size="1" maxlength="2" style="width: 20px;"></b> '+st_2+' <input type="submit" id="hwm_time_add_ok" value="ok">'+st_3+'</td></tr>'+
                '<tr><td align="center"><input type="submit" id="ref48" value="'+st_4+'"><span id="stat_masage"></span></td></tr>'+
                '</table></div>';
            addEvent($("bt_close_tr"), "click", settings_close);
            addEvent($("hwm_time_add_ok"), "click", hwm_time_add_f);
            addEvent($("ref48"), "click", ref48_f);
            bg.style.top = '0px';
            bg.style.height = bg_height + 'px';
            bgc.style.top = ( window.pageYOffset + 150 ) + 'px';
            bg.style.display = '';
            bgc.style.display = '';
        }
        function hwm_time_add_f()
        {
            if ( Number( $("hwm_time_add").value ) >= 0 ) {
                GM_setValue( "95725_hwm_time_sec_add" , '' + $("hwm_time_add").value );
            }
        }
        function ref48_f()
        {
            GM_setValue("95725_time_error_gm", '0');
            GM_setValue("95725_time_error2_gm", '0');
            GM_setValue("95725_time_sec_gm", '');
            GM_setValue("95725_last_synch_gm", '');
            setTimeout(function(){$("stat_masage").innerHTML = " 1.";},100);
            setTimeout(function(){$("stat_masage").innerHTML += "2..";},400);
            setTimeout(function(){$("stat_masage").innerHTML += "3...";},900);
            setTimeout(function(){$("stat_masage").innerHTML += '<b style="color:red">Okay!</b>';},1300);
            setTimeout(function(){$("stat_masage").innerHTML = "";},8000);
		//setTimeout(function(){settings_close()},5000);
            setTimeout(settings_close,2000);
        }
        function ClientHeight() {
            return document.compatMode=='CSS1Compat' && document.documentElement?document.documentElement.clientHeight:document.body.clientHeight;
        }
        function ClientWidth() {
            return document.compatMode=='CSS1Compat' && document.documentElement?document.documentElement.clientWidth:document.body.clientWidth;
        }
        function ScrollHeight() {
            return Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
        }
        function $(id) { return document.querySelector("#"+id); }
        function addEvent(elem, evType, fn) {
            if (elem.addEventListener) {
                elem.addEventListener(evType, fn, false);
            }
            else if (elem.attachEvent) {
                elem.attachEvent("on" + evType, fn);
            }
            else {
                elem["on" + evType] = fn;
            }
        }
    })();

} catch (E) { console.log(E) }