Powered.FileUpload = Class.create({
    divId: null,
    progressBarId: null,
    fileUploadStatus: null,
    fileCount:1,
    callbackFunc: null,

    initialize: function(divId, progressDivId, callback) {
        this.divId = divId;
        this.progressBarId = progressDivId;
        this.callbackFunc = callback;
        this.fileUploadStatus = 'done';
    },

    refreshProgress: function (uploader) {
        var date = new Date();
        var timestamp = date.getTime();
        var url = Powered.contextPath + '/files/fragments/fileUploadStatus.jsp?time=' + timestamp;
        new Ajax.Updater(uploader.progressBarId, url,
        {
            asynchronous:true,
            method: 'get'
        });
        if (uploader.fileUploadStatus == 'inProgress') {
            window.setTimeout(function() {uploader.refreshProgress(uploader); }, 1000);
        }
        fileUploadModal.resizeToContent();
        fileUploadModal._findFocusableElements();
    },

    addFileUpload: function(elemId, singleFile) {
        if (this.fileCount > 5) return;
        if(!singleFile || (singleFile && this.fileCount <= 1)) {
            var inputDiv = document.createElement('input')
            inputDiv.type = 'file';
            inputDiv.size= '50';
            inputDiv.name = 'file'+this.fileCount;
            inputDiv.id = 'file'+this.fileCount;
            Event.observe(inputDiv, 'change', this.addFileElement.bindAsEventListener(this, elemId, singleFile));
            if (this.fileCount>1) {
                 var lastFile = 'file'+(this.fileCount-1);
                 Event.stopObserving(lastFile, 'change', '');
            }
            this.fileCount++;
            var elemDiv = document.createElement('div');
            elemDiv.appendChild(inputDiv);
            $(elemId).appendChild(elemDiv);

            fileUploadModal.resizeToContent();
            fileUploadModal._findFocusableElements();
        }
    },

    addFileElement: function(elem) {
        var elemId = $A(arguments)[1];
        var singleFile = $A(arguments)[2];
        this.addFileUpload(elemId, singleFile);
    },

    startCallback: function (uploader) {
        uploader.fileUploadStatus = 'inProgress';
        document.getElementById(uploader.progressBarId).style.visibility = 'visible';
        window.setTimeout(function() {uploader.refreshProgress(uploader);}, 1000);
        return true;
    },

    completeCallback: function(response) {
        this.fileUploadStatus = 'done';
        if (response.indexOf('STATUS_200') != -1) {
             fileUploadModal.hide();
             this.callbackFunc(response); 
        }
        else {
            $(this.divId).update(response);
            fileUploadModal.resizeToContent();
            fileUploadModal._findFocusableElements();
        }
        return true;
    },

     removeMedia: function (previewDivId, nsId, id) {
        new Ajax.Updater(previewDivId,  Powered.contextPath+'/files/fragments/removeFile.jsp',
        {   asynchronous:true,
            parameters:"mode=removable&namespaceId="+nsId +"&mediaId="+id
        });
    }
});
