// Kasatkin Vladimir ( tap@ok.ru  icq:22237802 )
// var debugElement = document.createElement("div");

var DEBUGMODE = 0;
var debugElement;


if (DEBUGMODE == 1) {
	debugElement = document.createElement("div");
}


var win1 = false;

var ea_XMLHttp = false; // ea_XMLHttp object

var ea_bFirstPing = true; // сигнализирует о том, с ТЕКУЩЕЙ страницы это первый пинг: используется для инициализации - записи текущей страницы в лог.
var ea_bFirstResponse = true; // сигнализирует о том, с ТЕКУЩЕЙ страницы это первый пинг: используется для инициализации - записи текущей страницы в лог.
var ea_nPingDelaySeconds = 10; // через сколько секунд пинговать сервер в режиме "не чат".
var ea_nSleepAfter = 20; // через сколько секунд бездействия "засыпать"
//var ea_nSleepyPingDelaySeconds = 60; // ( 60 * 20 /60 = 20 минут) через сколько тактов положительных проверок бездействия насильно "будить" и пинговать.
var ea_nSleepyPingDelaySeconds = 2; // ( 60 * 20 /60 = 20 минут) через сколько тактов положительных проверок бездействия насильно "будить" и пинговать.
var ea_nChatPingDelaySeconds = 4 // через сколько секунд пинговать сервер в режиме "чат".
var ea_nSleepyPingDelaySecondscount = 0; // счетчик бездействий
var ea_CurrentPingDelay = ea_nPingDelaySeconds; // изначально пинги устанавливаются в задержку "не чат"

var ea_arrDialogOpened = new Array();  // тут хранятся ID чатов\открытых окон\ - с разными консультантами
var ea_bIsActive = true; // флажок активности - что пользователь что-то делает на странице
var ea_arrCommands = new Array(); // очередь команд

var ea_StopActivityId = 0; // ID таймаута запуска функции "сна" для процедуры его очищения ( просыпания )
var ea_PingServerId = 0; // ID таймаута запуска пинга
var ea_bIsCookieenabled = window.navigator.cookieEnabled; // не работаем с тем, у кого нет кук

var ea_bIsClosed = false;

// глобальные переменные для ссылки на тело документа
var ea_arrBodies; var ea_objBody;


var eaArrAttributes = new Array();
eaArrAttributes['name'] = '';


// decrease load, filter domains.
var isWorkDomain = 1;
var strDomain = 'plast-okno';

if ( document.URL ) {
	var currentDomain1 = document.URL.substring(7,7+strDomain.length).toLowerCase();
	var currentDomain2 = document.URL.substring(7,7+strDomain.length + 4).toLowerCase();
	if (currentDomain1 == strDomain || currentDomain2 == ('www.' + strDomain) ) {
		isWorkDomain = 1;
	}
}


//if (eaArrAttributes.ip && (isWorkDomain == 1) && eaArrAttributes.ip != '82.204.183.20') {
	addHandler(window,'load',ea_initProcess,false);
	addHandler(document,'mousemove',ea_doActivity,false);
	addHandler(document,'mousedown',ea_doActivity,false);



// добавляет команду в очередь
function eaAddCommand(chatid, strCommand, strValue) {
	var objCommand = {chatid: chatid, command: strCommand, value: escape(strValue)};
	ea_arrCommands.push(objCommand);
	if (strCommand == 'send') {
		var objTextArea = document.getElementById('textarea_' + chatid);
		objTextArea.value += (strValue) + "\n";
		objTextArea.scrollTop += 100;
		var objInput = document.getElementById('input_'+chatid);
		objInput.value = '';
	}
	if (strCommand == 'close') {
		ea_bIsClosed = true;
	}
}

