/*
 *	Boy van Amstel
 *	copyright 2010
 *
 *	@author 	Boy van Amstel
 *	@version 	1.0
 *
 *	Changes 1.0:
 *	[03/02/2010]	- First release 
 *
 */

var engine;
engine = setInterval("engineTick()", settings['engine']['update']);

var locations = null;
var map = null;
var marker = null;
var infowindow = null;

/**********
*
*	jQuery
*
**********/

$(document).ready(function() {

	initInterface();
	initLocations();
	//initMap();

});

/**********
*
*	Methods
*
**********/

function initInterface() {

	/***
	*	Watermark
	***/
	
	$("#keywords").watermark(settings['forms']['keywords']);
	$("#email").watermark(settings['forms']['email']);

	attachClicks();	

}

function attachClicks() {

	/***
	*	Forms
	***/
	
	$("#search form").unbind("submit").submit(function() {
		var input = $(this).find("#keywords").val();
		initLocations(input);
		return false;
	});

	$("form#save").unbind("submit").submit(function() {
		saveEmail(this);
		return false;
	});


	/***
	*	Locations
	***/

	$("#search .results li a").unbind("click").click(function() {
		var index = $("#search .results li").index($(this).parents("li"));
		$("#mapContainer h2").html(locations[index].name);
		$("#mapContainer .address").html(locations[index].address + ", " + locations[index].city);
		$("#phones").fadeOut(500, function() {
			$("#mapContainer").fadeIn(500, function() {
				initMap();
				var latlng = new google.maps.LatLng(locations[index].latitude, locations[index].longitude);
				if(marker) marker.setMap(null);
				marker = new google.maps.Marker({
					position: latlng, 
					map: map, 
					title:locations[index].name
				});  
				map.setCenter(latlng);
				map.setZoom(16);

				var contentString = '<div class="infowindow">';
				contentString += '<h3>'+locations[index].name+'</h3>';
				contentString += '<p>' + locations[index].address + ", " + locations[index].city + '</p>';
				contentString += '</div>';

				infowindow = new google.maps.InfoWindow({
				    content: contentString
			    });
				//infowindow.open(map,marker);
			});
		});

		//return false;
	});

	$("#search .results .more").unbind("click").click(function() {
		$(this).removeClass("more").addClass("less").html('< bekijk top 5');
		$("#search .results li").fadeIn();
		attachClicks();
		return false;
	});

	$("#search .results .less").unbind("click").click(function() {
		$(this).removeClass("less").addClass("more").html('> bekijk top 25');
		$("#search .results li.hidden").fadeOut();
		attachClicks();
		return false;
	});

}

function initLocations(keyword) {
	
	if(keyword) {
		$(".moreless").hide();
		if(keyword.length < 3) {
			$("#search .results ul li").remove();
			$("#search .results ul").append('<li><p>Vul minimaal 3 karakters in</p></li>');
			return;
		} else if(keyword.length == 0) { 
			return;
		}

		var data = { keyword: keyword };
	} else {
		data = null;
		$(".moreless").show();
	}
	
	jQuery.ajax({
		type		:	'GET'
		,dataType	:	'jsonp'
		,url		:	settings['api']['location'] + '?callback=?'
		,data		:	data
		,success	:	function(data) {
			
			locations = data;
			
			$("#search .results ul li").remove();
			
			if(data.length == 0) {
				$("#search .results ul li").remove();
				$("#search .results ul").append('<li><p>Geen cafe\'s gevonden</p></li>');
			}
			
			var added = '';
			for(var i in data) {
				if(i >= 25) break;
			
				var item = data[i];

				var row = '<li'+added+'><a href="#cafe">';
				if(item.rating.grade < 0)
					row += '<span class="rating negative">' + item.rating.grade + '</span>';
				else
					row += '<span class="rating positive">' + item.rating.grade + '</span>';
				row += '<p>' + item.name + '</p><p class="city">' + item.city + '</p>';
				row += '</a></li>';

				if(i >= 5 && !keyword) { added = ' class="hidden"';
					$(row).appendTo($("#search .results ul")).hide();
				} else { 
					$(row).appendTo($("#search .results ul")).hide().fadeIn();
				}
			}
			attachClicks();
		}
	});
}
function initMap() {
	if(!map) {
		var latlng = new google.maps.LatLng(52.106505,5.29541);
		var myOptions = {
			zoom: 6,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP,
			disableDefaultUI: true
			//navigationControl: true
		};
		map = new google.maps.Map(document.getElementById("map"), myOptions);
	}
}

function saveEmail(object) {
	var emailaddress = $(object).find("#email").val()
	var saveurl = $(object).attr("action");

	$(object).find(".message").fadeOut(500,function() {
		var _this = this;
		jQuery.ajax({
			type		:	'POST'
			,url		:	saveurl
			,data		:	{ email: emailaddress }
			,success	:	function(data) {
				
				switch(data) {
					case 'alreadysaved':
						$(_this).html('Niet te snel :).').fadeIn();
					break;
					case 'success':
						$(_this).html('Je emailadres is opgeslagen. We mailen je zodra we iets te melden hebben :).').fadeIn();				
					break;
					case 'error':
						$(_this).html('Er is iets mis gegaan, probeer het later nog eens.').fadeIn();
					break;
				}
				
			}
		});
	});
}

/**********
*
*	Engine
*
**********/

function engineTick() {
	
}

