
var m_ChatTID;
var m_ChatRequestAlert;

function alertBadBrowser()
{
	alert('The chat system requires features which your browser does not supprt. \n\n'+
		'The following browsers are recommended: \n\nInternet Explorer 7 (Windows) \n'+
		'Firefox 3 (Windows, Mac) \nSafari 2+ (Mac) ');
	self.close();
	return null;
}

function openNewChatWindow(recip)
{
	openPopup('/members/chat.asp?recip='+ recip, '_blank', 'status,resizable,toolbar=false', 550, 400);
	return false;
}

function openChatWindow(GUID, ChatID)
{
	openPopup('/members/chat.asp?cid='+ GUID, getChatWinName(ChatID), 'status,resizable,toolbar=false', 550, 400);
	return HideChatRequestAlert();
}

function getChatWinName(ChatID)
{
	return 'Chat_'+ ChatID.toString();
}

function getChatCookie(id)
{
	return getCookie('Chat_'+ id.toString());
}

function setChatCookie(id, value)
{
	setCookie('Chat_'+ id.toString(),value,'/');
}

function getChats()
{
	try {
		var sTime = (new Date()).getTime().toString();
		var xmlhttp = newXmlHttp(ignoreBadBrowser);
		xmlhttp.open("GET", '/global_inc/xml/chat_xml.asp?type=chats&ts='+ sTime, false);
		xmlhttp.send(null);
		
		var xmlDoc, xmlRoot;
		if(xmlhttp.status==200 && xmlhttp.responseText!='') {
			xmlDoc = loadNewXml(xmlhttp.responseText);
			xmlRoot = xmlDoc.documentElement;
		}
		
		var bInitialBuild = (!document.getElementById('ActiveChatList'));
		var sActiveChatList = '';
		
		var iChatCount = parseInt(GetChildNodeValue(xmlRoot, "Count"));
		if(!(isNaN(iChatCount) || iChatCount==0))
		{	//spin through chats; we only want display an alert when the participant has not yet been notified
			var iAlerts = -1;
			var aChatID = new Array();
			var aGUID = new Array();
			var aName = new Array();
			
			var nChats = xmlRoot.getElementsByTagName("Chats")[0].getElementsByTagName("Chat");
			var ChatID;
			for(var n = 0; n<nChats.length; n++) {
				ChatID = GetChildNodeValue(nChats[n],"ID");
				if(GetChildNodeValue(nChats[n],"Notfied")!='1') {
					iAlerts++;
					
					aChatID.length = iAlerts;
					aChatID[iAlerts] = ChatID;
					aGUID.length = iAlerts;
					aGUID[iAlerts] = GetChildNodeValue(nChats[n],"GUID");
					aName.length = iAlerts;
					aName[iAlerts] = GetChildNodeValue(nChats[n],"Name");
					
					AddToChatToolBar(ChatID, aGUID[iAlerts], aName[iAlerts]);
				} else if(bInitialBuild) {
					AddToChatToolBar(ChatID,
						GetChildNodeValue(nChats[n],"GUID"),
						GetChildNodeValue(nChats[n],"Name")
					);
				}
				
				if(GetChildNodeValue(nChats[n],"Unread")!='0') {
					//unread messages; flash the toolbar button
					ChatToolBarFlash(ChatID, 3);
				}
			}
			
			if(iAlerts>=0) {
				var sAlertBody = '', sNameTrailer = '';
				if(iAlerts==0)
				{	//single chat alert
					sNameTrailer = ' wants to chat!';
				} else {
					//multiple alerts
					sAlertBody = 'You have chat requests from:<br><br>';
				}
				
				for(var i = 0; i<aGUID.length; i++) {
					if(i>0) sAlertBody += '<br>';
					sAlertBody += ('<a href=# onclick="return openChatWindow(\''+ aGUID[i] +
						'\','+ aChatID[i] +');">'+ aName[i] + sNameTrailer + '</a>');
				}
				
				RaiseChatRequestAlert(sAlertBody);
			}
		}
		
	} catch(e) {}
	
	pollForChats();
}

function pollForChats(retrys)
{	//chat polling must fire without exception
	try {
		//check for new conversations every 30 seconds
		m_ChatTID = setTimeout(function(){ getChats() }, 30000);
	} catch(e) {
		//retry 9 times before giving up
		if(isNaN(retrys)) retrys = 0;
		
		if(retrys<9) {
			retrys++;
			m_ChatTID = setTimeout(function(){ pollForChats(retrys) }, 1000);
		}
	}
}

function RaiseChatRequestAlert(sAlertBody)
{
	var container = document.getElementById('PageBase_RaiseAlert');
	if(container) {
		if(m_ChatRequestAlert) {
			m_ChatRequestAlert.setBody(sAlertBody);
			
			//IE hack: underlay size does not change with panel size; resize it now
			if(document.all) m_ChatRequestAlert.sizeUnderlay();
			
			m_ChatRequestAlert.show();
		} else {
			m_ChatRequestAlert = new YAHOO.widget.SimpleDialog("ChatRequestAlert", {
				text:sAlertBody,
				iframe:false,
				visible:true,
				close:true,
				draggable:false,
				modal:false,
				underlay:'shadow',
				width:'270px',
				fixedcenter:true
				}
			);
			
			m_ChatRequestAlert.setHeader("Chat Request");
			m_ChatRequestAlert.render(container);
		}
	}
}

function HideChatRequestAlert()
{
	if(m_ChatRequestAlert) m_ChatRequestAlert.hide();
	return false;
}

function AddToChatToolBar(ChatID, GUID, Name)
{
	var ActiveChatList = document.getElementById('ActiveChatList');
	if(!ActiveChatList) {
		WriteTopToolBar('<label>AVAILABLE CHATS</label>');
		var TopToolBarText = document.getElementById('TopToolBarText');
		ActiveChatList = document.createElement('span');
		ActiveChatList.setAttribute('id','ActiveChatList');
		TopToolBarText.appendChild(ActiveChatList);		
	}
	
	var sNewLink = '<a href=# id="ChatTB_'+ ChatID +'" title="'+ Name +'"'+
		' onclick="return openChatWindow(\''+ GUID + '\','+ ChatID +');"'+
		' onmouseover="ChatToolBar_OnMouseOver(this);" onmouseout="ChatToolBar_OnMouseOut(this);">'+
		Name.substr(0,6) + '...</a>';
	
	ActiveChatList.innerHTML = sNewLink + ActiveChatList.innerHTML;
}

function ChatToolBarFlash(ChatID, HowManyTimes, i)
{
	var ChatLink = document.getElementById('ChatTB_'+ ChatID);
	if(!ChatLink) return;
	
	if(isNaN(i)) i = 1;
	
	if(i%2==0) {
		ChatLink.style.backgroundColor = 'Transparent';
	} else {
		ChatLink.style.backgroundColor = 'White';
	}
	
	if(i<(HowManyTimes*2)) {
		i++;
		setTimeout(function(){ ChatToolBarFlash(ChatID, HowManyTimes, i) }, 300);
	}

}

function ChatToolBar_OnMouseOver(sender)
{
	sender.style.backgroundColor = '#F2F6F9';
}

function ChatToolBar_OnMouseOut(sender)
{
	sender.style.backgroundColor = 'Transparent';
}
