%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/components/bitrix/socialnetwork.messages_chat/templates/.default/
Upload File :
Create Path :
Current File : //home/bitrix/www/bitrix/components/bitrix/socialnetwork.messages_chat/templates/.default/script.js

if (typeof oForumForm != "object")	
	var oForumForm = {};

var MessageMax = 64000;


/***********************************************************/
var sonetChatRand = -1;
var sonetChatMsgs = "";
var sonetChatTout;
var sonetChatPtr = "";
var sonetChatFocus = true;
var sonetChatOldTitle = "";
var sonetChatNewTitle = "";
var sonetSoundOn = true;
var sonetChatSelection = false;
var sonetChatSelectionRange = false;

if (!window.XMLHttpRequest)
{
	var XMLHttpRequest = function()
	{
		try { return new ActiveXObject("MSXML3.XMLHTTP") } catch(e) {}
		try { return new ActiveXObject("MSXML2.XMLHTTP.3.0") } catch(e) {}
		try { return new ActiveXObject("MSXML2.XMLHTTP") } catch(e) {}
		try { return new ActiveXObject("Microsoft.XMLHTTP") } catch(e) {}
	}
}

var sonetChatXmlHttpAdd = new XMLHttpRequest();
var sonetChatXmlHttpGet = new XMLHttpRequest();
var sonetChatXmlHttpOpt = new XMLHttpRequest();

jsUtils.addEvent(window, "load", sonet_chat_onload);
jsUtils.addEvent(window, "resize", sonet_chat_onresize);
jsUtils.addEvent(document, "keypress", sonet_chat_onkeypress);

if(jsUtils.IsIE())
{
	jsUtils.addEvent(document, "focusin", sonetSetFocus);
	jsUtils.addEvent(document, "focusout", sonetLostFocus);
}
else
{
	jsUtils.addEvent(window, "focus", sonetSetFocus);
	jsUtils.addEvent(window, "blur", sonetLostFocus);
}

function sonetSetFocus()
{
	if(!sonetChatFocus)
	{
		sonetChatFocus = true;
		sonetChatNewTitle = '';
		sonet_chat_settitle();
	}
}

function sonetLostFocus()
{
	sonetChatFocus = false;
}

function sonet_chat_msg_add()
{
	var textarea = document.getElementById('post_message_id');
	
	if (!textarea.value || sonetChatXmlHttpAdd.readyState % 4)
		return;
		
	var user_list = sonet_get_user_param();
	if(user_list == '')
		return;

	var saveText;

	SocNetShowWaitWindow();

	sonetChatRand += 1;

	sonetChatXmlHttpAdd.open("POST", sonetChatMsgAddPath, true);
	sonetChatXmlHttpAdd.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	sonetChatXmlHttpAdd.onreadystatechange = function()
	{
		if(sonetChatXmlHttpAdd.readyState == 4)
		{
			if(sonetChatXmlHttpAdd.status == 200)
			{
				if(jsUtils.trim(sonetChatXmlHttpAdd.responseText).length > 0)
				{
					sonetChatMsgs += '<br /><b>' + messageTrSystem + '</b><br />' + sonetChatXmlHttpAdd.responseText + '<br />';
					sonet_chat_out_msgs(true);
					sonet_play_sound('system');
					textarea.value = saveText;
				}
			}
			else
			{
				sonetChatMsgs += '<br /><b>' + messageTrSystem + '</b><br />' + messageNetworkError + '<br />';
				sonet_chat_out_msgs(true);
				sonet_play_sound('system');
				textarea.value = saveText;
			}
			document.getElementById('post_message_button').disabled = false;
			sonet_chat_msgs_get();
		}
	}

	sonetChatXmlHttpAdd.send("rand=" + sonetChatRand
		+ "&" + sonetChatSessid
		+ "&data=" + encodeURIComponent(textarea.value)
		+ user_list
	);

	saveText = textarea.value;
	textarea.value = '';
	document.getElementById('post_message_button').disabled = true;
	textarea.focus();
}

