var jumploader_callbacks=new Array();
var jumploader_datas=new Array();

(function($) {
 
   $.fn.jumploader = function(url,callback,options) {
     var settings = {
        config: {
            ac_fireUploaderFileStatusChanged: 'true',
            ac_fireAppletInitialized: 'true',
            ac_mode: 'framed',
            uc_fileParameterName: 'userfile',
            uc_maxFiles: 1,
            vc_lookAndFeel: 'system'
        },
        archive: 'JumpLoader/jumploader_z.jar',
        code: 'jmaster.jumploader.app.JumpLoaderApplet.class',
        width: "140",
        height: "44"
     };
 
     if (options) $.extend(true,settings, options);
 
     this.each(function() {
        //store callback
        jumploader_callbacks[this.id]=callback;
        jumploader_datas[this.id]=options.data;

        // create applet
        var html_applet = '';

        if (settings.customButton){
            $(settings.customButton).bind('click', {container_id: this.id},function(e){
                document[e.data.container_id].showFrame(true);
            });
        }

        html_applet += '<applet name="'+this.id+'" code="'+ settings.code +'" archive="'+settings.archive+'" width='+settings.width+' height='+settings.height+' mayscript>';
        // this parameter is mandatory
        html_applet += '<param name="uc_uploadUrl" value="'+url+'"/>';
        html_applet += '<param name="ac_properties" value="'+this.id+'"/>'; 
        for(x in settings.config) {
            html_applet += '<param name="' + x + '" value="' + settings.config[x] + '"/>';
        }

        html_applet += '</applet></div>';

        $(this).html(html_applet);

        // set additional data for POST
        var uploader = document[this.id].getUploader();
        var attrSet = uploader.getAttributeSet();
     });
 




     return this;
 
   };

 })(jQuery);

function appletInitialized( applet ) {
    var props=applet.getAppletConfig().getProperties();
    var data=jumploader_datas[props];
    var attrSet = applet.getUploader().getAttributeSet();
    var attr;
    if (data) {
        for(y in data) {
            attr = attrSet.createStringAttribute( y, data[y]);
            attr.setSendToServer(true);
        }
    }
    attr = attrSet.createStringAttribute( 'skey', $Auth.getSessionKey());
    attr.setSendToServer(true);
    attr = attrSet.createStringAttribute( 'container_id', props);
    attr.setSendToServer(true);

} 

//file status changed notification

 function uploaderFileStatusChanged( uploader, file ) {
     if (file.isFinished()) {
        var r = $Client.decode(file.getResponseContent());
        if (r.status) {
            var attrSet = uploader.getAttributeSet();
            var attrContainerId=attrSet.getAttributeByName('container_id');
            var container_id=attrContainerId.getStringValue();
            document[container_id].showFrame(false);
            var upload_callback=jumploader_callbacks[container_id];
            upload_callback(r.data);
        } else {
            $U.errMsg($Lang.tr("An error occured"), r.message);
        }
     }
 }