// функция, которая поддерживает состояние "активности" при совершение каких-то  действий мышкой
function ea_doActivity(e) {
	if ( ea_arrDialogOpened.length == 0 ) { // chat mode
		ea_CurrentPingDelay = ea_nPingDelaySeconds; 
	} else {
		ea_CurrentPingDelay = ea_nChatPingDelaySeconds;
	}

	if (ea_StopActivityId > 0) { // отодвигаем момент сна, если он должен вызваться (а он должен вызватсья :) )
		clearTimeout(ea_StopActivityId);
		ea_StopActivityId = setTimeout('ea_stopActivity();',ea_nSleepAfter * 1000);
	}
	if (ea_bIsActive == false) { // если мы "спали" - то надо не просто выставить флаг проснувшегося, но и отправить пинг _сразу_
		clearTimeout(ea_PingServerId);
		ea_PingServerId = setTimeout('ea_pingServer(false, true);',0); // ИД не нужен, так как мгновенный вызов. но оставим.
	}
	ea_bIsActive = true;
	ea_nSleepyPingDelaySecondscount = 0;
}


// пытаемся "уснуть" каждые ea_nSleepAfter секунд.
function ea_stopActivity() {
	clearTimeout(ea_PingServerId);
	ea_bIsActive = false;
	if ( ea_arrDialogOpened.length == 0 ) { // chat mode
		ea_CurrentPingDelay = false;
	}
	ea_nSleepyPingDelaySecondscount++; // считаем, сколько тактов сна уже пройдено.
	if (ea_nSleepyPingDelaySecondscount > ea_nSleepyPingDelaySeconds)	{ // если пройдено достаточно, посылаем "пинг спящего".
		ea_nSleepyPingDelaySecondscount = 0;
		ea_PingServerId = setTimeout('ea_pingServer(false, false);',0); // ИД не нужен, так как мгновенный вызов. но оставим.
	}
	ea_StopActivityId = setTimeout('ea_stopActivity();',ea_nSleepAfter * 1000);
}

function ea_closeChat() {
	ea_CurrentPingDelay = ea_nPingDelaySeconds;
}

/*@cc_on @*/
/*@if (@_jscript_version >= 5)
try {
  ea_XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
  try {
    ea_XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
  } catch (e2) {
    ea_XMLHttp = false;
  }
}
@end @*/

if (!ea_XMLHttp && typeof XMLHttpRequest != 'undefined') {
  ea_XMLHttp = new XMLHttpRequest();
}



// функция инициализации. запускается из body.onLoad.
function ea_initProcess() {
	if (!ea_bIsCookieenabled)	{
		return; // не работаем мы с теми, кто куки не использует. на этом функционирование скриптов останавливается
	}
	arrBodies = document.getElementsByTagName('body'); ea_objBody = arrBodies.item(0);
	if (DEBUGMODE == 1) {
		debugElement.setAttribute("id", "debugElement");	
		ea_objBody.appendChild(debugElement);	
		debugElement.innerHTML += ("start<br>");
	}

// exclude registered users
	abcdef = GetCookie('vname');
	if ((eaArrAttributes['name'] == '' || eaArrAttributes['name'] == ' ') && ( abcdef == null) ) {
		setTimeout('ea_pingServer(true, true);',0); // начинаем процесс пингов
		ea_StopActivityId = setTimeout('ea_stopActivity();',ea_nSleepAfter * 1000); // начинаем процесс "умирания"
	}
}

