﻿var debug     = false;
var pageTitle = "Tchat";
/**
* Multiple eventBinding
* John Resig, erklärt bei quirksmode
*/
function addEvent( obj, type, fn )
{
   if (obj.addEventListener) {
      obj.addEventListener( type, fn, false );
   } else if (obj.attachEvent) {
      obj["e"+type+fn] = fn;
      obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
      obj.attachEvent( "on"+type, obj[type+fn] );
   }
}

function removeEvent( obj, type, fn )
{
   if (obj.removeEventListener) {
      obj.removeEventListener( type, fn, false );
   } else if (obj.detachEvent) {
      obj.detachEvent( "on"+type, obj[type+fn] );
      obj[type+fn] = null;
      obj["e"+type+fn] = null;
   }
}

var inhibitList = new Array();
function limitFrequency(id, func, timer, message) {    
    if (inhibitList[id] == true) {
        if (message)
            alert(message);
                
    } else {
        inhibitList[id] = true;
        setTimeout("clearInhibit('"+id+"')", timer);        
        eval(func);
    }
}

function clearInhibit(id) {
    if (inhibitList[id] == true)
        inhibitList[id] = null;
}

/************* Panel management ******************/
function DisplayPanel(panelName) {        	    
	if (panelName == PANEL_DEFAULT)
	{
	    if ($('pubmain') != null)
	        $('pubmain').src = $('pubmain').src;		           
	}
	    	      
	var panel = $(panelName);
	    
	if (context.DisplayedPanel != null)
	    Element.hide(context.DisplayedPanel);
	else
	    Element.hide(PANEL_DEFAULT);
	    
	context.DisplayedPanel     = panel;
	context.DisplayedPanelName = panelName;	 
	
	Element.show(panelName);
}

