var Site = {
	start: function() {
		Site.initSubMenus();

		// Languages - Slimbox
		MooTools.lang.set('en', 'Slimbox', {
			'Image': 'Image' , 
			'of': 'of'
		});

		MooTools.lang.set('nl', 'Slimbox', {
			'Image': 'Afbeelding' , 
			'of': 'van'
		});

		MooTools.lang.set('be', 'Slimbox', {
			'Image': 'Plaatje' , 
			'of': 'van'
		});

		MooTools.lang.set('de', 'Slimbox', {
			'Image': 'Bild' , 
			'of': 'von'
		});

		// Languages - Rederij Vooruit
		MooTools.lang.set('en', 'rv', {
			'No route': 'We could not calculate an route.'
		});

		MooTools.lang.set('nl', 'rv', {
			'No route': 'We konden helaas geen route naar deze bestemming berekenen.'
		});

		MooTools.lang.set('be', 'rv', {
			'No route': 'We konden helaas geen route naar deze bestemming berekenen.'
		});

		MooTools.lang.set('de', 'rv', {
			'No route': 'Leider konnten wir nicht berechnet die Route zu diesem Ziel.'
		});

		if(typeof(icl_lang) != 'undefined') {
			MooTools.lang.setLanguage(icl_lang);
		}

		// Google Maps - Markers
		if(typeof(google) != 'undefined') {
			Site.markerIcon = new google.maps.MarkerImage(
				"http://rederij-vooruit.com/wp-content/themes/rederij-vooruit/styles/maps/icon.png",
				new google.maps.Size(28, 40) , 
				new google.maps.Point(0,0) , 
				new google.maps.Point(14, 40)
			);

			Site.markerShadow = new google.maps.MarkerImage(
				"hhttp://rederij-vooruit.com/wp-content/themes/rederij-vooruit/styles/maps/shadow.png",
				new google.maps.Size(49, 40) , 
				new google.maps.Point(0,0) , 
				new google.maps.Point(14, 40)
			);

			// Google Maps - Elements
			var element = $("ports-map-list");
			if(element) {
				element.hide();

				Site.initMap(element, "li");
			}

			var element = $("ships-map-table");
			if(element) {
				Site.initMap(element, "tr");
			}

			var element = $("port-route-map");
			if(element) {
				Site.initPortRouteMap(element);
			}
		}

		// Carousel
		var shipsCarousel = $("ships-carousel");
		if(shipsCarousel) {
			new Carousel(shipsCarousel, 145);
		}

		$(document.body).getElements('.ship-details .images').each(function(item) {
			new Carousel(item, 243);
		});
	} , 

	initMap: function(element, itemSelector) {
		var mapCanvas = new Element("div", {
			"class": "map" 
		}).inject(element, "before");

		var map = new google.maps.Map(mapCanvas, {
			zoom: 8 , 
			center: new google.maps.LatLng(-34.397, 150.644) , 
			mapTypeId: google.maps.MapTypeId.ROADMAP 
		});

		var bounds	= new google.maps.LatLngBounds();

		element.getElements(itemSelector).each(function(item) {
			var latitudeField = item.getElement("input[name=latitude]");
			var longitudeField = item.getElement("input[name=longitude]");

			if(latitudeField && longitudeField) {
				var latitude = latitudeField.get("value");
				var longitude = longitudeField.get("value");

				if(latitude && longitude) {
					var location = new google.maps.LatLng(latitude, longitude);

					var marker = new google.maps.Marker({
						position: location , 
						map: map , 
						shadow: Site.markerShadow , 
						icon: Site.markerIcon , 
						title: item.get("title") 
					});

					var infowindow = new google.maps.InfoWindow({
						content: item.get("html")
					});

					google.maps.event.addListener(marker, 'click', function() {
						infowindow.open(map, marker);
					});

					bounds.extend(location);
				}
			}
		});

		map.fitBounds(bounds);
	} , 

	initPortRouteMap: function(element) {
		var mapCanvas = new Element("div", {
			"class": "map" 
		}).inject(element, "before");

		var map = new google.maps.Map(mapCanvas, {
			zoom: 8 , 
			center: new google.maps.LatLng(-34.397, 150.644) , 
			mapTypeId: google.maps.MapTypeId.ROADMAP 
		});

		var latitudeField = element.getElement("input[name=latitude]");
		var longitudeField = element.getElement("input[name=longitude]");
		var addressField = element.getElement("input[name=address]");

		if(latitudeField && longitudeField && addressField) {
			var latitude = latitudeField.get("value");
			var longitude = longitudeField.get("value");
			var address = addressField.get("value");

			if(latitude && longitude) {
				var location = new google.maps.LatLng(latitude, longitude);

				map.setCenter(location);

				var marker = new google.maps.Marker({
					position: location , 
					map: map , 
					shadow: Site.markerShadow , 
					icon: Site.markerIcon 
				});

				var directionsForm = $("directions-form");

				if(directionsForm) {
					var directionsDisplay = new google.maps.DirectionsRenderer();
					var directionsService = new google.maps.DirectionsService();
					var directionsPanel = $("directions");

					directionsDisplay.setMap(map);
					directionsDisplay.setPanel(directionsPanel);

					directionsForm.addEvent("submit", function(event) { 
						event.stop();

						var start = $("from-field").get("value");
						var end = address;

						var request = {
							origin: start , 
							destination: end , 
							travelMode: google.maps.DirectionsTravelMode.DRIVING 
						};

						directionsService.route(request, function(result, status) {
							if(status == google.maps.DirectionsStatus.OK) {
								directionsDisplay.setDirections(result);
							} else {
								directionsPanel.set("html", MooTools.lang.get('rv', 'No route'));
							}
						});

						return false;
					}.bindWithEvent());
				}
			}
		}
/*
			var directions = new google.maps.Directions(map, $("directions"));
			google.maps.Event.addListener(directions, "error", function() {
				var status = directions.getStatus();
				alert(status.code);
			});

			var directionsForm = $("directions-form");
			directionsForm.addEvent("submit", function() { 
				var direction = "from: " + $("from-field").get("value") + " to: " + port.address.street + " " + port.address.home;

				var r = directions.load(direction);

				return false;
			});

			map.setCenter(bounds.getCenter(), Site.max(map.getBoundsZoomLevel(bounds), 8));
		}}).get({"id": id});
*/
	}, 

	initSubMenus: function() {
		var anchors = $(document.body).getElements(".sub-menu a");

		anchors.each(function(anchor) {
			if(!anchor.get("href")) {
				var item = anchor.getParent();
				var list = item.getParent();

				if(item.hasClass("active")) {
					list.active = item;
				}

				anchor.addEvent("click", function(event, list, item) {
					if(list.active && list.active != item) {
						list.active.removeClass("active");
					}
					
					list.active = item.toggleClass("active");
				}.bindWithEvent(this, [list, item]));
			}
		});
	}
};

