/**
 * Class that creates upload widget with drag-and-drop and file list
 * @inherits qq.FileUploaderBasic
 */
qq.richUploader = function(o){
    // call parent constructor
    qq.FileUploaderBasic.apply(this, arguments);
    	
	qq.extend(this._options, {
		dropArea:null		  
	});
	
	qq.extend(this._options,o);
	
	/** DRAG & DROP ZONE **/
	var self = this;                        
	
	if(this._options.dropArea !== null){
		var dz = new qq.UploadDropZone({
				element: self._options.dropArea,
				onEnter: function(e){
					qq.addClass(self._options.dropArea, "active");
					e.stopPropagation();
				},
				onLeave: function(e){
					e.stopPropagation();
				},
				onLeaveNotDescendants: function(e){
					qq.removeClass(self._options.dropArea, "active");  
				},
				onDrop: function(e){
					self._options.dropArea.style.display = 'none';
					self._options.button.style.display = 'block';
					qq.removeClass(self._options.dropArea, "active");
					self._uploadFileList(e.dataTransfer.files);    
				}
			});
					
			self._options.dropArea.style.display = 'none';
	
			qq.attach(document, 'dragenter', function(e){     
				if (!dz._isValidFileDrag(e)) return; 				
				self._options.dropArea.style.display = 'block';
				self._options.button.style.display = 'none';
			});                 
			qq.attach(document, 'dragleave', function(e){
				if (!dz._isValidFileDrag(e)) return;            
				
				var relatedTarget = document.elementFromPoint(e.clientX, e.clientY);
				// only fire when leaving document out
				if ( ! relatedTarget || relatedTarget.nodeName == "HTML"){               
					self._options.dropArea.style.display = 'none';
					self._options.button.style.display = 'block';
				}
			});
		}
		
	/** PROGRESS BAR & FILE ADDING **/
};

// inherit from Basic Uploader
qq.extend(qq.richUploader.prototype, qq.FileUploaderBasic.prototype);
