var stations = [
[1,'Авиамоторная',508,270,508,270,578,279],
[2,'Автозаводская',389,452,389,452,464,461],
[3,'Академическая',190,546,124,546,199,555],
[4,'Александровский сад',222,370,127,370,232,379],
[4,'Арбатская',206,354,206,354,260,363],
[4,'Арбатская',228,380,181,379,238,389],
[4,'Библиотека им. Ленина',234,370,232,370,338,379],
[4,'Боровицкая',240,380,238,379,303,389],
[5,'Алексеевская',389,71,389,71,456,80],
[6,'Алтуфьево',315,21,315,21,369,30],
[7,'Аннино',289,626,258,626,298,635],
[8,'Аэропорт',190,61,150,61,199,70],
[9,'Бабушкинская',389,31,389,31,459,39],
[10,'Багратионовская',51,258,51,258,133,267],
[11,'Баррикадная',178,221,119,219,187,230],
[11,'Краснопресненская',186,229,100,230,195,240],
[12,'Бауманская',508,190,508,190,569,199],
[13,'Беговая',175,160,142,160,184,169],
[14,'Белорусская',224,200,167,200,233,209],
[15,'Беляево',190,586,156,586,199,595],
[16,'Бибирево',315,31,315,31,364,40],
[17,'Новоясеневская',190,626,119,626,199,635],
[18,'Ботанический сад',389,51,389,51,474,60],
[19,'Братиславская',406,586,406,586,480,595],
[20,'Бульвар Адмирала Ушакова',277,684,183,684,286,693],
[21,'Бульвар Дмитрия Донского',289,658,289,651,354,667],
[21,'Ул. Старокачаловская',277,658,168,659,286,667],
[22,'Бунинская аллея',277,704,204,704,286,713],
[23,'Варшавская',364,498,312,498,373,507],
[24,'ВДНХ',389,61,389,61,420,70],
[25,'Владыкино',315,51,315,51,372,60],
[26,'Водный стадион',190,31,120,31,199,40],
[27,'Войковская',190,41,139,41,199,50],
[28,'Волгоградский проспект',489,586,489,586,580,595],
[29,'Волжская',406,566,406,566,456,575],
[30,'Воробьевы горы',86,586,17,586,95,595],
[31,'Марьина роща',315,150,315,150,385,159],
[32,'Выхино',489,626,489,626,531,635],
[33,'Динамо',190,71,157,71,199,80],
[34,'Дмитровская',264,140,206,140,273,149],
[35,'Добрынинская',289,448,289,448,362,457],
[35,'Серпуховская',289,460,289,457,361,469],
[36,'Домодедовская',389,616,323,616,398,625],
[37,'Дубровка',406,536,406,536,457,545],
[38,'Измайловская',508,150,508,150,579,159],
[39,'Партизанская',508,160,508,160,577,169],
[40,'Калужская',190,576,143,576,199,585],
[41,'Кантемировская',389,586,319,586,398,595],
[42,'Каховская',301,555,301,555,359,564],
[42,'Севастопольская',289,555,214,555,298,564],
[43,'Каширская',389,474,389,474,447,483],
[44,'Киевская',157,338,154,328,191,348],
[45,'Китай-город',353,310,353,310,417,319],
[46,'Кожуховская',406,546,406,546,473,555],
[47,'Коломенская',389,462,389,462,454,471],
[48,'Комсомольская',385,220,385,220,464,229],
[49,'Коньково',190,596,149,596,199,605],
[50,'Красногвардейская',389,632,303,632,398,641],
[51,'Красносельская',489,61,489,61,568,70],
[52,'Красные ворота',371,234,371,234,447,243],
[53,'Крестьянская застава',455,400,455,398,561,409],
[53,'Пролетарская',455,412,455,409,526,422],
[54,'Кропоткинская',208,397,208,397,282,406],
[55,'Крылатское',16,188,16,188,75,197],
[56,'Кузнецкий мост',316,273,247,273,325,282],
[56,'Лубянка',324,281,286,282,333,292],
[57,'Кузьминки',489,606,489,606,544,615],
[58,'Кунцевская',16,223,16,223,78,232],
[59,'Курская',420,278,420,278,467,287],
[59,'Чкаловская',422,290,422,287,485,299],
[60,'Кутузовская',71,278,71,278,135,287],
[61,'Ленинский проспект',190,536,128,536,199,545],
[62,'Люблино',406,576,406,576,452,585],
[63,'Марксистская',417,358,417,357,489,367],
[63,'Таганская',413,370,413,367,468,380],
[64,'Марьино',406,596,406,596,452,605],
[65,'Маяковская',228,226,228,226,289,235],
[66,'Медведково',389,21,389,21,450,30],
[67,'Менделеевская',264,173,198,173,273,182],
[67,'Новослободская',264,185,190,182,273,194],
[68,'Молодежная',16,198,16,198,78,207],
[69,'Нагатинская',289,519,235,519,298,528],
[70,'Нагорная',289,529,249,529,298,538],
[71,'Нахимовский проспект',289,539,213,539,298,548],
[72,'Новогиреево',508,240,508,240,570,249],
[73,'Новокузнецкая',332,360,332,356,409,366],
[73,'Третьяковская',321,360,318,350,380,369],
[74,'Новые Черемушки',190,566,118,566,199,575],
[75,'Октябрьская',240,440,183,440,249,449],
[76,'Октябрьское поле',175,140,100,140,184,149],
[77,'Орехово',389,606,353,606,398,615],
[78,'Отрадное',315,41,315,41,364,50],
[79,'Охотный ряд',288,317,288,316,352,325],
[79,'Площадь Революции',306,335,306,334,405,345],
[79,'Театральная',297,326,297,325,360,334],
[80,'Павелецкая',383,412,383,412,444,421],
[81,'Парк Культуры',195,410,132,410,204,419],
[82,'Парк Победы',104,337,50,337,113,346],
[83,'Первомайская',508,140,508,140,578,149],
[84,'Перово',508,250,508,250,547,259],
[85,'Петровско-Разумовская',289,91,289,91,354,106],
[86,'Печатники',406,556,406,556,459,565],
[87,'Пионерская',31,238,31,238,89,247],
[88,'Планерная',175,100,130,100,184,109],
[89,'Площадь Ильича',455,323,455,321,538,332],
[89,'Римская',455,335,455,332,503,344],
[90,'Полежаевская',175,150,115,150,184,159],
[91,'Полянка',289,430,289,430,333,439],
[92,'Пражская',289,606,247,606,298,615],
[93,'Преображенская площадь',489,41,489,41,582,50],
[94,'Проспект Вернадского',86,606,14,606,95,615],
[95,'Проспект Мира',352,195,352,195,425,204],
[96,'Профсоюзная',190,556,131,556,199,565],
[97,'Пушкинская',222,264,168,262,233,273],
[97,'Тверская',228,254,228,252,278,262],
[97,'Чеховская',234,264,233,262,291,273],
[98,'Речной вокзал',190,21,128,21,199,30],
[99,'Рижская',389,81,389,81,435,90],
[100,'Рязанский проспект',489,616,489,616,585,625],
[101,'Савеловская',264,150,209,150,273,159],
[102,'Свиблово',389,41,389,41,439,50],
[103,'Семеновская',508,170,508,170,572,179],
[104,'Смоленская',172,353,122,353,181,362],
[104,'Смоленская',191,339,191,338,252,348],
[105,'Сокол',190,51,164,51,199,60],
[106,'Сокольники',489,51,489,51,549,60],
[107,'Спортивная',86,576,36,576,95,585],
[108,'Студенческая',81,288,81,288,148,297],
[109,'Сухаревская',352,226,296,226,361,235],
[110,'Сходненская',175,110,118,110,184,119],
[111,'Текстильщики',489,596,489,596,558,605],
[112,'Славянский бульвар',62,294,12,288,71,303],
[113,'Теплый стан',190,606,139,606,199,615],
[114,'Тимирязевская',264,130,199,130,273,139],
[115,'Тульская',289,509,250,509,298,518],
[116,'Сретенский бульвар',362,258,352,257,457,267],
[116,'Тургеневская',352,264,352,267,421,277],
[116,'Чистые пруды',352,252,352,248,420,257],
[117,'Тушинская',175,120,129,120,184,129],
[118,'Ул. 1905 года',175,170,108,170,184,179],
[119,'Международная',127,299,127,299,205,308],
[120,'Ул. Академика Янгеля',289,616,235,616,298,625],
[121,'Ул. Горчакова',277,694,204,694,286,703],
[122,'Выставочная',127,309,127,309,192,318],
[123,'Ул. Подбельского',489,21,489,21,585,30],
[124,'Ул. Скобелевская',277,674,191,674,286,683],
[125,'Университет',86,596,34,596,95,605],
[126,'Филевский парк',41,248,41,248,117,257],
[127,'Фили',61,268,61,268,91,277],
[128,'Фрунзенская',86,566,30,566,95,575],
[129,'Царицыно',389,596,345,596,398,605],
[130,'Трубная',296,204,294,204,341,213],
[130,'Цветной бульвар',284,204,247,204,294,219],
[131,'Черкизовская',489,31,489,31,558,40],
[132,'Чертановская',289,586,231,586,298,595],
[133,'Шаболовская',190,526,133,526,199,535],
[134,'Шоссе Энтузиастов',508,260,508,260,597,269],
[135,'Щелковская',508,130,508,130,569,139],
[136,'Щукинская',175,130,127,130,184,139],
[137,'Электрозаводская',508,180,508,180,597,189],
[138,'Юго-Западная',86,616,25,616,95,625],
[139,'Южная',289,596,260,596,298,605],
[140,'Ясенево',190,616,156,616,199,625],
[143,'Братеево',389,649,389,649,436,657],
[146,'Останкино',315,140,315,140,369,149],
[147,'Достоевская',315,172,315,172,381,181],
[148,'Жулебино (р-н)',489,636,489,636,538,645],
[151,'Митино',16,148,16,148,56,157],
[152,'Новокосино',508,230,508,230,568,239],
[156,'Строгино',16,178,16,178,64,187],
[144,'Мякинино',16,168,16,168,67,177],
[145,'Волоколамская',16,158,16,158,92,167]
]

