/*** adds user (referenced by userId) as contact ***/ 
function addUserAsContact(ownerId, userId, divId) {
	new ActionProxy().addUserAsContact(ownerId, userId, addUserAsContactSucceeded, addUserAsContactFailed);
	var contactDiv = document.getElementById(divId);
	contactDiv.onclick = function() 
	{
		deleteUserAsContact(ownerId, userId, divId);
		return false;
	}
	
	if (contactDiv.innerHTML == 'add') contactDiv.innerHTML = 'remove';
	else contactDiv.innerHTML = 'remove from contacts';
}
function addUserAsContactSucceeded() {}
function addUserAsContactFailed() {}

function addContactByName(ownerId, form) {
	// define success/failure callbacks for action
	function success(response)
	{
		form.reset();
		document.location.reload();		
	}
	function failure(response)
	{
		page.alert("Error",Utils.errorToString(response),form);	
	}

	var userName = form.userName.value;
	new ActionProxy().addContactByName(ownerId, userName, success, failure);
}

/*** deletes user (referenced by userId) as contact ***/ 
function deleteUserAsContact(ownerId, userId, divId) {
	new ActionProxy().deleteUserAsContact(ownerId, userId, deleteUserAsContactSucceeded, deleteUserAsContactFailed);
	var contactDiv = document.getElementById(divId);
	contactDiv.onclick = function() 
	{
		addUserAsContact(ownerId, userId, divId);
		return false;
	}

	if (contactDiv.innerHTML == 'remove') contactDiv.innerHTML = 'add';
	else contactDiv.innerHTML = 'add to contacts';
	
}
function deleteUserAsContactSucceeded() {}
function deleteUserAsContactFailed() {}


/*** form to handle actions on user contacts ***/
function contactFormAction(userId, form) {
	// get selected contacts
	var checks = form.contactSelect;
	var contactIds = new Array();

	//if there is only one checkbox, then checks is a DOM element, not an array
	if (checks.length)
		for (var i=0; i<checks.length; i++) {
			if (checks[i].checked) contactIds.push(checks[i].value);
		}
	else
		if (checks.checked) contactIds.push(checks.value);

	// define success/failure callbacks for action
	function actionSuccess(response)
	{
		form.reset();
		document.location.reload();		
	}
	function actionFailure(response)
	{
		page.alert("Error",Utils.errorToString(response),form);	
	}
	function onConfirm(confirmed) {
		if (confirmed) 
			new ActionProxy().deleteContacts(userId,contactIds,actionSuccess,actionFailure);
	}
	
	// do the action

	var action = form.action.value;
	if (action == 'Delete') {
		page.confirm("Delete Contacts",
				"Are you sure you want to delete these contacts and any access you have granted them?",
				onConfirm,form);
	} else if (action == 'Create group..') {
		var groupName = form.groupName.value;
		new ActionProxy().addToContactGroup(userId,contactIds,groupName,actionSuccess,actionFailure)
	} else if (action == 'Add to group..') {
		var groupName = form.groupName.value;
		new ActionProxy().addToContactGroup(userId,contactIds,groupName,actionSuccess,actionFailure)
	} else if (action == 'Delete from group..') {
		var groupName = form.groupName.value;
		new ActionProxy().deleteFromContactGroup(userId,contactIds,groupName,actionSuccess,actionFailure)
	}

	// update watch settings
	checks = form.watchSelect;
	var watchIds = new Array();
	if (checks.length)
		for (var i=0; i<checks.length; i++) {
			watchIds["id" + checks[i].value] = checks[i].checked;
		}
	else
		watchIds["id" + checks.value] = checks.checked;

	// define callbacks for watch action
	function watchSuccess(response) {}
	function watchFailure(response) { page.alert("Error",Utils.errorToString(response),form); }

	new ActionProxy().updateContactsWatch(userId,watchIds,watchSuccess,watchFailure)
}

function contactsFormShow(form) {
	var action = form.action.value;
	if (action == 'Create group..' || action == 'Add to group..' || action == 'Delete from group..') {
		var groupName = document.getElementById('groupName');
		groupName.style.display = 'block';
	} else {
		var groupName = document.getElementById('groupName');
		groupName.style.display = 'none';
	}
}

/*** form to handle actions on contact groups ***/
function contactGroupsFormAction(userId, form) {
	// get selected contacts
	var checks = form.contactSelect;
	var contactIds = new Array();

	//if there is only one checkbox, then checks is a DOM element, not an array
	if (checks.length)
		for (var i=0; i<checks.length; i++) {
			if (checks[i].checked) contactIds.push(checks[i].value);
		}
	else
		if (checks.checked) contactIds.push(checks.value);

	// define success/failure callbacks for action
	function actionSuccess(response)
	{
		form.reset();
		document.location.reload();		
	}
	function actionFailure(response)
	{
		page.alert("Error",Utils.errorToString(response),form);	
	}
	function onConfirm(confirmed) {
		if (confirmed) 
			new ActionProxy().deleteContacts(userId,contactIds,actionSuccess,actionFailure);
	}
	
	// do the action
	var action = form.action.value;
	if (action == 'Delete') {
		page.confirm("Delete Contact Groups",
				"Are you sure you want to delete these contact groups and any access you have granted them?",
				onConfirm,form);
	}

}


/*** form to handle actions on email contacts ***/
function contactEmailsFormAction(userId, form) {
	// get selected contacts
	var checks = form.contactSelect;
	var contactIds = new Array();

	//if there is only one checkbox, then checks is a DOM element, not an array
	if (checks.length)
		for (var i=0; i<checks.length; i++)
			if (checks[i].checked) contactIds.push(checks[i].value);
	else
		if (checks.checked) contactIds.push(checks.value);

	// define success/failure callbacks for action
	function actionSuccess(response) {
		form.reset();
		document.location.reload();		
	}
	function actionFailure(response) {
		page.alert("Error",Utils.errorToString(response),form);	
	}
	function onConfirm(confirmed) {
		if (confirmed) 
			new ActionProxy().deleteEmailContacts(userId,contactIds,actionSuccess,actionFailure);
	}
	
	// do the action
	var action = form.action.value;
	if (action == 'Delete') {
		page.confirm("Delete Email Contacts",
				"Are you sure you want to delete these email contacts?",
				onConfirm,form);
	}

}

function submitContactIfEnter(ev, form, userId) {
	var keyCode;
	if (null != window.event)
		keyCode = window.event.keyCode;
	else	
		keyCode = ev.which;
	if (keyCode == 13) {
		addContactByName(userId, document.contactAdd);
		return false;
	}
	return true;
}
