/**
 * This method is used to load all the campings of one province or community
 * using Tendumi's API.
 */

var campings;
var filtered_campings;
var actual_page_campings;
var campings_per_page;
var selected_page = 1;
var prevText = '';
var nextText = '';
var priceFilterMin = 0;
var priceFilterMax = 60;
var selected_min_price = 0;
var selected_max_price = 60;
var max_features_filters = 5;
var selected_filters = new Array();
var selected_order = 1;
var showing_camping_list_map = false;
var show_onload_min_campings = 100;

/**
 * The method that queries the server using ajax to get the list of campings.
 * It is used for communities, provinces, cities and search.
 */
function loadCampings(){
	$.ajax(
			{
				url: $('#query_api_campings').attr('value'),
			    data: ({sfUserId: 2}),
			    dataType: "json",
			    beforeSend: function(){
					setLoadinfImage(true);
				},
				complete: function(){
					setLoadinfImage(false);
				},
				success: function (data, status){
					$(".resultcount").prepend(data.campings.length);
					if(data.total > 0){
						campings = data.campings;
						filtered_campings = campings;
						campings_per_page = data.pagination;
						prevText = data.pagination_prev_text;
						nextText = data.pagination_next_text;
						drawCampings();
						manageCampingListFilters();
					}else{
						$('#rightmain').append(data.no_results);
						$('.inactivesecond').remove();
					}
				}
			});
}

/**
 * The method that queries the server using ajax to get the list of campings.
 * It is used for communities, provinces, cities and search.
 */
function loadActualPageCampings(campingsids){
	$.ajax(
			{
				url: $('#actual_page_campings_api').attr('value') + campingsids + "/-1/-1/-1",
			    data: ({sfUserId: 2}),
			    dataType: "json",
			    beforeSend: function(){
			    	
				},
				complete: function(){

				},
				success: function (data, status){
					actual_page_campings = data.campings;
					drawCampingsList();
				}
			});
}

/**
 * Draws the campings on the list starting from the pagination given.
 * @param pagination
 */
function drawCampings(){
	if($('#noresultsone') != null){
		$('#noresultsone').fadeOut();
		$('#noresultstwo').fadeOut();
		$('#noresultsone').remove();
		$('#noresultstwo').remove();
	}
	if(showing_camping_list_map){
		$('#mapresult').fadeOut();
	}
	$('.activesecond').attr('class', 'inactivesecond');
	$('.inactivefirst').attr('class', 'activefirst');
	$('div.sort,div.pagination').fadeIn();
	
	if($('#commentnocamping') != null){
		$('#commentnocamping').remove();
	}
	if($('#results').children().size() > 0){
		$("#results").fadeOut();
		$("#results").empty();
	}
	$("#results").hide();
	if(filtered_campings.length == 0){
		var pNoCampings1 = $('<p class="noresults" id="noresultsone">No hemos encontrado el camping que buscas.</p>');
		var pNoCampings2 = $('<p id="noresultstwo">¡Espera, seguro que podemos hacer algo! <br />Prueba a buscar con otras palabras o a utilizar otros filtros.</p>');
		$('#rightmain').append(pNoCampings1);
		$('#rightmain').append(pNoCampings2);
	}else{
		var counter = 1;
		var campingsid = "";
		$.each(filtered_campings, function(i, camping) {
			if(counter >= campings_per_page * (selected_page-1) && counter < campings_per_page * selected_page){
				campingsid += camping.id + "-";
			}
			counter++;
		});
		campingsid = campingsid.substring(0, campingsid.length-1);
		loadActualPageCampings(campingsid);
	}
}

