

var People = Class.create();

People.prototype = {
	initialize: function() {
		
	},
	
	inviteShow: function(projectId, showAgain) {
		if($('mainAjaxSlider').style.display == 'none')
		{
			if(!$('inviteUserInner'))
			{
				var content  = '<div id="inviteUserInner"><div class="ajaxContainerTitle">Invite user</div><form id="inviteUserForm" method="post">';
				content += '<div id="inviteUserMainContent"><p><input autocomplete="off" value="Email Address" type="text" name="email" id="user_email" class="text" /> <input type="checkbox" name="view_only" id="uer_view_only" value="1" /> View only </p>';
				content += '<div class="autocomplete" id="previouslyInvitedEmailsList" style="display:none"></div>';
				content += '<p><input type="hidden" name="project_id" value="' + projectId + '" /> <input type="submit" value="Invite user" class="button" /> <a href="javascript:void(0);" class="cancelLink" onclick="people.inviteShow(0)">Cancel</a></p></div> </div>';

				// container = Builder.build(content);
				// $('mainAjaxContainer').appendChild(container);
				$('mainAjaxContainer').update(content);
				Event.observe('inviteUserForm', 'submit', this.inviteSubmit.bindAsEventListener(this));

				new Autocompleter.LocalEnhanced('user_email', 'previouslyInvitedEmailsList', listOfPreviousInvitedEmails, { frequency:0.4, partialSearch:true, partialChars:2, fullSearch:true});
				
			}
			new Effect.SlideDown('mainAjaxSlider', {duration: 0.4, afterFinish: function() { focusFirst('inviteUserForm'); } });
		}
		else
		{
			if(!showAgain)
				new Effect.SlideUp('mainAjaxSlider', {duration: 0.4, afterFinish: function() { $('inviteUserInner').remove(); } });
			else
				new Effect.SlideUp('mainAjaxSlider', {duration: 0.4, afterFinish: this._inviteShowAgain_callback.bindAsEventListener(this, projectId) });
		}
	},
	
	_inviteShowAgain_callback: function(e, projectId) {
		$('inviteUserInner').remove(); 
		this.inviteShow(projectId);
	},

	inviteSubmit: function(e) {
		Event.stop(e);
		if(!Field.present('user_email'))
			Shake('user_email');
		else
		{
			showLoading('mainAjaxContainer');
			new Ajax.Updater('inviteUserMainContent', ajaxUrl, { evalScripts: true, parameters: 'ajaxAction=inviteUser&' + Form.serialize('inviteUserForm'), onComplete: function() { hideLoading('mainAjaxContainer'); }});
		}
	},
	
	
	edit: function(el, userId) {
		var container = 'editPersonContainer-' + userId;
		if(!$(container).empty())
			this.editCancel(userId);
		else
		{
			showLoading(el);

			new Ajax.Updater(container, ajaxUrl, { parameters: '&ajaxAction=editPerson&user_id=' + userId, evalScripts:true, asynchronous:true,
				onComplete: this._edit_callback.bindAsEventListener(this, el, userId) });
		}
	},
	
	_edit_callback: function(request, el, userId) {
		hideLoading(el);
		new Effect.SlideDown('editPersonContainer-' + userId, {duration: 0.4, afterFinish:function(){focusFirst('editPersonForm-' + userId);}});
		Event.observe('editPersonForm-' + userId, 'submit', this.editSave.bindAsEventListener(this, userId));
	},

	editSave: function(e, userId)
	{
		if(Form.check('editPersonForm-' + userId))
		{
			showLoading('editPersonContainer-' + userId);
			new Ajax.Request(ajaxUrl, { postBody: 'ajaxAction=saveEditPerson&' + Form.serialize('editPersonForm-' + userId),
				onComplete: this._editSave_callback.bindAsEventListener(this, userId) });			
		}
		Event.stop(e);
	},

	_editSave_callback: function(request, userId) {
		hideLoading('editPersonContainer-' + userId);
		if(request.responseText == 'true')
			this.editCancel(userId);
		else if(request.responseText == 'duplicateLogin')
			alert("The user couldn't be updated because the login you picked is already in use.");
		else if(request.responseText == 'passwdWrong')
			alert("The user couldn't be updated because the password confirmation is wrong.");
		else 
			alert('There was an error updating the user.');
	},

	editCancel: function(userId)
	{
		new Effect.SlideUp('editPersonContainer-' + userId, {duration:0.4, afterFinish: function(){$('editPersonContainer-' + userId).update('');}});
	},
	
	/*
	 * New stuff - 20071029
	 */
	
	remove: function(invitationId, userId, projectId, userHash)
	{
		if(confirm("Are you sure you want to remove this user from this project?"))
		{
			var el = $$('#user' + userHash + ' .generalTools');
			if(el.size() > 0)
				showLoading(el[0],true);

			new Ajax.Request(ajaxUrl, { postBody: 'ajaxAction=peopleRemove&userId=' + userId + '&projectId=' + projectId + '&invitationId=' + invitationId, onComplete: this._remove_callback.bindAsEventListener(this, userHash)});
		}
	},
	
	_remove_callback: function(request, userHash)
	{
		var el = $$('#user' + userHash + ' .generalTools');
		if(el.size() > 0)
			hideLoading(el[0]);
		
		if(request.responseText == 'true')
			new Effect.BlindUp('user' + userHash,{duration:0.3,afterFinish:function(){$('user'+userHash).remove();}});
		else
			alert('There was an error processing your request.');
		
	},
	
	appendExistingUser: function(projectId, email) 
	{
		if($('projectUsersContainer'))
		{
			showLoading('projectUsersContainer');
			new Ajax.Request(ajaxUrl, { postBody: 'ajaxAction=appendExistingUser&projectId=' + projectId + '&email=' + email, onComplete: this._appendExistingUser_callback.bindAsEventListener(this)});			
		}
	},
	
	_appendExistingUser_callback: function(request)
	{
		if($('projectUsersContainer') && request.responseText != 'false')
		{
			hideLoading('projectUsersContainer');
			var newUserContainer = Builder.build(request.responseText);
			$('projectUsersContainer').appendChild(newUserContainer);
			new Effect.SlideDown(newUserContainer, {duration:0.3});
		}
	},
	
	appendNewUser: function(projectId, email) 
	{
		if($('projectUntakenInvitations'))
		{
			if(!$('projectUntakenInvitations').visible())
				new Effect.SlideDown('projectUntakenInvitations', {duration:0.1});
			
			showLoading('projectUntakenInvitations');
			new Ajax.Request(ajaxUrl, { postBody: 'ajaxAction=appendNewUser&projectId=' + projectId + '&email=' + email, onComplete: this._appendNewUser_callback.bindAsEventListener(this)});			
		}
	},
	
	_appendNewUser_callback: function(request)
	{
		if($('projectUntakenInvitations') && request.responseText != 'false')
		{
			hideLoading('projectUntakenInvitations');
			var newUserContainer = Builder.build(request.responseText);
			$('projectUntakenInvitations').appendChild(newUserContainer);
			new Effect.SlideDown(newUserContainer, {duration:0.3});
		}
	},
	
	/*
	 * Untaken invitations
	 */
	removeUntakenInvitation: function(invitationId) {
		if(confirm('Are you sure you want to remove this invitation?'))
		{
			showLoading('untakenInvitationName-' + invitationId);
			new Ajax.Request(ajaxUrl, { postBody: 'ajaxAction=untakenInvitationsRemove&invitationId=' + invitationId, onComplete: this._removeUntakenInvitation_callback.bindAsEventListener(this,invitationId)});
		}
	},
	
	_removeUntakenInvitation_callback:function(request, invitationId) {
		hideLoading('untakenInvitationName-' + invitationId);
		if(request.responseText == 'no-access')
			alert("Sorry but it seems that you don't have access permission to remove this invitation.");
		else if(request.responseText == 'true')
		{
			if($$('#projectUntakenInvitations .generalToolsContainer').size() > 1)
				new Effect.BlindUp('untakenInvitation-' + invitationId, { duration:0.4,afterFinish:function(){	$('untakenInvitation-'+invitationId).remove();}});
			else
				new Effect.BlindUp('projectUntakenInvitations', {duration:0.6,afterFinish:function(){	
					$('untakenInvitation-'+invitationId).remove();
				}});
		}
		else
			alert('There was an error removing the invitation. Please reload the page and try again.');
	},
	
	
	/*
	 * New stuff - 20080107
	 */
	
	permission: function(invitationId, userId, projectId, userHash)
	{
		if($('permissionContainer-'+userHash).visible())
			new Effect.SlideUp('permissionContainer-' + userHash, {duration:0.2});
		else
		{
			var el = $$('#user' + userHash + ' .generalTools');
			if(el.size() > 0)
				showLoading(el[0]);

			new Ajax.Request(ajaxUrl, { postBody: 'ajaxAction=peoplePermission&userHash=' + userHash + '&userId=' + userId + '&projectId=' + projectId + '&invitationId=' + invitationId, onComplete: this._permission_callback.bindAsEventListener(this, userHash)});			
		}
	},
	
	_permission_callback: function(request, userHash)
	{
		var el = $$('#user' + userHash + ' .generalTools');
		if(el.size() > 0)
			hideLoading(el[0]);

		$('permissionContainer-' + userHash).update(request.responseText);
		new Effect.SlideDown('permissionContainer-' + userHash, {duration:0.2});
	},
	
	permissionSave: function(userHash) {
		showLoading('permissionContainer-' + userHash);
		new Ajax.Request(ajaxUrl, { postBody: 'ajaxAction=peoplePermissionSave&' + $('permissionForm-' + userHash).serialize(), onComplete: this._permissionSave_callback.bindAsEventListener(this, userHash) });
	},
	
	_permissionSave_callback: function(request, userHash) {
		hideLoading('permissionContainer-' + userHash);
		if(request.responseText == 'false')
			alert('There was an error processing your request. Please refresh the page and try again.');
		else
			new Effect.SlideUp('permissionContainer-' + userHash, {duration:0.2, afterFinish:function() {$('permissionContainer-' + userHash).down().remove();}});
	}
};

var people = new People();
