// AjaxUpload
function frameAjaxUploadSubmit(idx, reloadComponentClass, params)
{
    iframes = document.getElementsByTagName('iframe');
    if(iframes.length > 0)
    {
        for(i=0; i < iframes.length; i++)
        {
            if(iframes[i].name == ('FileFrameUpload'+idx))
            {
                form = iframes[i].contentWindow.document.getElementById('iform'+idx);
                $('#fsUploadProgress'+idx).progressbar({value: 59});
                updateProgressBar(iframes[i], idx, reloadComponentClass, params);
                form.submit();
            }
        }
    }
}

function updateProgressBar(iframe, idx, reloadComponentClass, params)
{
    form = iframe.contentWindow.document.getElementById('iform'+idx);
    if (!form)
    {
        setTimeout(function(){updateProgressBar(iframe, idx, reloadComponentClass, params)}, 750);
    }
    else
    {
        if (form.attributes["title"].value != 'auff'+idx+'1')
        {
            setTimeout(function(){updateProgressBar(iframe, idx, reloadComponentClass, params)}, 750);
        }
        else
        {
            form.attributes["title"].value = 'auff'+idx+'0';
            $('#fsUploadProgress'+idx).progressbar('destroy');
            if (reloadComponentClass!='')
            {
                reloadComponent(reloadComponentClass, params);
            }
        }
    }
}

function reloadComponent(componentClass, params)
{
    $(componentClass).each(function(index) {
    	relComp = 'document.Beans.'+$(this).attr('id')+'.update("'+params+'", true, 0)';
        try {
            eval(relComp);
        } catch(e) {}
    });
}

document.Beans = new Object();
Bean = new Object(); 

Bean.addCreateFunction = function(f)
{
    var oldonload = window.onload;
    if(typeof window.onload != 'function') 
    {
        window.onload = f;
    } 
    else 
    {
        window.onload = function() 
        {
            if (oldonload) 
            {
                oldonload();
            }
            try {
                f();
            } catch(e) {}
        }
    }
}

Bean.Bean = function(id)
{
    this.domElement = document.getElementById(id);
    this.id = id;
    
    var deactivated = false;
    
    this.hide = function(){jQuery("#" + this.id).hide();};
    this.show = function(){jQuery("#" + this.id).show();};
    this.flap = function(){jQuery("#" + this.id).toggle();};
    
    this.activate = function()
    {
        var element = this.getDeactivationDiv();
        element.style.display = 'none';
        this.domElement.deactivated = false;
    };
    
    this.deactivate = function()
    {
        var element = this.getDeactivationDiv();
        var style = window.getComputedStyle ? document.defaultView.getComputedStyle(this.domElement, null).getPropertyValue("position") :
                    this.domElement.currentStyle.position;
        
        if ((style != 'relative') && (style != 'absolute'))
        {
            this.domElement.style.position = 'relative';
        }

        element.style.display = 'block';
        element.style.position = 'absolute';
        element.style.top = '0px';
        element.style.left = '0px';

        element.style.height = this.domElement.clientHeight + 'px';
        element.style.width  = this.domElement.clientWidth + 'px';

        this.domElement.deactivated = true;
    };
    
    this.getDeactivationDiv = function()
    {
        var id = this.id + 'Deactivation';
        var result = document.getElementById(id);
        if (!result)
        {
            result = document.createElement('div');
            result.id = id;
            result.className = 'deactivation';

            this.domElement.appendChild(result);
        }
        return result;   
    };
    
    this.toggleActivation = function()
    {
        if (this.domElement.deactivated)
        {
            this.activate();
        }
        else
        {
            this.deactivate();
        }
    };
};