function drawCampingsList(){
	switch(selected_order){
		case 1:
			actual_page_campings.sort(orderByPriceAsc);
			break;
		case 2:
			actual_page_campings.sort(orderByPriceDesc);
			break;
		case 3:
			actual_page_campings.sort(orderByNameAsc);
			break;
		case 4:
			actual_page_campings.sort(orderByNameDesc);
			break;
		default:
			actual_page_campings.sort(orderByNameAsc);
			break;
	}
	$.each(actual_page_campings, function(i, camping) {	
		var li = $('<li></li>');
		var aImg = $('<a></a>');
		aImg.attr('href', camping.url);
		aImg.attr('title', camping.name);
		aImg.attr('class', 'campingphoto');
		var img = $('<img />');
		img.attr('alt', camping.name);
		img.attr('src', camping.picture);
		aImg.append(img);
		li.append(aImg);
		
		var h3 = $('<h3></h3>');
		var aH3 = $('<a></a>');
		aH3.html(camping.name);
		aH3.attr('href', camping.url);
		h3.append(aH3);
		li.append(h3);
		
		var p = $('<p></p>');
		p.attr('class', 'detail');
		p.html(camping.city + ", ");
		var aTitle = $('<a></a>');
		aTitle.attr('href', camping.province_url);
		aTitle.attr('title', camping.name);
		aTitle.html(camping.province);
		p.append(aTitle);
		li.append(p);

		var divstars = $('<div></div>');
		divstars.attr('class', 'stars');
		var divstars11 = $('<div></div>');
		divstars11.attr('style', 'cursor: default;');
		divstars11.attr('id', 'sstars' + camping.id);
		for(var i = 1; i <= 5; i++){
			var imgstars111 = $('<img/>');
			imgstars111.attr('class', 'sstars' + camping.id);
			imgstars111.attr('alt', i);
			imgstars111.attr('id', 'sstars' + camping.id + '-' + i);
			if(i <= camping.stars){
				imgstars111.attr('src', '/img/star-on.png');
			}else if(i < camping.stars && camping.stars > i){
				imgstars111.attr('src', '/img/star-half.png');
			}else{
				imgstars111.attr('src', '/img/star-off.png');
			}
			divstars11.append(imgstars111);
		}
		var hidden = $('<input/>');
		hidden.attr('type', 'hidden');
		hidden.attr('id', 'sstars' + camping.id + '-score');
		hidden.attr('name', 'score');
		hidden.attr('value', camping.stars);
		divstars11.append(hidden);
		divstars.append(divstars11);
		var divStarsValue = $('<div></div>');
		divStarsValue.attr('class', 'invisible');
		divStarsValue.attr('id', 'stars' + camping.id + 'value');
		divStarsValue.html(camping.stars);
		divstars.append(divStarsValue);
		li.append(divstars);
		
		var divcomments = $('<div></div>');
		divcomments.attr('class', 'comments');
		var aComments = $('<a></a>');
		aComments.attr('href', camping.url + "#hreviews");
		aComments.html(camping.comments);
		divcomments.append(aComments);
		li.append(divcomments);
		
		if(camping.price_avg != null){
			var divPrice = $('<div></div>');
			divPrice.attr('class', 'moredetails');
			var pPrice = $('<p></p>');
			pPrice.attr('class', 'price');
			pPrice.append(camping.price_from_text + " ");
			var spanPrice1 = $('<span></span>');
			spanPrice1.attr('class', 'pricenum');
			spanPrice1.append(camping.price_avg + " ");
			var spanPrice2 = $('<span></span>');
			spanPrice2.attr('class', 'currency');
			spanPrice2.html('€');
			spanPrice1.append(spanPrice2);
			pPrice.append(spanPrice1);
			divPrice.append(pPrice);
			li.append(divPrice);
		}
		$("#results").append(li);
	});
	$("#results").fadeIn(function(){
		drawPagination();
	});
}

/**
 * Draws the pagination.
 */
function drawPagination(){
	$('.pagination').remove();
	if(filtered_campings.length > campings_per_page){
		var divPagination = $('<div></div>');
		divPagination.attr('class', 'pagination');
		var ulPagination = $('<ul></ul>');
		divPagination.append(ulPagination);
		var sumPage = 0;
		if(filtered_campings.length%campings_per_page > 0){
			sumPage = 1;
		}
		var pages = Math.floor(filtered_campings.length/campings_per_page)+sumPage;
		var liPrev = $('<li></li>');
		var aPrev = $('<a></a>');
		if(selected_page == 1){
			aPrev.attr('href', 1);
		}else{
			var prevPage = parseInt(selected_page)-1;
			aPrev.attr('href', prevPage);
		}
		aPrev.html('« ' + prevText);
		liPrev.append(aPrev);
		ulPagination.append(liPrev);
		var paint_first_dots = selected_page-4 > 1;
		var painted_first_dots = false;
		var paint_last_dots = parseInt(selected_page)+4 < pages;
		var painted_last_dots = false;
		for(var i = 1; i <= pages; i++){
			var li = $('<li></li>');
			if(i==1 || i==selected_page-3 || i==selected_page-2 || i==selected_page-1 || i==selected_page || 
					i==parseInt(selected_page)+1 || i==parseInt(selected_page)+2|| i==parseInt(selected_page)+3 || i==pages){
				if(i == selected_page){
					var spanCorner = $('<span></span>');
					spanCorner.attr('class', 'corner');
					var spanCurrent = $('<span></span>');
					spanCurrent.attr('class', 'current');
					spanCurrent.html(i);
					spanCorner.append(spanCurrent);
					li.append(spanCorner);
				}else{
					var a = $('<a></a>');
					a.attr('href', i);
					a.html(i);
					li.append(a);
				}
				
			}else{
				if(i > 1 && i < selected_page -3 && paint_first_dots && !painted_first_dots){
					li.html('...');
					painted_first_dots = true;
				}
				if(i > parseInt(selected_page) + 3  && i < pages && paint_last_dots && !painted_last_dots){
					li.html('...');
					painted_last_dots = true;
				}
			}
			ulPagination.append(li);
		}
		var liNext = $('<li></li>');
		var aNext = $('<a></a>');
		if(selected_page == pages){
			aNext.attr('href', pages);
		}else{
			var nextPage = parseInt(selected_page)+1;
			aNext.attr('href', nextPage);
		}
		aNext.html(nextText + ' »');
		liNext.append(aNext);
		ulPagination.append(liNext);
		$('#rightmain').append(divPagination);
		managePaginationClicks();
	}
}

