function NumDecline(num, nom, genS, genP) {
	var number = Number(num);
	if (number)
	{
		if ((number > 10) && ((number % 100) < 20) && ((number % 100) >= 10))
			return genP;
		else
		{
			var rem = (number % 10)
			if (rem == 1)
				return nom;
			else if ((rem == 2) || (rem == 3) || (rem == 4))
				return genS;
			else
				return genP;
		}
	}
	else
		return false;
}
var stations = [
[85,'Авиамоторная',500,398,500,398,514,412],
[13,'Автозаводская',402,502,402,502,416,516],
[97,'Академическая',244,510,244,510,258,524],
[53,'Александровский сад',269,335,269,335,283,349],
[105,'Алексеевская',379,156,379,156,393,170],
[135,'Алтуфьево',257,57,257,57,271,71],
[156,'Аннино',327,638,327,638,341,652],
[159,'Арбатская',257,346,257,346,271,360],
[158,'Арбатская',247,335,247,335,261,349],
[5,'Аэропорт',173,189,173,189,187,203],
[109,'Бабушкинская',406,87,406,87,420,101],
[57,'Багратионовская',89,363,89,363,103,377],
[71,'Баррикадная',191,297,191,297,205,311],
[47,'Бауманская',476,326,476,326,490,340],
[69,'Беговая',147,269,147,269,161,283],
[7,'Белорусская',207,224,207,224,221,238],
[93,'Беляево',194,559,194,559,208,573],
[131,'Бибирево',271,71,271,71,285,85],
[30,'Библиотека имени В.И. Ленина',280,346,280,346,294,360],
[89,'Битцевский парк',220,619,220,619,234,633],
[120,'Боровицкая',269,357,269,357,283,371],
[194,'Боровское шоссе',99,643,99,643,113,657],
[107,'Ботанический сад',379,115,379,115,393,129],
[145,'Братиславская',488,547,488,547,502,561],
[172,'Бульвар Дмитрия Донского',327,652,327,652,341,666],
[182,'Бунинская аллея',329,701,329,701,343,715],
[164,'Варшавская',356,560,356,560,370,574],
[106,'ВДНХ',379,136,379,136,393,150],
[112,'Владыкино',271,106,271,106,285,120],
[2,'Водный стадион',161,132,161,132,175,146],
[3,'Войковская',161,154,161,154,175,168],
[77,'Волгоградский проспект',489,454,489,454,503,468],
[142,'Волжская',488,519,488,519,502,533],
[167,'Волоколамское',51,201,51,201,65,215],
[157,'Воробъевы горы',151,478,151,478,165,492],
[191,'Вострякова',99,596,99,596,113,610],
[187,'Выставочный центр',346,135,346,135,360,149],
[81,'Выхино',555,483,555,483,569,497],
[6,'Динамо',186,203,186,203,200,217],
[115,'Дмитровская',258,151,258,151,272,165],
[132,'Добрынинская',326,458,326,458,340,472],
[21,'Домодедовская',443,622,443,622,457,636],
[176,'Достоевская',326,176,326,176,340,190],
[140,'Дубровка',466,476,466,476,480,490],
[43,'Измайловская',531,269,531,269,545,283],
[94,'Калужская',207,547,207,547,221,561],
[18,'Кантемировская',403,581,403,581,417,595],
[17,'Каховская',325,561,325,561,339,575],
[15,'Каширская',394,560,394,560,408,574],
[52,'Киевская',176,385,176,385,190,399],
[74,'Китай-город',378,355,378,355,392,369],
[144,'Кожуховская',466,497,466,497,480,511],
[14,'Коломенская',402,542,402,542,416,556],
[35,'Комсомольская',403,224,403,224,417,238],
[92,'Коньково',195,575,195,575,209,589],
[22,'Красногвардейская',455,635,455,635,469,649],
[133,'Краснопресненская',175,296,175,296,189,310],
[36,'Красносельская',425,201,425,201,439,215],
[34,'Красные ворота',383,244,383,244,397,258],
[139,'Крестьянская застава',466,448,466,448,480,462],
[29,'Кропоткинская',237,391,237,391,251,405],
[62,'Крылатское',52,275,52,275,66,289],
[73,'Кузнецкий мост',343,308,343,308,357,322],
[79,'Кузьминки',517,482,517,482,531,496],
[60,'Кунцевская',51,325,51,325,65,339],
[48,'Курская',447,344,447,344,461,358],
[55,'Кутузовская',111,387,111,387,125,401],
[98,'Ленинский проспект',256,497,256,497,270,511],
[32,'Лубянка',331,296,331,296,345,310],
[143,'Люблино',488,533,488,533,502,547],
[87,'Марксистская',431,411,431,411,445,425],
[177,'Марьина роща',326,158,326,158,340,172],
[146,'Марьино',488,560,488,560,502,574],
[8,'Маяковская',239,257,239,257,253,271],
[110,'Медведково',406,66,406,66,420,80],
[162,'Международная',136,337,136,337,150,351],
[117,'Менделеевская',258,185,258,185,272,199],
[170,'Минская',73,374,73,374,87,388],
[166,'Митино',51,163,51,163,65,177],
[61,'Молодежная',51,299,51,299,65,313],
[163,'Москва-Сити',136,321,136,321,150,335],
[124,'Нагатинская',327,514,327,514,341,528],
[125,'Нагорная',309,532,309,532,323,546],
[126,'Нахимовский проспект',308,546,308,546,322,560],
[189,'Никулинская',99,565,99,565,113,579],
[82,'Новогиреево',544,353,544,353,558,367],
[173,'Новокосино',569,353,569,353,583,367],
[11,'Новокузнецкая',318,420,318,420,332,434],
[195,'Новопеределкино',99,659,99,659,113,673],
[134,'Новослободская',270,196,270,196,284,210],
[95,'Новые черемушки',219,535,219,535,233,549],
[100,'Октябрьская',273,448,273,448,287,462],
[67,'Октябрьское поле',119,242,119,242,133,256],
[190,'Олимпийская деревня',99,580,99,580,113,594],
[20,'Орехово',429,608,429,608,443,622],
[111,'Отрадное',271,88,271,88,285,102],
[31,'Охотный ряд',305,322,305,322,319,336],
[12,'Павелецкая',357,458,357,458,371,472],
[28,'Парк культуры',214,412,214,412,228,426],
[171,'Парк победы',95,395,95,395,109,409],
[44,'Партизанская',518,283,518,283,532,297],
[42,'Первомайская',531,248,531,248,545,262],
[83,'Перово',529,368,529,368,543,382],
[113,'Петровско-разумовская',258,119,258,119,272,133],
[141,'Печатники',478,508,478,508,492,522],
[59,'Пионерская',64,339,64,339,78,353],
[63,'Планерная',106,162,106,162,120,176],
[86,'Площадь Ильича',466,411,466,411,480,425],
[49,'Площадь революции',328,345,328,345,342,359],
[68,'Полежаевская',133,256,133,256,147,270],
[121,'Полянка',276,408,276,408,290,422],
[130,'Пражская',327,609,327,609,341,623],
[38,'Преображенская площадь',455,171,455,171,469,185],
[76,'Пролетарская',466,431,466,431,480,445],
[165,'Пронская',581,483,581,483,595,497],
[24,'Проспект Вернадского',115,514,115,514,129,528],
[136,'Проспект Мира',372,202,372,202,386,216],
[96,'Профсоюзная',231,522,231,522,245,536],
[72,'Пушкинская',260,294,260,294,274,308],
[1,'Речной вокзал',161,110,161,110,175,124],
[104,'Рижская',379,177,379,177,393,191],
[138,'Римская',466,394,466,394,480,408],
[80,'Рязанский проспект',536,483,536,483,550,497],
[116,'Савеловская',258,167,258,167,272,181],
[108,'Свиблово',392,100,392,100,406,114],
[127,'Севастопольская',309,561,309,561,323,575],
[45,'Семеновская',503,297,503,297,517,311],
[122,'Серпуховская',326,475,326,475,340,489],
[169,'Славянский бульвар',51,351,51,351,65,365],
[160,'Смоленская (ап)',224,346,224,346,238,360],
[161,'Смоленская (ф)',213,336,213,336,227,350],
[4,'Сокол',161,176,161,176,175,190],
[37,'Сокольники',440,186,440,186,454,200],
[193,'Солнцево',99,627,99,627,113,641],
[26,'Спортивная',173,456,173,456,187,470],
[174,'Сретенский бульвар',352,267,352,267,366,281],
[168,'Строгино',51,239,51,239,65,253],
[54,'Студенческая',137,411,137,411,151,425],
[102,'Сухаревская',367,226,367,226,381,240],
[64,'Сходненская',106,184,106,184,120,198],
[75,'Таганская',423,399,423,399,437,413],
[9,'Тверская',276,294,276,294,290,308],
[10,'Театральная',316,333,316,333,330,347],
[78,'Текстильщики',504,468,504,468,518,482],
[185,'Телецентр',306,135,306,135,320,149],
[91,'Теплый стан',195,593,195,593,209,607],
[192,'Терешково',99,612,99,612,113,626],
[183,'Тимиирязевская (лм)',270,136,270,136,284,150],
[114,'Тимирязевская',258,135,258,135,272,149],
[88,'Третьяковская',325,408,325,408,339,422],
[175,'Трубная',326,238,326,238,340,252],
[123,'Тульская',326,495,326,495,340,509],
[103,'Тургеневская',367,275,367,275,381,289],
[65,'Тушинская',106,207,106,207,120,221],
[70,'Улица 1905 года',160,282,160,282,174,296],
[155,'Улица академика Янгеля',327,623,327,623,341,637],
[40,'Улица Подбельского',469,134,469,134,483,148],
[178,'Улица Старокачаловская',312,652,312,652,326,666],
[25,'Университет',131,498,131,498,145,512],
[58,'Филевский парк',76,351,76,351,90,365],
[56,'Фили',100,375,100,375,114,389],
[27,'Фрунзенская',191,437,191,437,205,451],
[19,'Царицыно',416,595,416,595,430,609],
[118,'Цветной бульвар',310,238,310,238,324,252],
[39,'Черкизовская',469,157,469,157,483,171],
[128,'Чертановская',309,575,309,575,323,589],
[119,'Чеховская',268,280,268,280,282,294],
[33,'Чистые пруды',367,259,367,259,381,273],
[137,'Чкаловская',447,359,447,359,461,373],
[99,'Шаболовская',268,485,268,485,282,499],
[84,'Шоссе энтузиастов',514,382,514,382,528,396],
[41,'Щелковская',531,228,531,228,545,242],
[66,'Щукинская',106,229,106,229,120,243],
[46,'Электрозаводская',490,311,490,311,504,325],
[23,'Юго-Западная',99,530,99,530,113,544],
[196,'Юго-Западная (лм)',99,546,99,546,113,560],
[129,'Южная',327,594,327,594,341,608],
[90,'Ясенево',207,606,207,606,221,620],
[180,'бульвар Адмирала Ушакова',312,686,312,686,326,700],
[186,'улица Академика Королева',325,135,325,135,339,149],
[181,'улица Горчакова',312,701,312,701,326,715],
[184,'улица Милашенкова',289,135,289,135,303,149],
[179,'улица Скобелевская',312,671,312,671,326,685],
[188,'улица Эзенштейна',366,135,366,135,380,149]
]

