var reFTN = /http:\/\/ftn\/(.*)/,
	reIdComentario = /num_votos_(.*)/,
	show_mk_of = false,
	show_resp_form = Array();

var commentEvents = function () {
	// votos comentarios
	$("a.votes").click(function () {
		if (reIdComentario.test(this.id)) {
			var id = RegExp.$1;
			var url = "/ajax/votacomentario.php";
			var data = "id="+id;
			$.ajax({
				url 	: url,
				type	: 'get',
				dataType: "json",
				data	: data,
				success	: updateVotes
			});
			
		}
		return false;
	});
	// envio de comentario
	$("#fComment").validate({
		messages: {
			comentario: "Por favor, escribe tu comentario."
		},
		submitHandler: function (form) {
			// el envio se hace por ajax
			var txt = form.comentario.value;
			var id = form.id_foto.value;
			var titulo = form.tit_foto.value;
			var url = "/ajax/save_comment.php";
			var data = ({id_foto: id, comentario: txt});
			// indicador
			$("#fComment").indicator({
				text	: "Enviando comentario...",
				image	: "/img/indicator.gif"
			});
			// envia datos
			$.ajax({
				url 	: url,
				type	: 'post',
				dataType: "json",
				data	: data,
				success	: updateComment
			});
			return false;
		}
	});
	
	// responder comentarios
	$(".resp_comment").click(function () {
		if (!show_resp_form.in_array("com_"+this.rel)) {
			$("#com_" + this.rel).append("<div class=\"form_resp_comment\"><form method=\"post\" action=\"/ajax/resp_comment.php\" id=\"form_"+this.rel+"\" ><input type=\"hidden\" value=\""+this.rel+"\" /><textarea id=\"area_"+this.rel+"\"></textarea><button class=\"btn_green\" onclick=\"respComment("+this.rel+"); return false;\">Responder</button></form><div>");
			show_resp_form.push("com_"+this.rel);
		} else {
			$("#com_" + this.rel).find(".form_resp_comment").remove();
			show_resp_form = show_resp_form.remove("com_"+this.rel);
		}
		return false;
	});
}

var respComment = function (id) {
	var $form = $("#form_"+id), 
	url = $form.attr("action"),
	txt = $("#area_"+id).val(),
	id_foto = $("#id_foto").val(),
	data = ({
		id_foto: id_foto,
		comentario: txt,
		id_parent: id
	});
	
	// valida
	if (txt != '') {
		// envia datos
		$.ajax({
			url 	: url,
			type	: 'post',
			dataType: "json",
			data	: data,
			success	: updateComment
		});
	} else {
		alert("Por favor, escribe tu comentario.");
	}
	
	return false;
}

var updateComment = function (resp) {
	var nom_autor = resp.nom_autor,
	id_comentarista = resp.id_comentarista,
	texto = resp.text,
	avatar = resp.avatar,
	fecha = resp.fecha,
	id_parent = resp.id_parent,
	$parent_li = null,
	html = '';
	
	// console.log(fecha + avatar);
	
	// si era el primer comentario, quita el texto de que no hay
	$("#nocomments").remove();
	
	// append LI
	if (id_parent == 0) {
		html = "<li style=\"display: none;\" id=\"fadeMe\">";
		if (avatar != '') {
			html += '<div class="clip_avatar"><img src="'+avatar+'" alt="Avatar de usuario" class="avatar" /></div>';
		} else {
			html += "<img src=\"/img/noavatar.png\" alt=\"Avatar de usuario\" class=\"avatar\" />";
		}
		html += '<div class="inner">';
		html += '<p>Por <a href="/miembros/fichas/'+id_comentarista+'/" class="author_comment">'+nom_autor+'</a> '+fecha+'</p>';
		html += '<p class="comment_text">'+texto+'</p>';
		html += '<p class="votes">0</p>';
		html += "</div>";
		html += "</li>";
	} else {
		html = "<div class=\"comment_hijo\" style=\"display: none;\">";
		if (avatar != '') {
			html += '<div class="clip_avatar"><img src="'+avatar+'" alt="Avatar de usuario" class="avatar" /></div>';
		} else {
			html += "<img src=\"/img/noavatar.png\" alt=\"Avatar de usuario\" class=\"avatar\" />";
		}
		html += '<div class="inner">';
		html += '<p>Por <a href="/miembros/fichas/'+id_comentarista+'/" class="author_comment">'+nom_autor+'</a> '+fecha+'</p>';
		html += '<p class="comment_text">'+texto+'</p>';
		html += '<p class="votes">0</p>';
		html += "</div>";
		html += "</li>";
		html += "</div>";
		html += "<div class=\"clear\"></div>";
		
	}
	if (id_parent == 0) {
		$("#ul_comment_photo").append(html);
		// limpia el contenido del form, pero no lo inhabilita
		$("#comentario").val("");
		$("#fComment").indicator("hide");
		$("#fadeMe").fadeIn();
		// Evento GA
		if (_gaq != null) {
			_gaq.push(['_trackEvent', 'Fotos', 'Comentar']);
		}
	} else {
		// inserta el comentario justo despues del parent
		$parent_li = $("#com_"+id_parent);
		$parent_li.find("form").remove();
		$parent_li.append(html);
		// elimina formulario
		$parent_li.find(".comment_hijo").fadeIn();
		// Evento GA
		if (_gaq != null) {
			_gaq.push(['_trackEvent', 'Fotos', 'Responder comentario']);
		}
	}
}