/**
 * This function is used to manage the clicks over the pagination.
 */
function managePaginationClicks(){
	$('.pagination').children('ul').children('li').children('a').click(function(){
		$('.pagination').remove();
		selected_page = $(this).attr('href');
		drawCampings();
		$('html, body').animate({scrollTop:0}, 500);
		return false;
	});
}
/**
 * This method manages all the filters shown in the campings lists.
 */
function manageCampingListFilters(){
	$.each($('.filtersect ul li'), function(i, feature) {
		var counterfeature = 0;
		for(var j = 0; j < filtered_campings.length; j++){
			if(filtered_campings[j].features != null){
				if(filtered_campings[j].features.indexOf(";" + $(this).children('input').attr('id') + ";") != -1){
					counterfeature++;
				}
			}
		}
		$(this).children('span').html(counterfeature);
		if(counterfeature == 0){
			$(this).children('input').attr('disabled', 'disabled');
			$(this).children('label').addClass('disable');
		}
	});
	$('.filtersect').each(function(index1){
		$(this).children('ul').children('li').each(function(index2) {
			if(index2 >= max_features_filters){
				$(this).hide();
			}
		});
	});
	$('.filtersect ul li input').click(function(){
		$('html, body').animate({scrollTop:0}, 500);
		if(!$(this).attr('checked')){
			var new_selected_filters = new Array();
			for(var i = 0; i < selected_filters.length; i++){
				if(selected_filters[i] != $(this).attr('id')){
					new_selected_filters[new_selected_filters.length] = selected_filters[i];
				}
			}
			selected_filters = new_selected_filters;
		}else{
			selected_filters[selected_filters.length] = $(this).attr('id');	
		}
		var filterstext = '';
		for(var j = 0; j < selected_filters.length; j++){
			filterstext = filterstext + selected_filters[j] + ';';
		}
		applyFilters();
		selected_page = 1;
		$('.pagination').remove();
		drawCampings();
		recalculateCampingsPerFilter();
	});
	$('.filtersect p a').each(function(){
		var opened = false;
		$(this).click(function(){
			var text = $(this).html();
			if(opened){
				$(this).parent().parent().children('ul').children('li.invisible').slideUp();
				text = "otras " + text.substring(text.indexOf(" ")+1);
				$(this).html(text);
				opened = false;
			}else{
				$(this).parent().parent().children('ul').children('li.invisible').slideDown();
				$(this).html(text);
				text = "ocultar " + text.substring(text.indexOf(" ")+1);
				$(this).html(text);
				opened = true;
			}
			
			return false;
		});
	});
}

function recalculateCampingsPerFilter(){
	//Calculate again the number of campings per feature
	$.each($('.filtersect ul li'), function(i, feature) {
		var counterfeature = 0;
		for(var j = 0; j < filtered_campings.length; j++){
			if(filtered_campings[j].features.indexOf(";" + $(this).children('input').attr('id') + ";") != -1){
				var hasSelectedFeatures = true;
				findfeatures:
				for(var l = 0; l < selected_filters.length; l++){
					if(filtered_campings[j].features.indexOf(";" + selected_filters[l]) == -1){
						hasSelectedFeatures = false;
						break findfeatures;
					}
				}
				if(hasSelectedFeatures){
					counterfeature++;
				}
			}
		}
		$(this).children('span').html(counterfeature);
		if(counterfeature == 0){
			$(this).children('input').attr('disabled', 'disabled');
			$(this).children('label').addClass('disable');
		}else{
			if($(this).children('input').attr('disabled')){
				$(this).children('input').removeAttr('disabled');
			}
			if($(this).children('label').attr('class').indexOf('disable') != -1){
				$(this).children('label').removeClass('disable');
			}
		}
	});
}

/**
 * This function reads the values of all the filters and changes the filtered_campings array.
 * @returns
 */
