var Gcenter=new GLatLng(55.755786,37.617633);
var	Gzoom=13;
var header_bottom=40;
var title_height=23;
var bsp = '&nbsp;&nbsp;&nbsp;';

function galbum(forum,name,color){
	this.forum=forum; // forum topic #
	this.name=name;
	this.color=color;
}
galbum.prototype.loaded_left = false;
galbum.prototype.loaded_right = false;
galbum.prototype.color = "BLACK";
galbum.prototype.pic_number = 0;
galbum.prototype.forum = 328; // default gallery forum topic
galbum.prototype.name = "Неизвестный альбом";

var albums = [];
albums["1"] = new galbum(322,"Планы отдельных местностей","map");
albums["28"] = new galbum(488,"Документы к картам","BLACK_dot");			  
albums["8"] = new galbum(489,"Современные материалы","DARKGREEN");
albums["9"] = new galbum(490,"1946-2000 годы","GREEN");
albums["10"] = new galbum(323,"1918-1945 годы","ORANGE");
albums["11"] = new galbum(491,"1900-1917 годы","RED"); 
albums["12"] = new galbum(324,"XIX век","DARKRED");
albums["13"] = new galbum(325,"XVIII век","DARKMAGENTA");
albums["14"] = new galbum(326,"XVII век и ранее","LIGHTBLUE");
albums["16"] = new galbum(328,"Тестовый альбом","GRAY_dot")

function gallery_forum(aid){
	return '../forum/viewtopic.php?t=' + ((albums[aid]) ? albums[aid].forum : '328') // default gallery topic
}

function add_yandex_share() {
	var ya = document.createElement('script');
	ya.type = 'text/javascript';
	ya.src = '//yandex.st/share/share.js';
	var s = document.getElementsByTagName('script')[0];
	s.parentNode.insertBefore(ya, s);
};

add_yandex_share()

var row_color="#FFF";
function change_color(){
	(row_color=="#FFF")?row_color="#f2f1ec":row_color="#FFF";
	return row_color
}

function add_hash(){
	return 'hash=' + Math.floor(Math.random()*100)
}

function get(text){
	var a=document.getElementById(text);
	if (a==null)
		err("0001Missing DIV, DIV name="+text)
	else return a
}

function parser(string, key){
	// search of vasya in xxxxxkey=vasya&xxxxx string
	var	i1=string.indexOf(key);
	var s=string.substring(i1);
	var i2=s.indexOf("=");
	var i3=s.indexOf("&");
	if ((i1<0) || (i2<0) || (s==null))
		return null
	else
		if (i3<0)
			return (s.substring(i2+1))
		else
			return (s.substring(i2+1,i3))
}

function parser1(str,key,endkey){ // seek for key result endkey
    var start = str.indexOf(key);
    if (start<0)
    	return ""
    var result = str.substring(start + key.length);
    var end = result.indexOf(endkey);
    if (end<0)
    	return result.substring(1);
    else    
    	return result.substring(1,end);
}

function stringer(a){
var res='';
for (var num = a.length-1; num >= 0; num-=2) 
	res += a.charAt(num)
for (var num = a.length; num >= 0; num-=2)
	res += a.charAt(num)
return res;
}

var xs_pic='xsmall';
var s_pic='small';
var m_pic='medium';

function pic_src(mcode,size){
	var prefix='thumb_';
	pwidth=map_list[mcode].pwidth;
	pheight=map_list[mcode].pheight;
	if (size==m_pic){
		if (pwidth<=540 && pheight<=540)
			prefix=set_prefix(map_list[mcode].picfile);
		else
			prefix='normal_'
	}
	//	prefix='normal_'
	var postfix='';
	if (size==s_pic){
		if (pwidth<=540 && pheight<=540)
			prefix=set_prefix(map_list[mcode].picfile);
		else
			prefix='normal_'
		if (pwidth > pheight){
			nwidth=270;
			nheight=Math.floor(270* (pheight/pwidth))
		}
		else {
			nheight=270;
			nwidth=Math.floor(270*(pwidth/pheight))
		}
		postfix='width='+nwidth+' height='+nheight+' ';	
	}
	var map_name=((mcode.substr(0,2)=='11')?'Генеральный план ':'')+map_list[mcode].name;
	var alt=' alt="'+map_name+'" title="Загрузить карту" '
	if (map_list[mcode].origin==from_gallery){
		var url=map_list[mcode].picpath+prefix+map_list[mcode].picfile;
		return ' src="../gallery/albums/'+url+'" ' + postfix + alt;
	}
	else
		return ' src="../maps/'+mcode+'/'+size+'.jpg" '+ alt;	
}

function read_oldmos_picture(xmlhttp){
	var xmlDoc=xmlhttp.responseXML;
	var elem=xmlDoc.documentElement;
	if (elem==null) // empty xml
		alert("Ошибка в описании фото oldmos в базе данных")
	var x=elem.getElementsByTagName("m");
	//alert("x.lenght="+x.length+" elem="+elem);
	var m=x[0];
	return {'coord':m.getAttribute("p"),
			'pid':m.getAttribute("r"),
			'title':m.getAttribute("d"),
			'date':m.getAttribute("t"),
			'url':m.getAttribute("u"),
			'lat':m.getAttribute("l"),
			'lng':m.getAttribute("n"),
			'quad':m.getAttribute("q")
			}	
}	// read_oldmos_picture

function s(pid){
	$("#" + pid).attr("href","../mapster.php?rightoldmos=" + pid,"onmouseout","close_infowin3()")
	$.get('../read_oldmos_picture.php?pid='+pid,function(result,status,xmlhttp){
		var pic = read_oldmos_picture(xmlhttp);
		var src = pic.url.replace("th_","500_");
		var html = '<img src="' + oldmos_dir + src + '">'
		var title = $("#" + pid).html();
	  	animated_pic1(title,html)
	});	
}

function set_oldmos_list(){
	$(".y").addClass("f").each(function(n){
			if (n % 4 == 0)
				$(this).parent().parent().css("background-color", "#f2f1ec")
			$(this).attr({'onmouseover':'s("' + this.id + '")','onmouseout':'close_infowin3()'}).before('#' + this.id + ' ')
			});
	$(".loading").remove();
}

var icons_dir = "../images/oldmos_icons/";
var oldmos_dir = "http://www.oldmos.ru/upload/photos/";	

function icon_src(date){
	var yyy=date.substr(0,3);
	if (parseInt(yyy)<189)
		yyy=""
	if (parseInt(yyy)>=200)
		yyy="200"	
	if (date=="0")
		date=""	
	return icons_dir + yyy + '0.png';
}

function icon_img(date){
	return '<img src="' + icon_src(date) +'" width=8 height=8>';
}

