//var URL = window.location.href.match(/https?:\/\/.*?\/.*?\//);
//window.location.href.match(/https?:\/\/(.*?\/)+/);

//var baseURL = URL[0];
var baseURL               ='http://www.touristplaces.ru/'

var categories            = new Array();
var created               = false;
var ids                   = new Array();
var parentCategoriesNames = new Array();
var xx=0;
var sum_points=100;
var drag = false;
//var oControl = new GOverviewMapControl();

function doRequest(data, onReady)
{
    var xmlhttp = false;
	document.getElementById('loading').style.display = "block";
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (E) {
            xmlhttp = false;
        }
    }

    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') 
	{
        xmlhttp = new XMLHttpRequest();
    }
    data = data.replace(" ", "+");
    xmlhttp.open("POST", baseURL+'service.php', true);

    xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xmlhttp.onreadystatechange = function() 
	{
        if (xmlhttp.readyState == 4) 
		{
		//	$('JSDebug').innerHTML = onReady + "Parameters(" +data+ ")<br>" + xmlhttp.responseText;
          // alert("Response " + xmlhttp.responseText);
            if(onReady == "getCoordinatesComplete")
			{
				document.getElementById('loading').style.display = "block";
				getCoordinatesComplete(eval(xmlhttp.responseText));
			}
            if(onReady == "insertCategoryComplete") insertCategoryComplete(eval(xmlhttp.responseText));
            if(onReady == "changePointCategoryComplete") changePointCategoryComplete(eval(xmlhttp.responseText));
            if(onReady == "getCategoriesListComplete") getCategoriesListComplete(eval(xmlhttp.responseText));
            if(onReady == "getPositionComplete") getPositionComplete(eval(xmlhttp.responseText));                      
			//document.getElementById('loading').style.display = "none";
        }
    }    
    xmlhttp.send(data);

}

function getNearPoints(northX, northY, southX, southY)
{	
	var categories_ids = getChoosedCategoriesIds();
	if(categories_ids != '')
	{		
		var requestUrl = 'action=getnearpoints&northX='+northX+'&northY='+northY+'&southX='+southX+'&southY='+southY+'&article_title='+article_title+'&categories_id='+categories_ids;
       //window.open(requestUrl, '', '')
        doRequest(requestUrl, 'getCoordinatesComplete');
	}
	else {
		getCoordinatesComplete(null);
	}
}

function insertCategory(category_name, parent_category_id, upload)
{
	JsHttpRequest.query(
            '../service.php',
            {
                'action': 'insertCategory',  
                'category_name': category_name,
                'parent_category_id' : parent_category_id,
                'filename' : upload
            },
            function(result, errors) {
                getCategoriesListComplete(eval(errors));
            },
            false  // do not disable caching
        );
}

function getCategoriesList(action)
{
	var requestUrl = 'action=getCategoriesList';
	doRequest(requestUrl, action);
}

function deleteCategory(form)
{
	var requestUrl = 'action=deleteCategory&category_id='+getCategoryId(form, 'category_id');
	doRequest(requestUrl, 'getCategoriesListComplete');
}

function deleteAllCategories(){
	if(categories != null && categories.length > 0)
	{
		var requestUrl = 'action=deleteAllCategories';
		doRequest(requestUrl, 'getCategoriesListComplete');
	}	
}

function changePointCategory(form)
{
	if(form.id.value != '')
	{
		var category_id = getCategoryId(form, 'category_id');
		mapGuide[form.index.value].category_id = category_id;
		gmarkers[form.index.value].setImage(getImage(category_id, form.index.value));
		var requestUrl = 'action=changePointCategory&point_id=' + form.id.value + '&category_id=' + category_id;		
		doRequest(requestUrl, 'changePointCategoryComplete');
	}
	else 
	{
		alert('Choose point please.');
	}
}

function trim(str)
{
    var s = str.replace(/^(\s)*/, '');
    s = s.replace(/(\s)*$/, '');
    return s;
}

