var Contact = new Class({
	Implements: [Options, Events, Log],
	Extends: Page,
	
	// Variables
	map: null,
	form: null,

	// Class instances


	initialize: function( name, element, options )
	{
		this.enableLog();
		//this.disableLog();
		this.log("Home::initialize(" + name + ", " + element + ", " + options + ")");

		// Invoke parent method
		this.parent( name, element, options );

		this.initMap();
		this.initForm();
	},

	initMap: function()
	{
		this.log("initMap()");

		// Mezz location
		this.mezzLocation = new google.maps.LatLng(51.583656, 4.778656);

		var options = {
		  zoom: 14,
		  center: this.mezzLocation,
		  mapTypeId: google.maps.MapTypeId.ROADMAP,
		  scrollwheel: false
		};

		var mapContainer = this.element.getElement('.map');
		var directionsContainer = this.element.getElement('.directions');

		this.map = new google.maps.Map( mapContainer, options );
		//this.map.setCenter(this.mezzLocation);

		this.map.directionsDisplay = new google.maps.DirectionsRenderer();
		this.map.directionsService = new google.maps.DirectionsService();

		this.map.directionsDisplay.setMap( this.map );
		this.map.directionsDisplay.setPanel( directionsContainer );

		// Plan route
//		var routeButton = this.element.getElement('.route-form .button');
//
//		routeButton.addEvent('click', function(event) {
//			event.preventDefault();
//
//			this.log("route Button clicked");
//
//			this.calculateRoute();
//
//		}.bind(this));

		// Marker
		//var markerIcon = new google.maps.MarkerImage('image/favicon.ico', new google.maps.Size(32, 32));
		//var mezzMarker = new google.maps.Marker({position: this.mezzLocation, map: this.map, icon: markerIcon, title: 'Mezz Breda'});
		var mezzMarker = new google.maps.Marker({position: this.mezzLocation, map: this.map, title: 'Mezz Concerts & Dance'});
	},

	/*
	 * Init form
	 */
	initForm: function()
	{
		this.log("NewsletterForm::initForm()");

		var options = {
			showLoader: true,
			allowStatus: true,
			formErrorMessage: {
				allow: true,
				container: this.element.getElement('.form-message-container'),
				allowClose: false
			}
		};

		var elementOptions = {};

		var form = new Form($('route-form'), options);

		var departureElement = new FormElement(form, 'departure', elementOptions);
		departureElement.addValidation(Form.REGEX_TEXT, 'Vul een geldig adres in');
		form.addElement(departureElement);

		// Add buttons
		var submitButton = new FormSubmitButton(form, '.button', {showLoader: true});
		form.addButton(submitButton);

		// Save form
		this.form = form;

		this.form.submit = function()
		{
			this.calculateRoute();
		}.bind(this);
	},

	calculateRoute: function()
	{
		this.log("calculateRoute()");

		var start = this.element.getElement('#departure').get('value');
		var end = "Keizerstraat 101, 4811 HL, Breda";

		var request = {
			origin:start,
			destination:end,
			travelMode: google.maps.TravelMode.DRIVING,
			unitSystem: google.maps.UnitSystem.METRIC,
			avoidHighways: false,
			avoidTolls: false,
			region: 'nl'
		};

		this.map.directionsService.route(request, function(response, status) {

			this.form.enable();
			this.form.hideLoadState();

			var error;

			switch(status)
			{
				case google.maps.DirectionsStatus.OK:
					this.map.directionsDisplay.setDirections(response);
					break;

				case google.maps.DirectionsStatus.NOT_FOUND:
					error = "Het opgegeven adres is niet gevonden";
					break;

				case google.maps.DirectionsStatus.ZERO_RESULTS:
					error = "Het opgegeven adres geeft geen resultaten";
					break;

				case google.maps.DirectionsStatus.MAX_WAYPOINTS_EXCEEDED:
					error = "Er is iets mis gegaan tijdens het ophalen van de route. Probeer het nogmaals.";
					break;

				case google.maps.DirectionsStatus.INVALID_REQUEST:
					error = "Er is iets mis gegaan tijdens het ophalen van de route. Probeer het nogmaals.";
					break;

				case google.maps.DirectionsStatus.OVER_QUERY_LIMIT:
					error = "Er is iets mis gegaan tijdens het ophalen van de route. Probeer het nogmaals.";
					break;

				case google.maps.DirectionsStatus.REQUEST_DENIED:
					error = "De route kan niet worden opgehaald. Probeer het nogmaals.";
					break;

				case google.maps.DirectionsStatus.UNKNOWN_ERROR:
					error = "Er is iets mis gegaan tijdens het ophalen van de route. Probeer het nogmaals.";
					break;
			}

			if(error)
			{
				this.form.formErrorMessage.clear();
				this.form.formErrorMessage.addMessage('departure', 0, error);
				this.form.formErrorMessage.show();
			}
		}.bind(this));
	}

});
