var uploader = function(file) {
	var obj = this;
	
	this.pending = false;
	this.multiple = file.getAttribute('multiple') != null;
	this.documents = [];
	
	this.uploader_div = document.createElement('div');
	file.parentNode.appendChild(this.uploader_div);
	
	this.file_div = document.createElement('div');
	file.parentNode.appendChild(this.file_div);
	
	this.showMessage = function(message) {
    	alert(message);
    }
    
    this.extensions = file.getAttribute('extensions').split('|');
    
    if (this.extensions.length == 1 && this.extensions[0] == "") {
    	this.extensions = [];
	}
	
	var hidden = document.createElement('input');
	hidden.type = "hidden";
	if(file.value) hidden.value = file.value;
	if(file.name) hidden.name = file.name;
	if(file.id) hidden.id = file.id;
	if(file.id) hidden.id = file.id;
	if(file.className) hidden.className = file.className;
  	file.parentNode.replaceChild(hidden,file);
  	file = hidden;
	
	this.up = new qq.FileUploader({
        element: obj.uploader_div,
        action: '/includes/cf/upload.cfc',
		params: {method: 'Upload'},
		// ex. ['jpg', 'jpeg', 'png', 'gif'] or []
		allowedExtensions: obj.extensions,        
		
		// events         
		// you can return false to abort submit
		onSubmit: function(id, fileName) {
			if (!obj.multiple && obj.documents.length != 0) {
				obj.showMessage("There is already a file uploaded.");
				return false;
			} else if (!obj.multiple && obj.pending) {
				return false;
			} else if (!obj.multiple) {
				obj.pending = true;
			}
		},
		onProgress: function(id, fileName, loaded, total){},
		onComplete: function(id, fileName, responseJSON){
			if (responseJSON.success) {
				obj.addDocument(responseJSON.document_id, fileName);
			}
			obj.pending = false;
		},
		onCancel: function(id, fileName){},
		
		messages: {
            typeError: "{file} has invalid extension. Only {extensions} are allowed.",
            sizeError: "{file} is too large, maximum file size is {sizeLimit}.",
            minSizeError: "{file} is too small, minimum file size is {minSizeLimit}.",
            emptyError: "{file} is empty, please select files again without it.",
            onLeave: "The files are being uploaded, if you leave now the upload will be cancelled."            
        },
        showMessage: function(message) {
        	alert(message);
        }
    });
    
    this.addDocument = function(document_id, file_name) {
    	this.documents.push({"id":document_id,"file_name":file_name});
    	this.update();
	}
    
    this.delDocument = function(index) {
    	this.documents.splice(index,1);
    	this.update();
    }
    
    this.update = function() {
    	this.file_div.innerHTML = "";
    	file.value = "";
    	
    	for (var i=0; i<this.documents.length; i++) {
    		file.value += this.documents[i].id;
    		if (i < this.documents.length - 1) {
    			file.value += ",";
    		}
    		
    		var div = document.createElement('span');
    		div.innerHTML = this.documents[i].file_name;
    		this.file_div.appendChild(div);
    		
    		var a = document.createElement('a');
    		a.index = i;
    		a.href = '#';
    		a.style.padding = "0 5px 0 2px";
    		a.onclick = function() {
    			if (confirm('Are you sure you want to delete?')) {
    				obj.delDocument(this.index);
    			}
    			
    			return false;
    		}
    		a.innerHTML = '(x)';
    		this.file_div.appendChild(a);
    	}
    }
    
    if (file.value != "") {
		values = file.value.split('||');
		
		for (var i=0; i<values.length;i++) {
			value = values[i].split('|');
			
			this.addDocument(value[0],value[1]);
		}
	}
}