function getParentCategoryName(category_parent_id)
{
	for(var j = 0; j < parentCategoriesNames.length; j++) 
	{	
		if(parentCategoriesNames[j][0] == category_parent_id)
		{
			return parentCategoriesNames[j][3];
		}
	}
	return '';
}

function nameExists(category_name, category_parent_id)
{
	var parent_category_name = getParentCategoryName(category_parent_id);
	if(parent_category_name != 'All categories') category_name = parent_category_name + category_name;
	else if(category_name == 'All categories') return true;
	if(parentCategoriesNames != null){
		for(var i = 0; i < parentCategoriesNames.length; i++)
		{
			if(parentCategoriesNames[i][3]+parentCategoriesNames[i][2] == category_name && parentCategoriesNames[i][1] == category_parent_id){
				return true;
			}
		}
	}
	return false;
}

function getCoordinatesComplete(response)
{
	var myCode, show;
	doSearchPoint();

	for(var i = 0; i < mapGuide.length; i++)
	{
		show = mapGuide[i].always_show;
		if(response != null)
		{
			for(var j = 0; j < response.length; j++)	
			{
				if(mapGuide[i].category_id == response[j].category_id && categoryIdInIds(response[j].category_id))
				{
					show = true;
					break;
				}
			}
		}
		if(!show)
		{
			 map.removeOverlay(gmarkers[i]);
			 xx--;
			 if (xx<0) xx=0;
		}
	}
	if(response != null)
	{
		for(var i = 0; i < response.length; i++)
		{
			if(categoryIdInIds(response[i].category_id))
			{
				var index = isPointExists(response[i].longitude, response[i].latitude);
				if(!index&&(xx<sum_points))
				{
                    var position = mapGuide.length;
                    mapGuide[position] = new guideObject(response[i].id, response[i].article_title, response[i].map_description, response[i].article_title, response[i].longitude, response[i].latitude, response[i].category_id, false, response[i].tumb);
					var marker = createMarker(position, '/i/icong.png');
       	 			map.addOverlay(marker);
					xx++;
//					if (xx==sum_points) alert('Видимая область карты показывает показывает только 100 точек, для того чтобы увидеть остальные пожалуйста, увеличьте карту или выберитете меньше категорий');
				}
				else 
				{
				if (xx<sum_points) 
					{
					map.addOverlay(gmarkers[index]); 
					xx++; 
//					if (xx==sum_points) alert('Видимая область карты показывает показывает только 100 точек, для того чтобы увидеть остальные пожалуйста, увеличьте карту или выберитете меньше категорий');
					}
				
				}
			}
        }
	}	
	document.getElementById('loading').style.display = "none";
}

function getImage(category_id, index)
{
	var icon = '';
	if(category_id != 0){
		for(var i = 0; i < categories.length; i++)
		{
			if(categories[i].id == category_id)
			{
				icon = categories[i].icon;
				break;
			}
		}
	}
 return icon == '' ? (mapGuide[index].always_show ? '/i/marker.png' : '/i/icong.png') : icon;
}

function categoryIdInIds(category_id)
{
	var categoriesIds = category_id != '' ? category_id.split(',') : new Array(categories[0].id);
	for(var i = 0; i < categoriesIds.length; i++)
	{
		for(var j = 0; j < ids.length; j++)
		{
			if(ids[j] == categoriesIds[i]) return true;
		}		
	}
	return false;
}

function insertCategoryComplete(list)
{
	var /*selectObject = document.forms['categoryForm'].elements['category_id'], selectObject2 = document.forms['pointCategoryForm'].elements['category_id'], position, nextposition = 0,*/ rememberposition;
    /*selectObject.length = 0;
    selectObject2.length = 0;*/
	categories = list;	
	/*selectObject.options[selectObject.length] = new Option('All categories', categories[0].id);
	selectObject2.options[selectObject2.length] = new Option('All categories', 'ALL');*/
	clearTree();
	CreateType('Folder', '/i/folder');
	CreateNode(-1, 0, 'open', 'Все категории' , '', '', 'ALL');
	if(categories != null)
	{
	        echoNode(1, categories.length, 0);
	        WriteMenu(0, 0, 'sidebar', 0);
	}

	/*update points*/
	if(!created)
	{
		getNear();
		makeMap();
	}
	/*update points*/


}

