Type.registerNamespace('PosteItaliane.eCommerce.FrontEnd.Core.Web.UI');

//
// Define the behavior properties.
//

PosteItaliane.eCommerce.FrontEnd.Core.Web.UI.ImageLoadBehavior = function(element)
{ 
    PosteItaliane.eCommerce.FrontEnd.Core.Web.UI.ImageLoadBehavior.initializeBase(this, [element]);
    
    this._defaultImageUrl = null;
    this._imageUrl = null;
    this._imageAlternateText = null;
    this._targetCortrol = null;
    this._imageToLoad = new Image();
    
    this._onLaodHandler = null;
    this._onImageLoadHandler = null;
}

//
// Create the prototype for the behavior.
//

PosteItaliane.eCommerce.FrontEnd.Core.Web.UI.ImageLoadBehavior.prototype =
{
    initialize : function()
    {
        PosteItaliane.eCommerce.FrontEnd.Core.Web.UI.ImageLoadBehavior.callBaseMethod(this, 'initialize');
        
        this.initializeComponents();
    },
    
    dispose : function()
    {
        this.disposeComponents();
        
        PosteItaliane.eCommerce.FrontEnd.Core.Web.UI.ImageLoadBehavior.callBaseMethod(this, 'dispose');
    },
    
    //
    // Initialize components
    //
    
    initializeComponents : function()
    {
        var tagName = new String(this.get_element().tagName);
        
        switch (tagName.toLowerCase())
        {
            case 'img':
                this._targetControl = this.get_element();
                break;
            
            case 'a':
                if (this.get_element().firstChild == null)
                {
                    this.get_element().appendChild(document.createElement('img'));
                }
                
                this._targetControl = this.get_element().firstChild;
                break;
            
            default:
                break;
        }
        
        this._onLaodHandler = Function.createDelegate(this, this._onLoad);
        this._onImageLoadHandler = Function.createDelegate(this, this._onImageLoad);
        
        $addHandler(this._targetControl, 'load', this._onLaodHandler);
        $addHandler(this._imageToLoad, 'load', this._onImageLoadHandler);
        
        this._targetControl.src = this._defaultImageUrl;
    },
    
    //
    // Dispose components
    //
    
    disposeComponents : function()
    {
        if (this._onLaodHandler !== null && this._onImageLoadHandler !== null)
        {
            $removeHandler(this._targetControl, 'load', this._onLaodHandler);
            $removeHandler(this._imageToLoad, 'load', this._onImageLoadHandler);
            
            this._onLaodHandler = null;
            this._onImageLoadHandler = null;
        }
    },
    
    //
    // Event delegates
    //
    
    _onLoad : function(e)
    {
        if (this._targetControl && !this._targetControl.disabled)
        {
            $removeHandler(this._targetControl, 'load', this._onLaodHandler);
            this._onLaodHandler = null;
            
            this._imageToLoad.src = this._imageUrl;
        }
    },
    
    _onImageLoad : function(e)
    {
        $removeHandler(this._imageToLoad, 'load', this._onImageLoadHandler);
        this._onImageLoadHandler = null;
        
        this._targetControl.src = this._imageToLoad.src;
        this._targetControl.alt = this._imageAlternateText;
    },
    
    //
    // Behavior properties
    //
    
    get_defaultImageUrl : function()
    {
        return this._defaultImageUrl;
    },

    set_defaultImageUrl : function(value)
    {
        if (this._defaultImageUrl !== value)
        {
            this._defaultImageUrl = value;
            this.raisePropertyChanged('defaultImageUrl');
        }
    },
    
    get_imageUrl : function()
    {
        return this._imageUrl;
    },

    set_imageUrl : function(value)
    {
        if (this._imageUrl !== value)
        {
            this._imageUrl = value;
            this.raisePropertyChanged('imageUrl');
        }
    },
    
    get_imageAlternateText : function()
    {
        return this._imageAlternateText;
    },

    set_imageAlternateText : function(value)
    {
        if (this._imageAlternateText !== value)
        {
            this._imageAlternateText = value;
            this.raisePropertyChanged('imageAlternateText');
        }
    }
}

//
// JSON Descriptor
//

PosteItaliane.eCommerce.FrontEnd.Core.Web.UI.ImageLoadBehavior.descriptor =
{
    properties: [ {name: 'defaultImageUrl', type: String}, {name: 'imageUrl', type: String}, {name: 'imageAlternateText', type: String} ]
}

PosteItaliane.eCommerce.FrontEnd.Core.Web.UI.ImageLoadBehavior.registerClass('PosteItaliane.eCommerce.FrontEnd.Core.Web.UI.ImageLoadBehavior', Sys.UI.Behavior);

if (typeof(Sys) !== 'undefined')
{
    Sys.Application.notifyScriptLoaded();
}