function SlickUpload_UploadManager(clientId, uploadId, formId, progressAreaId, progressLocation)
{
    // TODO: null circular reference in dispose
    this.id = clientId;
    this.iframe = document.getElementById(clientId);
    this.iframe.uploadManager = this;
    this.form = document.getElementById(formId);
    
    this.submittedElement = null;
        
    this.HookSubmitButtons();
    
    // TODO: hook up dispose
}

SlickUpload_UploadManager.prototype.HookSubmitButtons = function()
{
    var inputs = document.getElementsByTagName("input");
    
    for (var i = 0; i < inputs.length; i++)
    {
        var input = inputs[i];
        
        switch (input.type.toLowerCase())
        {
            case "submit":
            case "image":
                input.ElementSubmitted = SlickUpload_SubmitElementClicked;
                SlickUpload_AddHandler(input, "click", "ElementSubmitted", this);
                
                break;
        }
    }
    
    var buttons = document.getElementsByTagName("button");

    for (var i = 0; i < buttons.length; i++)
    {
        var button = buttons[i];
        
        button.ElementSubmitted = SlickUpload_SubmitElementClicked;
        SlickUpload_AddHandler(button, "click", "ElementSubmitted", this);
    }
}

SlickUpload_UploadManager.prototype.OnSubmit = function()
{
    if (this.iframe.contentWindow != null)
        this.iframeDoc = this.iframe.contentWindow.document;
    else
        this.iframeDoc = window.frames[clientId].document;
    
    this.iframeDoc.getElementsByTagName("form")[0].submit();
    
    if (!SlickUpload_IsSafari())
    {
        this.iframe.style.display = "none";
    }
    else
    {
        this.iframe.style.width = "1px";
        this.iframe.style.height = "1px";
        //this.iframe.style.position = "absolute";
    }
}

SlickUpload_UploadManager.prototype.SubmitParent = function()
{
    Krystalware.SlickUpload.IsUploadInProcess = false;
    
    //alert(document.getElementsByTagName("form")[0].__EVENTTARGET.value);

    this.form.onsubmit = null;
        
    if (this.submittedElement == null)    
        this.form.submit();
    else
        this.submittedElement.click();
}

function SlickUpload_SubmitElementClicked(e, uploadManager)
{
    uploadManager.submittedElement = this;
}

function SlickUpload_UploadManagerSetup(formId)
{    
    form = document.getElementById(formId);
    
    // Envelop the onsubmit function
    if (form.onsubmit != null && SlickUpload_OriginalOnSubmit == null)// && (form.onsubmit.length > 0 || typeof form.onsubmit == "function"))
        SlickUpload_OriginalOnSubmit = form.onsubmit;
    
    form.onsubmit = SlickUpload_Submit;
}