/**
 * NS OVFiets
 * 
 * @version   1.00.100609
 * @author    LBI Lost Boys
 */
NS(function($){

	var CLASS_ACTIVE = 'active';
	
	function OVFiets() {
		this.form = $('#form-ovfiets');
		this.initGooglemaps();
	}

	OVFiets.prototype = {
		Defaults: {
			validateRequired: true,
			validateServer: false,
			replaceInputs: true,
			simulateClick: true
		},

		owns: function(form) {
			return this.form[0] == form;
		},

		prefers: function(setting) {
			return this.Defaults[setting];
		},

		initGooglemaps:function() {
			var map = $('.googlemap')[0];
			if(map) {
				this.fietsMap = new OVFietsMap(map);
			}
		}
	};

	/**
	 * OVFiets googlemaps
	 * 
	 */
	var OVFietsMap = function(root) {		
		this.root = root;
		this.map = new NS.Googlemap(root, {
			data: '.clicknshow a',
			icon: '/ns2010/static/images/maps/ovfiets.png',
			iconOver: '/ns2010/static/images/maps/ovfiets-hi.png',
			parseNode: this.parseNode.bind(this)
		});

		var markers = this.map.getMarkers();
		var l = markers.length;
		for (var i=0; i<l; i++) {
			this.bindEvents(markers[i]);
		}

		NS.subscribe('layoutchanged', this.updateZoom.bind(this));
	}

	OVFietsMap.prototype = {
		parseNode:function(node) {
			var geos = $(node).attr('ns:geo');
			if(geos) {
				var geo = geos.split(',');
				return new google.maps.LatLng(geo[0], geo[1]);
			}			
		},

		bindEvents:function(marker) {
			var link = marker.get('related-node');
			var $item = $(link).closest('li');
			
			var icon = this.map.getProperty('icon');
			var over = this.map.getProperty('iconOver');
			
			var Event = google.maps.event;
			Event.addListener(marker, 'mouseover', function() {
				$item.addClass(CLASS_ACTIVE);
				marker.setIcon(over);
			});

			Event.addListener(marker, 'mouseout', function() {
				$item.removeClass(CLASS_ACTIVE);
				marker.setIcon(icon);
			});
			
			$item.hover(function() {
				marker.setIcon(over);
			}, function() {
				marker.setIcon(icon);
			});
		},

		updateZoom:function() {
			if(this.root.offsetHeight > 0) {
				this.map.showAll();
			}
		}
	};


	NS.subscribe('initialize', function() {
		NS.addApplication('ovfiets', new OVFiets());
	});
});