function applyFilters(){
	var count = 0;
	filtered_campings = new Array();
	var subSearchValue = $('#subSearchform').children().first().val();
	$.each(campings, function(i, camping) {
		var boolSubSearchOk = true;
		if(subSearchValue != null && subSearchValue != ''){
			if(camping.name.toLowerCase().indexOf(subSearchValue.toLowerCase()) != -1){
				boolSubSearchOk = true;
			}else{
				boolSubSearchOk = false;
			}
		}
		if(boolSubSearchOk && ((camping.price_avg == null && selected_min_price == 0) || 
				(camping.price_avg >= selected_min_price && camping.price_avg <= selected_max_price))){
			if(selected_filters.length > 0){
				var found = true;
				for(var i = 0; i < selected_filters.length; i++) {
					if(camping.features != null){
						if(camping.features.indexOf(";" + selected_filters[i] + ";") == -1){
							found = false;
						}
			        }
			    }
				if(found){
	        		filtered_campings[count++] = camping;
				}
			}else{
				filtered_campings[count++] = camping;
			}
		}
	});
}

/**
 * Manages the google maps shown on each camping page.
 */
function manageMap(){
	if($('#lat').val() != '' && $('#lon').val() != '' && $('#lat').val() != 0 && $('#lon').val() != 0){
		if (GBrowserIsCompatible()) {
			
			var map = new GMap2(document.getElementById("map"));
			map.setCenter(new GLatLng($('#lat').val(), $('#lon').val()), 11);
			var iconMark  = new GIcon(G_DEFAULT_ICON);
		   	iconMark.image = "/img/pin_map_google.png";  
		   	var iconSizeMark = new GSize(28,37);
		   	iconMark.iconSize = iconSizeMark; 
		   	var camping = new GMarker(new GLatLng($('#lat').val(), $('#lon').val()),iconMark); 
			map.setUIToDefault();
			
			var camping_html =
			'<div style=\"padding-right:10px;\">' + $('.ribbon').first().text() + '</div>';
			//var camping = new GMarker(new GLatLng($('#lat').val(), $('#lon').val()));
			//GEvent.addListener(camping, "click", function(){camping.openInfoWindowHtml(camping_html);});
			
			map.addOverlay(camping);
		}
	}
}

function manageStars(){
	//Actions bar
	var startvalue = $("#starsvalue").html();
	var userid = -1;
	if($('div [id="user_id"]').html() != ''){
		userid = $('div [id="user_id"]').html();	
	}
	//Action bar
	$('#sstars2').raty({
		half: true,
		hintList: ['1', '2', '3', '4', '5'],
		start: startvalue,
		click: function(score) {
		$.ajax({
			  type: "POST",
			  url: $('div [id="urlajaxstars"]').html(),
			  data: "score=" + score + "&camping_id=" + $('div [id="camping_id"]').html() + "&user_id=" + userid,
			  success: function(data) {
			    $.fn.raty.readOnly(true, '#sstars2');
			  }
			});
		}
	});
	
	var campingcommentformvalue = startvalue;
	if($('#comment_stars').val() != null && $('#comment_stars').val() != ''){
		campingcommentformvalue = $('#comment_stars').val();
	}
	//Comment form
	$('#starscomment').raty({
		half: true,
		hintList: ['1', '2', '3', '4', '5'],
		start: campingcommentformvalue,
		click: function(score) {
			$('#comment_stars').val(score);
		}
	});
	
	//User comments
	manageUserCommentsStars();
}

function manageUserCommentsStars(){
	if($('div [id^="sstarscomment"]') != null){
		$('div [id^="sstarscomment"]').each(function(index) {
		    var starcommentvalue = $(this).attr('id').substring(1, $(this).attr('id').length) + "value";
		    $(this).raty({
				half: true,
				hintList: ['1', '2', '3', '4', '5'],
				start: $('div [id="' + starcommentvalue + '"]').html(),
				readOnly: true 
			});
		});
	}
}

function manageSummaryStars(){
	if($('div [id^=sstars]') != null){
		$('div [id^=sstars]').each(function(index) {
			var starcommentvalue = $(this).attr('id').substring(1, $(this).attr('id').length) + "value";
			$(this).raty({
				half: true,
				hintList: ['1', '2', '3', '4', '5'],
				start: $('div [id="' + starcommentvalue + '"]').html(),
				readOnly: true
			});
		});
	}
}

function deleteStarsTitle(){
	if($('div [id^=sstars]') != null){
		$('div [id^=sstars]').removeAttr('title');
	}
}

function managePictures(){
	$('.gallery a').lightBox({
		txtImage: '',
		txtOf: '/'
	   });
}

function displayWeather(){
	$('#weather').weatherfeed([$('#yahoocode').html()]);
}

