var Timers = new Array();
var Callbacks = new Array();
function show_alert(link_el, text, img, callback) {
	text = (typeof(text) != 'undefined') ? text : 'Debes iniciar sesion para poder votar!';
	img = (typeof(img) != 'undefined') ? img : 1;
	callback = (typeof(callback) != 'undefined') ? callback : (function () {});
	link_el.find('.JBL_Alert_Image').css('background-position', '-' + (8 + 32*img) + 'px 0');
	link_el.find('.JBL_Alert_Text').text(text);
	link_el.find('.JBL_Alert').fadeIn();
	Callbacks[link_el.attr('id')] = callback;
	Timers[link_el.attr('id')] = setTimeout(function () {
		link_el.find('.JBL_Alert').fadeOut();
		Callbacks[link_el.attr('id')]();
	}, 3000);
}

function hide_alert(link_el) {
	Callbacks[link_el.attr('id')]();
	clearTimeout(Timers[link_el.attr('id')]);
	link_el.find('.JBL_Alert').fadeOut();
}

$(document).ready(function() {
	$.each($('.link .preview'), function() {
		$('.link_hover:last').clone().appendTo($(this).parent()).find('a').attr('href', $(this).attr('href')).attr('target', $(this).attr('target')).attr('onClick', $(this).attr('onClick'));
		$('.JBL_Alert:last').clone().appendTo($(this).parent());
		$('.email-this:last').clone().appendTo($(this).parent()).find('.close').click(function(event) {event.preventDefault();$(this).parent().fadeOut();});
	});
	$('.JBL_Alert').live('mouseover mouseout', function (event) {
		if (event.type == 'mouseover') {
			$(this).addClass('hover')
		} else {
			$(this).removeClass('hover')
		}
	});
	$('.JBL_Alert span').live('click', function () {
		hide_alert($(this).parents('.link'));
	});
	var email_regexp = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
	$('.email-this').submit(function (event) {
		event.preventDefault();
		var $this = this;
		if (email_regexp.test($($this).find('input[name="data[email_this][user-email]"]').val()) && email_regexp.test($($this).find('input[name="data[email_this][to-email]"]').val())) {
			$($this).find('.loading').css('display', 'inline');
			$.ajax({
				type: 'POST',
				url: $(this).attr('action'),
				data: $(this).serialize(),
				success: function(response) {
					$($this).find('.loading').hide();
					switch(response)
					{
						case 'success':
							show_alert($($this).parents('.link'), 'El E-mail se ha enviado con exito!', 2);
							$this.reset();
							$($this).fadeOut();
						break;
	
						case 'error':
						default:
							show_alert($($this).parents('.link'), 'Ha ocurrido un error!', 3);
					}
				}
			});
		} else {
			show_alert($($this).parents('.link'), 'Por favor ingresa E-mails validos!', 3);
		}
	});
	$('.email-share').click(function(event) {
		event.preventDefault();
		var share_form = $(this).parents('.link').find('.email-this');
		var link_url = $(this).attr('href');
		var link_name = $(this).parents('.link').find('h2 a').text();
		share_form.fadeIn();
		share_form.find('input[name="data[email_this][url]"]').val(link_url);
		share_form.find('input[name="data[email_this][name]"]').val(link_name);
	});

	if ($.browser.msie) {
		$('.link .preview, #new-image.preview').live('mouseenter', function() {
			$('.link_hover').hide();
			$(this).parent().find('.link_hover').show();
		});
		$('.link_hover').live('mouseleave', function () {
			$(this).parent().find('.link_hover').hide();
		});
	} else {
		$('.link .preview, #new-image.preview').live('mouseenter', function() {
			$('.link_hover').fadeOut();
			$(this).parent().find('.link_hover').fadeIn();
		});
		$('.link_hover').live('mouseleave', function () {
			$(this).parent().find('.link_hover').fadeOut();
		});
	}

	$('.vote_good, .vote_bad').click(function(event) {
		event.preventDefault();
		var $this = $(this);
		var parent = $(this).parent();
		var votes = parent.parent().find('.votes');
		if ($(this).hasClass('active')) {
			if (true) {
				$.ajax({
					type: 'POST',
					url: $(this).attr('href'),
					success: function(response) {
						switch(response)
						{
							case 'success':
								parent.find('.vote_good, .vote_bad').removeClass('active').addClass('disabled');
								var current = parseInt(votes.text());
								var vote_value = parseInt($this.attr('href').substr($this.attr('href').length - 2, 2).replace('/', ''))
								votes.text(current + vote_value);
							break;
	
							case 'voted':
								show_alert($this.parents('.link'), 'Tu ya has votado por este link!', 3);
							break;
	
							case 'double-click':
								//Do nothing
							break;
	
							case 'login':
								parent.find('.vote_good, .vote_bad').removeClass('active').addClass('disabled');
								var current = parseInt(votes.text());
								var vote_value = parseInt($this.attr('href').substr($this.attr('href').length - 2, 2).replace('/', ''))
								votes.text(current + vote_value);
							break;
	
							case 'error':
							default:
								show_alert($this.parents('.link'), 'Ha ocurrido un error!', 3);
						}
					}
				});
			} else {
				show_alert($this.parents('.link'));
			}
		} else {
			show_alert($this.parents('.link'), 'Tu ya has votado por este link!', 3);
		}
	});

	var urlexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
	var img_regexp = /[a-zA-Z0-9-_\.]+\.(jpg|jpeg|gif|png)$/;
	/*
	* Post New Link Form
	*/
	if ($('#post-new').length !== 0) {
		document.getElementById('LinkAddForm').reset();
		$('.post-new-link').click(function (event) {
			event.preventDefault();
			$('#post-new').animate({
				width: 'toggle',
				display: 'block'
			}, 500, 'linear');
		});

		/*
		* Placeholders
		*/
		$('[placeholder]').addClass('placeholder').focus(function() {
			var input = $(this);
			if (input.val() == input.attr('placeholder')) {
				input.val('');
				input.removeClass('placeholder');
			}
		}).blur(function() {
			var input = $(this);
			if (input.val() == '') {
				input.addClass('placeholder');
				input.val(input.attr('placeholder'));
			}
		}).blur();
		$('[placeholder]').parents('form').submit(function() {
			$(this).find('[placeholder]').each(function() {
				var input = $(this);
				if (input.val() == input.attr('placeholder'))
					input.val('');
			});
		});

		$('#LinkCategoryId').selectmenu({
			style: 'dropdown',
			width: 264,
			menuWidth: 252
		});

		$('.JBL_Alert:last').clone().appendTo($('#post-new'));
		var current_step = i = 1;
		var duration = 300;
		var steps = new Array();
		$.each($('#new-image div.step'), function(index) {
			if (i == 1)
				$(this).css('top', 0);
			steps[i] = this;
			i = i+1;
		});
		$('#steps-nav .next').click(function (event) {
			event.preventDefault();
			if ($(this).hasClass('url_upload') && !$(this).hasClass('enabled')) {
				if ($('input[name="data[Link][UploadType]"]:checked').attr('value') == 'url' && urlexp.test($('#LinkImageURL').attr('value')) && img_regexp.test($('#LinkImageURL').attr('value')))
				{
					$('#new-image span.loading').css('display', 'inline');
					$('#steps-nav .prev, #steps-nav .next').fadeOut();
					$.ajax({
						type: 'POST',
						url: $('#LinkUploadURL').attr('value'),
						data: 'data[Link][ImageURL]=' + $('#LinkImageURL').attr('value'),
						success: function(response) {
							if (/^<img/i.test(response))
							{
								$(steps[3]).html(response);
								$('#LinkImage').attr('value', $(steps[3]).find('img').attr('src').substr(1));
								$('#cropper').jblcropper();
								$('#steps-nav .next').addClass('enabled').trigger('click');
								$('#new-image span.loading').hide();
							}
							else
							{
								show_alert($('#post-new'), 'Ha ocurrido un error!', 3);
							}
							$('#steps-nav .prev, #steps-nav .next').fadeIn();
						}
					});
				}
				else
				{
					show_alert($('#post-new'), 'Solo se permiten imagenes jpg, png y gif!', 3);
				}
			} else if ($(this).hasClass('enabled')) {
				if (current_step + 2 > steps.length) {
					$('#steps-nav .prev, #steps-nav .next, #zoom, #cropper span').fadeOut();
					$('#post-new .link_info').fadeIn();
					$('.link_hover:last').clone().appendTo($('#LinkAddForm')).find('a').attr('href', $('#LinkUrl').val()).attr('target', '_blank');
					$('#new-image').addClass('preview');
				} else {
					if (current_step + 2 < steps.length) {
						$('#steps-nav .next').removeClass('enabled');
					}
					$(steps[current_step]).animate({
						left: [-290, 0]
					}, duration, function () {
						$(steps[current_step]).css({left: 0, top: -180});
						current_step = current_step + 1;
						if ($('#steps-nav .prev').css('display') == 'none') {
							$('#steps-nav .prev').show();
						}
					});
					$(steps[current_step+1]).css({left: 290, top: 0}).animate({
						left: 0
					}, duration);
				}
			} else {
				show_alert($('#post-new'), 'Por favor completa los campos correctamente!', 3);
			}
		});
		$('#steps-nav .prev').click(function (event) {
			event.preventDefault();
			$('#steps-nav .next').addClass('enabled');
			$(steps[current_step]).animate({
				left: 290
			}, duration, function () {
				$(steps[current_step]).css({left: 0, top: -180});
				current_step = current_step - 1;
				if (current_step == 1) {
					$('#steps-nav .prev').hide();
				}
			});
			$(steps[current_step-1]).css({left: -290, top: 0}).animate({
				left: 0
			}, duration);
		});
		$('#back-to-img').click(function(event) {
			event.preventDefault();
			$('#steps-nav .prev, #steps-nav .next, #zoom, #cropper span').fadeIn();
			$('#post-new .link_info').fadeOut();
			$('#LinkAddForm .link_hover').remove();
			$('#new-image').removeClass('preview');
		});

		$('#LinkCategoryId, #LinkUrl').change(function() {
			if($('#LinkCategoryId').attr('value') != '' && urlexp.test($('#LinkUrl').attr('value'))) {
				$('#steps-nav .next').addClass('enabled');
			} else {
				$('#steps-nav .next').removeClass('enabled');
			}
		});

		$('#upload_url').fadeOut();
		$('input[name="data[Link][UploadType]"]').change(function() {
			switch($(this).attr('value'))
			{
				case 'local':
				default:
					$('#upload_url').fadeOut(200, function () { $('#upload_local').fadeIn(200) });
				break;

				case 'url':
					$('#upload_local').fadeOut(200, function () {
						$('#upload_url').fadeIn(200);
						$('#steps-nav .next').removeClass('enabled');
					});
				break;
			}
		});

		$('#upload_url').bind('keyup', function() { //change
			$('#steps-nav .next').removeClass('enabled');
			if ($('#LinkImageURL').hasClass('placeholder')) {
				$('#steps-nav .next').removeClass('url_upload');
			} else {
				$('#steps-nav .next').addClass('url_upload');
			}
		});

		var upload = new AjaxUpload('upload_local', {
			action: '/links/upload',
			name: 'data[Link][LocalImage]',
			data: {
				'data[Link][UploadType]': 'local'
			},
			autoSubmit: true,
			onSubmit: function (file, ext) {
				if (ext && /^(jpg|jpeg|png|gif)$/.test(ext)) {
					$('#new-image span.loading').css('display', 'inline');
					$('#steps-nav .prev, #steps-nav .next').fadeOut();
				} else {
					show_alert($('#post-new'), 'Solo se permiten imagenes jpg, png y gif!', 3);
					return false;
				}
			},
			onComplete: function (file, response) {
				$('#new-image span.loading').hide();
				if (/^<img/i.test(response))
				{
					$(steps[3]).html(response);
					$('#LinkImage').attr('value', $(steps[3]).find('img').attr('src').substr(1));
					$('#cropper').jblcropper();
					$('#steps-nav .next').addClass('enabled').trigger('click');
				}
				else
				{
					show_alert($('#post-new'), 'Ha ocurrido un error!', 3);
				}
				$('#steps-nav .prev, #steps-nav .next').fadeIn();
			}
		});

		//Limit the textarea character count - http://yensdesign.com/2009/01/how-to-set-maxlength-textareas-by-creating-jquery-plugin/
		$('textarea[maxlength]').keypress(function (event) {
			var limit = parseInt($(this).attr('maxlength'));
			var keyCode = event.keyCode;
			var hasSelection = (document.selection) ? document.selection.createRange().text.length > 0 : this.selectionStart != this.selectionEnd;
			return !(this.value.length >= limit && (keyCode > 50 || keyCode == 32 || keyCode == 0 || keyCode == 13) && !event.ctrlKey && !event.altKey && !hasSelection);
		}).keyup(function () {
			var limit = parseInt($(this).attr('maxlength'));
			if(this.value.length > limit)
				this.value = this.value.substring(0, limit);
		});

		$('#send-new').click(function(event) {
			event.preventDefault();
			if ($('#LinkName').hasClass('placeholder') || $('#LinkDescription').hasClass('placeholder')) {
				show_alert($('#post-new'), 'Por favor completa los campos correctamente!', 3);
			} else {
				$('#post-new .link_info .loading').show();
				var callback = (function() {});
				$(this).disabled = true;
				$.ajax({
					type: 'POST',
					url: $('#LinkAddForm').attr('action'),
					data: $('#LinkAddForm').serialize(),
					success: function(data) {
						$('#post-new .link_info .loading').hide();
						if (/^Tu/i.test(data)) {
							callback = (function() {
								window.top.location = '/';
							});
						} else {
							data = 'Ha ocurrido un error!';
						}
						show_alert($('#post-new'), data, 2, callback);
					}
				});
			}
		});
	}
});