var pagerEvents = function () {
	/**
	 * TODO
	 * Antes de poner en producción
	 * hay que tener en cuenta que 
	 * el click sobre la foto falla, no vuelve a
	 * la pantalla de fondo blanco correcta
	 */
	
	$("#pagination a").click(function () {
		/* /galerias/submarina/360101/lightbox/ */
		var regexp = /\/galerias\/(.*)\/([0-9]*)\/lightbox\/?/;
		// var regexp = /\/([0-9]*)\/lightbox\/?/;
		var id = 0;
		var id_gal = 0;
		var url = "/ajax/getphotodata.php";
		if (regexp.test(this.href)) {
			id = RegExp.$2;
			id_gal = RegExp.$1;
		}
		$("#photocontainer").indicator({
			image : '/img/indicator_black.gif',
			type  : 'layer',
			default_class: 'indlayer',
			text : ""
		});
		$.ajax({
			url 	: url,
			data	: 'id='+id+"&id_gal="+id_gal,
			type	: 'get',
			dataType: 'json',
			success :	updatePhotoInfo
		});
		return false;
	});
}

var updatePhotoInfo = function (image) {
	if (image.success == 1) {
		$(".photo").attr("src", image.src)
					.load(function () {
						$("#photocontainer").indicator("hide");
						imageEvents();
					});
		$(".tit_photo").html(image.title);
		$("#author_name").html(image.author);
		
		$(".utilities .info").attr("href", "/galerias/"+image.gallery+"/"+image.id+"/");
		$(".close").attr("href", "/galerias/"+image.gallery+"/"+image.id+"/");
		
		$("#pagination .sig").attr("href", "/galerias/"+image.gallery+"/"+image.next+"/lightbox/");
		$("#pagination .ant").attr("href", "/galerias/"+image.gallery+"/"+image.prev+"/lightbox/");
		$(".clip_avatar img").attr("src", image.avatar);
		// cambia el hash
		window.location.hash = image.id;
	}
}

var votoEvents = function () {
	// voto imagen
	$("#votafoto").click(function () {
		var id = $(this).attr("rel");
		var url = "/ajax/voteimg.php";
		var data = "id="+id;
		
		$.ajax({
			url 	: url,
			type	: 'get',
			dataType: 'json',
			data 	: data,
			success	: updateVoteImg
		});
		
		return false;
	});
}

var updateVoteImg = function (resp) {
	id = resp.id;
	result = resp.result;
	error = resp.error;
	num_votos = resp.num_votos;
	if (result == 0) {
		alert(error);
	} else {
		// actualiza html
		if (resp.tipo == 'concurso') {
			$("#votafoto").html("Muchas gracias");
		} else {
			$("#num_votos").html(num_votos);
			// quita el voto y pone un literal
			$("#cont_btn_votos").html('<p><img src="/img/tick.png" />Gracias<br />por tu voto</p>');
		}
		// evento GA
		if (_gaq != null) {
			_gaq.push(['_trackEvent', 'Fotos', 'Votar']);
		}
	}
}

