/* encoding utf-8 */

/**
 * fino.dhtml.ImageRollEventListener
 *
 *
 * @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
 * @param  Image targetImage
 * @return void
 */
fino.dhtml.ImageRollEventListener = function(element, targetImage) {
	this._element = null;
	this._srcImage = null;
	this._targetImage = null;

	if (isDefined(element)) {
		this.setElement(element);
	}

	if (isDefined(targetImage)) {
		this._targetImage = targetImage;
	}
};

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

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

/**
 * Source Image Element
 *
 *
 * @access private
 * @var    Image
 */
// fino.dhtml.ImageRollEventListener.prototype._srcImage = null;

/**
 * 
 */
// fino.dhtml.ImageRollEventListener.prototype._targetImage = null;

/**
 * Get EventListener Element
 *
 *
 * @access protected
 * @return DOMElement
 */
fino.dhtml.ImageRollEventListener.prototype.getElement = function() {
	return (this._element);
};

/**
 * Set EventListener Element
 *
 *
 * @access protected
 * @param  DOMElement element
 * @return void
 */
fino.dhtml.ImageRollEventListener.prototype.setElement = function(element) {
	if (isDefined(element)) {
		this._element = element;
	}
};

/**
 * Update Event
 *
 *
 * @access public
 * @param  ImageRollEventTarget eventTarget
 * @return bool
 */
fino.dhtml.ImageRollEventListener.prototype.update = function(eventTarget) {
	if (!isDefined(eventTarget) || !isDefined(eventTarget.getEvent())) {
		return (false);
	}

	if (eventTarget.getEvent().type == 'mouseover') {
		return (this.doRollOver(eventTarget));
	}
	else if (eventTarget.getEvent().type == 'mouseout') {
		return (this.doRollOut(eventTarget));
	}
	else {
		return (false);
	}
};

/**
 * RollOver Event Handler
 *
 *
 * @access public
 * @param  ImageRollEventTarget eventTarget
 * @return bool
 */
fino.dhtml.ImageRollEventListener.prototype.doRollOver = function(eventTarget) {
	if (!this._srcImage) {
		this._srcImage = new Image();
		this._srcImage.src = this._element.src;
	}

	if (!this._targetImage.complete) {
		return (false);
	}

	this._element.src = this._targetImage.src;

	return (true);
};

/**
 * RollOut Event Handler
 *
 *
 * @access public
 * @param  ImageRollEventTarget eventTarget
 * @return bool
 */
fino.dhtml.ImageRollEventListener.prototype.doRollOut = function(eventTarget) {
	if (!this._srcImage) {
		return (false);
	}

	this._element.src = this._srcImage.src;

	return (true);
};
