/* -------------------------------------------------------------------------- */
/** 
 *    @fileoverview
 *       Processing infomational balloon.
 *
 *    @version 2.0.20090610
 *    @requires jquery.js
 *    @requires bajl.js
 *    @requires bajl.balloon.js
 *    @requires bajl.processingInfo.css
 */
/* -------------------------------------------------------------------------- */
(function($) {



/* -------------------- setting for BAJL.ProcessingInfo -------------------- */
/** 
 * default setting for {@link BAJL.ProcessingInfo}
 * @namespace default setting for {@link BAJL.ProcessingInfo}
 * @fieldOf BAJL.settings
 * @prperty {String} className          className of base node of the processing info balloon
 * @prperty {String} content            default content of the processing info balloon
 * @prperty {Number} effect.duration    duration time for show/hide animation (in millisecond)
 */
BAJL.settings.ProcessingInfo = {
	  'className' : 'BAJLProcessingInfo'
	, 'content'   : '<img src="/common/img/icon_throbber.gif" width="32" height="32" alt="" />Please wait...'
	, 'effect'    : { 'duration' : 750 } 
};



/* -------------------- Class : BAJL.ProcessingInfo -------------------- */
/**
 * provides processing infomational balloon.
 * @class processing infomational balloon
 * @extends BAJL.Balloon
 * @constructor
 * @param {BAJL.Balloon.setting} setting    balloon setting object
 */
BAJL.ProcessingInfo = function(setting) {
	if (BAJL.env.isDOMReady) {
		this.init(setting);
	}
}

BAJL.ProcessingInfo.prototype = new BAJL.Balloon;

/**
 * an array of instances of this class.
 * @type BAJL.ProcessingInfo[]
 */
BAJL.ProcessingInfo.instances = [];

/** @private */
BAJL.ProcessingInfo.prototype.initSuper = BAJL.ProcessingInfo.prototype.init;

/** @private */
BAJL.ProcessingInfo.prototype.showSuper = BAJL.ProcessingInfo.prototype.show;

/** @private */
BAJL.ProcessingInfo.prototype.hideSuper = BAJL.ProcessingInfo.prototype.hide;

/**
 * initialize this processing informational balloon
 * @param {BAJL.Balloon.setting} setting    balloon setting object
 * @private
 */
BAJL.ProcessingInfo.prototype.init = function(setting) {
	var setting = $.extend({}, BAJL.settings.ProcessingInfo, setting);

	this.initSuper(setting);
	this.hideSuper();
//	this.setPositionFixed();
	$(window).resize(BAJL.Delegate(this.onWindowResize, this));
	
	BAJL.ProcessingInfo.instances.push(this);
}

/**
 * show this balloon.
 * @param {Number} [x]    X-coordinate to popup (px) (if nonspecified, the balloon is centered on X-axis)
 * @param {Number} [y]    Y-coordinate to popup (px) (if nonspecified, the balloon is centered on Y-axis)
 */
BAJL.ProcessingInfo.prototype.show = function(x, y) {
	if (!this.isActive()) {
		this.showSuper(x, y);
		this.moveToCenter();
		
		var duration = BAJL.settings.ProcessingInfo.effect.duration;
		$(this.node).stop().hide().fadeIn(duration);
	}
}

/**
 * hide this balloon.
 */
BAJL.ProcessingInfo.prototype.hide = function() {
	var duration = BAJL.settings.ProcessingInfo.effect.duration;
	var callback = BAJL.Delegate(function() {
		this.moveTo(-10000, -10000);
		this.hideSuper();
	}, this);

	$(this.node).stop().fadeOut(duration, callback);
}

/**
 * centering this balloon when window resizing.
 * @param {Evnet} e    event object
 * @event
 * @private
 */
BAJL.ProcessingInfo.prototype.onWindowResize = function(e) {
	if (this.isActive()) this.moveToCenter();
}



/* -------------------- for JSDoc toolkit output -------------------- */
/**
 * callback functions for {@link BAJL.ProcessingInfo};
 * callback types are borrowed from {@link BAJL.Balloon}.
 * @name BAJL.ProcessingInfo.callback
 * @namespace callback functions for {@link BAJL.ProcessingInfo}
 */
/**
 * a callback for when the ProcessingInfo is shown
 * @name BAJL.ProcessingInfo.callback.onShow
 * @function
 * @param {BAJL.ProcessingInfo.geometry} geom    an associative array of ProcessingInfo geometry
 */
/**
 * a callback for when the ProcessingInfo is moved position
 * @name BAJL.ProcessingInfo.callback.onMove
 * @function
 * @param {BAJL.ProcessingInfo.geometry} geom    an associative array of ProcessingInfo geometry
 */
/**
 * a callback for when the ProcessingInfo's size is changed
 * @name BAJL.ProcessingInfo.callback.onResize
 * @function
 * @param {BAJL.ProcessingInfo.geometry} geom    an associative array of ProcessingInfo geometry
 */
/**
 * a callback for when the ProcessingInfo is hidden
 * @name BAJL.ProcessingInfo.callback.onHide
 * @function
 * @param {BAJL.ProcessingInfo.geometry} geom    an associative array of ProcessingInfo geometry
 */
/**
 * a callback for when the ProcessingInfo's content is changed.
 * @name BAJL.ProcessingInfo.callback.onContentChange
 * @function
 * @param {BAJL.ProcessingInfo.geometry} geom    an associative array of ProcessingInfo geometry
 */



/* -------------------- for backward compatibilities -------------------- */

if (BAJL.settings.common.useBackCompat) {
	BAJL.CreateBackCompat({
		  'BAProcessingInfo' : BAJL.ProcessingInfo
	});
}



})(jQuery);