function oldmos_pid_html(pic){		
	var title = pic.date + '. ' + pic.title;
//	if (title.length > 60)
//		title = title.substr(0,60) + '&hellip;';
	title = title.replace(/\"/g,"'")	
	html = '<a href="../mapster.php?rightoldmos=' + pic.pid + '" title="Нажмите для просмотра на карте"><table><tr><td class="picbox"><img onmouseover="expand_oldmos_thumb(&quot;' + title + '&quot;,this)" onmouseout="close_infowin3();" src="' + oldmos_dir + pic.url +'" align=center border=1></td></tr><tr><td class="pictitle">' + icon_img(pic.date) + '&nbsp;<small>' + title + '</small></td></tr></table></a>'
	return html	
}

function bbcode_oldmos(pid){
	$.get('../read_oldmos_picture.php?pid='+pid,function(result,status,xmlhttp){	   
		var pic = read_oldmos_picture(xmlhttp);
		$(".bbc_old" + pid).addClass('intext').html(oldmos_pid_html(pic))
	});	
}

function huff(str,a,b){
	return str.substr(a,b)
}

function latlng_from_text(coord){
	var latlng=coord.split(",");
	return new GLatLng(parseFloat(latlng[0]),parseFloat(latlng[1]))
}

function map_html(mcode,option){
	var cs='picbox';
	var hr='';
	if (option)
	 	if (option==1){
			cs+='1';
			hr='<hr>'
		}	
	return '<table><tr><td class="'+cs+'"><a href="../mapster.php?right='+mcode+'"><img'+pic_src(mcode,xs_pic)+ map_pic_html(mcode,0) + ' border=1></a></td><tr><td class="pictitle"><a class="f"  href="http://retromap.ru/forum/viewtopic.php?t=' + map_list[mcode].topic +'" title="Эта карта на форуме">'+map_list[mcode].name+'</a></td></tr></table>'+hr;
}

function get_pid_html(pid,p_class){
		var str='../read_pid.php?pid='+pid;
		$("."+p_class).load(str);
}

function map_link_html(mcode){	
	return '<a class="f" href="../mapster.php?right='+mcode+'"' + map_pic_html(mcode,0) + ' title="Загрузить карту">'+map_list[mcode].name+'</a>';
}

var window_width = 0, window_height = 0;

function window_size_calculation(){
	window_width = $(window).width()
	window_height = $(window).height()
}

window_size_calculation();

function show_users(time){
	if (time==null)
		time=5000
	close_extra_header(1)	
	$(document.createElement('div')).appendTo('body').css({'display':'none'}).load('../count_users.php?' + add_hash(), function(){
		infowin2(24,getBodyScrollTop()+70,300,null,'Сейчас на сайте',$(this).html(),3)
	}) 
}

function set_floating_header() {
	if (getBodyScrollTop()> 50)
		floating_header()
	else
		$('#headerf').remove()
}

function logo(option){
	return '<a href=".." title="Домашняя страница"><img style="margin: 0px 30px" border="0" src="../images/header-'+option+'.png"/></a>'
//		return '<a href=".."' + page_pic_html("main") + ' title="Домашняя страница"><img style="margin: 0px 30px" border="0" src="../images/header-'+option+'.png"/></a>'	
}

function update_menu(){ // on resize
	$('#right_menu').html(header_menu(1).html)
	update_control_bar();
}

function header_menu(option){
	var start = '<td><a class="f" style="color:#FFF" href="'
	var mapster_url	= start + '../mapster.php"'+page_pic_html("mapster")+' title="Работа с картами">Работа с картами</a></td>'
//	var maplist		= start + '../map-table.html"'+page_pic_html("maplist1")+' title="Список всех карт, привязанных к координатной сетке">Список карт</a></td>'
	var maplist		= '<td><a class="f" style="color:#FFF" onclick="show_map_list(' + Math.floor(window_width/2 - 450) + ',' + 60 + ',5)"' + page_pic_html1("mapmenu") + ' title="Список всех карт, привязанных к координатной сетке">Список карт</a></td>';
	var faq			= start + '../forum/viewforum.php?f=42"'+page_pic_html("faq")+' title="Помощь">FAQ-Help</a></td>'	
	var fsearch		= start + '../forum/search.php"'+page_pic_html("search")+' title="Поиск по сайту">Поиск</a></td>'	
	var forum		= (window_width > 1200) ? start + '../forum/index.php"'+page_pic_html("allforum")+' title="Форум с обсуждением сайта и карт">Форум</a></td>' : '';
	var gallery		= (window_width > 1300) ? start + '../gallery/index.php"'+page_pic_html("gallery")+' title="Галерея изображений и документов">Галерея</a></td>' : '';
	var video		= (window_width > 1500) ? start + '../main.php?page=video"'+page_pic_html("video")+' title="Раздел видеосюжетов">Видео</a></td>' : '';
	var mail_to		= (window_width > 1400) ? start + 'mailto:info@' + 'retromap.ru?subject=Letter to retromap.ru"'+page_pic_html("mail")+' title="Письмо разработчикам">Пишите нам</a></td>' : '';
	var sitemap		= (window_width > 1200) ? start + '../main.php?page=sitemap"'+page_pic_html("sitemap")+' title="Карта сайта">Карта сайта</a></td>'  : '';
	var users		= (window_width > 1400) ? start + 'javascript:show_users()" title="Кто сейчас работает на сайте">На сайте</a></td>' : '';
	var user_name_html   = '<td><div class="user_name" style="color:white;"></div></td>'
	var extra		= '<td><a class="f" style="color:#FFF" onclick="extra_header()" title="Вывод дополнительного меню со ссылками на основные разделы сайта">Ещё&hellip;</a></td>'
	var spacer		= '<td width="50px"></td>'
	var html
	var left_html = '<div id="right_menu" style="position:absolute;top:8px;left:20%;width:80%;font-size:8pt;" align="right">'
	var c_html = '<table cellpadding="0" cellspacing="10"><tr>'
	var cross		= (option) ? start + '<td width="100px"><a onClick="close_extra_header();toggle_header(0)" title="Убрать меню. Еще можно нажать F11 для вывода во весь экран."><img src="../images/close.png" border="1" height="12" align="right"></a></td>' : '';
	var right_html = forum + gallery + video + faq + sitemap + users +  user_name_html + extra + spacer + cross + '</tr></table></div>'
	if (option){ // mapster
		var maps_number = '<td id="maps_number"></td>' 
		var linkurl 	= start + 'javascript:show_link();"'+page_pic_html("link")+' title="Адресная ссылка на текущую страницу">Ссылка</a></td>';
		var msearch		= start + 'javascript:map_searcher();"'+page_pic_html("info")+' title="Поиск по сайту, поиск на карте и адресная информация">Поиск-Инфо</a></td>';
		var control_bar = 
			'<div id="control_bar" class="w">' +
				'<table cellspacing="3" cellpadding="3"><tr height="24">' + 
					'<td><input type=button onclick="zooming(-1)" title="Уменьшить масштаб. Это можно сделать еще и нажатием на карте правой кнопки мыши." value=" - "/></td>' + 
					'<td id="zoom"></td>' +
					'<td><input type=button onclick="zooming(+1)" title="Увеличить масштаб. Это можно сделать еще и двойным нажатием левой кнопки мыши, а также выделением нужной области на карте. Для этого кликните левой кнопкой мыши в выбранной точке карты. После появления зеленого крестика переместите его для выделения области" value=" + "/></td>' +   
					'<td id="center">&nbsp;&nbsp;<button type="text" onclick="$(&quot;.guide&quot;).toggle(300);" ondblclick="set_Gcenter()" title="Один клик - скрытие/показ направляющих, два клика - установка центра карты в заданную координатную точку"><img src="../images/guides.png" height="12"><small>&nbsp;Центр</small></button></td>' +
					'<td ><input type="text" id="center_lat" size="7" style="background-color:#d4d0c7;font-size:8pt;"/></td>' +        
					'<td ><input type="text" id="center_lng" size="7" style="background-color:#d4d0c7;font-size:8pt;"/></td>' +
				'</tr></table>' +
			'</div>';	
		return {"control_bar": control_bar,"left": left_html, "html": c_html + maps_number + linkurl + msearch + right_html};
	}
	else
		return left_html + c_html + mapster_url + maplist + fsearch + mail_to + right_html;
}

function set_header_div(id){
	var header = document.createElement('div');
	header.id = id;
	$(header).appendTo('body').css({'top':'0px','left':'0px','width':'100%','position':'absolute','background-color':'#3a2823','text-align':'left','padding-top':'0px'});
	return header
}

function floating_header(){
	close_extra_header()
	$('#headerf').remove()	
	var header = set_header_div('headerf')
	$(header).addClass('shadow1').html(logo('color')+header_menu()).css({'top':getBodyScrollTop()+'px','height':'0','overflow':'hidden','z-index':9999}).fadeTo(1,0.9).delay(500).animate({height:40},1000);
	get_user_name();
}

function close_extra_header(option){ // if option - animated closing
	if (option)
		$('#extra_header').animate({height:0},1000,function(){$('#extra_header').remove()})
	else
		$('#extra_header').remove()
}

function extra_header(){
	if (document.getElementById('extra_header')) // second click on "Еще" - menu close
		close_extra_header(1)
	else {
		update_log('extra menu');
		var header = document.createElement('div');
		header.id = 'extra_header';
		var offset = header_bottom + getBodyScrollTop()+'px';
		$(header).appendTo('body').css({'left':'0px','width':'100%','position':'absolute','background-color':'#402e22','text-align':'left','padding-top':'0px','top':offset,'height':'0px','overflow':'hidden','z-index':'5','border-bottom':'1px solid #aaa','z-index':9999}).addClass('shadow1').html(footer_html(2));
		var close_extra = document.createElement('div');
		$(close_extra).appendTo(header).css({'margin-left':getElementPosition(header.id).width - 20 + 'px','margin-top':'-10px'}).html('<a onclick="close_extra_header(1)" title="Закрыть дополнительное меню"><img src="../images/close.png" height="12"></a>')
		$(".ftr").css({'background-color':'#3a2823'});
		add_social_links('ya_share2')
		$(header).mouseover(function(){$(this).fadeTo(0,1)}).mouseout(function(){$(this).fadeTo(0,0.9)}).animate({height:170},2000)
		get_user_name();
	}
}

function footer_html(option){	
	var c=(option==2)?' style="color:#FFF" ':''
	var d=(option==2)?' width="25%" ':''
	function start(){return '<tr ' + ((option==2)?'class="ftr"':'') + '><td style="padding-left:20px;height:15px"' + d + '><a class="f" ' + c + ' href="..'}
	var m = '</a></td><td' + d + '><a class="f"' + c + ' href="..'
	var mi = '</a></td><td' + d + '><a class="f"' + c + ' href="../'
	var mj = '</a></td><td' + d + '><a class="f"' + c + ' href="javascript:'
	var end = '</a></td></tr>'
	var search_html = '<div class="yandexform" style="width:250px; max-height:24px;margin:0;pading:0" onclick="return {type: 3, logo: &quot;rb&quot;, arrow: false, webopt: false, websearch: false, bg: &quot;#B2ADA1&quot;, fg: &quot;#000000&quot;, fontsize: 10, suggest: true, site_suggest: true, encoding: &quot;&quot;, language: &quot;ru&quot;}">' +
    	'<form action="http://yandex.ru/sitesearch" method="get"><input type="hidden" name="searchid" value="1773066"/><input name="text"/><input type="submit" value="Найти"/></form>' + 
    	'</div>' + 
    	'<script type="text/javascript" src="http://site.yandex.net/load/form/1/form.js" charset="utf-8"></script>';
		var share = '<td align="right">' + ((window_width < 1600 && option==1) ? '' : '<b>Поделиться ссылкой:</b></td>') + '<td align="left" id="ya_share' + option + '"></td>';
	var html = ((option) ? '<div class="boxheader" style="height:28px;padding:0px 10px 0px 40px;font-size:8pt"><table style="margin-top:-2px" cellspacing="0" cellpadding="0" width="100%"><tr><td class="user_name" style="max-width:30%;font-weight:bold"></td>' + share + '<td width="250px">' + search_html + '</td></tr></table></div><div style="padding:10px 5px 5px 40px;">' : '') +
		'<table cellspacing="1" cellpadding="1" width="100%" style="text-decoration:none;font-size:8pt">' +
		start() + '">Домашняя страница' + m + '/forum/viewforum.php?f=42">FAQ-Help' + m + '/forum/viewforum.php?f=3">Новости сайта' + m + '/forum/viewforum.php?f=43">История Москвы' + end +	
		start() + '/mapster.php">Работа с картами' + m + '/map-table.html">Список карт' + m + '/forum/viewtopic.php?f=12&t=150">О проекте' + m + '/books.html">Книги о Москве' + end +	
		start() + '/forum/index.php">Форум' + m + '/forum/search.php">Поиск' + m + '/forum/viewforum.php?f=13">Пожелания' + m + '/rgb.html">Каталог карт РГБ' + end +	
		start() + '/gallery/index.php">Галерея карт и изображений' + m + '/main.php?page=sitemap">Карта сайта' + m + '/forum/viewforum.php?f=10">Впечатления и вопросы' + mj + 'show_users()">Кто сейчас работает на сайте' + end +
		start() + '/mapster.php#panes=right&right=061939&zoom=14&lat=55.764092&lng=37.591524&rightalbum=9999">Галерея на карте' + m + '/map-pictures.html">Миниатюры карт' + m + '/forum/viewforum.php?f=45">Вопросы к тем, кто знает ответы' + m + '/forum/viewtopic.php?t=534">Каталог карт С.А. Клепикова' + end +	
		start() + '/main.php?page=video">Блок видеосюжетов' + m + '/forum/viewtopic.php?f=12&t=151">Полезные ссылки</a></td><td' + d + '><a class="f"' + c + ' href="mailto:info@retromap.ru?subject=Letter to retromap.ru">Пишите нам' + m + '/forum/viewtopic.php?t=343">Размещение материалов на сайте' + end +
		start() + '/mapster.php?right=051980&zoom=15&lat=55.764092&lng=37.591524&rightoldmos=1">Старые фотографии Москвы (oldmos.ru)' + mi + 'pictures.html">Список старых фотографий (5 Мб!)</a></td><td' + d + '><a class="f"' + c + ' href="../pictures_last.html">Последние добавленные фото' + m + '/forum/viewtopic.php?t=479">Улицы Москвы' + end +
	'</table>' +
	((option==1) ? '</div><div class="boxheader" style="text-align:center"><a class="f" href="../forum/viewtopic.php?f=12&t=359" style="color:white;"><small>&copy;&nbsp;Retromap 2009-2011. Условия работы на сайте и использования его материалов</small></a></div>' : '');
	return html
}

function add_social_links(id){
	try{
	new Ya.share({
        element: id,
		elementStyle: {
			'type': 'none',
			'quickServices': ['lj','facebook','twitter', 'odnoklassniki','yaru', 'vkontakte','moimir', 'friendfeed']
		}
	});
	}
	catch(e){ // yandex .js wasn't loaded yet
		setTimeout("fill_footer()",1000);
	}
}

function fill_footer(){
    $("#footer").css({"background-color":"#fffaec","color":"#665F59"}).html(footer_html(1));
	add_social_links('ya_share1')
}

var user_name = '';
var debug_txt = '';

function wlog(txt){
	if ($("#admin").html())
		GLog.write(txt)
	else {
		debug_txt = txt;
		$(document.createElement('div')).appendTo('body').css({'display':'none'}).load('../get_user_name.php?' + add_hash(),fill_user_name1)
	}
}

function fill_user_name1(data){
	fill_user_name(data);
	if ($("#admin").html())
		GLog.write(debug_txt)
}

function fill_user_name(data){
	var a = data.split(" "); // 0 - sid, 1 - user name
//		var a = $(this).html().split(" "); // 0 - sid, 1 - user name

	var sid = a[0];
	user_name = a[1];
	var admin = a[2];
	var html = '<a class="f" style="color:white" href="../forum/ucp.php?mode=';
	if (user_name != 'Anonymous'){
		html += 'logout&sid='+ sid + '">Выход [<span id="user">' + user_name + '</span>]</a>';
	//	if (admin=="1") 
	//		html += bsp + '<a class="f" style="color:#fff" href="../XXXXXXXXXX.php" id="admin">Монитор</a>';
	}
	else {
		html += 'login" title="Вход зарегистрированных пользователей" onmouseout="close_infowin4()" onmouseover="show_page_pic(&quot;page_login_270.jpg&quot;)">Вход</a>&nbsp;&nbsp;<a class="f" style="color:white" href="../forum/ucp.php?mode=register" title="Регистрация нового пользователя. Зарегистрированные пользователи имеют больше возможностей при работе на сайте" onmouseout="close_infowin4()" onmouseover="show_page_pic(&quot;page_register_270.jpg&quot;)">Регистрация</a>';
		user_name = ''
	}
	$('.user_name').html(html);
	update_log(user_name)
}

function get_user_name(){
	var html = $('.user_name').html();
	if (html){ // name already set in some div
		$('.user_name').html(html)
		return
	}
	$(document.createElement('div')).appendTo('body').css({'display':'none'}).attr("id","session").load('../get_user_name.php?' + add_hash(),fill_user_name)
	/*
	$(document.createElement('div')).appendTo('body').css({'display':'none'}).load('../get_user_name.php?' + add_hash(),function(){
			var a = $(this).html().split(" "); // 0 - sid, 1 - user name
			var sid = a[0];
			user_name = a[1];
			var admin = a[2];
			var html = '<a class="f" style="color:white" href="../forum/ucp.php?mode=';
			if (user_name != 'Anonymous'){
				html += 'logout&sid='+ sid + '">Выход [<span id="user">' + user_name + '</span>]</a>';
				if (admin=="1") 
					html += bsp + '<a class="f" style="color:#fff" href="../monitor.php" id="admin">M</a>';
			//	user_name += ': '
			}
			else {
				html += 'login" title="Вход зарегистрированных пользователей" onmouseout="close_infowin4()" onmouseover="show_page_pic(&quot;page_login_270.jpg&quot;)">Вход</a>&nbsp;&nbsp;<a class="f" style="color:white" href="../forum/ucp.php?mode=register" title="Регистрация нового пользователя. Зарегистрированные пользователи имеют больше возможностей при работе на сайте" onmouseout="close_infowin4()" onmouseover="show_page_pic(&quot;page_register_270.jpg&quot;)">Регистрация</a>';
				user_name = ''
			}
			$('.user_name').html(html);
			update_log(user_name)
		})
	*/
}

function set_header(option){
	var header = set_header_div('header')
	if (option=="main")
		header.innerHTML=logo('color')+header_menu()
	else { // mapster	
		var menu = header_menu(1);
		header.innerHTML=logo('mapster') + menu.control_bar + menu.left + menu.html;
	}
	get_user_name();
//	update_log()
	var date = new Date();
	var old_date = getCookie('date');
	var delta = 3;
	if (old_date)
		delta = (Date.parse(date) - Date.parse(old_date)) / (60 * 1000) // delta in minutes
	//GLog.write('Date='+date+" old="+old_date+' delta='+delta)	
	if (!parser(location.href,"#") && !parser(location.href,"demo") && (delta > 2 )){
		setCookie('date',date,false,"/");
		setCookie('date',date,false,"/gallery/");
		setCookie('date',date,false,"/forum/");
		show_users();
	}
}

function setCookie (name, value, expires, path, domain, secure) {
	document.cookie = name + "=" + escape(value) +
		((expires) ? "; expires=" + expires : "") +
		((path) ? "; path=" + path : "") +
		((domain) ? "; domain=" + domain : "") +
		((secure) ? "; secure" : "");
		//GLog.write("Cookie set="+document.cookie)
}

function getCookie(name) {
	var cookie = " " + document.cookie;
	var search = " " + name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (cookie.length > 0) {
		offset = cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = cookie.indexOf(";", offset)
			if (end == -1)
				end = cookie.length;
			setStr = unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}

function deleteCookie(name, path, domain) {
	if ( getCookie( name ) ) document.cookie = name + "=" +
	( ( path ) ? ";path=" + path : "") +
	( ( domain ) ? ";domain=" + domain : "" ) +
	";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function TileToQuadKey(tx,ty,zl){
	var quad=""; 
	for (var i=zl;i>0;i--){
		var mask = 1 << (i-1);
		var cell = 0;
		if ((tx & mask) != 0)
			cell++;
		if ((ty & mask) != 0)
			cell += 2;
		quad += cell;
	}	
	return quad;
}

function tiles_expansion(map){
	var map_superzoom=Gzoom-map_list[map.mcode].zoom;
	if (map_superzoom<=0) return;
	var zz=Math.pow(2,map_superzoom);
	var m=(map.getContainer()).getElementsByTagName("img");
	//GLog.write("id="+(map.getContainer()).id)
	var lefttop = new GPoint();
	var currentProjection = G_NORMAL_MAP.getProjection();
	for (var i=0;i<m.length; i++){
		var a=m.item(i);
		var dstyle=a.style;	
		if ((a.width==256)&&(a.src.match("retromap") || a.src.match("hutun"))){
			lefttop.x = parseInt(dstyle.left);
			lefttop.y = parseInt(dstyle.top);
			var latlng = map.fromDivPixelToLatLng(lefttop); 
			var tilePoint = currentProjection.fromLatLngToPixel(latlng, map.getZoom()); // sw in pixels
			var x = Math.floor(tilePoint.x / 256);
	    	var y = Math.floor(tilePoint.y / 256);
	//		$(a).animate({'width': 256*zz, 'height': 256*zz, 'left': lefttop.x - 256*(x % zz), 'top': lefttop.y - 256*(y % zz)},1000)
			$(a).css({'width': 256*zz, 'height': 256*zz, 'left': lefttop.x - 256*(x % zz), 'top': lefttop.y - 256*(y % zz)})
		}
	}
}

function tile_code_and_superzoom(tx,ty,zl,mcode,map_id){
	var nx=tx, ny=ty; nz=zl;
	var map_superzoom=Gzoom-map_list[mcode].zoom;
	if (map_superzoom>0){
		nx=Math.floor(tx/(Math.pow(2,map_superzoom)));
		ny=Math.floor(ty/(Math.pow(2,map_superzoom)));
	    nz=zl-map_superzoom;
		var found=false;
		for (var m=0;m<maps.length;m++){
			if (map_id==(maps[m].getContainer()).id){
				found=true;
				break
			}
		}
		if (found)
	//		GLog.write('Contradiction - no map in maps array, mcode='+mcode+' map_id='+map_id)
	//	else
			tiles_expansion(maps[m]);
	}
	return tile_code(nx,ny,nz,mcode)
}

function buckwеatt(m,q){
	var result;
	$.get(m + q.charAt(0),function(result,status,xmlhttp){album_xml_loading(xmlhttp,result)});	
	return result;
}

function tile_code(tx,ty,zl,mcode){
	var q = TileToQuadKey(tx,ty,zl);
	return buckweatt(mcode,q)
}

function atanh(x){
	return 0.5*Math.log((1+x)/(1-x));
	}
var exct=0.0818197;
 
function YandexFromLatLngToPixel(latlan,zoom){
	var PxAtZ=256*Math.pow(2,zoom);	
	var z=Math.sin(latlan.latRadians());
	var c=(PxAtZ/(2*Math.PI));
	var x=Math.floor(PxAtZ/2+latlan.lng()*(PxAtZ/360));
	var y=Math.floor(PxAtZ/2-c*(atanh(z)-exct*atanh(exct*z)));
	return new GPoint(x,y);
	}

function YandexFromPixelToLatLng(pixel,zoom){
	var PxAtZ=256*Math.pow(2,zoom);
	var Lan=((pixel.x)-PxAtZ/2)/(PxAtZ/360);
	var Lat=((pixel.y)-PxAtZ/2)/-(PxAtZ/(2*Math.PI));
	Lat=(2*Math.atan(Math.exp(Lat))-Math.PI/2)*180/Math.PI;
	var Zu=Lat/(180/Math.PI);
	var Zum1=Zu+1;
	var yy=((pixel.y)-PxAtZ/2);
	var i=100000;
	while((Math.abs(Zum1-Zu)>0.0000001)&&(i!=0)){
		i--;
		Zum1=Zu;
		Zu=Math.asin(1-((1+Math.sin(Zum1))*Math.pow(1-exct*Math.sin(Zum1),exct))/(Math.exp((2*yy)/-(PxAtZ/(2*Math.PI)))*Math.pow(1+exct*Math.sin(Zum1),exct)));
		}
	Lat=Zu*180/Math.PI;
	return new GLatLng(Lat,Lan,false);
	}
	
function YandexTileUrl(a,b,t,l,v,f){
	function mix(x,y){
		return y%2+1+2*(x%2);
	}	
//	return 'http://'+t+'0'+((a.x+a.y)%5)+'.maps.yandex.net/tiles?l='+l+'&v='+v+'&x='+a.x+'&y='+a.y+'&z='+b+'.'+f;
	return 'http://'+t+'0'+mix(a.x,a.y)+'.maps.yandex.net/tiles?l='+l+'&v='+v+'&x='+a.x+'&y='+a.y+'&z='+b;

	}	
//function YandexTileUrl_sat(a,b){return YandexTileUrl(a,b,'sat','sat','1.19.0','jpg');}
function YandexTileUrl_sat(a,b){return YandexTileUrl(a,b,'sat','sat','1.22.0','jpg');}

function YandexTileUrl_map(a,b){return YandexTileUrl(a,b,'vec','map','2.16.0','png');}
function YandexTileUrl_hyb(a,b){return YandexTileUrl(a,b,'vec','skl','2.16.0','png');}

function MS_TileToQuadKey(x,y,z,map_prefix){
	var quad=TileToQuadKey (x,y,z);
	var last=quad.substr(length-1,1);
	return "http://ecn.t"+last+".tiles.virtualearth.net/tiles/"+map_prefix+quad+".png?g=452"
}

function YhSatGetTileURL(a,b){
	return "http://maps"+((a.x+a.y)%3+1)+".yimg.com/ae/ximg?v=1.9&t=a&s=256&r=1&x="+a.x+"&y="+(((Math.floor(Math.pow(2,b))/ 2)-1)-a.y)+'&z='+(b+1);
}

function YhMapGetTileURL(a,b){
	return "http://maps"+((a.x+a.y)%3+1)+".yimg.com/hx/tl?v=4.2&t=a&r=1&x="+a.x+"&y="+(((Math.floor(Math.pow(2,b))/ 2)-1)-a.y)+'&z='+(b+1);
}

function YhHybGetTileURL(a,b){
	return "http://maps"+((a.x+a.y)%3+1)+".yimg.com/ae/ximg?v=1.9&t=p&s=256&r=1&x="+a.x+"&y="+(((Math.floor(Math.pow(2,b))/ 2)-1)-a.y)+'&z='+(b+1);
}

function WikiMapGetTileURL(a,b){
	return "http://i"+((a.x % 4) + (a.y % 4)*4)+".wikimapia.org/?lng=1&x="+a.x+"&y="+a.y+'&zoom='+b;
}	

function OSMMapGetTileURL(a,b){
	return "http://b.tah.openstreetmap.org/Tiles/tile/"+b+"/"+a.x+"/"+a.y+'.png';
}

function OSM1MapGetTileURL(a,b){
	return "http://a.tile.openstreetmap.org/"+b+"/"+a.x+"/"+a.y+'.png';
}
	
function set_layers(map,option){
	var mcode=map.mcode;
	var max_zoom=map_list[mcode].zoom;
	var layers=new Array();
	if (mcode.substr(0,2)!="00")
		//layers[0] = new GTileLayer(new GCopyrightCollection(''),1,max_zoom);
		layers[0] = new GTileLayer(new GCopyrightCollection(''),1,21);
	switch (mcode.substr(0,2)){ // adding layers over Google map
	case "00": // Google
	break;
	case "01": // Yandex					
		if (mcode=="0120090")	layers[0].getTileUrl = YandexTileUrl_map;
		else 						layers[0].getTileUrl = YandexTileUrl_sat;
		if (mcode=="0120091"){		
			layers[1] = new GTileLayer(new GCopyrightCollection(''),1,max_zoom); 
			layers[1].getTileUrl= YandexTileUrl_hyb;
		}
	break;
	case "02": // Yahoo
		if (mcode=="0220090")	layers[0].getTileUrl=YhMapGetTileURL;		
		else 						layers[0].getTileUrl=YhSatGetTileURL;
		if (mcode=="0220091"){
			layers[1] = new GTileLayer(new GCopyrightCollection(''),1,max_zoom); 
			layers[1].getTileUrl= YhHybGetTileURL;
		}
	break;
	case "03": // Microsoft
		var map_prefix="r";
		if (mcode=="0320091")	map_prefix="h";
		if (mcode=="0320092")	map_prefix="a";
		layers[0].getTileUrl = function (a,b) {return (MS_TileToQuadKey(a.x,a.y,b,map_prefix))}		
	break;
	case "04": // Other modern
		if (mcode=="0420090")	layers[0].getTileUrl=WikiMapGetTileURL;
		if (mcode=="0420091")	layers[0].getTileUrl=OSMMapGetTileURL;
		if (mcode=="0420092")	layers[0].getTileUrl=OSM1MapGetTileURL;

	break;
	default:
		var t="http://www." + map_list[mcode].url + "/";
		var function_left = function (a,b) {return (t + left_tile(a.x,a.y,b) + ".jpg")};
		var function_right = function (a,b) {return (t + right_tile(a.x,a.y,b) + ".jpg")};
		var function_general = function (a,b) {return (t + tile_code_and_superzoom(a.x,a.y,b,mcode,(map.getContainer()).id) + ".jpg")};
		layers[0].getTileUrl = (option == 2) ? eval("function_"+active_pane) : function_general;	
	}
	if (mcode.substr(0,2)!="00")
		layers[0].getCopyright = function(a,b) {return map_list[mcode].copyright}; 
	
	var projection=new GMercatorProjection(22);
	switch (mcode){
	case "0020090":	map.setMapType(G_NORMAL_MAP);			break;
	case "0020091":	map.setMapType(G_HYBRID_MAP);			break;
	case "0020092":	map.setMapType(G_SATELLITE_MAP);		break;
	case "0020093":	map.setMapType(G_PHYSICAL_MAP);			break;
	case "0020094":	map.setMapType(G_NORMAL_MAP);map.addOverlay(new GTrafficOverlay());break;
	
	case "0120090":
	case "0120091":
	case "0120092":
	case "0420093":
		projection.fromLatLngToPixel=YandexFromLatLngToPixel;
		projection.fromPixelToLatLng=YandexFromPixelToLatLng;
	default:
		map.setMapType(new GMapType(layers, projection, "",{errorMessage:'Здесь карты нет'}));
	}	
}

function new_map(map_div,mcode,option){
	map_div.style.cursor='pointer';
	var map = new GMap2(map_div,{draggableCursor:'pointer'});
	map.setCenter(Gcenter, Gzoom);
	map_div.mcode=map.mcode=mcode;
	set_layers(map,option)
	return map
}

function delete_terms(map){
	var container = map.getContainer();
	container.childNodes[1].style.visibility = container.childNodes[2].style.visibility = 'hidden';
}

function latlng_url(option){
	var zoom_url=(option) ? '' : "&zoom=" + Gzoom;
	var lat_url="&lat=" + Gcenter.lat().toString().substring(0,9);
	var lng_url="&lng=" + Gcenter.lng().toString().substring(0,9);
	return zoom_url + lat_url + lng_url;	
}

var n_polymaps=2; // can be changed in polymaps

function panMaps(map) {
	var activeMap = map.id;
	Gcenter = maps[activeMap].getCenter();
	Gzoom = maps[activeMap].getZoom();
	for ( var m = 0; m < n_polymaps; m++ ) 
		if (maps[m]!= map)
			maps[m].setCenter(Gcenter, Gzoom) 	
}

function map_tag(mcode){
	var tail=' карта">&hearts; </a>'
	var tag=map_list[mcode].tag;
	var html='&nbsp;';
	if 	(tag == new_map_tag)
		html='<a style="color:#0F0" title="Новая'+tail
	if 	(tag == rare_map_tag)	
		html='<a style="color:#000" title="Редкая'+tail
	if 	(tag == ax_map_tag)
		html='<a style="color:#F93" title="Подробная'+tail
	return html
}
function map_list_subtitle(){
	return '<a style="color:#0F0;">&hearts;</a> Новые' + bsp + 
			'<a style="color:#000">&hearts;</a> Редкие' + bsp + 
			'<a style="color:#F93">&hearts;</a> Подробные'
}

function map_zoom(mcode){
	zoom_value=map_list[mcode].zoom-2;
	return "&zoom="+zoom_value
}

function toggle_block(id,option){
//	GLog.write("id="+id+" option="+option)
//	GLog.write($("#"+id).parents().filter('div')[0].id)
	var div=get(id);
	div.style.display=(div.style.display=='block')?'none':'block'
	if (id.indexOf('maplist')>-1){
		opened_type=parseInt(id.substring(8));
		$("#"+id).parents().filter('div')[0].innerHTML=maplist_html(option,opened_type,false); // parent div
	}
}

var map_list_win_id;
var first_entry = true;

function show_map_list(left,top,option,param){
	close_infowin2(map_list_win_id);
	var html='<table cellspacing="0" cellpadding="0" width=100%;>' + '<tr ><td colspan="2" height="18px" valign="middle">' + map_list_subtitle() + '</td></tr>';
	var fun;
	var prev_mclass=-1;
	if (option == 5)
		top += getBodyScrollTop();
	for (i=0;i<ordered_map_list.length;i++){
		mcode=ordered_map_list[i].mcode;
		mclass=ordered_map_list[i].mclass;
		if (option==0) // call from mapster, param = side
			fun='close_link();load_map(&quot;' + param + '&quot;,&quot;'+ mcode +'&quot;,1);'
		else if (option==1) // call from gallery maps, param - map_id	
			fun='close_infowin2(map_list_win_id);set_map_chosen(&quot;'+param+'&quot;,&quot;'+ mcode +'&quot;)'
		else if (option==2) // call from polymap, param = # of updated map in polymap
			fun='close_infowin2(map_list_win_id);set_one_map(&quot;'+param+'&quot;,&quot;'+ mcode +'&quot;);'
		else if (option==3) // call from main
			fun='close_infowin2(map_list_win_id);get(&quot;'+param+'&quot;).mcode=&quot;'+ mcode +'&quot;;mapwin1(&quot;'+param+'&quot;,2);close_infowin3()'
		else if (option==4) // call from map_edit
			fun='close_infowin2(map_list_win_id);$(&quot;#mcode&quot;).val(&quot;' + mcode + '&quot;);close_infowin3();read_map();'
		else if (option==5 || option==6) // call from top menu
			fun='close_infowin2(map_list_win_id);window.open(&quot;../mapster.php?right=' + mcode + '&quot;,&quot;_self&quot;);close_infowin3();'			
		if (mclass!=prev_mclass){
			prev_mclass=mclass;
			if (mclass==0 || mclass>4){
				var num_maps = (mclass > 0) ? map_class_number[mclass*1] : map_class_number[0]+map_class_number[1]+map_class_number[2]+map_class_number[3]+map_class_number[4];
				html += '<tr height="18px" style="background-color:#b2ada1;color:#fff"><td colspan="2"><b>&nbsp;&nbsp;' + map_class_name[mclass*1] + ' (' + num_maps + ')</b></td></tr>'
			}
		} 
		html+='<tr style="background-color:'+change_color()+'" id="' + mcode + 'r"><td width=10px>' + map_tag(mcode) + '</td><td><a class="f" id="'+mcode+'pic"' + map_pic_html(mcode,1) + ' onclick="' +
			fun + '" title="Загрузить карту">' + ((mclass<5) ? (ordered_map_list[i].name).substr(4) : ordered_map_list[i].name) +  '</a></td></tr>';
	}
	html+="</table>";
	var hdr = '<a class="f" href="../map-pictures.html" title="Показать миниатюры карт"><img src="../images/gallery.png" border=0 height=12></a>&nbsp;<a class="f" style="color:#fff" href="../map-table.html" title="Развернуть список карт"><img src="../images/full_screen1.png" border=0 height=12>&nbsp;Список карт сайта (' + number_of_maps + ')</a>';
	if (option!=4 && option!=6)
		map_list_win_id = infowin2(left,top,320,window_height-280,hdr,html,2);

	if (option==0){ // scrolling to current map
		var map_code = eval(param+"_map_code");
		$("#" + map_code + "r").css({'background-color':'#888','color':'#fff'})
		var scrollv = $("#" + map_code + "r").position().top - 100;
		var win = get(map_list_win_id).win
		if (first_entry){ // scrolling at first entry
			$("#info_inner"+win).animate({scrollTop:scrollv}, 2000) // scrollTop(scrollv);
			first_entry = false;
		}
		else
			$("#info_inner"+win).scrollTop(scrollv);
	}
//	get(map_list_win_id).className = 'shadow1';
	return html;
}

function maplist_html(option,opened_type,allopened){
	
	function map_type_title(map_type){
	   var html='';
	   var adj=(option>0) ? '' : 'margin-left:-8px;margin-top:-8px;margin-bottom:7px;';
	   fun='toggle_block(&quot;maplist'+option+ map_type+'&quot;,'+option+')'
	   html+='<table class="boxtable" cellspacing="0" cellpadding="0">' 
	   		+ '<tr><th colspan="2" align="left" title="Развернуть список карт раздела"><div class="boxheader" style="width:256px;'
			+ adj + '" id="maplist'+option+map_type+'" '
			+ 'onclick="'+fun+'"  onmouseover="this.style.backgroundColor=&quot;#402e22&quot;" onmouseout="this.style.backgroundColor=&quot;#b2ada1&quot;"'
			+ '><b>'+ map_type_name[map_type]+' ('+map_type_number[map_type]+')</b></div></th></tr>'
	//   GLog.write(html)
	   return html
	}
	var html='<table cellspacing="0" cellpadding="5"><tr><td>' + map_list_subtitle() + '</td></tr>'	
	if (option==0) // main menu
		html+='</tr><tr><td></td>'	
//		html+='<td align=right><a title="Убрать список карт" href="javascript:map_list_control(&quot;' + active_pane + '&quot;,&quot;hidden&quot;);"><img src="../images/close.png" hspace="0" vspace="0" bo//rder="0"/></a></td></tr></table>';
//	else
	html+='</tr></table>'				
	for (doc_type = 0; doc_type<map_type_name.length;doc_type++) {
		if (doc_type!=opened_type && !allopened)
			html+=map_type_title(doc_type)+'</table>';
	}
	for (doc_type = 0; doc_type<map_type_name.length;doc_type++) {
		if (allopened)
			opened_type=doc_type
		if (doc_type==opened_type){
			html+=map_type_title(doc_type)
			for (i=0;i<ordered_map_list.length;i++){
				mcode=ordered_map_list[i].mcode;
				if (ordered_map_list[i].type == opened_type){ 
					var opt=(option==0)?3:option; // in mapster option=3, need to be placed at left
					html+='<tr height=16px style="background-color:'+change_color()+'"><td width=10px>'+map_tag(mcode) + '</td><td '+ map_pic_html(mcode,opt)+'><a class="f" href="';
					if (option>0) // mapster menu
						html+='javascript: load_map(&quot;' + active_pane+ '&quot;,&quot;'+ mcode +'&quot;,1);"';
					else // main page menu
						html+='mapster.php#right=' + mcode + map_zoom(mcode)+ '"';
					html+='" title="Загрузить карту">'  + ordered_map_list[i].name +  '</a></td></tr>';
				}
			}
		}
		if (option>0 || allopened) // mapster menu
			html+='<tr height=12px></tr>';
		html+='</table>';
	}
	return html	
}

function getElementPosition(elemId){
    var elem = document.getElementById(elemId);
	if (elem==null)
		return null
    var w = elem.offsetWidth;
    var h = elem.offsetHeight;	
    var l = 0;
    var t = 0;
    while (elem){
        l += elem.offsetLeft;
        t += elem.offsetTop;
        elem = elem.offsetParent;
    }
    return {"left":l, "top":t, "width": w, "height":h};
}

function getBodyScrollTop(){
//	return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
	return $(window).scrollTop()
}

function mousePageXY(e){
  var x = 0, y = 0;
  if (!e) e = window.event;
  if (e.pageX || e.pageY){
    x = e.pageX;
    y = e.pageY;
  }
  else if (e.clientX || e.clientY){
    x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
    y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
  }
  return {"x":x, "y":y};
}

var onomouse_html=' onmouseout="close_infowin4()" onmouseover="';
//var img_tail=' border="1" alt="Изображение загружается">';
var img_tail =' border="1">';

function page_pic_html(pic_name){
	return onomouse_html+'show_page_pic(&quot;page_'+pic_name+'_270.jpg&quot;)" ';
}

function page_pic_html1(pic_name){
	return onomouse_html+'show_page_pic1(&quot;page_'+pic_name+'_270.jpg&quot;)" ';
}

function map_pic_html(mcode,option){ // 0 - from cursor, 1, 2 - center, 2 & panes==2 - left top, 3 - left top, 4 - from cursor 135 px, 5 - from cursor 270px
	if (map_list[mcode]==undefined)
		return ''
	if (option<4)
		return ' onmouseover="expand_map(&quot;'+mcode+'&quot;,'+option+')" onmouseout="close_infowin3()"';
	else	
		return onomouse_html+'show_map_pic(&quot;'+mcode+'&quot;,'+option+')"';	
}

function two_map_pics_html(){
	return onomouse_html+'show_two_map_pics();"';
}

function show_page_pic(pic_url){
	var html = '<img src="../images/' + pic_url + '" ' + img_tail;
	infowin4(270,html);
}

function show_page_pic1(pic_url){
	var html = '<img src="/images/' + pic_url + '" '+img_tail;
	infowin4(135,html);
}

function show_map_pic(mcode,option){ // 4 - from cursor 135 px, 5 - from cursor 270px
	var html = '<table><tr><td><img src="../images/full_map_header_135.png"></td></tr><tr><td><img '+pic_src(mcode,xs_pic)+' width="';
	var w_width=270;
	if (option==5)
		html += '262" height="158"';
	else {
		html += '135" height="135"';
		w_width=143;
	}
	infowin4(w_width,html+img_tail+'</td></tr></table>');
}

function show_two_map_pics(){
	var html = '<table><tr><td colspan=2><img src="../images/full_map_header_270.png" width="278"></td></tr><tr><td><img'+pic_src(left_map_code,xs_pic)+'width="135" height="135"'+img_tail+'</td><td><img'+pic_src(right_map_code,xs_pic)+'width="135" height="135"'+img_tail+'</td></tr></table>';
	infowin4(285,html);
}

function read_map_hits(){
	$.post("../update_hits.php?allmaps=1",function (data){	
		var arr=data.split(" ");
		for (i=0;i<arr.length-1;i+=2){
			mcode=arr[i];
			hits=arr[i+1];		
			if (mcode && map_list[mcode])
				map_list[mcode].hits=hits
		}
	})
}

function get_map_hits(option){
	$.post("../update_hits.php?allmaps=1",function (data){
		var arr=data.split(" ");
		for (i=0;i<arr.length-1;i+=2){
			mcode=arr[i];
			hits=arr[i+1];	
			if (mcode)
				$("#"+mcode+"hits").html((option)?"("+hits+")":"Просмотров:&nbsp; "+hits)
		}
	})
}

function get_album_hits(aid){
	if (!aid)
		return
	$.get("../update_hits.php?get=1&album="+aid,function(data){
			var arr=data.split(" ");
			for (i=0;i<arr.length-1;i+=2){
				pid=arr[i];
				hits=arr[i+1];
				if (pid)
					$("#"+pid+"hits").html(hits)
			}
		})
}

function fill_hits(){ // not used - get_album_hits instead
	$("[id$='hits']").each(function(index) {
		var id=this.id;
		var pid=id.substr(0,id.length-4);
		$.get("../update_hits.php?get=1&pid="+pid,function(data){
			var arr=data.split(" ");pid=arr[2];hits=arr[1];$("#"+pid+"hits").html(hits)})
  });
}

function update_map_hits(mcode){
	$.post("update_hits.php?mcode="+mcode+'&' + add_hash())
}

function expand_map(mcode,option){ // 0 - from cursor, 1, 2 - center, 2 & panes=2 || 3 - (left,100) 
	var html2 = '<table><tr><td><img'+pic_src(mcode,s_pic)+'border="1"/></td><td style="padding-left:10px" valign="top">Код: ' + mcode;	
	hits = bsp + '<a id="exhits' + mcode + '"></a>';
	$.get("../update_hits.php?get=1&mcode="+mcode,function(data){var arr=data.split(" ");mcode=arr[0];hits=arr[1];$("#exhits"+mcode).html("Просмотров: "+hits)})
	var html3 = '<br/>Разрешение: ' + map_list[mcode].zoom + hits +'<p>';
//	var html6 = '<p style="margin-top:0; font-size:8pt" align="justify">'
//	var all_html=html2 + html3 +  "</p>"  + html6 + map_list[mcode].comment + '</p></td></tr></table>';
	var html6 = '<p style="margin-top:0; font-size:8pt" align="justify" id="c' + mcode + '">'
	var all_html=html2 + html3 +  "</p>"  + html6 + '</p></td></tr></table>';
	var infowin_width = 600;
	var left=window_width/2-infowin_width/2;
	var topleft=getElementPosition(mcode+"pic")
	if (topleft!=null)
		if (topleft.left + topleft.width < window_width/2)
			left = topleft.left + topleft.width + 20;
		else
			left = 20;
	if (option==2 && number_of_panes==2 || option==3)
		left=20;
	var top=getBodyScrollTop()+50;	
	if (option == 0){	
		var x=100, y=100;
		try {x=cursor_xy.x;y=cursor_xy.y;}catch(e){};	
		top=getBodyScrollTop()+50;
		n_w=n_h=540;
		left=10;
		if (x<n_w+50 && y<n_h+top)
			left=x+30	
	}
//	update_map_hits(mcode);
	infowin3(left,top,infowin_width,map_list[mcode].name, all_html);
	$.get("../read_map.php?mode=comment&mcode=" + mcode,function(data){
			$("#c" + mcode).html('<i>' + data + '</i>')})
}

function read_picture(xmlhttp){
	var xmlDoc=xmlhttp.responseXML;
	var elem=xmlDoc.documentElement;
	if (elem==null) // empty xml
		alert("Ошибка 001 в описании документа галереи")
	var x=elem.getElementsByTagName("m");
	//alert("x.lenght="+x.length+" elem="+elem);
	var m=x[0];
	if (!m)
		alert("Ошибка 002 в описании документа галереи")
	var coordinates = m.getAttribute("c");
	if (coordinates==null)
		coordinates="";
	var title = m.getAttribute("t");
	if (title==null)
		title="";
	var caption = m.getAttribute("q");
	if (caption==null)
		caption="";
	var date = m.getAttribute("d");
	if (date==null)
		date="";	
	var source = m.getAttribute("s");
	if (source==null)
		source="";
	var direction = m.getAttribute("e");
	if (direction==null)
		direction="Не определено";
	var keywords = m.getAttribute("k");
	if (keywords==null)
		keywords = "";
	var hits = m.getAttribute("j");
	if (hits==null)
		hits = 0;	
	return {'aid':m.getAttribute("a"),
			'pid':m.getAttribute("i"),
			'file_path':m.getAttribute("p"),
			'file_name':m.getAttribute("f"),
			'pwidth':parseInt(m.getAttribute("w")),
			'pheight':parseInt(m.getAttribute("h")),
			'prev':m.getAttribute("r"),
			'next':m.getAttribute("n"),
			'coordinates':coordinates,'title':title,'caption':caption,'date':date,'source':source,'direction':direction,'keywords':keywords,'hits':hits}	
}	// read_picture

function load_album_xml_1(url,option){
	$.get(url,function(result,status,xmlhttp){album_xml_loading_1(xmlhttp,url,option)});	
}

function album_xml_loading_1(xmlhttp,url,option){
	var	table;
	var row;
	var cell;
	var j=0;
	
	function insert_album_links(row_num){
		row=table.insertRow(row_num);
		cell=row.insertCell(0);
		cell.width='800px';
		cell.height='32px';
		cell.align='left';
		cell.vAlign='middle';
		cell.innerHTML='<a href="../gallery/thumbnails.php?album='+aid+'" title="Посмотреть миниатюры альбома"><span><img src="../gallery/images/icons/thumbnails.png" border=0 align=top>' + bsp + 'Просмотр миниатюр альбома</span></a>' + bsp + '<a href="../mapster.php?rightalbum='+aid+'" title="Посмотреть содержимое альбома на карте"><span><img src="../gallery/images/icons/map.png" border=0 align=top>' + bsp + 'Альбом на карте</span></a>';
	}
	
	if (option==2){
		var album_div=get("album_list0");
		table = document.createElement("table");
		album_div.appendChild(table);
	}
	else
		table = get('album_bbcode');
	
//	if (xmlhttp.readyState==4) {// 4 = "loaded"
//	  if (xmlhttp.status==200) {// 200 = "OK"
	var xmlDoc=xmlhttp.responseXML;
	var elem=xmlDoc.documentElement;
	if (elem==null){ // empty album
		alert("empty album="+url);
		return
	}
	var x= xmlDoc.documentElement.getElementsByTagName("m");
	var x_aid=xmlDoc.documentElement.getElementsByTagName("album");
	//	alert("found aid elements="+x_aid.length);
	var mx=x_aid[0];
	var aid = mx.getAttribute("aid");
	//	alert("aid="+aid);
	//	alert("found m elements="+x.length+" for "+url );
	//	alert("option="+option);
	if (option==1){ // from forum
		insert_album_links(j);
		j++;
	}	
	for (i=0;i<x.length;i++){
		var m=x[i];	
		var pid = m.getAttribute("i");
		var title = m.getAttribute("t");
		if (title==null)
			title="<Нет названия>";
		var date = m.getAttribute("d");
		if (date==null)
			date="<Нет даты>";			
		var file_path = m.getAttribute("p");
		var file_name = m.getAttribute("f");
		var coordinates = m.getAttribute("c");
		var link1;
		if (coordinates)
			link1 = '<a class="f" href="../mapster.php#rightpid=' + pid + '" title="Данное изображение привязано к координатной сетке. Кликните для отображения на карте"><img src="http://labs.google.com/ridefinder/images/mm_20_green.png" height="8" width="6">&nbsp;</a>';
		else
			link1 = '<a class="f" title="Данное изображение не привязано к координатной сетке">' + bsp + '</a>';
		var pwidth = parseInt(m.getAttribute("w"));
		var pheight = parseInt(m.getAttribute("h"));
		var prefix='normal_';
		if (pwidth<=540 && pheight<=540)
			prefix=set_prefix(file_name);				
		row=table.insertRow(j);
		j++;
		var i1=i+1;
		cell=row.insertCell(0);
		cell.width='800px';
		cell.align='left';
		cell.vAlign='middle';
		cell.style.backgroundColor=change_color();
		var title1=title.replace(/\"/g,"'")
		cell.innerHTML = '<table cellpadding="0" cellspacing="0"><tr><td width="30" align="right"> ' + i1 + '</td><td width="30" align="center">' +  link1 + '</td><td><a class="f" onmouseover="pic_infowin(&quot;'+ date + ' ' + title1 +'&quot;,&quot;'+ file_path + prefix + file_name+'&quot;,'+pwidth+','+pheight+')" onmouseout="close_infowin3()" href="../gallery/displayimage.php?pid='+pid+'" title="Перейти к просмотру изображения в галерее">' + date + ' ' + title + '</a></td></tr></table>';
	} // for
	insert_album_links(j);
//		} // 200 OK
//	 } // 4 = "loaded"
}	// album_xml_loading_1

var new_map_tag		=	1;    // map tags - сode in gallery keywords g=
var rare_map_tag	=	2;
var ax_map_tag		=	3;
var max_map_tag		=	3;
							 // Map types - сode in gallery keywords t=
var modernmap		= 	0;   // Modern on-line maps
var gpmap			= 	1;   // Genplan 2025 maps	
var mcmap			= 	2;   // Moscow city map
var krmap			= 	3;   // Kremlin map
var mvmap			=   4;	 // Moscow vicinity map
var frmap			=   5;	 // Fragments
var spmap			=   6;	 // Special maps
var map_type_name = ["Современные on-line карты","Генеральный план 2025","Карты Москвы","Планы Кремля","Карты Подмосковья","Карты отдельных районов","Тематические карты"];
var map_class_name = ["Современные карты","Современные карты","Современные карты","Современные карты","Современные карты","Карты 1945-2000х годов","Карты 1920-1940х годов","Дореволюционные карты XX века","Карты XIX века","Карты XVIII века","Планы Москвы в древности","Карты Генплана 2025 года","Тематические карты","Карты отдельных районов"];
var map_class_forum = [205,205,205,205,205,206,207,208,209,210,211,236,390,643];
map_class_forum[99]=205;
var map_class_name1 = ["Карты Google","Карты Яндекс","Карты Yahoo","Карты Microsoft/Bing","On-line Карты"];
for (var m=5;m < map_class_name.length;m++)
	map_class_name1[m]=map_class_name[m]

function map_subtitle3(mcode){ // for lj
	var map_class = mcode.substr(0,2) * 1;
	return 'Раздел: <a href="http://retromap.ru/forum/viewtopic.php?t='+map_class_forum[map_class]+'">'+ map_class_name[map_class]+'</a>' + bsp + 'Тип: '+map_type_name[map_list[mcode].type]+bsp+'Покрытие:&nbsp;' + map_list[mcode].area
}
function map_subtitle2(mcode){
	var id=mcode+"hits";
	hits = bsp + '<a id="'+id+'"></a>';
	return map_subtitle1(mcode)+hits
}

function map_subtitle1(mcode){
	var map_class=mcode.substr(0,2) * 1;
	var area = map_list[mcode].area * 1;
	return 'Раздел: <a href="../forum/viewtopic.php?t='+map_class_forum[map_class]+'" title="Перейти к просмотру карт данного раздела"><u>'+ map_class_name[map_class]+'</u></a>' + bsp + 'Тип:&nbsp;'+map_type_name[map_list[mcode].type] + bsp + ' Покрытие:&nbsp;' + area_forum(area);
}

function map_subtitle(mcode){
	var id="hits"+mcode;
	hits = bsp + 'Просмотров:&nbsp;<span id="'+id+'">XXXX</span>';
	$.get("../update_hits.php?get=1&mcode="+mcode,function(data){var arr=data.split(" ");mcode=arr[0];hits=arr[1];$("#hits"+mcode).html(hits)})
	return map_subtitle1(mcode) + hits
}

function area_forum(area){
	var topic = [643,650,649,648,647,646,645,644]
	var area_title = [
		"Планы отдельных районов",
		"Планы Кремля и близлежащих территории",
		"Территория в пределах Садового кольца",
		"Территория в пределах Камер-Коллежского вала",
		"Территория в пределах Окружной железной дороги",
		"Территория в пределах МКАД",
		"Московская область",
		"Вся территория Земли" 
		]			
	return '<a href="../forum/viewtopic.php?f=54&t=' + topic[area*1] + '" title="' + area_title[area*1] + ', кликните для просмотра списка карт c аналогичным покрытием территории">' + '<u>' + area + '</u></a>';
}

var map_type_number = Array(); // number of maps by type

var maps = Array();
var map_list = Array();
var ordered_map_list=Array();
var number_of_maps;
var map_class_number = Array(); // number of maps by map_class
var num_of_classes = map_class_name.length;

function count_maps(){
	number_of_maps=0;
	for (var j=0; j < num_of_classes; j++)
			map_class_number[j] = 0;
	for (j=0; j<map_type_name.length ; j++)
		map_type_number[j] = 0;
		
	for (var n in map_list){
		number_of_maps++;
		map_class_number[n.substr(0,2)*1]++;
		map_type_number[map_list[n].type]++
		}
}


function find_zoom(point){
	var area_zoom = [14,	// fragments
					  15,	// Kremlim
					  15,	// Garden
					  15,	// 1800
					  14,	// 1900
					  14,	// MKAD
					  12,	// Vicinity
					  14]	// World
	return area_zoom[area_code(point)];
}

function area_code(point){
	var lat=point.lat();
	var lng=point.lng();
	if (lat>55.747381 && lat<55.756413 && lng>37.609634 && lng<37.626414) // Kremlin
		return 1
	if (lat>55.744120 && lat<55.765854 && lng>37.602252 && lng<37.642250) // Garden ring
		return 2
	if (lat>55.700613 && lat<55.805719 && lng>37.543373 && lng<37.712974) // Border 1800
		return 3		
	if (lat>55.683101 && lat<55.861729 && lng>37.520885 && lng<37.752456) // Border 1900
		return 4
	if (lat>55.567863 && lat<55.916890 && lng>37.377548 && lng<37.840347) // MKAD
		return 5
	return 6	
}

function get_map_coverages(){ // calculation of map coverages
	/*
	0 - fragments
	1 - Kremlin
	2 - Garden ring
	3 - 1800 (Camer-Col Val)
	4 - 1900 (Railway Ring)
	5 - MKAD
	6 - Moscow Oblast
	7 - world
	*/	
	for (mcode in map_list){
		var area = 5 // by default - MKAD
		if ((mcode=='0619302') || (mcode=='061942') || (mcode=='061931') || (mcode=='0619311') || (mcode=='101690'))
			area = 5
		else if ((mcode=='051986') || (mcode=='051980'))
			area = 4
		else if (mcode=='061941')
			area = 3
		else {	
			var type = map_list[mcode].type;
			var year=mcode.substr(2,4);
			if (type == modernmap)
					area = 7
			else if (type == gpmap)
					area = 5		
			else if (type == mcmap)
					if (year > 1964)
						area = 5
					else if (year > 1856)
						area = 4
					else if (year > 1678)
						area = 3
					else 
						area = 2
			else if (type == mvmap)
					area = 6
			else if (type == krmap)
					area = 1		
			else if (type == frmap)
					area = 0;
		}
		map_list[mcode].area = area		
	}
}

function next_map_code(map_code,option){
	var current_map=false;
	for (i=0; i<ordered_map_list.length; i++){
		if (current_map)
			if (option==0 || (option!=0 && ordered_map_list[i].type==map_list[map_code].type)) // option==0 - all types of maps
				return ordered_map_list[i].mcode
		if (ordered_map_list[i].mcode==map_code)
			current_map=true;
	}
	return "0020090" // last map in the list
}

function previous_map_code(map_code,option){
	var result="0020090";
	if (map_code==result) // first map in the list - returning the last
		return ordered_map_list[ordered_map_list.length-1].mcode
	for (i=0; i<ordered_map_list.length; i++){
		if (ordered_map_list[i].mcode==map_code)
			return result
		if (option==0 || (option!=0 && ordered_map_list[i].type==map_list[map_code].type)) // option==0 - all types of maps
			result=ordered_map_list[i].mcode
	}
}

function random_map_code(){
	var j=Math.floor(Math.random()*(number_of_maps+1));
	return ordered_map_list[j].mcode
}

var from_js=0; 
var from_gallery=1;

function retro_map(type, url, name, zoom, tag, topic,pid,origin,picpath,picfile,pwidth,pheight,coord){
	this.type=type;
	this.url=url;
	this.name=name;
	this.zoom=zoom*1;
	this.tag=tag;
	this.topic=topic;
	this.pid=pid;
	this.origin=origin;
	this.picpath=picpath;
	this.picfile=picfile;
	this.pwidth=pwidth;
	this.pheight=pheight;
	this.coord=coord;
}

function got(map_code){
	var a=document.getElementById(map_code);
	return (a==null) ? "" : a.innerHTML
}
/*
function add_map(doc_type,map_code, name, max_res, tag, topic){
	(map_code=="051967" || map_code=="0519661" || name=="Неизвестная карта") ? domain='hutun.ru/maps/' : domain='retromap.ru/maps/';
	var url=domain + map_code;
	map_list[map_code] = new retro_map(doc_type,url,name,max_res,tag,topic,0,from_js,domain,"");
}
*/
var dir_prefix = huff('af23efda6657aa12f19f53e08ae6eff',16,7);
function add_map(keywords,name,pid,picpath,picfile,pwidth,pheight,coord){
	var doc_type=parser(keywords, "t=");
	var domain=parser(keywords, "d=");
	if (!domain)
		domain="retromap";
	var map_code=parser(keywords, "c=");
	var max_res=parser(keywords, "z=");
	var tag=parser(keywords, "g=");
	var topic=parser(keywords, "f=");
	if (map_list[map_code])
		GLog.write("Повторный ввод карты с кодом "+map_code)
	var url=domain + '.ru/' + dir_prefix + '/' + set_prefix(map_code) + map_code
	if (doc_type>=map_type_name.length || isNaN(parseInt(doc_type))){
		GLog.write("Ошибка в типе вводимой карты, код карты="+map_code+", тип карты="+doc_type)
		doc_type=0
	}
	if (isNaN(parseInt(map_code))){
		GLog.write("Ошибка в коде вводимой карты, код карты="+map_code)
		map_code="0020090"
	}
	if (max_res<8 || max_res>22 || isNaN(parseInt(doc_type))){
		GLog.write("Ошибка в максимальном разрешении вводимой карты, код карты="+map_code+", разрешение="+max_res)
		max_res=11
	}
	if (tag>max_map_tag || isNaN(parseInt(tag))){
		GLog.write("Ошибка в теге вводимой карты, код карты="+map_code+", тег карты="+tag)
		tag=1
	}
	if (isNaN(parseInt(topic))){
		GLog.write("Ошибка в номере темы форума вводимой карты, код карты="+map_code+", топик="+topic)
		topic=0
	}
	if (isNaN(parseInt(pid))){
		GLog.write("Ошибка в номере изображения в галерее вводимой карты, код карты="+map_code+", pid="+pid)
		pid=0
	}
	map_list[map_code] = new retro_map(doc_type,url,name,max_res, tag,topic,pid,from_gallery,picpath,picfile,pwidth,pheight,coord);
//	map_list[map_code].comment=comment;
	map_list[map_code].encoding = parser(keywords, "e=");
/*	if (parser(keywords, "e=")==1)
		map_list[map_code].encoding = true
	else
		map_list[map_code].encoding = false
	*/
	map_list[map_code].created = parser(keywords, "q=");	
}

function map_ordering(){
	function sort_index(a,b)
	{
	if (a.mclass==b.mclass)
		if (a.year==b.year)
			return a.option - b.option
		else
			return b.year - a.year
	else	
		return a.ind - b.ind;
	}
	for (n in map_list){
		index=n;
		if (n.length==6)	index+='00000'
		else if (n.length==7) index+='0000'
		else if (n.length==8) index+='000'
		else if (n.length==9) index+='00'
		else if (n.length==10) index+='0'
		map_list[n].ind=index;
		map_list[n].mcode=n;
		map_list[n].mclass=n.substr(0,2);
		map_list[n].year=n.substr(2,4);
		map_list[n].option=n.substr(6,5);
		ordered_map_list.push(map_list[n])
	}
	ordered_map_list.sort(sort_index)
//	for (n in ordered_map_list){
//		GLog.write('n='+n+' name='+' ind='+ordered_map_list[n].ind+' mcode='+ordered_map_list[n].mcode+' name='+ordered_map_list[n].name)
//	}
}

function set_copyrights(){
	retro_map.prototype.copyright='';
	for (map_code in map_list){
		switch (map_code.substr(0,2)){
		case "01": // Yandex					
		if (map_code=="0120090")	copyright_msg="<a style=\"font-size:14pt\"><font color=red>Я</font><font color=darkgray>ндекс</font><br/></a>Данные карты © Геоцентр-Консалтинг, © ЗАО Резидент, © Роскартография";
		if (map_code=="0120092")	copyright_msg= "<a style=\"color:white; font-size:14pt\">Яндекс<br/></a><a style=\"color:white\">Изображения ©European Space Imaging GmBH, Includes material ©DigitalGlobe Inc., ©ООО ИТЦ СКАНЭКС</a>";
		else						copyright_msg="<a style=\"color:white; font-size:14pt\">Яндекс<br/></a><a style=\"color:white\">Данные карты ©Геоцентр-Консалтинг, ©ЗАО Резидент, ©Роскартография <br/>Изображения ©European Space Imaging GmBH, Includes material ©DigitalGlobe Inc., ©ООО ИТЦ СКАНЭКС</a>";
		break;
		case "02": // Yahoo
		if (map_code=="0220090")	copyright_msg="©2010 Yahoo! Inc.";
			else					copyright_msg="<a style=\"color:white\">©2010 Yahoo! Inc.</a>";
		break;
		case "03": // Microsoft
		if (map_code=="0320093")	copyright_msg= "©Microsoft Corporation ©AND"; 
		else						copyright_msg= "<a style=\"color:white;\">©Microsoft Corporation ©AND ©DigitalGlobe</a>";
		break;
		case "04": // Others modern
		if (map_code=="0420090") 	copyright_msg= "Wikimapia.org";
		if (map_code=="0420091") 	copyright_msg= "<a href=\"http://www.openstreetmap.org\">©OpenStreetMap.org</a>";
		if (map_code=="0420092")	copyright_msg="<a href=\"http://www.openstreetmap.org\">©OpenStreetMap.org</a>";
		if (map_code=="0420093")	copyright_msg= "©Роскартография ©ЗАО «Геоцентр-Консалтинг» ©Collins Bartholomew";
		break;
		case "11": // Genplan
									copyright_msg= "<a style=\"color:white;\">Москомархитектура</a>";
		break;
		default:
			copyright_msg='<a href="../forum/viewtopic.php?f=12&t=359" title="Условия использования материалов сайта retromap.ru">&copy; Retromap</a>';
		} //switch
		map_list[map_code].copyright=copyright_msg;
	} // for
}

function init_map_list() { // called from generated in gallery gallery_map_list.js
	set_copyrights();
	count_maps();
	get_map_coverages();
	map_ordering();
	read_map_hits();
}

function update_log(key){ // key is just extra text to be shown in a log file
	$(document.createElement('div')).appendTo('body').css({'display':'none'}).load('../count_users.php?' + add_hash(), function(){
		var users=document.getElementById("total_users").innerHTML;
		var registered=document.getElementById("registered").innerHTML;
		var guests=document.getElementById("guests").innerHTML;
		$.get('../update_log.php?referrer='+encodeURIComponent(document.referrer)+'&url='+encodeURIComponent(location.href)+'&key='+key+'&users='+users+'.'+registered+'.'+guests);
	})
}
//update_log('') called in get_user_name function

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-21399398-1']);
_gaq.push(['_trackPageview']);

(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
