opts={
	marker:"",
	eventCr:false,
	mapDivId:"map",
	map:"",
	pmark:[],
	MapTypes:[],
	__markerClick:"",
	_is_marker:false,
	points:[],
	_opMark:{},
	EvForm:{},
	EvObj:{},
	userId:-1,
	aditattr:[{title:"",ico:""},
	   {title:"Кафе",ico:"signOrange_cafe.png"},
	   {title:"Обменник",ico:"signOrange_exchange.png"},
	   {title:"Кемпинг",ico:"signOrange_kemping.png"},
	   {title:"Отель",ico:"signOrange_motel.png"},
	   {title:"Паркинг",ico:"signOrange_parking.png"},
	   {title:"Сервис авто",ico:"signOrange_service.png"},
	   {title:"220V",ico:"signOrange_220.png"},
	   {title:"Детская площадка",ico:"signOrange_playground.png"},
	   {title:"Магазин",ico:"signOrange_shop.png"},
	   {title:"Место для палаток",ico:"signOrange_tents.png"}],
	chBoxIcons:{ch:"checkboxChecked.png",unch:"checkboxUnChecked.png"},
	modes:["","лето","зима","лето-зима"],
	types:["","кемпинг","паркинг","достопримечательности","гостиницы","кафе","сервис авто","стоянка","стадион","событие"],
	iconDir:"img/map/signs/",
	typesIco:["","camping.png","parking.png","sights.png","hotel.png","cafe.png","auto_services.png","parking2.png","stadium.png","event.png"],
	reqUrl:"tmpl/map/ajmap.php?act=sp",
	tabsTpl:{patterns:{options:"",
	   tabs:['<div style="overflow:auto;height:100%;"><div style="float:right;width:240px;height:180px;" id="photos_<%= id %>"><img alt="<%= title %>" src="<%= cphoto %>" /><a style="display:block;float:left" onclick="MapManager.photoPaginator._pPrev(<%= id %>);return false" rel="prev" href="#">предыдущая</a><div style="float:left;width:90px;">&nbsp;</div><a onclick="MapManager.photoPaginator._pNext(<%= id %>);return false" rel="next" href="#" style="display:block;">следующая</a></div><div class="point_desc"><b><%= title %></b><%= address_tpl %><div class="obj_internat_class"><strong>Международная классификация:</strong> <%= internat_class %></div><div class="obj_type"><strong>Тип:</strong> <%= type %></div><div class="obj_mode"><strong>Режим работы:</strong> <%= mode %></div><div><%= description %></div><div><%= comment_link %><br /><div class="obj_event" style="display:none">Событий: 0</div><a href="54.php?map_id=<%= id %>" class="obj_event_link">События: <%= event_count %></a></div></div><div style="text-align:right;padding-right:5px;clear:both;min-width:400px"><%= user_link %></div></div>',
	   "<div><%= optins_tpl %></div>"]},tpl:{tabs:[]}},
    blankData:{id:0,title:"",description:"",country:"",city:"",street:"",house:"",zip:"",phone:"",fax:"",email:"",www:""}
};
MapManager={
    _initSearchBox:function(){
        function initialize() {
            if (GBrowserIsCompatible()) {
                opts.map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(70,5)));
            }
        }
        GSearch.setOnLoadCallback(initialize);
    },
	init:function(points) {
	    if (!GBrowserIsCompatible()) {
	    	return;
	    }
	    if(Prototype.Browser.IE){
	        opts.blankData={id:0,title:"''",description:"",country:"''",region:"''",city:"''",street:"''",house:"''",zip:"''",phone:"''",fax:"''",email:"''",www:"''"};
        }
	    opts.tabsTpl.patterns.tabs.each(function(e){opts.tabsTpl.tpl.tabs.push(new Template(e,/(^|.|\r|\n)(\<%=\s*(\w+)\s*%\>)/));});
	    opts.tabsTpl.tpl.options=new Template(opts.tabsTpl.patterns.options,/(^|.|\r|\n)(\<%=\s*(\w+)\s*%\>)/);
        opts.map = new GMap2($(opts.mapDivId));
        opts.map.setCenter(new GLatLng(51, 25), 4);
        opts.map.addControl(new GLargeMapControl());
        opts.map.addControl(this._getControl());
//        this._initSearchBox();
        opts.map.enableScrollWheelZoom();
        opts.map.disableDoubleClickZoom();
        GEvent.addListener(opts.map, "dblclick", function(e,latlang,f) {
            if(opts.userId<1) return;
            if(typeof latlang=="undefined"){
                return;
            }
            MapManager.initEditMarker(latlang);
        });
        if(opts.points.length>0){
            opts.points.each(function(p){
                if(p.event_count==0 && p.type==9){
                    return;
                }
                latlang=new GLatLng(p.latitude*1,p.longitudes*1);
                MapManager.createFixMarker(latlang,p);
            });
        }
        if(window.attachEvent)
			window.attachEvent("onload",onld());
		else if(window.addEventListener)
			window.addEventListener("load",onld(),false);
		else
			window.onload=onld();
			
        //window.onload=
        function onld(){
            if($("map_id")){
                $("map_id").observe("change",function(){
                    s=$("map_id");
                    if(opts.pmark[s.value]){
                        opts.pmark[s.value].openInfoWindowTabsHtml(opts.pmark[s.value].html,{maxWidth:'420'});
                    }
                });
            }else{
                qParams=location.href.toQueryParams();
                if(qParams.obj_id && opts.pmark[qParams.obj_id]){
                	opts.pmark[qParams.obj_id].openInfoWindowTabsHtml(opts.pmark[qParams.obj_id].html,{maxWidth:'420'});
                }
            }
            setTimeout(MapManager.translate,80)
        }
        this.changeFilterType();
	},
	getCookie:function(c_name)
    {
	if (document.cookie.length>0)
      {
      c_start=document.cookie.indexOf(c_name + "=");
      if (c_start!=-1)
        { 
        c_start=c_start + c_name.length+1; 
        c_end=document.cookie.indexOf(";",c_start);
        if (c_end==-1) c_end=document.cookie.length;
		return unescape(document.cookie.substring(c_start,c_end));
        } 
      }
    return "";
    },
    setCookie:function(c_name,value){
        exdate=new Date();
        exdate.setDate(exdate.getDate()+90);
        document.cookie=c_name+ "=" +escape(value)+";expires="+exdate.toGMTString();
    },
	initEditMarker:function(latlang,data){
	    if(!opts._is_marker){
            if(data && typeof data=="object"){
                this.removeMarker();
            }
            opts._is_marker=true;
            defType=1;
            if(opts.eventCr){
                defType=9;
            }
            opts.marker=new GMarker(latlang,{draggable:true,icon:MapManager.createIco(defType)});
            if(data && typeof data=="object"){
                opts.marker.data=data;
                opts.pmark[data.id].hide();
            }
            opts.__markerClick=GEvent.addListener(opts.marker,"click", function(){
                MapManager.openEdit(this);
			});
			opts.map.addOverlay(opts.marker);
			GEvent.addListener(opts.marker,"dragstart", function(){
			    this.opTab=opts.map.getInfoWindow().getSelectedTab();
				this.closeInfoWindow();
			});
			GEvent.addListener(opts.marker,"dragend", function(){
				MapManager.openEdit(this);
			});
			MapManager.openEdit(opts.marker);
        }else{
            if(data && typeof data=="object"){
                if(!opts.marker.data || !opts.marker.data.id || opts.marker.data.id<1){
                    this.removeMarker();
                }else{
                    this.cancelEdit();
                }
                this.initEditMarker(latlang,data);
            }
        	opts.marker.setLatLng(latlang);
        	MapManager.openEdit(opts.marker);
        }
	},
	translate:function(){
	    m=$("map");
        //m.select("div [log='zi']")[0].title="Увеличить";
        //m.select("div [log='zo']")[0].title="Уменьшить";
        
	    /*pan_up=m.select("div [log='pan_up']")[0];
        pan_up.title="Сдвинуть вверх";
        ctrlImg=pan_up.previous().childElements()[0].src;
        
        m.select("div [log='pan_lt']")[0].title="Сдвинуть влево";
        m.select("div [log='pan_rt']")[0].title="Сдвинуть вправо";
        m.select("div [log='pan_down']")[0].title="Сдвинуть вниз";
        m.select("div [log='center_result']")[0].title="Перейти к последнему результату";
        iObj=false;
        iObj=pan_up.getOffsetParent().next(2).childElements()[0];
        if(iObj){
            iObj.title="Передвигайте, для изменения масштаба";
        }
        m.childElements()[2].select("a")[0].update("Условия использования");*/
	},
    _chActType:function (el){
        el.getOffsetParent().childElements().each(function(c){if(c.hasClassName("act")) c.removeClassName("act")});
        el.addClassName("act");
    },
    changeFilterType:function(){
       opts.pmark.each(function(p){
           if(typeof p=="undefined") return;
           if(p.data.type==9) return;
           if($('o_type_'+p.data.type).checked){
               if(p.isHidden()){
                   p.show();
               }
           }else{
               if(!p.isHidden()){
                   p.hide();
                   p.closeInfoWindow();
               }
           }
       });
       oN=0;
       nArr=[];
       opts.types.each(function(e){
           if(e=="" || !$("o_type_"+oN)){
               nArr[oN]=1;
               oN++;
               return;
           }
           if($("o_type_"+oN).checked){
               nArr[oN]=1
           }else{
               nArr[oN]=0;
           }
           oN++;
       });
       MapManager.setCookie('types',nArr.toJSON());
    },
	_getControl:function(){
	    opts.MapTypes=opts.map.getMapTypes();
	    //
    	function CustomTypeControl() {
        }
        CustomTypeControl.prototype = new GControl();
        CustomTypeControl.prototype.initialize = function(map) {
          var container = new Element("ul",{"class":"map_typecontrol"});
          
          var TypeM = new Element("li");
          //TypeM.addClassName("act");
          container.appendChild(TypeM);
          typesList=new Element("ul",{"style":"display:none","id":"typesList","class":"obj_types"});
          if(Prototype.Browser.IE){
              typesList.style.top='20px';
              typesList.style.left='7px';
          }
          objNum=0;
          
		  cook=MapManager.getCookie('types');
		  var ie6='';
		  if (window.navigator.userAgent.indexOf ("MSIE") >= 0){
			   	if(window.navigator.userAgent.substr(window.navigator.userAgent.indexOf("MSIE")+5,3)=='6.0'){
					ie6='1';
				}
		  }
		  
          if(cook!=""){
              cook=cook.evalJSON();
          }
          opts.types.each(function(tEl){
              if(tEl=="" || objNum==9){
                   objNum++;
                   return;
              }
              tLi=new Element('li',{'id':"o_type_li_"+objNum,"style":"display:none"});
              chEl=new Element('input',{'type':'checkbox','id':'o_type_'+objNum,'name':'obj_type['+objNum+']','value':objNum});
              chEl.observe('click',function(){MapManager.changeFilterType()});
              chElLabel=new Element('label',{'for':'o_type_'+objNum});
              chElLabel.appendChild(document.createTextNode(tEl));
              tLi.appendChild(chEl);
              tLi.appendChild(chElLabel);
              typesList.appendChild(tLi);
              if(cook==""){
                  chEl.checked=true;
				  if(ie6=='1'){chEl.setAttribute("checked", true);chEl.defaultChecked=true;}
              }else{
                  if(cook[objNum]==1){
                      chEl.checked=true;
					  if(ie6=='1'){chEl.setAttribute("checked", true);chEl.defaultChecked=true;}
                  }else{
                      //
                  }
              }
              objNum++;
          });
          TypeM.appendChild(document.createTextNode("Ещё..."));
          TypeM.appendChild(typesList);
          GEvent.addDomListener(TypeM, "mouseover", function() {
            if(opts.moreHide){
                clearTimeout(opts.moreHide);
                opts.moreHide=false;
                return;
            }
            $("typesList").show();
          });
          GEvent.addDomListener(TypeM, "mouseout", function() {
            if(!opts.moreHide){
                opts.moreHide=setTimeout('$("typesList").hide();clearTimeout(opts.moreHide);opts.moreHide=false',400);
            }
          });
          var TypeM = new Element("li");
          TypeM.addClassName("act");
          container.appendChild(TypeM);
          TypeM.appendChild(document.createTextNode("Карта"));
          GEvent.addDomListener(TypeM, "click", function() {
            map.setMapType(opts.MapTypes[0]);
            MapManager._chActType(this);
          });
          var TypeS = new Element("li");
          container.appendChild(TypeS);
          TypeS.appendChild(document.createTextNode("Спутник"));
          GEvent.addDomListener(TypeS, "click", function() {
            map.setMapType(opts.MapTypes[1]);
            MapManager._chActType(this);
          });
          var TypeH = new Element("li");
          container.appendChild(TypeH);
          TypeH.appendChild(document.createTextNode("Гибрид"));
          GEvent.addDomListener(TypeH, "click", function() {
            map.setMapType(opts.MapTypes[2]);
            MapManager._chActType(this);
          });
    
          map.getContainer().appendChild(container);
          return container;
        }
        CustomTypeControl.prototype.getDefaultPosition = function() {
          return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 3));
        }
    	//
    	ctrl=new CustomTypeControl();
    	return ctrl;
	},
	createIco:function(data){
	    type=data;
	    if(typeof data=="object"){
	        type=data.type;
	        icoUrl=opts.iconDir+"na_"+opts.typesIco[type];
	        if(data.approved==1){
	           icoUrl=opts.iconDir+opts.typesIco[type];
            }
	    }else{
	        icoUrl=opts.iconDir+"na_"+opts.typesIco[type];
	    }
	    ico=new GIcon(G_DEFAULT_ICON,icoUrl);
        ico.maxHeight=27;
        ico.image=icoUrl;
        if(type==9){
            ico.iconSize=new GSize("20","24");
            ico.shadow=opts.iconDir+"event_shadow.png";
            ico.shadowSize=new GSize(20,24);
            ico.infoWindowAnchor=new GPoint(1, 3);
            ico.iconAnchor=new GPoint(14,38);
            ico.dragCrossAnchor=new GPoint(21,23);
        }else{
            if(typeof data=="object"){
                if(data.event_count>0){
                    ico.image=opts.iconDir+"e_"+opts.typesIco[type];
                    if(data.approved!=1){
                        ico.image=opts.iconDir+"na_e_"+opts.typesIco[type];
                    }
                }
            }
            ico.iconSize=new GSize(60,47);
            ico.shadow=opts.iconDir+"shadow.png";
            ico.shadowSize=new GSize(60,47);
            ico.infoWindowAnchor=new GPoint(32, 6);
            ico.iconAnchor=new GPoint(18,42);
            ico.dragCrossAnchor=new GPoint(7,9);
        }
        //todo: пересчитать карту изображения
        ico.imageMap=[0,0,0,10,0,20,0,30,10,30,20,30,30,30,30,20,39,20,37,10,30,10,30,0,0,0];
        return ico;
	},
	_isEventObj:function(mark){
	    if(!mark.data){
	        return opts.eventCr;
	    }
	    return (mark.data.type==9);
	},
	openEdit:function(mark){
	    edata=opts.blankData;
	    if(mark.data){
	        edata=mark.data;
	        Object.extend(edata,mark.data.address);
	    }
	    if(Object.isUndefined(mark.tabs) || !mark.tabs){
	        if(edata.id && edata.id>0){
                new Ajax.Request("tmpl/map/ajmap.php?act=inits&mid="+edata.id,{asynchronous:false});
            }
	        addr=new Template($("create_point_tpl").select("div.tab2")[0].innerHTML).evaluate(edata);
	        desc=new Template($("create_point_tpl").select("div.tab1")[0].innerHTML).evaluate(edata);
	        tabs=[new GInfoWindowTab("Описание",desc),new GInfoWindowTab("Адрес",addr)];
	        isEvent=this._isEventObj(mark);
            if(!isEvent){
                tabs.push(new GInfoWindowTab("Что есть",this._getAttributeList(edata,true)));
            }
            tabs.push(new GInfoWindowTab("Фото",$("create_point_tpl").select("div.tab4")[0].innerHTML));
            mark.tabs=tabs;
            mark.tabs[1].contentElem=$(mark.tabs[1].contentElem);
            mark.tabs[1].contentElem.select("input[id='gps_appl']")[0].observe("click",function(){MapManager.applGps()});
            opts._opMark=mark;
            mark.tabs[0].contentElem=$(mark.tabs[0].contentElem);
            internatClassEl=mark.tabs[0].contentElem.select("select[name='internat_class']")[0];
            countryEl=typesEl=mark.tabs[0].contentElem.select("select[name='address[country]']")[0];
            typesEl=mark.tabs[0].contentElem.select("select[name='type']")[0];
            modeEl=mark.tabs[0].contentElem.select("select[name='marker_mode']")[0]
            if(mark.data){
                //if event
                if(mark.data.type==9){
                    this._hideLeanE(mark);
                }else{
                    internatClassEl.value=mark.data.internat_class;
                    modeEl.value=mark.data.mode;
                }
                if(countryEl){
                    countryEl.value=mark.data.address.c_id;
                }
                typesEl.value=mark.data.type;
                this._chType(typesEl);
                mark.tabs.each(function(t){
                    sBox=$(t.contentElem).select("div [class='saveBox']")[0];
                    if(!sBox){
                        return;
                    }
                    cBtn=new Element("input",{type:"button",value:"Отменить"});
                    cBtn.observe("click",function(){MapManager.cancelEdit()});
                    sBox.appendChild(cBtn);
                });
            }else{
                if(opts.eventCr){
                    this._hideLeanE(mark)
                    this._chType(typesEl);
                }
            }
            if(isEvent && $("form_add")){
                titleInp=mark.tabs[0].contentElem.select("input[id='marker_title']")[0];
                descInp=mark.tabs[0].contentElem.select("textarea[id='marker_description']")[0];
                tEl=$("form_add").select("input[name='title']")[0];
                dEl=$("form_add").select("textarea[name='short_description']")[0];
                fdEl=$("form_add").select("textarea[name='description']")[0];
                if(tEl && dEl && fdEl){
                    opts.EvForm={title:tEl,desc:dEl,fdesc:fdEl};
                    opts.EvObj.title=titleInp
                    opts.EvObj.desc=descInp;
                    titleInp.value=tEl.value;
                    descInp.value=dEl.value;
                    titleInp.observe("change",function(e){opts.EvForm.title.value=this.value});
                    descInp.observe("change",function(e){
                        if(opts.EvForm.desc.value.length==0 && this.value.length>139){
                            opts.EvForm.desc.value=this.value.truncate(139," ...");
                            opts.EvForm.fdesc.value=this.value;
                            return;
                        }
                        opts.EvForm.fdesc.value=this.value;
                    });
                    tEl.observe("change",function(e){opts.EvObj.title.value=this.value});
                    fdEl.observe("change",function(e){opts.EvObj.desc.value=this.value});
                }
            }
	    }
	    latLang=mark.getLatLng();
	    mark.tabs[1].contentElem.select("input[id='gps_lat']")[0].value=latLang.lat();
	    mark.tabs[1].contentElem.select("input[id='gps_lng']")[0].value=latLang.lng();
        mark.openInfoWindowTabsHtml(mark.tabs,{maxWidth:'420',selectedTab:mark.opTab});
        if(!this._isEventObj(mark)){
            $(mark.tabs[3].contentElem).select("img")[0].src+="&r=r";
        }else{
            $(mark.tabs[2].contentElem).select("img")[0].src+="&r=r";
            mark.tabs.each(function(el){
	            c=$(el.contentElem).select("input[type='submit']");
	            if(c && c[0]){
	                c[0].hide();
	            }
	        });
        }
	},
	_hideLeanE:function(mark){
	    internatClassEl=mark.tabs[0].contentElem.select("select[name='internat_class']")[0];
        typesEl=mark.tabs[0].contentElem.select("select[name='type']")[0];
        modeEl=mark.tabs[0].contentElem.select("select[name='marker_mode']")[0]
	    internatClassEl.hide();
        mark.tabs[0].contentElem.select("label[for='internat_class']")[0].hide();
        typesEl.appendChild(new Element("option",{"value":9}));
        typesEl.value=9;
        typesEl.hide();
        mark.tabs[0].contentElem.select("label[for='type']")[0].hide();
        modeEl.hide();
        mark.tabs[0].contentElem.select("label[for='marker_mode']")[0].hide();
        mark.tabs[1].contentElem=$(mark.tabs[1].contentElem);
        countrySel=mark.tabs[0].contentElem.select("select[name='address[country]']")[0];
        countryC=mark.tabs[1].contentElem.select("td[class='country_c']")[0];
        if(countrySel){
            countrySel.value=$("flag_id").value;
            countrySel.observe("change",function(ev){
                $("flag_id").value=this.value;
            });
            opts.EvObj.countrySel=countrySel;
            $("flag_id").observe("change",function(ev){
                opts.EvObj.countrySel.value=this.value;
            });
        }
	},
	applGps:function(){
	    lat=opts._opMark.tabs[1].contentElem.select("input[id='gps_lat']")[0].value;
	    lng=opts._opMark.tabs[1].contentElem.select("input[id='gps_lng']")[0].value;
	    infoW=opts.map.getInfoWindow();
	    opts._opMark.opTab=infoW.getSelectedTab();
	    opts._opMark.setLatLng(new GLatLng(lat,lng));
	    this.openEdit(opts._opMark);
	},
	cancelEdit:function(){
	    opts._is_marker=false;
	    opts.pmark[opts.marker.data.id].show();
	    opts.map.removeOverlay(opts.marker);
	    opts.marker=false;
	},
	removeMarker:function(){
	    id=0;
	    if(typeof opts.marker.data=="object" && opts.marker.data.id){
	        if(!confirm("Вы действительно желаете удалить этот объект?")) return;
	        id=opts.marker.data.id;
	    }
	    opts._is_marker=false;
	    opts.map.removeOverlay(opts.marker);
	    if(id>0){
	        opts.pmark[opts.marker.id]="";
	        new Ajax.Request("tmpl/map/ajmap.php?act=rmv&point_id="+id);
	    }
	    opts.marker=false;
	},
	_getAddressStr:function(data){
	    if(!data.address) return "";
	    adr=Object.clone(data.address);
	    str="";
	    if(adr.country){
	       str+=adr.country;
	    }
	    if(adr.region){
            if(!str.empty()) str+=", ";
            str+=adr.region+" обл.";
	    }
	    if(adr.city){
            if(!str.empty()) str+=", ";
            str+="г. "+adr.city;
	    }
	    if(adr.street){
	        if(!str.empty()) str+=", ";
            str+="ул. "+adr.street;
	    }
	    if(adr.house){
	        if(!str.empty())str+=" ";
            str+="дом "+adr.house;
	    }
	    if(!str.empty()){
	        str="<div>"+str+"</div>";
	    }
	    str+="<div><strong>Координаты:</strong><br />";
	    str+="Ш:"+data.latitude*1+" Д:"+data.longitudes*1;
	    str+="</div>";
	    if(adr.zip){
	        str+="<div>индекс: "+adr.zip+"</div>";
	    }
	    if(adr.phone){
	        str+="<div>телефон: "+adr.phone+"</div>";
	    }
	    if(adr.fax){
	        str+="<div>факс: "+adr.fax+"</div>";
	    }
	    if(adr.email){
	        str+="<div>e-mail: "+adr.email+"</div>";
	    }
	    if(adr.www){
	        str+="<div>www: <a href='"+adr.www+"' target='_blank' rel='nofollow'>"+adr.www+"</a></div>";
	    }
	    return str;
	},
	_getAttributeList:function(data,edit){
	    listOpts=[];
	    i=0;
	    while(i<opts.aditattr.size()){
	        listOpts.push(i);
	        i++;
	    }
	    if(!edit){
	        listOpts=Object.keys(data.attributes);
	        clcFnc="";
	    }
	    options = new Element("ul",{"class":"signsList"});
	    icoImg=opts.chBoxIcons.ch;
	    listOpts.each(function(i){
	        if(i==0)return;
	        if(opts.aditattr[i]){
	            lEl=new Element("li");
	            ico=new Element("img",{"src":opts.iconDir+opts.aditattr[i].ico,"alt":opts.aditattr[i].title});
	            p=new Element("p");
	            p.update(opts.aditattr[i].title);
	            if(edit && data.attributes && data.attributes[i]){
	                icoImg=opts.chBoxIcons.ch;
	            }else{
	                if(edit)
	                icoImg=opts.chBoxIcons.unch;
	            }
	            chBox=new Element("img",{"class":'chbox',"src":"img/icons/"+icoImg,"alt":""});
	            lEl.appendChild(ico);
	            lEl.appendChild(p);
	            lEl.appendChild(chBox);
	            if(edit){
	                lEl.atrId=i;
	                lEl.setStyle({cursor:"pointer"});
	                lEl.observe("click",function(ev){MapManager.chAttribut(this)});
	            }
	            options.appendChild(lEl);
	        }
        });
        if(!edit) return options;
        dd=new Element("div");
        formEl=new Element("form",{"method":'post',"onsubmit":'MapManager.savePlace();return false',"id":"addPointForm3"});
        dEl=new Element("div",{"class":"addFormCont","style":"display:none"});
        lEl=new Element("div");
        listOpts.each(function(i){
            if(i==0) return;
            chEl=new Element("input",{"type":"checkbox","value":1,"id":"attribute"+i,"name":"attributes["+i+"]"});
            chEl.checked=(edit && data.attributes && data.attributes[i]);
            lEl.appendChild(chEl);
        });
        dEl.appendChild(lEl);
        lEl.hide();
        formEl.appendChild(dEl);
        sBox=new Element("div",{"class":"saveBox"});
        sBtn=new Element("input",{"type":"submit","value":"Сохранить"});
        cBtn=new Element("input",{"type":"button","value":"Удалить"});
        cBtn.observe("click",function(ev){MapManager.removeMarker()});
        sBox.appendChild(sBtn);
        sBox.appendChild(cBtn);
        formEl.appendChild(sBox);
        dd.appendChild(options);
        dd.appendChild(formEl);
        ap=new Element("div",{"class":"add_point"});
        ap.appendChild(dd);
        return ap;
	},
	chAttribut:function(el){
	    ico=el.select("img.chbox")[0];
	    $("attribute"+el.atrId).checked=!$("attribute"+el.atrId).checked;
	    if($("attribute"+el.atrId).checked){
	        ico.src="img/icons/"+opts.chBoxIcons.ch;
	    }else{
	        ico.src="img/icons/"+opts.chBoxIcons.unch;
	    }
	},
	unHTML:function(html) {
        htmlNode = new Element("div");
        htmlNode.innerHTML = html;
        if(htmlNode.innerText)
            return htmlNode.innerText;
        return htmlNode.textContent;
    },
	createFixMarker:function(latlang,data){
	    mark=new GMarker(latlang,{draggable:false,icon:MapManager.createIco(data),title:this.unHTML(data.title)});
	    data.address_tpl=this._getAddressStr(data);
	    data.cphoto='tmpl/map/nophoto.jpg';
	    if((typeof data.photo=="object" || typeof data.photo=="array") && data.photo!=null){
	        data.cphoto="modules/uploads/"+data.photo[0];
	    }
	    data.curPhoto=0;
	    nData=Object.clone(data);
	    nData.type=opts.types[data.type];
	    nData.mode=opts.modes[data.mode];
	    intC="* ";
	    for(i=1;i<data.internat_class;i++){
	        intC+="* ";
	    }
	    nData.internat_class=intC;
	    if(nData.description!=""){
	        nData.description=this.unHTML(nData.description);
	        nData.description=nData.description.truncate(135, '...');
	        nData.description=nData.description.escapeHTML();
	    }
	    if(nData.post_link){
	        nData.description+="<br /><a href='"+nData.post_link+"'>подробнее</a>";
	    }
	    nData.comment_link="";
	    if(nData.comment_count){
	        nData.comment_link="<a href='"+nData.post_link+"#comment'>Отзывы пользователей: "+(nData.comment_count*1)+"</a>";
	    }
	    nData.user_link="";
	    if(nData.userInfo){
	        tmp=new Element("div");
	        if(nData.userInfo.blogUrl && nData.userInfo.blogUrl!=""){
	            userEl=new Element("a",{"href":nData.userInfo.blogUrl});
	       }else{
	           userEl=new Element("span",{"style":"display:inline"});
	       }
	       userEl.update(nData.userInfo.name);
	       tmp.appendChild(userEl);
	       nData.user_link=tmp.innerHTML;
	    }
	    if(!nData.event_count){
	        nData.event_count=0;
	    }
	    mark.data=data;
        mark.html=[new GInfoWindowTab("Общее",opts.tabsTpl.tpl.tabs[0].evaluate(nData))];
        if(mark.data.type!=9 && nData.attributes){
            mark.html.push(new GInfoWindowTab("Что есть",this._getAttributeList(nData,false)));
        }
	    GEvent.addListener(mark,"click", function(){
	                this.openInfoWindowTabsHtml(this.html,{maxWidth:'420'});
	                if($("map_id") && this.data.type!=9){
	                    $("map_id").value=this.data.id;
	                }
	    });
	    mark.html[0].contentElem=$(mark.html[0].contentElem);
	    if(mark.data.type!=9 && nData.event_count<1){
	       mark.html[0].contentElem.select(".obj_event")[0].show();
	       mark.html[0].contentElem.select(".obj_event_link")[0].hide();
	    }
	    if(mark.html[1]){
	        mark.html[1].contentElem=$(mark.html[1].contentElem);
	    }
	    if(data.user==opts.userId && data.approved==0){
	        if(!this._isEventObj(mark)){
	            editBtn=new Element("input",{"type":"button","value":"редактировать"});
    	        editBtn.markId=data.id;
    	        editBtn.observe("click",function(){MapManager.initEditMarker(opts.pmark[this.markId].getLatLng(),opts.pmark[this.markId].data)});
    	        mark.html[0].contentElem.select("div")[0].appendChild(editBtn);
	        }
	    }
	    if(mark.data.type==9){
	        intCl=$(mark.html[0].contentElem).select("div[class='obj_internat_class']");
	        if(intCl[0]){
	            intCl[0].hide();
	        }
	        objType=$(mark.html[0].contentElem).select("div[class='obj_type']");
	        if(objType[0]){
	            objType[0].hide();
	        }
	        objMode=$(mark.html[0].contentElem).select("div[class='obj_mode']");
	        if(objMode[0]){
	            objMode[0].hide();
	        }
	        obj_event_link=$(mark.html[0].contentElem).select("a[class='obj_event_link']");
	        if(obj_event_link[0]){
	            obj_event_link[0].hide();
	        }
	    }
        pDiv=mark.html[0].contentElem.select("div[id='photos_"+data.id+"']")[0];
	    if(pDiv){
	        nbtn=pDiv.select("a")[1];
    	    pbtn=pDiv.select("a")[0];
    	    if((typeof data.photo=="object" || typeof data.photo=="array") && data.photo!=null){
    	        if(data.photo.size()<2){
    	            nbtn.hide();
    	            pbtn.hide();
    	        }else{
        	        if(!data.photo[data.curPhoto-1]){
        	            this.photoPaginator._toggleLink(pbtn,false);
            	    }else{
            	        this.photoPaginator._toggleLink(pbtn,true);
            	    }
            	    if(!data.photo[data.curPhoto+1]){
        	            this.photoPaginator._toggleLink(nbtn,false);
            	    }else{
            	        this.photoPaginator._toggleLink(nbtn,true);
            	    }
    	        }
    	    }else{
    	        nbtn.hide();
                pbtn.hide();
    	    }
	    }
	    if(data.type!=9 && $("o_type_li_"+data.type) && !$("o_type_li_"+data.type).visible()){
	        $("o_type_li_"+data.type).show();
	    }
	    opts.pmark[data.id]=mark;
	    opts.map.addOverlay(mark);
	},
	photoPaginator:{
	    _pNext:function(pid){
    	    if(!opts.pmark[pid]){
    	        return;
    	    }
    	    d=opts.pmark[pid].data;
    	    if(!d.photo[d.curPhoto+1]){
    	        return;
    	    }
    	    pDiv=opts.pmark[pid].html[0].contentElem.select("div[id='photos_"+pid+"']")[0];
    	    if(!pDiv) return;
    	    d.curPhoto++;
    	    pDiv.select("img")[0].src="modules/uploads/"+d.photo[d.curPhoto];
    	    nbtn=pDiv.select("a")[1];
    	    pbtn=pDiv.select("a")[0];
    	    if(nbtn){
    	        if(!d.photo[d.curPhoto-1]){
    	            this._toggleLink(pbtn,false);
        	    }else{
        	        this._toggleLink(pbtn,true);
        	    }
        	    if(!d.photo[d.curPhoto+1]){
    	            this._toggleLink(nbtn,false);
        	    }else{
        	        this._toggleLink(nbtn,true);
        	    }
    	    }
    	},
    	/*
        * специально для говнопроекта 
        */
    	_pPrev:function(pid){
    	    if(!opts.pmark[pid]){
    	        return;
    	    }
    	    d=opts.pmark[pid].data;
    	    if(!d.photo[d.curPhoto-1]){
    	        return;
    	    }
    	    pDiv=opts.pmark[pid].html[0].contentElem.select("div[id='photos_"+pid+"']")[0];
    	    if(!pDiv) return;
    	    d.curPhoto--;
    	    pDiv.select("img")[0].src="modules/uploads/"+d.photo[d.curPhoto];
    	    pbtn=pDiv.select("a")[0];
    	    nbtn=pDiv.select("a")[1];
    	    if(pbtn){
    	        if(!d.photo[d.curPhoto-1]){
    	            this._toggleLink(pbtn,false);
        	    }else{
        	        this._toggleLink(pbtn,true);
        	    }
        	    if(!d.photo[d.curPhoto+1]){
    	            this._toggleLink(nbtn,false);
        	    }else{
        	        this._toggleLink(nbtn,true);
        	    }
    	    }
    	},
    	_toggleLink:function(lnk,on){
    	    if(!on){
    	        lnk.addClassName("noact");
    	        lnk.setStyle({"cursor":"default"});
    	    }else{
    	        lnk.removeClassName("noact");
    	        lnk.setStyle({"cursor":"pointer"});
    	    }
    	}
	},
    savePlace:function(r){
        if(!$("addPointForm1") || !opts.marker || !opts._opMark){
            return;
        }
        if(!r && this._isEventObj(opts._opMark)){
            return;
        }
        if(this._isEventObj(opts._opMark)){
            opts.EvObj.title.removeClassName("validation-failed");
            opts.EvObj.desc.removeClassName("validation-failed");
            err=false;
            if(opts.EvObj.title.value==""){
                opts.EvObj.title.addClassName("validation-failed");
                err=true;
            }
            if(opts.EvObj.desc.value==""){
                opts.EvObj.desc.addClassName("validation-failed");
                err=true;
            }
            if(opts.EvForm.desc.value=="" || opts.EvForm.fdesc.value=="" || opts.EvForm.title.value==""){
                err=true;
            }
            if(err){
                return false;
            }
        }
        form=$("addPointForm1");
        var div=$(form).select("div")[0];
        data=form.serialize()+"&"+$("addPointForm2").serialize();
        if($("addPointForm3")){
            data+="&"+$("addPointForm3").serialize();
        }
        this.__hide(div);
        latlang=opts.marker.getLatLng();
        data+="&lat="+latlang.lat()+"&lang="+latlang.lng();
        asyn=!r;
        new Ajax.Request(opts.reqUrl, {
            asynchronous:asyn,
            encoding:"cp-1251",
            method: 'post',
            postBody:data,
            onComplete:function(r){
                MapManager.__show(div);
                if(r.headerJSON.stat=="ok"){
                    if(typeof opts.marker.data=="object" && opts.marker.data.id){
                        opts.marker.data="";
                    }
                    MapManager.removeMarker();
                    MapManager.createFixMarker(latlang,r.headerJSON.data);
                    opts._opMark=null;
                    if($("mapMsg") && !r.headerJSON.msg.empty()){
                        $("mapMsg").update(r.headerJSON.msg);
                    }
                }
                if($("mapMsg") && !r.headerJSON.msg.empty()){
                   $("mapMsg").update(r.headerJSON.msg);
                   if(r.headerJSON.stat!="ok"){
                       $("mapMsg").addClassName("errorMsg");
                   }else{
                       if($("mapMsg").hasClassName("errorMsg")){
                           $("mapMsg").removeClassName("errorMsg");
                       }
                   }
                   if(!$("mapMsg").visible()){
                       $("mapMsg").show();
                       if(opts.timeOut && opts.timeOut!=""){
                           clearTimeout(opts.timeOut);
                           opts.timeOut="";
                       }
                       opts.timeOut=setTimeout("$('mapMsg').fade({duration:0.5})",5000);
                   }
                   if($("map_id")){
                       nOpt=new Element("option",{"value":r.headerJSON.data.id});
                       nOpt.update(r.headerJSON.data.title+" (не одобрено)");
                       $("map_id").appendChild(nOpt);
                       $("map_id").value=r.headerJSON.data.id;
                   }
                 }
            }});
	},
	_chType:function(el){
	    if(!opts.typesIco[el.value]) return;
	    icoUrl=opts.iconDir+"na_"+opts.typesIco[el.value];
	    if(opts._opMark.data && opts._opMark.data.approved==1){
	        icoUrl=opts.iconDir+opts.typesIco[el.value];
	    }
	    opts._opMark.setImage(icoUrl);
	},
    __show:function(el){
        Effect.Appear(el,{duration:0.3,queue: {position: 'end', scope: 'showhide'}});
    },
    __hide:function(el){
        Effect.Fade(el,{duration:0.5,queue: {position: 'end', scope: 'showhide'}});
    }
};
