/**
 * включать в консоли  firebug
 */
var debugMode = false;

function placeHolder(sIdInput, sLabel)
{
	this.input = _$(sIdInput);
	this.input.value = sLabel;
	this.input.holder = this.input.value;

	this.init();
}
placeHolder.prototype = {
	init: function ()
	{
		Common.Event.add(this.input, 'focus', function(){
			this.value == this.holder ? this.value = '' : null
			Common.Class.add(this, 'focus')
		})
		Common.Event.add(this.input, 'blur', function(){
			this.value == '' ? this.value = this.holder : null
			Common.Class.remove(this, 'focus')
		})
		Common.Event.add(this.input, 'keyup', function(){
			if(this.value == '')
			{
				Common.Class.replace(this, 'full', 'empty')
			}
			else
			{
				Common.Class.replace(this, 'empty', 'full')
			}
		})
		this.input.value == this.input.holder ? Common.Class.add(this.input, 'empty') : null
	}
}


function oRegion(sName, iId)
{
	this.id = 'region' + iId;
}


function oArea(sCoords, sRegion)
{
	if(sCoords) this.coords = sCoords;
	if(sRegion) this.region = sRegion;
	
	this.tooltipOffsetX = 0;
	this.tooltipOffsetY = 0;

	if(sRegion) this.init();
}
oArea.prototype = {
	init: function()
	{
		this.oLi = _$('region' + this.region);
		var _this = this;
		Common.Event.add(this.oLi, 'click', function(){
			if(_bMapStatus == true) oMap.moveDown(this);
		});

		this.oDiv = this.oLi.firstChild;
		if(!this.oDiv.bAppended) this.appendCorner();

		this.ocTags = this.oLi.firstChild.childNodes;
		for (var i = 0; i < this.ocTags.length ; i++)
		{
			if(this.ocTags[i].nodeType == 1)
			{
				Common.Event.add(this.ocTags[i], 'click', function(){
					if(_bMapStatus == true) oMap.moveDown(_this.oLi);
				});
			}
		}
	},
	// уголок для вслплывающей подсказки <p class="corner"/>
	appendCorner: function()
	{
		this.oP = document.createElement("p");
		this.oP.className = 'corner';
		this.oDiv.appendChild(this.oP);
		this.oDiv.bAppended = true;
	}
}