function getCategoriesListComplete(list)
{
	var selectObject = document.forms['categoryForm'].elements['category_id'];
    	selectObject.length = 0;
	parentCategoriesNames = new Array();
	categories = list;	
	selectObject.options[selectObject.length] = new Option('All categories', 'ALL');	
	if(categories != null)
	{
		echoOption(selectObject, 1, categories.length, 0, '', 0);		
	}	
}

function echoNode(start, end, level)
{
	var child_count, clevel/*selectObject = document.forms['categoryForm'].elements['category_id'], selectObject2 = document.forms['pointCategoryForm'].elements['category_id']*/;
	if(end <= categories.length)
	{
		for(var i = start; i < end; i++)
		{
			child_count = (categories[i].right_key - categories[i].left_key - 1)/2;	

			CreateNode(level, 0, categories[i].state, categories[i].name, '', categories[i].icon, categories[i].id, categories[i].checked);	

			/*selectObject.options[selectObject.length] = new Option(oname + categories[i].name, categories[i].id);			
			selectObject2.options[selectObject2.length] = new Option(oname + categories[i].name, categories[i].id);*/
			if(child_count > 0) i = echoNode(i + 1, i + 1 + child_count, i);
		}
		return end-1;
	}
	return start-1;
}

function echoOption(selectObject, start, end, level, oname, parent_id)
{
	var child_count;
	if(end <= categories.length)
	{
		for(var i = start; i < end; i++)
		{
			child_count = (categories[i].right_key - categories[i].left_key - 1)/2;		
			
		selectObject.options[selectObject.length] = new Option(oname + categories[i].name, categories[i].id);
		parentCategoriesNames[parentCategoriesNames.length] = new Array(categories[i].id, parent_id, categories[i].name, oname); 	
			if(child_count > 0) i = echoOption(selectObject, i + 1, i + 1 + child_count, i, oname + '-->', categories[i].id);
		}
		return end-1;
	}
	return start-1;
}

function getNear()
{
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	getNearPoints(northEast.x, northEast.y, southWest.x, southWest.y);
}

function setTreeChecked()
{
    var categorieschoosedid = getChoosedCategoriesIds();
   	var categoriesopenedid = getOpenedCategoriesIds();
	var requestUrl = 'action=settreechecked&categorieschoosedid='+categorieschoosedid+'&categoriesopenedid='+categoriesopenedid;
	doRequest(requestUrl, '');
	document.getElementById('loading').style.display = "none";
}

function setPointCategory(index)
{
	document.location.href = '#point';
	document.forms['pointCategoryForm'].id.value = mapGuide[index].id;
	document.forms['pointCategoryForm'].index.value = index;
	var selected, selectObject = document.forms['pointCategoryForm'].elements['category_id'];
	for(var i = 0; i < selectObject.length; i++)
	{
		selectObject[i].selected = selectObject[i].value == mapGuide[index].category_id;
	}
}

function changePointCategoryComplete()
{
	alert('Change category complete');
}

function isPointExists(lon, lat)
{
	for(var i = 0; i < mapGuide.length; i++)
	{
		if(mapGuide[i].lonG == lon && mapGuide[i].laT == lat)
		{
			return i;
		}
	}
	return false;
}

function checkDeleteCategory(form)
{
	if(categories != null && categories.length > 0)
	{
		if(getCategoryId(form, 'category_id') == 0)
		{
			alert('Please select category from list.');
			return false;
		}
		deleteCategory(form);
		return true;
	}
}

function getCategoryId(form, element_name)
{
	var selectObj = form.elements[element_name];
	for(var i = 0; i < selectObj.length; i++)
	{
		if(selectObj.options[i].selected)
		{
			return selectObj.options[i].value;
		}
	}
	return 0;
}

function checkCategoryName(form)
{
	var category_name = trim(form.category_name.value);
	var category_parent_id = getCategoryId(form, 'category_id');
	if(category_name == '')
	{
		alert('Enter category name.');
		return false;
	}
	else if(nameExists(category_name, category_parent_id))
	{
		alert('Category ' + category_name + ' already exists.');
		return false;
	}
	insertCategory(category_name, category_parent_id, document.getElementById('upload_element'));
	return true;
}

