//******************************************************************************
//            Utilits for work with GoogleMaps API
//                         GNU GPL
//    You can use and modify this script for your own projects
//        your script, based on it, must be on GNU GPL
//
//   Server scripts (ajax requests) not on GNU GPL, but it very easy to write ;)
//
//   I will thanks you, if you tell me about using this script and place link to
//                        http://pprocherk.ru/
//
//    writing by PProcherk for bjdclub.ru
//    used: GoogleMaps API, Yahoo.YUI, JSON
//******************************************************************************
var IsIE = false;
var bjdclubMap__AJAX_PATH = '/map/get/';
bjdclubMap = function (map)
{
    this.map = map;
    this.objects = new Array();
    this.loadCount = 0;
    this.logObj = document.getElementById('map_log');
    this.loadObj = document.getElementById("map_loading");

    this.currentZoom = this.map.getZoom();
    this.viewing = new Array();
    this.loadings = new Array();

    this.usersListener = false;
    this.geocoder = new GClientGeocoder();
}
bjdclubMap.prototype.startUsers = function()
{
    var thisobj = this;
    if(this.usersListener)
    {
    	return true;
    }
    this.usersListener = GEvent.addListener(this.map, "moveend", function() {
        thisobj.onmove();
      });
    this.onmove();
}
bjdclubMap.prototype.removeUsers = function()
{
	if(this.usersListener)
	{
        GEvent.removeListener(this.usersListener);
        this.usersListener = false;
    }
    this.removeAllMarkers();
}
bjdclubMap.prototype.onmove = function()
{
    var z = this.map.getZoom();
    //сменили zoom
    if(z != this.currentZoom)
    {
    	this.removeAllMarkers();
    	this.viewing[this.currentZoom] = new Array();
        this.currentZoom = this.map.getZoom();
        var i;
        for(i in this.objects[z])
        {
        	this.addMarker(this.objects[z][i], z, i);
        }
    }
    var b = this.map.getBounds();

    var sw = b.getSouthWest();
    var ne = b.getNorthEast();

    /*
        lat - это height!
        делим на квадраты
        стандартизированные сеткой должны быть!!!
    */
    var kLt, kLg, LtStart, LgStart;
    var point = new Array();

    kLt = this.getLatStep(z);
    kLg = this.getLngStep(z);
    LtStart = this.getLatStartInterval(ne.lat(), kLt) + kLt;
    LgStart = this.getLngStartInterval(sw.lng(), kLg);

    if(!this.objects[z])
    {
        this.objects[z] = new Array();
    }

    point['x'] = LgStart;

    var toLoad = new Array();
    var iToLoad = 0;
    while(point['x'] <= ne.lng())
    {
    	point['y'] = LtStart;
    	while(point['y'] >= sw.lat())
    	{
            if(!this.loadings[point['x']+'_'+point['y']])
            {
              /*проверки кеша*/
    		  if(!this.objects[z][point['x']+'_'+point['y']])
    		  {
    			/*запросы*/
    			//this.loadObjects(point['y'], point['x'], point['y'] - kLt, point['x'] + kLg, z, point['x']+'_'+point['y']);
    			toLoad[iToLoad] = new Array(point['y'], point['x'], point['y'] - kLt, point['x'] + kLg, z, point['x']+'_'+point['y']);
    			this.loadings[z + '_' + point['x']+'_'+point['y']] = 1;
    			iToLoad ++;
    		  }
    		  else
    		  {
    			/*из кеша*/
    			this.addMarker(this.objects[z][point['x']+'_'+point['y']], z, point['x']+'_'+point['y']);
    		  }
    		}
    		else
    		{
    			//уже загружается, пропускаем.
    		}
    		point['y'] -= kLt;
    	}
    	point['x'] += kLg;
    }
    //объединяем запросы, для уменьшения трафика и времени
    if(iToLoad)
    {
        this.loadObjectsGroup(toLoad);
    }
}
bjdclubMap.prototype.loadObjects = function(lt1, lg1, lt2, lg2, zoom, cacheKey)
{
    var req = bjdclubMapGetHTTPRequestObject();
    var thisobj = this;
    var DateObj = new Date();
    page = bjdclubMap__AJAX_PATH + "?get=rectangle&lt1=" + lt1 +
    "&lg1=" + lg1 +
    "&lt2=" + lt2 +
    "&lg2=" + lg2 +
    "&zoom=" + zoom +
    "&time=" + DateObj.getTime();

    req.open("GET", page, true);
    req.onreadystatechange = function()
    {
        if(req.readyState == 4)
        {
            thisobj.onloadObjects(req, zoom, cacheKey);
        }
    };
    req.send(null);
    if (this.loadCount < 1)
	{
		this.viewLoading();
	}
    this.loadCount ++;
}
bjdclubMap.prototype.loadObjectsGroup = function(groups)
{
	var params, ip, jp;
    var req = bjdclubMapGetHTTPRequestObject();
    var thisobj = this;
    var DateObj = new Date();
    page = bjdclubMap__AJAX_PATH + "?get=rectangleGroups&time=" + DateObj.getTime();

    params = '';
    for (ip in groups)
    {
    	params += 'g' + ip + '=';
    	for (jp in groups[ip])
    	{
    		params += groups[ip][jp] + ';';
    	}
    	params += '&';
    }

    req.open("POST", page, true);
    req.onreadystatechange = function()
    {
        if(req.readyState == 4)
        {
            thisobj.onloadObjectsGroup(req);
        }
    };
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send(params);
    this.viewLoading();
}
bjdclubMap.prototype.onloadObjects = function(req, zoom, cacheKey)
{
	this.loadCount --;
	if (this.loadCount < 1)
	{
		this.hideLoading();
	}

	try
	{
		if(!this.objects[zoom])
		{
			this.objects[zoom] = new Array();
		}
		this.objects[zoom][cacheKey] = 1;
		var res = bjdclubMapParseXML(req.responseXML.documentElement);
		if(res)
		{
			this.objects[zoom][cacheKey] = res;
			this.loadings[zoom + '_' + cacheKey] = 0;
			this.addMarker(res, zoom, cacheKey);
		}
	}
	catch(e){}
}
bjdclubMap.prototype.onloadObjectsGroup = function(req, zoom, cacheKey)
{
    this.hideLoading();
    var zoom, cacheKey, iRes;
	try
	{
		var res = bjdclubMapParseXML(req.responseXML.documentElement);
		if(res)
		{
			for(iRes in res['group'])
			{
				zoom = res['group'][iRes]['zoom'];
				cacheKey = res['group'][iRes]['cacheKey'];
	    	    if(!this.objects[zoom])
        		{
	    		    this.objects[zoom] = new Array();
		        }
    	    	this.objects[zoom][cacheKey] = 1;
                this.loadings[zoom + '_' + cacheKey] = 0;
	    		this.objects[zoom][cacheKey] = res['group'][iRes];
    			this.addMarker(res['group'][iRes], zoom, cacheKey);
			}
		}
	}
	catch(e){}
}
bjdclubMap.prototype.addMarker = function(res, zoom, cacheKey)
{
	if(!this.viewing[zoom])
	{
		this.viewing[zoom] = new Array();
	}
	if(!this.viewing[zoom][cacheKey])
	{
		this.viewing[zoom][cacheKey] = 1;
		var point = new GLatLng(res['lt'], res['lg']);
        if(res['count'] == 0)
        {
        	return false;
        }

		if(res['count'] == 1)
		{
			//одиночный маркер
			var marker = new bjdclubMapMarkerUser(res);
			this.map.addOverlay(marker.getMarker(point));
        }
        if(res['count'] > 1)
        {
            //маркер группы
            var marker = new bjdclubMapMarkerGroup(res);
			this.map.addOverlay(marker.getMarker(point));
        }
	}
}
//for change level event
bjdclubMap.prototype.removeAllMarkers = function()
{
	this.map.clearOverlays();
}
//шаг квадратов по lt и lg
bjdclubMap.prototype.getLatStep = function(zoom)
{
    return 180.0 / Math.pow(2, zoom+1);
}
bjdclubMap.prototype.getLngStep = function(zoom)
{
    return 360.0 / Math.pow(2, zoom+1);
}
//ближний край квадрата свеху/слева
bjdclubMap.prototype.getLatStartInterval = function(lat, step)
{
    return (Math.floor(lat / step)) * step;
}
bjdclubMap.prototype.getLngStartInterval = function(lng, step)
{
    return (Math.floor(lng / step)) * step;
}
bjdclubMap.prototype.hideLoading = function(){this.loadObj.style.display = "none";}
bjdclubMap.prototype.viewLoading = function(){this.loadObj.style.display = "block";}
bjdclubMapGetHTTPRequestObject = function()
{
  var xmlHttpReq;
  try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttpReq=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttpReq=new ActiveXObject("Msxml2.XMLHTTP");
    IsIE = true;
    }
  catch (e)
    {
    try
      {
      xmlHttpReq=new ActiveXObject("Microsoft.XMLHTTP");
      IsIE = true;
      }
    catch (e)
      {
      return false;
      }
    }
  }
  return xmlHttpReq;
}
bjdclubMapParseXML = function(xml)
{
	if(xml)
	{
	    var subchildren = xml.childNodes;
		if  (
			((subchildren[0].nodeType == 1) && IsIE) ||
			((subchildren.length > 1) && !IsIE)
			)
		{
			var ret = new Array();
			var j_name = new Array()
			for (var j = 0; j < subchildren.length; j++)
		  	{
			  	if (subchildren[j].childNodes[0])
				{
					if(!ret[subchildren[j].nodeName])
					{
						ret[subchildren[j].nodeName ] = new Array();
						j_name[subchildren[j].nodeName ]=0;
					}
					var str = new String();
					ret[subchildren[j].nodeName][j_name[subchildren[j].nodeName]] =  bjdclubMapParseXML(subchildren[j]);
					j_name[subchildren[j].nodeName ] ++;
				}
		  	}
		  	return ret;
	  	}
	  	else
	  	{
	  		if (xml.childNodes[0])
			{
				return xml.childNodes[0].nodeValue;
			}
	  	}
	}
	else
	{
		return false;
	}
}
bjdclubMap.prototype.log = function(m)
{
	if(this.logObj)
	{
		this.logObj.innerHTML += '<br>' + m;
	}
}
function bjdclubMapMarker(html, point)
{
	this.html_ = html;
	this.point_ = point;
}
bjdclubMapMarker.prototype = new GOverlay();
bjdclubMapMarker.prototype.initialize = function(map)
{
  var div = document.createElement("div");
  div.style.position = "absolute";
  div.className = 'map_marker';
  this.height_ = 100;
  div.style.height = 100 + 'px';
  div.innerHTML = this.genHTML(this.html_);
  div.onmouseover = function(){div.style.zIndex = 10;}
  div.onmouseout = function(){div.style.zIndex = "";}
  map.getPane(G_MAP_MAP_PANE).appendChild(div);
  this.map_ = map;
  this.div_ = div;
}
bjdclubMapMarker.prototype.remove = function()
{
  this.div_.parentNode.removeChild(this.div_);
}
bjdclubMapMarker.prototype.copy = function()
{
  return new bjdclubMapMarker(this.point_);
}
bjdclubMapMarker.prototype.redraw = function(force)
{
  if (!force) return;
  var c1 = this.map_.fromLatLngToDivPixel(this.point_);
  this.div_.style.left = c1.x + "px";
  this.div_.style.top = (c1.y - this.height_) + "px";
}
bjdclubMapMarker.prototype.genHTML = function(html)
{
	var __html =
	'<table class="marker" cellpadding="0" cellspacing="0" border="0">' +
	'<tr><td width="11px" class="lu"><div>&nbsp;</div></td>'+
	'<td class="u">&nbsp;</td>'+
	'<td width="12px" class="ru"><div>&nbsp;</div></td></tr>' +
	'<tr><td class="l">&nbsp;</td><td class="c" align="center">' +
	html +
	'</td><td class="r">&nbsp;</td></tr>'+
	'<tr><td class="ld">&nbsp;</td>'+
	'<td class="d"><div><span>&nbsp;</span></div></td>'+
	'<td class="rd">&nbsp;</td></tr></table>';
	return __html;
}
bjdclubMapMarkerObject = function()
{
	this.marker = false;
}
bjdclubMapMarkerObject.prototype.getMarker = function (point)
{
	if(!this.marker )
	{
		this.marker = new bjdclubMapMarker(this.html, point);
	}
	return this.marker;
}
bjdclubMapMarkerUser = function(data)
{
	if (!data['user'][0]['color'])
	{
		data['user'][0]['color'] = '3E6689';
	}
	this.html =
	'<div align="center">'+
		'<a href="'+
		data['user'][0]['href']+
		'" style="color:#'+
		data['user'][0]['color']+
		';font-weight:bold;">'+
		'<u>'+
			data['user'][0]['name']+
		'</u><br />';
	if (data['user'][0]['userpic'])
	{
		this.html +=
			'<img style="margin-top:3px;" src="'+
			data['user'][0]['userpic']+
			'" height="40px" alt="" border="0">';
	}
	else
	{
		this.html += '<div style="margin-top:3px;"></div>';
	}
	this.html += '</a></div>';
}
bjdclubMapMarkerUser.prototype = new bjdclubMapMarkerObject();
bjdclubMapMarkerGroup = function(data)
{
	var group = 'bjdclubMapGroups[\'' +data['cacheKey'] +'\']';
  this.html =
  	'<div align="center" class="map_group" id="map_group_' + data['cacheKey']+'">' +
  		'<div>' +
	  		'Группа:<br /><nobr>' +
  			data['count'] + ' ' + this.mans(data['count']) +
	  		'</nobr><br />' +
  			'<a href="#" onclick="'+group+'.open();return false;"><b><u>просмотреть</u></b></a>' +
	  	'</div>' +
	  	'<div style="display:none;">' +
	  		'<div align="right"><a href="#" onclick="'+
	  		group+'.close();return false;" class="group_marker_close">x</a></div>'+
            '<table cellpadding="0" cellspacing="0" border="0" class="group_marker">' +
            '<tr>' +
            	'<td><a href="" onclick="'+group+'.prev();return false;"><img style="visibility:hidden;" src="/static/map/larrow.png" alt="" border="0"></a></td>' +
            	'<td align="center">' +
					'<a style="font-weight:bold;"><u> </u><br />' +
					'<img style="margin-top:3px;" src="/static/map/userload.gif" height="50px" alt="" border="0">' +
					'</a><br />' +
					'<small><b>1 из 1</b></small>' +
	            '</td>' +
            	'<td><a href="" onclick="'+group+'.next();return false;"><img src="/static/map/rarrow.png" alt="" border="0"></a></td>' +
            '</tr>' +
            '</table>'+
	  	'</div>' +
	  	'</div>';
  	bjdclubMapGroups[data['cacheKey']] = new bjdclubMapGroup(data);
}
bjdclubMapMarkerGroup.prototype = new bjdclubMapMarkerObject();
bjdclubMapMarkerGroup.prototype.mans = function(count)
{
	if(count < 20 && count > 10)
	{
		return "человек";
	}
	if
	(
		(count % 10 == 2) ||
		(count % 10 == 3) ||
		(count % 10 == 4)
	)
	{
		return "человека";
	}
	return "человек";
}
bjdclubMapMarkerHTML = function(html)
{
	this.html = html;
}
bjdclubMapMarkerHTML.prototype = new bjdclubMapMarkerObject();
var bjdclubMapGroups = new Array();
bjdclubMapGroup = function(res)
{
	this.res = res;
	this.obj = false;
	this.tr = false;
	this.users = new Array();
	this.loadings = new Array();
	this.count = this.res['count'];
	this.currentUser = 0;
}
bjdclubMapGroup.prototype.open = function()
{
	this.currentUser = 0;
	this.getObj().getElementsByTagName('div')[0].style.display="none";
	this.getObj().getElementsByTagName('div')[1].style.display="block";
	this.setzIndex(20);
	this.showCurrentUser();
}
bjdclubMapGroup.prototype.close = function()
{
	this.setzIndex("");
	this.getObj().getElementsByTagName('div')[0].style.display="block";
	this.getObj().getElementsByTagName('div')[1].style.display="none";
}
bjdclubMapGroup.prototype.getObj = function()
{
	if(!this.obj)
	{
		this.obj = document.getElementById('map_group_' + this.res['cacheKey']);
	}
	return this.obj;
}
bjdclubMapGroup.prototype.getTR = function()
{
	if(!this.tr)
	{
		this.tr = this.getObj().
			getElementsByTagName('div')[1].
			getElementsByTagName('table')[0].
			getElementsByTagName('tbody')[0].
			getElementsByTagName('tr')[0];
	}
	return this.tr;
}
bjdclubMapGroup.prototype.showCurrentUser = function()
{
	this.checkArrows();
	this.checkCounter();
	if(this.users[this.currentUser])
	{
		var user = this.users[this.currentUser];
		if(user['color'])
		{
		    this.setColor(user['color']);
		}
		else
		{
		    this.setColor('3E6689');
		}
		if(user['userpic'])
		{
		    this.setUserpic(user['userpic']);
		}
		else
		{
		    this.setUserpic(false);
		}
		if(user['name'])
		{
		    this.setUsername(user['name']);
		}
		else
		{
		    this.setUsername('');
		}
		this.setHref(user['href']);
	}
	else
	{
		this.load();
	}
}
bjdclubMapGroup.prototype.load = function()
{
    this.setColor('cccccc');
    this.setHref('#');
    this.setUserpic('/static/map/userload.gif');
    this.setUsername('загрузка...');

    if(this.loadings[this.currentUser])
    {
    	return 'waiting response';
    }

    var req = bjdclubMapGetHTTPRequestObject();
    var thisobj = this;
    var DateObj = new Date();
    page = bjdclubMap__AJAX_PATH + "?get=usersGroup&time=" + DateObj.getTime();

    params = 'rect=' + this.res['post'] +
    '&from=' + this.currentUser;

    req.open("POST", page, true);
    req.onreadystatechange = function()
    {
        if(req.readyState == 4)
        {
            thisobj.onLoad(req);
        }
    };
    req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    req.send(params);
    this.loadings[this.currentUser] = 1;
}
bjdclubMapGroup.prototype.onLoad = function(req)
{
    var res = bjdclubMapParseXML(req.responseXML.documentElement);
    this.users[res['from']] = res;
    this.loadings[res['from']] = 0;
    if(res['from'] == this.currentUser)
    {
    	this.showCurrentUser();
    }
}
bjdclubMapGroup.prototype.next = function()
{
	if(this.currentUser < (this.count-1))
	{
		this.currentUser ++;
	}
	else
	{
		this.currentUser = this.count-1;
	}
	this.showCurrentUser();
}
bjdclubMapGroup.prototype.prev = function()
{
	if(this.currentUser > 0)
	{
		this.currentUser --;
	}
	else
	{
		this.currentUser = 0;
	}
	this.showCurrentUser();
}
//проверка счетчика
bjdclubMapGroup.prototype.checkCounter = function()
{
	this.getTR().getElementsByTagName('td')[1].
		getElementsByTagName('small')[0].
		getElementsByTagName('b')[0].innerHTML =
		(this.currentUser + 1) + ' из ' + this.count;
}
//проверка стрелок
bjdclubMapGroup.prototype.checkArrows = function()
{
	var left = this.getTR().getElementsByTagName('td')[0].
		getElementsByTagName('a')[0].
		getElementsByTagName('img')[0];
	var right = this.getTR().getElementsByTagName('td')[2].
		getElementsByTagName('a')[0].
		getElementsByTagName('img')[0];

	if(this.currentUser == 0)
	{
		left.style.visibility = "hidden";
	}
	else
	{
		left.style.visibility = "visible";
	}
	if(this.currentUser < (this.count-1))
	{
		right.style.visibility = "visible";
	}
	else
	{
		right.style.visibility = "hidden";
	}
}
bjdclubMapGroup.prototype.setzIndex = function(zIndex)
{
	this.getObj().parentNode.
		parentNode.
		parentNode.
		parentNode.
		parentNode.style.zIndex = zIndex;
}
bjdclubMapGroup.prototype.setColor = function(color)
{
	this.getTR().getElementsByTagName('td')[1].
		getElementsByTagName('a')[0].style.color = color;
}
bjdclubMapGroup.prototype.setHref = function(href)
{
	this.getTR().getElementsByTagName('td')[1].
		getElementsByTagName('a')[0].href = href;
}
bjdclubMapGroup.prototype.setUserpic = function(userpic)
{
	if(userpic)
	{
    	this.getTR().getElementsByTagName('td')[1].
	    	getElementsByTagName('a')[0].
    		getElementsByTagName('img')[0].src = userpic;
	    this.getTR().getElementsByTagName('td')[1].
		    getElementsByTagName('a')[0].
    		getElementsByTagName('img')[0].style.display = "";
	}
	else
	{
	    this.getTR().getElementsByTagName('td')[1].
		    getElementsByTagName('a')[0].
    		getElementsByTagName('img')[0].style.display = "none";
	}
}
bjdclubMapGroup.prototype.setUsername = function(username)
{
	this.getTR().getElementsByTagName('td')[1].
		getElementsByTagName('a')[0].
		getElementsByTagName('u')[0].innerHTML = username
}

  	function DDPoint(id, map, conf)
  	{
  		this.id = id;
  		this.obj = document.getElementById(id);
  		this.dd = false;
  		this.conf = conf;
  		this.map = map;
  		this.isMoveMarkerEvent = false;
  		this.isSetEvent = false;

		this.icon = new GIcon(G_DEFAULT_ICON);
		this.icon.image = this.conf.src;
		this.icon.iconAnchor = new GPoint(this.conf.width/2, this.conf.height);
		this.icon.imageMap = new Array(0,0, this.conf.width,0,this.conf.width, this.conf.height, 0, this.conf.height, 0,0);
		this.icon.iconSize = new GSize(this.conf.width, this.conf.height);
		this.icon.shadowSize = new GSize(this.conf.sw, this.conf.sh);
		this.icon.shadow = this.conf.shadow;
  	}
  	DDPoint.prototype.init = function()
  	{
  		this.obj.innerHTML = "<img src='"+this.conf.src+"'>";
  		this.dd = new YAHOO.util.DD(this.id);
  		var ddp = this;
	    this.dd.on('endDragEvent', function(ev)
	    	{
	    		var dx = ddp.map.getContainer().parentNode.offsetLeft;
	    		var dy = ddp.map.getContainer().parentNode.offsetTop - ddp.conf.height;
	    		var point = new GPoint(ddp.dd.lastPageX - dx, ddp.dd.lastPageY - dy);
	    		var ltlgpoint = ddp.map.fromContainerPixelToLatLng(point);
	    		ddp.setIcon(ltlgpoint);
			}, ddp, true);
  	}
  	DDPoint.prototype.setIcon = function(ltlgpoint)
  	{
  		this.marker = new GMarker(ltlgpoint, {icon: this.icon, draggable: true});
  		this.map.addOverlay(this.marker);

  		var ddp = this;
  		GEvent.addListener(this.marker, "dragend", function()
  		{
		    ddp.map.setCenter(ddp.marker.getPoint());
		 	if(ddp.isMoveMarkerEvent)
	 		{
                ddp.MoveMarkerEvent();
	 		}
		});

  		this.dd = false;
  		this.obj.style.display='none';
  		this.map.setCenter(ltlgpoint);

  		if(this.isSetEvent)
  		{
  			this.setEventFunc();
  		}
  		if(this.isMoveMarkerEvent)
 		{
 			this.MoveMarkerEvent();
 		}
  	}
  	DDPoint.prototype.setEvent = function(f)
  	{
  		this.isSetEvent =true;
  		this.setEventFunc = f;
  	}
  	DDPoint.prototype.setEventMoveMarker = function(f)
  	{
  		this.isMoveMarkerEvent =true;
  		this.MoveMarkerEvent = f;
  	}

