(function($)
{
	
function Mapmonitor(target, settings, id) {
	
	var self = this;
	self.id = id;
	self.settings = settings;
	self.target = $(target);
	
	self.target.css({'position': 'relative'});
	var cw = self.settings.width;
	var ch = self.settings.height;
	self.x = 0;
	self.y = 0;
	
	if (ch >= cw/2) {
		self.w = cw;
		self.h = cw/2;
		self.y = (ch - self.h) / 2;
	} else {
		self.h = ch;
		self.w = 2*ch;
		self.x = (cw - self.w)/2;
	}
	
	$.extend(self, {
		
		getPoint: function (phi, lambda) {
			return {'x': Math.floor(self.x + ((180+lambda)/360)*self.w - self.settings.xOffset), 'y': Math.floor(self.y + self.h - ((90+phi)/180)*self.h)};
		},
		
		highlight: function(uploadId) {
			var id = 'upload-marker-' + uploadId;
			$('.mappoint').removeClass('mappoint-selected');
			$('#' + id).addClass('mappoint-selected');
		},
	
		add: function(uploadId, phi, lambda) {
			var p = self.getPoint(phi, lambda);
			var id = 'upload-marker-' + uploadId;
			var d = '<div id="' + id + '" class="' + self.settings.markerClassName + '" style="position: absolute; top: ' + (p['y'] - self.settings.markerHeight / 2) + 'px; left:' + (p['x'] - self.settings.markerWidth / 2) + 'px"></div>';
			self.target.append(d);
			var c  = $('tr#upload-'+uploadId+' td').eq(1).text();
			$('#' + id).qtip({
				content: c,
				style: {
					tip: 'topMiddle',
					name: 'tableinfo'
				},
				position: {
					corner: {
						target: 'bottomMiddle',
						tooltip: 'topMiddle'
					}
				}
			});
		}
		
	});
	
	return self;
	
}

var j = 0;
function id(id) {
	return "lol-map-" + id + "-" + j;
}

function init(settings, id) {
	var mm = new Mapmonitor($(this), settings, id);
	$(this).data('mapmonitor', mm);
}
	
$.fn.mapmonitor = function(options, notation) {
	
	var command = String(options).toLowerCase();
	
	if(typeof options === 'string') {
		
		$(this).each(function() {
			var api = $(this).data('mapmonitor');
			if(!api){ return true; }
			
			if (command === 'add') { api.add(notation[0], notation[1], notation[2]) }
			else if (command === 'highlight') { api.highlight(notation) }
			
		});
		
	} else if(typeof options === 'object') {
		var settings = $.extend(true, {}, $.fn.mapmonitor.defaults, options);
		return this.each(function() {
			var obj = init.call($(this), settings, $(this).attr('id'));
			if(obj === false) { return true; }
			return obj;
		});
	}
	j++;
	
}

$.fn.mapmonitor.defaults = {
		width: 1000,
		height: 500,
		xOffset: 101,
		markerClassName: 'mappoint',
		markerWidth: 54,
		markerHeight: 54
};

}(jQuery));