var regions = {
1:[0,'Центр',4,11,14,35,44,45,48,52,54,56,59,63,65,67,73,75,79,80,81,91,95,97,104,109,116,130,147],
2:[0,'В пределах 3-го кольца',2,4,11,12,13,14,28,31,33,35,37,44,45,48,51,52,53,54,56,59,60,61,63,65,67,73,75,79,80,81,82,89,91,95,97,99,101,104,107,108,109,115,116,118,119,122,128,130,133,147],
3:[0,'Таганско-Краснопресненская (северо-запад)',11,13,76,88,90,110,117,118,136],
4:[0,'Замоскворецкая (север)',8,14,26,27,33,98,105],
5:[0,'Серпуховско-Тимирязевская (север)',6,16,25,34,67,78,85,101,114],
6:[0,'Калужско-Рижская (север)',5,9,18,24,66,95,99,102],
7:[0,'Сокольническая (северо-восток)',48,51,93,106,123,131],
8:[0,'Арбатско-Покровская (восток)',12,38,39,59,83,103,135,137],
9:[0,'Калининская',1,63,72,84,89,134,152],
10:[0,'Таганско-Краснопресненская (юго-восток)',28,32,53,57,63,100,111,148],
11:[0,'Люблинская',19,29,37,46,53,59,62,64,86,89],
12:[0,'Замоскворецкая (юг)',2,36,41,43,47,50,77,80,129,143],
13:[0,'Серпуховско-Тимирязевская (юг)',7,21,35,42,69,70,71,92,115,120,132,139],
14:[0,'Калужско-Рижская (юг)',3,15,17,40,49,61,74,75,96,113,133,140],
15:[0,'Сокольническая (юго-запад)',30,81,94,107,125,128,138],
16:[0,'Арбатско-Покровская (запад)',44,55,68,82,112,151,144,145,156],
17:[0,'Филёвская',10,44,58,60,87,108,119,122,126,127],
18:[0,'Бутовская',20,21,22,121,124]
}

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 mapCounter;