function getChoosedCategoriesIds()
{
	var first = true, categories_ids = '';
	ids = new Array();	
	for(var i = 0; i < nav_tree.length; i++)
	{
		if(nav_tree[i].checked != '')
		{
			if(!first) categories_ids += ',';
			first = false;
			categories_ids += nav_tree[i].category_id;
			ids[ids.length] = nav_tree[i].category_id;
		}
	}	
	return categories_ids;
}

function getOpenedCategoriesIds()
{
	var first = true, categories_ids = '';
	ids = new Array();	
	for(var i = 0; i < nav_tree.length; i++) 
	{
		if(nav_tree[i].state == 'open')
		{
			if(!first) categories_ids += ',';
			first = false;
			categories_ids += nav_tree[i].category_id;
			ids[ids.length] = nav_tree[i].category_id;
		}
	}	
	return categories_ids;
}

function OnMoved()
{
	getNear();
	var center = map.getCenter();
	var x = parseFloat(center.lat());
	var y = parseFloat(center.lng());
	var zoom = parseInt(map.getZoom());

	var obj_type = map.getCurrentMapType(); 

	if (obj_type==G_NORMAL_MAP){
		mtype = "G_NORMAL_MAP";
	}
	else if (obj_type==G_SATELLITE_MAP){
		mtype = "G_SATELLITE_MAP";
	}
	else if (obj_type==G_HYBRID_MAP){
		mtype = "G_HYBRID_MAP";
	}
	setPosition( x, y, zoom, mtype);


}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Google Api Map Code

	var gmarkers = [];
	var points   = [];
	var htmls    = [];
	var k        = 0;
	var markersGlobal        = new Array();
	var mapAreas             = new Array(); 
	var areaMarkers          = new Array(); 
	var areaHash             = new Array(); 
	var areaCategories       = new Array(); 
	var areaPolygon          = new Array(); 
	var areaNames            = new Array(); 
	var currentArea          = new Array(); 
	var currentAreaMarkers   = new Array();
	var mapStreets           = new Array(); 
	var streetMarkers        = new Array(); 
	var streetHash           = new Array(); 
	var streetCategories     = new Array(); 
	var streetPolyline       = new Array(); 
	var streetNames          = new Array(); 
	var currentStreet        = new Array(); 
	var currentStreetMarkers = new Array();
	var mapGuide             = new Array();
	//mapGuide[0] = new guideObject(0, '', 'Default point', 'http://www.touristplaces.com', '-3.16', '47.75', 0, true);
	//var resPoint = new GPoint(parseFloat(mapGuide[0].lonG), parseFloat(mapGuide[0].laT));
	var article_title        = '';

if (typeof(map) == 'object') baseIcon = new GIcon();
if (typeof(map) == 'object') bsIcon   = new GIcon();
	var map;// = new GMap();