function oMap()
{
	this.init();
}
oMap.prototype = {
	init: function()
	{
		// временный элемент <li/> куда пихается все данные из списка
		this.oTempTooltip = _$('tooltip');
		this.oTempTooltipText = _$('tooltipText'); //    
		this.oTempLabel = _$('map-label');

		//if(debugMode)
			//this.loadAreas(); // загрузить с http://vtb24.ru/json
		//else
			this.getArray();
		this.oSearch = new PageSearch('CityListWrapper', 'mapSearch');
		this.oSearch.setParam('found_elements', ['li']);
		this.oSearch.setParam('condition', 'and');
		this.oSearch.setParam('exception', ['обл([А-я]*)','рес([А-я]*)']); // Исключения для поиска по "область, республика"
		
		this.oSearch.onSearchEnd = function () 
		{
			//jQuery("#CityList li.selected").removeClass("selected");
			 //jQuery('#CityList ul li.selected ul li.selected ul li a').css("position","relative");
			 show_h();
		}

		/*   */
		this.oSearchInput = _$('mapSearch');
		this.examplesEvents('list_ex');
		this.examplesEvents('map_ex');
	},
	// События на элементы с примером поиска
	examplesEvents: function(sId)
	{
		var _oMap = this;
		menu(_$(sId).childNodes, function(span){
			if(span.nodeType == 1){
				if(Common.Class.match(span, 'pseudo-href'))
				{
					Common.Event.add(span, 'click', function(){
						Common.Class.remove(_oMap.oSearchInput, 'empty');
						_oMap.oSearchInput.value = span.innerHTML;
						_oMap.oSearch.startSearch(span.innerHTML);
					});
				}
			}
		});
	},
	attachEvents: function() //   event -> touch (события для <area ... />)
	{
		this.ocMapCoords = _$('coords-map').childNodes
		for (var i = 0; i < this.ocMapCoords.length; i++)
		{
			Common.Event.add(this.ocMapCoords[i], 'click', function(e){_this.event(e, this)})
			Common.Event.add(this.ocMapCoords[i], 'mouseover', function(e){_this.event(e, this)})
			Common.Event.add(this.ocMapCoords[i], 'mouseout', function(e){_this.event(e, this)})
		}
	},
	event: function(e, oArea)
	{
		// тест попадания на зону 
		if(debugMode) document.title = [e.clientX,e.clientY] + ' area: ' + oArea.number + ' region: ' + oArea.region;
		this.oArea = oArea;
		
		this.touch(e.clientX, e.clientY, e.type);
	},
	appendAreas: function() //  area
	{
		this.oMapContainer = _$('coords-map');
		var _this = this;
		for(var i = 0; i < this.oJson.length; i++)
		{
			var oArea = document.createElement("area");
//			oArea.title = i;
			oArea.number = i;
		    
			if(this.oJson[i].region)
			{
				oArea.region = this.oJson[i].region;
			}
			oArea.shape = 'poly';
			oArea.coords = this.oJson[i].coords;
			oArea.tooltipOffsetX = this.oJson[i].tooltipOffsetX;
			oArea.tooltipOffsetY = this.oJson[i].tooltipOffsetY;
			
			Common.Event.add(oArea, 'click', function(e){_this.event(e, this)});
			Common.Event.add(oArea, 'mouseover', function(e){_this.event(e, this)});
			Common.Event.add(oArea, 'mouseout', function(e){_this.event(e, this)});
			
			/* 
			 * jQuery(oArea)
				.bind( 'mouseenter', function(e){_this.event(e, this)} )
				.bind( 'mouseleave', function(e){_this.event(e, this)} )
				.bind( 'click',      function(e){_this.event(e, this)} );
			*/
			
			this.oMapContainer.appendChild(oArea);
		}
		
		Common.Event.add(_$('spherical-map'), 'mouseover', function (e) { 
		    if ( _this.lastOveredArea && !_this.lastOveredArea.mouseOvered )
		    {
				Common.Class.remove( _$('region' + _this.lastOveredArea.region), "over" );
				var oOver = _$('overTooltip');  
                oOver.innerHTML = '';
			}
		});
	},
	
	touch: function(iX, iY, sEventType)
	{	
		var iArea = parseInt(this.oArea.id)
		var _this = this;
		
		//if(this.oArea && this.oArea.region && _$('region' + this.oArea.region)) // старое условие
		if(this.oArea) //    area  
		{
			var oLi = _$('region' + this.oArea.region); //   li

			if(oLi){
				if( (sEventType == 'mouseover' || sEventType == "mouseenter") && this.sClicked != oLi.id && !this.oArea.mouseOvered) //     
				{
					if ( true ) document.body.style.cursor = 'hand';
					
					if ( this.lastOveredArea && this.lastOveredArea != this.oArea )
						Common.Class.remove( _$('region' + this.lastOveredArea.region), "over" );
					
					Common.Class.add(oLi, 'over'); //  over
					var oOver = _$('overTooltip');
					oOver.className = 'tooltip' + this.oArea.region;
					oOver.innerHTML = oLi.innerHTML;
					oOver.sRegion = this.oArea.region;
					this.setCoords(oLi, oOver);
					this.oArea.mouseOvered = true;
					this.lastOveredArea = this.oArea;
				}
				else if( (sEventType == 'mouseout' || sEventType == "mouseleave") && this.sClicked != oLi.id && this.oArea.mouseOvered) //     
				{
					document.body.style.cursor = 'default';
					this.oArea.mouseOvered = false;
				}
				else if(sEventType == 'click')
				{
					var oClicked = _$('clickedTooltip');
					if(this.oCurrentClicked)
					{
						Common.Class.remove(this.oCurrentClicked, 'clicked');
						oClicked.innerHTML = '';
					}

					if(this.oLiClicked && oLi.id == this.oLiClicked.id)
					{
						Common.Class.remove(oLi, 'clicked');
						//oLi.className = '';
						oClicked.innerHTML = '';
						this.oLiClicked = null;
						Common.Class.add(oLi, 'over');
					}
					else
					{
						Common.Class.add(oLi, 'clicked');
						this.oCurrentClicked = oLi;
						oClicked.className = 'tooltip' + this.oArea.region;
						oClicked.innerHTML = oLi.innerHTML;

						Ast.Element.append({
							sTag: "p",
							fAction: function(oElement)
							{
								Common.Event.add(oElement, 'click', function(e){
									oClicked.innerHTML = '';
									Common.Class.remove(_this.oCurrentClicked, 'clicked');
									Common.Class.remove(_this.oLiClicked, 'clicked');
									_this.oLiClicked = null;
									_this.oCurrentClicked = null;
								});
								Common.Class.add(oElement, 'close-this');
							},
							oTarget: oClicked.childNodes[0]
						});
						oClicked.sRegion = this.oArea.region;
						this.setCoords(oLi, oClicked);
						this.attachClose(oClicked);
						this.oLiClicked = oLi;
					}
				}
			}
		}
	},
	setCoords: function(oElement, oTargetElement)
	{
		var iLeft = oElement.offsetLeft + (oElement.offsetWidth / 2) + 15;
		var iTop = oElement.offsetTop + (oElement.offsetHeight / 2) - 19 - oTargetElement.offsetHeight;
				
		iLeft += this.oArea.tooltipOffsetX;
		iTop += this.oArea.tooltipOffsetY;
		
/*
		var iLeft = oElement.offsetLeft;
		var iTop = oElement.offsetTop;
*/
		oTargetElement.style.left = iLeft + 'px';
		oTargetElement.style.top = iTop + 'px';
	},
	attachClose: function(oElement)
	{
		var _this = this;
		var closeButton = oElement.childNodes[0].childNodes[3];
		
		Common.Event.add(closeButton, 'click', function( e ){
			oElement.innerHTML = '';
			Common.Class.remove(_this.oCurrentClicked, 'clicked');
			Common.Class.remove(_this.oLiClicked, 'clicked');
			_this.oLiClicked = null;
			_this.oCurrentClicked = null;
			Common.Event.cancel( e );
			return  false;
		});
	},

	loadAreas: function() //   json
	{
		var _this = this;
		var xRequest = window.XMLHttpRequest ? new XMLHttpRequest() : (window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : null)
		xRequest.onreadystatechange = function()
		{
			if (xRequest.readyState == 4 && xRequest.status == 200)
			{
				_this.sJson = xRequest.responseText.replace(/<\?xml version="1.0" encoding="utf-16"\?>/, "");
				_this.sJson = xRequest.responseText.replace(/<\?xml version="1.0" encoding="utf-8"\?>/, "");
				
				_this.oJson = eval('(' + _this.sJson + ')');
				_this.appendAreas();
			}
		};
		xRequest.open('GET', '/json/map/', true);
		xRequest.send(null);
		return false;
	},
	getArray: function() // все данные о точках в массиве
	{
        var oArea1 = new oArea("131,322,131,326,134,329,138,329,141,326,141,322,138,319,134,319", "1");
        var oArea2 = new oArea("127,324,131,324,131,326,134,329,138,329,141,326,141,322,138,319,134,319,131,322,131,324,127,324,119,317,125,308,130,308,138,313,145,312,148,314,148,320,143,327,144,332,147,335,146,342,130,343,130,337,126,330", "2");
		var oArea4 = new oArea("140,234,137,237,137,241,140,244,144,244,147,241,147,237,144,234", "4");
        var oArea6 = new oArea("257,277,254,280,255,285,249,289,247,297,254,299,261,295,264,298,259,303,256,304,253,313,252,315,243,315,242,311,235,310,231,307,232,303,231,301,224,301,218,295,211,295,205,289,196,284,191,277,190,270,190,265,202,252,200,243,202,237,205,234,211,233,215,238,222,233,218,229,220,222,224,220,226,222,226,228,231,237,237,237,238,232,241,227,261,226,264,231,265,235,269,235,275,229,275,221,286,214,287,206,294,214,295,221,294,225,288,225,285,221,281,227,281,233,284,237,291,239,297,233,301,233,307,231,319,232,326,234,330,230,336,234,332,237,334,242,341,241,349,246,353,243,359,242,362,247,358,251,360,252,363,251,369,248,370,240,365,228,369,227,372,236,376,237,393,251,388,256,391,266,384,263,379,271,372,270,369,276,362,277,330,260,322,259,313,251,305,255,295,253,285,253,289,255,284,264,283,267,285,269,285,276,283,278,278,274,272,275,266,269,255,267", "6");
		var oArea6_2 = new oArea("362,215,364,222,357,217,353,217,350,212,347,212,350,208,349,198,345,198,345,193,348,189,352,192,358,182,369,180,368,175,378,172,386,161,402,156,407,158,410,155,416,158,434,152,436,160,432,165,416,165,403,168,401,173,395,172,393,175,378,184,365,195,362,202", "6");
		var oArea6_3 = new oArea("316,224,321,222,320,215,316,214,311,216,309,221,312,224", "6");		
		var oArea14 = new oArea("187,358,187,360,187,363,185,365,183,366,181,367,180,372,177,372,175,372,172,372,168,372,167,368,166,365,164,363,159,361,159,358,161,355,164,353,168,353,170,352,172,351,173,348,175,346,177,346,179,347,184,344,190,343,198,342,204,346,187,356", "14");
		var oArea42 = new oArea("155,285,144,276,138,271,134,275,128,276,119,276,116,275,113,272,114,267,120,262,121,256,123,253,129,255,133,253,135,255,139,253,141,258,146,259,151,267,149,270", "42");
		var oArea43 = new oArea("168,397,168,399,168,402,166,404,162,404,160,404,158,403,156,401,156,401,155,401,155,400,154,399,152,399,152,399,151,398,150,397,149,396,145,392,146,390,146,386,145,378,150,378,155,385,157,388,158,389,160,389,164,389,166,390,168,392,168,395", "43");
		var oArea57 = new oArea("753,377,752,384,759,394,756,402,745,410,737,396,730,390,728,389,726,389,723,391,720,392,714,400,711,390,711,386,709,382,695,376,699,370,705,370,711,365,717,367,719,364,723,363,727,357,730,353,743,335,741,358,744,360,751,357,756,344,758,350,754,369,752,373", "57");
		var oArea59 = new oArea("728,93,717,122,748,150,772,212,783,231,789,217,771,177,751,137", "59");
		var oArea62 = new oArea("752,193,742,158,748,160,742,143,719,125,715,125,715,133,713,136,709,136,708,151,708,157,719,171,719,180,715,183,718,192,716,198,719,209,724,213,728,223,736,219,741,228,747,224,754,228,750,218,754,210,758,213,757,198", "62");
		var oArea69 = new oArea("179,385,177,387,171,388,165,384,160,385,155,375,149,374,147,371,156,363,164,366,164,371,168,378,172,375,178,375,181,380", "69");
		var oArea106 = new oArea("167,263,163,264,164,268,159,275,152,275,151,271,153,268,147,257,142,256,140,251,135,254,133,250,129,254,123,251,122,237,130,232,140,234,137,237,137,241,140,244,144,244,147,241,147,237,144,234,140,234,137,234,137,222,149,222,158,247,170,248,176,255", "106");
		var oArea107 = new oArea("216,168,212,172,218,180,219,188,224,189,227,185,230,194,233,204,237,213,242,218,253,220,262,217,267,208,263,188,264,180,259,167,254,163,254,154,245,150,237,149,229,154,227,160,225,167", "107");
		var oArea109 = new oArea("113,267,109,275,108,283,102,287,99,285,99,279,95,276,96,274,96,270,93,265,99,255,103,251,102,249,103,247,106,245,109,245,115,237,119,236,121,237,122,252,119,256,119,261", "109");
		var oArea116 = new oArea("85,492,88,488,82,484,77,479,71,479,68,483,73,491", "116");
	//	var oArea120 = new oArea("92,510,96,510,99,512,99,504,104,503,103,501,99,498,96,495,93,494,90,495,92,500,89,503,85,505,88,509,89,512", "120");
		var oArea121 = new oArea("97,322,99,325,97,327,97,332,98,337,94,336,90,342,82,342,83,334,79,332,76,326,72,327,71,327,71,323,74,320,76,313,78,313,80,317,82,319,86,318,88,320,97,318", "121");
		var oArea126 = new oArea("139,378,139,380,139,383,139,387,137,389,134,390,131,393,128,390,126,389,125,386,126,381,126,379,126,379,126,378,126,378,126,378,126,378,126,378,126,377,126,377,125,374,126,373,127,372,127,372,129,370,131,371,132,373,133,374,137,374,139,376", "126");
		var oArea130 = new oArea("297,446,299,443,302,442,302,439,306,438,306,431,305,429,311,425,320,430,322,430,325,427,330,427,330,430,329,434,331,437,341,444,343,444,347,449,352,454,352,456,342,459,327,458,320,460,306,458,306,452", "130");
		var oArea86 = new oArea("318, 341, 325, 326, 326, 320, 335, 311, 336, 305, 342, 298, 345, 302, 355, 296, 358, 299, 358, 306, 354, 311, 358, 317, 374, 319, 377, 322, 381, 329, 389, 329, 392, 327, 399, 331, 401, 335, 406, 348, 406, 350, 412, 348, 417, 354, 437, 357, 445, 365, 453, 367, 458, 364, 461, 360, 466, 363, 484, 373, 486, 378, 494, 382, 488, 388, 482, 393, 475, 390, 466, 396, 459, 394, 452, 394, 435, 390, 427, 405, 421, 408, 412, 418, 400, 416, 394, 406, 393, 400, 377, 391, 364, 400, 345, 404, 342, 393, 336, 388, 335, 356, 328, 347, 322, 345", "86");
		
		oArea1.tooltipOffsetX = 5;
        oArea1.tooltipOffsetY = 0;
		
		oArea2.tooltipOffsetX = 15;
        oArea2.tooltipOffsetY = 0;
		
		oArea4.tooltipOffsetX = 5;
        oArea4.tooltipOffsetY = 0;
		
		oArea6.tooltipOffsetX = -50;
        oArea6.tooltipOffsetY = 30;
        oArea6_2.tooltipOffsetX = -50;
        oArea6_2.tooltipOffsetY = 30;
        oArea6_3.tooltipOffsetX = -50;
        oArea6_3.tooltipOffsetY = 30;
        
        oArea14.tooltipOffsetX = 20;
        oArea14.tooltipOffsetY = 0;
        
        oArea42.tooltipOffsetX = 25;
        oArea42.tooltipOffsetY = 10;
        
        oArea43.tooltipOffsetX = 0;
        oArea43.tooltipOffsetY = 5;
        
        oArea57.tooltipOffsetX = 30;
        oArea57.tooltipOffsetY = 0;
        
        oArea59.tooltipOffsetX = 30;
        oArea59.tooltipOffsetY = 40;
        
        oArea62.tooltipOffsetX = 20;
        oArea62.tooltipOffsetY = 25;
		
		oArea69.tooltipOffsetX = 20;
        oArea69.tooltipOffsetY = 15;
		
        oArea106.tooltipOffsetX = 15;
        oArea106.tooltipOffsetY = 20;
        
        oArea107.tooltipOffsetX = 30;
        oArea107.tooltipOffsetY = 10;
		
		oArea109.tooltipOffsetX = 20;
		oArea109.tooltipOffsetY = 0;

		oArea116.tooltipOffsetX = 15;
		oArea116.tooltipOffsetY = 15;
		
	//	oArea120.tooltipOffsetX = 18;
      //  oArea120.tooltipOffsetY = 12;
        
        oArea121.tooltipOffsetX = 20;
        oArea121.tooltipOffsetY = 7;
        
        oArea126.tooltipOffsetX = 10;
        oArea126.tooltipOffsetY = 5;
		
		oArea130.tooltipOffsetX = 10;
        oArea130.tooltipOffsetY = 5;
        
        oArea86.tooltipOffsetX = 10;
        oArea86.tooltipOffsetY = 5;
		
		this.oJson = [
		/* New regions */
			/*oArea120,*/
			oArea116,
			oArea62,
			new oArea("438,358,419,355,415,349,406,351,401,333,394,328,390,331,383,332,378,323,371,319,359,320,359,315,353,314,359,308,357,296,363,295,368,290,380,287,391,275,388,271,391,264,389,255,392,252,402,264,401,268,405,271,409,266,406,261,406,255,402,250,405,245,408,236,406,233,408,229,418,223,426,206,439,214,437,223,431,232,435,238,431,251,430,262,427,267,431,275,426,288,418,296,409,298,402,294,407,302,417,306,420,302,429,298,436,286,435,275,445,270,451,279,450,292,454,295,453,285,455,280,453,274,447,267,435,268,435,257,441,247,437,232,447,224,448,215,451,218,450,226,447,231,447,237,456,243,459,244,460,241,456,238,451,234,452,230,455,227,457,230,460,230,458,225,461,223,469,232,463,238,471,244,469,252,462,260,466,271,473,270,479,274,478,290,473,291,477,296,477,303,480,306,481,321,485,322,487,328,486,334,489,337,495,337,495,348,491,352,492,366,486,374,478,370,471,364,467,364,463,360,456,368,442,366", "87"),
			oArea69,
			oArea107,
		/* End of new regions */
			new oArea("215,214,207,218,212,225,209,233,204,231,198,240,200,251,191,262,188,256,180,255,175,248,169,244,161,245,152,224,177,221,181,203,187,203,194,189,205,184,211,173,218,182,218,189,225,190,224,205,213,209", "101"),
			oArea6,
			oArea6_2,
			oArea6_3,
			new oArea("346,304,344,299,338,302,335,313,328,319,326,323,326,329,317,345,308,345,303,339,297,338,295,341,290,341,287,339,283,341,276,337,272,331,265,330,262,333,264,340,244,337,238,344,236,327,242,324,242,316,253,316,258,305,266,299,265,296,259,294,254,298,248,297,250,291,257,286,255,281,258,277,256,268,266,270,273,277,277,275,283,280,287,276,285,265,290,254,304,255,311,253,315,254,321,259,329,261,361,277,369,275,373,270,378,271,384,264,390,266,387,270,390,275,379,287,368,289,362,295,356,295", "27"),
			new oArea("342,404,341,412,330,417,327,424,317,424,309,422,305,423,300,420,298,420,294,420,291,418,289,415,285,414,276,414,274,409,284,404,285,401,291,401,292,399,293,397,293,394,296,394,298,393,300,390,312,363,327,354,333,366,334,379,334,389,340,396", "19"),
			new oArea("298,368,295,372,296,378,295,383,291,387,287,391,282,394,277,400,271,401,263,404,257,399,257,387,261,377,261,374,263,370,264,368,265,366,266,365,267,363,267,360,267,356,270,353,273,350,276,341,281,345,287,344,295,345,304,346,311,352,305,362", "16"),
			new oArea("270,347,260,357,263,363,259,368,256,368,255,364,251,363,246,359,243,364,242,368,239,371,233,371,231,379,225,387,223,380,223,376,221,369,221,364,219,362,217,364,214,361,211,362,208,359,205,361,202,358,206,353,212,354,215,350,209,342,214,338,220,339,223,336,224,329,230,321,229,317,234,316,236,311,240,313,242,320,239,323,235,327,237,342,239,343,241,340,245,338,261,340", "37"),
			new oArea("251,384,251,384,251,385,250,385,250,386,250,387,249,388,248,388,248,388,247,388,246,388,242,391,242,388,238,388,229,388,231,384,234,381,235,378,236,376,240,375,242,374,244,372,247,366,249,368,252,370,254,372,251,381,251,382,251,383,251,384", "48"),
			new oArea("260,427,260,433,262,437,268,440,278,440,274,445,267,447,253,470,240,470,238,466,238,457,238,452,233,453,231,449,233,440,228,428,228,423,230,419,233,417,234,410,243,408,244,403,251,398,256,404,264,409,264,412,269,413,281,420,280,427,272,430,269,429,267,424,261,424", "67"),
			new oArea("233,455,236,461,236,467,238,471,254,472,256,468,262,468,267,471,264,474,267,481,273,488,270,494,265,495,258,489,254,491,248,487,247,482,234,474,222,474,216,466,213,469,204,450,201,446,194,445,193,441,202,433,209,430,221,417,225,424,231,441,229,449", "75"),
			new oArea("219,415,207,429,200,431,197,435,194,437,191,436,191,432,180,416,183,413,180,409,187,406,193,407,197,411,201,411,205,406,210,410,214,408", "18"),
			new oArea("225,396,234,399,237,405,230,406,228,410,227,415,221,412,217,406,216,404,214,404,211,405,209,404,208,402,206,400,205,398,204,396,204,394,197,388,200,385,204,383,208,382,211,380,215,381,217,382,219,385,220,388,221,391,222,392,222,394,224,395", "52"),
			new oArea("219,372,219,375,213,375,210,375,207,376,204,377,201,368,192,364,193,358,196,357,205,366,207,363,213,365,217,368", "28"),
			new oArea("193,398,199,402,200,406,186,402,184,403,183,403,181,403,180,404,180,404,177,407,173,410,175,403,175,402,175,400,175,399,175,398,175,397,174,396,174,394,174,392,176,392,178,392,180,392,180,392,182,391,183,392,185,393,188,393,189,394,191,396", "26"),
			new oArea("182,428,184,432,186,437,179,438,174,438,171,439,169,440,166,440,164,440,160,446,159,440,157,436,157,434,155,432,155,430,150,428,150,425,146,420,133,405,137,397,153,407,160,410,164,411,166,414,169,416,171,417,175,417,176,420,177,423,180,425", "29"),
			new oArea("149,435,147,439,142,441,140,444,139,447,133,444,131,444,129,444,128,443,126,443,124,443,120,444,118,442,107,444,105,439,105,435,110,432,112,428,111,423,114,419,114,410,118,402,125,405,130,412,134,415,138,417,138,424,139,427,143,429,145,432", "9"),
			new oArea("123,450,126,457,125,460,130,465,131,468,124,482,121,488,135,493,138,489,141,479,139,471,134,466,135,451,132,449,124,448", "7"),
			new oArea("94,471,94,472,94,473,95,475,97,479,99,486,95,488,92,491,89,486,86,484,83,483,82,480,80,478,77,477,78,473,77,471,76,468,75,465,73,454,74,449,79,449,83,453,86,454,93,459,96,465,92,466,93,468,94,468,94,469,94,470", "20"),
			new oArea("98,428,97,430,96,432,96,435,98,440,103,455,95,454,88,445,86,445,81,447,80,441,78,438,78,435,78,432,77,430,75,428,74,426,75,423,75,419,81,421,83,421,85,420,86,419,88,417,92,411,98,409,103,411,108,413,104,421,105,425", "17"),
			new oArea("118,389,118,389,119,390,119,390,122,396,120,396,118,396,118,396,116,396,114,396,104,404,100,402,97,398,100,392,102,389,102,386,104,383,103,378,104,374,113,381,116,383,118,386,118,386,118,387,118,388,118,389,118,389,118,389,118,389", "30"),
			new oArea("123,380,118,379,114,375,114,372,111,371,109,368,106,367,103,366,103,364,112,356,116,359,118,356,122,356,123,359,127,361,128,362,127,366,122,370,121,374", "41"),
			new oArea("495,360,496,351,497,336,489,333,483,318,477,292,480,288,479,274,469,268,465,259,471,252,470,245,466,237,470,231,463,226,472,210,496,204,496,192,502,185,522,174,535,165,533,159,534,153,531,145,525,146,520,138,510,136,496,117,502,108,518,125,522,134,525,131,535,135,533,144,536,150,541,149,552,159,559,155,565,155,570,162,575,168,569,194,563,200,564,211,575,200,576,190,592,215,595,225,591,243,584,251,587,265,592,274,590,288,603,310,600,323,610,325,606,329,611,348,607,361,605,377,613,382,608,386,612,393,609,400,602,395,597,400,599,405,591,419,583,417,579,422,570,427,568,440,572,444,567,451,567,460,564,469,560,476,565,482,555,487,545,506,539,511,532,512,525,510,529,503,536,494,532,489,533,481,526,473,514,469,518,462,512,450,517,436,508,428,516,418,504,409,489,404,488,395,498,383,490,379,492,370", "13"),
			new oArea("641,432,641,439,643,443,643,454,638,463,633,473,628,483,620,494,612,487,602,485,594,477,587,483,580,485,563,475,568,472,571,453,577,446,576,438,575,432,584,427,595,426,596,423,596,418,598,414,601,411,605,403,610,406,618,394,614,387,617,380,611,375,610,366,614,358,616,345,613,337,616,328,631,359,634,386,650,381,655,378,662,349,684,363,678,366,681,382,672,383,668,397,655,401,637,419,642,424", "10"),
			new oArea("668,454,666,455,665,456,665,456,664,457,663,458,663,461,662,463,660,467,656,470,648,477,644,498,637,495,624,508,611,509,606,498,585,493,592,483,621,497,628,488,642,468,645,461,646,457,647,454,647,451,648,448,649,445,646,437,646,429,649,415,657,408,666,406,674,393,678,406,684,410,672,435,677,442,671,450,669,453", "89"),
			new oArea("708,450,702,460,695,460,690,466,682,470,678,479,661,495,652,498,646,498,652,488,651,480,661,471,669,459,681,442,678,435,680,431,680,427,683,421,687,416,688,408,681,404,677,390,685,382,682,368,687,372,699,384,706,384,711,402,706,415,708,421,709,428", "90"),
			new oArea("750,293,751,314,751,328,763,325,765,311,769,312,775,321,782,350,782,376,778,373,777,378,778,384,772,396,773,383,770,383,760,389,754,383,760,351,758,342,755,341,749,355,743,357,745,332,740,331,735,318,729,298,736,282,736,271,727,257,724,237,736,225,740,231,750,229,745,254,746,270,747,279", "49"),
			oArea57,
			new oArea("768,443,765,432,766,425,771,420,772,410,772,400,781,383,779,415,774,436", "44"),
			new oArea("224,303,230,303,229,308,233,310,233,314,227,315,228,321,223,328,210,325,206,318,199,314,193,308,189,309,183,308,178,310,175,304,177,299,170,296,163,292,162,286,156,285,154,277,159,276,165,269,173,259,178,258,187,260,188,277,195,285,204,290,210,297,217,297", "36"),
			new oArea("202,323,203,324,220,333,213,335,209,337,205,338,199,334,197,334,195,334,192,336,189,336,188,332,185,331,183,329,181,326,178,323,176,319,181,317,183,314,186,312,190,313,194,316,196,317,196,317,197,318,198,318,199,320,200,320,201,321,201,322", "38"),
			oArea14,
			new oArea("202,378,200,380,195,380,192,385,188,385,184,384,184,377,188,374,186,369,190,367,199,370,199,373", "50"),
			oArea43,
			new oArea("73,439,76,443,76,447,71,448,72,459,69,465,61,463,57,466,52,463,51,451,48,442,53,441,61,446,62,449,57,455,54,453,55,459,58,460,64,453,66,458,67,450,62,444,56,438,53,441,48,442,47,439,42,423,48,429,60,426,60,420,65,422,66,428,73,431", "39"),
			new oArea("100,377,98,379,100,381,97,383,99,387,95,393,93,395,91,393,91,390,87,386,87,381,88,379,82,374,79,371,77,367,77,363,78,361,85,364,88,366,91,369,93,369,95,369,98,372", "8"),
			new oArea("93,347,91,349,94,351,96,352,98,359,101,366,104,369,100,371,95,367,92,367,79,359,80,356,76,348,81,344,90,344", "40"),
			new oArea("128,343,125,350,122,355,118,355,116,357,113,354,113,349,110,345,107,337,112,333,119,336,125,333,128,338", "23"),
			new oArea("126,325,124,331,119,334,112,331,107,335,104,336,100,333,98,331,99,327,101,325,99,322,99,318,102,315,104,319,112,318,118,317", "54"),
			oArea121,
			new oArea("119,301,123,308,119,315,111,317,106,317,102,312,99,316,88,318,87,308,89,300,91,294,99,287,112,301", "21"),
			new oArea("161,292,155,299,153,304,153,309,150,312,145,309,142,309,139,311,130,305,124,307,120,300,113,300,103,288,109,284,112,273,118,277,129,277,134,276,138,273,144,278,156,287,160,288", "46"),
			oArea2,
			oArea109,
			oArea42,
			oArea106,
			new oArea("56,246,59,246,60,242,57,232,52,232,50,224,45,232,53,248", "11"),
			new oArea("302,436,300,437,298,438,298,440,297,441,295,442,294,444,293,454,291,453,288,451,283,452,266,465,280,445,283,440,283,438,269,436,277,433,282,432,284,431,285,428,285,424,288,424,291,426,293,427,295,427,297,427,299,428,300,430,302,432,303,434", "25"),
			new oArea("354,454,340,440,332,434,336,425,348,414,362,406,378,396,388,400,396,415,404,421,408,422,405,425,396,424,388,421,383,416,378,417,373,431,376,437,380,440,377,443,372,447,365,461", "24"),
			new oArea("402,468,402,470,402,473,403,477,402,482,399,484,395,486,392,487,389,486,386,481,384,479,380,479,378,477,373,475,372,471,372,468,373,465,372,460,373,456,376,452,378,447,383,445,386,427,394,429,402,430,410,432,414,441,410,454,403,462,402,466", "15"),
			new oArea("466,465,477,474,475,484,463,488,447,482,442,484,438,486,433,491,429,491,422,493,417,490,417,481,410,480,410,474,409,469,409,465,412,461,418,459,419,456,420,453,422,449,426,448,430,448,432,449,435,450,439,451,441,454,443,456,445,459,453,461", "22"),
			new oArea("490,509,481,516,474,521,467,524,463,528,457,528,453,530,448,530,445,527,442,524,437,525,433,523,432,519,431,515,429,512,428,509,427,505,425,500,430,498,435,497,438,496,441,492,445,491,448,490,450,494,453,496,456,498,460,499,484,492,489,500", "5"),
			new oArea("507,436,507,448,490,454,481,459,465,454,461,456,454,454,450,454,448,452,445,448,444,446,441,445,438,444,434,442,422,441,419,436,417,430,418,422,422,417,428,413,432,406,436,395,445,397,452,399,460,400,468,402,482,399,484,411,499,414,505,424", "47"),
			new oArea("505,487,509,489,509,491,507,493,506,495,508,503,506,508,501,506,498,505,496,496,495,495,493,494,492,492,491,490,490,489,488,487,485,484,485,481,484,476,483,469,486,464,491,461,496,459,502,458,508,459,506,474,506,479,504,483,504,485,504,486", "12"),
			new oArea("151,358,152,361,151,364,148,366,145,368,141,366,138,366,137,367,136,366,134,364,133,364,132,363,132,361,132,360,131,359,129,358,126,356,128,355,129,353,130,351,131,350,133,349,135,349,137,349,139,348,142,347,144,349,145,351,147,353,149,356", "122"),
			oArea126,
			new oArea("166,345,166,346,164,346,163,346,162,346,162,346,161,347,161,347,161,347,161,347,160,347,157,349,154,350,153,348,151,347,151,345,150,343,151,341,151,338,147,329,153,332,158,335,161,340,161,340,162,341,162,342,163,343,163,344,164,344,164,345", "53"),
			new oArea("186,338,181,341,179,342,175,341,172,344,167,340,164,335,159,330,156,330,157,327,156,322,160,321,166,324,173,327,175,325,177,326,182,333,185,334", "123"),
			new oArea("174,304,178,312,170,318,168,319,166,322,156,319,153,323,150,320,150,314,154,309,155,301,161,294,164,294,169,297,175,300", "51"),
			oArea1,
			new oArea("633,353,627,335,618,325,616,312,606,319,606,300,596,265,606,230,578,190,612,180,607,168,625,164,645,187,644,174,657,157,649,146,623,133,614,124,613,118,628,104,635,101,638,109,632,114,631,126,652,134,672,108,693,108,707,130,706,157,718,173,713,196,718,213,727,223,718,237,721,251,730,275,719,308,735,335,714,363,693,369,687,368,685,360,678,348,674,352,666,344,658,351,654,368,641,381,636,379,635,366,638,355", "45"),
			oArea4,
			new oArea("771,294,775,319,785,337,789,357,794,358,796,336,786,308", "65"),
			oArea59,
			oArea130,
			oArea86
		];
		
		this.appendAreas();
	},
	clickControl: function(bStatus) //    tooltip
	{
//		alert([bStatus,this.sClicked]);
		var oParentContainer = _$(this.sClicked);
		var oTextDiv = oParentContainer.childNodes[0];
		this.oTempTooltipText.innerHTML = oTextDiv.innerHTML;
	}
}

