

function handleErrors(submitResult)
{
	if (submitResult['valid'] == 'false') {   		
		 var errors = submitResult['errors'];
		 try {
		 	clearFormErrors();
		 	for (var field in errors) {		
		 		showFieldError(field, errors[field]); 	
		 	}
		 } catch(e) {alert('Exception: '+e.message)}
	}
}


function clearFormErrors()
{
	$$("div.error-message").each(function(element){
		element.remove();
	});
}


function showFieldError(fieldname, errorMsg)
{
	var errorHTML = '<div class="error-message">'+errorMsg+'</div>';
	return $(fieldname).insert({before: errorHTML});
}


/* MooTools and Prototype compatible */
function doHighlight(element)
{
	if (window.MooTools) {
		return;
	} else {	// else assume Scriptaculous
		new Effect.Highlight(element);
	}
}


function testHandler()
{
	alert('AJAX handler test');
}

/**
 * Handles JSON response from form submissions 
 * string responseText: the serialised JSON object
 * string successCallback: function to call if form submission is successful (optional) - this overrides any redirects in the server response
 * string errorCallback: function to call if form submission failed
 * 
 * response message fields
 * string valid: 'true' if submission succeeded, 'false' otherwise
 * string redirect: URL to redirect to on successful submission (not redirected if error)
 * array errors: error messages
 */
function handleSubmitResponse(responseText, successCallback, errorCallback)
{
	try {
		responseArray = toJsonObj(responseText);
		if (responseArray['valid'] == 'false') {  
			handleErrors(responseArray);
			if (typeof(errorCallback) != 'undefined') {
				eval(errorCallback+'(responseArray);');
			} 			
		} else {			
			if (typeof(successCallback) != 'undefined') {
				eval(successCallback+'(responseArray);');
			} else {
				if (typeof(responseArray['redirect']) != 'undefined') {
					window.location = responseArray['redirect'];
				}
			}
		}
	} catch (e) {
		alert('Exception: '.e.message);
	}
}

/* MooTools and Prototype compatible */
function toJsonObj(string)
{
	var result = null;
	if (window.MooTools) {
		result = Json.evaluate(string);
	} else {	// else assume Scriptaculous
		result = string.evalJSON();
	}
	return result;
}





/* MooTools and Prototype compatible */
function addClass(element, classname)
{
	if (window.MooTools) {
		$(element).addClass(classname);
	} else {
		$(element).addClassName(classname);
	}
}


function removeClass(element, classname)
{
	if (window.MooTools) {
		$(element).removeClass(classname);
	} else {
		$(element).removeClassName(classname);
	}
}


function clearForm(formId)
{
	$(formId).reset();
	clearFormErrors();
}


function showFail(response)
{
	alert(response);
}


function activateEditInPlace()
{
	Ajax.Responders.register({
		onCreate: function() {clearFormErrors();}
	});
	
	$$("span.editable").each(function(element){
		new Ajax.InPlaceEditor(element, '/myAccount/editField', {onFailure: function(ipe, transport){handleSubmitResponse(transport.responseText.stripTags());}});
	})
}
