var panoramio = function(data){
	for (var i=0; i < data.photos.length; i++)
		$('#panoramio_photos').append('<a href="' + data.photos[i].photo_url + '"><img src="' + data.photos[i].photo_file_url + '" alt="" /></a>');
}

function updateStars()
{
	var sel;
	var sel_u;

	$("#filter_stars input").attr('disabled', 'disabled');
	$('#filter_stars .spinner_stars').show();

	for (var i=1; i <= 5; i++)
	{
		sel = '#star_' + i;
		sel_u = '#star_u_' + i;

		if( $(sel_u).attr('checked') ) $(sel).val('1');
		else $(sel).val('0');
	}

	$('#filter_form').submit();
}

function calculateTotal() {

	var total = 0;
	var num_guests = 0;

	var value;

	for (var i=0; i < book_rooms.length; i++)
	{
		value = $('#room' + book_rooms[i][0]).val();
		value = parseInt(value);

		total += book_rooms[i][1] * value;
		num_guests += value;
	}

	$('.book_total_price').html(total.toFixed(2) + ' €');

	if (num_guests > 0)
	{
		var dif;
		var append = 0;
		var rows = $('#guest_table tr.guest').length;
		var html;
		html =  '<tr class="guest">';
		html += '<td class="label"><label>' + local.guest_name + '<span class="required">*</span></label></td>';
		html += '<td><input type="text" class="required" name="guest_name[]" value="" /></td>';
		html += '<td class="label"><label>' + local.guest_surname + '<span class="required">*</span></label></td>';
		html += '<td><input type="text" class="required" name="guest_surname[]" value="" /></td>';
		html += '</tr>';

		if(rows > num_guests)
		{
			dif = rows - num_guests;
			dif = rows - dif - 1;
			$('#guest_table tr.guest:gt(' + (dif) + ')').remove();
			$('#guest_title').html(local.guest_title_full);
		}
		else if(rows > 0 && num_guests > rows)
		{
			append = num_guests - rows;

			for (var i=0; i < append; i++)
				$('#guest_table tr.guest:last').after(html);
			$('#guest_title').html(local.guest_title_full);
		}
		else if(rows == 0 && num_guests > rows)
		{
			for (var i=0; i < num_guests; i++)
				$('#guest_table').prepend(html);
			$('#guest_title').html(local.guest_title_full);
		}
	}
	else
	{
		$('#guest_table tr.guest').remove();
		$('#guest_title').html(local.guest_title_empty);
	}
}

function reloadDays(element, date, offset){
	var post;

	if(date == '' && offset)
		post = {date: date, offset: 1};
	else
		post = {date: date};

	$(element).load('/index/days', post);
}

function reloadMonths(element, date, offset){
	var post;
	if(offset)
		post = {date: date, offset: 1};
	else
		post = {date: date};

	$(element).load('/index/months', post);
}

function updateTo(){

	// check if from date is greater than to
	var from = $('#from').val();
	from = from.split('-');

	from[0] = parseInt(from[0], 10); //day
	from[1] = parseInt(from[1], 10) - 1; //month
	from[2] = parseInt(from[2], 10); //year

	var fromDate = new Date(from[2], from[1], from[0], 0, 0, 0, 0);

	var to = $('#to').val();
	to = to.split('-');

	to[0] = parseInt(to[0], 10); //day
	to[1] = parseInt(to[1], 10) - 1; //month
	to[2] = parseInt(to[2], 10); //year

	var toDate = new Date(to[2], to[1], to[0], 0, 0, 0, 0);

	if(fromDate >= toDate){
		// add 1 day
		fromDate.setDate(fromDate.getDate() + 1);

		// update to
		var monthYear = fromDate.getMonth() + 1;
		if(monthYear < 10)
			monthYear = '0' + monthYear;
		else
			monthYear = '' + monthYear;
		monthYear += '-' + fromDate.getFullYear()

		$('#to_month_u option:selected').removeAttr('selected');
		$('#to_month_u option[value="' + monthYear + '"]').attr('selected', 'selected');

		var day = fromDate.getDate();
		if(day < 10)
			day = '0' + day;
		else
			day = '' + day;

		var fullDate = day + '-' + monthYear;

		$('#to').val(fullDate);
		reloadDays('#to_day_u', fullDate);
	}
}