// Renamed due the jQuery compatibility problems
function _$(sId){ return document.getElementById(sId) }

var _bMapStatus = false; // default  

function attachSwitchEvents() //    
{
	var oLinkList = _$('linkList');
	var oLinkMap = _$('linkMap');
	Common.Event.add(oLinkList, 'click', function(){
		Common.Class.remove(_$('Regions'), 'show-map');
		Common.Class.replace(_$('CityList'), 'map-style', 'list-style');
		if(_$('tooltip').region) liDown(_$('tooltip').region); //    region 
		Common.Class.remove(this, 'pseudo-href');
		Common.Class.add(oLinkMap, 'pseudo-href');
		_bMapStatus = false;
		
		var oClicked = _$('clickedTooltip');
		var oOver = _$('overTooltip');
		
		oClicked.innerHTML = '';
		oOver.innerHTML = '';
		
		if (oMap && oMap.oLiClicked) oMap.oLiClicked = false;
		if (oMap && oMap.oCurrentClicked) {
			Common.Class.remove(oMap.oCurrentClicked, 'clicked');
			oMap.oCurrentClicked = false;
		}
	});
	Common.Event.add(oLinkMap, 'click', function(){
		Common.Class.add(_$('Regions'), 'show-map');
		Common.Class.replace(_$('CityList'), 'list-style', 'map-style');
		Common.Class.remove(this, 'pseudo-href');
		Common.Class.add(oLinkList, 'pseudo-href');
		_bMapStatus = true;
	});
}

function liDown(sRemovedRegionId) //    li
{
	if(oMap && _$(sRemovedRegionId)) oMap.moveDown(_$(sRemovedRegionId));
}

function mapLoaded()
{
	attachSwitchEvents()
	new placeHolder('mapSearch', 'поиск')
}

function debug(string)
{
//	_$('debug').innerHTML = string;
}

var Element = {
	
}

var Ast = {
	Element: {
		append: function(oParams)
		{
			if(oParams.sTag) var oElement = document.createElement(oParams.sTag);

			if(oParams.fAction) oParams.fAction(oElement);

			if(oParams.id) oElement.id = oParams.id;
			if(oParams.sHTML) oElement.innerHTML = oParams.sHTML;

			oParams.oTarget.appendChild(oElement);
		}
	}
}
