TooltipWidget = Class.create({
    params: null,

    getId: function(element) {
        return element.id.replace(this.params.idPrefix, '');
    },

    initialize: function(params) {
        this.params = params;
        
        $$(params.elements).each(function(element) {
            var id = this.getId(element);
            if (id.empty()) {
                var ancestors = element.ancestors();
                for (var i = 0; ancestors.length; i++) {
                    id = this.getId(ancestors[i]);
                    if (!id.empty()) {
                        break;
                    }
                }
            }
            var url = this.params.url;
            url = url.replace('id=VALUE', 'id={0}');
            url = String.format(url, id);
            new Tip(element, {
                style:      (this.params.style || 'preview'),
                width:      this.params.width,
                hideOthers: true,
                ajax: {
                    url: url,
                    options: {
                        method: 'get'
                    }
                }
            });
        }.bind(this));
    }
});

TooltipPreview = Class.create({
    options: {
        item: '.item',
        thumbnail: '.thumbnail',
        preview: '.preview'
    },
    
    initialize: function(params) {
        if (params) {
            this.options.item = (params.item) ? params.item : this.options.item; 
            this.options.thumbnail = (params.thumbnail) ? params.thumbnail : this.options.thumbnail; 
            this.options.preview = (params.preview) ? params.preview : this.options.preview;
        }
        
        $$(this.options.item).each(function(item) {
            var thumbnail = item.down(this.options.thumbnail);
            if (thumbnail) {
                thumbnail = thumbnail.down('img');
                var preview = item.down(this.options.preview);
                if (preview) {
                    var img = preview.down('img');
                    if (img) {
                        new Tip(thumbnail, preview, {
                            style:      'preview',
                            hideOthers: true
                        });
                    }
                }
            }
        }.bind(this));
    }
});
