/*
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU AFFERO General Public License as published by
the Free Software Foundation; either version 3 of the License, or
any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU Affero General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
or see http://www.gnu.org/licenses/agpl.txt.
*/

// OSRM Timers
// [handles notification timers]


OSRM.GUI.extend( {
	
// notifications
notifications: [
	{	time:		4000,
		header: 	"[Tooltip] Localization",
		body: 		"You can use the pulldown menu in the upper left corner to select your favorite language. " +
					"<br/><br/>" +
					"Don't despair if you cannot find your language of choice. " +
					"If you want, you can help to provide additional translations! " +
					"Visit <a href='https://github.com/DennisSchiefer/Project-OSRM-Web'>here</a> for more information.",
		_classes:	["Localization"],
		_funcs:		["setLanguageWrapper"]
	},                
	{	time:		6000,
		header: 	"[Tooltip] Clicking to set markers",
		body:		"You can click on the map with the left mouse button to set a source marker (green) or a target marker (red), " +
					"if the source marker already exists. " +
					"The address of the selected location will be displayed in the boxes to the left. " + 
					"<br/><br/>" +
					"You can delete a marker by clicking on it again with the left mouse button.",
		_classes:	["Map"],
		_funcs:		["click"]
	},
	{	time:		8000,
		header: 	"[Tooltip] Dragging markers",
		body:		"You can drag a marker by clicking on it with the left mouse button and holding the button pressed. " +
					"Then you can move the marker around the map and the route will be updated instantaneously. " +
					"<br/><br/>" +
					"You can even create additional markers by dragging them off of the main route! ",
		_classes:	["Routing"],
		_funcs:		["getRoute_Dragging"]
	}
],
		
// initialize notification timers
init: function() {
	// init timers
	var notifications = OSRM.GUI.notifications;	
	OSRM.G.notification_timers = new Array( notifications.length );
	for( var i=0, iEnd=notifications.length; i<iEnd; ++i) {
		// start timer
		notifications[i].timer = setTimeout( function(id){ return function(){ OSRM.GUI.notification_timeout(id);}; }(i), notifications[i].time);

		// create wrapper functions for function calls that will stop the timer
		notifications[i].old_functions = [];
		for(var j=0, jEnd=notifications[i]._classes.length; j<jEnd;j++) {
			notifications[i].old_functions[j] = OSRM[notifications[i]._classes[j]][notifications[i]._funcs[j]];
			OSRM[notifications[i]._classes[j]][notifications[i]._funcs[j]] = function(id,id2){ return function(params){ OSRM.GUI.notification_wrapper(id,id2,params);}; }(i,j);
		}
	}
},

// wrapper function to clear timeouts
notification_wrapper: function(id, id2) {
	var notifications = OSRM.GUI.notifications;
	
	clearTimeout( notifications[id].timer );
	//notifications[id].old_functions[id2](params);
	var args = Array.prototype.slice.call(arguments, 2);	
	notifications[id].old_functions[id2].apply(this, args);
	for(var j=0, jEnd=notifications[id]._classes.length; j<jEnd;j++) {
		OSRM[notifications[id]._classes[j]][notifications[id]._funcs[j]] = notifications[id].old_functions[j];
	}
},

// show notification message after timeout expired
notification_timeout: function(id) {
	// if a notification is already shown, restart timer
	if( OSRM.isNotifyVisible() ) {
		OSRM.GUI.notifications[id].timer = setTimeout( function(id){ return function(){ OSRM.GUI.notification_timeout(id);}; }(id), OSRM.GUI.notifications[id].time);
		return;
	}
	// show notification
	OSRM.notify( OSRM.GUI.notifications[id].header, OSRM.GUI.notifications[id].body, true );
	for(var j=0, jEnd=notifications[id]._classes.length; j<jEnd;j++) {
		OSRM[notifications[id]._classes[j]][notifications[id]._funcs[j]] = notifications[id].old_functions[j];
	}
}

});