// General purpose status message object.
// Prints to "progess" area (e.g. "Loading...") and
// prints errors to an error area.
// Requires the include file '/templates/includes/content/status.tmpl'
// so it can write to the progress/error areas.
// You MUST pass to it the id of the parent container element that contains
// the above include file.  (This allows you to have more than one status/progress
// area on a page.)
var StatusMessage = Class.create({
	initialize: function (element, options) {
		this.parentElement = null;
		this.elMessages = null;
		this.elProgress = null;
		this.ulMessages = null;

		this.options = Object.extend({
			msgLoading: 'Saving...',
			msgError: 'An unexpected error occurred. Please try again.',
			msgFailure: '', //'Failed!',
			msgComplete: 'Complete.'
		}, options || {});
			
		this.parentElement = $(element);
			
		// set up messages
		this.elMessages = this.parentElement.down('.error_messages') || $(document.body).down('.error_messages');
		this.ulMessages = ( this.elMessages ? this.elMessages.down('ul') : null );
		this.elProgress = this.parentElement.down('.progress') || null;
	},

	onLoading: function ( msgLoading ) {
		// clean up errors
		if ( this.elMessages ) this.elMessages.hide();
		if ( this.ulMessages ) this.ulMessages.select('li').each(function(elm){elm.remove()});
		
		if ( msgLoading ) 
			this.options.msgLoading = msgLoading;
			
		// update stauts	
		if ( this.elProgress != null ) {
			 this.elProgress.unsetErrorState();
			 this.elProgress.innerHTML = this.options.msgLoading;
		}
	},
	
	onFailure: function ( msgError ) {
		if ( msgError )
			this.options.msgError = msgError;
			
		if ( this.elProgress != null ) {
			 this.elProgress.setErrorState();
			 this.elProgress.innerHTML = this.options.msgError;
		}
	},
	
	onComplete: function(errors){
		var errMsg = '';
		if ( errors && errors.length ) {
			
			errors.each(function(err){
				errMsg = errMsg || err;
				if ( this.ulMessages ) this.ulMessages.insert({ bottom: '<li>' + err + '</li>' });
			}, this);

			if ( this.elProgress != null ) {
				 this.elProgress.setErrorState();
				 this.elProgress.innerHTML = this.options.msgFailure;
			}

			if ( this.elMessages ) this.elMessages.show();

		} else {
			
			if ( this.elProgress != null ) {
				 this.elProgress.unsetErrorState();
				 this.elProgress.innerHTML = this.options.msgComplete;
			}
										
			// clean up errors
			if ( this.elMessages ) this.elMessages.hide();
			if ( this.ulMessages ) this.ulMessages.select('li').each(function(elm){elm.remove()});
		}
	}
});
