var prev_win_id=null;
var photo_list; // id of photo list window
var progressBar;

function show_loading(){
	var loading_div = document.createElement('div');
	$(loading_div).appendTo('body').addClass('loading').css({'top':100,'left':window_width/2-17,'width':40,'height':40,'position':'absolute',
															'background-image':'url(../images/loading.gif)','background-repeat':'no-repeat','z-index':9999})
}

function close_infowin6(){
	$(".infowin6").remove()
}

function infowin6(marker,html,sx,sy){ // postioned from marker, no header, no close option, if marker==0 - positioned from cursor; sx, sy - adjustments if required
	close_infowin6();
	var w_left = cursor_xy.x + 100
	var w_top = cursor_xy.y + 100;	
	if (marker){ // with text over marker
		var map = eval(marker.side+"_map");
		var point=map.fromLatLngToContainerPixel(marker.getLatLng());
		if (!sx) sx = 0;
		if (!sy) sy = 0;
		var w_left=point.x + sx;
		var w_top=point.y + 46 + sy;
		if (number_of_panes==2 && marker.side=='right')
			w_left += window_width/2
		var beak = document.createElement('div');	
		$(beak).appendTo('body').addClass('infowin6').css({'top':w_top,'left':w_left - 8,'position':'absolute','z-index':win_index+2}).html('<img src="../images/beak_12.png">')
	}
	var buf = document.createElement('div');
	$(buf).appendTo('body').html(html)
//	$(buf).hide();
	var infodiv = create_infodiv(w_left - 50,w_top - buf.offsetHeight,null)
	$(infodiv).addClass('shadow5 infowin6').css({'z-index':win_index+1}).html(html)
	$(".infowin6").hide().fadeIn(1000)
}

var closeby_ids = new Array(4)
var empty_closeby = [true,true,true];
var ov_options = new Array(4);
ov_options['album'] = 0; 
ov_options['oldmos'] = 1;
ov_options['temple'] = 2;
ov_options['photo'] = 3;
var move_listeners = [];

function open_closeby_window(option){
	var headers = ["Документы из галереи","Старые фотографии","Храмы (temples.ru)","Фото Panoramio"]
	var id = closeby_ids[option];
	if (!$("#" + id).html()){
		for (var i=0;i<4;i++){
			if (empty_closeby[i]){
				id = closeby_ids[option] = infowin2(window_width - 220 - 220*i, 72, 210, window_height - 85,"<small>" + headers[option] + "</small>",'',1);
				get(id).closeby_num = i;
				empty_closeby[i] = false;
				break;
			}
		}
	}
	$("#" + id).css({'z-index' : win_index + 2}).addClass('closeby');
	return id
}

function close_closeby_window(ov_name){
	var option = ov_options[ov_name];
	if (option || option == 0){
		var id = closeby_ids[option];
		if (div = document.getElementById(id)){			
			empty_closeby[div.closeby_num] = true;
			$(div).remove()
		}
	}
}

function show_closeby(side,option,pid){
	show_loading();
	var id = open_closeby_window(option);
	var win = get(id).win;
	var str='../read_closeby_' + ((option) ? 'temples' : 'coord') + '.php?coord=' + Gcenter.lat().toString().substring(0,9) + ',' + Gcenter.lng().toString().substring(0,9) + '&side=' +side;
	if (pid)
		str='../read_closeby_' + ((option) ? 'temples' : 'coord') + '.php?pid=' + pid + '&side=' +side;
	$("#info_inner" + win).load(str,function(){$('.loading').remove();});
}

function show_beaked_temple(coord,side,url,title,status){
	var latlng = latlng_from_text(coord);
	var marker = new GMarker(latlng);
	marker.side = side;
	var html = 	'<table cellspacing="0" cellpadding="2" class="shadow5" style="background-color:#8a7873;color:#fff;padding:2px;"><tr><td><div style="text-align:center;width:100px ">' +
				'<img src="' + url + '" width=100 height=100/></div></td></tr><tr><td><div style="padding:2px;font-size:7pt;width:100px">' + title + '</div></td></tr></table>';
	infowin6(marker,html,(status*1)? 13 : 0,-20) // just adjustments without clear understanding of the origin 
}

//============================================================================= Oldmos pictures ===================================================================

var markers=[];
var oldmos_view = "http://oldmos.ru/photo/view/";

function show_oldmos_preview(pid,side){ // without beak 
	infowin6(0,oldmos_marker_html(cmarkers[side][pid]))
}

function show_beaked_oldmos(pid,side){
	//GLog.write("beaked pid="+pid)
	infowin6(cmarkers[side][pid],oldmos_marker_html(cmarkers[side][pid]))
}

function show_pic_list(side){
	var ma = cmarkers[side]
	var html = '<table cellspacing="0" cellpadding="0" width="100%">';
	for (var i=0;i<pids.length;i++){
		var pid = pids[i].pid;
		marker=ma[pid];
		var j=i+1;
		html+='<tr style="background-color:'+change_color()+'"><td>&nbsp;&nbsp;</td><td valign="top" align="right">' + j
				+ '.</td><td onmouseover="show_oldmos_preview(&quot;' + pid + '&quot;,&quot;' + marker.side + '&quot;)" onmouseout="close_infowin6()"><a class="f" onclick="medium_pic(' + pid + ',&quot;'+side+'&quot;);">&nbsp;&nbsp;'+marker.date+'&nbsp;&nbsp;'+marker.title+ '</a></td></tr>';
	//	}
	}
	html+='</table>';
	photo_list=infowin2(570,75,540,565,"Список близлежащих фотографий (" + pids.length + ")",html,2);
}

