﻿var g_contact_id;
var im_contactlist_req;
var im_top_alert_req;
var im_top_alert_dont_subscribe = false;
var im_check_for_new_req;
var im_new_msg_count = 0;
var im_total_unread_msg_count;

function selectLastMessage()
{
	// scroll down the div to the last message
	if ( document.getElementById("lastMessage") != null )
		try
		{
			document.getElementById("lastMessage").focus();
		}
		catch( e ) {}

	// then move focus to input message textarea
	try
	{
		document.getElementById("msg").focus();
	}
	catch( e ) {}
}


/*
обновляет контакт лист с периодичностью в 3 секунды
заменяет таблицу с именем contactList.
*/
function reloadContactList()
{
	if ( $( "#contactListDiv" )[0] )
	{
		var url = window.location.href;
		if ( url.indexOf( "?" ) != -1 )
			url = url.substring( 0, url.indexOf( "?" ) );
		url = url.substring( 0, url.lastIndexOf( "/" ) );
		url += "/im-contact-list-only.aspx";
		
		url += "?ContactListMode=" + $("#ContactListMode").val()
				+ "&t=" + ( ( new Date() ).valueOf() % 10000000 ).toString( 16 );

		if ( $("#contact_id")[0] )
			url += "&contact_id=" + $("#contact_id").val();

		$.get( url,
			function( data )
			{
				if ( data.length != 0 )
				{
					$( "#contactListDiv" ).html( data );
					if ( $( "#TotalUnreadMsgCount" )[0] )
					{
						if ( typeof(im_total_unread_msg_count) == "undefined" )
							im_total_unread_msg_count = $( "#TotalUnreadMsgCount" ).val();
						else {
							if ( im_total_unread_msg_count < $( "#TotalUnreadMsgCount" ).val() )
								newMessageAlert();
							im_total_unread_msg_count = $( "#TotalUnreadMsgCount" ).val();
						}
					}
					
					window.setTimeout( "reloadContactList()", 3000 );  // 3 sec.
				}
			}
		);
	}
}


function OpenMessageWindow()
{
	var wnd;
	var url = 'im-message.aspx?contact_id=' + g_contact_id;
	wnd = window.open( url, 'Message' + g_contact_id,'height=590,width=660,status=yes,toolbar=no,menubar=no,location=yes,resizable=yes,scrollbars=yes' );
	wnd.focus();
	return false;
}


/* вывод конверта на страницах сайта без IM */
function displayEnvelope()
{
	$.get( "im-check-unread-msgs.aspx?t=" + ( ( new Date() ).valueOf() % 10000000 ).toString( 16 ),
		function( data )
		{
			/* возвращается строка вида: 
			Количество непрочитанных + "," + Идентификатор автора самого старого сообщения */
			var arRes = data.split(",");
			if ( Number( arRes[0] ) > 0 )
			{
				$('#im_new_message_alert').css( 'display', 'inline' ).css( 'position', 'relative' );
				$('#im_new_message_placeholder').css( 'display', 'none' );
				/* ссылка на конверте должна открывать диалог 
				переписки с автором самого старого непрочитанного сообщения */
				g_contact_id = arRes[1];
				if ( im_new_msg_count < Number( arRes[0] ) )
					newMessageAlert();
			}
			else
			{
				$('#im_new_message_alert').css( 'display', 'none' );
				$('#im_new_message_placeholder').css( 'display', 'inline' ).css( 'position', 'relative' );
			}
				
			im_new_msg_count = Number( arRes[0] );
			
			// if the response is empty - smth is wrong
			// otherwise - subscribe for update
			if ( data.length != 0 )
			{
				if( im_top_alert_dont_subscribe )
					im_top_alert_dont_subscribe = false;
				else
					window.setTimeout( "displayEnvelope()", 15000 ) // 15 sec.
			}
		}
	);
}


/* проверка наличия новых сообщений на закладке Message */
function checkForUnreadMessages()
{
	$.get( "im-check-unread-msgs.aspx?contact_id=" + $("#contact_id").val() + "&t=" + ( ( new Date() ).valueOf() % 10000000 ).toString( 16 ),
		function( data )
		{
			/* если получен не пустой текст */	
			if ( Number( data ) > 0)
			{
				/* в режиме автоматического чтения сообщений оно просто добавляется в 
				Previous messages */
				if ( $("#auto-read-next").val() == "1" )
				{
					readNextMsg();
					newMessageAlert();
				}
				/* иначе, изменяется текст сообщения и состояние кнопки Read next */
				else
				{
					// если кол-во непрочит. не изменилось - ничего не делаем.
					if ( ImUnreadMsgCount != Number( data ) )
					{
						SetUnreadMsgCount( Number( data ) );
						/* на странице, где есть contact list alert делает только он, чтобы не дублировать */
						if ( !$( '#contactListDiv' )[0] )
							newMessageAlert();
					}
				}
			}
			else
			{
				SetUnreadMsgCount( 0 );
			}
			window.setTimeout( "checkForUnreadMessages()", 3000 );  // 3 sec.
		}
	);
}


