$(function()
{
	var handler = $('#file-handler');
	var tags = []; //todo: retrieve tags

	handler.on('dragenter', function(e)
	{
		$(this).addClass('active');
	});

	handler.on('dragleave', function(e)
	{
		$(this).removeClass('active');
	});

	handler.on('dragover', function(e)
	{
		e.preventDefault();
	});

	handler.on('drop', function(e)
	{
		e.preventDefault();
		handleFiles(e.originalEvent.dataTransfer.files);
		$(this).trigger('dragleave');
	});

	handler.on('click', function(e)
	{
		$(':file').show().focus().trigger('click').hide();
	});

	$(':file').change(function(e)
	{
		handleFiles(this.files);
	});

	$('.post .remove-trigger').on('click', function()
	{
		$(this).parents('.post').slideUp(function()
		{
			$(this).remove();
		});
		if ($('#upload-step2 .post').length == 1)
		{
			$('#upload-step2').slideUp();
			$('#upload-no-posts').slideDown();
		}
	});


	$('#the-submit').click(function(e)
	{
		e.preventDefault();
		var theSubmit = $(this);
		theSubmit.addClass('inactive');
		var posts = $('#upload-step2 .post');

		if (posts.length == 0)
		{
			//shouldn't happen
			alert('No posts to upload!');
			return;
		}

		var ajaxCalls = [];
		posts.each(function()
		{
			var postDom = $(this);
			var url = postDom.find('form').attr('action') + '?json';
			var file = postDom.data('file');
			var tags = postDom.find('[name=tags]').val();
			var safety = postDom.find('[name=safety]:checked').val();
			var fd = new FormData();
			fd.append('file', file);
			fd.append('tags', tags);
			fd.append('safety', safety);

			postDom.find(':input').attr('readonly', true);
			postDom.addClass('inactive');

			var ajaxData =
			{
				url: url,
				data: fd,
				processData: false,
				contentType: false,
				type: 'POST',
				context: postDom
			};

			var defer = $.ajax(ajaxData)
				.then(function(data)
				{
					data.postDom = $(this);
					return data;
				}).promise();

			ajaxCalls.push(defer);
		});


		$.when.all(ajaxCalls).then(function(allData)
		{
			var errors = false;
			for (var i in allData)
			{
				var data = allData[i];
				var postDom = data.postDom;
				if (data['success'])
				{
					postDom.slideUp(function()
					{
						$(this).remove();
					});
				}
				else
				{
					postDom.removeClass('inactive');
					postDom.find(':input').attr('readonly', false);
					postDom.find('.alert').text(data['errorMessage']).slideDown();
					errors = true;
				}
			}

			if (errors)
			{
				theSubmit.removeClass('inactive');
			}
			else
			{
				window.location.href = $('#upload-step2').attr('data-redirect-url');
			}
		});
	});

	function handleFiles(files)
	{
		$('#upload-step1').fadeOut(function()
		{
			for (var i = 0; i < files.length; i ++)
			{
				var file = files[i];
				var postDom = $('#post-template').clone(true);
				postDom.find('form').submit(false);
				postDom.removeAttr('id');
				postDom.data('file', file);
				$('.file-name strong', postDom).text(file.name);
				$('.tags input', postDom).tagit({caseSensitive: true, availableTags: tags, placeholderText: $('.tags input').attr('placeholder')});
				$('.posts').append(postDom);

				if (!file.type.match('image.*'))
				{
					continue;
				}

				var img = postDom.find('img')
				var reader = new FileReader();
				reader.onload = (function(theFile, img)
				{
					return function(e)
					{
						/*img.css('max-width', img.css('width'));
						img.css('max-height', img.css('height'));
						img.css('width', 'auto');
						img.css('height', 'auto');*/
						img.css('background-image', 'none');
						img.attr('src', e.target.result);
					};
				})(file, img);
				reader.readAsDataURL(file);
			}
			$('#upload-step2').fadeIn(function()
			{
			});
		});
	}
});