function ea_pingServer(ea_bFirstPing, ea_bIsActivePing) {
	var strParams = 'ea_bFirstPing=';
	if (ea_bFirstPing == true) { // если мы первый раз на страничке - то надо записаться в лог ( кто, откуда ) + инициализация
		ea_bFirstPing = false;
		strParams += '1' + '&url=' + escape(window.location.href) + '&ref=' + escape(document.referrer);
	} else {
		strParams += '0'; // если мы все на той же странице, то просто посылаем серверу, что мы живы, параметры не важны. просто keepalive.
	}
	strParams += ('&ea_bIsActivePing=' + ((ea_bIsActivePing == true)?1:0));
	strParams += '&rnd=' + Math.random().toString().substr(2, 4);  

	// добавляем все команды из очереди
	for (i=0; i < ea_arrCommands.length; i++)	{
		strParams += '&chatid[]=' + ea_arrCommands[i]['chatid'];
		strParams += '&command[]=' + ea_arrCommands[i]['command'];
		strParams += '&value[]=' + ea_arrCommands[i]['value'];
	}

	var maxlastmessageid = 0;
	for (i=0; i < ea_arrDialogOpened.length; i++)	{
		if (ea_arrDialogOpened[i]['lastmessageid'] > maxlastmessageid) {
			maxlastmessageid = ea_arrDialogOpened[i]['lastmessageid'];
		}
	}
	strParams += '&lastmessageid=' + maxlastmessageid;

	// аттрибуты
	if (eaArrAttributes && eaArrAttributes['name']) {
		strParams += '&vname=' + escape(eaArrAttributes['name']);
		// set cookie that user is registered
		if (eaArrAttributes['name']!='' && eaArrAttributes['name']!=' ') {
			SetCookie ('vname', 1);
		}
	}
	/*
	if (eaArrAttributes && eaArrAttributes['name']) {
		strParams += '&vname=our';
	}
	*/


//	if (eaArrAttributes && eaArrAttributes['login']) {
//		strParams += '&vlvisit=' + escape(eaArrAttributes['last_forum_visit']);
//	}


	// добавляем lastping - для всех открытых окон

	// 	strParams += '&lastmessageid=' + ea_arrDialogOpened[ea_arrCommands[i]['chatid']]['lastmessageid'];
	ea_arrCommands = [];

	if (DEBUGMODE == 1) {
//		debugElement.innerHTML += ("first = " + ea_bFirstPing + ", active = " + ea_bIsActivePing + ", currentping = " + ea_CurrentPingDelay + "<br>");
		debugElement.innerHTML += ("<br> - params" + strParams );
	}


	ea_XMLHttp.open("GET", "/e-aid/eavisitor.php?" + strParams, true);
	ea_XMLHttp.onreadystatechange = ea_updatePage;
	ea_XMLHttp.send(null);
	if (DEBUGMODE == 1) {
		debugElement.innerHTML += ("<br> - SENT" );
	}

 	if ((ea_bIsActivePing == true ) && (ea_CurrentPingDelay != false) && (ea_bIsClosed == false) ) { // только для активных пингов продолжаем процесс ( в режиме чата нет... нагрузка блядь) второе условие - на всякий случай.
		ea_PingServerId = setTimeout('ea_pingServer(false, true);',ea_CurrentPingDelay * 1000); // вызов самой себя через ea_nPingDelaySeconds секунд ( разное в зависимости от режима "чат" \ "не чат")
	}
}

