(function($){
	//=====================
	// Ayuda en registro
	//=====================
	$.fn.registerAssistant = function(o) {
		o = $.extend({
				left: '415px'
			},o || {});

		return this.each(function(){
			var myself = $(this);
			$('div p.descr',this).each(function() {
				$(this).css({
					background: 'url(images/registertip.gif) 0 0',
					position: 'absolute',
					top: '-5px',
					left: o.left,
					margin: '0'
				})
				.addClass('registro_tip')
				.append('<span style="display: block;height: 8px; background: url(images/registertip.gif) 0 bottom; width: 270px; position: absolute; left: 0;bottom: -8px;"></span>');
				$('input, select',$(this).parent()).focus(function() {
					$('p.descr',$(this).parent()).fadeIn(100);
				})
				.blur(function() {
					$('p.descr',$(this).parent()).hide();
				});
			});
			$('input, select',this).blur(function() {
				if ($(this).hasClass('val_required') && $(this).val() == '') {
					$(this).addClass('rojo');
				} else if ($(this).attr('name') == 'nick') {
					var self = $(this).parent();
					$('small',self).remove();
					self.css({background: 'url(images/cargandomini1.gif) 330px center no-repeat'});
					$.ajax({
						url: "checknick.php",
						dataType: 'xml',
						cache: false,
						data: $('#r_user').val(),
						type: "POST",
						error: function() {
							self.css({background: 'transparent'});
						},
						success: function(xml){
							var result = $('result',xml).text();
							if (result == 'error') {
								self.append('<small style="color: red;">No disponible</small>');
								self.css({background: 'transparent'});
								$('input',self).addClass('rojo');
							} else {
								self.append('<small style="color: green;">Nick disponible</small>');
								self.css({background: 'transparent'});
							}
						}
					});
				} else if ($(this).attr('name') == 'password2' && $('[name=password1]',myself).val() != $(this).val()) {
					$(this).addClass('rojo');
				} else if ($(this).attr('name') == 'password1' && $('[name=password2]',myself).val() == $(this).val()) {
					$(this).removeClass('rojo');
					$('[name=password2]',myself).removeClass('rojo');
				} else if ($(this).attr('name') == 'email' && ! /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test($(this).val())) {
					$(this).addClass('rojo');
				} else if ($(this).attr('name') == 'tel' && $(this).val() != '' && ! /^6\d{8,}$/.test($(this).val())) {
					$(this).addClass('rojo');
				} else {
					$(this).removeClass('rojo');
					$(this).parent().removeClass('rojo');
				}
			})
			.change(function() {
				$(this).removeClass('rojo');
			})
			.keypress(function() {
				$(this).removeClass('rojo');
			});
			$('#r_localidad',this).change(function() {
				if ($(this).val() == 'fuera') {
					$('#r_localidad2').parent().fadeIn(300);
				} else {
					$('#r_localidad2').parent().slideUp(200);
				}
			});
			$('#r_condiciones').scroll(function() {
				$(this).height('300px');
			})
			.click(function() {
				$(this).height('300px');
			});
			$('input[type=submit]',this).click(function() {
				var error = false;
				$('input, select',myself).each(function() {
					if ($(this).hasClass('val_required') && $(this).val() == '' && $(this).parent().css('display') != 'none') {
						$(this).addClass('rojo');
						error=true;
					} else if ($(this).attr('name') == 'nick' && $('small',$(this).parent()).text() == 'No disponible') {
						$(this).addClass('rojo');
						error=true;
					} else if ($(this).attr('name') == 'password2' && $('[name=password1]',myself).val() != $(this).val()) {
						$(this).addClass('rojo');
						error=true;
					} else if ($(this).attr('name') == 'email' && ! /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test($(this).val())) {
						$(this).addClass('rojo');
						error=true;
					} else if ($(this).attr('id') == 'r_sexo1' && !$(this).attr('checked')) {
						if (!$(this).siblings('[name=sexo]').attr('checked')) {
							$('[name=sexo]:first',myself).parent().addClass('rojo');
							error=true;
						}
					} else if ($(this).attr('id') == 'r_sexo2') {
						// ignora
					} else if ($(this).attr('name') == 'tel' && $(this).val() != '' && ! /^6\d{8,}$/.test($(this).val())) {
						$(this).addClass('rojo');
					} else if ($(this).attr('name') == 'acepto' && ! $(this).attr('checked')) {
						error=true;
						alert('Debes aceptar las condiciones de InfoBalear para poder registrarte');
					} else {
						$(this).removeClass('rojo');
						$(this).parent().removeClass('rojo');
					}
				});
				if (!error) {
					$('#form_registro').submit();
				} else {
					alert('Por favor, rellena y/o corrige el formulario antes de continuar');
					return false;
				}
			});
		});
	};
	
	//===========================
	// Pestañas previsión tiempo
	//===========================
	$.fn.elTiempo = function(o) {
		o = $.extend({
				height: '175px',
				menu: '#tiempo_menu'
			},o || {});

		return this.each(function(){
			var myself = $(this);
			$('.tiempo_prevision:not(:eq(2),:eq(3))').pngFix();
			myself.height(o.height);
			myself.children('div:not(:first)').hide();
			$('.tiempo_prevision:eq(2), .tiempo_prevision:eq(3)').pngFix();
			$('a', o.menu).click(function() {
				if ($(this).hasClass('activa')) {
					return false;
				}
				$('.activa', o.menu).removeClass('activa');
				myself.children('div').hide();
				$(this).addClass('activa');
				$($(this).attr('href')).show();
				return false;
			});
		});
	};
	
	//===========================
	// Resumen portada tiempo
	//===========================
	$.fn.resumenTiempo = function(o) {
		return this.each(function(){
			$(this).pngFix();
			$('h3, h4, strong', $(this)).each(function() {
				var t = parseInt($(this).css('top').replace(/px/, ''));
				var l = parseInt($(this).css('left').replace(/px/, ''));
				var n = $(this).clone().css({
					color: '#5989d1',
					top: t+2+'px',
					left: l+1+'px'
				});
				n.children().css({color: '#5989d1'});
				n.insertBefore($(this));
			});
		});
	};
	
	//===========================
	// Calendario
	//===========================
	$.fn.Calendario = function(o) {
		o = $.extend({
				mes: '',
				anyo: '',
				click: false,
				funcion: ''
			},o || {});
			
		return this.each(function(){
			cal_days_labels = ['Lun', 'Mar', 'Mié', 'Jue', 'Vie', 'Sáb', 'Dom'];
			cal_months_labels = ['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'];
			cal_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
			var myself = $(this);
			
			function calActualizar() {
				cal_current_date = new Date();
				var todayDay = cal_current_date.getDate();
				var todayMonth = cal_current_date.getMonth();
				var todayYear = cal_current_date.getFullYear();
				var thisMonth = (isNaN(o.mes) || o.mes == null || o.mes == '') ? cal_current_date.getMonth() : parseInt(o.mes);
				var thisYear = (isNaN(o.anyo) || o.anyo == null || o.anyo == '') ? cal_current_date.getFullYear() : parseInt(o.anyo);
				var todayMarker = (thisYear == todayYear && thisMonth == todayMonth) ? true : false;
				var firstDay = new Date(thisYear, thisMonth, 1);
				var startingDay = (firstDay.getDay() > 0) ? firstDay.getDay() : 7;
				var monthLength = cal_days_in_month[thisMonth];
				// calcula año bisiesto
				if (thisMonth == 1) {
					if ((thisYear % 4 == 0 && thisYear % 100 != 0) || thisYear % 400 == 0) {
						monthLength = 29;
					}
				}
				var monthName = cal_months_labels[thisMonth];
				$('.calendario p span',myself).html(monthName + '&nbsp;' + thisYear);
				
				var day = 1;
				for (var i = 0; i <= 41; i++) {
					$('.calendario td:eq('+i+')',myself).html('').removeClass('hoy').each(function() {
						var cont = '';
						if (day <= monthLength && i+1 >= startingDay) {
							if (todayMarker && day == todayDay) {
								$(this).addClass('hoy');
							}
							if (o.click) {		
								cont += '<a href="#" onclick="'+o.funcion+'('+day+','+(thisMonth+1)+',\''+monthName+'\','+thisYear+'); return false;">';
								cont += day;
								cont += '</a>';
							} else {
								cont += day;
							}
							day++;
						}
						$(this).append(cont);
					});
				}
				$('p a:eq(0)',myself).unbind('click').click(function() {
					var prevmonth;
					var prevyear;
					if (thisMonth == '0') {
						prevmonth = 11;
						prevyear = thisYear - 1;
					} else {
						prevmonth = thisMonth - 1 +'';
						prevyear = thisYear;
					}
					calActualizar(o.mes = prevmonth, o.anyo = prevyear);
					$('td',myself).removeClass('clicked');
					return false;
				});
				$('p a:eq(1)',myself).unbind('click').click(function() {
					var nextmonth;
					var nextyear;
					if (thisMonth == 11) {
						nextmonth = '0';
						nextyear = thisYear + 1;
					} else {
						nextmonth = thisMonth + 1;
						nextyear = thisYear;
					}
					calActualizar(o.mes = nextmonth, o.anyo = nextyear);
					$('td',myself).removeClass('clicked');
					return false;
				});
				$('table a',myself).click(function() {
					$('table a',myself).not($(this)).parent().removeClass('clicked');
					$(this).parent().addClass('clicked');
				});
			}
			
			var html = '<div class="calendario">';
			html += '<p><a href="#" style="left: 0;">«</a><span>&nbsp;</span><a href="#" style="right: 0; text-align: right;">»</a></p>';
			html += '<ul>';
			for (var i = 0; i <= 6; i++) {
				html += '<li>';
				html += cal_days_labels[i];
				html += '</li>';
			}
			html += '</ul>';
			html += '<table cellspacing="1">';
			for (var i = 0; i < 6; i++) {
				html += '<tr>';
				for (var j = 0; j <= 6; j++) {
					html += '<td></td>';
				}
				html += '</tr>';
			}
			html += '</tr></table>';
			
			$(this).html(html);
			calActualizar();
		});
	};
	
	//===========================
	// Cambiar tamaño de textarea
	//===========================
	$.fn.resizeTextarea = function() {
		return this.each(function() {
			var myself = $(this);
			myself.after(
				$('<div class="resizetextbar"><span></span></div>')
				.bind('mousedown', function(e) {
					var h = myself.height();
					var y = e.clientY;
					var moveHandler = function(e) {
						myself.height(Math.max(20, e.clientY + h - y));
					};
					var upHandler = function(e) {
						$('html')
							.unbind('mousemove',moveHandler)
							.unbind('mouseup',upHandler);
					};
					$('html')
						.bind('mousemove', moveHandler)
						.bind('mouseup', upHandler);
				})
				.mouseover(function() {
					$(this).addClass('resizetextbarhov');
				})
				.mouseout(function() {
					$(this).removeClass('resizetextbarhov');
				})
			);
		});
	}
	
	//===========================
	// Estrellas de votacion
	//===========================
	$.fn.estrellas = function(o) {
		o = $.extend({
				votourl: '',
				thisid: '',
				usrid: 0,
				puntos: 0,
				domresult: ''
			},o || {});
			
		return this.each(function() {
			var myself = $(this);
			var r = '<ul>';
			r += '<li class="estrella_puntos" title="Puntuación: '+o.puntos+'" style="width: '+(o.puntos*20)+'%;"></li>';
			if (o.votourl != '') {
				var z = 2;
				for (i = 5; i > 0; i--) {
					r += '<li style="width: '+((i)*20)+'%;"><a href="#" title="'+(i)+'/5" style="z-index: '+z+';">'+(i)+'</a></li>';
					z++;
				}
				r += '</ul>';
				myself.addClass('estrellas').append(r);
				$('a',myself).click(function() {
					if (o.usrid == 0) {
						$(o.domresult).text('Inicia tu sesión para votar');
						return false;
					}
					$('html').css({cursor:'progress'});
					function returnError(msg) {
						$(o.domresult).text(msg);
						$('html').css({cursor:'auto'});
					}
					$.ajax({
						url: o.votourl,
						dataType: 'xml',
						cache: false,
						data: 'thisid='+o.thisid+'&usrid='+o.usrid+'&puntos='+$(this).text(),
						type: "POST",
						error: function() {
							returnError('Error al votar');
						},
						success: function(xml){
							var iserror = $('error',xml).text();
							if (iserror) {
								returnError(iserror);
							} else {
								$(o.domresult).text($('ok',xml).text());
								$('html').css({cursor:'auto'});
							}
						}
					});
					return false;
				});
			} else {
				r += '</ul>';
				myself.addClass('estrellas').append(r);
			}
		});
	}
})(jQuery);