var regions = {
1:[0,'Центр',7, 134, 136, 35, 117, 48, 137, 75, 87, 12, 132, 122, 100, 28, 52, 133, 71, 8, 118, 175, 174, 33, 103, 34, 74, 32, 73, 49, 10, 31, 9, 119, 72, 53, 30, 120, 159, 158, 161, 160, 29, 121, 88, 11],
2:[0,'3 станции от центра',70, 69, 68, 4, 5, 6, 116, 115, 114, 106, 105, 104, 36, 37, 38, 47, 46, 45, 85, 84, 86, 76, 77, 78, 138, 139, 140, 13, 14, 15, 123, 124, 125, 99, 98, 97, 27, 26, 157, 54, 55, 56, 171, 170, 169, 162, 163],
3:[0,'сокольническая',40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 157, 25, 24, 23, 196, 189, 190, 191, 192, 193, 194, 195],
4:[0,'замоскворецкая',1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 18, 15, 19, 20, 21, 22],
5:[0,'арбатско-покровская',41, 42, 43, 44, 45, 46, 47, 48, 49, 159, 160, 52, 171, 170, 169, 168, 167, 166],
6:[0,'филевская',62, 61, 60, 59, 58, 57, 56, 55, 54, 52, 161, 158, 53],
7:[0,'кольцевая',48, 35, 136, 134, 7, 133, 52, 28, 100, 132, 12, 75],
8:[0,'калужско-рижская',89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 88, 74, 103, 102, 136, 104, 105, 106, 107, 108, 109, 110],
9:[0,'таганско-краснопресненская',63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 165],
10:[0,'калининская',173, 82, 83, 84, 85, 86, 87, 88],
11:[0,'серпуховско-тимирязевская',182, 181, 180, 179, 178, 172, 156, 155, 130, 129, 128, 127, 126, 125, 124, 123, 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 131, 135],
12:[0,'люблинская',177, 176, 175, 174, 137, 138, 139, 140, 144, 141, 142, 143, 145, 146],
13:[0,'каховская',17, 164, 15]
}

