if (typeof(eFavoriteManagerObject) == 'undefined')
{
    eFavoriteManagerObject = function(ajaxEventVar, ajaxEventUID)
    {
        this.ajaxEventVar = ajaxEventVar;
        this.ajaxEventUID = ajaxEventUID;
        this.loader = new eAJAXLoaderObject();

        this.event = null;
        this.variationId = null;
        this.elementId = null;

        this.addButtonContent = '+ Add To Favorite';
        this.removeButtonContent = '- Remove From Favorite';
    }
}
eFavoriteManagerObject.prototype.setAddButtonContent = function(content)
{
    this.addButtonContent = content;
}
eFavoriteManagerObject.prototype.setRemoveButtonContent = function(content)
{
    this.removeButtonContent = content;
}
eFavoriteManagerObject.prototype.addItem = function(variationId, elementId)
{
    this.event = 'add';
    this.variationId = variationId;
    this.elementId = elementId;
    if ( this.elementId )
    {
        $('#' + this.elementId).unbind('click');
    }
    else
    {
        $('#favoritebutton' + this.variationId).unbind('click');
    }

    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'addToFavorite',
            variationId: variationId
    };
    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetResponse(responseData);
    },
    'json');
}
eFavoriteManagerObject.prototype.updateComment = function(id, text)
{
    this.event = 'updateComment';
    var currentObject = this;

    var postData = { __callHandler: 'updateFavoriteComment',
            id: id,
            text: text
    };
    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          //currentObject.onGetResponse(responseData);
    },
    'json');
}
eFavoriteManagerObject.prototype.removeItem = function(variationId, elementId)
{
    this.event   = 'remove';
    this.variationId = variationId;
    this.elementId = elementId;
    if ( this.elementId )
    {
        $('#' + this.elementId).unbind('click');
    }
    else
    {
        $('#favoritebutton' + this.variationId).unbind('click');
    }

    this.loader.show('Please wait ...');

    var currentObject = this;

    var postData = { __callHandler: 'removeFromFavorite',
            variationId: variationId
    };
    postData[this.ajaxEventVar] = this.ajaxEventUID;

    $.post(selfUrl, postData,
    function(responseData) {
          currentObject.onGetResponse(responseData);
    },
    'json');
}
eFavoriteManagerObject.prototype.setInfoPanel = function(infoPanelObject)
{
    this.infoPanelObject = infoPanelObject;
}
eFavoriteManagerObject.prototype.updateInfoPanel = function()
{
    if (typeof(this.infoPanelObject) == 'object')
    {
        this.infoPanelObject.loadInfo();
    }
}
eFavoriteManagerObject.prototype.onGetResponse = function(responseData)
{
    var currentObject = this;

    this.loader.hide();

    if ((typeof(showAJAXDebugInfo) != 'undefined') && responseData.PHPAJAXDebug != null)
    {
        showAJAXDebugInfo(responseData.PHPAJAXDebug.Info, responseData.PHPAJAXDebug.Owner);
    }

    var variationId = currentObject.variationId;
    var elementId    = this.elementId?this.elementId:'favoritebutton'+this.variationId;
    if (responseData.Response.Code != 0)
    {
        alert(responseData.Response.Message);
        switch (this.event)
        {
            case 'add':
                $('#' + elementId).bind('click', function() {
                    currentObject.addItem(variationId);
                });
                break;
            case 'remove':
                $('#' + elementId).bind('click', function() {
                    currentObject.removeItem(variationId);
                });
                break;
        }
    }
    else
    {
        switch (this.event)
        {
            case 'add':
                $('#' + elementId).html(this.removeButtonContent);
                $('#' + elementId).bind('click', function() {
                    currentObject.removeItem(variationId,elementId);
                });
                break;
            case 'remove':
                $('#' + elementId).html(this.addButtonContent);
                $('#' + elementId).bind('click', function() {
                    currentObject.addItem(variationId,elementId);
                });
                break;
        }
        if ( $('#' + elementId).parents('tr').attr('hide') )
        {
            $('#' + elementId).parents('tr').hide();
        }

        this.updateInfoPanel();
    }
}
