var selectedUser = null

function showUserOptions(userLink, userId, userName, align) {

	Position.prepare()
	var linkPos = [Position.cumulativeOffset(userLink)[0] - Position.realOffset(userLink)[0] + Position.deltaX, Position.cumulativeOffset(userLink)[1] - Position.realOffset(userLink)[1] + Position.deltaY]
//	var linkPos = Position.cumulativeOffset(userLink)

	selectedUser = userId

	if (align == 'right') {
		$('userContainer').style.left = linkPos[0] + Element.getDimensions(userLink).width - Element.getDimensions(userContainer).width
	}
	else if (align == null || align == 'left') {
		$('userContainer').style.left = linkPos[0]
	}
	$('userContainer').style.top = linkPos[1] + Element.getDimensions(userLink).height


	$('userHeader').innerHTML = userName
	$('userChannelList').innerHTML = ''
	Element.hide('reportUserForm')
	Element.hide('userMailForm')
//alert('favoriteUsers: ' + activeUser.favoriteUsers + '\nfriends: ' + activeUser.friends)
	if (activeUser.loggedIn && activeUser.favoriteUsers.indexOf(selectedUser) != -1) {
		$('favoriteUserButton').innerHTML = '<img src="img/cross.gif" /> Remove User from Favorites'
	}
	else {
		$('favoriteUserButton').innerHTML = '<img src="img/heart.gif" /> Add User to Favorites'
	}

	if (activeUser.loggedIn && activeUser.friends.indexOf(selectedUser) != -1) {
		$('addToFriendsButton').innerHTML = '<img src="img/cross.gif" /> Remove User from Friends'
	}
	else {
		$('addToFriendsButton').innerHTML = '<img src="img/person.gif" /> Add User to Friends'
	}

	if (!Element.visible('userContainer')) {
//		Effect.SlideDown('userContainer', {duration: 0.8});
		Element.show('userContainer')
	}



}

function hideUserOptions() {

//	Effect.SlideUp('userContainer', {duration: 0.8});
	Element.hide('userContainer')

	selectedUser = null
}


var checkMailInterval = 60000
var checkMailTimer
var oldR = 0

function checkMail() {

	var url = 'asp/checkMail.asp'
	var pars = 'r=' + Math.random();

	if (activeUser.loggedIn) {
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars, 
				onComplete: function(response) {
					if (response.responseText != 'Login error') {

						var r = parseInt(response.responseText, 10)

						if (r > 0) {
							$('inboxMessages').innerHTML = '&nbsp;(' + r + ')'
						}
						else {
							$('inboxMessages').innerHTML = ''
						}

						if (r > oldR && loadedChannel.id == 'INBOX') {
							loadInbox(false)
							oldR = r
						}

						clearTimeout(checkMailTimer)
						checkMailTimer = setTimeout("checkMail()", checkMailInterval)
					}
					else {
						$('inboxMessages').innerHTML = ''
					}
				},
				onFailure: function(response) {
					checkMailTimer = setTimeout("checkMail()", checkMailInterval)
				}
			});
	}


}


function loadInbox(play) {

	if (activeUser.loggedIn) {
		if (confirmChannelSave('channel')) {
			loadInboxAfterSave(play)
		}
	}

}


function loadInboxAfterSave(play) {
	var xmlUrl = "asp/getMail.asp"
	var pars = "r=" + Math.random()

	var myAjax = new Ajax.Request(
		xmlUrl, 
		{
			method: 'get', 
			parameters: pars,
			onComplete: function(response) {
				if (response.responseText.substr(0,5) == '<?xml') {
					loadInboxInfo(response.responseText, play)
					if (play) {
						checkMail()
					}
				}
				else {
					//channelList.innerHTML = '<span class="errorMessage">You must <a onclick="showLogin(this, true, \'left\')">log in</a> to view this channel</a>'
				}
			}
		}
	);

}