var points = new Object();
var markers = new Array();
var lineMarkers = new Array();
var bullits = new Array();
var underlines = new Array();
var imagemap;
var block;
var stationMask;
var stationMask2;
var stationMask3;
var mapCounter;


function drawMap() {
	var code = '<div id="metro">';
	code += '<img src="http://www.bsnrealty.ru/images/map.gif" usemap="#metromap" style="border:0px">';
	code += '<a href="#" onclick="hideMap();return false;"><img src="http://www.bsnrealty.ru/images/close.gif" style="border:0px;position:absolute;top:10px;right:10px"></a>';
	code += '<map name="metromap" id="map"></map>';
	code += '<div class="rside"><div id="regions"></div><input type="submit" value="Сохранить и закрыть" style="margin:10px;" onclick="hideMap();return false;"><br/><input type="reset" value="Сбросить" onclick="clearPoints();updateSample();return false;" style="margin:10px;"></div>';
	code += '</div>';
	document.write(code);
}


function showMap() {
	block.style.display = 'block';
	for(var i = 0; i < document.adminForm.elements.length; i++){
		if (document.adminForm.elements[i].type == 'select-one')
			document.adminForm.elements[i].style.visibility = 'hidden';
	}
}


function hideMap() {
	block.style.display = 'none';
	for(var i = 0; i < document.adminForm.elements.length; i++){
		if (document.adminForm.elements[i].type == 'select-one')
			document.adminForm.elements[i].style.visibility = 'visible';
	}
}


