IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

barre de défilement pour un téléchargement


Sujet :

JavaScript

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut barre de défilement pour un téléchargement
    Bonjour,

    je voudrais faire moi-même en js une barre de défilement pour un upload, car quand j'utilse le plug-in de jquery (ce que j'ai fait), la barre marche mais je ne reprends pas la main, et ne peux pas, par exemple, mettre un message comme quoi ça s'est bien passé ; d'où mon souhait de le développer moi-même (si j'y arrive, car je trouve le code du plug-in hyper compliqué). Mais pour ce faire, je voudrais savoir comment récupérer les infos d'état du téléchargement.

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    récupérer les infos d'état du téléchargement.
    Ben justement en javascript c'est hyper compliqué a faire

    Quand tu dis téléchargemet tu parlas upload ?

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Ben justement en javascript c'est hyper compliqué a faire
    Donc, je laisse tomber (c'est vrai que le plug-in de jquery n'est pas piqué des vers). Et je parlais bien d'upload (en PHP : move_uploaded_file).

    Mais dans ce cas-là, y aurait-il quand moyen de rajouter un texte à la fin du téléchargement avec le plug-in jquery ? (C'est prévu dans le code, mais n'a pas lieu ; leur code (PHP) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <?php
    $uploaddir = '../upload1/image/'; // ça, c'est de moi, pour que ça aille au bon endroit
    $file = $uploaddir . basename($_FILES['uploadfile']['name']); 
    $size=$_FILES['uploadfile']['size'];
    if($size>32000000) // j'ai aussi modifié la taille car la limite chez OVH est de 32 mO
    {
            echo "erreur taille du fichier > 32 mO";
            unlink($_FILES['uploadfile']['tmp_name']);
            exit;
    }
    if (move_uploaded_file($_FILES['uploadfile']['tmp_name'], $file)) { 
      echo "Nous avons bien re&ccedil;u votre fichier !"; 
    } else {
            echo "erreur ".$_FILES['uploadfile']['error']." --- ".$_FILES['uploadfile']['tmp_name']." %%% ".$file."($size)";
    }
    ?>

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    c'est plutot au niveau de javascript, pas de php ...
    dans le callback de ton addon

  5. #5
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Merci de me répondre, mais ça dépasse mes connaissances : est-ce que ça a trait avec ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $(function(){
    $('#swfupload-control').swfupload({
    upload_url: "upload-file.php",
    qui se trouvent dans le fichier html ?

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    plutot dans l'addon lui même, là ou il atteind 100%

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Désolé, mais je ne trouve pas, et l'add on est hyper compliqué : il fait quasiment 1000 lignes ! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
    344
    345
    346
    347
    348
    349
    350
    351
    352
    353
    354
    355
    356
    357
    358
    359
    360
    361
    362
    363
    364
    365
    366
    367
    368
    369
    370
    371
    372
    373
    374
    375
    376
    377
    378
    379
    380
    381
    382
    383
    384
    385
    386
    387
    388
    389
    390
    391
    392
    393
    394
    395
    396
    397
    398
    399
    400
    401
    402
    403
    404
    405
    406
    407
    408
    409
    410
    411
    412
    413
    414
    415
    416
    417
    418
    419
    420
    421
    422
    423
    424
    425
    426
    427
    428
    429
    430
    431
    432
    433
    434
    435
    436
    437
    438
    439
    440
    441
    442
    443
    444
    445
    446
    447
    448
    449
    450
    451
    452
    453
    454
    455
    456
    457
    458
    459
    460
    461
    462
    463
    464
    465
    466
    467
    468
    469
    470
    471
    472
    473
    474
    475
    476
    477
    478
    479
    480
    481
    482
    483
    484
    485
    486
    487
    488
    489
    490
    491
    492
    493
    494
    495
    496
    497
    498
    499
    500
    501
    502
    503
    504
    505
    506
    507
    508
    509
    510
    511
    512
    513
    514
    515
    516
    517
    518
    519
    520
    521
    522
    523
    524
    525
    526
    527
    528
    529
    530
    531
    532
    533
    534
    535
    536
    537
    538
    539
    540
    541
    542
    543
    544
    545
    546
    547
    548
    549
    550
    551
    552
    553
    554
    555
    556
    557
    558
    559
    560
    561
    562
    563
    564
    565
    566
    567
    568
    569
    570
    571
    572
    573
    574
    575
    576
    577
    578
    579
    580
    581
    582
    583
    584
    585
    586
    587
    588
    589
    590
    591
    592
    593
    594
    595
    596
    597
    598
    599
    600
    601
    602
    603
    604
    605
    606
    607
    608
    609
    610
    611
    612
    613
    614
    615
    616
    617
    618
    619
    620
    621
    622
    623
    624
    625
    626
    627
    628
    629
    630
    631
    632
    633
    634
    635
    636
    637
    638
    639
    640
    641
    642
    643
    644
    645
    646
    647
    648
    649
    650
    651
    652
    653
    654
    655
    656
    657
    658
    659
    660
    661
    662
    663
    664
    665
    666
    667
    668
    669
    670
    671
    672
    673
    674
    675
    676
    677
    678
    679
    680
    681
    682
    683
    684
    685
    686
    687
    688
    689
    690
    691
    692
    693
    694
    695
    696
    697
    698
    699
    700
    701
    702
    703
    704
    705
    706
    707
    708
    709
    710
    711
    712
    713
    714
    715
    716
    717
    718
    719
    720
    721
    722
    723
    724
    725
    726
    727
    728
    729
    730
    731
    732
    733
    734
    735
    736
    737
    738
    739
    740
    741
    742
    743
    744
    745
    746
    747
    748
    749
    750
    751
    752
    753
    754
    755
    756
    757
    758
    759
    760
    761
    762
    763
    764
    765
    766
    767
    768
    769
    770
    771
    772
    773
    774
    775
    776
    777
    778
    779
    780
    781
    782
    783
    784
    785
    786
    787
    788
    789
    790
    791
    792
    793
    794
    795
    796
    797
    798
    799
    800
    801
    802
    803
    804
    805
    806
    807
    808
    809
    810
    811
    812
    813
    814
    815
    816
    817
    818
    819
    820
    821
    822
    823
    824
    825
    826
    827
    828
    829
    830
    831
    832
    833
    834
    835
    836
    837
    838
    839
    840
    841
    842
    843
    844
    845
    846
    847
    848
    849
    850
    851
    852
    853
    854
    855
    856
    857
    858
    859
    860
    861
    862
    863
    864
    865
    866
    867
    868
    869
    870
    871
    872
    873
    874
    875
    876
    877
    878
    879
    880
    881
    882
    883
    884
    885
    886
    887
    888
    889
    890
    891
    892
    893
    894
    895
    896
    897
    898
    899
    900
    901
    902
    903
    904
    905
    906
    907
    908
    909
    910
    911
    912
    913
    914
    915
    916
    917
    918
    919
    920
    921
    922
    923
    924
    925
    926
    927
    928
    929
    930
    931
    932
    933
    934
    935
    936
    937
    938
    939
    940
    941
    942
    943
    944
    945
    946
    947
    948
    949
    950
    951
    952
    953
    954
    955
    956
    957
    958
    959
    960
    961
    962
    963
    964
    965
    966
    967
    968
    969
    970
    971
    972
    973
    974
    975
    976
    977
    978
    979
    980
    /**
     * SWFUpload: http://www.swfupload.org, http://swfupload.googlecode.com
     *
     * mmSWFUpload 1.0: Flash upload dialog - http://profandesign.se/swfupload/,  http://www.vinterwebb.se/
     *
     * SWFUpload is (c) 2006-2007 Lars Huring, Olov Nilzén and Mammon Media and is released under the MIT License:
     * http://www.opensource.org/licenses/mit-license.php
     *
     * SWFUpload 2 is (c) 2007-2008 Jake Roberts and is released under the MIT License:
     * http://www.opensource.org/licenses/mit-license.php
     *
     */
     
     
    /* ******************* */
    /* Constructor & Init  */
    /* ******************* */
    var SWFUpload;
     
    if (SWFUpload == undefined) {
    	SWFUpload = function (settings) {
    		this.initSWFUpload(settings);
    	};
    }
     
    SWFUpload.prototype.initSWFUpload = function (settings) {
    	try {
    		this.customSettings = {};	// A container where developers can place their own settings associated with this instance.
    		this.settings = settings;
    		this.eventQueue = [];
    		this.movieName = "SWFUpload_" + SWFUpload.movieCount++;
    		this.movieElement = null;
     
     
    		// Setup global control tracking
    		SWFUpload.instances[this.movieName] = this;
     
    		// Load the settings.  Load the Flash movie.
    		this.initSettings();
    		this.loadFlash();
    		this.displayDebugInfo();
    	} catch (ex) {
    		delete SWFUpload.instances[this.movieName];
    		throw ex;
    	}
    };
     
    /* *************** */
    /* Static Members  */
    /* *************** */
    SWFUpload.instances = {};
    SWFUpload.movieCount = 0;
    SWFUpload.version = "2.2.0 2009-03-25";
    SWFUpload.QUEUE_ERROR = {
    	QUEUE_LIMIT_EXCEEDED	  		: -100,
    	FILE_EXCEEDS_SIZE_LIMIT  		: -110,
    	ZERO_BYTE_FILE			  		: -120,
    	INVALID_FILETYPE		  		: -130
    };
    SWFUpload.UPLOAD_ERROR = {
    	HTTP_ERROR				  		: -200,
    	MISSING_UPLOAD_URL	      		: -210,
    	IO_ERROR				  		: -220,
    	SECURITY_ERROR			  		: -230,
    	UPLOAD_LIMIT_EXCEEDED	  		: -240,
    	UPLOAD_FAILED			  		: -250,
    	SPECIFIED_FILE_ID_NOT_FOUND		: -260,
    	FILE_VALIDATION_FAILED	  		: -270,
    	FILE_CANCELLED			  		: -280,
    	UPLOAD_STOPPED					: -290
    };
    SWFUpload.FILE_STATUS = {
    	QUEUED		 : -1,
    	IN_PROGRESS	 : -2,
    	ERROR		 : -3,
    	COMPLETE	 : -4,
    	CANCELLED	 : -5
    };
    SWFUpload.BUTTON_ACTION = {
    	SELECT_FILE  : -100,
    	SELECT_FILES : -110,
    	START_UPLOAD : -120
    };
    SWFUpload.CURSOR = {
    	ARROW : -1,
    	HAND : -2
    };
    SWFUpload.WINDOW_MODE = {
    	WINDOW : "window",
    	TRANSPARENT : "transparent",
    	OPAQUE : "opaque"
    };
     
    // Private: takes a URL, determines if it is relative and converts to an absolute URL
    // using the current site. Only processes the URL if it can, otherwise returns the URL untouched
    SWFUpload.completeURL = function(url) {
    	if (typeof(url) !== "string" || url.match(/^https?:\/\//i) || url.match(/^\//)) {
    		return url;
    	}
     
    	var currentURL = window.location.protocol + "//" + window.location.hostname + (window.location.port ? ":" + window.location.port : "");
     
    	var indexSlash = window.location.pathname.lastIndexOf("/");
    	if (indexSlash <= 0) {
    		path = "/";
    	} else {
    		path = window.location.pathname.substr(0, indexSlash) + "/";
    	}
     
    	return /*currentURL +*/ path + url;
     
    };
     
     
    /* ******************** */
    /* Instance Members  */
    /* ******************** */
     
    // Private: initSettings ensures that all the
    // settings are set, getting a default value if one was not assigned.
    SWFUpload.prototype.initSettings = function () {
    	this.ensureDefault = function (settingName, defaultValue) {
    		this.settings[settingName] = (this.settings[settingName] == undefined) ? defaultValue : this.settings[settingName];
    	};
     
    	// Upload backend settings
    	this.ensureDefault("upload_url", "");
    	this.ensureDefault("preserve_relative_urls", false);
    	this.ensureDefault("file_post_name", "Filedata");
    	this.ensureDefault("post_params", {});
    	this.ensureDefault("use_query_string", false);
    	this.ensureDefault("requeue_on_error", false);
    	this.ensureDefault("http_success", []);
    	this.ensureDefault("assume_success_timeout", 0);
     
    	// File Settings
    	this.ensureDefault("file_types", "*.*");
    	this.ensureDefault("file_types_description", "All Files");
    	this.ensureDefault("file_size_limit", 0);	// Default zero means "unlimited"
    	this.ensureDefault("file_upload_limit", 0);
    	this.ensureDefault("file_queue_limit", 0);
     
    	// Flash Settings
    	this.ensureDefault("flash_url", "swfupload.swf");
    	this.ensureDefault("prevent_swf_caching", true);
     
    	// Button Settings
    	this.ensureDefault("button_image_url", "");
    	this.ensureDefault("button_width", 1);
    	this.ensureDefault("button_height", 1);
    	this.ensureDefault("button_text", "");
    	this.ensureDefault("button_text_style", "color: #000000; font-size: 16pt;");
    	this.ensureDefault("button_text_top_padding", 0);
    	this.ensureDefault("button_text_left_padding", 0);
    	this.ensureDefault("button_action", SWFUpload.BUTTON_ACTION.SELECT_FILES);
    	this.ensureDefault("button_disabled", false);
    	this.ensureDefault("button_placeholder_id", "");
    	this.ensureDefault("button_placeholder", null);
    	this.ensureDefault("button_cursor", SWFUpload.CURSOR.ARROW);
    	this.ensureDefault("button_window_mode", SWFUpload.WINDOW_MODE.WINDOW);
     
    	// Debug Settings
    	this.ensureDefault("debug", false);
    	this.settings.debug_enabled = this.settings.debug;	// Here to maintain v2 API
     
    	// Event Handlers
    	this.settings.return_upload_start_handler = this.returnUploadStart;
    	this.ensureDefault("swfupload_loaded_handler", null);
    	this.ensureDefault("file_dialog_start_handler", null);
    	this.ensureDefault("file_queued_handler", null);
    	this.ensureDefault("file_queue_error_handler", null);
    	this.ensureDefault("file_dialog_complete_handler", null);
     
    	this.ensureDefault("upload_start_handler", null);
    	this.ensureDefault("upload_progress_handler", null);
    	this.ensureDefault("upload_error_handler", null);
    	this.ensureDefault("upload_success_handler", null);
    	this.ensureDefault("upload_complete_handler", null);
     
    	this.ensureDefault("debug_handler", this.debugMessage);
     
    	this.ensureDefault("custom_settings", {});
     
    	// Other settings
    	this.customSettings = this.settings.custom_settings;
     
    	// Update the flash url if needed
    	if (!!this.settings.prevent_swf_caching) {
    		this.settings.flash_url = this.settings.flash_url + (this.settings.flash_url.indexOf("?") < 0 ? "?" : "&") + "preventswfcaching=" + new Date().getTime();
    	}
     
    	if (!this.settings.preserve_relative_urls) {
    		//this.settings.flash_url = SWFUpload.completeURL(this.settings.flash_url);	// Don't need to do this one since flash doesn't look at it
    		this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);
    		this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url);
    	}
     
    	delete this.ensureDefault;
    };
     
    // Private: loadFlash replaces the button_placeholder element with the flash movie.
    SWFUpload.prototype.loadFlash = function () {
    	var targetElement, tempParent;
     
    	// Make sure an element with the ID we are going to use doesn't already exist
    	if (document.getElementById(this.movieName) !== null) {
    		throw "ID " + this.movieName + " is already in use. The Flash Object could not be added";
    	}
     
    	// Get the element where we will be placing the flash movie
    	targetElement = document.getElementById(this.settings.button_placeholder_id) || this.settings.button_placeholder;
     
    	if (targetElement == undefined) {
    		throw "Could not find the placeholder element: " + this.settings.button_placeholder_id;
    	}
     
    	// Append the container and load the flash
    	tempParent = document.createElement("div");
    	tempParent.innerHTML = this.getFlashHTML();	// Using innerHTML is non-standard but the only sensible way to dynamically add Flash in IE (and maybe other browsers)
    	targetElement.parentNode.replaceChild(tempParent.firstChild, targetElement);
     
    	// Fix IE Flash/Form bug
    	if (window[this.movieName] == undefined) {
    		window[this.movieName] = this.getMovieElement();
    	}
     
    };
     
    // Private: getFlashHTML generates the object tag needed to embed the flash in to the document
    SWFUpload.prototype.getFlashHTML = function () {
    	// Flash Satay object syntax: http://www.alistapart.com/articles/flashsatay
    	return ['<object id="', this.movieName, '" type="application/x-shockwave-flash" data="', this.settings.flash_url, '" width="', this.settings.button_width, '" height="', this.settings.button_height, '" class="swfupload">',
    				'<param name="wmode" value="', this.settings.button_window_mode, '" />',
    				'<param name="movie" value="', this.settings.flash_url, '" />',
    				'<param name="quality" value="high" />',
    				'<param name="menu" value="false" />',
    				'<param name="allowScriptAccess" value="always" />',
    				'<param name="flashvars" value="' + this.getFlashVars() + '" />',
    				'</object>'].join("");
    };
     
    // Private: getFlashVars builds the parameter string that will be passed
    // to flash in the flashvars param.
    SWFUpload.prototype.getFlashVars = function () {
    	// Build a string from the post param object
    	var paramString = this.buildParamString();
    	var httpSuccessString = this.settings.http_success.join(",");
     
    	// Build the parameter string
    	return ["movieName=", encodeURIComponent(this.movieName),
    			"&amp;uploadURL=", encodeURIComponent(this.settings.upload_url),
    			"&amp;useQueryString=", encodeURIComponent(this.settings.use_query_string),
    			"&amp;requeueOnError=", encodeURIComponent(this.settings.requeue_on_error),
    			"&amp;httpSuccess=", encodeURIComponent(httpSuccessString),
    			"&amp;assumeSuccessTimeout=", encodeURIComponent(this.settings.assume_success_timeout),
    			"&amp;params=", encodeURIComponent(paramString),
    			"&amp;filePostName=", encodeURIComponent(this.settings.file_post_name),
    			"&amp;fileTypes=", encodeURIComponent(this.settings.file_types),
    			"&amp;fileTypesDescription=", encodeURIComponent(this.settings.file_types_description),
    			"&amp;fileSizeLimit=", encodeURIComponent(this.settings.file_size_limit),
    			"&amp;fileUploadLimit=", encodeURIComponent(this.settings.file_upload_limit),
    			"&amp;fileQueueLimit=", encodeURIComponent(this.settings.file_queue_limit),
    			"&amp;debugEnabled=", encodeURIComponent(this.settings.debug_enabled),
    			"&amp;buttonImageURL=", encodeURIComponent(this.settings.button_image_url),
    			"&amp;buttonWidth=", encodeURIComponent(this.settings.button_width),
    			"&amp;buttonHeight=", encodeURIComponent(this.settings.button_height),
    			"&amp;buttonText=", encodeURIComponent(this.settings.button_text),
    			"&amp;buttonTextTopPadding=", encodeURIComponent(this.settings.button_text_top_padding),
    			"&amp;buttonTextLeftPadding=", encodeURIComponent(this.settings.button_text_left_padding),
    			"&amp;buttonTextStyle=", encodeURIComponent(this.settings.button_text_style),
    			"&amp;buttonAction=", encodeURIComponent(this.settings.button_action),
    			"&amp;buttonDisabled=", encodeURIComponent(this.settings.button_disabled),
    			"&amp;buttonCursor=", encodeURIComponent(this.settings.button_cursor)
    		].join("");
    };
     
    // Public: getMovieElement retrieves the DOM reference to the Flash element added by SWFUpload
    // The element is cached after the first lookup
    SWFUpload.prototype.getMovieElement = function () {
    	if (this.movieElement == undefined) {
    		this.movieElement = document.getElementById(this.movieName);
    	}
     
    	if (this.movieElement === null) {
    		throw "Could not find Flash element";
    	}
     
    	return this.movieElement;
    };
     
    // Private: buildParamString takes the name/value pairs in the post_params setting object
    // and joins them up in to a string formatted "name=value&amp;name=value"
    SWFUpload.prototype.buildParamString = function () {
    	var postParams = this.settings.post_params; 
    	var paramStringPairs = [];
     
    	if (typeof(postParams) === "object") {
    		for (var name in postParams) {
    			if (postParams.hasOwnProperty(name)) {
    				paramStringPairs.push(encodeURIComponent(name.toString()) + "=" + encodeURIComponent(postParams[name].toString()));
    			}
    		}
    	}
     
    	return paramStringPairs.join("&amp;");
    };
     
    // Public: Used to remove a SWFUpload instance from the page. This method strives to remove
    // all references to the SWF, and other objects so memory is properly freed.
    // Returns true if everything was destroyed. Returns a false if a failure occurs leaving SWFUpload in an inconsistant state.
    // Credits: Major improvements provided by steffen
    SWFUpload.prototype.destroy = function () {
    	try {
    		// Make sure Flash is done before we try to remove it
    		this.cancelUpload(null, false);
     
     
    		// Remove the SWFUpload DOM nodes
    		var movieElement = null;
    		movieElement = this.getMovieElement();
     
    		if (movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE
    			// Loop through all the movie's properties and remove all function references (DOM/JS IE 6/7 memory leak workaround)
    			for (var i in movieElement) {
    				try {
    					if (typeof(movieElement[i]) === "function") {
    						movieElement[i] = null;
    					}
    				} catch (ex1) {}
    			}
     
    			// Remove the Movie Element from the page
    			try {
    				movieElement.parentNode.removeChild(movieElement);
    			} catch (ex) {}
    		}
     
    		// Remove IE form fix reference
    		window[this.movieName] = null;
     
    		// Destroy other references
    		SWFUpload.instances[this.movieName] = null;
    		delete SWFUpload.instances[this.movieName];
     
    		this.movieElement = null;
    		this.settings = null;
    		this.customSettings = null;
    		this.eventQueue = null;
    		this.movieName = null;
     
     
    		return true;
    	} catch (ex2) {
    		return false;
    	}
    };
     
     
    // Public: displayDebugInfo prints out settings and configuration
    // information about this SWFUpload instance.
    // This function (and any references to it) can be deleted when placing
    // SWFUpload in production.
    SWFUpload.prototype.displayDebugInfo = function () {
    	this.debug(
    		[
    			"---SWFUpload Instance Info---\n",
    			"Version: ", SWFUpload.version, "\n",
    			"Movie Name: ", this.movieName, "\n",
    			"Settings:\n",
    			"\t", "upload_url:               ", this.settings.upload_url, "\n",
    			"\t", "flash_url:                ", this.settings.flash_url, "\n",
    			"\t", "use_query_string:         ", this.settings.use_query_string.toString(), "\n",
    			"\t", "requeue_on_error:         ", this.settings.requeue_on_error.toString(), "\n",
    			"\t", "http_success:             ", this.settings.http_success.join(", "), "\n",
    			"\t", "assume_success_timeout:   ", this.settings.assume_success_timeout, "\n",
    			"\t", "file_post_name:           ", this.settings.file_post_name, "\n",
    			"\t", "post_params:              ", this.settings.post_params.toString(), "\n",
    			"\t", "file_types:               ", this.settings.file_types, "\n",
    			"\t", "file_types_description:   ", this.settings.file_types_description, "\n",
    			"\t", "file_size_limit:          ", this.settings.file_size_limit, "\n",
    			"\t", "file_upload_limit:        ", this.settings.file_upload_limit, "\n",
    			"\t", "file_queue_limit:         ", this.settings.file_queue_limit, "\n",
    			"\t", "debug:                    ", this.settings.debug.toString(), "\n",
     
    			"\t", "prevent_swf_caching:      ", this.settings.prevent_swf_caching.toString(), "\n",
     
    			"\t", "button_placeholder_id:    ", this.settings.button_placeholder_id.toString(), "\n",
    			"\t", "button_placeholder:       ", (this.settings.button_placeholder ? "Set" : "Not Set"), "\n",
    			"\t", "button_image_url:         ", this.settings.button_image_url.toString(), "\n",
    			"\t", "button_width:             ", this.settings.button_width.toString(), "\n",
    			"\t", "button_height:            ", this.settings.button_height.toString(), "\n",
    			"\t", "button_text:              ", this.settings.button_text.toString(), "\n",
    			"\t", "button_text_style:        ", this.settings.button_text_style.toString(), "\n",
    			"\t", "button_text_top_padding:  ", this.settings.button_text_top_padding.toString(), "\n",
    			"\t", "button_text_left_padding: ", this.settings.button_text_left_padding.toString(), "\n",
    			"\t", "button_action:            ", this.settings.button_action.toString(), "\n",
    			"\t", "button_disabled:          ", this.settings.button_disabled.toString(), "\n",
     
    			"\t", "custom_settings:          ", this.settings.custom_settings.toString(), "\n",
    			"Event Handlers:\n",
    			"\t", "swfupload_loaded_handler assigned:  ", (typeof this.settings.swfupload_loaded_handler === "function").toString(), "\n",
    			"\t", "file_dialog_start_handler assigned: ", (typeof this.settings.file_dialog_start_handler === "function").toString(), "\n",
    			"\t", "file_queued_handler assigned:       ", (typeof this.settings.file_queued_handler === "function").toString(), "\n",
    			"\t", "file_queue_error_handler assigned:  ", (typeof this.settings.file_queue_error_handler === "function").toString(), "\n",
    			"\t", "upload_start_handler assigned:      ", (typeof this.settings.upload_start_handler === "function").toString(), "\n",
    			"\t", "upload_progress_handler assigned:   ", (typeof this.settings.upload_progress_handler === "function").toString(), "\n",
    			"\t", "upload_error_handler assigned:      ", (typeof this.settings.upload_error_handler === "function").toString(), "\n",
    			"\t", "upload_success_handler assigned:    ", (typeof this.settings.upload_success_handler === "function").toString(), "\n",
    			"\t", "upload_complete_handler assigned:   ", (typeof this.settings.upload_complete_handler === "function").toString(), "\n",
    			"\t", "debug_handler assigned:             ", (typeof this.settings.debug_handler === "function").toString(), "\n"
    		].join("")
    	);
    };
     
    /* Note: addSetting and getSetting are no longer used by SWFUpload but are included
    	the maintain v2 API compatibility
    */
    // Public: (Deprecated) addSetting adds a setting value. If the value given is undefined or null then the default_value is used.
    SWFUpload.prototype.addSetting = function (name, value, default_value) {
        if (value == undefined) {
            return (this.settings[name] = default_value);
        } else {
            return (this.settings[name] = value);
    	}
    };
     
    // Public: (Deprecated) getSetting gets a setting. Returns an empty string if the setting was not found.
    SWFUpload.prototype.getSetting = function (name) {
        if (this.settings[name] != undefined) {
            return this.settings[name];
    	}
     
        return "";
    };
     
     
     
    // Private: callFlash handles function calls made to the Flash element.
    // Calls are made with a setTimeout for some functions to work around
    // bugs in the ExternalInterface library.
    SWFUpload.prototype.callFlash = function (functionName, argumentArray) {
    	argumentArray = argumentArray || [];
     
    	var movieElement = this.getMovieElement();
    	var returnValue, returnString;
     
    	// Flash's method if calling ExternalInterface methods (code adapted from MooTools).
    	try {
    		returnString = movieElement.CallFunction('<invoke name="' + functionName + '" returntype="javascript">' + __flash__argumentsToXML(argumentArray, 0) + '</invoke>');
    		returnValue = eval(returnString);
    	} catch (ex) {
    		throw "Call to " + functionName + " failed";
    	}
     
    	// Unescape file post param values
    	if (returnValue != undefined && typeof returnValue.post === "object") {
    		returnValue = this.unescapeFilePostParams(returnValue);
    	}
     
    	return returnValue;
    };
     
    /* *****************************
    	-- Flash control methods --
    	Your UI should use these
    	to operate SWFUpload
       ***************************** */
     
    // WARNING: this function does not work in Flash Player 10
    // Public: selectFile causes a File Selection Dialog window to appear.  This
    // dialog only allows 1 file to be selected.
    SWFUpload.prototype.selectFile = function () {
    	this.callFlash("SelectFile");
    };
     
    // WARNING: this function does not work in Flash Player 10
    // Public: selectFiles causes a File Selection Dialog window to appear/ This
    // dialog allows the user to select any number of files
    // Flash Bug Warning: Flash limits the number of selectable files based on the combined length of the file names.
    // If the selection name length is too long the dialog will fail in an unpredictable manner.  There is no work-around
    // for this bug.
    SWFUpload.prototype.selectFiles = function () {
    	this.callFlash("SelectFiles");
    };
     
     
    // Public: startUpload starts uploading the first file in the queue unless
    // the optional parameter 'fileID' specifies the ID 
    SWFUpload.prototype.startUpload = function (fileID) {
    	this.callFlash("StartUpload", [fileID]);
    };
     
    // Public: cancelUpload cancels any queued file.  The fileID parameter may be the file ID or index.
    // If you do not specify a fileID the current uploading file or first file in the queue is cancelled.
    // If you do not want the uploadError event to trigger you can specify false for the triggerErrorEvent parameter.
    SWFUpload.prototype.cancelUpload = function (fileID, triggerErrorEvent) {
    	if (triggerErrorEvent !== false) {
    		triggerErrorEvent = true;
    	}
    	this.callFlash("CancelUpload", [fileID, triggerErrorEvent]);
    };
     
    // Public: stopUpload stops the current upload and requeues the file at the beginning of the queue.
    // If nothing is currently uploading then nothing happens.
    SWFUpload.prototype.stopUpload = function () {
    	this.callFlash("StopUpload");
    };
     
    /* ************************
     * Settings methods
     *   These methods change the SWFUpload settings.
     *   SWFUpload settings should not be changed directly on the settings object
     *   since many of the settings need to be passed to Flash in order to take
     *   effect.
     * *********************** */
     
    // Public: getStats gets the file statistics object.
    SWFUpload.prototype.getStats = function () {
    	return this.callFlash("GetStats");
    };
     
    // Public: setStats changes the SWFUpload statistics.  You shouldn't need to 
    // change the statistics but you can.  Changing the statistics does not
    // affect SWFUpload accept for the successful_uploads count which is used
    // by the upload_limit setting to determine how many files the user may upload.
    SWFUpload.prototype.setStats = function (statsObject) {
    	this.callFlash("SetStats", [statsObject]);
    };
     
    // Public: getFile retrieves a File object by ID or Index.  If the file is
    // not found then 'null' is returned.
    SWFUpload.prototype.getFile = function (fileID) {
    	if (typeof(fileID) === "number") {
    		return this.callFlash("GetFileByIndex", [fileID]);
    	} else {
    		return this.callFlash("GetFile", [fileID]);
    	}
    };
     
    // Public: addFileParam sets a name/value pair that will be posted with the
    // file specified by the Files ID.  If the name already exists then the
    // exiting value will be overwritten.
    SWFUpload.prototype.addFileParam = function (fileID, name, value) {
    	return this.callFlash("AddFileParam", [fileID, name, value]);
    };
     
    // Public: removeFileParam removes a previously set (by addFileParam) name/value
    // pair from the specified file.
    SWFUpload.prototype.removeFileParam = function (fileID, name) {
    	this.callFlash("RemoveFileParam", [fileID, name]);
    };
     
    // Public: setUploadUrl changes the upload_url setting.
    SWFUpload.prototype.setUploadURL = function (url) {
    	this.settings.upload_url = url.toString();
    	this.callFlash("SetUploadURL", [url]);
    };
     
    // Public: setPostParams changes the post_params setting
    SWFUpload.prototype.setPostParams = function (paramsObject) {
    	this.settings.post_params = paramsObject;
    	this.callFlash("SetPostParams", [paramsObject]);
    };
     
    // Public: addPostParam adds post name/value pair.  Each name can have only one value.
    SWFUpload.prototype.addPostParam = function (name, value) {
    	this.settings.post_params[name] = value;
    	this.callFlash("SetPostParams", [this.settings.post_params]);
    };
     
    // Public: removePostParam deletes post name/value pair.
    SWFUpload.prototype.removePostParam = function (name) {
    	delete this.settings.post_params[name];
    	this.callFlash("SetPostParams", [this.settings.post_params]);
    };
     
    // Public: setFileTypes changes the file_types setting and the file_types_description setting
    SWFUpload.prototype.setFileTypes = function (types, description) {
    	this.settings.file_types = types;
    	this.settings.file_types_description = description;
    	this.callFlash("SetFileTypes", [types, description]);
    };
     
    // Public: setFileSizeLimit changes the file_size_limit setting
    SWFUpload.prototype.setFileSizeLimit = function (fileSizeLimit) {
    	this.settings.file_size_limit = fileSizeLimit;
    	this.callFlash("SetFileSizeLimit", [fileSizeLimit]);
    };
     
    // Public: setFileUploadLimit changes the file_upload_limit setting
    SWFUpload.prototype.setFileUploadLimit = function (fileUploadLimit) {
    	this.settings.file_upload_limit = fileUploadLimit;
    	this.callFlash("SetFileUploadLimit", [fileUploadLimit]);
    };
     
    // Public: setFileQueueLimit changes the file_queue_limit setting
    SWFUpload.prototype.setFileQueueLimit = function (fileQueueLimit) {
    	this.settings.file_queue_limit = fileQueueLimit;
    	this.callFlash("SetFileQueueLimit", [fileQueueLimit]);
    };
     
    // Public: setFilePostName changes the file_post_name setting
    SWFUpload.prototype.setFilePostName = function (filePostName) {
    	this.settings.file_post_name = filePostName;
    	this.callFlash("SetFilePostName", [filePostName]);
    };
     
    // Public: setUseQueryString changes the use_query_string setting
    SWFUpload.prototype.setUseQueryString = function (useQueryString) {
    	this.settings.use_query_string = useQueryString;
    	this.callFlash("SetUseQueryString", [useQueryString]);
    };
     
    // Public: setRequeueOnError changes the requeue_on_error setting
    SWFUpload.prototype.setRequeueOnError = function (requeueOnError) {
    	this.settings.requeue_on_error = requeueOnError;
    	this.callFlash("SetRequeueOnError", [requeueOnError]);
    };
     
    // Public: setHTTPSuccess changes the http_success setting
    SWFUpload.prototype.setHTTPSuccess = function (http_status_codes) {
    	if (typeof http_status_codes === "string") {
    		http_status_codes = http_status_codes.replace(" ", "").split(",");
    	}
     
    	this.settings.http_success = http_status_codes;
    	this.callFlash("SetHTTPSuccess", [http_status_codes]);
    };
     
    // Public: setHTTPSuccess changes the http_success setting
    SWFUpload.prototype.setAssumeSuccessTimeout = function (timeout_seconds) {
    	this.settings.assume_success_timeout = timeout_seconds;
    	this.callFlash("SetAssumeSuccessTimeout", [timeout_seconds]);
    };
     
    // Public: setDebugEnabled changes the debug_enabled setting
    SWFUpload.prototype.setDebugEnabled = function (debugEnabled) {
    	this.settings.debug_enabled = debugEnabled;
    	this.callFlash("SetDebugEnabled", [debugEnabled]);
    };
     
    // Public: setButtonImageURL loads a button image sprite
    SWFUpload.prototype.setButtonImageURL = function (buttonImageURL) {
    	if (buttonImageURL == undefined) {
    		buttonImageURL = "";
    	}
     
    	this.settings.button_image_url = buttonImageURL;
    	this.callFlash("SetButtonImageURL", [buttonImageURL]);
    };
     
    // Public: setButtonDimensions resizes the Flash Movie and button
    SWFUpload.prototype.setButtonDimensions = function (width, height) {
    	this.settings.button_width = width;
    	this.settings.button_height = height;
     
    	var movie = this.getMovieElement();
    	if (movie != undefined) {
    		movie.style.width = width + "px";
    		movie.style.height = height + "px";
    	}
     
    	this.callFlash("SetButtonDimensions", [width, height]);
    };
    // Public: setButtonText Changes the text overlaid on the button
    SWFUpload.prototype.setButtonText = function (html) {
    	this.settings.button_text = html;
    	this.callFlash("SetButtonText", [html]);
    };
    // Public: setButtonTextPadding changes the top and left padding of the text overlay
    SWFUpload.prototype.setButtonTextPadding = function (left, top) {
    	this.settings.button_text_top_padding = top;
    	this.settings.button_text_left_padding = left;
    	this.callFlash("SetButtonTextPadding", [left, top]);
    };
     
    // Public: setButtonTextStyle changes the CSS used to style the HTML/Text overlaid on the button
    SWFUpload.prototype.setButtonTextStyle = function (css) {
    	this.settings.button_text_style = css;
    	this.callFlash("SetButtonTextStyle", [css]);
    };
    // Public: setButtonDisabled disables/enables the button
    SWFUpload.prototype.setButtonDisabled = function (isDisabled) {
    	this.settings.button_disabled = isDisabled;
    	this.callFlash("SetButtonDisabled", [isDisabled]);
    };
    // Public: setButtonAction sets the action that occurs when the button is clicked
    SWFUpload.prototype.setButtonAction = function (buttonAction) {
    	this.settings.button_action = buttonAction;
    	this.callFlash("SetButtonAction", [buttonAction]);
    };
     
    // Public: setButtonCursor changes the mouse cursor displayed when hovering over the button
    SWFUpload.prototype.setButtonCursor = function (cursor) {
    	this.settings.button_cursor = cursor;
    	this.callFlash("SetButtonCursor", [cursor]);
    };
     
    /* *******************************
    	Flash Event Interfaces
    	These functions are used by Flash to trigger the various
    	events.
     
    	All these functions a Private.
     
    	Because the ExternalInterface library is buggy the event calls
    	are added to a queue and the queue then executed by a setTimeout.
    	This ensures that events are executed in a determinate order and that
    	the ExternalInterface bugs are avoided.
    ******************************* */
     
    SWFUpload.prototype.queueEvent = function (handlerName, argumentArray) {
    	// Warning: Don't call this.debug inside here or you'll create an infinite loop
     
    	if (argumentArray == undefined) {
    		argumentArray = [];
    	} else if (!(argumentArray instanceof Array)) {
    		argumentArray = [argumentArray];
    	}
     
    	var self = this;
    	if (typeof this.settings[handlerName] === "function") {
    		// Queue the event
    		this.eventQueue.push(function () {
    			this.settings[handlerName].apply(this, argumentArray);
    		});
     
    		// Execute the next queued event
    		setTimeout(function () {
    			self.executeNextEvent();
    		}, 0);
     
    	} else if (this.settings[handlerName] !== null) {
    		throw "Event handler " + handlerName + " is unknown or is not a function";
    	}
    };
     
    // Private: Causes the next event in the queue to be executed.  Since events are queued using a setTimeout
    // we must queue them in order to garentee that they are executed in order.
    SWFUpload.prototype.executeNextEvent = function () {
    	// Warning: Don't call this.debug inside here or you'll create an infinite loop
     
    	var  f = this.eventQueue ? this.eventQueue.shift() : null;
    	if (typeof(f) === "function") {
    		f.apply(this);
    	}
    };
     
    // Private: unescapeFileParams is part of a workaround for a flash bug where objects passed through ExternalInterface cannot have
    // properties that contain characters that are not valid for JavaScript identifiers. To work around this
    // the Flash Component escapes the parameter names and we must unescape again before passing them along.
    SWFUpload.prototype.unescapeFilePostParams = function (file) {
    	var reg = /[$]([0-9a-f]{4})/i;
    	var unescapedPost = {};
    	var uk;
     
    	if (file != undefined) {
    		for (var k in file.post) {
    			if (file.post.hasOwnProperty(k)) {
    				uk = k;
    				var match;
    				while ((match = reg.exec(uk)) !== null) {
    					uk = uk.replace(match[0], String.fromCharCode(parseInt("0x" + match[1], 16)));
    				}
    				unescapedPost[uk] = file.post[k];
    			}
    		}
     
    		file.post = unescapedPost;
    	}
     
    	return file;
    };
     
    // Private: Called by Flash to see if JS can call in to Flash (test if External Interface is working)
    SWFUpload.prototype.testExternalInterface = function () {
    	try {
    		return this.callFlash("TestExternalInterface");
    	} catch (ex) {
    		return false;
    	}
    };
     
    // Private: This event is called by Flash when it has finished loading. Don't modify this.
    // Use the swfupload_loaded_handler event setting to execute custom code when SWFUpload has loaded.
    SWFUpload.prototype.flashReady = function () {
    	// Check that the movie element is loaded correctly with its ExternalInterface methods defined
    	var movieElement = this.getMovieElement();
     
    	if (!movieElement) {
    		this.debug("Flash called back ready but the flash movie can't be found.");
    		return;
    	}
     
    	this.cleanUp(movieElement);
     
    	this.queueEvent("swfupload_loaded_handler");
    };
     
    // Private: removes Flash added fuctions to the DOM node to prevent memory leaks in IE.
    // This function is called by Flash each time the ExternalInterface functions are created.
    SWFUpload.prototype.cleanUp = function (movieElement) {
    	// Pro-actively unhook all the Flash functions
    	try {
    		if (this.movieElement && typeof(movieElement.CallFunction) === "unknown") { // We only want to do this in IE
    			this.debug("Removing Flash functions hooks (this should only run in IE and should prevent memory leaks)");
    			for (var key in movieElement) {
    				try {
    					if (typeof(movieElement[key]) === "function") {
    						movieElement[key] = null;
    					}
    				} catch (ex) {
    				}
    			}
    		}
    	} catch (ex1) {
     
    	}
     
    	// Fix Flashes own cleanup code so if the SWFMovie was removed from the page
    	// it doesn't display errors.
    	window["__flash__removeCallback"] = function (instance, name) {
    		try {
    			if (instance) {
    				instance[name] = null;
    			}
    		} catch (flashEx) {
     
    		}
    	};
     
    };
     
     
    /* This is a chance to do something before the browse window opens */
    SWFUpload.prototype.fileDialogStart = function () {
    	this.queueEvent("file_dialog_start_handler");
    };
     
     
    /* Called when a file is successfully added to the queue. */
    SWFUpload.prototype.fileQueued = function (file) {
    	file = this.unescapeFilePostParams(file);
    	this.queueEvent("file_queued_handler", file);
    };
     
     
    /* Handle errors that occur when an attempt to queue a file fails. */
    SWFUpload.prototype.fileQueueError = function (file, errorCode, message) {
    	file = this.unescapeFilePostParams(file);
    	this.queueEvent("file_queue_error_handler", [file, errorCode, message]);
    };
     
    /* Called after the file dialog has closed and the selected files have been queued.
    	You could call startUpload here if you want the queued files to begin uploading immediately. */
    SWFUpload.prototype.fileDialogComplete = function (numFilesSelected, numFilesQueued, numFilesInQueue) {
    	this.queueEvent("file_dialog_complete_handler", [numFilesSelected, numFilesQueued, numFilesInQueue]);
    };
     
    SWFUpload.prototype.uploadStart = function (file) {
    	file = this.unescapeFilePostParams(file);
    	this.queueEvent("return_upload_start_handler", file);
    };
     
    SWFUpload.prototype.returnUploadStart = function (file) {
    	var returnValue;
    	if (typeof this.settings.upload_start_handler === "function") {
    		file = this.unescapeFilePostParams(file);
    		returnValue = this.settings.upload_start_handler.call(this, file);
    	} else if (this.settings.upload_start_handler != undefined) {
    		throw "upload_start_handler must be a function";
    	}
     
    	// Convert undefined to true so if nothing is returned from the upload_start_handler it is
    	// interpretted as 'true'.
    	if (returnValue === undefined) {
    		returnValue = true;
    	}
     
    	returnValue = !!returnValue;
     
    	this.callFlash("ReturnUploadStart", [returnValue]);
    };
     
     
     
    SWFUpload.prototype.uploadProgress = function (file, bytesComplete, bytesTotal) {
    	file = this.unescapeFilePostParams(file);
    	this.queueEvent("upload_progress_handler", [file, bytesComplete, bytesTotal]);
    };
     
    SWFUpload.prototype.uploadError = function (file, errorCode, message) {
    	file = this.unescapeFilePostParams(file);
    	this.queueEvent("upload_error_handler", [file, errorCode, message]);
    };
     
    SWFUpload.prototype.uploadSuccess = function (file, serverData, responseReceived) {
    	file = this.unescapeFilePostParams(file);
    	this.queueEvent("upload_success_handler", [file, serverData, responseReceived]);
    };
     
    SWFUpload.prototype.uploadComplete = function (file) {
    	file = this.unescapeFilePostParams(file);
    	this.queueEvent("upload_complete_handler", file);
    };
     
    /* Called by SWFUpload JavaScript and Flash functions when debug is enabled. By default it writes messages to the
       internal debug console.  You can override this event and have messages written where you want. */
    SWFUpload.prototype.debug = function (message) {
    	this.queueEvent("debug_handler", message);
    };
     
     
    /* **********************************
    	Debug Console
    	The debug console is a self contained, in page location
    	for debug message to be sent.  The Debug Console adds
    	itself to the body if necessary.
     
    	The console is automatically scrolled as messages appear.
     
    	If you are using your own debug handler or when you deploy to production and
    	have debug disabled you can remove these functions to reduce the file size
    	and complexity.
    ********************************** */
     
    // Private: debugMessage is the default debug_handler.  If you want to print debug messages
    // call the debug() function.  When overriding the function your own function should
    // check to see if the debug setting is true before outputting debug information.
    SWFUpload.prototype.debugMessage = function (message) {
    	if (this.settings.debug) {
    		var exceptionMessage, exceptionValues = [];
     
    		// Check for an exception object and print it nicely
    		if (typeof message === "object" && typeof message.name === "string" && typeof message.message === "string") {
    			for (var key in message) {
    				if (message.hasOwnProperty(key)) {
    					exceptionValues.push(key + ": " + message[key]);
    				}
    			}
    			exceptionMessage = exceptionValues.join("\n") || "";
    			exceptionValues = exceptionMessage.split("\n");
    			exceptionMessage = "EXCEPTION: " + exceptionValues.join("\nEXCEPTION: ");
    			SWFUpload.Console.writeLine(exceptionMessage);
    		} else {
    			SWFUpload.Console.writeLine(message);
    		}
    	}
    };
     
    SWFUpload.Console = {};
    SWFUpload.Console.writeLine = function (message) {
    	var console, documentForm;
     
    	try {
    		console = document.getElementById("SWFUpload_Console");
     
    		if (!console) {
    			documentForm = document.createElement("form");
    			document.getElementsByTagName("body")[0].appendChild(documentForm);
     
    			console = document.createElement("textarea");
    			console.id = "SWFUpload_Console";
    			console.style.fontFamily = "monospace";
    			console.setAttribute("wrap", "off");
    			console.wrap = "off";
    			console.style.overflow = "auto";
    			console.style.width = "700px";
    			console.style.height = "350px";
    			console.style.margin = "5px";
    			documentForm.appendChild(console);
    		}
     
    		console.value += message + "\n";
     
    		console.scrollTop = console.scrollHeight - console.clientHeight;
    	} catch (ex) {
    		alert("Exception: " + ex.name + " Message: " + ex.message);
    	}
    };
    Si tu peux me tuyoter un peu...

  8. #8
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Au vu de ces deux bouts de code, je dirais que c'est prévu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.ensureDefault("upload_complete_handler", null);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SWFUpload.prototype.uploadComplete = function (file) {
    	file = this.unescapeFilePostParams(file);
    	this.queueEvent("upload_complete_handler", file);
    };

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Est-ce que ça voudrait dire qu'il faut qu'il existe une fonction "upload_complete_handler" ?

  10. #10
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    je viens de créer le fichier upload_complete_handler.php avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
      <meta content="text/html; charset=ISO-8859-1"
     http-equiv="content-type">
      <title></title>
    </head>
    <body>
    <?php
    echo "Nous avons bien re&ccedil;u votre fichier !"; 
    ?>
     
    </body>
    </html>
    , mais il n'a pas été appelé...

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    comme je ne m'en sors pour faire une barre de progression d'upload avec le plugin de jquery, existe-t-il une autre solution ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2000] Barre de défilement pour voyager entre enregistrements
    Par DamKre dans le forum IHM
    Réponses: 23
    Dernier message: 15/04/2010, 21h56
  2. barres de défilement pour un téléchargement
    Par laurentSc dans le forum jQuery
    Réponses: 1
    Dernier message: 09/04/2010, 17h12
  3. [AJAX] barre de défilement pour un téléchargement
    Par laurentSc dans le forum AJAX
    Réponses: 6
    Dernier message: 30/03/2010, 10h18
  4. Barre de défilement pour image
    Par chaminette dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/06/2007, 19h51
  5. [FLASH 8] Barre de défilement (pour images)
    Par Dark Anakin dans le forum Flash
    Réponses: 4
    Dernier message: 21/08/2006, 12h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo