$jj = jQuery.noConflict();
// открытие окна чата
function wchatopen(id){
window.open('http://behappy2day.com/chat/index.php?gID='+id,
'chatWin',
'top=15,
left=20,
menubar=0,
toolbar=0,
location=0,
directories=0,
status=0,
scrollbars=0,
resizable=0,
width=600,
height=600'
);
return;
}
function getElementSizes(element)
{
var width = element.offsetWidth;
var height = element.offsetHeight;
return {"width": width, "height": height};
}
// удаление элемента DOM
function removeElement(element)
{
if(element)
{
element.parentNode.removeChild(element);
}
}
function getClientWidth()
{
return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}
function getClientHeight()
{
return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}
function chatCreateMainContainer()
{
var mainContainer = document.getElementById("chat_main_container");
if(mainContainer != null)
{
// если контейнер уже существует, то просто возвращаем ссылку на него
return mainContainer;
}
else
{
// создаем элемент Div, который будет служить основным контейнером для всех остальных элементов
var body = document.getElementsByTagName("body")[0];
var newDiv = document.createElement("div");
body.appendChild(newDiv);
newDiv.id = "chat_main_container";
// ширина основного контейнера
var containerWidth = 230;
newDiv.style.width = containerWidth+"px";
newDiv.style.border = "1px solid #5AAED6"; //"1px solid #0000FF";
newDiv.style.borderCollapse = "collapse";
newDiv.style.zIndex = 10000;
newDiv.style.display = "none";
newDiv.style.backgroundColor = "#ffffff";
// позиционирование основного контейнера на видимой области браузера (правый нижний угол)
newDiv.style.position = "fixed";
newDiv.style.bottom = "10px";
newDiv.style.right = "3px";
// определяем первоначальный блок для функций Minimize и Maximize
newDiv.innerHTML = '<div style="height: 20px; background-color: #5AAED6; text-align: right; font-weight: bold; padding-right: 3px; color: #FFFFFF; cursor: pointer; display: none;" id="r_block" onclick="chatMiniMaxi();">Minimize</div>';
// это общий суб-контейнер для блоков-элементов с приглашениями к чату
newDiv.innerHTML += '<div id="visual_elements"></div>';
return newDiv;
}
}
function sendTest()
{
requestProcess("/xml.php", "?v=23", chatShowNewElement, true);
}
// счетчик отображаемых элементов (переменная с глобальной областью видимости)
chatElementCounter = 0;
function chatShowNewElement()
{
if(requestObject.readyState == 4)
{
if(requestObject.status == 200)
{
// определяем вернул ли запрос данные для отображения
var name = requestObject.responseXML.getElementsByTagName("name").item(0).firstChild.data;
// ID нужен для того, чтобы определить не был ли уже показан этот элемент
var id = requestObject.responseXML.getElementsByTagName("id").item(0).firstChild.data;
var se = document.getElementById("e_"+id);
// если количество уже отображаемых элементов не превышает 3, то добавляем новый элемент, если превышает, то ничего не делаем
if(chatElementCounter < 3 && name != "empty" && se == null)
{
var mainContainer = chatCreateMainContainer();
// получаем данные из XML-документа (который получили от сервера)
var name = requestObject.responseXML.getElementsByTagName("name").item(0).firstChild.data;
var city = requestObject.responseXML.getElementsByTagName("city").item(0).firstChild.data;
var age = requestObject.responseXML.getElementsByTagName("age").item(0).firstChild.data;
var mess = requestObject.responseXML.getElementsByTagName("mess").item(0).firstChild.data;
var image = requestObject.responseXML.getElementsByTagName("image").item(0).firstChild.data;
var id = requestObject.responseXML.getElementsByTagName("id").item(0).firstChild.data;
document.getElementById("chat_main_container").style.display = "block";
$jj("#r_block").fadeIn(700);
// создаем HTML-код нового элемента
var newElement = '<div style="display: none; margin: 6px;" id="e_'+id+'"><table border="0" cellspacing="0" cellpadding="0">';
newElement += '<tr>';
newElement += '<td align="center" style="padding-right: 5px;"><img src="'+image+'"></td>';
newElement += '<td align="left" valign="top"><div style="height: 134px; font-size: 13px; font-family: Arial, san-serif; overflow: hidden;"><b>'+name+'</b> (ID: '+id+')<br />Age: '+age+'<br />'+city+'<div style="margin-top: 5px;">'+mess+'</div></td>';
newElement += '</tr>';
newElement += '<tr>';
newElement += '<td align="center" style="padding-bottom: 5px;"><div style="border: 1px solid #D94A24; height: 5px; width: 90%;"><div id="c_'+id+'" style="background-color: #D94A24; overflow: hidden; height: 5px; margin-right: 0%;"> </div></div><a href="/" style="text-decoration: none; color: #5AAED6;" onclick="chatHideElement(\''+id+'\'); return false;">Close</a></td>';
newElement += '<td align="center" style="padding-bottom: 5px;"><button onclick="wchatopen(\''+id+'\')">Start Chat Now</button><fromt action="/" method="post"><input type="hidden" value="open" name="s_'+id+'" id="s_'+id+'" /></form></td>';
newElement += '</tr>';
newElement += '</table></div>';
document.getElementById("visual_elements").innerHTML += newElement;
// если в блоке больше одного элемента, то добавляем разграничивающую линию (верх)
if(chatElementCounter > 0)
{
var nEl = document.getElementById("e_"+id);
nEl.style.borderTop = "1px silver dotted";
nEl.style.paddingTop = "10px";
}
$jj("#e_"+id).slideDown(600);
// увеличиваем счетчик отображаемых элементов
chatElementCounter++;
// запускаем таймер для закрытия блока (после того, как пройдет 1 минута)
evalCloseTimer(500, id);
}
}
else
{
alert("Error of remote server connect - code "+requestObject.status);
}
}
}
function chatMiniMaxi()
{
var rBlock = document.getElementById("r_block");
if(rBlock.innerHTML == "Minimize") rBlock.innerHTML = "Maximize";
else rBlock.innerHTML = "Minimize";
$jj("#visual_elements").slideToggle(700);
}
function chatHideElement(elementID)
{
$jj("#e_"+elementID).slideUp(700);
// определяем статус блока (закрыт или открыт)
var status = document.getElementById("s_"+elementID);
if(status.value == "open")
{
status.value = "closed";
// уменьшаем счетчик отображаемых элементов (если он уже не был закрыт каким-либо другим путем)
chatElementCounter--;
setTimeout(function () {removeElement(document.getElementById("e_"+elementID));}, 700);
}
if(chatElementCounter < 1)
{
$jj("#chat_main_container").fadeOut(700);
}
}
function evalCloseTimer(timeout, elementID)
{
try
{
var intervalID = setInterval(function () {
var element = document.getElementById("c_"+elementID);
var i = parseInt(element.style.marginRight, 10);
if(i < 100)
{
i += 1.7;
element.style.marginRight = i+"%";
}
else
{
clearInterval(intervalID);
chatHideElement(elementID);
return;
}
}, timeout);
}
catch(e) {}
}