function MapLoad(CanAdd)
{
	map = new GMap2(document.getElementById("map"));

	map.addControl(oControl);
	map.addControl(new GLargeMapControl());
    map.addControl(new GMapTypeControl());
/*
	var lsc = new google.maps.LocalSearch();
	var options = 
	{
		resultList : document.getElementById("Gresults")
	};
	map.addControl(new google.maps.LocalSearch(options));
*/
	gLocalSearch = new GlocalSearch();
	gLocalSearch.setSearchCompleteCallback(null, OnLocalSearch);

	getPosition();

	baseIcon = new GIcon();
	bsIcon = new GIcon();


	baseIcon.shadow = "";
	baseIcon.iconSize         = new GSize(22, 16);
	baseIcon.shadowSize       = new GSize(37, 34);
	baseIcon.iconAnchor       = new GPoint(11, 8);
	baseIcon.infoWindowAnchor = new GPoint(9, 2);
	baseIcon.infoShadowAnchor = new GPoint(18, 25);

	// zoom show this icon by click
	bsIcon.shadow = "";
	bsIcon.iconSize         = new GSize(22, 16);
	bsIcon.shadowSize       = new GSize(37, 34);
	bsIcon.iconAnchor       = new GPoint(11, 8);
	bsIcon.infoWindowAnchor = new GPoint(9, 2);
	bsIcon.infoShadowAnchor = new GPoint(18, 25);

	// click to see where you are
	GEvent.addListener(map, 'click', function(overlay, point) 
	{ 
		if (point) 
		{
			var myCode = "<div class='popupOnMap'>";
			myCode += "<h1>"+getDMS(point.x, point.y)+"</h1>";
			myCode += "<p>";
				if (CanAdd == 1)
				{
					myCode += "<a href='/PointEdit/?Lan=" + point.x + "&Lat=" + point.y + "&zoom=" +parseInt(map.getZoom())+ "' class='title'>Добавить точку</a>";
				}
				if (CanAdd == 0)
				{
					myCode += "Чтобы поставить точку Вы должны быть <a href='/Register' class='title' >зарегистрированы</a><br />";
				}

			myCode += "</p>";
			myCode += "</div>";

			var icon = new GIcon(bsIcon);
			//icon.image = "/i/click.png";
			icon.image = "";
			var markerAdd = new GMarker(point, icon);        
				GEvent.addListener(markerAdd, "click", function() 
				{
					markerAdd.openInfoWindowHtml(myCode);
				});  	
			map.addOverlay(markerAdd);
			markerAdd.openInfoWindowHtml(myCode);
		}
	});

	getCategoriesList('insertCategoryComplete');
	GEvent.addListener(map, "moveend", OnMoved );
//	GEvent.addListener(map, "maptypechanged", OnMoved );

}

function guideObject(id, article, description, wiki_link, lonG, laT, category_id, always_show, tumb)
{
	this.id = id;
	this.article = article;
	this.description = description;
	this.wiki_link = wiki_link;
	this.lonG = lonG;
	this.laT = laT;
	this.category_id = category_id;
	this.always_show = always_show;
	this.tumb = tumb;
}

function createMarker(index, defaultIcon) 
{
	created    = true;
	var point  = new GPoint(parseFloat(mapGuide[index].lonG), parseFloat(mapGuide[index].laT));
	var icon   = new GIcon(baseIcon);
	icon.image = getFirstIcon(defaultIcon, index);
//	var marker = new GMarker(point, { icon:icon, draggable: true } );
	var marker = new GMarker(point, { icon:icon } );
//		marker.disableDragging();

	var html   = createHtml(index);
	GEvent.addListener(marker, "click", function() 
	{
		marker.openInfoWindowHtml(html);
//		if (drag == true) marker.enableDragging();
	});

/*
				if (CanAdd == 1)
				{
					GEvent.addListener(marker, "dragstart", function() {map.closeInfoWindow(); });
					GEvent.addListener(marker, "dragend", function() 
					{
						marker.openInfoWindowHtml("<a href='/PointEdit/ID/" + mapGuide[index].id + "&Lat=" + marker.getPoint().lat()+"&Lan=" + marker.getPoint().lng()+ "' class='title'><img src=\"/i/save_f2.png\" alt=\"Сохранить координаты\" title=\"Сохранить координаты\"></a><img src=\"/i/cancel_f2.png\" onclick=\"RemoveCancel(marker,point);\" alt=\"Отмена\" title=\"Отмена\">");
					});

				}
				if (CanAdd == 0)
				{
					GEvent.addListener(marker, "dragend", function() 
					{
						marker.openInfoWindowHtml("Чтобы изменить точку Вы должны быть <a href='/Register' class='title' >зарегистрированы</a>");
					});
				}
	
*/	
	// save the info we need to use later for the sidebar
	gmarkers[index] = marker;
	points[index] = point;
	htmls[index] = html;
	return marker;
}

function Drag()
{
	drag = true;
	alert('Перемещение точки разрешено');
}

function RemoveCancel(marker, Moscow_point)
{
	marker.closeInfoWindow();
	marker.setLatLng(Moscow_point);
}

