jQuery.noConflict();
(function($)
{
	/**
	 * READY BLOCK
	 */
	$(document).ready(function()
	{
		$('#map').each(function() { map.init(this, mapData);});
		$('#location-list').each(function()
		{
			if (map.element) { return ;}
			map.init('', mapData);
		});

		$('#slider1').s3Slider({timeOut: 5000});

		$('.pane-list li').click(function()
		{
			window.location = $(this).find('a').attr('href');
			return false;
		});

		$('.rss').append('<span class="hover"></span>').each(function ()
		{
			var $span = $('> span.hover', this).css('opacity', 0);
			$(this).hover(function () { $span.stop().fadeTo(500, 1);}, function () { $span.stop().fadeTo(500, 0);});
		});

		$('.facebook').append('<span class="hover"></span>').each(function ()
		{
			var $span = $('> span.hover', this).css('opacity', 0);
			$(this).hover(function () { $span.stop().fadeTo(500, 1);}, function () { $span.stop().fadeTo(500, 0);});
		});

		$('.twitter').append('<span class="hover"></span>').each(function ()
		{
			var $span = $('> span.hover', this).css('opacity', 0);
			$(this).hover(function () { $span.stop().fadeTo(500, 1);}, function () { $span.stop().fadeTo(500, 0);});
		});
	});
	
	/**
	 * MAP HANDLER
	 */
	var map = 
	{
		element: null,
		map: null,
		data: null,
		perPage: 14,

		init: function(element, data)
		{
			data.sort(function (a, b)
			{
				if (a.town > b.town) { return 1;}
				else if (a.town == b.town) { return 0;}
				else { return -1;}
			});

			this.element = element;
			this.data = data;

			this.setupMap();
			this.generateNav();
			this.generateListView();
			
			var mapHandler = this;
			$('a.more-details').live('click', function(event)
			{
				var a = $(this);
				var id = a.attr('rel');
				mapHandler.displaylocationinfo(id);
			});
		},

		setupMap: function()
		{
			if (!this.element) { return ;}

			var latlng = new google.maps.LatLng(53.94437680638132, -1.645615677505523);
			var opt =
			{
				zoom: 6,
				center: latlng,
				mapTypeId: google.maps.MapTypeId.ROADMAP
			};
			
			var map = new google.maps.Map(this.element, opt);
			this.map = map;

			var info = new google.maps.InfoWindow();
			
			var shadow = new google.maps.MarkerImage('images/shadow50.png', new google.maps.Size(37, 34), new google.maps.Point(0,0), new google.maps.Point(10, 34));
			
			$.each(this.data, function(index, item)
			{
				var pos = new google.maps.LatLng(item.lat, item.lng);
				var marker = new google.maps.Marker(
				{
					icon: 'images/googlepin.png',
					shadow: shadow,
					position: pos,
					map: map
				});

				google.maps.event.addListener(marker, 'click', function(event)
				{
					var html = (item.listImage) ? '<img src="'+item.listImage+'" alt=""/>' : '';
					html += '<h1>'+item.address1+'</h1>';
					html += '<p>';
					html += (item.address2) ? item.address2+'<br/>' : '';
					html += item.town+'<br/>';
					html += item.county+'<br/>';
					html += item.postcode+'</p>';
					
					html += (item.openingtimes) ? '<p>Sat Nav  ' + item.satnavpostcode + '<br><br>Opening Times:<br>' + item.openingtimes + '</p><p><h3>' + item.locationinfo + '</p></h3>' : '';
					
					html += '<p><a href="javascript:;" rel="'+item.address1+'" class="more-details">more details</a></p>';

					html = '<div class="location-details">'+html+'</div>';

					info.setContent(html);
					info.open(map, marker);
				});
			});
		},

		displaylocationinfo: function(id)
		{
			$.each(this.data, function(index, item)
			{
				if (!item.address1 || item.address1 != id) { return ;}

				var html = (item.largeImage) ? '<img src="'+item.largeImage+'" alt=""/>' : '';
				html += '<h1>'+item.address1+'</h1>';
				html += '<p>';
				html += (item.address2) ? item.address2+'<br/>' : '';
				html += item.town+'<br/>';
				html += item.county+'<br/>';
				html += item.postcode+'</p>';
				html += '<h1><p>Sat Nav  </h1>'+ item.satnavpostcode + '<br><br><h1>Opening Times:</h1><br>' + item.openingtimes + '</p><br>';
				html += (item.locationinfo) ? '<p><h3>' + item.locationinfo + '</p></h3>' : '';
				html += '<p><a href="uk-car-valet-prices.php">Click here for valeting prices, please note charges may vary from location to location</a></p>';
				html = '<div class="location-full-details">'+html+'</div>';

				$.fancybox({'content': html});
			});
		},
		
		generateNav: function()
		{
			var letters = [];
			$.each(this.data, function(index, item)
			{
				var letter = item.town.substr(0, 1).toUpperCase();
				if ($.inArray(letter, letters) == -1)
				{
					letters.push(letter);
				}
			});
			letters = letters.sort();

			var html = ['<a href="#">All</a>'];
			$.each(letters, function(index, item)
			{
				html.push('<a href="#'+item+'">'+item+'</a>');
			});
			html = html.join(' | ', html);

			var mapHandler = this;
			$('#alpha-nav').html(html).find('a').click(function(event)
			{
				var letter = this.href.split('#')[1];
				mapHandler.generateListView(letter);
				return false;
			});
		},
		
		generateListView: function(alpha, page)
		{
			var fullList = (!alpha) ? true : false;
			page = (!page) ? 1 : parseInt(page);

			var perPage = this.perPage;
			var offset = (page * perPage) - perPage;
			var last = offset + perPage;
			var isMore = false;

			var list = '';
			var count = 0;
			$.each(this.data, function(index, item)
			{
				// alpha list
				var letter = item.town.substr(0, 1).toUpperCase();
				if (alpha && letter != alpha) { return ;}

				// full list
				if (fullList)
				{
					if (count < offset) { count++; return ;} // skip this one
					if (count >= last) { isMore = true; return false;} // got enough finish
					count++;
				}

				// html output
				var html = (item.listImage) ? '<img src="'+item.listImage+'" alt=""/>' : '';
				html += '<h2 class="latest_products_heading"><a href="javascript:;" rel="'+item.address1+'" class="more-details">'+item.town+'</a></h2>';
				html += '<p class="product_text">'+item.address1+'. '+item.postcode+'</p>';

				list += '<li>'+html+'</li>';
			});

			$('#location-list').html(list);

			var mapHandler = this;
			$('#location-list li').click(function(event)
			{
				var a = $(this).find('a:first');
				if (!a.length) { return ;}

				var id = a.attr('rel');
				mapHandler.displaylocationinfo(id);
			});

			// page links
			var pageLinks = [];
			if (fullList && offset > 0)
			{
				pageLinks.push('<a href="#'+(page - 1)+'">Previous Page</a>');
			}
			if (fullList && isMore)
			{
				pageLinks.push('<a href="#'+(page + 1)+'">Next Page</a>');
			}
			$('#page-links').html(pageLinks.join(' | ')).find('a').click(function(event)
			{
				var page = this.href.split('#')[1];
				mapHandler.generateListView('', page);
				return false;
			});
		}
	};

})(jQuery)