function displayPanoramio(){
	if($('#lat').val() != '' && $('#lon').val() != ''){
		var lat = $('#lat').val();
		var minlat = lat-0.01; minlat = minlat.toFixed(2);
		var maxlat = lat*1 + 0.01; maxlat = maxlat.toFixed(2);
		var lon = $('#lon').val();
		var minlon = lon-0.01; minlon = minlon.toFixed(2);
		var maxlon = lon*1 + 0.01; maxlon = maxlon.toFixed(2);
		var url = "http://www.panoramio.com/map/get_panoramas.php?order=popularity&set=full&from=0&to=8&minx=" + minlon + "&miny=" + minlat + "&maxx=" + maxlon + "&maxy=" + maxlat + "&size=square";
		$.getJSON('/utilities/getjson?request=' + escape(url), function(data) {{}
			var thePicsHTML = "";
			if(data.photos.length > 0){
				$("#thepics").parent().removeClass("invisible");
		       	$.each(data.photos, function(i, thePhoto) {	
		     		thePicsHTML +="<a href='" + thePhoto.photo_url + "' target='_blank'>"
			        thePicsHTML +="<img src='" + thePhoto.photo_file_url + "' alt='" + thePhoto.photo_title + " - " + thePhoto.owner_name + "'/>";
		   	        thePicsHTML += "</a>";
		   		});
				$("#thepics").html(thePicsHTML);
			}
		});
	}
}


function manageSearch(){
	$("#search").attr("autocomplete", "off");
	if($('#defaultvalue').val() != $('#search').val()){
		$('#search').addClass('focustext');
	} 
	var searchInputValue = $('#defaultvalue').val();
	$('#search').focus(function(){
		$(this).addClass('focustext');
		if($(this).val() == searchInputValue){
			$(this).val('');
		}
	});
	$('#search').blur(function(){
		if($(this).val() == ''){
			$(this).removeClass('focustext');
			$(this).val(searchInputValue);
		}
	});
	$("#search").keyup(function(){
			$("#searchid").val("");
			var str = "";
			$.ajax({
				type: "POST",
				url: "/search/autosuggest",
				data: "q=" + $(this).val(),
				success: function(data) {
				    str = data;
					var results = eval(str);
	
		    		$( "#search" ).autocomplete({
		    			minLength: 3,
		    			source: results,
		    			focus: function( event, ui ) {
		    				//$("#search").val( ui.item.label );
		    				return false;
		    			},
		    			select: function( event, ui ) {
		    				$("#searchid").val(ui.item.value);
		    				$("#searchtype").val(ui.item.type);
		    				$("#search").val(ui.item.label);
		    				window.location = ui.item.url;
		    				return false;
		    			}
		    		})
		    		.data( "autocomplete" )._renderItem = function( ul, item ) {
		    			return $( "<li></li>" )
		    				.data( "item.autocomplete", item )
		    				.append( "<a>" + item.label + " (" + item.type + ")</a>" )
		    				.appendTo( ul );
		    		};
				}
			});
	});
	$("#searchform").submit(function(){
		if($("#search").val() == null || $("#search").val()  == searchInputValue){
			return false;
		}else{
			if($("#searchid").val() == null || $("#searchid").val() == "" || 
					$("#searchtype").val() == null || $("#searchtype").val() == ""){
				//These inputs are delete for not having the values on the URL
				$("#searchtype").remove();
				$("#searchid").remove();
				$("#defaultvalue").remove();
			}
		}
	});
}

function manageSubSearch(){
	$("#subSearchFormButton").click(function(){
		applySubSearchFilter();
	});
	$("#subSearchform").submit(function(){
		applySubSearchFilter();
		return false;
	});
}

function applySubSearchFilter(){
	$('html, body').animate({scrollTop:0}, 500);
	applyFilters();
	selected_page = 1;
	$('.pagination').remove();
	drawCampings();
	recalculateCampingsPerFilter();
}

function manageCommentsButton(){
	 $(".button, #commentslink").click(function(event){
		 //prevent the default action for the click event
		 event.preventDefault();
		 	 
		 //get the full url - like mysitecom/index.htm#home
		 var full_url = this.href;
		 	 
		 //split the url by # and get the anchor target name - home in mysitecom/index.htm#home
		 var parts = full_url.split("#");
		 var trgt = parts[1];
		 	 
		 //get the top offset of the target anchor
		 var target_offset = $("#"+trgt).offset();
		 var target_top = target_offset.top;
		 	 
		 //goto that anchor by setting the body scroll top to anchor top
		 $('html, body').animate({scrollTop:target_top}, 500);
	  });
}