function createHtml(index)
{
	var myCode = "<div class='popupOnMap'>";
	myCode += "<h1>"+getDMS(mapGuide[index].lonG, mapGuide[index].laT)+"</h1>";
	myCode += "<p>";
	if ( mapGuide[index].tumb )
	{
		myCode += "<div class=\"image\"><IMG  SRC=\""+mapGuide[index].tumb+"\"></div>";
	}
	myCode += "<a href='/PointView/ID/"+mapGuide[index].id+"' class='title' >"+mapGuide[index].article+"</a><br />";
	myCode += ""+mapGuide[index].description+"";
	myCode += "</p>";

	if (CanAdd == 0)
	{
		myCode += "<br>Чтобы изменить точку Вы должны быть <a href='/Register' class='title' >зарегистрированы</a>";
	}

	if (CanAdd == 1)
	{
		myCode += "<a href='/PointEdit/ID/"+mapGuide[index].id+"' class='title' ><img src=\"/i/edit_f2.png\" alt=\"Редактировать\" title=\"Редактировать\" ></a>";
	}

	myCode += "</div>";
    return myCode;
}

function myclick(k) 
{
	map.recenterOrPanToLatLng(points[k]);
	gmarkers[k].openInfoWindowHtml(htmls[k]);
}

function GotoMapPoint(lonG_, laT_, Zoom, PhotoSr, PhotoPointID, PhotoName)
{
	var HtmlCode;
	if (typeof(map) == 'object') 
	{
		if (Zoom!='0') map.setZoom(Zoom);
		map.panTo(new GLatLng(parseFloat(lonG_), parseFloat(laT_)));

//		map.clearOverlays();

		var PointIcon = new GIcon();
		PointIcon.iconSize=new GSize(22,16);
		PointIcon.iconAnchor=new GPoint(11,8);
		PointIcon.infoWindowAnchor=new GPoint(20,0);
		PointIcon.image='/i/icons/7.png';

		Moscow_point = new GLatLng(lonG_,laT_);
		MoscPoint = new GMarker( Moscow_point, {icon:PointIcon, draggable: true} );
			if (CanAdd == 1)
			{	
				GEvent.addListener(MoscPoint, "dragstart", function() {map.closeInfoWindow();});
				GEvent.addListener(MoscPoint, "dragend", function() 
				{
				MoscPoint.openInfoWindowHtml("<a href='/PointEdit/ID/" + PhotoPointID + "&Lat=" + MoscPoint.getPoint().lat()+"&Lan=" + MoscPoint.getPoint().lng()+ "' class='title'><img src=\"/i/save_f2.png\" alt=\"Сохранить координаты\" title=\"Сохранить координаты\"></a><img src=\"/i/cancel_f2.png\" onclick=\"RemoveCancel(MoscPoint,Moscow_point);\" alt=\"Отмена\" title=\"Отмена\">");
				});
				
			}
			if (CanAdd == 0)
			{
				GEvent.addListener(MoscPoint, "dragend", function() 
				{
				MoscPoint.openInfoWindowHtml("Чтобы изменить точку Вы должны быть <a href='/Register' class='title' >зарегистрированы</a>");
				});
			}
			
			
		map.addOverlay(MoscPoint);


		if (CanAdd == 0)
		{
			HtmlCode = "<br>Чтобы изменить точку Вы должны быть <a href='/Register' class='title' >зарегистрированы</a>";
		}
		if (CanAdd == 1)
		{
			HtmlCode = "<a href='/PointEdit/ID/"+PhotoPointID+"' class='title' ><img src=\"/i/edit_f2.png\" alt=\"Редактировать\" title=\"Редактировать\" ></a>";
		}

		GEvent.addListener(MoscPoint, 'click', function(){MoscPoint.openInfoWindowHtml("<div class='popupOnMap'><h1>"+getDMS(laT_,lonG_)+"</h1><p><div class=\"image\"><IMG  SRC=\"/Uploaded/point_photos/index/tumb_"+PhotoSr+"\" style=\"max-height:80px; max-width:120px\"></div><a href='/PointView/ID/"+PhotoPointID+"' class='title' >"+PhotoName+"</a></p>"+HtmlCode+"</div>");});
	}

	if (typeof (map) == 'undefined') document.location.href='/Map/PointID/'+PhotoPointID;

}