function loadInboxInfo(responseText, play) {
	var xmlDoc = loadXml(responseText)

	loadedChannel = new channelObject()

	loadedChannel.id ='INBOX'
	loadedChannel.title = 'Inbox'
	loadedChannel.selectedRow = null

	Element.hide("channelOptionsContainer")
	Element.hide("helpOptionsContainer")
	Element.show("inboxOptionsContainer")

	$('channelInfoPlaylistTitle').innerHTML = "My Inbox"



	if (Element.visible('channelInfoBody')) {
		new Effect.SlideUp('channelInfoBody', {duration: 0.8})
	}
	unsavedChannelChanges = false

	if ($('errorMessage')) {
		Element.remove($('errorMessage'))
	}
	$('videoList_Playlist').innerHTML = ''
	updatePlaylist($('videoList_Playlist'), responseText)

	if (play) {
		$('friendsList').innerHTML = loadFriendsList(xmlDoc)

//		playChannelFromIndex(loadedChannel, 0)
		activeChannel = new channelObject(loadedChannel.id, loadedChannel.title, null, null, loadedChannel.videoList, null)
		activeChannel.videoListIndex = -1
		$('viewFrame').src = "asp/showSiteNews.asp"
		$('viewFrameInfo').innerHTML = "You are checking your Inbox"
	}

	allowChannelSave(false)
}


function loadFriendsList(xmlDoc) {

//<a onclick="showUserOptions(this, '000001', 'Alex Kieft')">Alex Kieft</a> 
	var listLength = xmlDoc.getElementsByTagName("friend").length
	var friendsListHTML = ''
	var friendId, friendName

	for (i = 0; i < listLength; i++) {
		if (friendsListHTML != '') {
			friendsListHTML += ', '
		}
		friendId = xmlDoc.getElementsByTagName("friend")[i].getAttribute("id")
		friendName = xmlDoc.getElementsByTagName("friend")[i].firstChild.nodeValue

		friendsListHTML += '<a onclick="showUserOptions(this, \''+friendId+'\', \''+friendName+'\')">'+friendName+'</a>'
	}

	if (listLength == 0) {
		friendsListHTML = 'You can add a user to your Friends by clicking on the user\'s name and then choosing "Add to Friends." Once that user confirms that you are in fact his or her friend, you will be able to view his or her private channels.'
	}

	return friendsListHTML
}


function refreshFriendsList() {
	var xmlUrl = "asp/getFriends.asp"
	var pars = "r=" + Math.random()

	var myAjax = new Ajax.Request(
		xmlUrl, 
		{
			method: 'get', 
			parameters: pars,
			onComplete: function(response) {
				if (response.responseText.substr(0,5) == '<?xml') {
					$('friendsList').innerHTML = loadFriendsList(loadXml(response.responseText))
				}
			}
		}
	);


}


function replyMail() {
	var listRow, videoId, senderId, listItems, senderName, messageSubject

	if (loadedChannel.selectedRow != null) {
		listRow = $(loadedChannel.selectedRow)
		videoId = extractVideoId(listRow)
		senderId = extractMailId(videoId)[1]

		listItems = document.getElementsByClassName('listItem', listRow)
		messageSubject = listItems[0].innerHTML
		senderName = listItems[1].innerHTML

		showUserOptions($('replyMailButton'), senderId, senderName)
		Element.show('userMailForm')
		$('mailSubject').value = 'Re: ' + messageSubject
		$('mailMessage').focus()
		
	}

}

function deleteMail() {

	var listRow, videoId, mailId

	var url = 'asp/deleteMail.asp';
	var pars

	if (loadedChannel.selectedRow != null) {

		listRow = $(loadedChannel.selectedRow)
		videoId = extractVideoId(listRow)
		mailId = extractMailId(videoId)[0]

		pars = 'id=' + mailId +"&r=" + Math.random();
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: function(response) {
					if (response.responseText.substr(0,5) == '<?xml') {
						//if (activeChannel != null && activeChannel.id == 'INBOX' && activeChannel.

						loadInboxInfo(response.responseText, false)

						if (activeChannel != null && activeChannel.id == 'INBOX') {
							if (activeChannel.videoListArray[activeChannel.videoListIndex] == videoId) {
								activeChannel.videoListIndex = -1
								$('viewFrame').src = "asp/showSiteNews.asp"
							}
							activeChannel = new channelObject(activeChannel.id, activeChannel.title, null, null, loadedChannel.videoList, null)
						}

					}
					else {
						$('deleteMailButton').innerHTML = '<img src="img/trash_mail.gif" /> ' + response.responseText
					}
				},
				onFailure: function(response) {
					$('deleteMailButton').innerHTML = '<img src="img/trash_mail.gif" /> Try again'
				}
			});
	}



}