var registered = 0;
function manageCommentsForm(){
	if($("#comment_name").val() != null){
		$('#campingcommentform').submit(function(){
			if(registered == 0){
				var name = $('#comment_name').val();
				var email = $('#comment_email').val();
				var message = $('#comment_message').val();
				if(name != '' && '' != null && message != ''){
					tb_show(null, '/access/register?comment=1&name=' + name + '&email=' + email + '&KeepThis=true&TB_iframe=true&height=420&width=600', 'nofollow');
					return false;
				}
			}
		});
	}
}

function setRegistered(){
	registered = 1;
}

function updateCommentFormValues($name, $email){
	$('#comment_name').val($name);
	$('#comment_email').val($email);
}

function goTo(){
	window.location = 'http://www.tendumi.com/password-forgot';
}

function initFacebookConnectApi(){
	//For production
	FB.init({ 
        appId:'218719450656', cookie:true, 
        status:true, xfbml:true 
     });
	//For Localhost
	/*FB.init({ 
        appId:'132440396836039', cookie:true, 
        status:true, xfbml:true 
     });*/
}

function manageFacebookConnectButtonUserProfile(){
	$('.fsubmit').click(function(){
		alert("click");
		FB.login(function(response) {
			  //if (response.session) {
			  //  if (response.scope) {
			  if(response.authResponse){
			    	FB.api('/me', function(response) {
			    	  $.ajax({
				  		  type: "POST",
				  		  url: '/access/connect-user-to-facebook',
				  		  data: "facebookid=" + response.id + "&facebookemail=" + response.email,
				  		  success: function(data) {
				  			var userdata = eval('(' + data + ')');
				  			if(userdata.emailsequals.theresponse == 'no'){
				  				$('#fb-connect').hide();
				  				$('.prodata').append('<div id="errorfacebookconnect" class="error invisible"><h2>¡Ummmmm!</h2><ul><li>' + userdata.emailsequals.message + '</li></ul></div>');
				  				$('#errorfacebookconnect').fadeIn();
				  			}else{
				  				$('#fb-connect').hide();
				  				$('.prodata').append('<p id="okfacebookconnect" class="invisible">' + userdata.emailsequals.message + '</p>');
				  				$('#okfacebookconnect').fadeIn();
				  			}
				  		  }
				    	});
			    	});
			    }
			  //}
		}, {scope:'email,publish_stream'});
	});
}

/**
 * Manages the titles of the map shown in the home page.
 */
function manageProvinceMap(){
	if($('#mapes').length > 0){
		$.fn.maphilight.defaults = {
			fill: true,
			fillColor: '000000',
			fillOpacity: 0.1,
			stroke: false,
			fade: true,
			groupBy: 'title'
		};
		$('.map').maphilight();
	}
}

/**
 * Removes the label with name "Pictures" that appears in the form where campings are edited.
 */
function removePicturesLabelEditingCamping(){
	$("label[for='campingdata_pictures']").next().remove();
	$("label[for='campingdata_pictures']").hide();
}

/**
 * Displays a thumbnail image near to the checkbox.
 */
function displayThumbnailOfDeletingImages(){
	$('label[for*="deletepictures_"]').each(function(index) {
		var picture_name = $(this).html();
		var new_html = '<img alt="' + picture_name + '" src="/img/camping/thumbnail/gallery/' + picture_name + '"/>';
		$(this).html(new_html);
	});
}

/**
 * Manages the inputs to add new pictures when you are editing a camping
 */
function manageNewPicturesEditingCamping(){
	$("#campingdata_picture0").parent().nextAll("br").remove();
	$("#campingdata_picture0").parent().nextAll("li").children().hide();
	$("#campingdata_picture0").parent().parent().children("li:last-child").show();
	$("#campingdata_picture0").parent().parent().children("li:last-child").prepend("<br/>");
	$("#campingdata_picture0").parent().parent().children("li:last-child").children().show();
	$("#campingdata_picture0").parent().append('<a href="#" id="addnewpicture">a&ntilde;adir otra fotograf&iacute;a</a>');
	
	$('#addnewpicture').click(function(){
		manageNewPicturesEditingCampingNewButton($(this));
		return false;
	});
}

/**
 * Displays a link to add new input for uploading more pictures
 * @param elem near to the new link
 */
function manageNewPicturesEditingCampingNewButton(elem){
	$(elem).parent().next().show();
	$(elem).parent().next().children("br,input").show();
	if($(elem).parent().next().next().children("input").attr("type") == "file"){
		$(elem).parent().next().append('<a href="#" id="addnewpicture">a&ntilde;adir otra fotograf&iacute;a</a>');
	}
	$(elem).remove();
	$('#addnewpicture').click(function(){
		manageNewPicturesEditingCampingNewButton($(this));
		return false;
	});
}

/**
 * If there's not any picture to delete hide the field's label
 */
