if(!window.GMap2)
	window.GMap2 = function() {};

if(!window.YMap)
	window.YMap = function() {};

if(!window.VEMap)
	window.VEMap = function() {};

if(!window.CM)
	window.CM = {};

if(!window.CM.Map)
	window.CM.Map = function() {};

if(!window.MQA)
	window.MQA = {};

if(!window.MQA.TileMap)
	window.MQA.TileMap = function() {};

if(!window.webcamstravel)
	window.webcamstravel = {};

if(!window.webcamstravel.config)
	window.webcamstravel.config = {};

window.webcamstravel.config = {
	devid: 'fcb4fb5f73c52a29690c592f252a2257',
	hl: 'en',
	maploader: 'http://api.webcams.travel/map/loader.php',
	endpoint: 'http://api.webcams.travel/rest'
}

if(!window.webcamstravel.easymap)
	window.webcamstravel.easymap = {};

window.webcamstravel.easymap = {
	implementations: {}
};

window.webcamstravel.easymap.load = function(map, cb, options) {
	var implementation = '';

	if(map instanceof window.GMap2)
		implementation = 'gmap2';
	else if(map instanceof window.YMap)
		implementation = 'ymap';
	else if(map instanceof window.VEMap)
		implementation = 'vemap';
	else if(map instanceof window.CM.Map)
		implementation = 'cmmap';
	else if(map instanceof window.MQA.TileMap)
		implementation = 'mqmap';

	if(implementation.length == 0) {
		alert('This kind of map is currently not supported.');
		return null;
	}

	var id = 'impl' + Math.round(Math.random() * 1000000);

	if(typeof cb == 'undefined') {
		cb = function(instance, params) {};
	}

	if(typeof options == 'undefined')
		options = {};

	if(typeof options.showwebcams == 'undefined')
		options.showwebcams = true;

	if(typeof options.params == 'undefined')
		options.params = null;

	window.webcamstravel.easymap.implementations[id] = {};
	window.webcamstravel.easymap.implementations[id].map = map;
	window.webcamstravel.easymap.implementations[id].impl = null;
	window.webcamstravel.easymap.implementations[id].instance = null;
	window.webcamstravel.easymap.implementations[id].usercallback = cb;
	window.webcamstravel.easymap.implementations[id].options = options;
	window.webcamstravel.easymap.implementations[id].callback = function(id) {
		var map = window.webcamstravel.easymap.implementations[id].map;
		var instance = new window.webcamstravel.easymap.implementations[id].impl(map);

		window.webcamstravel.easymap.implementations[id].instance = instance;

		var options = window.webcamstravel.easymap.implementations[id].options;

		if(options.showwebcams == true)
			window.webcamstravel.easymap.implementations[id].instance.showWebcams();

		window.webcamstravel.easymap.implementations[id].usercallback(instance, options.params);
	}

	var script = document.createElement('script');
	script.setAttribute('src', window.webcamstravel.config.maploader + '?map=' + implementation + '&id=' + id);
	script.setAttribute('type', 'text/javascript');
	document.getElementsByTagName("head")[0].appendChild(script);

	return id;
}

window.webcamstravel.easymap.getInstance = function(id) {
	return this.implementations[id].instance;
};

window.webcamstravel.easymap.unload = function() {
	for(var id in this.implementations)
		this.implementations[id].instance.unload();
};

if(!window.webcamstravel.api)
	window.webcamstravel.api = {};