function sonet_chat_msgs_get(replyMesageId)
{
	clearTimeout(sonetChatTout);
	sonetChatTout = setTimeout("sonet_chat_msgs_get();", Math.round(1000 * sonetChatTimeout));

	var user_list;

	if (sonetChatXmlHttpGet.readyState % 4)
	{
		SocNetCloseWaitWindow();
		return;
	}
	
	sonetChatRand += 1;
	sonetChatXmlHttpGet.open(
		"get",
		sonetChatMsgGetPath + "?"
			+ "rand=" + sonetChatRand
			+ (parseInt(sonetChatUserId)>0? '&user_id='+sonetChatUserId : '')
			+ "&mptr=" + sonetChatPtr
			+ (replyMesageId > 0? '&message_id='+replyMesageId : '')
	);
	sonetChatXmlHttpGet.onreadystatechange = function()
	{
		if (sonetChatXmlHttpGet && sonetChatXmlHttpGet.readyState == 4 && sonetChatXmlHttpGet.status == 200)
		{
			SocNetCloseWaitWindow();

			if(jsUtils.trim(sonetChatXmlHttpGet.responseText) == '')
			{
				if(sonet_set_online_users([]))
					sonet_chat_out_msgs(false);
				return;
			}
				
			var data = sonet_chat_parse(sonetChatXmlHttpGet.responseText);
			if (data[0] == '*')
			{
//				sonet_chat_onload();
				return;
			}
			var bShowMess = false;
			var bShowNotice = false;
			var bSoundMessage = false;
			var bSoundError = false;
			var aUsersOnline = [];
			for (var i = 0; i < data.length; i++)
			{
				var command = data[i].substr(0, 1);
				if (command == '+')
				{
					var user_id = parseInt(data[i].substr(1), 10);
					if(user_id > 0)
						aUsersOnline[aUsersOnline.length] = user_id;
				}

				if (command == 'e')
				{
					sonetChatMsgs += '<br /><b>' + messageTrError + '</b><br />' + data[i + 1] + '<br />';
					bShowMess = true;
					bShowNotice = true;
					bSoundError = true;
					i += 1;
				}

				if (command == 'm')
				{
					sonetChatPtr = data[i + 1];

					if (data[i + 2].substr(0, 2) == "IN")
					{
						var user_id = parseInt(data[i].substr(1), 10);
						sonetChatUserId = parseInt(sonetChatUserId);
						if(sonetChatUserId > 0 && sonetChatUserId == user_id)
						{
							sonetChatMsgs += '<br /><span class="socnet-chat-incoming"><div class="socnet-chat-icon"></div><b>'+sonetChatUser+'</b><br style="clear:both;"/>' 
								+ '<span class="socnet-chat-date">' +sonet_chat_date(data[i + 1]) + '</span> ' + data[i + 3] + '</span><br />';
							bShowMess = true;
							bShowNotice = true;
							bSoundMessage = true;
						}
						else
						{
							var mess_id = parseInt(data[i+2].substr(2), 10);
							sonet_message_notify(user_id, mess_id);
						}
					}
					else
					{
						sonetChatMsgs += '<br /><span class="socnet-chat-outcoming"><div class="socnet-chat-icon"></div><b>'+sonetSelfUser+'</b><br style="clear:both;"/>' 
							+ '<span class="socnet-chat-date">' +sonet_chat_date(data[i + 1]) + '</span> ' + data[i + 3] + '</span><br />';
						bShowMess = true;
					}

					i += 3;
				}
			}
			var bOnlineMess = sonet_set_online_users(aUsersOnline);

			if(bShowMess || bOnlineMess)
				sonet_chat_out_msgs(bShowNotice);

			if(bSoundMessage)
				sonet_play_sound('message');
			else if(bSoundError)
				sonet_play_sound('system');
		}
	}
	sonetChatXmlHttpGet.send(null);
}

function sonet_get_user_param()
{
	var textarea = document.getElementById('post_message_id');
	var form = textarea.form;
	var user_id = '';

	if(form['USER_ID[]'])
	{
		if(form['USER_ID[]'].length > 1)
		{
			for(var i=0; i<form['USER_ID[]'].length; i++)
				if(form['USER_ID[]'][i].checked)
					user_id += '&user_id[]='+form['USER_ID[]'][i].value;
		}
		else if(form['USER_ID[]'].checked)
			user_id += '&user_id[]='+form['USER_ID[]'].value;
	}
	if(parseInt(sonetChatUserId)>0) 
		user_id += "&user_id[]=" + sonetChatUserId;
		
	return user_id;
}

function sonet_chat_out_msgs(bShowNotice)
{
	var o = document.getElementById('sonet_chat_messages');

	//if srollbar in the bottom, lets scroll
	var bScroll = (o.scrollHeight <= o.clientHeight || o.scrollTop > o.scrollHeight-o.clientHeight-10);

	o.innerHTML = sonetChatMsgs;

	if(bScroll)
		o.scrollTop = o.scrollHeight-o.clientHeight+100;
		
	if(!sonetChatFocus && bShowNotice)
	{
		sonetChatNewTitle = messageNewMessage;
		sonet_chat_settitle();
	}
}

function sonet_play_sound(snd)
{
	//no sound to focused window or sound disabled
	if(sonetChatFocus || !sonetSoundOn)
		return;

	//play sound
	var player = document.getElementById('socnet_player');
	if(!player)
		return;

	if(!player.sendEvent)
		player = document.getElementById('socnet_player_embed');

	var file;
	if(snd == 'system')
		file = '/bitrix/sounds/socialnetwork/system_message.mp3';
	else
		file = '/bitrix/sounds/socialnetwork/incoming_message.mp3';

	player.sendEvent('LOAD', file);
	player.sendEvent('PLAY');
}

function sonet_switch_sound(obj)
{
	var bSoundOn = (obj.className == 'socnet-button socnet-sound-on');
	obj.className = (bSoundOn? 'socnet-button socnet-sound-off' : 'socnet-button socnet-sound-on');
	obj.title = (bSoundOn? messSoundOff : messSoundOn);
	sonetSoundOn = !bSoundOn;

	sonet_save_option('socnet', 'chat', 'sound', (bSoundOn? 'N':'Y'));
}

function sonet_save_option(category, name, option, value)
{
	sonetChatXmlHttpOpt.open("get",	'/bitrix/admin/user_options.php?'+'&p[0][c]='+category+
		'&p[0][n]='+name+'&p[0][v]['+option+']='+value+'&'+sonetChatSessid);
	sonetChatXmlHttpOpt.send(null);
}

function sonet_load_last_char()
{
	sonetChatMsgs = "";
	sonetChatPtr = sonetChatLastDate;
	SocNetShowWaitWindow();
	sonet_chat_msgs_get();
	document.getElementById('post_message_id').focus();
}

function sonet_chat_onload()
{
	var el = document.getElementById('post_message_id');
	if(el)
	{
		el.focus();
		sonet_chat_reset();
	}
	sonet_chat_onresize();
}

