if (typeof API == 'undefined')
	API = {};
API.map = new function() {
	
	defaults = {};
	this.create = function(p,points){		
		new map(p);		
	};
	
	var map = function(p,points){
		
		var instance = this;
		var params = {
			container: '.points',
			defaultDescription: "No description",
			promptText: "Type in point description",
			admin: false,
			save: {
				label: "Save"
			},
			points : {},
			singlePoint: false
		};
		jQuery.extend(true, params, p);
		var points = {};
		var cnt = null;
		
		this.init = function(){	
			cnt = $(params.container);
			$.each(params.points,function(index,pointData){				
				var point = instance.createPoint(pointData.coords,pointData.description,pointData.selected);
			});
			if(params.admin === true){	
				$(cnt).click(function(e){												
					cnt.html('');
					params.points = {};
					var reply = '';							
					var point = instance.createPoint({x:e.layerX-4, y:e.layerY-4},reply);
				});
				$(cnt).addClass('adminMap');
			}			
			instance.createMenu();
			$(document).ajaxSuccess(function() {
				if(typeof Cufon != 'undefined') Cufon.refresh();
				instance.createMenu();				
			});
			if(typeof Cufon != 'undefined') Cufon.refresh();
		}
		this.createMenu = function(){
			if(typeof API.menu == 'undefined' || params.singlePoint) return;
			API.menu.create({
				menu: '.navigation,.map_box .points',
				children: '.children',
				item: '.point',
				hover: 'hover'
			});
		}
		this.createPoint = function(coords,description,selected){
			
			var pointData = {
				coords: coords,
				description: description
			}
			var index = "X"+coords.x+"Y"+coords.y;
			var point = $('<div class="point">');
			var pointer = $('<span>&nbsp;</span>');
			var children = $('<div class="children description">');
			if(selected || params.singlePoint) point.addClass('hover');	
			point.append(pointer)
			if(pointData.description) point.append(children);
			
			if(description) children.html(description);
			if(coords && coords.x && coords.y){
				point.css({
					left: coords.x,
					top: coords.y
				});
			}			
			points[index] = pointData; 
			if(params.admin === true){
				point.click(function(e){
					instance.deletePoint(point,pointData,index);
					e.stopPropagation();
				});	
			}			
			cnt.append(point);
			$('.current_point').val(coords.x+';'+coords.y);
			return point;
		}
		this.deletePoint = function(point,pointData,index){
			point.remove();
			delete points[index];
		}
		
		$(document).ready(function(){
			instance.init();
		});		
	}
}
