

/*  PrototypeWrap, version 1.2
 *  Collection of wrappers for Prototype JavaScript framework, version 1.6.0
 *  (c) 2007 Mac McCahey
 *
 *  Floogy web site: http://www.floogy.com/
 *  Prototype web site: http://www.prototypejs.org/
 *
/*--------------------------------------------------------------------------*/

/*
Wrapper for Ajax.Request. Triggers handler function) if 
responseText is blank or begins with '>>>' else dies while 
alerting any other output (std or custom errors)
*/
function AjaxRequest (url, params, handle) {
	new Ajax.Request (
		url,
		{
			method: 'post',
			parameters: params,
			evalScripts: true,
			onSuccess: function(r) { __AjaxHandle (r, handle); },
			onFailure: function(r) { alert ('Server-side failure. Please try again.'); },
			onException: function(r, eo) { alert ('Client-side failure. Please try again. '+r+' --- '+eo); },
			on404: function(r) { alert ('Page not found. Report to webmaster.'); }
		}
	);
	return false;
}

/*
Wrapper for Ajax.Request suitable for form submission. Triggers
handler function if responseText is blank or begins with '>>>'
else dies while alerting any other output (std or custom errors)
*/
function AjaxSubmit (frm, handle) {
	frm = $(frm); // http://dev.rubyonrails.org/ticket/8525
	//alert (handle); // good debug alert
	new Ajax.Request (
		frm.action, 
		{
			method: frm.method,
			parameters: frm.serialize(true),
			evalScripts: true,
			onSuccess: function(r) { __AjaxHandle (r, handle); },
			onFailure: function(r) { alert ('Server-side failure. Please try again.'); },
			onException: function(r, eo) { alert ('Client-side failure. Please try again. '+r+' --- '+eo); },
			on404: function(r) { alert ('Page not found. Report to webmaster.'); }
		}
	);
	return false;
}

/*
r is for response
*/
function __AjaxHandle (r, handle) {
	var delimiter = '>>>';
	var delimiterPos = null;
	//alert (r.responseText); // good debug alert
	delimiterPos = r.responseText.indexOf(delimiter);
	if (r.responseText == null || r.responseText.strip().length==0) { // success: blank response (null for Safari, zero length for FireFox)
		eval(handle)('');
	} else if (delimiterPos>=0) { // success: delimiter exists
		eval(handle)(r.responseText.substr((delimiterPos+delimiter.length), r.responseText.length)); // send response after delimiter to handler
	} else {
		alert (r.responseText.stripTags().strip()); // error: non-blank response and delimiter does not exist
	}
}
