| // чтение cookie |
| function getCookie(cookieName) { |
| if (!cookieName) |
| return false; |
| var cookies = document.cookie.split('; '); |
| for (var i = 0; i < cookies.length; i++) { |
| var singleCookie = cookies[i].split('='); |
| if (singleCookie[0] == cookieName) |
| return singleCookie[1]; |
| } |
| return false; |
| } |
| // установка cookie |
| function setCookie(cookieName, cookieValue, cookieExpire) { |
| if (!cookieName || !cookieValue) |
| return false; |
| var date = (cookieExpire ? new Date(cookieExpire) : new Date()); |
| document.cookie = cookieName + '=' + cookieValue + |
| '; expires=' + date.toGMTString() + |
| '; path=/'; |
| return true; |
| } |
| // удаление cookie |
| function deleteCookie(cookieName) { |
| if (!cookieName) |
| return false; |
| var date = new Date('01/01/1970'); |
| document.cookie = cookieName + '=""' + |
| '; expires=' + date.toGMTString() + |
| '; path=/'; |
| return true; |
| } |
| var windowTop, // обект блока |
| windowOnToggle, // это защита от повторного toggle 0-1 выполняется или нет |
| windowOnReload, // тоже только на аякс |
| windowTopHide, // задается id setTimeout для clearTimeout автоматическое закрытие блока если мыш уходит |
| windowSetReload = (getCookie('windowSetReload') ? getCookie('windowSetReload') : 0), // это настройка на период обновления для аякса |
| windowSetPlay = (getCookie('windowSetPlay') ? true : false), // Настройка проигровать мелодию если есть новые сообщения на форуме |
| windowSetHide = (getCookie('windowSetHide') !== false ? getCookie('windowSetHide') : 3000); // настройка через сколько прятать блок если уйдет мышь |
| |
| $(document).ready(function() { |
| windowTop = $('div#window-topic'); // вписываю главный блок для дальнейшей работы чтобы каждый раз не искать в доме |
| selectReload = windowTop |
| .find("div#window-topic-set select[name='reload'] option[value='"+ windowSetReload +"']"); |
| windowTop.find("div#window-topic-set input[name='windowSetPlay']") |
| .attr('checked',windowSetPlay); // В блоке настройки делает checked для выбранной настройки это можно сделать и посредством php |
| selectHide = windowTop |
| .find("div#window-topic-set select[name='hide'] option[value='"+ windowSetHide +"']"); // тоже самое |
| if (selectHide.text()) { |
| selectHide.attr('selected',1); // устанавливаем чекеды |
| } |
| if (selectReload.text()) { |
| selectReload.attr('selected',1); // устанавливаем чекеды |
| } |
| |
| if (Math.floor(windowSetReload) >= 15) { |
| windowOnReload = setTimeout(windowTopReload, (windowSetReload * 1000)); // Если в настройках включено автообновления запускаем его |
| } |
| }); |
| |
| |
| function windowTopToggle() { // функция открывает закрывает блок превращая в кнопочку |
| if (windowOnToggle) { // если уже выполняется т.е. дважды тыцнул будет глючить |
| return false; |
| } else { |
| windowOnToggle = 1; // выполняется тоггле |
| } |
| if (windowTop.width() > 60) { // Если ширина блока больше значит надо все сворачивать else открывать блок |
| windowTopSet(1); // закрываем блок с настройками |
| windowTop.find('div#forum:first').slideUp(500, function () { // закрытие блока с форумами |
| windowTop.find('div#window-topic-main') |
| .css('display', 'none'); // скрываем ссылку на настройки и крутилку чтобы не путались |
| windowTop.find('div.blockform') |
| .animate({width: '55px'}, 500, function (){ //И всорачиваем <h2> |
| windowOnToggle =0; // закончили |
| }); |
| }); |
| windowTop.unbind("mouseleave"); // Снимаем авто тоггле которое должнобыло автоматически свернуть |
| } else { // Розворачиваем блок |
| windowTop.find('div.blockform') |
| .animate({width: '400px'}, 500, function (){ |
| windowTop.find('div#window-topic-main') |
| .css({display: 'inline'}); |
| windowTop.find('div#forum').slideDown(500, function (){ |
| windowOnToggle = 0; |
| }); |
| }); |
| windowTop.bind("mouseleave", function () { |
| windowTopHide = setTimeout(windowTopToggle, windowSetHide); // Устанавливаю автозакрытие если уйдет мышь с блока |
| }).bind('mouseenter', function () { |
| clearTimeout(windowTopHide); // если мыш зашла обратно снимаем задачу на закрытие |
| }); |
| } |
| return false; |
| } |
| |
| function windowTopSet(a) { // Блок с настройками показать спрятать работает как тогле или принуденно закрыть первым параметром |
| var setObject = windowTop.find('div#window-topic-set'); |
| if (setObject.css('display') !== 'none' || a) { |
| setObject.slideUp(500); // закрыть |
| } else { |
| setObject.slideDown(500); // открыть |
| } |
| } |
| function windowNewIcon(a, b) { // делает мигание иконкой возле форума. a = номер форума которым надо замигать 0-4 и = мигать или отключить мигалку |
| windowTop.find('tbody tr').each(function (c) { |
| if (a == c) { |
| if (!b) { |
| $(this).removeClass('inew') |
| .find('div.icon') |
| .removeClass('inew') |
| .unbind('click') |
| .attr('title','') |
| .css('cursor', 'default'); |
| return true; |
| } else { |
| $(this).addClass('inew') |
| .find('div.icon') |
| .addClass('inew') |
| .css('cursor', 'pointer') // Делаем возможность снять мигалку кликом тип интерестного ничего нет |
| .attr('title','Пометить все темы как прочитаные') |
| .click(function () { // Ну и вешаем на клик эту же функцию только на отключения |
| windowNewIcon(a); |
| // Здесь нужно отпрвить запрос на отметку всех тем как прочитаные в текужем форуме |
| }); |
| return true; |
| } |
| } |
| }); |
| // Функцию надо переписать чет промучился я над ним так уже сделал цыкл надо выбросить да и ремове подправить |
| } |
| |
| function windowReloadToggle(a) { // Крутилка |
| if (a) { |
| windowTop.find('div.window-reload:first') |
| .removeClass('window-reload-off') |
| .addClass('window-reload-on'); |
| } else { |
| windowTop.find('div.window-reload:first') |
| .removeClass('window-reload-on') |
| .addClass('window-reload-off'); |
| } |
| } |
| |
| function setReloadTimeout(a) { // Сохраняем настройки |
| console.log(a.value); |
| if (a.value) { |
| setCookie('windowSetReload', a.value, new Date('01/01/2012')); |
| windowSetReload = a.value; |
| if (Math.floor(windowSetReload) >= 15) { |
| clearTimeout(windowOnReload); |
| windowOnReload = setTimeout(windowTopReload, (windowSetReload * 1000)); |
| } |
| } else { |
| deleteCookie('windowSetReload'); |
| windowSetReload = 0; |
| } |
| } |
| function setHide(a) { // Сохраняем настройки |
| setCookie('windowSetHide', a.value, new Date('01/01/2012')); |
| windowSetHide = a.value; |
| } |
| function setReloadPlay(a) { // Сохраняем настройки |
| if (a.checked) { |
| setCookie('windowSetPlay', true, new Date('01/01/2012')); |
| windowSetPlay = true; |
| } else { |
| deleteCookie('windowSetPlay'); |
| windowSetPlay = false; |
| } |
| } |
| function windowTopReload() { // Функция обновления |
| clearTimeout(windowOnReload); // Разрушаем предыдущую задачу если еще не началась |
| var idTimeout; |
| var arrDateMess = new Array(); |
| // Формируем массив последних сообщений т.е. Отправляет типо такого Вчера 12:47 - DarkRiDDeR на сервер там проверяем если оно не совпадает значет было обновления в какойто теме и выдаст новые данные которые запишем в блок |
| windowTop.find('tr td span.byuser').each(function (){ // Обработаем цыклом. Теперь содержим 5 ников и дат можно их отправлять на сервер |
| arrDateMess.push($(this).text()); // Добавляем в масив текущие данные |
| }); |
| windowReloadToggle(1); // Включаем крутилку |
| // отправляем постом масив сообщений для проверки |
| $.post('test.php', // адрес |
| {'dateMess': arrDateMess}, // Отправляемый массив |
| function(data) { // Получаем ответ JSON если все ок |
| windowReloadToggle(); // Отключаем крутилку |
| if (typeof data.dateMess == 'object') { // если есть обновления |
| windowTop.find('tbody tr td.tcr').each(function (i){ // Ищем где именно |
| |
| if (typeof data.dateMess[i] == 'object') { // Проверяем наявность данных обект или болеан если новых сообщений нет |
| $(this).find('a') // Меняем Ссылку |
| .attr('href', 'viewtopic.php?pid='+ |
| data.dateMess[i][0]) |
| .html(data.dateMess[i][1]); |
| $(this).find('span.byuser').html(data.dateMess[i][2]); // иТекст кто ответил и когда |
| windowNewIcon(i, 1); // Мигаем иконкой |
| } |
| }); // Заканчиваем замену |
| if (windowSetPlay) { // Издаем звук |
| play(); // Можно еще в <title> оповестить |
| } |
| } |
| }, 'json') // Тип данных JSON |
| .error(function (){ // Если ошибка |
| windowReloadToggle(); // отключаем крутилку |
| return false; |
| }); |
| if (windowSetReload >= 15) { // Задаем следующее обновления из настроек |
| windowOnReload = setTimeout(windowTopReload, (windowSetReload * 1000)); |
| } |
| } |
| function play(a) { // Играем |
| textHtml5 = '<audio preload="metadata" autoplay="autoplay">\n'; |
| textHtml5 += '<source src="../sound.ogg" type="audio/ogg; codecs=vorbis">\n'; |
| textHtml5 += '<source src="../sound.mp3" type="audio/mpeg">\n'; |
| textHtml5 += '</audio>\n'; |
| if (!a) { |
| windowTop.find('div#play').html(textHtml5); |
| } else { |
| windowTop.find('div#play').text(''); |
| } |
| setTimeout('play(1)',6000); //Играем не долго на всякий случай я еще не полностью роздуплил HTML5 |
| } |