/* проверка наличия новых сообщений на закладке User Info (в отдельном окне) */
function checkForUnreadMessagesUserInfo()
{
	$.get( "im-check-unread-msgs.aspx?contact_id=" + $("#contact_id").val() + "&t=" + ( ( new Date() ).valueOf() % 10000000 ).toString( 16 ),
		function( data )
		{
			/* если получен не пустой текст */	
			if ( Number( data ) > 0)
			{
				/* показываем конвертик */
				$( '#gotmail' ).show();
				// если кол-во непрочит. не изменилось - ничего не делаем.
				if ( typeof( ImUnreadMsgCount ) != "undefined" && ImUnreadMsgCount != Number( data ) )
				{
					newMessageAlert();
				}
				ImUnreadMsgCount = Number( data );
			}
			else
			{
				/* скрываем конвертик */
				$( '#gotmail' ).hide();
			}
			ImUnreadMsgCount = Number( data );
			window.setTimeout( "checkForUnreadMessagesUserInfo()", 10000 );  // 10 sec.
		}
	);
}


function newMessageAlert () {
	/* пытается сделать окно активным, или просто заставить его мигать в task bar'е */
	window.focus();
	/* проигрывается звук, выполняется в try на случай, если установлен старый flash player */
	try{
		getFlashMovieObject("im-new-message-sound").Play();
	}
	catch( e )
	{
	}
	/* меняет текст заголовка окна */
	changeWindowTitle();
}


/* меняет заголовок окна при получении нового сообщения, чтобы привлечь внимание пользователя */
function changeWindowTitle(){
	if ( typeof( g_titleChangedCounter ) == "undefined" ) g_titleChangedCounter = 0;
	
	if ( typeof( g_windowTitle ) == "undefined" )
		if ( $( "#newMsgText" )[0] )
			g_windowTitle = $( "#newMsgText" ).val();
		else
		{
			/* если нет getElementById( "newMsgText" ) - скорее всего не успел загрузиться документ,
			 * повторная попытка через полсекунды и выход из фугкции */
			window.setTimeout( "changeWindowTitle()", 500 );
			return;
		}

	var s = document.title;
	document.title = g_windowTitle;
	g_windowTitle = s;
	/* всего текст заголовка меняется 9 раз */
	if ( g_titleChangedCounter == 9 ){
		g_titleChangedCounter = 0;
	}
	else{ 
		g_titleChangedCounter ++;
		window.setTimeout( "changeWindowTitle()", 1000 );
	}
}


/* отправляет сообщение */
function sendMsg()
{
	var res = true;

	$( '#send' ).attr( 'disabled', 'disabled' ).attr( 'src', InactiveSendImageSrc );

	var url = "im-message-only.aspx?send=1&contact_id=" + $( '#contact_id' ).val() +
		"&t=" + ( ( new Date() ).valueOf() % 10000000 ).toString( 16 );
	if ( $( '#include_vessel_id' ).attr( 'checked') )
	{
		url += "&vessel_id=" + $( '#vessel_id' ).val();
		url += "&include_vessel_id=1";
	}
	url += "&msg=";
	url += encodeURIComponent( $( '#msg' ).val() );
	if ( url.length < 2000 )
	{
		var data = $.ajax({
			url: url,
			async: false
			}).responseText;
		if ( data.length > 0 )
		{
			$( '#messages' ).html( data );
			$( '#msg' ).val( '' );
			selectLastMessage();
			$( '#include_vessel_id' ).removeAttr( 'checked');
			res = false;
		}
	}

	return res;
}


function readNextMsg()
{
	var res = true;

	var url = "im-message-only.aspx?read=1&contact_id=" + $( '#contact_id' ).val() +
		"&t=" + ( ( new Date() ).valueOf() % 10000000 ).toString( 16 );
	
	var data = $.ajax({
		url: url,
		async: false
		}).responseText;
	/* сервер не возвращает результат, если был выполнен Sign off */
	if ( data.length > 0 )
	{
		$( '#messages' ).html( data );
		// scroll down the div to the last message
		$( '#lastMessage' )[0].focus();
		SetUnreadMsgCount( ImUnreadMsgCount - 1 );
		res = false;
	}

	return res;
}


// меняет сообщение о кол-ве непрочит. сообщений,
// управляет видимостью этого сообщения и кнопки Read Next
function SetUnreadMsgCount( count )
{
	ImUnreadMsgCount = count;

	var msgSrc = $( '#unread-msg-src' ).html();
	var msg = msgSrc.replace( /%1/g, count );
	$( '#read-text' ).html( msg );

	if ( count <= 0 )
	{
		$( '#read-text' ).hide();
		$( '#read' ).attr( 'disabled', 'disabled' ).attr( 'src', InactiveReadImageSrc );
	}
	else
	{
		$( '#read-text' ).show();
		$( '#read' ).removeAttr( 'disabled' ).attr( 'src', ActiveReadImageSrc );
	}
}


// меняет доступность кнопки Send в зависимости от наличия
// текста сообщения и галочки Include vessel info
function EnableSendButton()
{
	if ( $( '#msg' ).val() != "" || 
			$( '#include_vessel_id' ).attr( 'checked' ) )
	{
		$( '#send' ).removeAttr( 'disabled' ).attr( 'src', ActiveSendImageSrc );
	}
	else
	{
		$( '#send' ).attr( 'disabled', 'disabled' ).attr( 'src', InactiveSendImageSrc );
	}
}