function sonet_chat_onresize()
{
	var div0 = document.getElementById('socnet_chat_body');
	var div1 = document.getElementById('socnet_chat_info');
	var div2 = document.getElementById('sonet_chat_messages');
	if(!div2)
		return;
	var div3 = document.getElementById('socnet_chat_form');
	var div_selectors = document.getElementById('socnet_chat_selectors');
	var div_group = document.getElementById('socnet_user_list');
	div0.style.height = document.body.clientHeight + 'px';

	var d1 = jsUtils.GetStyleValue(div0, 'padding-top');
	var d2 = jsUtils.GetStyleValue(div0, 'padding-bottom');
	var d3 = jsUtils.GetStyleValue(div2, 'margin-top');
	var d4 = jsUtils.GetStyleValue(div3, 'margin-top');

	var body_margin = parseInt(d1? d1:jsUtils.GetStyleValue(div0, 'paddingTop')) +
		parseInt(d2? d2:jsUtils.GetStyleValue(div0, 'paddingBottom'));

	var h =  document.body.clientHeight - div1.offsetHeight - div3.offsetHeight 
		- body_margin
		- parseInt(d3? d3:jsUtils.GetStyleValue(div2, 'marginTop')) 
		- parseInt(d4? d4:jsUtils.GetStyleValue(div3, 'marginTop'));
	div2.style.height = (h < 30? 30:h) + 'px';
	
	div_group.style.height = document.body.clientHeight - body_margin - div_selectors.offsetHeight - 3 + 'px';
}

function sonet_chat_onkeypress(e)
{
	if(!e) e = window.event;
	if(!e) return;
	if(e.keyCode == 27)
		window.close();
}

function sonet_chat_reset()
{
	//d1 = new Date();
	//sonetChatPtr = d1.getFullYear() + "-" + sonet_chat_date_aux(d1.getMonth() + 1) + "-" + sonet_chat_date_aux(d1.getDate()) + " " + sonet_chat_date_aux(d1.getHours()) + ':' + sonet_chat_date_aux(d1.getMinutes()) + ':' + sonet_chat_date_aux(d1.getSeconds());
	sonetChatPtr = sonetChatNowDate;

	sonetChatMsgs = "";
	//sonetChatMsgs = "";

	clearTimeout(sonetChatTout);
	sonetChatXmlHttpAdd.abort();
	sonetChatXmlHttpGet.abort();

	SocNetShowWaitWindow();
	sonetChatTout = setTimeout("sonet_chat_msgs_get("+sonetChatReplyMesageId+");", 1);
}

function sonet_chat_parse(str)
{
	str = str.replace(/^\s+/, '');
	str = str.replace(/\s+$/, '');
	return str.split(/\r\n/);
}

function sonet_chat_date_aux(num)
{
	if (num < 10)
		return '0' + num;
	else
		return num;
}

function sonet_chat_date(dateString)
{
	d1 = new Date();

	var arDate = dateString.split(" ");
	var arDate1 = arDate[0].split("-");
	var arDate2 = arDate[1].split(":");
	d2 = new Date(arDate1[0], arDate1[1] - 1, arDate1[2], arDate2[0], arDate2[1], arDate2[2]);

	if ((d2.getDate() == d1.getDate()) && (d2.getMonth() == d1.getMonth()))
		return sonet_chat_date_aux(d2.getHours()) + ':' + sonet_chat_date_aux(d2.getMinutes()) + ':' + sonet_chat_date_aux(d2.getSeconds());
	else
		return sonet_chat_date_aux(d2.getDate()) + ' ' + mmTrMonth[d2.getMonth()] + ', ' + sonet_chat_date_aux(d2.getHours()) + ':' + sonet_chat_date_aux(d2.getMinutes()) + ':' + sonet_chat_date_aux(d2.getSeconds());
}

var sonetTitleTrigger = true;
function sonet_chat_settitle()
{
	if(sonetChatNewTitle != '')
	{
		if(sonetChatOldTitle == '')
			sonetChatOldTitle = document.title;

		if(sonetTitleTrigger)
			document.title = sonetChatNewTitle;
		else
			document.title = "*"+sonetChatNewTitle;

		sonetTitleTrigger = !sonetTitleTrigger;

		setTimeout("sonet_chat_settitle()", 1000);
	}
	else
	{
		if(sonetChatOldTitle != '' && document.title != sonetChatOldTitle)
			document.title = sonetChatOldTitle;
	}
}
/**********************************************************/

function SocNetWaitOnKeyPress(e)
{
	if(!e) e = window.event;
	if(!e) return;
	if(e.keyCode == 27)
		SocNetCloseWaitWindow();
}

function SocNetShowWaitWindow()
{
	SocNetCloseWaitWindow();

	var obWndSize = jsUtils.GetWindowSize();

	var div = document.body.appendChild(document.createElement("DIV"));
	div.id = "socnet_wait_window_div";
	div.className = "socnet-waitwindow";
	div.style.right = (5 - obWndSize.scrollLeft) + 'px';
	div.style.top = obWndSize.scrollTop + 5 + "px";

	if(jsUtils.IsIE())
	{
		var frame = document.createElement("IFRAME");
		frame.src = "javascript:''";
		frame.id = "socnet_wait_window_frame";
		frame.className = "socnet-waitwindow";
		frame.style.width = div.offsetWidth + "px";
		frame.style.height = div.offsetHeight + "px";
		frame.style.right = div.style.right;
		frame.style.top = div.style.top;
		document.body.appendChild(frame);
	}
	jsUtils.addEvent(document, "keypress", SocNetWaitOnKeyPress);
}

function SocNetCloseWaitWindow()
{
	jsUtils.removeEvent(document, "keypress", SocNetWaitOnKeyPress);

	var frame = document.getElementById("socnet_wait_window_frame");
	if(frame)
		frame.parentNode.removeChild(frame);

	var div = document.getElementById("socnet_wait_window_div");
	if(div)
		div.parentNode.removeChild(div);
}

/**********************************************************/

