﻿/// <reference name="MicrosoftAjax.js"/>

Type.registerNamespace("Extenders");

Extenders.ImageReplacementExtender = function(element) {
  Extenders.ImageReplacementExtender.initializeBase(this, [element]);
  this._originalImage = null;
  this._clickImage = null;
  this._hoverImage = null;
  this._handledMouseEvents = ["mouseover", "mouseout", "mousedown", "mouseup"];
}

Extenders.ImageReplacementExtender.prototype = {
  initialize: function() {
    Extenders.ImageReplacementExtender.callBaseMethod(this, 'initialize');
    var handledEvents = new Object();
    for (var i = 0; i < this._handledMouseEvents.length; i++)
      handledEvents[this._handledMouseEvents[i]] = this._onMouseEvent;
    $addHandlers(this.get_element(), handledEvents, this);
  },
  dispose: function() {
    // Detach events
    $clearHandlers(this.get_element());
    Extenders.ImageReplacementExtender.callBaseMethod(this, 'dispose');
  },
  _onMouseEvent: function(evt) {
    switch (evt.type) {
      case "mouseover":
        this._swapImage(this.get_hoverImageUrl());
        break;
      case "mousedown":
        this._swapImage(this.get_clickImageUrl());
        break;
      case "mouseout":
      case "mouseup":
        this._swapImage(this.get_originalImageUrl());
        break;
    }
  },
  _swapImage: function(imageSrc) {
    if (imageSrc != null && imageSrc != "")
      this.get_element().src = imageSrc;
  },

  get_originalImageUrl: function() {
    if (this._originalImage != null)
      return this._originalImage.src;
    else
      return null;
  },

  set_originalImageUrl: function(value) {
    this._originalImage = new Image();
    this._originalImage.src = value;
    this.raisePropertyChanged('originalImageUrl');
  },

  get_hoverImageUrl: function() {
    if (this._hoverImage != null)
      return this._hoverImage.src;
    else
      return null;
  },

  set_hoverImageUrl: function(value) {
    this._hoverImage = new Image();
    this._hoverImage.src = value;
    this.raisePropertyChanged('hoverImageUrl');
  },

  get_clickImageUrl: function() {
    if (this._clickImage != null)
      return this._clickImage.src;
    else
      return null;
  },

  set_clickImageUrl: function(value) {
    //this._clickImageUrl = value;
    this._clickImage = new Image();
    this._clickImage.src = value;
    this.raisePropertyChanged('clickImageUrl');
  }
}
Extenders.ImageReplacementExtender.registerClass('Extenders.ImageReplacementExtender', Sys.UI.Control);

if (typeof (Sys) !== 'undefined') Sys.Application.notifyScriptLoaded();