function getFirstIcon(defaultIcon, index){
	var categs = mapGuide[index].category_id.split(',');
	if(categs != null && ids.length != null){
		for(var i = 0; i < ids.length; i++)	{
			for(var s = 0; s < categs.length; s++) {
				if(categs[s] == ids[i])	return getImage(ids[i], index);
			}
		}
	}
	
	return defaultIcon;
}

function getDMS(x, y){
	var long = new String(x);
	var latit = new String(y);
	var vars, result, deg, tempma, min, sec, part;	
	//latitud
	vars = latit.split('.');	
	deg = vars[0];
	tempma = '0.'+ vars[1];

	tempma = tempma * 3600;
	min = Math.floor(tempma / 60);
	sec = tempma - (min*60);
	var str = new String(sec);
	sec = str.substr(0, 4);
	part = deg > 0 ? 'N' : 'S';
	deg = deg < 0 ? deg*(-1) : deg;
	
	result = deg + '&deg;' + min + '\'' + sec + '"' + part;
	//long
	vars = long.split('.');		
	deg = vars[0];
	tempma = '0.' + vars[1];

	tempma = tempma * 3600;
	min = Math.floor(tempma / 60);
	sec = tempma - (min*60);
	var str = new String(sec);
	sec = str.substr(0, 4);
	part = deg > 0 ? 'E' : 'W';
	deg = deg < 0 ? deg*(-1) : deg;
	result += ', ' + deg + '&deg;' + min + '\'' + sec + '"' + part;
	return result;
}

function makeMap() 
{
    for (var i = 0; i < mapGuide.length; i++) 
	{
		var point = new GPoint(parseFloat(mapGuide[i].lonG), parseFloat(mapGuide[i].laT));
		var marker = createMarker(i, '/i/marker.png');
		map.addOverlay(marker);
	}
}

function addAreaPoint(point)
{
	var icon = new GIcon(baseIcon);
	var num = currentArea.length+1;
    icon.image = "/i/iconb"+num+".png";
    var marker = new GMarker(point, icon);
  	map.addOverlay(marker);
	alert(point.y);
	currentArea[currentArea.length] = new GLatLng(point.y, point.x);
	markersGlobal[markersGlobal.length] = marker;
	currentAreaMarkers[currentAreaMarkers.length] = marker;
}

function addDBArea(hash, name, category_id)
{
	if(currentArea != null && currentArea.length >= 2)
	{
		mapAreas[mapAreas.length] = currentArea;
		areaNames[areaNames.length] = new Array();
		areaNames[areaNames.length-1].name = name;
		areaNames[areaNames.length-1].category = "";
		areaMarkers[areaMarkers.length] = currentAreaMarkers;
		//draw poligon
		var polygon = new GPolygon(currentArea, "#990000", 1, 1, "#009900", 0.5);
		map.addOverlay(polygon);
		areaPolygon[areaPolygon.length] = polygon;
		areaHash[areaHash.length] = hash;
		areaCategories[areaCategories.length] = category_id;
		currentArea = new Array();
		currentAreaMarkers = new Array();
	}
}

function addStreetPoint(point)
{
	var icon = new GIcon(baseIcon);
	var num = currentStreet.length+1;
    icon.image = "images/icong"+num+".png";
    var marker = new GMarker(point, icon);	
  	map.addOverlay(marker);
	currentStreet[currentStreet.length] = new GLatLng(point.y, point.x);
	markersGlobal[markersGlobal.length] = marker;
	currentStreetMarkers[currentStreetMarkers.length] = marker;
}