function hideDeleteCampingsLabel(){
	if($('label[for="campingdata_deletepictures"]').parent().children("ul").length == 0){
		$('label[for="campingdata_deletepictures"]').parent().hide();
	}
}

/**
 * This function manages the form used by the owner to reply the comments about them camping.
 */
function manageOwnerReplyForm(){
	//Load on the hidden input the id of the comment to be replied
	$('.replyform').each(function(){
		var commentId = $(this).children('form').children(':first-child').children(':first-child').val();
		$(this).children('form').children().each(function(){
			if($(this).children(':first-child').attr('id') == 'commentreply_comment_replied'){
				$(this).children(':first-child').val(commentId);
			}
		});
		$(this).children('form').children(':first-child').remove();	
	});
	
	//Mange clicks over the link
	$('.replyform a').click(function(){
		if($(this).parent().children('form').is(":visible")){
			$(this).parent().children('form').slideUp();
		}else{
			$(this).parent().children('form').slideDown();
		}
		return false;
	});
	$('.replyform form').submit(function(){
		if($(this).children(':first-child').children('textarea').val() == null ||
		   $(this).children(':first-child').children('textarea').val() == ''){
			return false;
		}
	});
}

/**
 * This method manages the slider to filter by price.
 */
function managePriceSlider(){
	$(function(){
		$('#slider').slider({
			range: true,
			min: priceFilterMin,
			max: priceFilterMax,
			values: [0, 60],
			slide: function(event, ui) {
				$('#amount').val(ui.values[0] + " €" + " - " + ui.values[1] + " €" );
			},
			change: function(event, ui) {
				selected_min_price = ui.values[0];
				selected_max_price = ui.values[1];
				applyFilters();
				selected_page = 1;
				$('.pagination').remove();
				drawCampings();
				recalculateCampingsPerFilter();
			}
		});
		$('#amount').val(priceFilterMin + " € - " + priceFilterMax + " €");
			
		//hover states on the static widgets
		$('#dialog_link, ul#icons li').hover(
			function() { $(this).addClass('ui-state-hover'); }, 
			function() { $(this).removeClass('ui-state-hover'); }
		);
		
	});
}

/**
 * Function used to display the loading box.
 * @param doIt to set or not the loading image
 */
function setLoadinfImage(doIt){
	if(doIt){
		var loadingImg = $('<div id="loadingImg" class="loader">Cargando...</div>');
		$('#rightmain').append(loadingImg);
	}else{
		$('#loadingImg').remove();
	}
}

/**
 * Function used to manage the order on which the campings are displayed.
 */
function manageCampingsOrder(){
	$('#sort').change(function(){
		selected_order = parseInt($('#sort').val());
		switch(parseInt($('#sort').val())){
			case 1:
				filtered_campings.sort(orderByPriceAsc);
				campings.sort(orderByPriceAsc);
				break;
			case 2:
				filtered_campings.sort(orderByPriceDesc);
				campings.sort(orderByPriceDesc);
				break;
			case 3:
				filtered_campings.sort(orderByNameAsc);
				campings.sort(orderByNameAsc);
				break;
			case 4:
				filtered_campings.sort(orderByNameDesc);
				campings.sort(orderByNameDesc);
				break;
			default:
				filtered_campings.sort(orderByNameAsc);
				campings.sort(orderByNameAsc);
				break;
		}
		selected_page = 1;
		$('.pagination').remove();
		drawCampings();
	});
}

/**
 * Function used to compare two items that are integer. Bigger last.
 * @param a - first camping
 * @param b - second camping
 * @return     Less than 0: Sort "a" to be a lower index than "b"
     		   Zero: "a" and "b" should be considered equal, and no sorting performed.
     		   Greater than 0: Sort "b" to be a lower index than "a".

 */
function orderByPriceAsc(a, b){
	var aprice = (a.price_avg === null) ? 100000 : a.price_avg;
	var bprice = (b.price_avg === null) ? 100000 : b.price_avg;
	return aprice - bprice;

}

/**
 * Function used to compare two items that are integer. Bigger first.
 * @param a - first camping
 * @param b - second camping
 * @return     Less than 0: Sort "a" to be a lower index than "b"
     		   Zero: "a" and "b" should be considered equal, and no sorting performed.
     		   Greater than 0: Sort "b" to be a lower index than "a".

 */
function orderByPriceDesc(a, b){
	var aprice = (a.price_avg === null) ? 0 : a.price_avg;
	var bprice = (b.price_avg === null) ? 0 : b.price_avg;
	return bprice - aprice;
}

/**
 * Function used to compare two items that are string. a first.
 * @param a - first camping
 * @param b - second camping
 * @return     Less than 0: Sort "a" to be a lower index than "b"
     		   Zero: "a" and "b" should be considered equal, and no sorting performed.
     		   Greater than 0: Sort "b" to be a lower index than "a".

 */