function sonet_check_group(el)
{
	var obj_div = document.getElementById(el.id+'_block');
	if(obj_div)
	{
		/*users in this group*/
		var obj = jsUtils.FindChildObject(obj_div, 'div', 'socnet-user-contact', true);
		do
		{
			var chbox = jsUtils.FindChildObject(obj, 'input', false, true);
			if(chbox)
				chbox.checked = el.checked;
		}
		while(obj = jsUtils.FindNextSibling(obj, 'div'));

		//subgroups
		obj = jsUtils.FindChildObject(obj_div, 'div', 'socnet-user-section', true);
		if(obj)
		{
			do
			{
				var chbox = jsUtils.FindChildObject(obj, 'input', false, true);
				if(chbox)
				{
					chbox.checked = el.checked;
					sonet_check_group(chbox);
				}
			}
			while(obj = jsUtils.FindNextSibling(obj, 'div'));
		}
	}
}

function sonet_switch_section(el, div_id)
{
	var bCollapse = (el.className == 'socnet-arrow socnet-arrow-down');
	el.className = (bCollapse? 'socnet-arrow socnet-arrow-right':'socnet-arrow socnet-arrow-down')
	document.getElementById(div_id).style.display = (bCollapse? 'none':'block');
}

function sonet_set_selector(el)
{
	var div = document.getElementById(el.id+'_div');
	if(div.style.display == 'block')
		return
	
	var parentDiv = jsUtils.FindParentObject(el, 'div');
	var selectorDiv = jsUtils.FindChildObject(parentDiv, 'div');
	do
	{
		div = document.getElementById(selectorDiv.id+'_div');
		if(selectorDiv == el)
		{
			selectorDiv.className = 'socnet-selector socnet-selector-active';
			div.style.display = 'block';
		}
		else
		{
			selectorDiv.className = 'socnet-selector';
			div.style.display = 'none';
		}
	}
	while((selectorDiv = jsUtils.FindNextSibling(selectorDiv, 'div')));
}

var sonetCachedUsers = false;
function sonet_cache_users()
{
	var form = document.getElementById('post_message_id').form;
	if(form['USER_ID[]'])
	{
		var aUserElements = (form['USER_ID[]'].length > 1? form['USER_ID[]'] : [form['USER_ID[]']]);
		for(var i=0; i<aUserElements.length; i++)
		{
			var td = jsUtils.FindParentObject(aUserElements[i], 'td');
			td = jsUtils.FindNextSibling(td, 'td');
			var el;
			if(!(el = jsUtils.FindChildObject(td, 'a')))
				el = jsUtils.FindChildObject(td, 'div');
			if(el)
			{
				if(!sonetCachedUsers)
					sonetCachedUsers = {};
				var id = aUserElements[i].value;
				if(!sonetCachedUsers[id])
					sonetCachedUsers[id] = [];
				sonetCachedUsers[id][sonetCachedUsers[id].length] = el;
			}
		}
	}
}

function sonet_set_online_users(aOnline)
{
	bMessOut = false;

	//when talking to specific user
	sonetChatUserId = parseInt(sonetChatUserId);
	if(sonetChatUserId > 0)
	{
		var bOnline = jsUtils.in_array(sonetChatUserId, aOnline);
		var onlineDiv = document.getElementById('socnet_user_online');
		if(onlineDiv)
		{
			var styleVal = (bOnline? 'bx-icon bx-icon-online':'bx-icon bx-icon-offline');
			if(onlineDiv.className != styleVal)
			{
				onlineDiv.className = styleVal;
				onlineDiv.title = (bOnline? messUserOnline : messUserOffline);
				document.getElementById('socnet_user_online_text').innerHTML = onlineDiv.title;
				sonetChatMsgs += '<br /><b>' + messageTrSystem + '</b><br />' + (bOnline? messageTrTalkOnline : messageTrTalkOutline) + '<br />';
				bMessOut = true;
			}
		}
	}

	//users in contact list
	if(!sonetCachedUsers)
		sonet_cache_users();

	if(sonetCachedUsers)
	{
		for(var i in sonetCachedUsers)
		{
			var bOnline = jsUtils.in_array(i, aOnline);
			for(var j=0; j<sonetCachedUsers[i].length; j++)
			{
				var el = sonetCachedUsers[i][j];
				if(el.className.indexOf('socnet-message') == -1)
				{
					var classname = (bOnline? 'socnet-status socnet-online':'socnet-status socnet-offline');
					if(el.className != classname)
						el.className = classname;
				}
			}
		}
	}

	return bMessOut;
}