function deleteAllMail() {

	var url = 'asp/deleteAllMail.asp';
	var pars = "r=" + Math.random();

	var confirmDeleteAll = confirm("Are you sure you want to delete all messages?")

	if (confirmDeleteAll) {
		var myAjax = new Ajax.Request(
		url, 
			{
				method: 'post', 
				parameters: pars, 
				onComplete: function(response) {
					if (response.responseText.substr(0,5) == '<?xml') {

						loadInboxInfo(response.responseText, false)

						if (activeChannel != null && activeChannel.id == 'INBOX') {
							activeChannel.videoListIndex = -1
							$('viewFrame').src = "asp/showSiteNews.asp"
						}

						activeChannel = new channelObject(activeChannel.id, activeChannel.title, null, null, loadedChannel.videoList, null)
					}
					else {
						$('deleteAllMailButton').innerHTML = '<img src="img/trash.gif" /> ' + response.responseText
					}
				},
				onFailure: function(response) {
					$('deleteAllMailButton').innerHTML = '<img src="img/trash.gif" /> Try again'
				}
			});
	}
}


function clearUserSearch() {

	if ($('userSearch').value == 'Search by e-mail address') {
		$('userSearch').value = ''
		$('userSearch').focus()
	}

	$('userSearch').style.color = '#000'
}


function userSearch() {

	var userAddress = String($('userSearch').value).strip()

	var xmlUrl = "asp/findUser.asp"
	var pars = "email=" + escape(userAddress) + "&r=" + Math.random()

	if (userAddress != '' && userAddress.indexOf('@') != -1) {
		var myAjax = new Ajax.Request(
			xmlUrl, 
			{
				method: 'get', 
				parameters: pars,
				onComplete: function(response) {
					$('userSearchResult').innerHTML = response.responseText
				}
			}
		);
	}
	else {
		$('userSearchResult').innerHTML = 'Please enter the user\'s e-mail address'
	}
}


function showUserChannels() {
	var url = 'asp/getUserChannels.asp'
	var pars = 'id=' + selectedUser +"&r=" + Math.random();

	if (selectedUser != null) {
		var myAjax = new Ajax.Request(
			url, 
			{
				method: 'get', 
				parameters: pars,
				onLoading: function() {
					$('userChannelList').innerHTML = '<div class="channelCategory">Loading user\'s channels...</div>'
				},
				onSuccess: function(response) {
					var r = response.responseText
					if (r.substr(0,5) == '<?xml') {
						var listHTML = convertXMLToUserChannelList(r)
						$('userChannelList').innerHTML = listHTML
					}
					else {
						$('userChannelList').innerHTML = '<div class="channelCategory">'+r+'</div>'
					}
				}
			}
		);
	}
}


function convertXMLToUserChannelList(responseText) {

	var xmlDoc = loadXml(responseText)
	var listHTML = ''

	var channelId, videoCount, categoryChannels, userName

	listHTML += '<div class="channelCategory">'

	userName = xmlDoc.getElementsByTagName("channelCategory")[0].getAttribute("username")
//	listHTML += '<div class="channelHeader" style="background-image: url(\'/img/person.gif\');">'+xmlDoc.getElementsByTagName("channelCategory")[0].getAttribute("name")+' Channels</div>'

	listHTML += '<div class="channelList">'

	categoryChannels = xmlDoc.getElementsByTagName("channelCategory")[0].childNodes

	for (j = 0; j < categoryChannels.length; j++) {
		if (categoryChannels[j].nodeType==1) {

			channelId = categoryChannels[j].getAttribute("id")

			listHTML += '<div class="channelListing" onclick="loadChannel(\''+channelId+'\', false, false)" ondblclick="playChannel(\''+channelId+'\')"><span class="channelHeaderLink">'+categoryChannels[j].getElementsByTagName("title")[0].firstChild.nodeValue

			videoCount = categoryChannels[j].getElementsByTagName("count")[0].firstChild.nodeValue
			if (parseInt(videoCount, 10) > 0) {
				listHTML += ' ('+videoCount+')'
			}
			listHTML += '</span></div>'
		}
	}

	listHTML += '</div></div>'
	return listHTML;

}



