/*
 * 				runtimes: 'html5,flash',
				browse_button: 'image-browse'+id,
				container: 'image-upload-controls'+id,
				max_file_size: options.maxFileSize,
				multi_selection: options.multiSelect,
				url: options.uploadUrl,
				flash_swf_url: options.flashSwfUrl,
				filters: options.filters
 */

(function (window, $, undefined) {
	var p = function(){
		
		// private stuff
		var counters = {};
		
		function uniqueId(baseName) {
			if (counters[baseName] === undefined) {
				counters[baseName] = 0;
			}
			return baseName + ++counters[baseName];
		}
		
		function initUploader(options) {
			var self = this;
			this.uploader = new plupload.Uploader(options);
			
			this.uploader.bind('FilesAdded', function(up, files) {
				options.filesAdded && options.filesAdded(files);
				//up.refresh();
			});
			
			this.uploader.bind('Error', function(up, err) {
				var msg;
				console.log(err);
				switch (err.code) {
					case -600: msg = 'Please choose a file smaller than ' + plupload.formatSize(self.uploader.settings.max_file_size); break;
					case -601: msg = 'Please choose a valid file (' + self.uploader.settings.filters[0].extensions + ')'; break;
				}
				options.error && options.error(msg);
			});
			
			this.uploader.bind('UploadProgress', function(up, file) {
				options.uploadProgress && options.uploadProgress(file.percent);
			});
			
			this.uploader.bind('FileUploaded', function(up, file, response) {
				console.log('uploader.FileUploaded', response);
				$('.plupload.html5').css('zIndex', 9999);
				var data = $.parseJSON(response.response);
				options.fileUploaded && options.fileUploaded(data);
			});
			
			this.uploader.init();
			$('.plupload.html5').css('zIndex', 9999);
		}
		
		function autoId(el, baseName) {
			var existingId = el.attr('id'); 
			if (!existingId) {
				var newId = uniqueId(baseName);
				el.attr('id', newId);
				return newId;
			} else {
				return existingId;
			}
		}
		
		return {
			init: function(options) {
				options.browse_button = autoId(options.browseButton, 'browse-button');
				options.container = autoId(options.browseContainer, 'browse-container');
				delete options.browseButton;
				delete options.browseContainer;
				initUploader.call(this, options);
			},
			start: function() {
				this.uploader.start();
			}
		};
	}();
	
	ImageUploader = function(options) {
		this.init(options);
	};
	
	ImageUploader.prototype = p;
	ImageUploader.prototype.constructor = ImageUploader;
	
})(window, jQuery);