/************ Smileys ****************/
function GetSmiles()
{
	SmileyManager.GetSmileys(DisplaySmileysCallBack);
}
function DisplaySmileysCallBack(res)
{
	if (res.error != undefined)
		HandleError(res, DisplaySmileysCallBack);
	
	if (context.SmileyCollection == null)
		context.SmileyCollection = res.value;
	
	context.SmileyCollection.DataBind(TEMPLATE_SMILEY);
}
function AddSmiley(smiley)
{
    var dom = $(MESSAGE_TEXTAREA);
    
    if (dom != null)
    {
        dom.value += smiley;
        dom.focus();
    }
    
    Element.hide(SMILEY_LIST);
}	
/************ Contact Book ****************/
function DisplayContactBook(){
	UserManager.GetContactBook(DisplayContactBookCallBack);
}
function DisplayContactBookCallBack(res){
	if (res.error != undefined)  
		HandleError(res, DisplayContactBookCallBack);
	
	res.value.DataBind(ContactBookTemplateSelector);
	Effects.BlindDown(CONTACT_LIST,{duration: 0.75, fps: 50, transition: Effect.Transitions.linear});
}
function ContactBookTemplateSelector(usr) {
	if (usr == null)
	    return [TEMPLATE_CONTACT_SEPERATOR,TEMPLATE_CONTACT];
	
	if (usr.Type < 10)
	    return TEMPLATE_CONTACT;
	    
	return TEMPLATE_CONTACT_SEPERATOR;
}
/************* User List ******************/
function FirstPage() {
	if (context.CurrentPage > 0)
	    LoadList(0);
	    
	context.CurrentPage = 0;
}
function PreviousPage() {
	if (context.CurrentPage > 0)
		LoadList(--context.CurrentPage);
}
function NextPage() {
	if (context.CurrentPage < context.PageCount - 1)
		LoadList(++context.CurrentPage);
}
function LastPage() {
	if (context.CurrentPage < context.PageCount - 1) LoadList(context.PageCount-1);
	context.CurrentPage = context.PageCount-1;
}
function LoadList(pageIndex) {
    context.CurrentPage = pageIndex;
    
	if (context.IsSearch)
		UserManager.SearchUsers(context.SearchCriteria, pageIndex, context.PageSize, LoadListCallBack);
	else
		UserManager.GetConnectedUsers(pageIndex, context.PageSize, LoadListCallBack);
} 
function LoadListCallBack(res) {
        
	if (res.error != undefined)
		HandleError(res, LoadListCallBack);
			    
	res.value.DataBind(TEMPLATE_CONNECTED);
	context.PageCount = res.value.pageCount;
	
	BindNode(USER_COUNT_TOTAL, res.value.totalLength);
	BindNode(USER_COUNT_LOCAL, res.value.totalLocalizedLength);
	BindNode(USER_COUNT_SEARCH, res.value.totalLength);			
	BindNode(PAGING_TOTAL, context.PageCount);
	
	var idx = 0;
	if (context.PageCount > 0)
	    idx = context.CurrentPage + 1;	
	      
	BindNode(PAGING_INDEX, idx);	
	
	$(CONNECTED_LIST).scrollTop = 0;
}
/************* User ******************/
function DisplayUser(userId) {
    ResetElements("DisplayUser");
    DisplayPanel(PANEL_WAITING);
    
	if (context.CurrentUser == null || context.CurrentUser.Id != userId) {		
		UserManager.GetUser(userId, DisplayUserCallBack);
	
	} else if (context.CurrentUser.Id == userId && context.DisplayedPanelName != PANEL_CONVERSATION) {
		DisplayPanel(PANEL_CONVERSATION);	
		GetMessages(context.CurrentUser.Id);
	}	
}
function DisplayUserCallBack(res) {
	if (res.error != undefined)
	    HandleError(res, DisplayUserCallBack);
		
	context.CurrentUser = res.value;
	
	if (res.value == undefined)
	{		
		DisplayPanel(PANEL_DISCONNECTED);
    }
	else
	{
		GetMessages(res.value.Id);					
		if (res.value.IsAd)
		{		
		    DisplayPanel(PANEL_AD);
		}
		else
		{		
		    DisplayPanel(PANEL_CONVERSATION);	
		    res.value.DataBind(TEMPLATE_PROFILE);
		    BindNode(MESSAGE_CONTROLS_PSEUDO, res.value.Pseudo);
			$(MESSAGE_CONTROLS).style.display = "block";
			$(MESSAGE_TEXTAREA).focus();			
		}
	}
}
function ResetElements(caller) {
    Element.hide(SMILEY_LIST);
    Effects.BlindUp(CONTACT_LIST, {duration: 0.75, fps: 50, transition: Effect.Transitions.linear});
    Effects.BlindUp(MESSAGE_LIST_UNREAD, {duration: 0.75, fps: 50, transition: Effect.Transitions.linear});
    $(MESSAGE_TEXTAREA).value = "";    
    //alert("Rest by: " + caller);	 
}
function BlockUser() {
	if (context.CurrentUser != null) {
	    UserManager.BlockUser(context.CurrentUser.Id);
	    ReadMessage();
	}
	ShowNextMessage();
}
function GetCurrentUser() {
	UserManager.GetCurrentUser(GetCurrentUserCallBack);
}
function GetCurrentUserCallBack(res) {	
	if (!res.error) {
	    context.User = res.value;
		BindNode(PROFILE_NICKNAME, context.User.Pseudo);
	}
}
function GetSupervisor() {
	UserManager.GetSupervisor(GetSupervisorCallBack);
}
function GetSupervisorCallBack(res) {	
	if (res.error) return;
	if (res.value == null) return;
	
	res.value.DataBind(TEMPLATE_SUPERVISOR);
}
function UpdateAvatar(avatarId) {
    UserManager.UpdateAvatar(avatarId, UpdateAvatarCallBack);
}
function UpdateAvatarCallBack(res) {
	if (res.error != undefined)  
		HandleError(res, SyncronizeCallBack);
		
	LoadList(0);
}
function ShowUserOptions() {
    optionsWin = window.open("/option.aspx","options","height=500,width=500,scrollbars=no,status=yes").focus();
    if (optionsWin)
        optionsWin.focus();
}
/************* Message List ******************/
function GetMessages(userId, force) {    
	if (userId == undefined)
	    userId = context.CurrentUser.Id;
	    
	if (context.MsgBlock && context.MsgLastId == userId && !force)
	    return;
	
	ConversationManager.GetMessages(userId, 20, DisplayMessagesCallBack);
	context.MsgBlock  = true;
	context.MsgLastId = userId;

	setTimeout("context.MsgBlock=false", 5000);	
	ResetElements("GetMessages");	
}
function DisplayMessagesCallBack(res) {
	if (res.error != undefined)  
		HandleError(res, DisplayMessagesCallBack);			
				
    res.value.DataBind(MessageItemTemplateSelector);
               	
	if (res.value.length > 0) {
	    $(MESSAGE_CONTROL_UNDO).style.display    = "none";
		$(MESSAGE_CONTROL_NOREPLY).style.display = "inline";	
		$(USER_MESSAGES).scrollTop               = $(USER_MESSAGES).scrollHeight;
	} else {
		$(MESSAGE_CONTROL_NOREPLY).style.display = "none";
		$(MESSAGE_CONTROL_UNDO).style.display    = "inline";	
	}	
	
	try {
	    $(MESSAGE_TEXTAREA).focus();			
	} catch (e) { }
	    
	GetMessageCount(/*true*/);
}
function MessageItemTemplateSelector(msg) {
	if (msg == null)	    
	    return [TEMPLATE_MESSAGE_READ, TEMPLATE_MESSAGE_UNREAD, TEMPLATE_MESSAGE_SENT, TEMPLATE_MESSAGE_AD];
				
	if (msg.Type == 0) {
		if (msg.HasBeenRead)
			return TEMPLATE_MESSAGE_READ;
		else
			return TEMPLATE_MESSAGE_UNREAD;
	}
	
	if (msg.Type == 2)
	    return TEMPLATE_MESSAGE_AD;
	
	return TEMPLATE_MESSAGE_SENT;
}
/************* Message Count ******************/
function AutoRefreshMessageCount() {
	ConversationManager.GetConversations(AutoDisplayMessageCountCallBack);	
}
function GetMessageCount(force) {
	if (context.BlockMessageCount && !force) {
		return;
	}
	else
	{
		context.BlockMessageCount = true;
		setTimeout("context.BlockMessageCount=false", 2000);
	}
	ConversationManager.GetConversations(DisplayMessageCountCallBack);
}
function AutoDisplayMessageCountCallBack(res) {
	DisplayMessageCountCallBack(res);
	if (context.MessagesCount == 0)
		setTimeout(AutoRefreshMessageCount, 15000);
	else if (context.MessagesCount == 1)
		setTimeout(AutoRefreshMessageCount, 40000);
	else setTimeout(AutoRefreshMessageCount, 60000);
}
function DisplayMessageCountCallBack(res){
	if (res.error != undefined)
	    HandleError(res, DisplayMessageCountCallBack);
	    
	if (res.value == 0) {
		context.MessagesCount = 0;
		NewMessages           = new Array(0);
	} else {
	    context.MessagesCount = res.value.length;
	    NewMessages           = res.value;
	}
	if (context.MessagesCount == 0) {
		$(MESSAGE_WAITING_NONE).style.display = 'block';
		$(MESSAGE_WAITING_ONE).style.display  = 'none';
		$(MESSAGE_WAITING_MORE).style.display = 'none';
	} else if (context.MessagesCount == 1) {
		$(MESSAGE_WAITING_NONE).style.display = 'none';
		$(MESSAGE_WAITING_ONE).style.display  = 'block';
		$(MESSAGE_WAITING_MORE).style.display = 'none';
	} else {
		$(MESSAGE_WAITING_NONE).style.display = 'none';
		$(MESSAGE_WAITING_ONE).style.display  = 'none';
		$(MESSAGE_WAITING_MORE).style.display = 'block';
		$(MESSAGE_WAITING_COUNT).innerHTML    = context.MessagesCount;
	}	
	if (NewMessages.length > 0) {
		//waiting messages panel binding
		NewMessages.DataBind(TEMPLATE_MESSAGE_WAIT);
		//blinking "read" button
		$(MESSAGE_STACK_NONE).style.display = 'none';
		$(MESSAGE_STACK_MORE).style.display = 'block';
		
		if (NewMessages.length == 1) {
		    document.title = NewMessages.length + " Message : " + pageTitle;
		} else {
		    document.title = NewMessages.length + " Messages : " + pageTitle;
		}
	} else {
		//un-blinking "read" button		
		$(MESSAGE_STACK_NONE).style.display = 'block';
		$(MESSAGE_STACK_MORE).style.display = 'none';
		
		document.title = pageTitle;
	}
}
function ShowNewMessages(){
	if (context.MessagesCount == 0) {
		DisplayPanel(PANEL_DEFAULT)
		return;
	}
	
	Effects.BlindDown(MESSAGE_LIST_UNREAD, {duration: 0.75, fps: 50, transition: Effect.Transitions.linear});	
}
///show second message on the stack (because the first is the one being read)
function ShowNextMessage() {    
	ShowFirstMessage(true);
	GetMessageCount(true);
	ResetElements("ShowNextMessage");
}
///show first message on the stack
function ShowFirstMessage(force){
	if (context.MessagesCount == 0) {	
		if (!force)
			GetMessageCount();	
		
		DisplayPanel(PANEL_DEFAULT);
		return;
	}
	
	//force advertisement
	for (i=0; i<NewMessages.length; i++) {				
		if (NewMessages.get(i).IsAd){
			if (force && context.CurrentUser != null && NewMessages.get(i).Id == context.CurrentUser.Id) {
				continue;
			}
			else {
				DisplayUser(NewMessages.get(i).Id);
				return;
			}
		}
	}
	
	if (force && context.CurrentUser != null && NewMessages.get(0).Id == context.CurrentUser.Id) {
		if (context.MessagesCount > 1) {
			DisplayUser(NewMessages.get(1).Id);
		}
		else {
			DisplayPanel(PANEL_DEFAULT);
		}
	}
	else {
		DisplayUser(NewMessages.get(0).Id);
	}
		
	if (!force)
		GetMessageCount();
}
/************* Message Post ******************/
var oldText = " ";
function PasteControl() {
    var newText = $(MESSAGE_TEXTAREA).value;
    if (newText.length > (oldText.length+6)) {
	    $(MESSAGE_TEXTAREA).value = oldText;
    }
    else {
        oldText = newText;
    }
}
function OnMessageKeyDown(e) {
    PasteControl();
    
	if (e.keyCode == 13) {
		PostMessage();	
		e.cancelBubble = true;
		e.returnValue = false;
		return false;
	}
}
function ReadMessage() {
	if (context.CurrentUser != null)
		ConversationManager.ReadMessage(context.CurrentUser.Id);
}
function PostMessage() {
    input = $(MESSAGE_TEXTAREA);
    				
	if (input.value != "") {	
	    ReadMessage();	
		ConversationManager.PostMessage(context.CurrentUser.Id, input.value, PostMessageCallBack);		
	}
	
	ResetElements("PostMessage");
}
function PostMessageCallBack(res) {	
	if (res.error != undefined)
		HandleError(res, PostMessageCallBack);
		
	if ($(MESSAGE_AUTONEXT).checked)
		ShowNextMessage();
	else
	    GetMessages(undefined, true);	     
}
/************* Search ******************/
function DoSearch(e) {
	if (e.keyCode == 13) {
		Search();	
		e.cancelBubble = true;
		e.returnValue  = false;
		return false;
	}
}
function Search() {
	context.IsSearch = true;
	
	//pseudo
	context.SearchCriteria = $(SEARCH_PSEUDO).value + ";";
	
	//Mot clefs
	context.SearchCriteria += $(SEARCH_PROFILE).value + ";";
	
	//tchatchepass :: tous = 0
	context.SearchCriteria += "0;";
	
	//age
	var agemin = new Number($(SEARCH_AGEMIN).value);
	if (isNaN(agemin)) agemin = "0";
	
	var agemax = new Number($(SEARCH_AGEMAX).value);
	if (isNaN(agemax)) agemax = "99";
	
	context.SearchCriteria += agemin + ";";
	context.SearchCriteria += agemax + ";";		

	//countries
	var hasOneCountry  = false;
	var inputCountries = $(SEARCH_COUNTRY);
	
	for (j=0;j<inputCountries.options.length;j++) {	    
		if (inputCountries.options[j].selected && inputCountries.options[j].value != "0") {
			if (hasOneCountry)
			    context.SearchCriteria += ",";
			    
			context.SearchCriteria += inputCountries.options[j].value;
			hasOneCountry           = true;
		}
	}	
		
	context.SearchCriteria += ";";
		
	//regions
	var hasOneDept = false;
	var inputDept  = $(SEARCH_DEPT);
	
	for (j=0; j<inputDept.options.length; j++) {
	    if (inputDept.options[j].selected && inputDept.options[j].value != "0") {
		    
		    if (hasOneDept)
		        context.SearchCriteria += ",";
    		    
		    context.SearchCriteria += inputDept.options[j].value;
		    hasOneDept              = true;
	    }
	}	
	
	// gender: 0 man, 1 woman, 2 couple
	if ($("searchfield-sex-all").checked)
	    context.SearchCriteria += ";";	
	if ($("searchfield-sex-hommes").checked)
	    context.SearchCriteria += ";0";
	if ($("searchfield-sex-femmes").checked)
	    context.SearchCriteria += ";1";	    	   
		
	LoadList(0);
	context.CurrentPage = 0;
	$(CONNECTED_SEARCHHEADER).style.display = "block";
	$(CONNECTED_HEADER).style.display       = "none";
}
function EndSearch() {
	context.IsSearch    = false;
	context.CurrentPage = 0;
	LoadList(0);
	
	$(SEARCH_PSEUDO).value           = "";
	$(SEARCH_PROFILE).value          = "";
	$("searchfield-sex-all").checked = true;
	$(SEARCH_AGEMIN).value           = "";
	$(SEARCH_AGEMAX).value           = "";
	$(SEARCH_COUNTRY).selectedIndex  = 0;
	$(SEARCH_DEPT).selectedIndex     = 0;
	Element.hide(SEARCH_DEPT);
	
	$(PAGEING_RESET).style.display          = "none";
	$(PAGEING_COUNTS).style.display         = "block";
	$(CONNECTED_SEARCHHEADER).style.display = "none";
	$(CONNECTED_HEADER).style.display       = "block";	
}
/************* Misc *****************/
function Quit(msg) {	
	if (confirm(msg)) {
		UserManager.Quit();
		document.location = "quit.aspx";
	}
}
function cancelRefreshFirefox(e) { 
	if (!e || window.navigator.userAgent.indexOf("AppleWebKit")>0)
	    return true;
	
	if (e.keyCode == 116) {  
		e.cancelBubble = true;
		e.returnValue = false;
        return false;
	}
	
	return true;
}
function cancelRefresh() {  
	if (!window.event)
	    return true;	
	
	if (window.event.keyCode == 116) {  
		window.event.keyCode = 0;
		window.event.cancelBubble = true;
		window.event.returnValue = false;
	    return false;
	}
	
	return true;
}
/************* Error *****************/
var errWin = null;
function HandleError(response, method) {
	if (!response)
		return;
	
	if (response.error == NOT_AUTHED) {
		UserManager.Quit();
		
		if (context.User.Type != 0) {
		    document.location = "quit.aspx";
		} else {
		    document.location = "quit.aspx";
		}
		
		return;
    }
    
    if (response.error == ERROR_GOPS) {
        UserManager.Quit();
        
	    if (context.User.Type != 0) {	        		    
		    document.location = "quit.aspx";
	    } else {	    	        
	        document.location = "errorgops.aspx";
	    }
	    
	    return;
	}		
		
	if (response.request.status == 401 || response.request.status == 302)
		window.location.reload();
		
    
	if (debug && errWin == null)
	{
	    errWin = window.open('','error','height=500,width=700,scrollbars=yes,resizable=yes,status=yes');	    
	 
	    if (errWin)
	        errWin.document.write("<pre>" + response.error + "\n\n" + method + "\n\n" + response.request + "</pre>");
	}
}

window.onerror = errorHandler;
function errorHandler(msg,url,line)
{
  var alertmsg = "Erreur:" + msg + " ,Url: "+ url + " ,Line: "+ line;
  
  if (debug)
    alert (alertmsg);
  
  return (true);
}

// Event Bindings
function Initialize() {
    
    document.onkeydown  = cancelRefresh;//IE - safari
    document.onkeypress = cancelRefreshFirefox;//firefox

    setTimeout("LoadList(0)", 3000);
    setTimeout(AutoRefreshMessageCount, 15000);
    self.focus();
    
    GetCurrentUser();
    resizeElements();
}