function addDBStreet(hash, name, category_id)
{
	if(currentStreet != null && currentStreet.length >= 2)
	{
		mapStreets[mapStreets.length] = currentStreet;
		streetNames[streetNames.length] = new Array();
		streetNames[streetNames.length-1].name = name;
		streetNames[streetNames.length-1].category = "";
		streetMarkers[streetMarkers.length] = currentStreetMarkers;
		//draw street
		var polyline = new GPolyline(currentStreet);
		map.addOverlay(polyline);
		streetPolyline[streetPolyline.length] = polyline;
		streetHash[streetHash.length] = hash;
		streetCategories[streetCategories.length] = category_id;
		currentStreet = new Array();
		currentStreetMarkers = new Array();
	}
}

function getPosition()
{	
		var requestUrl = 'action=getposition';
		// window.open(requestUrl, '', '')
		doRequest(requestUrl, 'getPositionComplete');
}

function getPositionComplete(response)
{	

var HtmlCode;

	if(response != null)
	{
		
		if ((Zoom!='')&&(Zoom!='0')) response[0].zoom=Zoom;

		mtype = G_NORMAL_MAP;
		if (response[0].type=="G_NORMAL_MAP"){
			mtype = G_NORMAL_MAP;
		}
		else if (response[0].type=="G_SATELLITE_MAP"){
			mtype = G_SATELLITE_MAP;
		}
		else if (response[0].type=="G_HYBRID_MAP"){
			mtype = G_HYBRID_MAP; 
		}
		if(!defaultPoint)
		{
			defaultPoint = new GLatLng(parseFloat(response[0].x),parseFloat(response[0].y));
		}
		
		map.setCenter(defaultPoint, parseInt(response[0].zoom), mtype);
		if (Zoom!='')
		{
			var PointIcons = new GIcon();
			PointIcons.iconSize=new GSize(22,16);
			PointIcons.iconAnchor=new GPoint(11,8);
			PointIcons.infoWindowAnchor=new GPoint(20,0);
			PointIcons.image='/i/icons/3.png';
			
			MarkerPoint = new GMarker(defaultPoint, { icon:PointIcons, draggable: true } );
			map.addOverlay(MarkerPoint);
			
			if (CanAdd == 0)
			{
			HtmlCode = "<br>Чтобы изменить точку Вы должны быть <a href='/Register' class='title' >зарегистрированы</a>";
			GEvent.addListener(MarkerPoint, "dragend", function() 
					{
						MarkerPoint.openInfoWindowHtml("Чтобы изменить точку Вы должны быть <a href='/Register' class='title' >зарегистрированы</a>");
					});
			}
			if (CanAdd == 1)
			{
			HtmlCode = "<a href='/PointEdit/ID/"+PhotoPointID+"' class='title' ><img src=\"/i/edit_f2.png\" alt=\"Редактировать\" title=\"Редактировать\" ></a>";
			GEvent.addListener(MarkerPoint, "dragstart", function() {map.closeInfoWindow();});
					GEvent.addListener(MarkerPoint, "dragend", function() 
					{
						MarkerPoint.openInfoWindowHtml("<a href='/PointEdit/ID/" + PhotoPointID + "&Lat=" + MarkerPoint.getPoint().lat()+"&Lan=" + MarkerPoint.getPoint().lng()+ "' class='title'><img src=\"/i/save_f2.png\" alt=\"Сохранить координаты\" title=\"Сохранить координаты\"></a><img src=\"/i/cancel_f2.png\" onclick=\"RemoveCancel(MarkerPoint,defaultPoint);\" alt=\"Отмена\" title=\"Отмена\">");
					});
			}

		GEvent.addListener(MarkerPoint, 'click', function(){MarkerPoint.openInfoWindowHtml("<div class='popupOnMap'><h1>"+getDMS(LonG,LaT)+"</h1><p><div class=\"image\"><IMG  SRC=\"/Uploaded/point_photos/index/tumb_"+PhotoSr+"\" style=\"max-height:80px; max-width:120px\"></div><a href='/PointView/ID/"+PhotoPointID+"' class='title' >"+PhotoName+"</a></p>"+HtmlCode+"</div>");});
		}

		//defaultPoint = null;
	}
}

function setPosition(x, y, zoom, type)
{
	var requestUrl = 'action=setposition&x='+x+'&y='+y+'&zoom='+zoom+'&type='+type;
	doRequest(requestUrl, '');
}

