(function($){
	$.fn.uploader = function(settings){
		
		options = $.extend({}, $.fn.uploader.defaults, settings);

		$this = $(this);
		
		if (this.attr('id') === undefined) {
			debug('Invalid selector!'); return;
		}
		
		$this.change(function(e){uploadFile(e);});
		
		createMainElements();
		createServerFiles();
		
		var objForm = '';
		var trgForm = '';
		var actForm = '';
		var encForm = '';
		var container = '';
	};
	
	$.fn.uploader.defaults = {
		title:			'Fotos Subidas',
		extensions:		'*',
		upload_url: 'index.php?accion=upload_file',
		delete_url: 'index.php?accion=delete_file',
		counter: 0
	};
	
	$.fn.uploader.start = function(start) {
		initialize(start);
		return $.fn.uploader;
	};
	
	$.fn.uploader.change = function(fileName) {
		alert(fileName);
	};
	
	function uploadFile(e)
	{
		var fileName = $this.val();
		if(fileName){
			if(checkExtensions(fileName)){
				//alert('uploading...' + fileName);
				submitFormToIframe();
			}else{
				debug('The file extension is incorrect',true);
			}
		}else{
			debug('You should select file');
		}
	}
	
	function checkExtensions(fileName){
		if(options.extensions != '*')
		{
			var exts = options.extensions.split(';');
			var parts = fileName.split('.');
			
			for(var i = 0; i < exts.length; i++)
			{
				if(parts[1].toLowerCase() == exts[i]) return true;
			}
			return false;
		}
		return true;
	}
	
	function createMainElements()
	{
		container = $this.parent();
		
		var upload_iframe = '<iframe id="DU_upload_iframe" name="DU_upload_iframe"  marginheight="0" marginwidth="0" frameborder="0" width="0" height="0"></iframe>';
		
		var iframe = '<iframe id="DU_iframe" name="DU_iframe"  marginheight="0" marginwidth="0" frameborder="0" width="0" height="0"></iframe>';
		
		var files = '<div id="DU_file_container" name="DU_file_container" style="display:block;">'
					+'<div class="DU_title_container">'+options.title+':</div>'
					+'<div class="DU_files_uploaded"></div>'
					+'<div class="DU_load_bar" style="width:200px; height:20px; display:none;"><img src="scripts/jquery.dee.uploader/load_bar.gif" width="200" height="20" /></div>'
					+'</div>';
		
		var form = '<form id="DU_delete_form" name="DU_delete_form" method="post" target="DU_iframe"><input type="hidden" id="deleteFile" name="deleteFile" /></form>';
		
		container.append(upload_iframe);
		container.append(iframe);
		container.append(files);
		$('body').append(form);
		
		$('#DU_upload_iframe').load(function(e){iframeComplete();});
	}
	
	function createServerFiles(){
		var sf = $('.DU_server_files');
		if(sf){
			var idx = 0;
			sf.children('input[name=DU_server_file[]]').each(function(){
				createFileServerContainer($(this).val(),$(this).attr('ref'),idx);
				$(this).remove();
				idx++;
			});
			sf.remove();
		}
	}
	
	function submitFormToIframe()
	{
		$('.DU_load_bar').css('display','block');
		
		objForm = $('.DU_form');
		//guardo los datos originales de formulario
		actForm = objForm.attr('action');
		trgForm = objForm.attr('target');
		//los cambio para enviar la foto al iframe
		objForm.attr('action',options.upload_url);
		objForm.attr('target','DU_upload_iframe');
		//envio el formulario al iframe
		objForm.submit();
		
		//devuelvo al formulario los valores originales
		objForm.attr('action',actForm);
		objForm.attr('target',trgForm);
		
		//iframeComplete();
	}
	
	function deleteFile(file){
		$('#DU_delete_form').attr('action',options.delete_url);
		$('#deleteFile').attr('value',file);
		$('#DU_delete_form').submit();
		
	}
	
	function iframeComplete()
	{
		if($('#DU_upload_iframe').contents().text()){
		$('.DU_load_bar').css('display','none');
		
		createFileContainer();
		
		$this.val('');
		}
	}
	
	function createFileContainer()
	{
		var fileContainer = '<div class="DU_row_file">'
							+'<div class="DU_title_file">'+$this.val()+'<input type="hidden" id="DU_uploaded_file[]" name="DU_uploaded_file[]" value="'+$('#DU_upload_iframe').contents().text()+'" /></div>'
							+'<div class="DU_btn_delete" id="DU_btn_delete'+options.counter+'"><img src="scripts/jquery.dee.uploader/btn_delete.gif" width="16" height="16" /></div>'
							+'</div>'
							+'<div class="DU_row_separator"></div>';
		
		$('.DU_files_uploaded').append(fileContainer);
		
		var cell_width = parseInt($('.DU_row_file').css('width')) - parseInt($('.DU_row_file').css('margin-left')) - parseInt($('.DU_row_file').css('margin-right')) - parseInt($('.DU_row_file').css('padding-left')) - parseInt($('.DU_row_file').css('padding-right'));
		
		$('.DU_title_file').css('width',cell_width - 18 + 'px');
		
		$('#DU_btn_delete'+options.counter).click(function(e){
			deleteFile($(this).parent().children('.DU_title_file').children('input').val());
			//deleteFile($('#DU_upload_iframe').contents().text());
			$(this).parent().remove();
		});
		
		options.counter++;
	}
	
	function createFileServerContainer(value,args,index)
	{
		var title = value;
		if(args) value = value +';'+ args;
		var fileContainer = '<div class="DU_row_file">'
							+'<div class="DU_title_file">'+title+'<input type="hidden" id="DU_uploaded_server_file[]" name="DU_uploaded_server_file[]" value="'+value+'" /></div>'
							+'<div class="DU_btn_delete" id="DU_btn_delete_srv'+index+'"><img src="scripts/jquery.dee.uploader/btn_delete.gif" width="16" height="16" /></div>'
							+'</div>'
							+'<div class="DU_row_separator"></div>';
		
		$('.DU_files_uploaded').append(fileContainer);
		
		var cell_width = parseInt($('.DU_row_file').css('width')) - parseInt($('.DU_row_file').css('margin-left')) - parseInt($('.DU_row_file').css('margin-right')) - parseInt($('.DU_row_file').css('padding-left')) - parseInt($('.DU_row_file').css('padding-right'));
		
		$('.DU_title_file').css('width',cell_width - 18 + 'px');
		
		$('#DU_btn_delete_srv'+index).click(function(e){
			deleteFile(value);
			$(this).parent().remove();
		});
	}
	
	function initialize(start){
		alert('initialize');
	};
	
	function debug(message,_isAlert) {
		if (window.console && window.console.log) {
			window.console.log(message);
		}
		if(_isAlert){
			alert(message);
		}
	};
	
})(jQuery);