// Calendar

function datepickerSelect(date, cal)
{
	var monthYear = date.split('-');
	monthYear = monthYear[1] + '-' + monthYear[2];

	if(cal.id == 'to')
	{
		$('#to_month_u option:selected').removeAttr('selected');
		$('#to_month_u option[value="' + monthYear + '"]').attr('selected', 'selected');
		reloadDays('#to_day_u', date);
	}
	else
	{
		$('#from_month_u option:selected').removeAttr('selected');
		$('#from_month_u option[value="' + monthYear + '"]').attr('selected', 'selected');
		reloadDays('#from_day_u', date);
	}
}

// Notifications

function show_error(msg, optionalClass){
	if(optionalClass === undefined)
		optionalClass = '';

	var selector = '.notifications' + optionalClass + ':last';

	$(selector).html('<div class="error"><p>' + msg + '</p></div>');
	to_notifications(selector);
}

function show_success(msg){
	$('.notifications:last').html('<div class="success"><p>' + msg + '</p></div>');
	to_notifications();
}

function empty_notifications(){
	$('.notifications').html('');
}

function to_top(){
	$('html, body').animate({scrollTop: 0}, 'fast');
}

function to_notifications(selector){ // optional parameter
	if(selector === undefined)
		scrollToElementifNotVisible('.notifications:last');
	else
		scrollToElementifNotVisible(selector);
}

function scrollToElementifNotVisible(elem)
{
	if(! isScrolledIntoView(elem) )
	{
		var notificationsTop = $(elem).offset().top - 8;
		$('html, body').animate({scrollTop: notificationsTop}, 'fast');
	}
}

// check if element is visible
function isScrolledIntoView(elem){
	var docViewTop = $(window).scrollTop();
	var docViewBottom = docViewTop + $(window).height();

	var elemTop = $(elem).offset().top;
	var elemBottom = elemTop + $(elem).height();

	//return ((elemBottom >= docViewTop) && (elemTop <= docViewBottom)); // check if element is visible
	return ((docViewTop < elemTop) && (docViewBottom > elemBottom)); // check if element is entirely visible
}

// Login

function user_login(loadData)
{
	var params = {
		'load_data': loadData,
		'user_login': $('#user_login').val(),
		'user_password': $('#user_password').val()
	};
	params = jQuery.param(params);

	$.post('/user/login', params, function(data){
		if(data.error == '')
		{
			if(data.redirect == '')
			{
				// load data
				$('#user_id').val(data.id);
				$('#register_email, #register_emailcheck').val(data.email);
				$('#register_name').val(data.name);
				$('#register_surname').val(data.lastname);
				$('#register_phone').val(data.phone);
				// disable login fields
				$('#user_login, #user_password, #register_email, #register_emailcheck, #register_name, #register_surname, #register_phone').attr('disabled', 'disabled');
				$('#book_login, #book_login_user').addClass('disabled');
				$('.form_table tr.focus').removeClass('focus');

				$('#button_book_login').html(local.logout);

				// reload topbar
				$('#user_info').load('/user/infobar');

				empty_notifications();
			}
			else
				location.href = data.redirect;
		}
		else
		{
			show_error(error.login[ data.error ], '.login');
		}

	}, 'json');
}

function user_logout()
{
	$.ajax({
		cache: false,
		url: '/user/logout',
		success: function(){

			// clear data
			$('#user_id, #user_password, #register_email, #register_emailcheck, #register_name, #register_surname, #register_phone').val('');
			// enable login fields
			$('#user_login, #user_password, #register_email, #register_emailcheck, #register_name, #register_surname, #register_phone').removeAttr('disabled');
			$('#book_login, #book_login_user').removeClass('disabled');
			// reload topbar
			$('#user_info').load('/user/infobar');

			$('#button_book_login').html(local.login);
		}
	});
}

function validateRequiredFields(parent)
{
	var valid = true;
	if(parent === undefined){
		parent = '';
	}

	$(parent + ' input.required:text:enabled[value=""], ' + parent + ' input.required:password:enabled[value=""]').each(function(){
		$(this).parent().parent().addClass('focus');
		valid = false;
	});

	// show notification
	if(! valid){
		show_error( error.generic[0] );
	}

	return valid;
}