bjdclubMap.prototype.startUserPlacing = function()
{
    this.setUserObj = document.getElementById("map_setuser");
    this.setUserObj.style.display = "block";
    var iconConf = {"src":"/static/map/icons/man.png","shadow":"/static/map/icons/man.shadow.png", "sw":59, "sh":32, "width":32, "height":32};
    this.UserMarkerDD = new DDPoint("userPoint", this.map, iconConf);
    this.UserMarkerDD.init();

    var markerDD = this.UserMarkerDD;
    var obj = this.setUserObj;
    var thisobj = this;

    this.UserMarkerDD.setEvent(function()
    {
    	obj.getElementsByTagName('div')[0].style.display = "block";
    });
    markerDD.setEventMoveMarker(function()
   	{
   		obj.getElementsByTagName('div')[0].
        	getElementsByTagName('b')[0].innerHTML =
        	    '<img src="/static/map/userload.gif" width="20px" alt="" border="0">';
   		thisobj.geocoder.getLocations(markerDD.marker.getLatLng(), function(response)
   		{
   			var formDivInputs = obj.getElementsByTagName('div')[0].
                    	    getElementsByTagName('form')[0].
    	                    getElementsByTagName('div')[0].
    	                    getElementsByTagName('input');

   			if (!response || response.Status.code != 200)
   			{
   			    obj.getElementsByTagName('div')[0].
        	        getElementsByTagName('b')[0].innerHTML = '<span style="color:red;">Ошибка! Не удалось получить адрес :(</span>';
            }
            else
            {
   			    obj.getElementsByTagName('div')[0].
        	        getElementsByTagName('b')[0].innerHTML = response.Placemark[0].address;
       	        formDivInputs[4].value = response.Placemark[0].address;//address;
        	}
    	    	formDivInputs[0].onclick = function()
    	    	{
                    obj.getElementsByTagName('div')[0].
                    	getElementsByTagName('form')[0].submit();
    	    	};    	    formDivInputs[1].value = markerDD.marker.getLatLng().lat();//lat
    	    formDivInputs[2].value = markerDD.marker.getLatLng().lng();//lng
    	    formDivInputs[3].value = thisobj.map.getZoom();//zoom
    	    formDivInputs[5].value = response.toJSONString();//response;
   		});
   	});
}
bjdclubMap.prototype.endUserPlacing = function()
{
	this.setUserObj.style.display = "none";
}
bjdclubMap.prototype.startTagGenerator = function()
{
    this.setTagObj = document.getElementById("map_gettag");
    this.setTagObj.style.display = "block";
    var iconConf = {"src":"/static/map/icons/purple-pushpin.png","shadow":"/static/map/icons/pushpin_shadow.png", "sw":59, "sh":32, "width":32, "height":32};
    this.TagMarkerDD = new DDPoint("tagPoint", this.map, iconConf);
    this.TagMarkerDD.init();

    var obj = this.setTagObj;
    var markerDD = this.TagMarkerDD;

    var gentag = function()
   	{
   		var text = obj.getElementsByTagName('input')[0].value;
   		var tag =
   		    '[map=@' +
   		    markerDD.marker.getLatLng().lat() + ';' +
   		    markerDD.marker.getLatLng().lng() + ';' +
   		    markerDD.map.getZoom() + ']' +
   		    text +
   		    '[/map]';
   		 obj.getElementsByTagName('b')[0].innerHTML = tag;
   	}
   	this.TagMarkerDD.setEventMoveMarker(gentag);
   	this.TagMarkerDD.setEvent(function()
   	{
       	obj.getElementsByTagName('input')[0].onkeyup = gentag;
   	});
}
bjdclubMap.prototype.endTagGenerator = function()
{
	this.setTagObj.style.display = "none";
}
/*** TAGS ****/
var _tagMapIds = new Array();
var GMapIncluded = false;
function insertGMap(coord, info)
{
	if (GBrowserIsCompatible())
    {
    	var id = 'tagmap_' + _tagMapIds.length;
    	_tagMapIds[_tagMapIds.length] = id
	    document.write("<div id='" + id + "' style='width:400px;height:400px;'></div>");
	    document.write("<div id='search_results_" + id + "' style='display:none;'></div>");
    	var map = new GMap2(document.getElementById(id));
        map.setUIToDefault();
    	if(coord.indexOf('@') === 0)
    	{
    		var coords = coord.replace('@','').split(';');
    		var ltlg = new GLatLng(coords[0], coords[1]);
    		eval ("map.setCenter(new GLatLng("+coords[0]+", "+coords[1]+"), "+coords[2]+");");
    		//map.openInfoWindow(map.getCenter(), document.createTextNode(info));
    		var marker = new bjdclubMapMarkerHTML(info);
			map.addOverlay(marker.getMarker(ltlg));
    	}
    	else
    	{
    		map.setCenter(new GLatLng(55.7568, 37.6127), 8);

    		var options = {
    			            resultList : document.getElementById("search_results_" + id),
							onGenerateMarkerHtmlCallback : function(marker, html, result)
							{
								html.innerHTML = info;
                        		return html;
							}
						};
		  searchcontrol = new google.maps.LocalSearch(options);
		  map.addControl(searchcontrol);
		  searchcontrol.newSearch(coord);
    	}
	}
}