/**
 * FancyUpload Showcase
 *
 * @license		MIT License
 * @author		Harald Kirschner <mail [at] digitarald [dot] de>
 * @copyright	Authors
 */

//window.addEvent('domready',

function initFancyUpload(menu) { // wait for the content
	var form = menu.element.getElement('.form-demo');
	var status = menu.element.getElement('.demo-status');
	var list = menu.element.getElement('.demo-list');
	var browse = menu.element.getElement('.demo-browse');
	var clear = menu.element.getElement('.demo-clear');
	var upload = menu.element.getElement('.demo-upload');

	// our uploader instance 
	menu.fancyUpload = new FancyUpload2(
		status, 
		
		list, 
		
		{ // options object
			// we console.log infos, remove that in production!!
			verbose: true,
			
			// url is read from the form, so you just have to change one place
			url: form.action,
			
			// path to the SWF file
			path: '../common/js/fancyUpload/Swiff.Uploader.swf',
			
			// remove that line to select all files, or edit it, add more items
			typeFilter: {
				'All types': '*.*'
			},
			
			// this is our browse button, *target* is overlayed with the Flash movie
			target: browse,
			
			// graceful degradation, onLoad is only called if all went well with Flash
			onLoad: function() {
				status.removeClass('hide'); // we show the actual UI

				// We relay the interactions with the overlayed flash to the link
				this.target.removeEvents('click');
				this.target.addEvents({
					click: function() {
						return false;
					},
					mouseenter: function() {
						this.addClass('hover');
					},
					mouseleave: function() {
						this.removeClass('hover');
						this.blur();
					},
					mousedown: function() {
						this.focus();
					}
				});

				// Interactions for the 2 other buttons
				clear.removeEvents('click');
				clear.addEvent('click', function() {
					menu.fancyUpload.remove(); // remove all files
					return false;
				});

				upload.removeEvents('click');
				upload.addEvent('click', function() {
					var menuApp = $MA(menu);
					var fileName = menuApp.document.element.getElement('ul').get('rel');
					menu.fancyUpload.setOptions({data:{file:fileName}});
					menu.fancyUpload.start(); // start upload
					menuApp.document.loadRequest();
					list.getElements('li').each(function(a){
						a.getElement('a.file-remove').destroy();
					});
					return false;
				});
			},
			
			// Edit the following lines, it is your custom event handling
			
			/**
			 * Is called when files were not added, "files" is an array of invalid File classes.
			 * 
			 * This example creates a list of error elements directly in the file list, which
			 * hide on click.
			 */ 
			onSelectFail: function(files) {
				files.each(function(file) {
					new Element('li', {
						'class': 'validation-error',
						html: file.validationErrorMessage || file.validationError,
						title: MooTools.lang.get('FancyUpload', 'removeTitle'),
						events: {
							click: function() {
								this.destroy();
							}
						}
					}).inject(this.list, 'top');
				}, this);
			},
			
			/**
			 * This one was directly in FancyUpload2 before, the event makes it
			 * easier for you, to add your own response handling (you probably want
			 * to send something else than JSON or different items).
			 */
			onFileSuccess: function(file, response) {
				var json = new Hash(JSON.decode(response, true) || {});
				
				if (json.get('status') == '1') {
					file.element.addClass('file-success');
					file.info.set('html', '<strong>File was uploaded.</strong> ');
				} else {
					file.element.addClass('file-failed');
					file.info.set('html', '<strong>An error occured:</strong> ' + (json.get('error') ? (json.get('error') + ' #' + json.get('code')) : response));
				}
			},
			
			/**
			 * onFail is called when the Flash movie got bashed by some browser plugin
			 * like Adblock or Flashblock.
			 */
			onFail: function(error) {
				switch (error) {
					case 'hidden': // works after enabling the movie and clicking refresh
						alert('To enable the embedded uploader, unblock it in your browser and refresh (see Adblock).');
						break;
					case 'blocked': // This no *full* fail, it works after the user clicks the button
						alert('To enable the embedded uploader, enable the blocked Flash movie (see Flashblock).');
						break;
					case 'empty': // Oh oh, wrong path
						// TODO Debug this (alert raised on every tab opening)
						//alert('A required file was not found, please be patient and we fix this.');
						break;
					case 'flash': // no flash 9+ :(
						alert('To enable the embedded uploader, install the latest Adobe Flash plugin.')
				}
			}
			
		}
	);
}
//);