function initMap() {
	block = document.getElementById('metro');
	imagemap = document.getElementById('map');
	mapCounter = document.getElementById('mapCounter');
	stationMask = document.adminForm.metro;
	stationMask2 = document.adminForm2.metro;
	stationMask3 = document.adminForm3.metro;
	makeIndex();
	drawStations();
	initMapButtons();
	clearPoints();
	loadSelection()
	updateSample();
}


function makeIndex() {
	stations.sort(function(a,b){return a[0]-b[0]});
	for(var i = 0; i < stations.length; i++){
		if (points[stations[i][0]] == null)
		{
			points[stations[i][0]] = new Array();
			points[stations[i][0]].push(0);
		}
		points[stations[i][0]].push(i);
	}
}


function drawStations() {
	for(var i = 0; i < stations.length; i++){
		markers[i] = document.createElement("IMG");
		markers[i].src = "http://www.bsnrealty.ru/images/dot.gif";
		markers[i].style.position = "absolute";
		markers[i].style.left = stations[i][2]+'px';
		markers[i].style.top = stations[i][3]+'px';
		markers[i].onclick = new Function('switchCheckbox(' + stations[i][0] + ')');
		underlines[i] = document.createElement("DIV");
		underlines[i].className = 'underline';
		underlines[i].style.left = stations[i][4]+'px';
		underlines[i].style.top = stations[i][7]+'px';
		underlines[i].style.width = (stations[i][6] - stations[i][4])+'px';
		var a = document.createElement('AREA');
		a.shape = 'rect';
		a.title = stations[i][1];
		a.coords = stations[i][4] + ',' + stations[i][5] + ',' + stations[i][6] + ',' + stations[i][7];
		a.onclick = new Function('switchCheckbox(' + stations[i][0] + ')');
		a.onmouseover = new Function('underline(' + i + ')');
		a.onmouseout = new Function('unUnderline(' + i + ')');
		imagemap.appendChild(a);
	}
}

function initMapButtons() {
	var r = document.getElementById('regions')
	for (var i in regions){
		var n = document.createTextNode(regions[i][1])
		var d = document.createElement('DIV');
		d.id = 'n' + i;
		d.onclick = new Function('switchRegion(' + [i] + ')');
		r.appendChild(d);
		bullits[i] = document.createElement("IMG");
		bullits[i].src = "http://www.bsnrealty.ru/images/bullit.gif";
		bullits[i].className = "bullit";
		d.appendChild(bullits[i]);
		d.appendChild(n);
	}
}


function switchCheckbox(num) {
	if (points[num] != null)
	{
		if (points[num][0] == 0)
			addCheckbox(num);
		else
			removeCheckbox(num);
	}
	updateSample();
}


function switchRegion(num) {
	if (regions[num] != null)
	{
		if (regions[num][0] == 0)
		{
			addRegion(num);
			if (num == 2)
				addRegion(1);
		}
		else
		{
			removeRegion(num);
			if (num == 2)
				removeRegion(1);
		}
	}
	updateSample();
}