function drawMap() {
	var code = '<div id="metro">';
	code += '<img src="/images/map.gif" usemap="#metromap" style="border:0px">';
	code += '<a href="#" onclick="hideMap();return false;"><img src="/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="reset" value="Очистить всё" onclick="clearPoints();updateSample();return false;" style="margin:10px;"></div>';
	code += '<input type="submit" value="Сохранить и закрыть" style="position:absolute;bottom:10px;right:10px" onclick="hideMap();return false;">';
	code += '</div>';
	document.write(code);
}


function showMap() {
	block.style.display = 'block';
	for(var i = 0; i < document.requestForm.elements.length; i++){
		if (document.requestForm.elements[i].type == 'select-one')
			document.requestForm.elements[i].style.visibility = 'hidden';
	}
}


function hideMap() {
	block.style.display = 'none';
	for(var i = 0; i < document.requestForm.elements.length; i++){
		if (document.requestForm.elements[i].type == 'select-one')
			document.requestForm.elements[i].style.visibility = 'visible';
	}
}


function initMap() {
	block = document.getElementById('metro');
	imagemap = document.getElementById('map');
	mapCounter = document.getElementById('mapCounter');
	stationMask = document.requestForm.metro;
	makeIndex();
	drawStations();
	drawLineMarkers();
	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 = "/images/dot.gif";
		markers[i].style.position = "absolute";
		markers[i].style.left = stations[i][2];
		markers[i].style.top = stations[i][3];
		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];
		underlines[i].style.top = stations[i][7];
		underlines[i].style.width = stations[i][6] - stations[i][4];
		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 drawLineMarkers() {
	var lm = [
		[3,173,86,186,99,'a1',172,86],
		[4,188,7,201,20,'a1',187,7],
		[5,313,7,326,20,'a1',312,7],
		[6,387,7,400,20,'a1',386,7],
		[7,487,7,500,20,'a1',486,7],
		[8,506,116,519,129,'a1',505,116],
		[9,506,216,519,229,'a1',505,216],
		[10,487,646,500,659,'a2',486,645],
		[11,404,606,417,619,'a2',403,605],
		[12,387,659,400,672,'a2',386,658],
		[13,287,670,300,683,'a2',286,669],
		[14,188,636,201,649,'a2',187,635],
		[15,84,626,97,639,'a2',83,625],
		[16,14,134,27,147,'a1',13,134],
		[17,0,221,13,234,'a3',0,220],
		[18,275,714,288,727,'a2',274,713]
	]
	for(var i = 0; i < lm.length; i++){
		var a = document.createElement('AREA');
		a.shape = 'rect';
		a.title = regions[lm[i][0]][1];
		a.coords = lm[i][1] + ',' + lm[i][2] + ',' + lm[i][3] + ',' + lm[i][4];
		a.onclick = new Function('switchRegion(' + lm[i][0] + ')');
		imagemap.appendChild(a);
		lineMarkers[lm[i][0]] = document.createElement("IMG");
		lineMarkers[lm[i][0]].src = '/images/' + lm[i][5] + '.gif';
		lineMarkers[lm[i][0]].style.position = "absolute";
		lineMarkers[lm[i][0]].style.left = lm[i][6];
		lineMarkers[lm[i][0]].style.top = lm[i][7];
		lineMarkers[lm[i][0]].onclick = new Function('switchRegion(' + lm[i][0] + ')');
	}
}


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 = "/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 = maskToList(stationMask.value);
	for(var i = 0; i < l.length; i++){
		if(points[l[i]] != null)
			addCheckbox(l[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 = listToMask(s);
	if (s.length == 0)
		mapCounter.innerHTML = 'Не выбрана станция метро';
	else
		mapCounter.innerHTML = NumDecline(s.length, 'Выбрана ', 'Выбрано ', 'Выбрано ') + s.length + NumDecline(s.length, ' станция', ' станции', ' станций') + ' метро';
}

//////////////////////////////////////////////////////

function listToMask(l) {
// массив должен быть отсортирован по возрастанию
	var mask = '';
	var bb = new Array(); // массив с номерами byte и 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 PriceLabel(){
	var Index = document.requestForm.contract.selectedIndex;
	if(document.requestForm.contract.options[Index].value == 8)
		{
			document.getElementById("meterPriceLabel").innerHTML='Цена за метр (руб.) от';
			document.getElementById("priceLabel").innerHTML='Цена за помещение (руб.) от';
			document.getElementById("priceDescription").innerHTML='<strong>Цена указана в рублях за квадратный метр.</strong>';
		}
	else
		{
			document.getElementById("meterPriceLabel").innerHTML='Цена за метр в год (руб.) от';
			document.getElementById("priceLabel").innerHTML='Цена помещения в месяц (руб.) от';
			document.getElementById("priceDescription").innerHTML='<strong>Цена указана в рублях за квадратный метр в год.</strong>';
		}
}

//////////////////////////////////////////////////////

function initSearchform() {
	initCart();
	initMap();
	InitButtons();
	document.requestForm.contract.onchange = PriceLabel;
	PriceLabel();
}

//////////////////////////////////////////////////////

drawMap();
window.onload = initSearchform;
