/* encoding utf-8 */

/**
 * fino.dhtml.ImageRollEventTarget
 *
 *
 * @author    Toru Yamaguchi@Contents Co.,Ltd. <tyamaguchi@contents.ne.jp>
 * @version   $Id$
 * @copyright 2002-2004 Contents Co.,Ltd. System Design Laboratory All Right Reserved
 */
declareNamespace('fino.dhtml');

/**
 * Constructor
 *
 *
 * @access public
 * @param  DOMElement element
 * @return void
 */
fino.dhtml.ImageRollEventTarget = function(element) {
	if (isDefined(element)) {
		this._element = element;
		this._eventListeners = new Array();
		this._event = null;

		for (var i = 1; i < arguments.length; i++) {
			if (typeof arguments[i] == 'string') {
				this.applyEventHandler(arguments[i]);
			}
		}
	}
};

// for legacy browser
if (!isDefined(fino.dhtml.ImageRollEventTarget.prototype)) {
	new fino.dhtml.ImageRollEventTarget();
}

/**
 * EventTarget Element
 *
 *
 * @access private
 * @var    DOMElement
 */
// fino.dhtml.ImageRollEventTarget.prototype._element = null;

/**
 * EventLisner Array
 *
 *
 * @access private
 * @var    Array
 */
// fino.dhtml.ImageRollEventTarget.prototype._eventListeners = null;

/**
 * Occured Event
 *
 *
 * @access private
 * @var    Event
 */
// fino.dhtml.ImageRollEventTarget.prototype._event = null;

/**
 * Add EventListener
 *
 *
 * @access public
 * @param  ImageRollEventListener eventListener
 */
fino.dhtml.ImageRollEventTarget.prototype.addEventListener = function(eventListener) {
	if (typeof eventListener == 'object') {
		if (!this._eventListeners) {
			this._eventListeners = new Array();
		}

		this._eventListeners.push(eventListener);
	}
};

/**
 * Remove EventListener
 *
 *
 * @access public
 * @param  ImageRollEventListener eventListener
 * @return void
 */
fino.dhtml.ImageRollEventTarget.prototype.removeEventListener = function(eventListener) {
	if (typeof eventListener == 'object') {
		for (var i = 0; i < this._eventListeners.length; i++) {
			if (typeof this._eventListeners[i] != 'object') {
				continue;
			}

			if (this._eventListeners[i] == eventListener) {
				delete this._eventListeners[i];
			}
		}
	}
};

/**
 * Dispatch Event
 *
 *
 * @access public
 * @param  Event evt
 * @return bool
 */
fino.dhtml.ImageRollEventTarget.prototype.dispatchEvent = function(evt) {
	this._event = (evt) ? evt : ((window.event) ? event : null);

	var result = true;

	if (this._event) {
		for (var i = 0; i < this._eventListeners.length; i++) {
			if (typeof this._eventListeners[i] != 'object') {
				continue;
			}

			result = this._eventListeners[i].update(this) && result;
		}

		return (result);
	}
	else {
		return (false);
	}
};

/**
 * Apply EventHandler at Element by eventType
 *
 *
 * @access protected
 * @param  string
 * @return bool
 */
fino.dhtml.ImageRollEventTarget.prototype.applyEventHandler = function(eventType) {
	if (typeof eventType != 'string') {
		return (false);
	}

	eventType = 'on' + eventType.toLowerCase();

	if (!isDefined(this._element)) {
		return (false);
	}

	var self = this;

	this._element[eventType] = function(evt) {
		return self.dispatchEvent(evt);
	};
};

/**
 * Get Occured Event
 *
 *
 * @access protected
 * @return Event
 */
fino.dhtml.ImageRollEventTarget.prototype.getEvent = function() {
	return (this._event);
};