var updateVotes = function (resp) {
	json = resp;
	id = json.id;
	error = json.error;
	votos = json.num_votos;
	if (error == 0) {
		$("#num_votos_"+id).html(votos);
		// evento GA
		if (_gaq != null) {
			_gaq.push(['_trackEvent', 'Fotos', 'Votar comentario']);
		}
	} else {
		switch(error) {
			case 1:
				alert("No puedes votar dos veces el mismo comentario.");
				break;
			case 2:
				alert("No puedes votar los comentarios de tus propias imágenes.");
				break;
			case 3:
				alert("No puedes votar tus propios comentarios.");
				break;
		}
	}
}

var shareEvents = function () {
	// registra eventos GA para Twitter y Tuenti
	$("#btn_twitter").click(function () {
		if (_gaq != null) {
			_gaq.push(['_trackSocial', 'twitter', 'Twittear']);
		}
	});
	$("#btn_tuenti").click(function () {
		if (_gaq != null) {
			_gaq.push(['_trackSocial', 'tuenti', 'Compartir']);
		}
	});
}

var imageEvents = function () {
	var msg = "Esta imagen tiene (c) todos los derechos reservados y está prohibida cualquier utilización sin el permiso de su autor.\n";
	msg += "Contacte con el autor utilizando el formulario situado en la ficha de cada fotógrafo para cualquier solicititud de uso.";

	// si estamos en la galería de quedadas, cambiamos las href del paginador
	$("a").each(function () {
		var href = $(this).attr("href"),
		re = /(\/galerias\/quedadas\/)(.*)/;
		if (re.test(href)) {
			$(this).attr("href", "/miembros/galeria/"+RegExp.$2);
		}
	});

	// proteccion foto
	$("img.photo").protect({
		msg: msg,
		mask: true,
		mask_classname: 'bgtransparent',
		keep_click: true
	});
	
	$("#show_mk_of .close").click(function () {
		$("#show_mk_of").overlay("close");
		console.log("ok");
		show_mk_of = false;
		return false;
	});
	
	// como se hizo
	$("#mk_of_link").click(function () {
		var $container = $("#show_mk_of");
		if (!show_mk_of) {
			$container.overlay("init");
			$container.overlay("show");
			show_mk_of = true;
		} else {
			show_mk_of = false;
		}
		return false;
	});
}


/*
var photoData = {
	url : null,
	reg : /\/([0-9]*)\/lightbox\/?/,
	id  : 0,
	parse : function (href) {
		if (this.reg.test(href)) {
			this.id = RegExp.$1;
		}
	},
	getData: function (url) {
		console.log()
	}
}
*/

var showmap = false;

var mapEvents = function () {
	var $container = $("#mapcontainer");
	if ($container) {
		$container.draggable({
			stop: function(event, ui) {
				// guarda en una cookie las coordenadas donde se ha soltado el mapa?
			}
		});
	}

	$("#mapcontainer .close").click(function () {
		$container.overlay("close");
		showmap = false;
	});

	$("#verMapa").click( function (e) {
		if (!showmap) {
			$container.overlay("init", {
				callback_show: getMap
			});
			$container.overlay("show");
			showmap = true;
		} else {
			showmap = false;
		}
		return false;
	});
}

var getMap = function () {
	var map = null,
	lat = $("#lat").val(),
	lng = $("#lng").val(),
	zoom = $("#zoom").val();
	
	map = new GMap2(document.getElementById("map"));
	map.removeMapType(G_SATELLITE_MAP);
	map.addMapType(G_PHYSICAL_MAP);
	map.setMapType(G_PHYSICAL_MAP);
	map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new GScaleControl());
	// map.addControl(new GOverviewMapControl());
	map.enableScrollWheelZoom();
	map.setCenter(new GLatLng(lat, lng), 10);
	var point = new GLatLng(lat, lng);
	map.addOverlay(new GMarker(point));
	return false;	
}