// функция проверяет что передал сервер и показывает окошко, если надо
function ea_updatePage() {

if (DEBUGMODE == 1) {
	debugElement.innerHTML += ("<br> - update page" );
}

	if (ea_XMLHttp.readyState == 4) {

if (DEBUGMODE == 1) {
	debugElement.innerHTML += ("<br> - readfy step 2" );
}
//	    var response = ea_XMLHttp.responseText;	 alert(unescape(response));	return;
		var response = ea_XMLHttp.responseXML;
		if (!response){
//			var r1 = ea_XMLHttp.responseText;	 alert(unescape(r1));	return;
			return;
		}

if (DEBUGMODE == 1) {
	debugElement.innerHTML += ("<br> - ready step 3" );
}

xmlRoot = response.documentElement;

// если зарегенный то убить последующие пинги.
isregistered = 0;
isregistered = xmlRoot.getAttribute('isregistered');
if (isregistered > 0) {
	clearTimeout(ea_PingServerId);
	SetCookie ('vname', 1);
}

if (DEBUGMODE == 1) {
	debugElement.innerHTML += ("<br> - ready step 4" );
}

chatArray = xmlRoot.getElementsByTagName('chat');
if (DEBUGMODE == 1) {
	debugElement.innerHTML += ("<br> - ready step 5" );
}


		for (i=0; i < chatArray.length; i++)	{
			var eaSupportId = chatArray.item(i).getAttribute('supportid');
			var eaLastMessageId = chatArray.item(i).getAttribute('lastmessageid');
			var eaSupportName = chatArray.item(i).getAttribute('name');
			var eaArrSupport = {name: eaSupportName};

			// проверяем - открыто это окно или нет и определяем его номер
			var ChatNumber = -1;
			for (k=0; k<ea_arrDialogOpened.length; k++) {
				if (ea_arrDialogOpened[k]['supportid'] == eaSupportId) {
					ChatNumber = k;
				}
			}
			// обновить данные об открытых окнах и ИД последнего сообщения в них
			if (ChatNumber == -1) {
				chatwindowref = chatWindow.createWindow(eaSupportId, eaArrSupport, 200,200);
				ea_arrDialogOpened[ea_arrDialogOpened.length] = {supportid: eaSupportId, lastmessageid: eaLastMessageId, chatwindowref:chatwindowref};
				ea_CurrentPingDelay = ea_nChatPingDelaySeconds;
			} else {
				ea_arrDialogOpened[ChatNumber]['lastmessageid'] = eaLastMessageId;
				chatWindow.highlight(ea_arrDialogOpened[ChatNumber]['chatwindowref']);
			}

			// собираем текст из всех сообщений
			var strMessage = '';
			arrMessages = chatArray.item(i).getElementsByTagName('message');
			for (j=0; j < arrMessages.length; j++)	{			
				if (unescape(arrMessages.item(j).firstChild.data).substr(0,1) == '#') {
					if (ea_bFirstResponse == false) {
						location.href = unescape(arrMessages.item(j).firstChild.data.substr(1,arrMessages.item(j).firstChild.data.length)); 	return;
					}
				} else {
//					strMessage += ">" + unescape(arrMessages.item(j).firstChild.data) + "\n";
					strMessage += unescape(arrMessages.item(j).firstChild.data) + "\n";
				}
			}
			var objArea = document.getElementById('textarea_' + eaSupportId);
			objArea.value += strMessage;
			objArea.scrollTop += 100;

			var objInput = document.getElementById('input_' + eaSupportId);
			objInput.focus();
		}
		ea_bFirstResponse = false;
	}
}

function GetCookie (name) { var arg = name + "="; var alen = arg.length; var clen = document.cookie.length; var i = 0; while (i < clen) { var j = i + alen; if (document.cookie.substring(i, j) == arg) return getCookieVal (j); i = document.cookie.indexOf(" ", i) + 1; if (i == 0) break; } return null; } 
function SetCookie (name, value) { 
	var argv = SetCookie.arguments; 
	var argc = SetCookie.arguments.length; 
	var expires = (argc > 2) ? argv[2] : null; 
	var path = (argc > 3) ? argv[3] : null; 
	var domain = (argc > 4) ? argv[4] : null; 
	var secure = (argc > 5) ? argv[5] : false; 
	document.cookie = name + "=" + escape (value) + ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); 
} 

//function DeleteCookie (name) { var exp = new Date(); exp.setTime (exp.getTime() - 1); var cval = GetCookie (name); document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString(); } var exp = new Date(); exp.setTime(exp.getTime() + (expDays*24*60*60*1000)); 
//function amt(){ var count = GetCookie('count') if(count == null) { SetCookie('count','1') return 1 } else { var newcount = parseInt(count) + 1; DeleteCookie('count') SetCookie('count',newcount,exp) return count } } 
function getCookieVal(offset) { var endstr = document.cookie.indexOf (";", offset); if (endstr == -1) endstr = document.cookie.length; return unescape(document.cookie.substring(offset, endstr)); } 

/*
// small hack
function getCookieVal(offset) { 
	var endstr = document.cookie.indexOf (";", offset); 
	if (endstr == -1) endstr = document.cookie.length; 
	return unescape(document.cookie.substring(offset, endstr)); 
}

function GetCookie (name) { 
	var arg = name + "="; 
	var alen = arg.length; 
	var clen = document.cookie.length; 
	var i = 0; 
	while (i < clen) { 
		var j = i + alen; 
		if (document.cookie.substring(i, j) == arg) 
			return getCookieVal (j); 
		i = document.cookie.indexOf(" ", i) + 1; 
		if (i == 0) 
			break; 
	} 
	return null; 
}
*/