//===========================
// Añadir comentarios
//===========================
function enviarComment() {
	var myself = $('#newcomment form');
	contentvalid = /[a-zA-Z0-9]/;
	if (!contentvalid.test($('textarea',myself).val())) {
		alert('Escribe un comentario antes de pulsar el botón de Enviar');
		return;
	}
	$('input[type=submit]',myself).parent().append('<img alt="Enviando..." src="images/cargando1.gif" />').children('input').hide();
	function returnError(msg) {
		alert(msg);
		$('img:last',myself).remove();
		$('input[type=submit]',myself).show();
	}
	$.ajax({
		url: "enviarcomment.php",
		dataType: 'xml',
		cache: false,
		data: myself.serialize(),
		type: "POST",
		error: function() {
			returnError('No se ha podido enviar el comentario. Por favor, inténtalo otra vez.');
		},
		success: function(xml){
			var iserror = $('error',xml).text();
			if (iserror) {
				returnError(iserror);
			} else {
				$('.comentario:last').after($('<div class="comentario"></div>').hide());
				var c = $('.comentario:last');
				c.append('<p>'+$('comment',xml).text()+'</p>');
				c.append('<p class="who">#'+$('num',xml).text()+' - '+$('fecha',xml).text()+' - Por <a href="/gente/'+$('usrnick',xml).text()+'">'+$('usrnick',xml).text()+'<img alt="" src="'+$('usrimg',xml).text()+'" /></a></p>');
				c.wrapInner('<div></div>');
				c.fadeIn(1000);
				$('img:last',myself).remove();
				$('input[type=submit]',myself).show();
				$('textarea',myself).val('');
				$('#newcomment strong').after('<p class="msgok" id="_commentok" >¡Tu comentario se ha añadido!</p>');
				var mytimer = setTimeout("$('#_commentok').fadeOut(1000,function() { $(this).remove() })",5000);
			}
		}
	});
}

