// JPMarker
function JPMarker(markersSrc, markerWidth, markerHeight, points, photos, photos_desc, view) {
	this.points = points;
	this.photos = photos;
	this.photos_desc = photos_desc;
	this.srcPhotos = markersSrc;
	this.markerW = markerWidth;
	this.markerH = markerHeight;
	this.view = view;
	this.None = -1;	
}
JPMarker.prototype = new GOverlay();

JPMarker.prototype.initialize = function(map) {
	var pane = map.getPane(G_MAP_MARKER_PANE);
	var events = ["mouseover", "mouseout", "click"];
	this.mDivs = [];
	this.map = map;
	this.infodiv;	
	this.infoindex = -1;
	this.selectIndex = this.None;
	var self = this;	
	
	var img = new Image();

	img.onload = function() {
		setTimeout(function() {
			for (var i = 0; i < self.mDivs.length; i++)
				self.mDivs[i].style.backgroundImage = "url(" + self.srcPhotos + ")";
		}, 200);
	};

	img.src = this.srcPhotos;
		
	this.infodiv = document.createElement("div");
	var s = this.infodiv.style;
	s.position = "absolute";
	s.cursor = "pointer";	
		
	for (var i = 0; i < this.points.length; i++)
	{		
		var div = document.createElement("div");
		var s = div.style;				
		s.border = "1px solid #F0F0F0";
		s.width = (this.markerW - 2) + "px";
		s.height = (this.markerH - 2) + "px";
		s.backgroundPosition = "-1px " + (-i * this.markerH - 1) + "px";
		s.position = "absolute";
		s.cursor = "pointer";
		s.zIndex = GOverlay.getZIndex(this.points[i].lat());		
		pane.appendChild(div);
		this.mDivs.push(div);
				
		for (var j = 0; j < events.length; j++)
		{
			(function(){
			var idx = i;
			var tevent = events[j];
			GEvent.addDomListener(div, tevent, function() { GEvent.trigger(self, tevent, idx);});})();
		}			
	}
};

JPMarker.prototype.remove = function(map) {
	for (var i = 0; i < this.mDivs.length; i++)
	{
		this.mDivs[i].parentNode.removeChild(this.mDivs[i]);
		GEvent.clearInstanceListeners(this.mDivs[i]);
	}
};

JPMarker.prototype.copy = function() {
	return new JPMarker(this.srcPhotos, this.markerW, this.markerH, this.points);
};

JPMarker.prototype.redraw = function(force) {
	if (!force) return;

	for (var i = 0; i < this.points.length; i++)
	{		
		var c = this.map.fromLatLngToDivPixel(this.points[i]);
		var s = this.mDivs[i].style;
		s.left = (c.x - this.markerW / 2 - 1) + "px";
		s.top = (c.y - this.markerH / 2 - 1) + "px";
	}	
	if(this.infoindex >= 0)
		this.openInfoWindowHtml(this.infoindex, true, true);		
};

JPMarker.prototype.unselect = function() {	
	if(this.selectIndex >= 0 && this.selectIndex < this.mDivs.length) {
		var s = this.mDivs[this.selectIndex].style;		
		s.border = "1px solid #F0F0F0";
		s.left = (parseInt(s.left) + 1) + "px";
		s.top = (parseInt(s.top) + 1) + "px";
		s.zIndex = GOverlay.getZIndex(this.points[this.selectIndex].lat());	
		this.selectIndex = this.None;
	}
}

JPMarker.prototype.select = function(i) {		
	if (this.selectIndex != this.None)
		this.unselect();

	if (i == this.None || (i >= 0 && i < this.mDivs.length))
	{
		this.selectIndex = i;
		if (i != this.None)
		{
			var s = this.mDivs[i].style;
			s.border = "2px solid #FF7800";
			s.left = (parseInt(s.left) - 1) + "px";
			s.top = (parseInt(s.top) - 1) + "px";			
			s.zIndex = GOverlay.getZIndex(-100000);
		}
	}
};

JPMarker.prototype.closeInfoWindowHtml = function() {		
	try {
		this.map.getPane(G_MAP_MARKER_PANE).removeChild(this.infodiv);
	} catch(err) {}		
	this.infoindex = this.None;						
}			

JPMarker.prototype.openInfoWindowHtml = function(i, redraw, move) {
	if (i == this.None || (i >= 0 && i < this.mDivs.length))
	{		
		this.select(i);
		this.selectIndex = i;
		if (i != this.None)
		{
			if(this.infoindex == i && redraw!=true) { //already opened
				this.map.getPane(G_MAP_MARKER_PANE).removeChild(this.infodiv);
				this.infoindex = this.None;				
				return;
			}
									
			//this.map.panTo(this.points[i]);
			if(move) {
				var offset = 90;
				if(this.view == "map") offset = 200;						
				var c = this.map.fromLatLngToDivPixel(this.points[i]); 
				var c2 = this.map.fromDivPixelToLatLng(new GPoint(c.x + offset, c.y + offset));			
				this.map.panTo(c2);
			}
			
			this.infoindex = i;			
			var winClass = "markerInfo";
			var c = this.map.fromLatLngToDivPixel(this.points[this.infoindex]);
			var s = this.infodiv.style;
			s.left = (c.x + this.markerW / 2 + 3) + "px";
			s.top = (c.y - this.markerH / 2) + "px";
			s.display = "block";			
			s.zIndex = GOverlay.getZIndex(-901.0);		
			
			var html; 						
			html = "<table><tr><td><center><img src=\"" + this.photos[i] + "\"></center></td></tr><tr><td><center>" + this.photos_desc[i] + "</center></td></tr></table>";
			//html = "<table><tr><td><center><img src=\"" + this.photos[i] + "\"></center></td></tr></table>";
						
			this.infodiv.innerHTML = "<div class='" + winClass + "'>" + html + "</div>";
			this.map.getPane(G_MAP_MARKER_PANE).appendChild(this.infodiv);
						
			GEvent.addListener(this.infodiv, "click", function(i) {									
				this.closeInfoWindowHtml();
			});					
		}
	}
};



