/* common */
var showHeaderErrors = true;
var showHeaderMessages = true;

function ShowErrors(errors, callback, first)
{		
	var i, message = "";
	var messages = new Array;
	for (i in errors)
	{       
		messages[messages.length] = errors[i].Message;
		if (first) 
			break;
	}
	if (messages.length > 0)
	{
		if (first)
			message = messages[0];
		else
			message += messages.join('<br />');
	}
	SetHTML(callback+'_sorry', message);
	return messages.length;
}

function ShowHeaderErrors(errors, first)
{	
	var i, message = "";
	var messages = new Array;
	for (i in errors)
	{
		messages[messages.length] = errors[i].Message;
		if (first) 
			break;
	}
	if (showHeaderErrors && messages.length > 0)
	{
		if (first)
			message = "<p class=\"margin_bottom\">"+messages[0]+"</p>";
		else
		{
			message = '<p class="margin_bottom">';
			message += messages.join('</p><p class="margin_bottom">');
			message += '</p>';
		}
		SetHTML('ErrorsContainer', message);
		Show('ErrorsContainer');
		return messages.length;
	}
	SetHTML('ErrorsContainer', "");
	Hide('ErrorsContainer');
	return messages.length;
}

function ShowHeaderMessages(errors, first)
{	
	var i, message = "";
	var messages = new Array;
	for (i in errors)
	{
		messages[messages.length] = errors[i].Message;
		if (first) 
			break;
	}
	if (showHeaderMessages && messages.length > 0)
	{
		if (first)
			message = "<p class=\"margin_bottom\">"+messages[0]+"</p>";
		else
		{
			message = '<p class="margin_bottom">';
			message += messages.join('</p><p class="margin_bottom">');
			message += '</p>';
		}
		SetHTML('MessagesContainer', message);
		Show('MessagesContainer');
		return messages.length;
	}
	SetHTML('MessagesContainer', "");
	Hide('MessagesContainer');
	return messages.length;
}

function HideErrors(callback)
{
	SetHTML(callback+'_sorry', "");
}

var TopBoxes = new Array('ErrorsContainer', 'MessagesContainer', 'ChangeNicknameContainer', 'ChangeNicknameClearContainer', 'CreateUContainer', 'CreateUClearContainer',
												 'EditUDescriptionContainer', 'EditUDescriptionClearContainer', 'EditRSSNewsLinkContainer', 'EditRSSNewsLinkClearContainer', 
												 'EditRSSEventsLinkContainer', 'EditRSSEventsLinkClearContainer', 'LoginContainer', 'LoginClearContainer',
												 'EditWelcomeMessageContainer', 'EditWelcomeMessageClearContainer'
												 );
for (i = 0; i < TopBoxes.length; i++)
{
	eval('var '+TopBoxes[i]+'_Hidden = true;');	
}
function HideHeaderMessagesAndForms(except)
{
	for (i = 0; i < TopBoxes.length; i++)
	{
		eval('Hide("'+TopBoxes[i]+'");');	
		if (except != TopBoxes[i] && except != TopBoxes[i].replace('Container', 'ClearContainer'))
			eval(TopBoxes[i]+'_Hidden = true;');	
	}
}

function SubmitForm()
{
	inputForm.submit();
	inputForm = null;
}

var inputForm = null;
function SendRequestForForm(form, params, callback)
{
	inputForm = form;
	HTMLRequest(projectURL+'ajax/functions.php', params, callback);
}

function HTMLRequest(url, params, callback)
{
	var req = new JsHttpRequest();
	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			if (req.responseJS)
			{		
				if (req.responseJS['Success'])
				{
					var response = req.responseJS['Properties'];
					if (callback)
						eval(callback+"(response);");
				}
				ShowErrors(req.responseJS['Errors'], callback);
				//ShowErrors(req.responseJS['Messages'], callback);
			}
		}
	}
	req.caching = false;
	req.open('POST', url, true);
	req.send(params);
}

/* login */
function ShowSignInForm()
{
   HideHeaderMessagesAndForms('LoginContainer');
   Toggle('LoginContainer');
   Toggle('LoginClearContainer');
   return false; 
}

function ValidateLogin(form)
{
   SendRequestForForm(form, {Action: 'ValidateLogin', Email: form.Email.value, Password: form.Password.value}, "Login");
   return false; 
}

function Login(properties)
{
    if (properties)
        SubmitForm();
    return false;
}

/* change nickname */
function ShowNicknameForm()
{
	HideHeaderMessagesAndForms('ChangeNicknameContainer');
	Toggle('ChangeNicknameContainer');
	Toggle('ChangeNicknameClearContainer');
	return false;
}