function mostrarMenu(mid) {
	var menu = document.getElementById(mid);
	menu.style.display = 'block';
}
function ocultarMenu(mid) {
	var menu = document.getElementById(mid);
	menu.style.display = 'none';
}
function clickFarmacias(j,m,F,Y) {
	$('#farmacia_select span').html(j + ' de ' + F + ' de ' + Y + ' en');
	$('#farmacia_dia').val(j);
	$('#farmacia_mes').val(m);
	$('#farmacia_anyo').val(Y);
}
function loadFarmacias() {
	var municipio = $('#farmacia_municipio').val();
	var dia = $('#farmacia_dia').val();
	var mes = $('#farmacia_mes').val();
	var anyo = $('#farmacia_anyo').val();
	$('#farmacia_select a').hide();
	$('#farmacia_select').append('<em>Buscando...</em>');
	$('#farmacias_lista').empty().css({background: 'url(images/cargando1.gif) no-repeat center 10px', height: '136px'});
	function returnError(msg) {
		$('#farmacias_lista').css({background: 'transparent'}).html('<p class="error">'+msg+'</p>');
		$('#farmacia_select em').remove();
		$('#farmacia_select a').show();
	}
	$.ajax({
		url: "index.cgi?accion=xml",
		dataType: 'xml',
		cache: false,
		data: $('#farmacia_select').serialize(),
		type: "POST",
		error: function() {
			returnError('Error al cargar la lista, por favor, inténtalo otra vez.');
		},
		success: function(xml){
			var iserror = $('error',xml).text();
			if (iserror) {
				returnError(iserror);
			} else {
				var l = '<h2>Farmacias de guardia en '+municipio+' '+dia+'/'+mes+'/'+anyo+'</h2>';
				$('grupo',xml).each(function() {
					l += '<h3>' + $(this).attr('nombre') + '</h3>';
					l += '<ul>';
					$('farmacia',$(this)).each(function() {
						l += '<li><strong>'+$(this).attr('nombre')+'</strong><span>'+$(this).attr('tel')+'</span><a target="_blank" href="/callejero/?direccion='+$(this).attr('dir')+', Illes Balears">'+$(this).attr('dir')+'</a></li>';
					});
					l += '</ul>';
				});
				$('#farmacia_select em').remove();
				$('#farmacia_select a').show();
				$('#farmacias_lista').css({background: 'transparent', height: 'auto'}).html(l);
				$('#farmacias_lista li').css({cursor: 'pointer'}).click(function() {
					window.open($(this).children('a').attr('href'));
				});
			}
		}
	});

}
var _historicoLoteriasActive = false;
function historicoLoterias(j,m,F,Y) {
	if (_historicoLoteriasActive == true) {
		return;
	}
	_historicoLoteriasActive = true;
	$('#loterias li p').hide();
	$('#loterias_quiniela ul').hide();
	$('#loterias li').append('<img alt="Cargando datos" src="images/cargando1.gif" class="_cargando" style="position: absolute; bottom: 20px; left: 10px;" />');
	$('#loterias_quiniela').append('<img alt="Cargando datos" src="images/cargando2.gif" class="_cargando" style="margin: 130px 0 0 141px;" />');
	function returnError(msg) {
		$('#loterias li img._cargando, #loterias_quiniela img._cargando').remove();
		$('#loterias li p, #loterias_quiniela ul').show();
		alert(msg);
		_historicoLoteriasActive = false;
	}
	$.ajax({
		url: "getloterias.php",
		dataType: 'xml',
		cache: false,
		data: 'dia='+j+'&mes='+m+'&anyo='+Y,
		type: "POST",
		error: function() {
			returnError('Error al cargar la lista, por favor, inténtalo otra vez.');
		},
		success: function(xml){
			var iserror = $('error',xml).text();
			if (iserror) {
				returnError(iserror);
			} else {
				$('loteria',xml).each(function(i) {
					var li = $('#loterias li:eq('+i+')');
					var comb = $('combinacion',$(this)).attr('num').split(/,/);
					var c = '<p>';
					for (i = 0; i < comb.length; i++) {
						c += '<span>'+comb[i]+'</span>';
					}
					$('sub',$(this)).each(function() {
						c += '<strong>'+$(this).attr('name')+'</strong>';
						c += '<span>'+$(this).attr('num')+'</span>';
					});
					c += '</p>';
					$('em',li).html($(this).attr('fecha'));
					$('p', li).remove();
					$('#loterias li img._cargando').remove();
					$(li).append(c);
				});
				var q = '<ul>';
				$('#loterias_quiniela p').html($('quiniela',xml).attr('fecha'));
				$('quiniela posicion',xml).each(function() {
					q += '<li><strong>'+$(this).attr('num')+'</strong><em class="q1">'+$(this).attr('name1')+'</em><em>'+$(this).attr('name2')+'</em><span class="p'+$(this).attr('res')+'">'+$(this).attr('res')+'</span></li>';
				});
				q += '</ul>';
				$('#loterias_quiniela ul, #loterias_quiniela img._cargando').remove();
				$('#loterias_quiniela').append(q);
				_historicoLoteriasActive = false;
			}
		}
	});
}

/*================
 Document.ready
 ===============*/
$(function() {
	$('#form_registro').registerAssistant();
	$('#tiempo_semana').elTiempo();
	$('#tiempo_resumen').resumenTiempo();
	$('.tiempo_playa').pngFix();
	$('#farmacia_cal').Calendario({click: true, funcion: 'clickFarmacias'});
	$('#loterias_cal').Calendario({click: true, funcion: 'historicoLoterias'});
	$('#traduccion, #traductor_source').resizeTextarea();
	// Limpiar campos de formularios al hacer click
	$('.clearonclick').each(function() {
		var def = $(this).val();
		$(this)
			.css({color: '#888888'})
			.click(function() {
				if ($(this).val() == def) {
					$(this).val('');
				}
				$(this).css({color: '#000000'})
			})
			.blur(function() {
				if ($(this).val() == '') {
					$(this).val(def).css({color: '#888888'});
				}
			});
	});
});