function orderByNameAsc(a, b){
	return a.name > b.name ? 1 : ( a.name === b.name ? 0 : -1 );
}

/**
 * Function used to compare two items that are string. z first.
 * @param a - first camping
 * @param b - second camping
 * @return     Less than 0: Sort "a" to be a lower index than "b"
     		   Zero: "a" and "b" should be considered equal, and no sorting performed.
     		   Greater than 0: Sort "b" to be a lower index than "a".

 */
function orderByNameDesc(a, b){
	return a.name > b.name ? -1 : ( a.name === b.name ? 0 : 1 );
}

/**
 * This function is used to manage the tabs "list" and "map" of the camping list.
 */
function manageCampingListTabs(){
	var map;
	$('#view ul li a').click(function(){
		if($(this).parent().attr('class') == 'inactivefirst'){
			if(showing_camping_list_map){
				$('#mapresult').fadeOut();
				$('#mapresult').remove();
			}
			$('#results').fadeIn();
			$('div.sort,div.pagination').fadeIn();
			$(this).parent().parent().children().first().attr('class', 'activefirst');
			$(this).parent().parent().children().last().attr('class', 'inactivesecond');
		}else if($(this).parent().attr('class') == 'inactivesecond'){
			$('#results').fadeOut();
			$('div.sort,div.pagination').fadeOut();
			map = displaysCampingListMap(map);
			if(showing_camping_list_map){
				$('#mapresult').fadeIn();
			}
			$(this).parent().parent().children().first().attr('class', 'inactivefirst');
			$(this).parent().parent().children().last().attr('class', 'activesecond');
		}
	});
}

var mapCounter = 0;
/**
 * Method used to display the filtered list of campings over a google map.
 */
function displaysCampingListMap(map){
	if (GBrowserIsCompatible()) {
		$('#mapresult').remove();
		var divMap = $('<div id="mapresult"></div>');
		$('#rightmain').append(divMap);
		map = new GMap2(document.getElementById("mapresult"));
		map.clearOverlays();
		var bounds = new GLatLngBounds();
		var counterpoints = 0;
		$.each(filtered_campings, function(i, camping) {
			if(camping.latitude != null && camping.longitude != null){
				var point = new GLatLng(camping.latitude, camping.longitude);  
				var marker =setGoogleMapsIcon(map, point, camping);
				map.addOverlay(marker);
				bounds.extend(point);
				counterpoints++;
			}
		});
		map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds));
		map.setUIToDefault();
		showing_camping_list_map = true;
		return map;
	}
}

/**
 * Function used to display points in Google Map
 * @param the google map
 * @param the point
 * @param the camping showed
 * @returns {GMarker}
 */
function setGoogleMapsIcon(map, point, camping){
   	var iconMark  = new GIcon(G_DEFAULT_ICON);
   	iconMark.image = "/img/pin_map_google.png";  
   	var iconSizeMark = new GSize(28,37);
   	iconMark.iconSize = iconSizeMark; 
   	var marker = new GMarker(point,iconMark); 
   	GEvent.addListener(marker,"click", function() {
   		$.ajax({
   			url: $('#actual_page_campings_api').attr('value') + camping.id + "/-1/-1/-1",
   			data: ({sfUserId: 2}),
   			dataType: "json",
   			beforeSend: function(){},
   			complete: function(){},
   			success: function (data, status){
   				if(data.campings.length > 0){
   					var campingname = data.campings[0].name;
   					var campingurl = data.campings[0].url;
   					var campingimg = data.campings[0].picture_small;
   					var campingprice = data.campings[0].price_avg;
   					var campingcomments = data.campings[0].comments;
   					var campingcategory = data.campings[0].category;
   					var campingopened = data.campings[0].opened;
   					var camping_html =
   						'<div class="mapinfo">' +
   						'<h3><a href="' + campingurl + '">' + campingname + '</a></h3>';
   					if(campingimg != null){
   						camping_html += '<div class="mapic"><img src="' + campingimg + '" /></div>';
   					}
   					if(campingcategory != null){
   						camping_html += '<div class="mapdet">' + campingcategory + '<br />';
   					}
   					if(campingopened != null){
   						camping_html += campingopened + '<br />';
   					}
   					if(campingprice != null){
   						camping_html += 'Desde ' + campingprice + ' &euro;<br />';
   					}
   					if(campingcomments.indexOf(' ') != -1){
   						camping_html += campingcomments;
   					}
   					camping_html += '</div>'
   					camping_html += '</div>';
   					map.openInfoWindowHtml(point, camping_html);
   					map.checkResize(); 
   				}
   			}
   		});
    });
   	return marker;
}