function addUserToFavorites() {
	var url
	var pars = 'id=' + selectedUser +"&r=" + Math.random();

	if (selectedUser != null) {

		if (activeUser.loggedIn && activeUser.favoriteUsers.indexOf(selectedUser) != -1) {
			url = 'asp/removeFavoriteUser.asp';

			var myAjax = new Ajax.Request(
				url, 
				{
					method: 'post', 
					parameters: pars, 
					onLoading: function() {
						$('favoriteUserButton').innerHTML = '<img src="img/cross.gif" /> Removing User from Favorites...'
					},
					onComplete: function(response) {
						var r = response.responseText
						if (r == 'Removed') {
							displayTabbedList('channelList_Friends', $('favoritesChannelListTab'))
							$('favoriteUserButton').innerHTML = '<img src="img/heart.gif" /> Add User to Favorites'
						}
						else {
							$('favoriteUserButton').innerHTML = '<img src="img/cross.gif" /> ' + r
						}
					},
					onFailure: function(response) {
						$('favoriteUserButton').innerHTML = '<img src="img/cross.gif" /> Try again'
					}
				});

		}
		else {
			url = 'asp/addFavoriteUser.asp';

			var myAjax = new Ajax.Request(
				url, 
				{
					method: 'post', 
					parameters: pars, 
					onLoading: function() {
						$('favoriteUserButton').innerHTML = '<img src="img/heart.gif" /> Adding to User to Favorites...'
					},
					onComplete: function(response) {
						var r = response.responseText
						if (r == 'Success') {
							displayTabbedList('channelList_Friends', $('favoritesChannelListTab'))
							$('favoriteUserButton').innerHTML = '<img src="img/cross.gif" /> Remove User from Favorites'
						}
						else {
							$('favoriteUserButton').innerHTML = '<img src="img/heart.gif" /> ' + r
						}
					},
					onFailure: function(response) {
						$('favoriteUserButton').innerHTML = '<img src="img/heart.gif" /> Try again'
					}
				});
		}
	}


}

function addUserToFriends(friendId, addOnly) {


	if (friendId == null) {
		friendId = selectedUser
	}

	if (addOnly == null) {
		addOnly = false
	}

	var url
	var pars = 'id=' + friendId +"&r=" + Math.random();

	if (friendId != null) {

		if (activeUser.loggedIn && activeUser.friends.indexOf(friendId) != -1 && !addOnly) {
			url = 'asp/removeFriend.asp';

			var myAjax = new Ajax.Request(
				url, 
				{
					method: 'post', 
					parameters: pars, 
					onLoading: function() {
						$('addToFriendsButton').innerHTML = '<img src="img/cross.gif" /> Removing User from Friends...'
					},
					onComplete: function(response) {
						var r = response.responseText
						if (r == 'Removed') {
							displayTabbedList('channelList_Friends', $('favoritesChannelListTab'))
							refreshFriendsList()
							$('addToFriendsButton').innerHTML = '<img src="img/person.gif" /> Add User to Friends'
						}
						else {
							$('addToFriendsButton').innerHTML = '<img src="img/cross.gif" /> ' + r
						}
					},
					onFailure: function(response) {
						$('addToFriendsButton').innerHTML = '<img src="img/cross.gif" /> Try again'
					}
				});

		}
		else if (activeUser.loggedIn) {
			url = 'asp/addFriend.asp';

			var myAjax = new Ajax.Request(
				url, 
				{
					method: 'post', 
					parameters: pars, 
					onLoading: function() {
						$('addToFriendsButton').innerHTML = '<img src="img/person.gif" /> Adding User to Friends...'
					},
					onComplete: function(response) {
						var r = response.responseText
						if (r == 'Success') {
							displayTabbedList('channelList_Friends', $('favoritesChannelListTab'))
							refreshFriendsList()
							$('addToFriendsButton').innerHTML = '<img src="img/cross.gif" /> Remove User from Friends'
							if (addOnly) {
								alert('New friend added!')
							}
						}
						else {
							$('addToFriendsButton').innerHTML = '<img src="img/person.gif" /> ' + r
							if (addOnly) {
								alert(r)
							}
						}
					},
					onFailure: function(response) {
						$('addToFriendsButton').innerHTML = '<img src="img/person.gif" /> Try again'
					}
				});
		}
	}


}


function addFriendFromInvite(friendId, friendKey) {


	if (friendKey == null) {
		friendKey = false
	}

	var url
	var pars = 'id=' + friendId +"&key=" + escape(friendKey) +"&r=" + Math.random();

	if (friendId != null) {

		if (activeUser.loggedIn && activeUser.friends.indexOf(friendId) == -1 && friendId != activeUser.id) {
			url = 'asp/addFriendFromInvite.asp';

			var myAjax = new Ajax.Request(
				url, 
				{
					method: 'post', 
					parameters: pars, 
					onComplete: function(response) {
						var r = response.responseText
						if (r == 'Success') {
							displayTabbedList('channelList_Friends', $('favoritesChannelListTab'))
							refreshFriendsList()
						}
						else {
							alert(r)
						}
					},
					onFailure: function(response) {
						
					}
				});
		}
	}

	inviteUser = null

}