Bean.AjaxLoadedBean = function(id, updateUrl, parameterList)
{
    var domElement = document.getElementById(id);
    var id = id;
    var containerId = id;
    var contentId = id + "Content";
    var contentDomElement = document.getElementById(containerId);
    var url = updateUrl;
    var showIndicator = true;
    var loadingContent = "Loading ...";
    var completeContent = "Complete!";

      
    this.setOnComplete = function(f)
    {
        onCompleteCallback = f;
    };

    this.setShowIndicator = function(value)
    {
        showIndicator = value;
    };

    this.setLoadingContent = function(content)
    {
        loadingContent = content;
    };

    this.setCompleteContent = function(content)
    {
        completeContent = content;
    };

    this.buildParameterSet = function(parameterList)
    {
        var result = {};
        if(parameterList)
        {
            if ((parameterList.substr(0,1) == '?') || (parameterList.substr(0,1) == '/'))
            {
                parameterList = parameterList.substr(1);
            }

            var parameterSet = parameterList.split('&');
            for (var i = 0; i < parameterSet.length; i++)
            {
                if (parameterSet[i].indexOf('=') != -1)
                {
                    var parameterSet2 = parameterSet[i].split('=');
                    // empty bracket check ... should be reconsidered
                    parameterSet2[0] = parameterSet2[0].replace(/\[\]$/, '[' + String(i) + ']'); 
                    result[parameterSet2[0]] = parameterSet2[1];
                }
                else
                {
                    var parameterSet2 = parameterSet[i].split('/');
                    var isKey = true;
                    var key = "";
                    for (var j = 0; j < parameterSet2.length; j++)
                    {
                        if (isKey)
                        {
                            key = parameterSet2[j];
                        }
                        else
                        {
                            result[key] = parameterSet2[j];
                        }
                        isKey = !isKey;
                    }
                }
            }
        }
        
        return result;
    };

    this.savedParameterSet = this.buildParameterSet(parameterList);

    this.buildParameterList = function(parameterSet)
    {
        result = "";
        for (key in parameterSet)
        {
            if (parameterSet[key] != '')
            {
                result += key + '/' + parameterSet[key] + '/';
            }
        }
        
        return result;
    };
 
    this.update = function(parameter, mergeParameter, post, smartRouting)
    {
        var currentParameterSet = (typeof parameter == 'object') ? parameter : this.buildParameterSet(parameter);

        if(mergeParameter)
        {
            var mergedParameterSet = this.savedParameterSet;
            for(key in currentParameterSet)
            {
                mergedParameterSet[key] = currentParameterSet[key];
            }
            currentParameterSet = mergedParameterSet;
        }

        this.savedParameterSet = currentParameterSet;

        post = post ? true : false;
        if (typeof(smartRouting=="undefined"))      
           smartRouting  = true;              
        else      
           smartRouting  = smartRouting ? true : false;

        if (showIndicator)
        {
            jQuery("#" + containerId + "Indicator").html(loadingContent);
        }

        if(smartRouting)         
        {        
           parameter = this.buildParameterList(currentParameterSet);        
           var completeUrl = url + '/parentId/'+ containerId + '/isAjaxLoaded/true/' + (parameter && !post ? parameter : '');           
        }        
        else         
        {        
           var completeUrl = url + '/parentId/'+ containerId + '/isAjaxLoaded/true?' + parameter;           
        } 
        if (completeUrl.indexOf('MediaFileWizard') > -1)
            completeUrl = completeUrl.replace(/\"/g,"___");
        jQuery.ajax({
            async: true,
            url: completeUrl,
            data: (post ? currentParameterSet : ''),
            success: function(data, textStatus){
                        jQuery("#" + containerId).html(data);
                     },
            complete:   onComplete,
            type: (post ? 'POST' : 'GET')
        });
    };

    
    function onComplete(request, json)
    {
        if(showIndicator)
        {
            jQuery("#" + containerId + "Indicator").html(completeContent);
        }
        onCompleteCallback(request, json);
    };

    function onCompleteCallback(request, json)
    {
    };
    
    this.clear = function()
    {
        contentDomElement.innerHTML = '';
    };
};
Bean.AjaxLoadedBean.prototype = new Bean.Bean();
