// needs prototype

var FbFileSelect = Class.create({
    initialize: function (formElementId, name, selectMultiple,
                          viewCategoryUrl, viewSelFilesUrl) {
        this.formElementId = formElementId;
        this.name = name;
        this.selectMultiple = selectMultiple;
        this.viewCategoryUrl = viewCategoryUrl;
        this.viewSelFilesUrl = viewSelFilesUrl;
        
        this.selectedRealfileIds = new Array();
    },
    selFile: function (realfileId) {
        if (!this.selectMultiple) {
            this.clear();
        }
        
        realfileId = Number(realfileId);
        if (isNaN(realfileId)) {
            return;
        }
        
        if (this.selectedRealfileIds.indexOf(realfileId) != -1) {
            return;
        }
        
        this.selectedRealfileIds.push(realfileId);
        this.refreshFileList();
    },
    selFiles: function (realfileIds) {
        var ids = realfileIds.split(',');
        for (i = 0; i < ids.size(); i++) {
            this.selFile(ids[i]);
        }
    },
    removeFile: function (realfileId) {
        this.selectedRealfileIds = this.selectedRealfileIds.without(realfileId);
        this.refreshFileList();
    },
    clear: function () {
        this.selectedRealfileIds.clear();
    },
    refreshFileList: function () {
        var elem = $(this.formElementId);
        if (!elem) {
            alert('Couldn\'t find ' + this.formElementId);
            return
        }
        elem.value = this.selectedRealfileIds.join(", ");
        
        var elem = $(this.formElementId + '_selFiles');
        if (!elem) {
            alert('Couldn\'t find ' + this.formElementId + '_selFiles');
            return;
        }
        var selectedRealfileIds = this.selectedRealfileIds;
        var name = this.name;
        new Ajax.Request(this.viewSelFilesUrl,
                         {
                            parameters: {id: selectedRealfileIds.join(','),
                                         name: name,
                                         what: 'files'},
                            onSuccess: function (transport) {
                                elem.innerHTML = transport.responseText;
                            }
                         });
    },
    showCategory: function (name, id) {
        var elementId = this.formElementId;
        name = this.name;
        new Ajax.Request(this.viewCategoryUrl, {
            parameters: {
                id: id,
                name: name,
                what: 'cat'
            },
            onSuccess: function (transport) {
                $(elementId + '_fileSelect').innerHTML = transport.responseText;
            }
        });
    }
});

var FbCategorySelect = Class.create({
    initialize: function (elementId) {
        this.elementId = elementId;
    },
    select: function (name, id) {
        var elementId = this.elementId;
        new Ajax.Request('fbfileselect2_getcat.php', {
            parameters: {
                id: id
            },
            onSuccess: function (transport) {
                $(elementId).innerHTML = transport.responseText;
            }
        });
    } 
});

function fbCreateIdVisibilityPair(s) {
    var o = new Object();
    o['id'] = s.id;
    o['visible'] = s.visible();
    return o;
}

function fbRefreshSearchForm(elementName, categoryId, pluginId) {
        searchFormElement = $(elementName);
        searchFormContainer = $(elementName + '_container');
        
        // save visibility
        var visStatus = new Array();
        visStatus.push(fbCreateIdVisibilityPair($(elementName + '_adv')));
        visStatus.push(fbCreateIdVisibilityPair($(elementName + '_noadv')));
        $$('div.extraSearchOption').concat($$('div.noExtraSearchOption')).each(function (s) {
            visStatus.push(fbCreateIdVisibilityPair(s));
        });
        
        new Ajax.Request('filebase_searchform.php?cat='+categoryId+'&plugin='+pluginId,
                         {
                             method: 'post',
                             parameters: searchFormElement.serialize(true),
                             onSuccess: function (transport) {
                                 var html = transport.responseText;
                                 searchFormContainer.innerHTML = transport.responseText;
                                 
                                 // restore visibility
                                 visStatus.each(function (o) {
                                    // get element
                                    var element = $(o['id']);
                                    if (element == null) {
                                        return;
                                    }
                                    
                                    // set visibility
                                    if (o['visible'] != element.visible()) {
                                        element.toggle();
                                    }
                                 });
                             }
                         });
}