function addRegion(n) {
	if (lineMarkers[n] != null)
		block.appendChild(lineMarkers[n]);
	if (bullits[n] != null)
		bullits[n].style.visibility = 'visible';
	regions[n][0] = 1;
	for(var i = 2; i < regions[n].length; i++)
		addCheckbox(regions[n][i]);
}


function removeRegion(n) {
	if (lineMarkers[n] != null)
		block.removeChild(lineMarkers[n]);
	if (bullits[n] != null)
		bullits[n].style.visibility = 'hidden';
	regions[n][0] = 0;
	for(var i = 2; i < regions[n].length; i++)
		removeCheckbox(regions[n][i]);
}


function addCheckbox(n) {
	points[n][0] = 1;
	for(var i = 1; i < points[n].length; i++)
		block.appendChild(markers[points[n][i]]);
}


function removeCheckbox(n) {
	points[n][0] = 0;
	for(var i = 1; i < points[n].length; i++){
		if (markers[points[n][i]].parentNode == block)
		{
			block.removeChild(markers[points[n][i]]);
		}
	}
}


function underline(num) {
	//block.appendChild(underlines[num]);
}


function unUnderline(num) {
	//block.removeChild(underlines[num]);
}


function loadSelection() {
	var l = stationMask.value.split(',');
	for(var i = 0; i < l.length; i++){
		if(points[l[i]] != null)
			addCheckbox(l[i]);
	}
	var l2 = stationMask2.value.split(',');
  	for(var i = 0; i < l2.length; i++){
		if(points[l2[i]] != null)
			addCheckbox(l2[i]);
	}
 	var l3 = stationMask3.value.split(',');
  	for(var i = 0; i < l3.length; i++){
		if(points[l3[i]] != null)
			addCheckbox(l2[i]);
	}   	
	updateSample();
}


function clearPoints() {
	for(var j in regions){
		if(regions[j][0] == 1)
			removeRegion(j);
	}
	for(var i in points){
		if(points[i][0] == 1)
			removeCheckbox(i);
	}
}


function updateSample() {
	var s = new Array();
	for(var i in points){
		if(points[i][0] == 1)
			s.push(i);
	}
	stationMask.value = s;
	stationMask2.value = s;
	stationMask3.value = s;
	//if (s.length == 0)
		//mapCounter.innerHTML = 'Выберите станции метро';
	//else
		//mapCounter.innerHTML = NumDecline(s.length, 'Выбрана ', 'Выбрано ', 'Выбрано ') + s.length + NumDecline(s.length, ' станция', ' станции', ' станции') + ' метро';
}
   
//////////////////////////////////////////////////////

function listToMask(l) {
// iannea aie?ai auou ioni?oe?iaai ii aic?anoaie?
	var mask = '';
	var bb = new Array(); // iannea n iiia?aie byte e bit
	var maxByte = 0;
	for(var i in l)
	{
		bb[i] = new Array();
		maxByte = bb[i][0] = Math.floor((l[i] - 1) / 8) + 1;
		bb[i][1] = Math.pow(2,(((l[i] % 8)==0) ? 8 : (l[i] % 8))-1);
	}
	for(var j = 1; j <= maxByte; j++)
	{
		var t = new Array();
		for(var k in bb)
		{
			if (bb[k][0] == j)
				t.push(bb[k][1]);
			if (bb[k][0] > j)
				break;
		}
		mask = bit(t) + mask;
	}
	return mask;
}


function bit(a) {
	var r = '00'
	if (a.length > 0)
	{
		var n = 0;
		for(var i in a)
		{
			if (a[i] != 0)
				n = n + a[i];
		}
		r = n.toString(16);
		if (r.length == 1)
			r = '0' + r;
	}
	return r;
}


function maskToList(m) {
	var list = new Array();
	if (m.length >= 2)
	{
		var pieces = new Array();
		for(var i = 0; i < m.length; i += 2)
			pieces.push(m.substr(i,2));
		pieces.reverse();
		for(var j in pieces)
			list = list.concat(bbToInt(j,parseInt(('0x' + pieces[j]),16)));
	}
	return list;
}


function bbToInt(byte,bit) {
	var numbers = new Array();
	var i = 1;
	while(bit > 0)
	{
		if ((bit & 1) == 1)
			numbers.push((i + byte*8));
		bit = (bit >> 1);
		i++;
	}
	return numbers;
}

function initSearchform() {
	initMap();
}

//////////////////////////////////////////////////////

drawMap();
window.onload = initSearchform;
