document.addEvent("domready", function(){

	$$(".SingleUpload").each(function(field){
		
		var fileList 	= field.getChildren(".fileList")[0];
		var attach	 	= field.getChildren(".fileAttach")[0];
		attach.set("text" ,$lang("single_fancy_upload_attach"));
		var hiddenField = field.getChildren(".hiddenData")[0]; 
		
		var dataInfo = hiddenField.fileDataInfo;
		var validExtensions = dataInfo.validExtensions;
		
		var typeFilter = null;
		
		if($defined(validExtensions))
		{
			var validFilesLabel = validExtensions.join(", ");
			typeFilter = {};
			
			validExtensions.each(function(extension, index){
				validExtensions[index] = "*."+extension;
			})
			
			typeFilter[validFilesLabel] = validExtensions.join("; ");
		}
		
		
		
		var up = new FancyUpload3.Attach(fileList, attach, {
			path: document.baseURL+'public/js/uploader/Swiff.Uploader.swf',
			url: document.controllerUrl+'/uploadfile',
			fileSizeMax: dataInfo.maxFileSize * 1024 * 1024,
			multiple: false,
			appendCookieData:true,
			typeFilter: typeFilter,
			verbose:true,
			fileListMax:1,
			onSelectFail: selectFail,
			onFileSuccess: fileSuccess,
			onFileError: fileError,
			onFileRequeue: fileRequeue,
			onSelectSuccess: selectSuccess,
			onFileStart:fileStart,
			onBrowse:browse,
			onCancel:cancel,
			onFileRemove:fileRemove,
			onComplete:uploadComplete
		});
		
		up.hiddenField = hiddenField;
		
		var file = fileList.getChildren()[0];
		
		if(file)
		{
			attach.setStyle("display","none");
			file.getChildren("a.delete").addEvent("click", function(e){
				e.stop();
				file.destroy();
				attach.setStyle("display","block");
				up.hiddenField.set("value", "");
				up.reposition();
			})
		}
		
		//up.reposition();
		
	});

	function uploadComplete(uploadInfo)
	{
		
	}
	
	function browse()
	{
		this.box.setStyle("height", "0");
		this.selects.setStyle("display", "none");
	}
	
	function cancel()
	{
		this.selects.setStyle("display", "block");
	}
	
	function fileRemove()
	{
		this.selects.setStyle("display", "block");
	}
	
	function selectSuccess(e)
	{
		this.start();
	}
	
	function fileStart()
	{
	}
	
	function fileSuccess(file, response)
	{
		
		try {
			response = JSON.decode(response);
		}
		catch(exception)
		{
			return;
		}
		
		this.hiddenField.set("value", response.file);
		var remove = new Element('a', {href:"#", text: $lang("single_fancy_upload_delete_file")}).inject(file.ui.element);
		remove.addEvent("click", function(e){
			e.stop();
			this.fileRemove(file);
			this.hiddenField.set("value", "");
		}.bind(this));
		
		var parent = file.ui.element.getParent(".contenedor");
		var background = parent.getStyle("background-color");
		file.ui.element.highlight('#6084C2', background);
	}
	
	function selectFail(files)
	{
		files.each(function(file) {
			var li 		= new Element('li', {'class': 'file-invalid'});
			li.addEvent("click", function(){li.destroy();this.selects.setStyle("display", "block");}.bind(this));
			var error 	= new Element('span', {html: file.validationErrorMessage || file.validationError}).inject(li);
			li.inject(this.list);
		}, this);
	}
	
	function fileError(file)
	{
		file.ui.cancel.set('html', $lang("single_fancy_upload_retry_upload")).removeEvents().addEvent('click', function() {
				file.requeue();
				return false;
			});
 
			new Element('span', {
			html: file.errorMessage,
			'class': 'file-error'
		}).inject(file.ui.cancel, 'after');
	}
	
	function fileRequeue(file)
	{
		file.ui.element.getElement('.file-error').destroy();
		file.ui.cancel.set('html', $lang("single_fancy_upload_cancel")).removeEvents().addEvent('click', function() {
			file.remove();
			return false;
		});
		this.start();
	}
});