function SwitchNickname(nickname)
{
	var form = document.forms.ChangeNicknameForm;
	form.NewNickname.value = nickname;
	form.submit();
	return false;
}

function ChangeNickname(properties)
{
	if (properties)
	{
		inputForm.NewNickname.value = properties.Nickname;
		inputForm.submit();
	}
	return false;
}

function ValidateNickname(form)
{
	SendRequestForForm(form, {Action: 'ValidateNickname', NewNickname: form.NewNickname.value}, "ChangeNickname");
	return false;
}

/* U */
function JoinU(uid)
{
	if (!uid)
	{
		GoTo(projectURL+"u_list.php");
		return false;
	}
	IfShouldAskPassword(uid);
	return false;
}

function JoinUOnResponse(properties)
{
	if (properties)
	{
		var uid = properties.UID;
		if (properties.AskPass)
		{
			if (!mini)
				ShowPrivateChatForm(uid, properties.Title);
		}
		else
		{
			if (mini)
				var url = projectURL+"view_u_mini.php?UID="+uid;
			else if (full)
				var url = projectURL+"view_u_full.php?UID="+uid;			
			else
				//var url = projectURL+"view_u.php?UID="+uid;
				var url = projectURL+"uchat/"+encodeURI(properties.Title);
			GoTo(url, true);
		}
	}
	else
		ClosePrivateChatForm();
}

function IfShouldAskPassword(uid)
{
	var params = {Action: 'IfShouldAskPassword', UID: uid};
	HTMLRequest(projectURL+'ajax/uitem.php', params, "JoinUOnResponse");
}

function CheckUPassword(uid, password)
{
	var params = {Action: 'CheckUPassword', UID: uid, UPassword: password};
	HTMLRequest(projectURL+'ajax/uitem.php', params, "JoinUOnResponse");
	return false;
}

function ShowPrivateChatForm(uid, title)
{
	SetHTML('PrivateChatName', title);
	SetHTML('PrivateChatName2', title);
	SetHTML('PrivateChatName3', title);
	getE('PrivateChatForm').UID.value = uid;
	Show('PrivateChatLock');
	Show('PrivateChatFormContainer');
}

function ClosePrivateChatForm()
{
	Hide('PrivateChatFormContainer');
	Hide('PrivateChatLock');
	getE('PrivateChatForm').UID.value = 0;
	SetHTML('PrivateChatName', '');
	SetHTML('PrivateChatName2', '');
	SetHTML('PrivateChatName3', '');
}

function ShowCreateUForm()
{
	HideHeaderMessagesAndForms();
	Toggle('CreateUContainer');
	Toggle('CreateUClearContainer');
	return false;	
}

function CreateU()
{
	inputForm.submit();
	return false;	
}

function ValidateU(form)
{
	SendRequestForForm(form, {Action: 'ValidateUItem', Title: form.Title.value}, "CreateU");
	return false;
}

function ConfirmLeaveU(uid)
{
	if (confirm('Are you sure you want to leave U?'))
	{
		LeaveU(uid);	
	}
}

function LeaveU(uid)
{
	GoTo(projectURL+"view_u.php?UID="+uid+"&Action=leave");
}

function LeaveAll()
{
	var params = {Action: 'LeaveAll'};
	HTMLRequest(projectURL+'ajax/functions.php', params, "LeaveAllOnResponse");
	return false;
}

function LeaveAllOnResponse(properties)
{
	return false;		
}

/* friends */
function ViewProfile(profileID, nick)
{	//alert("view : "+profileID);
	var location = "home.php";
	if (profileID)
	{
		if (/^\d+$/.exec(profileID))
			if (nick)
				location = "friend/"+encodeURI(nick);
			else
				location = "profile.php?ProfileID="+profileID;
		else
			location = "guest.php?GuestID="+profileID;
	}
	//alert("lien : "+projectURL+"       et       "+location);
	GoTo(projectURL+location);
	//GoTo("uchat/ganyang888");
	return false;
}

function AddToFriends(friendID)
{
	Hide('AddToFriends_'+friendID);
	Show('AddToFriends_'+friendID+'_loader');
	var params = {Action: 'AddToFriends', FriendProfileID: friendID};
	HTMLRequest(projectURL+'ajax/profile.php', params, "ShowAddToFriendsStatus");
	return false;
}

