﻿/// <reference path="jquery/jquery-1.3.2-vsdoc2.js"/>

document.createElement("abbr");

$(document).ready(function()
{
	$('.blink').blink();
	
	$('#page').removeAttr('class');

	if (get_cookie('language') == null)
	{
		var screen = $('<div class="screen"></div>');
		var modal = $('<div class="modal"><p><strong>Please choose your language<br />Scegli la tua lingua</strong></p></div>');

		$('#page > form').append(screen).append(modal.append($('#language')))
	}

	$(document).externalLinks();

	$(".googlemap").googleMap();

	// slideshow
	$('.slideshow').each(function(i)
	{
		var self = $(this);

		function crossfade()
		{
			var curr = self.find('.current');
			var delay = self.is('#about-us') && curr.index() == 0 ? 13000 : 3000;

			self.delay(delay, function(e)
			{
				var next = curr.find('+ img');

				if (!next.length)
				{
					next = self.find('img:not(.current):eq(0)');
				}

				curr.siblings('img:not(.current)').css('z-index', '1');

				if (next.length)
				{
					next.css('z-index', '5');

					curr.fadeTo(2000, 0, function(e)
					{
						$(this).removeClass('current').css('z-index', '1').fadeTo(0, 1);
						next.addClass('current').css('z-index', '10');

						crossfade();
					});
				}
			});
		}

		crossfade();
	});

});


$.fn.blink = function(limit, speed)
{
	this.data('speed', speed || 300).data('limit', limit || Infinity)
	.fadeTo(speed, this.css('opacity') == 1 ? .2 : 1, function()
	{
		var limit = $(this).data('limit') - .5;

		if (limit > 0)
		{
			$(this).blink(limit, $(this).data('speed'));
			$(this).data('limit', limit);
		}

		limit = null;
		delete limit;
	});

	return this;
}

$.fn.delay = function(time, callback)
{
	jQuery.fx.step.delay = function() { };
	// Return meaningless animation, (will be added to queue)
	return this.animate({ delay: 1 }, time, callback);
};

$.fn.externalLinks = function()
{
	return this.find('a[href^=http]:not([href*=' + location.hostname + ']), a:[rel=external]').attr('target', '_blank')/*.append('<em class="ext"> [this link opens in a new window] </em>')*/.end();
};

$.googleMap = function(jq)
{
	jq.each(function(i)
	{
		var cssclass = $(this).attr('class');

		var postcode = cssclass.match(/postcode_(.+?)\b/);
		var latitude = cssclass.match(/latitude_(-?.+?)\b/);
		var longitude = cssclass.match(/longitude_(-?.+?)\b/);

		initMap($(this).get(0), postcode, latitude, longitude);
	});

	function initMap(elm, postcode, lat, lng)
	{
		if (google.maps.BrowserIsCompatible())
		{
			var map = new google.maps.Map2(elm);

			map.setUIToDefault();
			map.disableScrollWheelZoom();

			if (lat && lng && lat[1] != null && lng[1] != null)
			{
				var point = new google.maps.LatLng(lat[1].replace('_', '.'), lng[1].replace('_', '.'));

				if (point)
				{
					map.setCenter(point, 13);

					var marker = new google.maps.Marker(point);
					map.addOverlay(marker);
				}
			}
			else if (postcode[1])
			{
				usePointFromPostcode(postcode[1], function(point)
				{
					if (point)
					{
						map.setCenter(point, 13);

						var marker = new google.maps.Marker(point);
						map.addOverlay(marker);
					}
				});
			}
		}
	}

	function usePointFromPostcode(postcode, callbackFunction)
	{
		var localSearch = new google.search.LocalSearch();

		localSearch.setSearchCompleteCallback(null, function()
		{
			if (localSearch.results[0])
			{
				var resultLat = localSearch.results[0].lat;
				var resultLng = localSearch.results[0].lng;
				var point = new google.maps.LatLng(resultLat, resultLng);

				callbackFunction(point);
			}
		});

		localSearch.execute(postcode + ", UK");
	}
}

$.fn.googleMap = function()
{
	var self = this;

	if (self.length)
	{
		if ($.googleMap.loaded == undefined || (!$.googleMap.loaded['maps'] && !$.googleMap.loaded['search']))
		{
			$.googleMap.loaded = [];

			google.load('maps', '2', { 'other_params': 'sensor=true', 'callback': function() { googleLoaded('maps') } });
			google.load('search', '1', { 'nocss': true, 'nooldnames': true, 'callback': function() { googleLoaded('search') } });
		}
		else
		{
			googleLoaded();
		}
	}

	function googleLoaded(api)
	{
		if (api)
		{
			$.googleMap.loaded[api] = true;
		}

		if ($.googleMap.loaded['maps'] && $.googleMap.loaded['search'])
		{
			$.googleMap(self);
		}
	}

	return self;
}