function oldmos_marker_html(marker, option){
	var title = marker.date + '. ' + marker.title;
	if (title.length > 60)
		title = title.substr(0,60) + '&hellip;';
	title = title.replace(/\"/g,"'")	
	if (option)
		html = '<table style="max-height:200px;width=120px"><tr><td valign="top" align="center" style="min-width:120px"><img onmouseover="show_beaked_oldmos(&quot;' + marker.pid + '&quot;,&quot;' + marker.side + '&quot;);expand_oldmos_thumb(&quot;' + title + '&quot;,this)" onmouseout="close_infowin3();close_infowin6()" onclick="medium_pic(&quot;' + marker.pid + '&quot;,&quot;' + marker.side + '&quot;)" style="float:none" src="' + oldmos_dir + marker.url +'" align=center border=1></td></tr><tr><td class="pictitle">' + icon_img(marker.date) + '&nbsp;<small>' + title + '</small></td></tr></table>'
	else	
		html = '<table cellspacing="0" cellpadding="2" class="shadow5" style="background-color:#8a7873;color:#fff;padding:2px;"><tr><td><div style="text-align:center;width:100px ">' +
		'<img src="' + oldmos_dir + marker.url +'" border=1 width=100 height=100/></div></td></tr>' +
		'<tr><td><div style="padding:2px;font-size:7pt;width:100px">' + title + '</div></td></tr></table>';
	return html	
}

var need_closeby = false;

function show_c(side){
	var ma = cmarkers[side];
	GLog.write("Current cmarkers")
	for (var pid in ma){
		GLog.write("cmarkers pid="+pid)
	}
}

function find_closeby_level17(pid,side){
//	GLog.write("Closeby for pid="+pid)
//	show_c(side)
	need_closeby = true;	
	close_infowin2(photo_list);
	Gcenter = latlng_from_text(cmarkers[side][pid].coord);
	Gzoom = 17;
	delete_markers(side);
	eval(side + "_map").setCenter(Gcenter,Gzoom);
	update_control_bar();
	update_url();
}

var cmarkers=[];
var clatlng;
var found_pics = 0;
var seek_zoom = 17;

function find_closeby_pic(pid,side,zoom,latlng){
	var tiles_to_load = 9;
	//GLog.write("seeking on zoom "+zoom+" found pics = "+found_pics+" pid="+pid+" latlng="+latlng)
	function tile_loaded(){
		tiles_to_load--;
		if (tiles_to_load<=0){
			if (found_pics<5 && seek_zoom > 12){
				seek_zoom--;
				find_closeby_pic(pid,side,seek_zoom,latlng)
			}
			else{
				found_pics = 0;
				seek_zoom = 17;
				show_oldmos_closeby(latlng,side);				
				$('.loading').remove();
			}
		}
	}
	function load_oldmos_tile(url){
	$.ajax({
		type: "GET",
		url: url,
		dataType: "xml",
		error: tile_loaded, 
		success: function(result,status,xmlhttp){		
			var x= xmlhttp.responseXML.documentElement.getElementsByTagName("m");
		//	GLog.write("found m elements="+x.length+" for "+url );
			for (i=0;i<x.length;i++){
				var m=x[i];			
		//		GLog.write("coord="+m.getAttribute("p")+" "+filename+" "+url+" "+pid+" "+description+" "+width+" "+height+" "+modified);							
				var latlng = latlng_from_text(m.getAttribute("p"));
				var marker = new GMarker(latlng);
				marker.coord = m.getAttribute("p");
				marker.pid = m.getAttribute("r");
				marker.title = m.getAttribute("d");
				marker.date = m.getAttribute("t");				
				marker.url = m.getAttribute("u");
				marker.side = side;
				if (!cmarkers[side]){
				//	if (zoom==17 || !cmarkers[side]){	
					cmarkers[side]=[];
					found_pics=0;
				}
				cmarkers[side][marker.pid] = marker;
				found_pics++;
		//		GLog.write("Adding pid "+marker.pid)
			} // for
		//	GLog.write("Tile load success, tiles_loaded="+tiles_loaded+" num_of_tiles="+num_of_tiles)
			tile_loaded();
		}	//  reading tile
	}); // tile circle
	} // load_oldmos_tile
	show_loading();
	if (!latlng)
		latlng = markers[side][pid].getLatLng();
	var currentProjection = G_NORMAL_MAP.getProjection();
	var tilePoint = currentProjection.fromLatLngToPixel(latlng, zoom);
	var tileCoordinate = new GPoint(Math.floor(tilePoint.x / 256),Math.floor(tilePoint.y / 256));
	for (var x=tileCoordinate.x-1; x <= tileCoordinate.x+1;x++)
		for (var y=tileCoordinate.y-1; y <= tileCoordinate.y+1; y++)			
			load_oldmos_tile('xmlsn/' + TileToQuadKey(x,y,zoom) + '.xml')
} // find_closeby_pic

var pids;
var first_entry = true;

function show_oldmos_closeby(master_latlng,side){
	need_closeby = false;
	function cmp(a, b) {
 		return a.distance - b.distance
	}
	var ma = cmarkers[side];
	pids = [];
	for (var pid in ma){
		var latlng = latlng_from_text(ma[pid].coord);
		var current = new Object();
		current.distance = Math.round(latlng.distanceFrom(master_latlng));
		current.pid = pid;
		pids.push(current);
	}
	pids.sort(cmp);
	var id = open_closeby_window(1);
	var win = get(id).win;
	var html = '<table cellspacing="0" cellpadding="0">';
	for (var i=0;i<Math.min(37,pids.length);i++)
		html += '<tr><td style="border:2px solid white"> ' + oldmos_marker_html(ma[pids[i].pid],1) + '</td></tr>';
	html += '</table>'
	$("#info_inner" + win).html(html);
	if (first_entry && overlays['oldmos'][side]>1){ // showing pid if explicitely set in url: rightoldmos=pid
		first_entry = false;
		medium_pic(overlays['oldmos'][side],side)		
	}
}

function medium_pic(pid,side){
	function about_pic(pid,side){
		var prev = "";
		var next = "";
		var current = false
		for (var i=0;i<pids.length;i++){
			var p = pids[i].pid;
			if (p == pid)
				current = true
			else 
				if (current) // reached next
					return {'current':i,'next':p,'prev':prev}
				else
					prev = p
		//	}
		}	
		return {'current':i+1,'next':'','prev':prev}
	}
	//GLog.write("medium pid="+pid+" side="+side)
	//show_c(side);
	var marker;
	var ma;
	try {
		marker = cmarkers[side][pid];ma = cmarkers[side]
		}
	catch(e){
		marker = markers[side][pid];ma = markers[side]
		};
	//for (var pid in ma){
	//	GLog.write("pid="+pid+" marker="+marker)
	//}
//	GLog.write("pid="+marker.pid)	
	var url=marker.url;	
	var pic=url.replace("th_","500_");
	var pid_prop = about_pic(pid,side);
	var p_pid = pid_prop.prev;
	var n_pid = pid_prop.next;
	var	prev = (p_pid)? '<a class="f" onclick="medium_pic(&quot;' + p_pid + '&quot;,&quot;'+side+'&quot;);" title="Показать предыдущую по списку фотографию">Пред</a>' : "";
	var	next = (n_pid)? '<a class="f" onclick="medium_pic(&quot;' + n_pid + '&quot;,&quot;'+side+'&quot;);" title="Показать следующую по списку фотографию">След</a>' : "";
	var closeby = '<a class="f" onclick="find_closeby_level17(&quot;' + pid + '&quot;,&quot;' + side + '&quot;);" title="Увеличить масштаб и показать близлежащие фотографии">Рядом</a>'
	var	caption = "Фотография " + pid_prop.current + " из ";
	var list='<a class="f" onclick="show_pic_list(&quot;'+side+'&quot;);" title="Показать список фотографий в текущем окне карты">Список</a>';
	var title = marker.date + " " + marker.title;
	var oldmos_link = '<a class="f" href="' + oldmos_view + marker.pid + '" target="_blank">'
	var html = '<table width=510 height=510><tr style="background-color:#fff"><td>'+ caption + pids.length + ' в текущем окне карты</td></td><td align=right>' + prev + bsp + next + bsp + closeby + bsp + list + '</td></tr>' +
		'<tr><td colspan=2 width=505 height=505 bgcolor=#fffaec align=center valign=middle>' + oldmos_link + '<img id="info_pic" src="' + oldmos_dir + pic + '" border="0" alt="Загружается..."/></a></td></tr>' +		
		'<tr style="background-color:#fff"><td align=left>' + oldmos_link + 'Эта фотография на форуме oldmos.ru</a></td><td align=right><a class="f" href="../pictures_last.html">Последние добавленные фото</a></td></table>';
	close_infowin(prev_win_id)
	prev_win_id=infowin(null,null,540,title,html);
	info_zindex = $('#'+prev_win_id).css('z-index');
	attach_enlarge()
	var file800 = url.replace("th_","800_");
	var img = get("info_pic")
	img.pic800 = new Image()
	img.pic800.src = oldmos_dir + file800;
	overlays['oldmos'][side] = pid;
	update_url()
}

function attach_enlarge(){
	$("#info_pic").hover(function(){enlarge(1)},function(){enlarge(0)})
}

var info_zindex;

function enlarge(option){ // infowindow with img enlarging
	var info_div = get(prev_win_id)
	var info_header = get("info_header" + info_div.win)
	var info_inner = get("info_inner" + info_div.win)
	var info_close = get("info_close" + info_div.win)
	var img = get("info_pic")
	var delta_w;
	var t = 2000;
	
	function set_size_800(){img.src = img.pic800.src}
	function expand_info_div(){
		$(info_div).add(info_header).each(function(){$(this).animate({'width':($(this).width()) + delta_w},t,set_size_800)})
	}
	close_infowin6()
	$(img).unbind('mouseover'); // to avoid multiple enlargings
	
	if (option){ // enlarge
		$(info_div).css({'z-index':win_index + 2});
		$(img).add(info_div).add(info_header).each(function(){
			if (!this.w){
				this.w = $(this).width();
				this.h = $(this).height();
			}
			});
		if (img.w == 500){
			delta_w = (img.h > 300) ? 300 : 500;
			expand_info_div()
			$(img).animate({'width':500 + delta_w,'height':img.h*(500 + delta_w)/500},t)
		}
		else {
			var new_pic_width = Math.round(img.w*(window_height-100)/500);
			if (new_pic_width > 500){
				delta_w = Math.max(0,new_pic_width - 540) + 24;
				expand_info_div();
				$(img).animate({'width':new_pic_width,'height':window_height-100},t)}
			else
				return
		}
		$(info_inner).find('a').add(info_close).css({'visibility':'hidden'})
		$(img).css({'visibility':'visible'})
		
	}
	else { // to normal position
		$(img).animate({'height':img.h,'width':img.w},t,function(){$(img).bind('mouseover',function(){enlarge(1)});})
		$(info_div).add(info_header).each(function(){$(this).animate({'width': this.w},t,function(){$(info_div).css({'z-index':info_zindex});$(info_inner).find('a').add(info_close).css({'visibility':'visible'})})})		
	}
}

function delete_markers(side){
	var map = eval(side+"_map");
	for (var pid in markers[side])
		map.removeOverlay(markers[side][pid]);
	$('img[src*="oldmos_icons"]').remove() // these are oldmmos markers	
	$('.smarker'+side).remove();
	markers[side]=[];	
}

function manage_oldmos(side,option){
	var tiles_to_load;
	
	function is_visible(marker){
		return map.getBounds().containsLatLng(marker.getLatLng())
	}
	
	function add_visible(marker){
		map.addOverlay(marker);
		marker.vis=true;
		GEvent.addListener(marker, "mouseover", function(){infowin6(this,oldmos_marker_html(this))});
		GEvent.addListener(marker, "mouseout", function(){close_infowin6()});
		GEvent.clearListeners(marker,"dblclick");
		GEvent.addListener(marker, "dblclick", function(){medium_pic(this.pid,side)}); 
		GEvent.clearListeners(marker,"click");
		GEvent.addListener(marker, "click", function(){find_closeby_pic(this.pid,side,17)});
	}
	
	function find_visible(){
		for (var pid in markers[side]){
			var marker=markers[side][pid];
			if (is_visible(marker)){
				add_visible(marker);
			}
		}		
	}
	function load_error(){
		//GLog.write("Error in loading tile")
		tile_loaded()
	}
	function tile_loaded(){
		tiles_to_load--;
		progressBar.updateLoader(1);
		if (tiles_to_load<=0){
	//		find_visible();
	//		GLog.write("XML tiles loading completed")
			progressBar.remove();
			find_closeby_pic('',side,17,Gcenter);
			if (need_closeby)
				show_oldmos_closeby(Gcenter,side);
			}
	}
	function load_oldmos_xml_tile(url){
		$.ajax({
			type: "GET",
			url: url,
			dataType: "xml",
			error: load_error, //tile_loaded
			success: function(result,status,xmlhttp){
			   try {		
					var x= xmlhttp.responseXML.documentElement.getElementsByTagName("m");
				//	GLog.write("found m elements="+x.length+" for "+url );
					for (i=0;i<x.length;i++){
						var m=x[i];			
						var icon = new GIcon();
						icon.iconAnchor = new GPoint(6,3);
						icon.iconSize = new GSize(11, 11);
						var date=m.getAttribute("t");
						icon.image = icon_src(date);
				//		GLog.write("coord="+m.getAttribute("p")+" "+filename+" "+url+" "+pid+" "+description+" "+width+" "+height+" "+modified);							
						var latlng = latlng_from_text(m.getAttribute("p"));
						var marker = new GMarker(latlng, {icon:icon});
						marker.pid = m.getAttribute("r");
						marker.title = m.getAttribute("d");
						marker.date = date;					
						marker.url = m.getAttribute("u");
						marker.side = side;
						markers[side][marker.pid] = marker;	
					//	GLog.write("coord="+m.getAttribute("p")+" "+marker.url+" "+marker.title);
						if (is_visible(marker))
							add_visible(marker);
						else
							marker.vis=false
					} // for
					var a = xmlhttp.responseXML.documentElement.getElementsByTagName("t"); // reading invisible markers #
					for (i=0;i<a.length;i++){
						var m = a[i];
						var invisible = m.getAttribute("i");
						if (invisible>0){
							var currentProjection = G_NORMAL_MAP.getProjection();
							var tilePoint = currentProjection.fromLatLngToPixel(latlng, map.getZoom()); 
							var tileCoordinate = new GPoint(Math.floor(tilePoint.x / 256),Math.floor(tilePoint.y / 256));
							var tile_center = new GPoint(tileCoordinate.x*256,tileCoordinate.y*256);
							var latlng_center = currentProjection.fromPixelToLatLng(tile_center, map.getZoom());
						//	GLog.write("x="+point.x+" y="+point.y)
							var s_div = document.createElement('div');
							map.getPane(G_MAP_MARKER_PANE).appendChild(s_div);
							var pos = map.fromLatLngToDivPixel(latlng_center);
							// GLog.write("x="+pos.x+" y="+pos.y)
							var key = 64;
							if (invisible < 250)
								key = 48
							if (invisible < 100)
								key = 40
							if (invisible < 10)
								key = 32
							var marker_url = 'url(../images/cluster_' + key + '.png)';
						//						var marker_url = 'url(http://oldmos.ru/public/images/dots/cluster_' + key + '.png)';
							$(s_div).css({'left':pos.x + tilePoint.x % 100 ,'top':pos.y + tilePoint.y % 100,'padding-top':key/2-6,'background-image':marker_url,'background-repeat':'no-repeat','width':key,'height':key,'position':'absolute','font-size':'7pt','font-weight': 'bold','text-align':'center','z-index':999});
							$(s_div).html(invisible).attr('title', 'Число маркеров, которые не показаны в этом месте при данном увеличении карты.').addClass('smarker'+side)//.fadeTo(0,0.8)
							GEvent.addDomListener(s_div, "click", function () {dblclickzooming(overlay,map.fromDivPixelToLatLng(new GPoint(cursor_xy.x,cursor_xy.y)))})
						}
					}
				//	GLog.write("Tile load success, tiles_loaded="+tiles_loaded+" num_of_tiles="+num_of_tiles)
					tile_loaded();
				} //try
				 catch (er) {
				//	GLog.write("Error tiles_loaded="+tiles_loaded+" num_of_tiles="+num_of_tiles)
					tile_loaded();
				} // catch
			}	//  reading tile
		}); // tile circle
	} // load_oldmos_xml_tile
	var	old_sw=new GPoint(0,0);
	var	old_ne=new GPoint(0,0);
	
	function update_oldmos_markers(from_zoom){
		var zoom=map.getZoom();
		if (zoom>17)
			zoom=17;
		var currentProjection = G_NORMAL_MAP.getProjection();	
		var sw_Point = currentProjection.fromLatLngToPixel(map.getBounds().getSouthWest(), zoom);
		var ne_Point = currentProjection.fromLatLngToPixel(map.getBounds().getNorthEast(), zoom);
		var sw_Coordinate = new GPoint(Math.floor(sw_Point.x / 256),Math.floor(sw_Point.y / 256));
		var ne_Coordinate = new GPoint(Math.floor(ne_Point.x / 256),Math.floor(ne_Point.y / 256));		
		close_infowin6();
		close_infowin2(photo_list); //closing window with the list of photos to avoid inconsistency	
		/*
		if (Math.abs(sw_Coordinate.x-old_sw.x) +
			Math.abs(sw_Coordinate.y-old_sw.y) +
			Math.abs(ne_Coordinate.x-old_ne.x) +
			Math.abs(ne_Coordinate.y-old_ne.y) < 3) {
			find_visible();
			return
			}
			*/
		old_sw = sw_Coordinate;
		old_ne = ne_Coordinate;		
		delete_markers(side);
		tiles_to_load=(ne_Coordinate.x-sw_Coordinate.x+1)*(sw_Coordinate.y-ne_Coordinate.y+1);
		progressBar.start(tiles_to_load);
		//find_closeby_pic('',side,Gzoom,Gcenter);
		for (var x=sw_Coordinate.x; x < ne_Coordinate.x+1;x++)
			for (var y=ne_Coordinate.y; y < sw_Coordinate.y+1; y++)			
				load_oldmos_xml_tile('xmlsn/' + TileToQuadKey(x,y,zoom) + '.xml') //!!!!!!!
	} // update_oldmos_markers
	
	var map = eval(side+"_map");
	if (option=="load"){
		if (!overlays['oldmos'][side]) // can be set in loadparameters with rightolmos=pid 
			overlays['oldmos'][side] = 1;
	//	GLog.write("loading oldmos")
	//	old_sw.x=old_sw.y=old_ne.x=old_ne.y=0;
		progressBar = new ProgressbarControl(map, {width:250, loadstring:'Фотографии загружаются...'});
		update_oldmos_markers(map,0);
		//find_closeby_pic('',side,Gzoom,Gcenter)
		move_listeners['oldmos'] = GEvent.addListener(map, 'moveend',function(){update_oldmos_markers(this,0)});
		}
	else { //unload	
		overlays['oldmos'][side] = null;
	//	GLog.write("unloading oldmos")
	//	close_infowin2();
		close_infowin6();
		delete_markers(side);
		GEvent.removeListener(move_listeners['oldmos']) 
		//GEvent.clearListeners(map,'moveend');
		//GLog.write("markers deleted")
	//	GEvent.removeListener(move_listeners[side]);
	}
} // manage_oldmos
//============================================================================= Gallery albums ===================================================================
var gallery_view = "../gallery/displayimage.php?pid=";
var album_view = "../gallery/thumbnails.php?album=";
var gallery_dir = "../gallery/albums/";
var amarkers=[];
amarkers["left"]=[];
amarkers["right"]=[];
var hidden_albums = [];
var last_marker;
var loaded_pictures = []
loaded_pictures.left = 0;
loaded_pictures.right = 0;
var total_pictures = 0;

function set_pic_number(aid,pic_number){ // called from mapster.php
	if (albums[aid]){
		albums[aid].pic_number = pic_number;
		total_pictures += pic_number;
	}
	else
		hidden_albums[aid] = pic_number;	
}

function get_marker_url(aid){
	//return "../gallery/images/map/marker_"+get_album_marker(aid)+"_novalue.png";
	return "../gallery/images/map/" + albums[aid].color + ".png";
}

function get_album_icon(aid){
	var icon = new GIcon();
	var icon_size=12;
//	if (aid==1)
//		icon_size=16;
	icon.iconAnchor = new GPoint(6,3);
	icon.iconSize = new GSize(icon_size,icon_size);
	icon.image = get_marker_url(aid);
	return icon
}

function get_album_title(aid){
	return '<img src="' + get_marker_url(aid) + '">&nbsp;<a class="f" href="' + album_view + aid + '" title="Перейти к просмотру альбома в галерее">' + albums[aid].name +' (' + albums[aid].pic_number + ')</a>';
}

function show_album_pic_list(side){
	close_infowin2(photo_list);
	var html = '<table cellspacing="0" cellpadding="0" width="100%">';
	var am = amarkers[side]
	var j = 0;
	for (var aid in albums){
		if (albums[aid]["loaded_"+side]){
			html+='<tr style="background-color:'+change_color()+'"><td colspan="3"><b>'+ get_album_title(aid) + '</b></td></tr>';
			for (var pid in am){
				var marker=am[pid];
				if (marker.aid == aid){
					j++;
					html+='<tr style="background-color:'+change_color()+'"><td>&nbsp;&nbsp;</td><td valign="top" align="right">' + j
					+ '.</td><td ><a class="f" onmouseover="show_preview(&quot;' + pid + '&quot;,&quot;' + side + '&quot;,0)" onmouseout="close_infowin6()" onclick="show_540(&quot;' + pid + '&quot;,&quot;' + side + '&quot;)">&nbsp;&nbsp;' + marker.date +'&nbsp;&nbsp;' + marker.title + '</a></td></tr>';
				}
			}
		}
	}
	html += '</table>';
	photo_list = infowin2(610,75,540,565,"Документы в текущем окне карты (" + loaded_pictures[side] + ")",html,2);
}

function show_preview(pid,side,option){ // with option - without beak near cursor
	infowin6(option,gallery_marker_html(amarkers[side][pid]))
}

function show_beaked_gallery(pid,side){ // with option - with beak near marker
	infowin6(amarkers[side][pid],gallery_marker_html(amarkers[side][pid]))
}

function about_pid(pid,side){
	var am = amarkers[side]
	var j = 0;
	var prev = "";
	var next = "";
	var current = false
	for (var aid in albums){
		if (albums[aid]["loaded_"+side]){
			for (var p in am){
				if (am[p].aid == aid){
					j++;
					if (p == pid)
						current = true
					else 
						if (current) // reached next
							return {'current':j-1,'next':p,'prev':prev}
						else
							prev = p
				}
			}
		}
	}
	return {'current':j,'next':'','prev':prev}
}

function load_and_show_540(pid,side){
	var url='read_picture.php?pid='+pid;
	$.get(url,function(result,status,xmlhttp){
		var pic = read_picture(xmlhttp);
		load_album_xml(side,'read_album.php?aid=' + pic.aid,function(){show_540(pid,side)})
	})
}

function check_user(pid){
	//alert("user="+user_name)
	if (user_name != 'Anonymous' && user_name)
		window.location.replace('show_pic.php#pid=' + pid + '&hash=' + huffman(" " + pid))
	else
		alert("Просмотр полноразмерных изображений доступен только зарегистрированным пользователям")
}

function show_540(pid,side){
	var marker = amarkers[side][pid];
	if (!marker){ // album is not loaded yet
		load_and_show_540(pid,side);
		return
	}
	$.post("../update_hits.php?pid=" + pid);
	close_infowin2(prev_win_id);
	close_infowin3(); // animated pic with mouseover
	var title = ' title="' + marker.title;
	var pic_file = "normal_" + marker.filename;
	if (marker.pwidth<=540 && marker.pheight<=540){
		pic_file = get_prefix(marker.filename) + marker.filename;
		title += ' - это изображение в полном размере"'
	}
	else 
		title += ' - \nзарегистрированный пользователь может посмотреть полноразмерное изображение"'
		//title += ' - \nзарегистрированный пользователь может посмотреть полноразмерное изображение" onclick="window.open(&quot;../show_pic.php?pid=' + pid + '&hash=' + huffman(" " + pid) + '&quot;,&quot;&quot;,&quot;width=' + marker.pwidth+', height=' + marker.pheight + '&quot;)"'
		//		var js='window.open(&quot;' + gallery_view + pid + '&fullsize='+hash+'&quot;,&quot;&quot;,&quot;width=' + marker.pwidth+', height=' + marker.pheight + '&quot;)'
	
	var pid_prop = about_pid(pid,side);
	var p_pid = pid_prop.prev;
	var n_pid = pid_prop.next;
	var counter = 'Документ ' + pid_prop.current + ' из ';
	var zoom_in='<a class="f" onclick="show_full_size(&quot;' + marker.filepath + '&quot;,&quot;' + marker.filename+'&quot;,' + marker.pwidth + ',' + marker.pheight + ')" title="Посмотреть увеличенное изображение">Увеличить</a>';
	var closeby = '<a class="f" onclick="show_closeby(&quot;' + side +'&quot;,0,&quot;' + pid +'&quot;);" title="Посмотреть документы в ближайших точках">Рядом</a>';
	var prev = (p_pid) ? '<a class="f" onclick="show_540(&quot;' + p_pid + '&quot;,&quot;'+side+'&quot;);" title="Посмотреть предыдущий документ">Предыдущий</a>' : "";
	var next = (n_pid) ? '<a class="f" onclick="show_540(&quot;' + n_pid + '&quot;,&quot;'+side+'&quot;);" title="Посмотреть следующий документ">Следующий</a>' : "";
	var list='<a class="f" onclick="show_album_pic_list(&quot;' + side + '&quot;);" title="Посмотреть список документов">Список</a>';
//GLog.write("pid="+pid + " p=" + p_pid + " n=" + n_pid)
	var html = '<table width=550 height=550>'+
		'<tr style="background-color:#fffaec"><td colspan=3><b>'+ get_album_title(marker.aid) + '</b></td></tr>' + 
		'<tr style="background-color:#fff"><td>'+ counter + loaded_pictures[side] + bsp + zoom_in + bsp + '</td><td id="prev_next" colspan=2>' + prev+ bsp + next + bsp + list + bsp + closeby + '</td></tr>' + 
		'<tr><td colspan=3 width=545 height=545 bgcolor=#fffaec align=center valign=middle>' +
		'<a onclick="check_user(' + pid + ')"><img id="info_pic" src="' + gallery_dir + marker.filepath + pic_file +
//				'<a href="../show_pic.php#pid=' + pid + '&hash=' + huffman(" " + pid) + '" onclick="check_user()"><img id="info_pic" src="' + gallery_dir + marker.filepath + pic_file +

		'" border="1" alt="' + marker.title + ' - документ загружается..."' + title + '/></a><br/>' + marker.caption + '<br/><i>' + marker.source + '</i></td></tr>' +
		'<tr style="background-color:#fff"><td colspan=3 align=center><a class="f" href="' + album_view + marker.aid + '">Альбом в галерее</a>' + bsp + 
		'<a class="f" href="' + gallery_forum(marker.aid) + '">Альбом на форуме</a>' + bsp + 
		'<a class="f" onclick="update_album_list(&quot;'+side+'&quot;)">Список альбомов</a>' + bsp +
		'<a class="f" href="' + gallery_view + pid + '">Этот документ в галерее</a></td> ' +
		'</tr></table>';
	var direction = (marker.direction!="Не определено") ? " (вид " + marker.direction + ")" : "";
	Gcenter = latlng_from_text(marker.coordinates);		
	left_map.panTo(Gcenter);
	right_map.panTo(Gcenter);
	prev_win_id = infowin(null,null,580,marker.date + ". " + marker.title + direction,html,1);
	if (side=="left")
		left_pid = pid
	else
		right_pid = pid
	$("#" + prev_win_id).addClass(side + "_pid");
	update_url();
	update_control_bar();
	show_preview(pid,side,marker);
}

function show_full_size(filepath,filename,pwidth,pheight){
	var url="show_pic.html?path=" + filepath+ "&amp;file=" + filename +"&amp;width="+pwidth+"&amp;height="+pheight
	var spec="width=540,height=540,location=0,menubar=0,resizable=1,titlebar=0,toolbar=0, left=90,top=290"
	var pic_window=window.open(url,"",spec)
	pic_window.focus();
}


function gallery_marker_html(marker){	
	if (!marker){
		return null;
	}
	var ratio = marker.pwidth/marker.pheight
	var base = 120;
	if (ratio>0){
		twidth = base;
		theight = Math.floor(base/ratio)
	}
	else {
		theight = base;
		twidth = Math.floor(base*ratio)
		}			
	var twidthm = Math.max(twidth,120);		
	var twidth2 = twidthm-2;
//	return '<table cellspacing="0" cellpadding="2" class="shadow5" style="background-color:#fffaec;padding:2px"><tr><td><div style="text-align:center;width:'+twidthm+'px ">'+
	return '<table cellspacing="0" cellpadding="2" class="shadow5" style="background-color:#8a7873;color:#fff;padding:2px"><tr><td><div style="text-align:center;width:'+twidthm+'px ">'+	
			'<img src="' + gallery_dir + marker.filepath + 'thumb_' + marker.filename + '" border=1 width='+twidth+' height='+theight+'/></div></td></tr>' +
			'<tr><td><div style="padding:2px;font-size:7pt;width:'+twidth2+'px">'+
			marker.date + '.&nbsp;' + marker.title + '</div></td></tr></table>';
}

function load_album_xml(side,url,callback){
	$.get(url,function(result,status,xmlhttp){
		var map = eval(side+"_map");
		var pic_pid;
		if (eval(side + '_pid'))
			pic_pid = eval(side + '_pid')
	//	var pic_pid=parser(url,"pid="); // for direct acccess to pic
	//	var pic_ind;
		progressBar = new ProgressbarControl(map, {width:250, loadstring:'Альбом загружается...'});
		var xmlDoc=xmlhttp.responseXML;
		var elem=xmlDoc.documentElement;
		if (elem==null){ // empty album
			progressBar.remove();
			return
		}
		var x = xmlDoc.documentElement.getElementsByTagName("m");
		var x_aid = xmlDoc.documentElement.getElementsByTagName("album");
		//GLog.write("found aid elements="+x_aid.length);
		var mx = x_aid[0];				
		try {var aid = mx.getAttribute("aid");}catch(err){
			alert("Ошибка в описании документов галереи");
			window.open(url)}	
		progressBar.start(albums[aid].pic_number);	
	//	GLog.write("aid="+aid);
	//	GLog.write("found m elements="+x.length+" for "+url+" length=" + amarkers[side].length );
		for (i=0;i<x.length;i++){
			var m=x[i];		
			var coord = m.getAttribute("c");
			if (!coord)
				coord = "";
			if (coord){
				var marker = new GMarker(latlng_from_text(coord), {icon:get_album_icon(aid)});	
				marker.coordinates = coord;
				var title = m.getAttribute("t");
				marker.title = (title) ? title : "<Нет названия>";
				var caption = m.getAttribute("q");
				marker.caption = (caption) ? caption : "";
				var date = m.getAttribute("d");
				marker.date = (date) ? date : "<Нет даты>";
				var source = m.getAttribute("s");
				marker.source = (source) ? source : "";
				var direction = m.getAttribute("e");
				marker.direction = (direction) ? direction : "Не определено";	
				marker.pid = m.getAttribute("i")
				marker.aid = aid;
				marker.filepath = m.getAttribute("p")
				marker.filename = m.getAttribute("f")
				marker.pwidth = parseInt(m.getAttribute("w"))
				marker.pheight = parseInt(m.getAttribute("h"))
				marker.side = side;
				amarkers[side][marker.pid] = marker;
		//		GLog.write("pid="+marker.pid+" length=" + amarkers[side].length)
				map.addOverlay(marker);
				loaded_pictures[side]++;
				GEvent.addListener(marker, "mouseover", function(){show_preview(this.pid,side,this);});
				GEvent.addListener(marker, "mouseout", function(){close_infowin6()});
				GEvent.clearListeners(marker,"click");
				GEvent.addListener(marker, "click", function(){show_540(this.pid,side)});
				progressBar.updateLoader(i);
				if (pic_pid == marker.pid)
					show_540(pic_pid,side)
			}
			progressBar.remove();
		} // for
		albums[aid]["loaded_" + side] = true;
		if (callback)
			callback()
	//	GLog.write("Completed loading album aid="+aid)
	//	if (pic_pid!=null)
	//		(pic_ind!=null)? medium_album_pic(pic_ind,side):alert("В галерее не найден документ с pid="+pic_pid)
	})	
}

function manage_album(side){
	function load_album (aid){
		if (albums[aid]["loaded_"+side])
			return
		move_listeners['album']=GEvent.addListener(map, 'moveend',function(){show_closeby(side,0)});
	//	GLog.write("Loading album aid="+aid)
		show_closeby(side,0);
		load_album_xml(side,'read_album.php?aid='+aid)
	} //load_album
	
	function unload_album(aid){
		var pic_pid;
		if (eval(side + '_pid'))
			pic_pid = eval(side + '_pid')
		var new_amarkers=[];
	//	GLog.write("Unloading album aid="+aid)
		var am = amarkers[side];
		for (var pid in am){
			if (pid == pic_pid){
				if (right_pid) right_pid = null;
				if (left_pid) left_pid = null;
				update_url();
			}
			var marker = am[pid];
			if (marker.aid==aid){
				map.removeOverlay(marker);
				loaded_pictures[side]--;
			}
			else
				new_amarkers[pid] = marker
		}
		amarkers[side] = new_amarkers;
		albums[aid]["loaded_" + side] = false;
	//	count_loaded(side)
	} // unload_album	 

	var map = eval(side+"_map");
	close_infowin6();
	var aid_list = overlays["album"][side];	
//	GLog.write("list="+aid_list+" side="+side+" albums.length="+albums.length)
	if (aid_list){
		aids=aid_list.split(",");
		if (aids.length==1)
			if (!albums[aids[0]]){ // check of unknown album - should be users album
				var aid = aids[0]
				albums[aid] = new galbum(328,"Альбом пользователя","BLACK")
				albums[aid].pic_number = hidden_albums[aid];
				total_pictures += hidden_albums[aid];
			}
		var load_all=false;
		for (var aid in albums){
			var album=albums[aid];
			in_the_list=false;
			for (var i=0;i<aids.length;i++){
				//GLog.write("albums[]="+albums[side]+" j="+j+"album="+album+"album.aid="+album.aid+"aids[i]="+aids[i])
				if (aids[i]=="9999"){
					load_all=true;
					break;
				}
				if (aid==aids[i]){
					in_the_list=true;
					break;
				}
			}	
			if (load_all)	
				break;
			if (in_the_list)
				load_album(aid)
		} // loading cycle
		if (load_all)
			for (var aid in albums)
				load_album(aid)
		else { // some albums might require unloading
			for (var aid in albums){
				in_the_list=false;
				for (var i=0;i<aids.length;i++){
					if (aid==aids[i]){
						in_the_list=true;
						break;
					}
				}
				if (!in_the_list)
					unload_album(aid)
			} // unloading cycle
		}
	}
	else { // unloading all
		for (var aid in albums)
			unload_album(aid)
		overlays["album"][side] = false;
		close_infowin6();
		GEvent.clearListeners(map,'moveend');
	}				
	update_subtitle();
//	if (amarkers[side].length==0)
//		alert("В выбранных альбомах нет изображений")
}

function show_beaked_panoramio(coord,side,url,title){
	var latlng = latlng_from_text(coord);
	var marker = new GMarker(latlng);
	marker.side = side;
	var html = 	'<table cellspacing="0" cellpadding="2" class="shadow5" style="background-color:#8a7873;color:#fff;padding:2px;"><tr><td><div style="text-align:center;width:100px ">' +
				'<img src="' + url + '" width=100 height=100/></div></td></tr><tr><td><div style="padding:2px;font-size:7pt;width:100px">' + title + '</div></td></tr></table>';
	infowin6(marker,html) 
}

function show_panoramio(side){
	var found = 0;
	var html = '<table cellpadding="0" cellspacing="2" >';
	var currentProjection = G_NORMAL_MAP.getProjection();
	var zoom = 17;
	var list_widget;
		
	function show_panoramio_closeby(){		
		var id = open_closeby_window(3);
		var win = get(id).win;
		$("#info_inner" + win).html(html);
		$('.loading').remove();
	}
	
	function search_completed(){
		panoramio.events.listen(list_widget, panoramio.events.EventType.PHOTO_CHANGED, function(){});
		html += '</table>';
		show_panoramio_closeby();
	}
	
	function list_loaded(event) {
		var max_pics = 20;
		var arr = list_widget.getPhotos();
		for (var i=0;i<arr.length;i++){
			if (found > max_pics)
				break
			var photo = arr[i];
			if (photo){
				//alert(arr[i].getPhotoId()+arr[i].getOwnerName()+ arr[i].getPhotoTitle()+arr[i].getPosition().lat+arr[i].getPosition().lng )
				var name = photo.getPhotoTitle();
				if (!name)
					name = '<Нет названия>';
				name = name.replace(/\"/g,"'")	
				var title = name + ' (' + photo.getOwnerName() + ')'
				title = title.replace(/\"/g,"'")
				var url = photo.getPhotoUrl();
				var id = photo.getPhotoId()
				var src = 'http://mw2.google.com/mw-panoramio/photos/medium/' + id + '.jpg'
				var small_url = 'http://mw2.google.com/mw-panoramio/photos/square/' + id + '.jpg'
				var ratio = photo.getWidth()/photo.getHeight()
				var coord = '' + photo.getPosition().lat + ',' + photo.getPosition().lng;
				var base = 120;
				if (ratio>0){
					twidth = base;
					theight = Math.round(base/ratio)
				}
				else {
					theight = base;
					twidth = Math.round(base*ratio)
					}
				html += '<tr><td style="border:2px solid white"><table style="max-height:200px;width=120px"><tr><td valign="top" align="center" style="min-width:120px"><a href="' + url + '"><img onmouseover="expand_panoramio_thumb(&quot;' + title + '&quot;,this);show_beaked_panoramio(&quot;' + coord + '&quot;,&quot;' + side + '&quot;,&quot;' + small_url + '&quot;,&quot;' + name + '&quot;)" onmouseout="close_infowin3();close_infowin6()" style="float:none" src="' + src +'" align=center border=1 width=' + twidth + ' height=' + theight + '"></a></td></tr><tr><td class="pictitle"><small>' + title + '</small></td></tr></table></tr>'		
				found++;
			}
		}
		if (found > max_pics)
			search_completed()
		else {
			zoom--;
			if (zoom == 12)
				search_completed()
			else	
				load_panoramio_pics(zoom)
		}
	}
	function load_panoramio_pics(zoom){		
		var tilePoint = currentProjection.fromLatLngToPixel(Gcenter, zoom);
		var sw_px = new GPoint(tilePoint.x - 128,tilePoint.y + 128);
		var ne_px = new GPoint(tilePoint.x + 128,tilePoint.y - 128);
		var sw = currentProjection.fromPixelToLatLng(sw_px, zoom);
		var ne = currentProjection.fromPixelToLatLng(ne_px, zoom);
		//GLog.write('sw='+sw+' ne='+ne)
		var coord = {'rect': {'sw': {'lat': sw.lat(), 'lng': sw.lng()}, 'ne': {'lat': ne.lat(), 'lng': ne.lng()}}};
		var coordRequest = new panoramio.PhotoRequest(coord);
		list_widget = new panoramio.PhotoListWidget('pic_list_div', coordRequest, list_options);
		panoramio.events.listen(list_widget, panoramio.events.EventType.PHOTO_CHANGED, list_loaded);
		list_widget.setPosition(0)
	}
	var list_options = {'width': 70,'height': 100,'columns': 1,'rows': 30,'croppedPhotos': true};
	show_loading();
	var div = document.createElement('div')
	div.id = 'pic_list_div';
	$(div).appendTo('body').css({'display':'none'})
	load_panoramio_pics(zoom)
}

function debugger1(){
	var found = 0;
	var html = '';
	var currentProjection = G_NORMAL_MAP.getProjection();
	var list_options = {'width': 70,'height': 1000,'columns': 1,'rows': 30,'croppedPhotos': true};
	function tile_completed(){
		if (total_tiles<=0)
			GLog.write("completed total_tiles="+total_tiles)
			//$('#right_map_pane').html($('#right_map_pane').html() + "found="+found+" html="+html)
	}
	function tile_loaded(event) {
		var tile_pics_left = 20;
		var arr = list_widget.getPhotos();
		for (var i=0;i<arr.length;i++){
			if (tile_pics_left <=0)
				break
			var photo = arr[i];
			if (photo){
				var name = photo.getPhotoTitle();
				if (!name)
					name = '<Нет названия>';
				name = name.replace(/\"/g,"'")	
				var title = name + ' (' + photo.getOwnerName() + ')'
				title = title.replace(/\"/g,"'")
				var url = photo.getPhotoUrl();
				var id = photo.getPhotoId()
				var src = 'http://mw2.google.com/mw-panoramio/photos/medium/' + id + '.jpg'
				var small_url = 'http://mw2.google.com/mw-panoramio/photos/square/' + id + '.jpg'
				var ratio = photo.getWidth()/photo.getHeight()
				var coord1 = '' + photo.getPosition().lat + ',' + photo.getPosition().lng;		
				var new_pic = found + '. ' + id + ' ' + coord1 + ' ' + title;
				tile_pics_left--;
				found++;
				//GLog.write(new_pic)
				
				html += new_pic + '<br/>';
				$('#right_map_pane').html(html)
			}
		}
		total_tiles--;
		if (tile_pics_left<=0)
			tile_completed()
	} // tile_loaded
	//sw_pt = new GPoint(39567,20551);
	sw_pt = new GPoint(39615,20486);
	ne_pt = new GPoint(39618,20488);
	//ne_pt = new GPoint(39659,20435);
	zoom = 16;
	var total_tiles = (ne_pt.x - sw_pt.x)*(ne_pt.y - sw_pt.y);
	GLog.write("Total tiles="+total_tiles)
	for (x = sw_pt.x; x < ne_pt.x + 1; x++)
		for (y = sw_pt.y; y < ne_pt.y + 1; y++){
			//GLog.write('x='+x+' y='+ y)
			
			var sw_px = new GPoint(x*256 - 128,y*256 + 128);
			var ne_px = new GPoint(x*256 + 128,y*256 - 128);
			var sw = currentProjection.fromPixelToLatLng(sw_px, zoom); // for current tile
			var ne = currentProjection.fromPixelToLatLng(ne_px, zoom);
			var coord = {'rect': {'sw': {'lat': sw.lat(), 'lng': sw.lng()}, 'ne': {'lat': ne.lat(), 'lng': ne.lng()}}};
			var coordRequest = new panoramio.PhotoRequest(coord);
			var div = document.createElement('div')
			div.id      = "list_div"+ x+y;
			$(div).appendTo('body') //.css({'display':'none'})
			list_widget = new panoramio.PhotoListWidget(div.id, coordRequest, list_options);	
			panoramio.events.listen(list_widget, panoramio.events.EventType.PHOTO_CHANGED, tile_loaded);
			list_widget.setPosition(0)			
		}
}