function ShowAddToFriendsStatus(properties)
{
	if (properties)
	{
		ShowHeaderErrors(properties.Errors);
		ShowHeaderMessages(properties.Messages);
		
		var friendID = properties.FriendProfileID;
		SetHTML('AddToFriends_'+friendID, "");
		Hide('AddToFriends_'+friendID+'_loader');
		Show('AddToFriends_'+friendID);
		
		Hide('Unignore_'+friendID);
		Show('Ignore_'+friendID);
	}
	return false;
}

function ConfirmDeleteFriend(friendID)
{
	if (confirm('Are you sure you want to delete friend from list?'))
	{
		DeleteFriend(friendID);
	}
	return false;
}

function DeleteFriend(friendID)
{
	var params = {Action: 'RemoveFriend', FriendProfileID: friendID};
	HTMLRequest(projectURL+'ajax/profile.php', params, "ShowDeleteFriendStatus");
	return false;
}

function ShowDeleteFriendStatus(properties)
{
	if (properties)
	{
		var friendID = properties.FriendProfileID;
		//SetHTML('RemoveFriend_'+friendID, "");	
		Hide('RemoveFriend_'+friendID);
		Show('AddFriend_'+friendID);
	}
	return false;
}

function ConfirmCloseChatWithFriend(id)
{
	if (confirm('Are you sure you want to close chat?'))
	{
		CloseChatWithFriend(id);
	}
}

function CloseChatWithFriend(id)
{
	if (/^\d+$/.exec(id))
		var location = "profile.php?ProfileID="+id;
	else
		var location = "guest.php?GuestID="+id;
	GoTo(projectURL+location+"&Action=close");
}

var privateChatList = new Array();
function UpdatePrivateChatList(list)
{
	var ul = getE('MainMenu');
	var i, elems = ul.getElementsByTagName('li');
	if (ul && list)
	{
		for (i in list)
		{
			for (j = 0; j < privateChatList.length; j++)
			{
				if (privateChatList[j] == list[i].ProfileID)
				{
					return;	
				}
			}
			var elem = document.createElement("li");
			elem.className = "third";
			elem.innerHTML = "<a href=\"#\" onclick=\"return ViewProfile('"+list[i].ProfileID+"', '"+list[i].Nickname+"');\">"+list[i].Nickname+"</a>";
			ul.insertBefore(elem, elems[elems.length - 1]); 
			privateChatList[privateChatList.length] = list[i].ProfileID;
		}
	}
}

/* services: user status, new messages */
function CheckServices(uid)
{
	var params = {Action: 'CheckServices', UID: uid};
	HTMLRequest(projectURL+'ajax/uitem.php', params, "CheckServicesOnResponse");
}

function CheckServicesOnResponse(properties)
{
	if (properties)
	{
		if (properties.IsBanned || properties.IsKicked)
		{
			if (mini || full)
			{
				LeaveUExported(uID, properties.Message);
			}
			else
			{
				alert(properties.Message);
				LeaveU(uID);
			}
			return;
		}
		if (!mini && !full && properties.NewChats.length > 0)
		{
			UpdatePrivateChatList(properties.NewChats);	
		}
		if (window.ShowOnlineUserList)
			ShowOnlineUserList(properties);
		SetBroadCastRights(properties.CanChangeApplications);
		setTimeout("CheckServices("+properties.UID+")", parseInt(properties.AjaxInterval, 10));
	}
}

/* invitations */
function SendServiceInvitations(form)
{
	var i, emails = new Array();
	for (i = 0; i < form.elements.length; i++)
	{
		if (form.elements[i].name == "Email[]" && form.elements[i].value != "")
			emails[emails.length] = form.elements[i].value; 
	}
	var params = {Action: 'SendServiceInvitations', 'InvitationEmailList': emails};
	HTMLRequest(projectURL+'ajax/profile.php', params, "ShowServiceInvitationsStatus");
	
}

function ShowServiceInvitationsStatus(properties)
{
	return false;
}

/* broadcast */
var areaCleared = false;
function ClearMessageArea(area)
{
	if (!areaCleared)
	{
		area.value = "";
		areaCleared = true;
	}
}

function OpenCastWindow(url)
{
	var w = 600;
	if (navigator.userAgent.indexOf('Chrome') > -1)
		var h = 440;
	else
		var h = 400;
	var x = Math.floor((screen.width-w-10)/2);
	var y = Math.floor((screen.height-h-150)/2);
	window.cast = window.open(url, 'Cast_video', 'width='+w+', height='+h);
	cast.moveTo(x, y);
	cast.focus();
}

function ExtractJabberPass()
{
	var re = /JabberPass=([^;]*);/;
	if (arr = re.exec(document.cookie+";"))
	{
		return unescape(arr[1]);
	}
}