/**
 * Carousel
 */
var Carousel = new Class({
	initialize: function(element, width) {
		this.element = $(element);
		this.width = width;

		this.wrap = this.element.getElement(".wrap");
		this.position = this.wrap.getScroll();

		this.items = this.wrap.getElement("ul");
		this.activeItem = this.items.getFirst();

		this.scroll = new Fx.Scroll(this.wrap);

		var navigationHolder = this.element.getElement(".navigation-holder");
		if(navigationHolder) {
			var navigation = new Element("p", {"class": "navigation"}).inject(navigationHolder);
		} else {
			var navigation = new Element("p", {"class": "navigation"}).inject(this.element, "bottom");
		}

		this.previousLink = new Element("a", {
			"href": "#",
			"class": "previous-link",
			"html": "<span>Vorige</span>",
			"events": {
				"click": this.previousClick.bindWithEvent(this)
			}
		}).inject(navigation);

		this.nextLink = new Element("a", {
			"href": "#",
			"class": "next-link",
			"html": "<span>Volgende</span>",
			"events": {
				"click": this.nextClick.bindWithEvent(this)
			}
		}).inject(navigation);

		this.updateNavigation();
    },

	next: function() {
		this.to(this.activeItem.getNext(), this.width, 0);
	},

	previous: function() {
		this.to(this.activeItem.getPrevious(), -this.width, 0);
	},

	to: function(item, deltaX, deltaY) {

		if(item) {
			this.activeItem = item;
			this.position.x += deltaX;
			this.position.y += deltaY;
			this.scroll.start(this.position.x, 0);
		}

		this.updateNavigation();
	},

	updateNavigation: function() {
		if(this.activeItem) {
			if(this.activeItem.getNext()) {
				this.nextLink.removeClass("disabled");
			} else {
				this.nextLink.addClass("disabled");
			}

			if(this.activeItem.getPrevious()) {
				this.previousLink.removeClass("disabled");
			} else {
				this.previousLink.addClass("disabled");
			}
		} else {
			this.nextLink.addClass("disabled");
			this.previousLink.addClass("disabled");
		}
	},

	nextClick: function(event) {
		event.preventDefault();

		this.next();
	},

	previousClick: function(event) {
		event.preventDefault();

		this.previous();
	}
});

window.addEvent("domready", function() {
	Site.start();
});