function sonet_message_notify(user_id, message_id)
{
	if(!sonetCachedUsers)
		sonet_cache_users();

	if(sonetCachedUsers && sonetCachedUsers[user_id])
	{
		for(var j=0; j<sonetCachedUsers[user_id].length; j++)
		{
			var el = sonetCachedUsers[user_id][j];
			if(el.className.indexOf('socnet-message') == -1)
			{
				el.className += ' socnet-message';
				
				//find and replace message link
				var td = jsUtils.FindParentObject(el, 'td');
				td = jsUtils.FindNextSibling(td, 'td');
				var a = jsUtils.FindChildObject(td, 'a');
				if(a)
				{
					a.__bxSaveHref = a.href;
					a.__bxUserId = user_id;
					a.href = sonetReplyPathTemplate.replace(/#user_id#/i, user_id).replace(/#message_id#/i, message_id);
				}

			}
		}
	}
}

function sonet_group_resize(el)
{
	var cell = document.getElementById('socnet_user_group_cell');
	var bVisible = (cell.style.display != 'none');
	if(bVisible)
	{
		cell.style.display = 'none';
		el.className = 'socnet-divider';
	}
	else
	{
		cell.style.display = '';
		el.className = 'socnet-divider socnet-divider-right';
	}

	sonet_chat_onresize();
	sonet_save_option('socnet', 'chat', 'contacts', (bVisible? 'N':'Y'));
}

var sonet_tdToResize, sonet_divToResize, sonet_subDivToResize, sonet_curPos;
function sonet_start_drag(e)
{
	sonet_tdToResize = document.getElementById('socnet_user_group_cell');
	if(sonet_tdToResize.style.display == 'none')
		return;
	sonet_divToResize = document.getElementById('socnet_user_group');
	sonet_subDivToResize = document.getElementById('socnet_user_list');

	if(!e)
		e = window.event
	sonet_curPos = e.clientX;

	jsUtils.addEvent(document, "mousemove", sonet_resize_contact);
	document.onmouseup = sonet_stop_drag;

	var b = document.body;
    b.ondrag = jsUtils.False;
    b.onselectstart = jsUtils.False;
    b.style.MozUserSelect = 'none';
    b.style.cursor = 'e-resize';
}

function sonet_resize_contact(e)
{
	var x = e.clientX;
	if(sonet_curPos == x)
		return;

	var newWidth = sonet_divToResize.offsetWidth+(sonet_curPos - x);
	if(newWidth < 180)
	{
		sonet_divToResize.style.width = '180px';
		sonet_tdToResize.style.width = '180px';
		sonet_subDivToResize.style.width = '178px';
	}
	else
	{
		sonet_divToResize.style.width = newWidth+'px';
		sonet_tdToResize.style.width = newWidth+'px';
		sonet_subDivToResize.style.width = (newWidth-2)+'px';
	}

	sonet_curPos = x;
}

function sonet_stop_drag(e)
{
	jsUtils.removeEvent(document, "mousemove", sonet_resize_contact);
	document.onmouseup = null;

	var b = document.body;
	b.ondrag = null;
	b.onselectstart = null;
	b.style.MozUserSelect = '';
    b.style.cursor = '';

	sonet_chat_onresize();

	sonet_save_option('socnet', 'chat', 'contacts_width', parseInt(sonet_divToResize.style.width));
}

function sonet_open_chat(a)
{
	window.open(a.href, '', 
		'location=yes,status=no,scrollbars=yes,resizable=yes,width=700,height=550,top='+
		Math.floor((screen.height - 550)/2-14)+',left='+Math.floor((screen.width - 700)/2-5)); 

	//restore icons and links from flashing messages icons
	for(var i in sonetCachedUsers)
	{
		for(var j=0; j<sonetCachedUsers[i].length; j++)
		{
			var el = sonetCachedUsers[i][j];
			if(a.__bxUserId == i && el.className.indexOf('socnet-message') != -1)
			{
				el.className = el.className.replace(/\s*socnet-message/i, '');
				//find and replace message link
				var td = jsUtils.FindParentObject(el, 'td');
				td = jsUtils.FindNextSibling(td, 'td');
				var anchor = jsUtils.FindChildObject(td, 'a');
				if(anchor)
					anchor.href = anchor.__bxSaveHref;
			}
		}
	}
}

function sonet_search_focus(el)
{
	if(el.value == messSeachSuggest)
		el.value = '';
	el.className = 'active';
}

function sonet_search_blur(el)
{
	el.className = '';
}

var sonetCurSearchEl = null;
function sonet_search_keypress(el)
{
	if(el.value == '')
	{
		if(sonetCurSearchEl)
			sonetCurSearchEl.innerHTML = (sonetCurSearchEl.innerText? sonetCurSearchEl.innerText : sonetCurSearchEl.textContent);
		return;
	}

	if(!sonetCachedUsers)
		sonet_cache_users();

	if(sonetCachedUsers)
	{
		var value = el.value.toLowerCase();
		var listDiv = document.getElementById('socnet_user_list');
		var listPos = jsUtils.GetRealPos(listDiv);

		for(var i in sonetCachedUsers)
		{
			var bFound = false;
			for(var j=0; j<sonetCachedUsers[i].length; j++)
			{
				var el = sonetCachedUsers[i][j];
				var td = jsUtils.FindNextSibling(jsUtils.FindParentObject(el, 'td'), 'td');
				var a = jsUtils.FindChildObject(td, 'a');
				var pos;
				var txt = (a.innerText? a.innerText : a.textContent);
				if((pos = txt.toLowerCase().indexOf(value)) != -1)
				{
					//open section if closed
					var section = el, first_section = null;
					while(section = jsUtils.FindParentObject(section, 'div', 'socnet-user-contact-block'))
					{
						if(section.style.display == 'none')
						{
							var sect_div = jsUtils.FindPreviousSibling(section, 'div', 'socnet-user-section');
							var arrow = jsUtils.FindChildObject(sect_div, 'div', 'socnet-arrow socnet-arrow-right', true);
							sonet_switch_section(arrow, section.id);
						}
						first_section = section;
					}
					
					//open selector if closed
					var selector = jsUtils.FindParentObject(first_section, 'div');
					if(selector.style.display == 'none')
					{
						var sel_id = selector.id.substring(0, selector.id.length-4); //socnet_selector_friends_div
						sonet_set_selector(document.getElementById(sel_id));
					}
					
					//highlight user name
					if(sonetCurSearchEl && a != sonetCurSearchEl)
						sonetCurSearchEl.innerHTML = (sonetCurSearchEl.innerText? sonetCurSearchEl.innerText : sonetCurSearchEl.textContent);
					a.innerHTML = txt.substring(0, pos)+'<span class="socnet-search-highlight">'+txt.substring(pos, pos+value.length)+'</span>'+txt.substring(pos+value.length);
					
					//scroll to selection
					var pos = jsUtils.GetRealPos(a);
					listDiv.scrollTop = pos['top']-listPos['top'];
					
					sonetCurSearchEl = a;
					bFound = true;
					break;
				}
			}
			if(bFound)
				break;
		}
	}
}

/**********************************************************/

function CreatePalette()
{
	if (oForumForm['PALETTE'])
		return oForumForm['PALETTE'];
	var color_range = ["00","33","66","99","BB","FF"];
	var rgb = {'R' : 0, 'G' : 0, 'B' : 0, 'color' : ''};
	var oDiv = document.body.appendChild(document.createElement("DIV"));
	oDiv.id = 'palette';
	oDiv.className = 'palette';
	oDiv.style.position = 'absolute';
	oDiv.style.width = '199px';
	oDiv.style.height = '133px';
	var text = '<table class="palette"><tr>';
	for (var ii = 0; ii < 216; ii++)
	{
		rgb['R'] = ii%6; rgb['G'] = Math.round(ii/36)%6; rgb['B'] = Math.round(ii/6)%6;
		rgb['color'] = '#' + color_range[rgb['R']] + '' + color_range[rgb['G']] + color_range[rgb['B']];
		if (ii%18 == 0 && ii > 0)
			text += '</tr><tr>';
		text += ('<td style="background-color:' + rgb['color'] + ';" '+
			'onmouseup="window.color_palette=\'#' + color_range[rgb['R']] + '' + color_range[rgb['G']] + color_range[rgb['B']] + '\'">'+
			'<div></div></td>');
	}
	text += "</tr></table>";
	oDiv.innerHTML = text;
	oForumForm['PALETTE'] = oDiv;
	return oForumForm['PALETTE'];
}

/* Form functions */
function init_form(form)
{
	if (typeof(form) != "object")
		return false;
	if (!oForumForm[form.id] || typeof(oForumForm[form.id]) != "object")
	{
		oForumForm[form.id] = new PostForm(form);
		oForumForm[form.id].Init(form);
	}
	return;
}

function PostForm()
{
	this.open = {"B" : 0, "I" : 0, "U" : 0, "QUOTE" : 0, "FONT" : 0, "COLOR": 0};
	this.tags =  {
		"B" : "simple_tag", "I" : "simple_tag", "U" : "simple_tag", 
		"QUOTE" : "simple_tag", "FONT" : "simple_tag", "PALETTE" : "show_palette", "COLOR" : "simple_tag", 
		"URL" : "tag_url", "IMG" : "tag_image"};
	this.stack = [];
	this.form = false;
	this.tools = {};
	this.nav = 'none';
	var t = this;
	this.popupMenu = false;
	this.now = {};
	
	this.Init = function(form)
	{
		if (this.form)
			return true;
		if (typeof(form) != "object")
			return false;
		this.form = form;
		/* Simple tags */ 
		oDivs = this.form.getElementsByTagName('DIV');
		if (oDivs && oDivs.length > 0)
		{
			for (var ii = 0; ii < oDivs.length; ii++)
			{
				if (!(oDivs[ii] && oDivs[ii].id && oDivs[ii].id.substring(0, 5) == "form_"))
					continue;
				oDiv = oDivs[ii];
				id = oDiv.id.substring(5).toUpperCase();
				if (id == 'QUOTE')
					oDiv.onmousedown = function(){t.quote();};
				else
					oDiv.onmousedown = function(){
						var id = this.id.substring(5).toUpperCase();
						var objTextarea = t.form['POST_MESSAGE'];
						var selected = false;
						if ((jsUtils.IsIE() || jsUtils.IsOpera()) && (objTextarea.isTextEdit))
						{
							objTextarea.focus();
							var sel = document.selection;
							var rng = sel.createRange();
							rng.colapse;
							if (sel.type=="Text" && rng != null)
							{
								selected = true;
							}
						}
						else if (document.getElementById && (objTextarea.selectionEnd > objTextarea.selectionStart))
						{
							selected = true;
						}
						t.now[id] = false;
						if (!selected)
						{
							return true;
						}
						t.format_text(this, 'onmousedown');
						t.now[id] = true;};
				oDiv.onclick = function(){t.format_text(this, 'onclick')};
				oDiv.onmouseover = function(){this.className += ' marked';};
				oDiv.onmouseout = function(){this.className = this.className.replace(/marked/, '').replace('  ', ' ');};
				if (jsUtils.IsOpera() && oDiv.title)
					oDiv.title = oDiv.title.replace(/\(alt+([^)])+\)/gi, '');
				this.tools[id] = oDiv;
				
			}
		}
		if (this.form['FONT'])
		{
			this.form['FONT'].onchange = function(){t.format_text(this)};
		}
		
		var image = this.form.getElementsByTagName("img");
		if (image && image.length > 0)
		{
			for (var ii = 0; ii < image.length; ii++ )
			{
				if (image[ii].className == "chat-smile")
					image[ii].onclick = function(){t.emoticon(this)};
			}
		}
		
		if (this.form["POST_MESSAGE"])
		{
			this.form["POST_MESSAGE"].onkeyup = function(e){t.OnKeyPress(e);};
			this.form["POST_MESSAGE"].onkeypress = t.check_ctrl_enter;
		}
		
		return true;
	}, 
	
	this.OnKeyPress = function(e)
	{
		if(!e) e = window.event
		if(!e) return;
		if(!e.altKey) return;
		if(e.keyCode == 73)
			this.format_text({'id' : 'form_i', 'value' : ''});
		else if(e.keyCode == 85)
			this.format_text({'id' : 'form_u', 'value' : ''});
		else if(e.keyCode == 66)
			this.format_text({'id' : 'form_b', 'value' : ''});
		else if(e.keyCode == 81)
			this.format_text({'id' : 'form_quote', 'value' : ''});
		else if(e.keyCode == 71)
			this.tag_image();
		else if(e.keyCode == 72)
			this.tag_url();
	},
	
	this.Insert = function (ibTag, ibClsTag, isSingle, postText)
	{
		if (!this.form || !this.form["POST_MESSAGE"])
			return false;
		var textarea = this.form["POST_MESSAGE"];
		var isClose = (isSingle ? true : false);
		postText = (postText == null ? "" : postText);
		this.form["POST_MESSAGE"].focus();
		if (jsUtils.IsIE())
		{
			this.form["POST_MESSAGE"].focus();

			if (sonetChatSelection != false && sonetChatSelectionRange != false)
			{
				var sel = sonetChatSelection;
				var rng = sonetChatSelectionRange;
				sonetChatSelection = false;
				sonetChatSelectionRange = false;
			}
			else
			{
				var sel = document.selection;
				var rng = sel.createRange();
			}

			rng.collapse;
			var parent_name = "";
			if (rng.parentElement && rng.parentElement() && rng.parentElement().name)
			{
				parent_name = rng.parentElement().name;
			}
			if (parent_name != "POST_MESSAGE")
			{
				textarea.value += ibTag
			}
			else if ((sel.type == "Text" || sel.type == "None") && rng != null)
			{
				if (ibClsTag != "" && rng.text.length > 0)
				{
					ibTag += rng.text + ibClsTag;
					isClose = false;
				}
				else if (postText.length > 0)
				{
					ibTag += postText + ibClsTag;
					isClose = false;
				}
				rng.text = ibTag;
			}
		}
		else if (document.getElementById)
		{
			var text = {"start" : ibTag, "end" : ""};
			if (ibClsTag != "" && textarea.selectionEnd > textarea.selectionStart)
			{
				text["end"] = ibClsTag;
				isClose = false;
			}
			else if (postText.length > 0)
			{
				text["start"] = text["start"] + "" + postText + "" + ibClsTag;
				isClose = false;
			}
			text["start"] = (!text["start"] ? "" : text["start"]);
			text["end"] = (!text["end"] ? "" : text["end"]);
			var sel = {
				"start" : textarea.selectionStart,
				"end" : textarea.selectionEnd};
			
			if (sel["end"] == 1 || sel["end"] == 2)
				sel["end"] = textarea.textLength;
		
			var s1 = (textarea.value).substring(0, sel["start"]);
			var s2 = (textarea.value).substring(sel["start"], sel["end"])
			var s3 = (textarea.value).substring(sel["end"], textarea.textLength);
			textarea.value = s1 + text["start"] + s2 + text["end"] + s3;
			if (sel["start"] != sel["end"])
			{
				textarea.selectionStart = sel["start"];
				textarea.selectionEnd = sel["end"] + text["start"].length + text["end"].length;
			}
			else if (text["start"].length > 0 || text["end"].length > 0)
			{
				textarea.selectionStart = sel["end"] + text["start"].length + text["end"].length;
				textarea.selectionEnd = textarea.selectionStart;
			}
		} 
		else
		{
			textarea.value += ibTag;
		}
		textarea.focus();
		return isClose;
	},
	
	this.format_text = function(oObj, event_name)
	{
		if (!oObj || !oObj.id)
			return false;
		var id = oObj.id.substring(5).toUpperCase();
		if (this.now[id] == true)
		{
			this.now[id] = false;
			return;
		}
		
		if (this.tags[id] == 'simple_tag')
		{
			var tag_start = tag_name = id;
			if (tag_name == 'FONT' || tag_name == 'COLOR')
				tag_start += "=" + oObj.value;

			if (this.open[tag_name] == 0 && (tag_name != 'FONT' || oObj.value != '0') &&
				this.Insert("[" + tag_start + "]", "[/" + tag_name + "]", true))
			{
				this.open[tag_name]++;
				if (this.tools[id])
					this.tools[id].className += ' opened';
				this.stack.push(tag_name);
			}
			else
			{
				var stack_need_insert = [];
				var tag_is_open = false;
				var res = false;
				while (res = this.stack.pop())
				{
					stack_need_insert.unshift(res);
					if (res == tag_name)
					{
						tag_is_open = true;
						break;
					}
				}
				if (!tag_is_open)
					this.stack = stack_need_insert;
				var res = false;
				while (res = stack_need_insert.pop())
				{
					this.Insert("[/" + res + "]", "", false);
					if (this.tools[id])
						this.tools[id].className = this.tools[id].className.replace(/opened/, '').replace('  ', ' ');
					
					this.open[res]--;
				}
			}
		}
		else if (this.tags[id] == 'show_palette')
		{
			this.show_palette(oObj);
		}
		else if (this.tags[id])
		{
			this[this.tags[id]]();
		}
	}, 
	
	this.check_ctrl_enter = function(e)
	{
		if(!e) e = window.event;
		if(!e) return;
		if((e.keyCode == 13 || e.keyCode == 10) && e.ctrlKey)
			t.form.onsubmit();
	},
	
	this.emoticon = function(element)
	{
		this.Insert(" " + element.id + " ", "", false);
	},
	
	this.tag_image = function()
	{
		var need_loop = true;
		do 
		{
			var res = prompt(oText['enter_image'], "http://");
			if (res == null)
			{
				need_loop = false;
				return false;
			}
			else if (res.length <= 0)
			{
				alert("Error! " + oErrors['no_url']);
			}
			else
			{
				need_loop = false;
			}
		}
		while(need_loop);
		this.Insert("[IMG]" + res + "[/IMG]", "", false);
	},
	
	this.tag_url = function( )
	{
		var FoundErrors = '';
		var need_loop = true;
		var oFields = {
			"URL" : {
				"text" : oText['enter_url'],
				"default" : "http://",
				"error" : oErrors['no_url'],
				"value" : ""}, 
			"TITLE" : {
				"text" : oText['enter_url_name'],
				"default" : "My Webpage",
				"error" : oErrors['no_title'],
				"value" : ""}};

		for (var ii in oFields)
		{
			need_loop = true;
			do 
			{
				var res = prompt(oFields[ii]["text"], oFields[ii]["default"]);
				if (res == null)
				{
					need_loop = false;
					return false;
				}
				else if (res.length <= 0)
				{
					alert("Error! " + oFields[ii]["error"]);
				}
				else
				{
					oFields[ii]["value"] = res;
					need_loop = false;
				}
			}
			while(need_loop);
		}
		
		this.Insert("[URL=" + oFields["URL"]["value"] + "]" + oFields["TITLE"]["value"] + "[/URL]", "", false);
	},
	
	this.quote = function ()
	{
		var selection = "";
		var message_id = 0;
		if (document.getSelection)
		{
			selection = document.getSelection();
			selection = selection.replace(/\r\n\r\n/gi, "_newstringhere_").replace(/\r\n/gi, " ");
			selection = selection.replace(/  /gi, "").replace(/_newstringhere_/gi, "\r\n\r\n");
		}
		else if (document.selection)
		{
			selection = document.selection.createRange().text;
		}
		
		if (selection != "")
		{
			selection = selection.replace(/\&shy;/gi, "");
			this.Insert("[QUOTE]", "[/QUOTE]", false, selection);
			this.now['QUOTE']=true;
		}
	}, 
	
	this.show_palette = function(oObj)
	{
		if (!oObj){return false};
		
		if (jsUtils.IsIE())
		{
			sonetChatSelection = document.selection;
			sonetChatSelectionRange = sonetChatSelection.createRange();
		}

		var oPalette = CreatePalette();
		if (!this.popupMenu)
		{
			window.ChatPopupMenu.prototype.ShowMenu = function(control, div)
			{
				var pos = {"top" : 20, "left" : 20};
				this.PopupHide();
				if (typeof(control) == "object")
				{
					id = control.id;
					pos = jsUtils.GetRealPos(control);
					this.ControlPos = pos;
					this.oControl = control;
				}
				
				this.oDiv = div;
				if (this.oDiv)
				{
					this.PopupShow(pos, this.oDiv);
				}
			}
			window.ChatPopupMenu.prototype.CheckClick = function(e)
			{
				if(!this.oDiv){return;}
				if (this.oDiv.style.visibility != 'visible' || this.oDiv.style.display == 'none')
					return;
		        var windowSize = jsUtils.GetWindowSize();
		        var x = e.clientX + windowSize.scrollLeft;
		        var y = e.clientY + windowSize.scrollTop;
		
				/*menu region*/
				pos = jsUtils.GetRealPos(this.oDiv);
				var posLeft = parseInt(pos["left"]);
				var posTop = parseInt(pos["top"])
				var posRight = posLeft + this.oDiv.offsetWidth;
				var posBottom = posTop + this.oDiv.offsetHeight;
				if(x >= posLeft && x <= posRight && y >= posTop && y <= posBottom)
				{
					if (window.color_palette)
					{
						t.format_text({'id' : 'form_color', 'value' : window.color_palette, 'className' : ''});
						this.PopupHide();
					}
				}
		
				if(this.ControlPos)
				{
					var pos = this.ControlPos;
					if(x >= pos['left'] && x <= pos['right'] && y >= pos['top'] && y <= pos['bottom'])
						return;
				}
				this.PopupHide();
			}
			
			this.popupMenu = new ChatPopupMenu();
		}
		this.popupMenu.ShowMenu(oObj, oPalette);
	}
}