function validateBookForm()
{
	var valid = true;
	var message = '';
	var notificationClass = '';

	var pattern;

	$('tr.focus').removeClass('focus');

	// check if room is selected

	if( $('table.rooms select option:selected[value!="0"]').length == 0 ){
		valid = false;
		notificationClass = '.rooms';
		message = 0;
	}

	// check empty fields

	if(valid){
		$('input.required:text:enabled[value=""]').each(function(){
			$(this).parent().parent().addClass('focus');
			valid = false;
		});

		notificationClass = '.book';

		// Position of notification
		if(! valid){
			var firstNotif = $('input.required:text:enabled[value=""]:first');

			if( firstNotif.is('[name^=register]') )
				notificationClass = '.book';
			else if( firstNotif.is('[name^=guest]') )
				notificationClass = '.guest';
			else if( firstNotif.is('[name^=card]') )
				notificationClass = '.creditcard';
		}

		message = 1;
	}

	// check email format

	if(valid){
		if( $('input#register_email:enabled').length > 0 ){
			pattern = /^[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
			valid = pattern.test( $('input#register_email').val() );
			if(! valid)
				$('#register_email, #register_emailcheck').parent().parent().addClass('focus');
		}

		notificationClass = '.book';
		message = 2;
	}

	// check email match

	if(valid){
		if( $('input#register_email:enabled').length > 0 ){
			if( $('#register_email').val() != $('#register_emailcheck').val() )
				valid = false;

			if(! valid)
				$('#register_email, #register_emailcheck').parent().parent().addClass('focus');
		}

		notificationClass = '.book';
		message = 3;
	}

	// check credit card

	if(valid){
		pattern = /^\d{16}$/;
		valid = pattern.test( $('#card_number').val() );
		if(! valid)
			$('#card_number').parent().parent().addClass('focus');

		notificationClass = '.creditcard';
		message = 4;
	}

	// check credit card expiration
	if(valid){
		var date = new Date();
		var todayMonth = date.getMonth() + 1; // stars from 0
		var todayYear = date.getFullYear();

		var selMonth = parseInt( $('select#card_month option:selected').val() );
		var selYear = parseInt( $('select#card_year option:selected').val() );

		if(selYear < todayYear){
			valid = false;
		}
		else if(selYear == todayYear){
			if(selMonth < todayMonth)
				valid = false;
		}

		if(! valid)
			$('#card_month').parent().parent().addClass('focus');

		notificationClass = '.creditcard';
		message = 5;
	}

	// show error message

	if(! valid){
		empty_notifications();
		if(notificationClass != '')
			show_error( error.booking[ message ], notificationClass );
		else
			show_error( error.booking[ message ] );
	}

	return valid;
}


function showFlash(message)
{
	$('#loading_flash').append('<p>' + message + '</p>').show();

	$.fancybox({
		'padding'			: 0,
		'href'				: '#loading_flash',
		'transitionIn'		: 'none',
		'transitionOut'		: 'none',
		'showCloseButton'	: false,
		'speedIn'			: 0,
		'speedOut'			: 0,
		'overlayOpacity'	: '0.5',
		'onClosed'			: function(){ $('#loading_flash').hide().html(''); }
	});
}


// DOCUMENT READY

$(document).ready(function(){

	$('#footer-about').click(function(){ $(this).attr('href', '/site/sobre-nosotros'); });
	$('#footer-contact').click(function(){ $(this).attr('href', '/site/contacto'); });
	$('#footer-terms').click(function(){ $(this).attr('href', '/site/terminos-y-condiciones'); });
	$('#footer-help').click(function(){ $(this).attr('href', '/site/ayuda'); });
	$('#my_books').click(function(){ $(this).attr('href', '/book'); });


	$('#show_street_view a').click(function(){
		$('#show_street_view').hide();
		$('#gmap_streetview').show();

		return false;
	});

	$('#calculate_route').submit(function(){
		var start = $('#start_route').val();
		calculateRoute(start, hotelLat, hotelLong);

		$('#gmap_streetview').hide();
		$('#show_street_view').show();
		$('#print_route').show();

		return false;
	});

	$('#print_route').click(function(){
		window.print();
		return false;
	});

	// Flash loading

	if(preloadFlash && $('#loading_flash').length > 0)
	{
		$('#loading_flash').flash({
			swf: '/img/hotelitos/loading.swf',
			width: 560,
			height: 340
		});
	}

	if(isBookingPage)
	{
		// set selected room
		if(search.select != '-1'){
			var element = $('select[id^="room"]:eq(' + search.select + ')');
			$('option:eq(1)', element).attr('selected', 'selected');
			element.trigger('change');
		}
	}

	$('#form_main_search').submit(function(){
		// check if valid search
		if( $('#sid').val() == '' )
		{
			show_error(error.searching[0]);

			return false;
		}
		else
		{
			var where = $('#s').val();
			if(where != '')
				where = local.searching + ' ' + where + ' ...';

			showFlash(where);
		}
	});


	// Search box

	if($('#mini_search').length > 0)
	{
		reloadDays('#from_day_u', search.from);
		reloadDays('#to_day_u', search.to, true);

		reloadMonths('#from_month_u', search.from);
		reloadMonths('#to_month_u', search.to, true);
	}


	$('#from').datepicker(calendarOptions);
	$('#to').datepicker(calendarOptions);
	$('#from').datepicker('option', 'onSelect', datepickerSelect);
	$('#to').datepicker('option', 'onSelect', datepickerSelect);

	$('#from_month_u').change(function(){
		var date = $('#from_month_u option:selected').val();
		date = '01-' + date;

		$('#from_day_u').load('/index/days', {date: date},
		function(){
			date = $('#from_day_u option:first').val() + '-' + $('#from_month_u option:selected').val();
			$('#from').val(date);
			updateTo();
		});
	});

	$('#to_month_u').change(function(){
		var date = $('#to_month_u option:selected').val();
		date = '01-' + date;

		$('#to_day_u').load('/index/days', {date: date},
		function(){
			date = $('#to_day_u option:first').val() + '-' + $('#to_month_u option:selected').val();
			$('#to').val(date);
		});
	});

	$('#from_day_u').change(function(){
		var monthYear = $('#from_month_u option:selected').val();
		var day = $('#from_day_u option:selected').val();
		$('#from').val(day + '-' + monthYear);
		updateTo();
	});

	$('#to_day_u').change(function(){
		var monthYear = $('#to_month_u option:selected').val();
		var day = $('#to_day_u option:selected').val();
		$('#to').val(day + '-' + monthYear);
	});

	// Forms effect

	$('.form_table input[type=text], .form_table input[type=password], .form_table textarea, .form_table select').live('focusin', function(){
		$(this).parent().parent().addClass('focus');
	});
	$('.form_table input[type=text], .form_table input[type=password], .form_table textarea, .form_table select').live('focusout', function(){
		$(this).parent().parent().removeClass('focus');
	});


	// User Edit

	$('#form_edit_user, #form_edit_pass').submit(function(){

		var valid = validateRequiredFields( '#' + $(this).attr('id') );
		if(! valid)
			return false;

		var params = $(this).serialize();

		$.post('/user/edit', params, function(data){
			if(data.redirect != '')
			{
				location.href = data.redirect;
				return;
			}
			else if(data.error != '')
			{
				show_error(error.edituser[ data.error ]);
			}
			else if(data.success != '')
			{
				show_success(success.edituser[ data.success ]);
				$('#user_newpassword, #user_newpasswordcheck').val('');
			}

		}, 'json');

		return false;
	});



	$('#form_login').submit(function(){
		user_login(0);
		return false;
	});

	$('#form_book #user_login, #form_book #user_password').keypress(function(event){
		if(event.keyCode == 13){
			$('#button_book_login').trigger('click');
			return false;
		}
	});

	$('#button_book_login').click(function(){
		if( $('#user_id').val() == '' )
			user_login(1);
		else
			user_logout();
		return false;
	});


	$('.select_book_date').click(function(){
		scrollToElementifNotVisible('#search_container');

		$('#mini_search').css('background-color', '#FFD300').stop().animate({'background-color': '#FFF5BA'}, 3300);
		//$('img.select_book_date_message').fadeIn(3000);
		$('img.select_book_date_message').stop().css({
			'margin-top': '20px',
			'opacity' : '0',
			'display': 'inline'
		}).animate({'opacity': '1', 'margin-top': '0px'}, 1200);

		return false;
	});


	$('.notifications div').live('click', function(){
		$(this).slideUp('fast');
	});




	// load book status via ajax
	var loadingBooksCount = $('tr.loading_book').length;

	if(loadingBooksCount > 0)
	{
		var reservationId;
		var request;

		for (var i=0; i < loadingBooksCount; i++)
		{
			reservationId = $('tr.loading_book:eq(' + i + ') td:first a').text();

			$.get('/book/status/reservation/' + reservationId, function(data){
				$('a.reservationid_' + data.reservation).html(data.status);
			}, 'json');

		}
	}


	if(jq_fancybox)
	{
		// Fancybox

		$('.hotel_photos a').fancybox({
			showCloseButton: true,
			imageScale: true
		});
	}

	if(filters)
	{
		// Slider

		if(filters.pricerange)
		{
			var max;
			if(filters.maxprice) max = filters.maxprice;
			else max = filters.pricerange;

			$("#slider-range").slider({
				range: true,
				min: 0,
				max: filters.pricerange,
				values: [filters.minprice, max],
				slide: function(event, ui)
				{
					$("#amount").html( ui.values[0] + ' € - ' + ui.values[1] + ' €');
				},
				change: function(event, ui)
				{
					$('#minprice').val( ui.values[0] );
					$('#maxprice').val( ui.values[1] );
					$("#slider-range").slider('disable');
					$('#filter_amount .spinner_pricerange').show();
					$('#filter_form').submit();
				}
			});
			$("#amount").html($("#slider-range").slider("values", 0) + ' € - ' + $("#slider-range").slider("values", 1) + ' €');

		}
	}

	// Stars

	$('#star_u_1').change(updateStars);
	$('#star_u_2').change(updateStars);
	$('#star_u_3').change(updateStars);
	$('#star_u_4').change(updateStars);
	$('#star_u_5').change(updateStars);

	// Fixed menu

	var sidebar = $('#filter_continer');
	if(sidebar.length > 0)
	{
		var scrollY;
		var hiddenTop;
		var fixed = false;

		var offsetSidebar = sidebar.offset().top;

		var heightSidebar = sidebar.height();
		var heightFooter = $('.footer').height();
		var heightDoc = $(document).height();

		var limitFixed = heightDoc - (heightFooter + heightSidebar);

		$('#filter_form').css('height', heightSidebar + 'px');

		$(window).scroll(function(){
			scrollY = document.body.scrollTop || document.documentElement.scrollTop || self.pageYOffset;

			if (scrollY > limitFixed)
			{
				hiddenTop = scrollY - limitFixed;
				sidebar.css('position', 'fixed').css('top', '-' + hiddenTop +'px')
			}
			else if (scrollY > offsetSidebar)
			{
				sidebar.css('position', 'fixed').css('top', '0');
			}
			else
			{
				sidebar.css('position', 'relative').css('top', 'auto');
			}
	    });
	}

	// Autocomplete

	var searchWidth = $('#s').width();

	$('#s').autocomplete('/index/autocomplete', {
		minChars: 3,
		width: searchWidth,
		max: 12,
		autoFill: true,
		mustMatch: true,
		selectFirst: true,
		matchContains: true,
		scroll: false,
		scrollHeight: 220,
		formatMatch: function(row)
		{
			name = name[0];
			return name;
		},
		formatItem: function(row, id, num_tot, searchmatch, current)
		{
			name = row[0];

			if(row[3] == 'province') name += ' ' + '(' + local.province + ')';
			else if(row[3] == 'location') name += ' ' + '(' + local.location + ')';
			else if(row[3] == 'hotel') name += ' ' + row[2];

			return name;
		}
	})
	.result(function(event, row)
	{
		if(row)
		{
			$('#sid').val(row[1]);
			$('#sfield').val(row[3]);
		}
	});

	// on book

	$('form#form_book').submit(function(){
		$('#button_book_order').addClass('disabled').attr('disabled', 'disabled').html(local.booking);
		valid = validateBookForm();
		if(! valid)
		{
			$('#button_book_order').removeClass('disabled').removeAttr('disabled').html(local.book);
			return false;
		}
		else
		{
			showFlash(local.booking);
		}
	});

});