function showReportUserForm() {
	Element.show('reportUserForm')
	$('reportUserMessage').focus()
}

function cancelReportUser() {
	Element.hide('reportUserForm')
}


function submitReportUser() {

	var message = String($('reportUserMessage').value).strip().stripTags()
	var errorText
	var errorOccurred = false

	if ($('errorMessage')) {
		Element.remove($('errorMessage'))
	}

	if (message == "") {
		errorText = "Please enter a message"
		showErrorMessage($('reportUserMessage'), errorText)
		errorOccurred = true
	}
	else if (selectedUser == null) {
		errorText = "No user selected"
		showErrorMessage($('reportUserMessage'), errorText)
		errorOccurred = true
	}

	if (!errorOccurred) {
		sendMailMessage('User Abuse Report: ' + selectedUser, message, '000000', $('submitReportUserButton'), $('reportUserMessage'))
	}
	
}



function showMailForm() {

	Element.show('userMailForm')
	$('mailSubject').focus()

}

function cancelMail() {
	Element.hide('userMailForm')
}


function sendMail() {
	var subject = String($('mailSubject').value).strip().stripTags()
	var message = String($('mailMessage').value).strip().stripTags()

	var errorText
	var errorOccurred = false

	if ($('errorMessage')) {
		Element.remove($('errorMessage'))
	}

	if (subject == "") {
		errorText = "Please enter a subject"
		showErrorMessage($('mailSubject'), errorText)
		errorOccurred = true
	}
	else if (message == "") {
		errorText = "Please enter a message"
		showErrorMessage($('mailMessage'), errorText)
		errorOccurred = true
	}
	else if (selectedUser == null) {
		errorText = "No recipient selected"
		showErrorMessage($('mailMessage'), errorText)
		errorOccurred = true
	}

	if (!errorOccurred) {
		sendMailMessage(subject, message, selectedUser, $('sendMailButton'), $('mailMessage'))
	}
}


function sendMailMessage(subject, message, recipient, sendButton, sendForm) {
	var url = "asp/sendMail.asp"
	var pars = 'recipient=' + recipient + '&subject=' + escape(subject) + '&message=' + escape(message) + '&r=' + Math.random();

	var myAjax = new Ajax.Request(
		url, 
		{
			method: 'post', 
			parameters: pars, 
			onLoading: function(response) {
				sendButton.innerHTML = '<img src="img/tick.gif" /> Sending...'
			},
			onComplete: function(response) {
				var r = response.responseText
				if (r == 'Sent') {
					sendButton.innerHTML = '<img src="img/tick.gif" /> Message sent!'
					var t = setTimeout("resetSendButton()", 3000)

					sendForm.value = ""
					$('mailSubject').value = ""
				}
				else {
					showErrorMessage(sendForm, r)
					sendButton.innerHTML = '<img src="img/tick.gif" /> Try again'
				}
			},
			onFailure: function(response) {
				showErrorMessage(sendForm, 'Could not connect to server')
				sendButton.innerHTML = '<img src="img/tick.gif" /> Try again'
			}
		});

}


function resetSendButton() {
	$('sendMailButton').innerHTML = '<img src="img/tick.gif" /> Send'
}


function extractMailId(videoId) {

	if (videoId != null) {
		videoId = String(videoId)
//alert(videoId.indexOf("Y") + '\n' + videoId.slice(0, videoId.indexOf("Y")) + '\n' + videoId.slice(videoId.indexOf("Y")+1))
		return [videoId.slice(0, videoId.indexOf("Y")), videoId.slice(videoId.indexOf("Y")+1)]
	}
	else {
		return null;
	}
}


function keyListenerForMail(e) {

/*	var keynum

	if(window.event) {keynum = e.keyCode}
	else if(e.which) {keynum = e.which}

	switch (keynum) {
		case Event.KEY_ESC:
			hideUserOptions()
			break;
		case Event.KEY_RETURN:
			sendMail();
			break;
		default:
	}
*/
	cancelBubbling(e)
}