//*********************************

function ChatPopupMenu()
{
	this.oDiv = false;
	this.oControl = false;
	this.oControlPos = false;
	this.bRemoveElement = true;
	var _this = this;
}

ChatPopupMenu.prototype.PopupShow = function(pos, div, controlpos)
{
	if (!this.oDiv && !div || (typeof(this.oDiv) != "object" && typeof(div) != "object"))
		return false;
	if (div)
	{
		if (controlpos)
			this.ControlPos = controlpos;
		this.bRemoveElement = false;
		this.oDiv = div;
	}
	else
	{
		this.bRemoveElement = true;
	}

	var w = this.oDiv.offsetWidth; var h = this.oDiv.offsetHeight;
	if (h > 250)
	{
		this.oDiv.style.height = "250px";
		this.oDiv.style.overflow = "auto";
		w += 15;
		this.oDiv.className = "forum-popup-oveflow";
		h = 250;
	}
	pos = jsUtils.AlignToPos(pos, w, h);
	for (var ii in pos)
	{
		if (isNaN(pos[ii]) || !pos[ii] || pos[ii] <= 0)
			pos[ii] = 0;
	}
	this.oDiv.style.width = w + 'px'; 
	this.oDiv.style.visibility = 'visible';
//	this.oDiv.style.display = 'block';
	this.oDiv.style.MozUserSelect = 'none';
	jsFloatDiv.Show(this.oDiv, parseInt(pos["left"]), parseInt(pos["top"]), false, false, false);
	if (this.oControl != null && this.oControl.className)
	{
		this.oControl.className += ' forum-popup-control-active';
	}
	var _this = this;
	jsUtils.addEvent(document, "click", function(e){_this.CheckClick(e)});
	jsUtils.addEvent(document, "keypress", function(e){_this.OnKeyPress(e)});
}

ChatPopupMenu.prototype.PopupHide = function()
{ 
	var _this = this;
	jsUtils.removeEvent(document, "click", function(e){_this.CheckClick(e);});
	jsUtils.removeEvent(document, "keypress", function(e){_this.OnKeyPress(e)});

	if (!this.oDiv)
		return false;
	jsFloatDiv.Close(this.oDiv);
	if (this.oControl != null && this.oControl.className)
	{
		this.oControl.className = this.oControl.className.replace(" forum-popup-control-active", "");
	}
	if (this.bRemoveElement)
	{
		try
		{
			this.oDiv.parentNode.removeChild(this.oDiv);
			this.ControlPos = false;
		}
		catch(e)
		{}
	}
	this.oDiv.style.visibility = 'hidden';
//	this.oDiv.style.display = 'none';
}

ChatPopupMenu.prototype.OnKeyPress = function(e)
{
	if(!e) e = window.event
	if(!e) return;
	if(e.keyCode == 27)
		this.PopupHide();
}

Zerion Mini Shell 1.0