// Json Request Methods

function sendJsonRequest(requestData, onSuccess, onFail) {
	var requestHeader = 'application/json';
	
	function jsonOnSuccess(xmlHttp) {
		// DEBUG: alert(xmlHttp.responseText);
		response = JSON.parse(xmlHttp.responseText);
		return onSuccess(response);
	}

	function jsonOnFail() {
		// Maybe when we know more about request fails, we may 
		// want to do something here
		return onFail();
	}
	
	return sendRequest(requestHeader, JSON.stringify(requestData), jsonOnSuccess, jsonOnFail);
}

function getFieldsObject(form) {
	var fields = new Object();

	//loop through form elements and make object with field values
	for (var i=0; i < form.elements.length; i++) {
		if (form.elements[i].name) {
			if (form.elements[i].type == "checkbox") {
				fields[form.elements[i].name] = form.elements[i].checked;
			} else {
				fields[form.elements[i].name] = form.elements[i].value;
			}
		}
	}
	return fields;
}

function sendJsonEntityRequest(entity_id, method, data, onSuccess, onFail) {
	var requestData = new Object();

	requestData.EntityId = entity_id;
	requestData.Method = method;
	requestData.Request = data;

	return sendJsonRequest(requestData, onSuccess, onFail);
}

function sendJsonClassRequest(class_name, method, data, onSuccess, onFail) {
	var requestData = new Object();

	requestData.ClassName = class_name;
	requestData.Method = method;
	requestData.Request = data;

	return sendJsonRequest(requestData, onSuccess, onFail);
}

function sendJsonMethodRequest(method, data, onSuccess, onFail) {
	var requestData = new Object();

	requestData.Method = method;
	requestData.Request = data;

	return sendJsonRequest(requestData, onSuccess, onFail);
}


function testJSON() {
	var requestData = new Object();
	requestData.Test = '1 2 3, Testing.';

	var requestHeader = 'application/json';

	function onSuccess(xmlHttp) {
		try {
			responseData = JSON.parse(xmlHttp.responseText);
		} catch (e) {
			alert(e)
			throw e
		}
		message = "";
		for (i in responseData) {
			message = message + responseData[i] + "\n";
		}
		alert(message);
	}

	function onFail() {
		alert("Communication with server failed");
	}

	return sendRequest(requestHeader, JSON.stringify(requestData), onSuccess, onFail);
}

function RemoveKeyword(keywordId) {
	var confirm = window.confirm('Are you sure you want to delete?');
	if (confirm) {
		sendJsonMethodRequest('RemoveKeyword', {'Id':keywordId}, RemoveKeywordResponse, JSONFail);
	}
}

function AddQ150Item(year) {
	sendJsonMethodRequest('AddQ150Item', {'Year':year}, AddQ150ItemResponse, JSONFail);
}

function AddAclEntry(form) {
	alert(form);
	return false;
}

function RemoveAclEntry(aclEntryId) {
	var confirm = window.confirm('Are you sure you want to delete?');
	if (confirm) {
		sendJsonMethodRequest('RemoveAclEntry', {'Id':aclEntryId}, RemoveAclEntryResponse, JSONFail);
	}
}
