/* Global Vars */
var gmap;
var gdir;
var gearsgeo;
var typeId;
var tgid;
var newMarkers = [];
var latLngs = [];
var icons = [];
var objGArr = [];
var objVArr = [];
var objPArr = [];
var ggeo;
var staticlink;
var gMarkers = [];
var objVisiArr = [];
var poiMarkers = [];
var gLocSearch;
var gLS;
var gSelectedResults = [];
var gCurrentResults = [];
var gLocResults = [];
var objMarkers = [];
var gFindLAyer;
var gDirLayer;
//var paneltown = 'Ukraine Kiev';
var paneltownSearch = 'Ukraine+Kiev';
var gObjLayer;
var gSearchForm;
var mapType = 'G_NORMAL_MAP';
var gpage;
var gPrevLayer;
var tabset;
var alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
var searchType;
var dpoints = [];
var gSmallIcon = new GIcon();
    gSmallIcon.image = "http://labs.google.com/ridefinder/images/mm_20_yellow.png";
    //gSmallIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    gSmallIcon.iconSize = new GSize(23, 23);
    gSmallIcon.shadowSize = new GSize(22, 20);
    gSmallIcon.iconAnchor = new GPoint(6, 20);
    gSmallIcon.infoWindowAnchor = new GPoint(5, 1);
var gPoiIcon = new GIcon();
    gPoiIcon.image = "http://labs.google.com/ridefinder/images/mm_20_yellow.png";
    //gSmallIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    gPoiIcon.iconSize = new GSize(24, 38);
    gPoiIcon.shadowSize = new GSize(22, 20);
    gPoiIcon.iconAnchor = new GPoint(6, 20);
    gPoiIcon.infoWindowAnchor = new GPoint(5, 1);
    
var pmmIcon = new GIcon(G_DEFAULT_ICON);
    pmmIcon.image = staticHost+'maps/images/arrow.gif';
    pmmIcon.iconSize = new GSize(22,22);
var pmarkOpt = {icon:pmmIcon};
var directionsInfoDiv;
var dirType = G_TRAVEL_MODE_DRIVING;//G_TRAVEL_MODE_WALKING;
var polygon = null;
var AClip = null;
var HClip = null;
var f_point = [];
var searchPoints = [];
var fg_point = [];
var act_name  = 'load';
var firts_name = 'load';
var second_name = 'load';
var mFind = [];
var uroute = [];
var usearch = [];
var uobjects = [];
var ugobjects = [];
var act_page = 0;
var mtravel;
var uni_data = '';
var print = '';
var googeo = null;
var defZoom = 12;


/* Array for decoding the failure codes */
var reasons=[];
reasons[G_GEO_SUCCESS]             = "Success";
reasons[G_GEO_MISSING_ADDRESS]     = "Missing Address: The address was either missing or had no value.";
reasons[G_GEO_UNKNOWN_ADDRESS]     = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
reasons[G_GEO_UNAVAILABLE_ADDRESS] = "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
reasons[G_GEO_BAD_KEY]             = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
reasons[G_GEO_TOO_MANY_QUERIES]    = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
reasons[G_GEO_SERVER_ERROR]        = "Server error: The geocoding request could not be successfully processed.";

/* Map Init */
function init() {
        $('#map_place').height($(window).height()-117).width($(window).width()-2);
        
            if (GBrowserIsCompatible()) {

            //gmap = new GMap2(document.getElementById("map_place"), {size:gmopts});
            gmap = new GMap2(document.getElementById("map_place"));
            gdir = new GDirections(gmap, document.getElementById("dirInfo1"));
            ggeo = new GClientGeocoder();
            directionsInfoDiv = document.getElementById("dirInfo");

            if(myl.length > 4) {
                try {
                    gearsgeo = google.gears.factory.create('beta.geolocation');
                    gearsgeo.getCurrentPosition(updatePosition, setDefaultLocation(),
                                       { enableHighAccuracy: true,
                                         gearsRequestAddress: true } );
                }
                catch(e) {
                    setDefaultLocation();
                }
            } else gmap.setCenter(new GLatLng(48.405717, 31.604248), 6);
            
            // Create contol layers
            //gFindLayer = new GLayer('GoogleFindLAyer');
            //gObjLayer  = new GLayer('GoogleObjectLa   yer');
            //gDirLayer  = new GLayer('GoogleDirectionLAyer');
            //gPrevLayer = gFindLayer;

            //gmap.addOverlay(gFindLayer);
            //gmap.addOverlay(gObjLayer);
            //gmap.addOverlay(gDirLayer);
            //gSearchForm = new GSearchForm(false, document.getElementById('searchform'));
            //gSearchForm.setOnSubmitCallback(null, CaptureForm);
            //gSearchForm.input.focus();

            // Initialize the local searcher
            gLocSearch = new GlocalSearch();
            gLocSearch.setSearchCompleteCallback(null, OnSearch);
            gLocSearch.setResultSetSize(GSearch.LARGE_RESULTSET);
            gLocSearch.setRestriction(GSearch.RESTRICT_TYPE, GlocalSearch.TYPE_BLENDED_RESULT);

            //G_START_ICON.iconSize = new GSize(16,22);
            //G_START_ICON.image = staticHost + 'maps/images/map_marker_num.gif';
            //G_END_ICON.image = staticHost + 'maps/images/map_marker_num.gif';

            //G_END_ICON.image = "";
            //G_END_ICON.shadow = "";
            googeo = new GClientGeocoder();
            
            gLS= new GlocalSearch();
            gLS.setSearchCompleteCallback(null, SetResults);
            gLS.setResultSetSize(GSearch.LARGE_RESULTSET);
            gLS.setRestriction(GSearch.RESTRICT_TYPE, GlocalSearch.TYPE_BLENDED_RESULT);

            bottomRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(2,10));
            
            //gmap.addControl(new GLargeMapControl3D(), bottomRight );
            var TochkaLargeMapControl = new ExtLargeMapControl();
            gmap.addControl(TochkaLargeMapControl, bottomRight);

            //gmap.addControl(new ImageReplaceMapControl());

            //gmap.enableGoogleBar();
            //gmap.setZoom(6);
            //gmap.addControl(new GMapTypeControl());
            gmap.addMapType(G_PHYSICAL_MAP)
            
            //var customUI = gmap.getDefaultUI();
            //customUI.maptypes.hybrid = false;
            //customUI.maptypes.normal = false;
            //customUI.maptypes.physical = false;
            //customUI.maptypes.satellite = false;
            //gmap.setUI(customUI);
            //gmap.setUIToDefault(customUI);

            gmap.enableScrollWheelZoom();
            
//            GEvent.addListener(gmap, "click", function(overlay,latlng) {
//
//            if (latlng) {
//                var myHtml = "The GPoint value is: " + latlng;
//                gmap.openInfoWindow(latlng, myHtml);
//                }
//            });

            GEvent.addListener(gdir, "error", handleErrors);
            GEvent.addListener(gdir, "addoverlay", onGDirectionsAddOverlay);
            GEvent.addListener(gdir, "load", onLoadDirections);

            GEvent.addListener(gmap, "maptypechanged", function(){
                clickButt();
            });

            GEvent.addListener(gmap, "move", function(){
                clickButt();checkFigure();
            });

            //GEvent.addListener(gdir, "load", function(){setTimeout("changeImages(true)",1);});
            //GEvent.addListener(gdir, "addoverlay", function(){setTimeout("changeImages(false)",1);});

            /*
            var ovcontrol = new GOverviewMapControl(new GSize(165,165));
                gmap.addControl(ovcontrol);
                var ovmap = ovcontrol.getOverviewMap();
                GEvent.addListener(gmap, 'maptypechanged', function(){
                        ov_map.setMapType(G_NORMAL_MAP);
                });
            */
            
            CreateUkrRect();
            clickButt();
            
//            var barr = GetCordVisibleMap();
//
//
//            var polyline = new GPolyline(
//                  [
//  		  new GLatLng(barr.maxlat, barr.minlng),
//                  new GLatLng(barr.minlat, barr.maxlng),
//                  ], "#00ff00", 10);
//            gmap.addOverlay(polyline);
            if(have_data && gmap.isLoaded()) {
                SetMapParams();
                }

        }

          

    }

// Set Default Center In Kiev 
function setDefaultLocation() {
    gmap.setCenter(new GLatLng(parseFloat(50.4413265899865), parseFloat(30.47161102294922)), defZoom);
}

// Set Map For My Location
function updatePosition(position) {
  var mypoint = new GLatLng(parseFloat(position.latitude), parseFloat(position.longitude-0.045));
  //var marker = new GMarker(gpoint, gPoiIcon);
  //gmap.addOverlay(marker);
  gmap.setCenter(mypoint, defZoom-1);
}

/* Set Center Map For Initialize */
function SetGCenter(lat, lng, zoom) {
    gmap.setCenter(new GLatLng(lat, lng, zoom));
}

/* Set Zoom Map */
function SetGZoom(zoom) {
    gmap.setZoom(zoom);
}


/* Set Map Type */
function SetGMapType(layer) {
    if(layer == 'normal')   gmap.setMapType(G_NORMAL_MAP);
    if(layer == 'hybrid')   gmap.setMapType(G_HYBRID_MAP);
    if(layer == 'physical') gmap.setMapType(G_PHYSICAL_MAP);
}

/* Check Center In Fugure */
function checkFigure() {
    var status = polygon.getBounds().containsLatLng(gmap.getCenter());
    //var status = true;
    if(status == true) {
        document.getElementById('catalog').style.display = 'block';
        document.getElementById('objLayerg').style.display = 'none';
    }
    else {
        document.getElementById('catalog').style.display = 'none';
        document.getElementById('objLayerg').style.display = 'block';
    }
}

/* Set Custom Icons For GDirection */
function changeImages(func) {
        for (var i=1; i<gdir.getNumRoutes(); i++) {
          gdir.getMarker(i).hide();
          gdir.getMarker(gdir.getNumRoutes()).setImage("http://maps.google.com/intl/en_ALL/mapfiles/marker_greenB.png");
        }

        //if(func) {alert(123);onLoadDirections();}
        //else {alert(321);onGDirectionsAddOverlay();}
      }

/* Google Local Search */
function TochkaSearch() {
    document.getElementById('mt1').className = '';
    document.getElementById('mt2').className = '';
    //document.getElementById('mt3').className = 'current';
    //document.getElementById('search_reg').style.display = 'none';
    document.getElementById('mapsTab1').style.display = 'none';
    document.getElementById('mapsTab2').style.display = 'none';
    document.getElementById('mapsTab3').style.display = 'block';
    //document.getElementById('mapsTabFind').style.display = 'block';
    document.getElementById("pages").innerHTML = '';
    document.getElementById("find_results").innerHTML = '';

    if(second_name == 'objects' || second_name == 'gobjects') { ClearObjMap(); }
    
    CheckActions('search');

    //if(second_name != 'route' && first_name != 'route') { gmap.clearOverlays(); }
    if(second_name == 'search') ResetSearch();
    
    gLS.setCenterPoint(gmap);
    gLS.execute(document.getElementById('searchword').value);
    
}

/* Clear Search */
function ResetSearch() {
    for ( var s = 0 ; s < mFind.length ; s++ ) {
        gmap.removeOverlay(mFind[s]);
    }
    
    if(mFind.length) mFind = [];
}


/* Clear Search */
function ResetAllSearch() {
    for ( var s = 0 ; s < mFind.length ; s++ ) {
        gmap.removeOverlay(mFind[s]);
    }
    $('#left_search_bar').find('input').val('');
    $('#find_results').html('');
    $('#pages').html('');
    $('#find_results').html(info_res);usearch = [];
    if(mFind.length) mFind = [];
}

/* Get LatLng Coordinates From Visible Zone Map */
function GetCordVisibleMap() {
    var sw = gmap.getBounds().getSouthWest();
    var ne = gmap.getBounds().getNorthEast();

    var darr = [];
    darr['maxlat'] = ne.lat();
    darr['minlat'] = sw.lat();
    darr['minlng'] = sw.lng();
    darr['maxlng'] = ne.lng();

    return(darr);
}

/* Set Results */
function SetResults() {
    if (!gLS.results){
      return;
    }
    usearch = [];
    var fPoint;
    var polyPoint = [];
        polyPoint[0] = [];
    var ffIcon = new GIcon(G_DEFAULT_ICON);
        ffIcon.iconSize = new GSize(24,38);
        ffIcon.shadowSize = new GSize(34, 38);
        ffIcon.shadow = staticHost+'maps/images/redShad.png';

    var fOpt = {icon:ffIcon};

    document.getElementById("find_results").innerHTML = '';
    var currpage = 0;
    if(gLS.cursor && gLS.cursor.pages && gLS.cursor.pages.length > 1) {
        var pname = '';
        currpage = gLS.cursor.currentPageIndex;
        document.getElementById("pages").innerHTML = '';
        for(var p = 0; p < gLS.cursor.pages.length; p++) {
            var pnum = gLS.cursor.pages[p].label-1;
            if(currpage != pnum) pname += '<a href="#" onclick="ResetSearch(); Pages('+pnum+');">'+gLS.cursor.pages[p].label+'</a> ';
            else pname += gLS.cursor.pages[p].label+' ';
            document.getElementById("pages").innerHTML = pname;
        }
    }

    if(gLS.results.length==0) document.getElementById("find_results").innerHTML = emptyRes;
    var w = 'world';
    for (var i = 0; i < gLS.results.length; i++) {
      var fnames = '';
      var mTitle = '';
      if(gLS.results[i].streetAddress && gLS.results[i].streetAddress != gLS.results[i].city) fnames += gLS.results[i].streetAddress+', ';
      if(gLS.results[i].city) fnames += gLS.results[i].city+', ';
      if(gLS.results[i].country) fnames += gLS.results[i].country;
      var fnum = i+1+(currpage*8);
      mTitle = gLS.results[i].title;
      var img = staticHost+'maps/images/red'+fnum+'.png';
      ffIcon.image = img;
      fPoint = new GLatLng(gLS.results[i].lat, gLS.results[i].lng);
      polyPoint[0].push(fPoint);

      if(currpage == 0 && i == 0) {
          
          //var fmarker = new GMarker(fPoint, {icon:ffIcon});
          gmap.setCenter(fPoint, 12);
          //var fhtml = "<div class='marker_title'>" + mTitle + "</div><div class='marker_address'>" + fnames + "</div>";
          //gmap.openInfoWindowHtml(fhtml);
          //gmap.addOverlay(fmarker);
      }

      var sm = createFindMarker(fPoint, mTitle, fnames, fOpt, currpage);
      mFind.push(sm);
      usearch.push(new Array(gLS.results[i].lat, gLS.results[i].lng, mTitle, fnames, currpage));

//      var mFind = new GMarker(fPoint, fOpt);
      document.getElementById("find_results").innerHTML += "<a href='#' onclick='Fplace("+i+","+fnum+");'><img src='"+img+"'\/> "+ gLS.results[i].title + "<br /><span class='lighter font_size_90'>"+fnames+"<\/span><br class='clear'\/><\/a>";

//      GEvent.addListener(mFind, "click", function() {
//            mFind.openInfoWindowHtml("<div class='marker_title'>"+ mTitle +"</div><div class='marker_address'>" + fnames + "</div>");
//          });
      gmap.addOverlay(sm);
    }
    //if(gLS.results.length > 1) {zz ? visibleMarkersZone(polyPoint, zz) : visibleMarkersZone(polyPoint)}
}

/* Create Marker Function */
function createFindMarker(point, name, address, iopt, cpage) {
      var smarker = new GMarker(point, iopt);
      var html = "<div class='marker_title'>" + name + "</div><div class='marker_address'>" + address + "</div>";

      GEvent.addListener(smarker, 'click', function() {
        smarker.openInfoWindowHtml(html);
      });

      return smarker;
    }

/* Find Results Pagination */
function Pages(page) {
    gLS.gotoPage(page);
    //gmap.setZoom(10);
    act_page = page;
}

/* Plot a marker after positive response */
function Fplace(res, img) {
    var ob = gLS.results[res];
    var Icon = new GIcon(G_DEFAULT_ICON);
        Icon.iconSize = new GSize(24,38);
        Icon.shadowSize = new GSize(34, 38);
        Icon.shadow = staticHost+'maps/images/redShad.png';
        Icon.image = staticHost+'maps/images/red'+img+'.png';;
        
    var Opt = {icon:Icon};

    var fnm = '';
    if(ob.streetAddress && ob.streetAddress != ob.city) fnm += ob.streetAddress+', ';
    if(ob.city) fnm += ob.city+', ';
    if(ob.country) fnm += ob.country;
    var ft = ob.title;
    var point = new GLatLng(ob.lat,ob.lng);
    var mess = new GLatLng(ob.lat,ob.lng);
    gmap.setCenter(point, 12);
    
    //var mF = new GMarker(point, {icon:fpIcon});
    gmap.openInfoWindowHtml(mess,"<div class='marker_title'>"+ft+"</div><div class='marker_address'>"+fnm+"</div>");
    //gmap.addOverlay(mF);
    //gmap.clearOverlays();
    
    //var mmIcon = new GIcon(G_DEFAULT_ICON);
    //    mmIcon.image = staticHost+'maps/images/map_marker.png';
    //    mmIcon.iconSize = new GSize(39,36);
    //    mmIcon.shadowSize = new GSize(0, 0);

    //var markOpt = {icon:mmIcon};

    //gmap.addOverlay(new GMarker(point, markOpt));
    //changeGMap('find', cntr, lat, lng);
    /* Clear a results after place select */
    //document.getElementById("fresults").innerHTML = "";
}

/* Capture Form Method */
function CaptureForm() {
    gLocSearch.execute(searchForm.input.value);
    return false;
}

/* Control ReLayers */
GMap2.prototype.reLayer = function(layer){
    this.removeOverlay(layer);
    var l = new GLayer();
    this.addOverlay(l);
    return l;
}

/* Control Change Layers */
GMap2.prototype.changeLayer = function(prev,nextLayer){
    prev.hide();
    nextLayer.show();
    prevLayer = nextLayer;
}

/* Control Clear Layers */
GMap2.prototype.clearLayers = function(){
    this.clearOverlays();
}

/* Load Directions with Menu Link */
function onLoadDirections() {
      CheckActions('route');
      var arrlat = [];
      var arrlng = [];
      var status = gdir.getStatus().code;
      var steps = '';
      var html = ''
      directionsInfoDiv.innerHTML = '';

      if(status == 200) {
      
      var numGeoCodes = gdir.getNumGeocodes();
      var startPoint = gdir.getGeocode(0);
      var endPoint = gdir.getGeocode(numGeoCodes-1);
      var numRoutes = gdir.getNumRoutes();
      var cntInput = $('#routes').find('input').size();
      
      //alert('inputs='+cntInput+' points_save='+numGeoCodes);
      if(numGeoCodes != cntInput) {
          var str_p = new Array();
          $('#routes input').each( function() {str_p.push($(this).val());} );
          gdir.loadFromWaypoints(str_p, {'locale':lang_act, 'travelMode':GetDirType()});
          return(false);
      }

      for(var gg=0; gg<numGeoCodes; gg++) {
          gdir.getMarker(gg).getIcon().iconSize = new GSize(24,38);
          gdir.getMarker(gg).getIcon().shadowSize = new GSize(34, 38);
          gdir.getMarker(gg).getIcon().image = staticHost + 'maps/images/red0'+alpha[gg]+'.png';
          gdir.getMarker(gg).getIcon().shadow = staticHost + 'maps/images/redShad.png';
      }

      var summaryHTML = gdir.getSummaryHtml();
    html += '<div class="globalSummaryDiv">';
    html += '<table cellspacing="0" cellpadding="2" width="100%">';
    html += '<tr><td valign="top" colspan="3" class="summary_html"> '+ r_name +'&nbsp;'+ summaryHTML +'</td></tr>';
    //html += '<tr class="abc_tr"><td valign="top"><img src="'+staticHost + 'maps/images/red0'+alpha[0]+'.png'+'"></td><td>' + startPoint.address + '</td></tr>';

      for (var r = 0 ; r < numRoutes ; r++ ) {
        var route = gdir.getRoute(r);
        var startGeoCode = gdir.getGeocode(r);//route.getStartGeocode();
        var endGeoCode = gdir.getGeocode(r+1);//route.getEndGeocode();
        var endLanLng = route.getEndLatLng();
        var routeSummaryHTML = route.getSummaryHtml();
        var routeDistance = route.getDistance();
        var routeDuration = route.getDuration();
        //steps += '<div class="routeSummaryDiv" onclick="toggleSteps('+r+')" title="Click to view steps">';
        //steps += '<table cellspacing="0" cellpadding="2" width="100%">';
        //steps += '<tr>';
        //steps += '<td valign="top"><b>' + startGeoCode.address + '</b> to<br> <b>' + endGeoCode.address + '</b><br>'+routeDistance.html+ ' (' + routeDuration.html +  ')</td>';
        //steps += '</table></div>';
                //if(r > 0 || r < numRoutes ) {
                var stepPoint = gdir.getGeocode(r);
                html += '<tr class="abc_tr stepRow" onclick="showPoint('+r+')"><td valign="top"><img src="'+staticHost + 'maps/images/red0'+alpha[r]+'.png'+'"></td><td>' + stepPoint.address + '</td></tr>';
                
                var numSteps = route.getNumSteps();
        steps = '';
                steps += '<table cellspacing="0" cellpadding="0" id="routeTable_'+r+'" width="100%">';
        for (var s = 0 ; s < numSteps ; s++ ) {
            var step = route.getStep(s);
            var stepLatLng = step.getLatLng();
            var stepPolylineIndex = step.getPolylineIndex();
            var stepDescriptionHTML = step.getDescriptionHtml();
            //var re = new RegExp(pattern,'g');
            //stepDescriptionHTML = stepDescriptionHTML.replace(re,'<b>$1</b>')
            var stepDistance = step.getDistance();
            var stepDuration = step.getDuration();
            steps += '<tr class="stepRow" onclick="showStep('+r+','+s+')"><td>&nbsp;&nbsp;' + (s+1) + '.</td><td> ' + stepDescriptionHTML + '</td><td>' + stepDistance.html + '</td></tr>';
                        
        }
        steps += '</table>';
        html += '<tr><td valign="top" colspan="3"> '+ steps +'</td></tr>';
                

    }
        html += '<tr class="abc_tr stepRow" onclick="showPoint('+(numGeoCodes-1)+')"><td valign="top"><img src="'+staticHost + 'maps/images/red0'+alpha[numGeoCodes-1]+'.png'+'"></td><td>' + endPoint.address + '</td></tr>';
        html += '</table></div>';
        directionsInfoDiv.innerHTML = html;
        //document.getElementById('dirInfo').style.height = '400px';
        //document.getElementById('dirInfo').style.overflow = 'auto';
        //document.getElementById('dirInfo').innerHTML = '<div class="dir_info_title">'+directInfo+'</div>';

        //gdir.getMarker(0).getIcon().image = staticHost + 'maps/images/map_marker_num.gif';
        //gdir.getMarker(1).getIcon().image = staticHost + 'maps/images/map_marker_num.gif';

//        for(var abc=0; abc<gdir.getNumGeocodes();abc++) {
//            $('img[src$=icon_green'+alpha[abc]+'.png]').attr('src', staticHost + 'maps/images/map_marker_num.gif');
//        }
      }
      uroute = [];
      for(var key=0;key<gdir.getNumGeocodes();key++) {
         uroute.push(new Array(gdir.getMarker(key).getLatLng().lat(), gdir.getMarker(key).getLatLng().lng(), GetDirType()));
      }
//      if(arrlat.length || arrlng.length) {
//          changeGMap('route', '', arrlat, arrlng);
//      }
}

/* Show Steps Direction */
function showStep(r,s) {
    //gmap.closeInfoWindow();
    var step = gdir.getRoute(r).getStep(s);
    var stepLatLng = step.getLatLng();
    var stepDescriptionHTML = step.getDescriptionHtml();
    //var re = new RegExp(pattern,'g');
    //stepDescriptionHTML = stepDescriptionHTML.replace(re,'<b style="color:#CA0039">$1</b>')
    var stepDistance = step.getDistance();
    var stepDuration = step.getDuration();

        //var draw = DrawStepsButton(r,s);

    var infoHTML = '<div class="bubble">';
    infoHTML += '<table>';
    infoHTML += '<tr class="stepRow"><td class="stStep">' + (s+1) + '.</td><td class="stDescr"> ' + stepDescriptionHTML + '</td><td class="stDist">' + stepDistance.html + '</td></tr>';
    //infoHTML += '<tr class="stepRow"><td>&nbsp;&nbsp;</td colspan="2"><td> ' + stepLatLng + '</td></tr>';
    //infoHTML += '<tr class="stepRow"><td>&nbsp;&nbsp;</td colspan="2"><td>'+draw+'</td></tr>';
    infoHTML += '</table>';
    infoHTML += '</div>';
        
        //var tab1 = new GInfoWindowTab("Location", '<div id="detailmap"></div>');
    //var tab2 = new GInfoWindowTab("Info", infoHTML);
    //var infoTabs = [tab1,tab2];

    //map.openInfoWindowTabsHtml(stepLatLng,infoTabs);
    gmap.openInfoWindowHtml(stepLatLng,infoHTML);

        // detailmap = null;
        // Minimap for driving directions
    //var dMapDiv = document.getElementById("detailmap");
    //detailmap = new GMap2(dMapDiv);
    gmap.setCenter(stepLatLng,15);

    //detailmap.addOverlay(pLine);

    //var CopyrightDiv = dMapDiv.firstChild.nextSibling;
    //var CopyrightImg = dMapDiv.firstChild.nextSibling.nextSibling;
    //CopyrightDiv.style.display = "none";
    //CopyrightImg.style.display = "none";

    //detailmap.addControl(new GSmallMapControl());
}

/* Point Information */
function showPoint(num) {
    //return;
    var shPoint = gdir.getGeocode(num);
    var shRoute = gdir.getRoute(num);
    var shMark = gdir.getMarker(num).getLatLng();
    var shHTML = '<div class="infoWindow">';
    shHTML += '<div class="shImg"><img src="'+staticHost + 'maps/images/red0'+alpha[num]+'.png'+'"></div>';
    shHTML += '<div class="shAddress">'+shPoint.address+'</div>';
    shHTML += '</div>';

    gmap.openInfoWindowHtml(shMark,shHTML);
    gmap.setCenter(shMark,15);
}

/* Last Step */
var showLastStep = function() {
    if (this.currentStep == -1) {
        return;
    }

    this.currentStep--;
    this.showStep(this.currentStep);
};

/* Step Information */
var showGStep = function(index) {
    $("lastStepButton").className = (index == -1) ? "buttonDisabled" : "button";
    $("nextStepButton").className = (index == this.currentRoute.getNumSteps()-1) ? "buttonDisabled" : "button";

    if (index == -1) {
        this.stepDescription.innerHTML =
        "<strong>" + this.startLocation.getLongName() + "</strong> to <strong>" +
        this.endLocation.getLongName() + "</strong> - " + this.currentRoute.getSummaryHtml();
    } else {
        var step = this.currentRoute.getStep(index);
        var content = (index+1) + ". " + step.getDescriptionHtml();
        content += " - " + step.getDistance().html +  " (" + step.getDuration().html + ")";
       
        this.stepDescription.innerHTML = content;

        var latlng = step.getLatLng();
        this.mapController.showStepMarker(latlng);
    }
};

/* Next Step */
var showNextStep = function() {
    if (this.currentStep == this.currentRoute.getNumSteps()-1) {
        return;
    }

    this.currentStep++;
    this.showStep(this.currentStep);
};

/* Draw Dynamic Step Buttons */
function DrawStepsButton(rd,sd) {
    var btns = '';
    var rdp;
    var sdp;
    var rdn;
    var sdn;
    var nRoutes = gdir.getNumRoutes();
    var nstep = gdir.getRoute(rd).getStep(sd);
    var nsteps = gdir.getRoute(rd).getStep(sd);
    var nroutes = gdir.getRoute(rd);

    // Next Step
    if(!gdir.getRoute(rd).getStep(sd+1)) {
        if(!gdir.getRoute(rd+1).getStep(0)) {
            rdn = 0;
            sdn = 0;
        }
        else {
            rdn = rd++;
            sdn = 0;
        }
    }
    else {
        rdn = rd;
        sdn++;
    }

    // Prev Step
//    if(!gdir.getRoute(rd).getStep(sd-1)) {
//        if(!gdir.getRoute(rd-1).getStep(0)) {
//            rdn = 0;
//            sdn = 0;
//        }
//        else {
//            rdn = rd++;
//            sdn = 0;
//        }
//    }
//    else {
//        rdn = rd;
//        sdn++;
//    }

//    if(!gdir.getRoute(rd).getStep(sd-1)) {
//
//    }
//    if(!gdir.getRoute(rd+1).getStep(0)) {
//
//    }
//    if(!gdir.getRoute(rd-1).getStep(0)) {
//
//    }
//
//    if()
//    for (var r = 0 ; r < nRoutes ; r++ ) {
//        var rt = gdir.getRoute(r);
//        var nSteps = rt.getNumSteps();
//  for (var s = 0 ; s < nSteps ; s++ ) {
//
//        }
//    }
//
    btns += '<a href="#" onclick="showStep('+rdp+','+sdp+')" class="prev">a</a>';
    btns += '<a href="#" class="prev_inact">a</a>';
    btns += '<a href="#" onclick="showStep('+rdn+','+sdn+')" class="next">a</a>';
    btns += '<a href="#" class="next_inact">a</a>';

    return btns;
}

/* Put POI markers on map */
function ManageVisicomPOI(idob, k, control) {

    var names = new Array(),
        descrs = new Array(),
        ids = new Array();

    //if(!objVArr[idob]) objVArr[idob] = [];
    CheckActions('objects');

    if(control.checked) {
        objMarkers[k] = new Array();
        objVArr[idob] = idob;
        uobjects[idob] = [];
        //f_point[k] = new Array();
        
        ClearGObjMap();
        
        //GeoCity(document.getElementById('filter_city').value);
        markid = idob;
        if(markid == 6401 || markid == 6402 || markid == 6403 || markid == 6404 || markid == 4103) markid = 1409;

        var poiIcon = new GIcon(G_DEFAULT_ICON);
            poiIcon.image = staticHost + "maps/images/" + markid + ".png";
            poiIcon.iconSize = new GSize(22,22);
            poiIcon.shadowSize = new GSize(0, 0);
        var markOptions = {icon:poiIcon};

    //coords = gmap.getBounds();
    //var arrCoord = StringToCoords(coords);

//    var arrStatic = [43.51668853502906, 19.9072265625, 52.855864177853995, 43.2861328125];
//    //arrType = ['minlat', 'minlon', 'maxlat', 'maxlon'];
//    $.post('http://'+hostname+'/mainpage/getRectOb/'+idob,
//    //{'maxlat': arrCoord['maxlat'],'maxlon': arrCoord['maxlon'],'minlat': arrCoord['minlat'],'minlon': arrCoord['minlon']},
//    {'maxlat': arrStatic[2],'maxlon': arrStatic[3],'minlat': arrStatic[0],'minlon': arrStatic[1]},
//    function(xml){
//            $(xml).find('POI').each(function(){
//                    names[names.length] = $(this).find('name').text();
//                    ids[ids.length] = $(this).find('id').text();
//                    descrs[descrs.length] = $(this).find('description').text();
//            });
//
//    $.post('http://'+hostname+'/mainpage/getPointer/', {'points': ids.join()}, function(data){
//            $(data).find('point').each(function(i){
//            markid = idob;
//            if(markid == 6401 || markid == 6402 || markid == 6403 || markid == 4103) markid = 1409;
//
//            var ppoint = new GLatLng($(this).attr('lat'), $(this).attr('lng'));
//            var poiIcon = new GIcon(G_DEFAULT_ICON);
//                poiIcon.image = staticHost + "maps/images/" + markid + ".png";
//                poiIcon.iconSize = new GSize(22,22);
//                poiIcon.shadowSize = new GSize(0, 0);
//
//            var markName = descrs[i] != '' && names[i] == idob ? descrs[i] : descrs[i] != '' && names[i] != idob ? names[i]+' ('+descrs[i]+')' : '';
//            markOptions = {icon:poiIcon};
//
//            var markPOI = new GMarker(ppoint, markOptions);
//            GEvent.addListener(markPOI, "click", function() {
//            markPOI.openInfoWindowHtml("<div class='marker_title'>"+ names[i] +"</div><div class='marker_address'>" + descrs[i] + "</div>");
//            });
//
//            objMarkers[k].push(markPOI);
//            gmap.addOverlay(markPOI);
//            });
//        });
//    });
    var bound = GetCordVisibleMap();
    $.ajax({
        type  : "POST",
        url  : "/mainpage/get_vobj_rect",
        dataType : "json",
        data  :  {
                    'id' : idob,
                    'minlat' : bound.minlat,
                    'maxlat' : bound.maxlat,
                    'minlng' : bound.minlng,
                    'maxlng' : bound.maxlng
                 },
        success: function (expdata) {

            if(!expdata.length) document.getElementById('messalert').style.display = 'block';
            else document.getElementById('messalert').style.display = 'none';

            for(var i in expdata) {
                var visipoint = new GLatLng(expdata[i]['Lat'], expdata[i]['Lng'], true);
                var Title = expdata[i][lang_act == 'ua'?'Title_ua':'Title'];
                var Desc  = expdata[i][lang_act == 'ua'?'Description_ua':'Description'];
                var visimark = createFindMarker(visipoint, Title, Desc, markOptions);
                //var tmpa = new Array(expdata[i]['Lat'], expdata[i]['Lng']);
                //f_point[k].push(visipoint);
                objMarkers[k].push(visimark);
                uobjects[idob].push(new Array(expdata[i]['Lat'], expdata[i]['Lng'], Title, Desc, markid  ) );
                gmap.addOverlay(visimark);

                //if(i < 5) alert('lat='+expdata[i]['Lat']+' lng='+expdata[i]['Lng']);
            }
        //visibleMarkersZone(f_point);
        },
        error: function(){}
        });

    //alert(f_point.length);
    //if(f_point.length) visibleMarkersZone(f_point);
    }
else {
     if(objVArr[idob]) delete objVArr[idob];
     //if(f_point[idob]) delete f_point[idob];
     
     if (objMarkers[k] && objMarkers[k].length) {
            for ( n = 0 ; n < objMarkers[k].length ; n++ ) {
                if (objMarkers[k][n]) {
                    gmap.removeOverlay(objMarkers[k][n]);
                    }
                }
            }
     }

    //if( objVArr.length ) changeGMap('object', 'ukraine', objVArr, 1);

}

/* Set Visible Markers In Map Container */
var visibleMarkersZone = function (points, enableZoom) {
    if(!points.length) return(false);
    var pois = [];
    for( var m in points) {
        for (var n in points[m]) {
            pois.push(points[m][n]);
        }
    }

    if(pois.length) {
        pois.push(pois[0]);
        var searchPolygon = new GPolygon(pois, '#0000ff', 1, 1, '#0000ff', 0.2);
        gmap.addOverlay(searchPolygon);
        if(enableZoom == 'undefined') gmap.setCenter(searchPolygon.getBounds().getCenter(),gmap.getBoundsZoomLevel(searchPolygon.getBounds()));
        else gmap.setCenter(searchPolygon.getBounds().getCenter(), enableZoom);
        gmap.removeOverlay(searchPolygon);
        pois = [];
    }

}

/* Clear All Objects */
function ClearObjMap() {
    
    $('.subLevel input:checkbox').removeAttr('checked', false);
    if (gMarkers[500] && gMarkers[500].length) {
                for ( n = 0 ; n < gMarkers[500].length ; n++ ) {
                    if (gMarkers[500][n]) {
                        gmap.removeOverlay(gMarkers[500][n]);
                        }
                    }
    }

    for ( var k in objMarkers) {
        for ( n = 0 ; n < objMarkers[k].length ; n++ ) {
            if (objMarkers[k][n]) {
                gmap.removeOverlay(objMarkers[k][n]);
                }
            }
        }
    }

/* Clear All Google Objects */
function ClearGObjMap() {
    if (gMarkers[500] && gMarkers[500].length) {
                for ( n = 0 ; n < gMarkers[500].length ; n++ ) {
                    if (gMarkers[500][n]) {
                        gmap.removeOverlay(gMarkers[500][n]);
                        }
                    }
    }

}

/* Manage Google Search POI by Type */
function SetGooglePOI(){
    tgid = 500;
    CheckActions('gobjects');
    fg_point = [];
    ugobjects = [];
    gCurrentResults = [];
    gpage = 0;
    var typeName =  document.getElementById('filter_city').value;
    var town = document.getElementById('searchword').value;

    if(typeName == '' || typeName == city_val) {
        document.getElementById('city_e').style.display = 'block';
    }
    else {
         ClearObjMap();
         document.getElementById('city_e').style.display = 'none';
         objGArr[tgid] = tgid;
         fg_point[tgid] = [];

         if (!gMarkers[tgid]) {gMarkers[tgid] = [];}
         else {
              for ( n = 0 ; n < gMarkers[tgid].length ; n++ ) {
                  if (gMarkers[tgid][n]) { 
                      gmap.removeOverlay(gMarkers[tgid][n]);
                      }
                  }
              gMarkers[tgid] = [];
         }

         //gSmallIcon.image = staticHost + "maps/images/" + markid + ".png";
         //gSmallIcon.image = staticHost + "maps/images/red0G.png";
         gPoiIcon.image = staticHost + "maps/images/google_poi.png";
         gPoiIcon.shadowSize = new GSize(0, 0);
         //GeoCity(town);
         gLocSearch.setCenterPoint(gmap);
         gLocSearch.execute(typeName);
    }
 
 //if(objGArr.length) changeGMap('object', '', objGArr, 2);

}

/* Specify Clear Google Objects */
function ClearGooglePOI() {
    $('#filter_city').val(city_val);
    if(objGArr[500]) delete objGArr[500];
    ugobjects = [];
    if (gMarkers[500] && gMarkers[500].length) {
        for ( n = 0 ; n < gMarkers[500].length ; n++ ) {
            if (gMarkers[500][n]) {
                gmap.removeOverlay(gMarkers[500][n]);
                }
            }
        }
}

/* Manage Google Search POI by Type */
//function ManageGooglePOI(ggid, typeName, control){
//    var markid;
//    tgid = ggid;
//    markid = ggid;
//    gCurrentResults = [];
//    gpage = 0;
//
//    // Add Marker
//    if(control.checked)
//        {
//        if(markid == 6401 || markid == 6402 || markid == 6403 || markid == 6404 || markid == 4103) markid = 1409;
//        var town = document.getElementById('filter_city').value;
//
//        if(town == '' || town == city_val) {
//            document.getElementById('city_e').style.display = 'block';
//        }
//        else {
//             document.getElementById('city_e').style.display = 'none';
//             objGArr[tgid] = tgid;
//             if (!gMarkers[tgid]) {gMarkers[tgid] = [];}
//             gSmallIcon.image = staticHost + "maps/images/" + markid + ".png";
//             gSmallIcon.shadowSize = new GSize(0, 0);
//             GeoCity(town);
//
//             gLocSearch.setCenterPoint(town);
//             gLocSearch.execute(typeName);
//        }
//    }
//    else {
//         if(objGArr[tgid]) delete objGArr[tgid];
//
//         if (gMarkers[tgid] && gMarkers[tgid].length) {
//                for ( n = 0 ; n < gMarkers[tgid].length ; n++ ) {
//                    if (gMarkers[tgid][n]) {
//                        gmap.removeOverlay(gMarkers[tgid][n]);
//                        }
//                    }
//                }
//         }
//
//if(objGArr.length) changeGMap('object', '', objGArr, 2);
//
//}


/* Manage Google Search POI by Type */
function PanelGooglePOI(ggid, typeName, control){

    tgid = ggid;
    
    // Add Marker
    if(control.checked)
        {
        objPArr[tgid] = tgid;
        if (!gMarkers[tgid]) {gMarkers[tgid] = [];}
        gSmallIcon.image = staticHost + "maps/images/" + tgid + ".png";
        gSmallIcon.shadowSize = new GSize(0, 0);
        
        gLocSearch.setCenterPoint(paneltown);
        gLocSearch.execute(typeName);
        }
    else {
         if(objPArr[tgid]) delete objPArr[tgid];

         if (gMarkers[tgid] && gMarkers[tgid].length) {
                for ( n = 0 ; n < gMarkers[tgid].length ; n++ ) {
                    if (gMarkers[tgid][n]) {
                        gmap.removeOverlay(gMarkers[tgid][n]);
                        }
                    }
                }
         }
        
//if(objPArr.length) changeGMap('object', '', objPArr, 3);

}

/* Check Google Marker Layer */
function CheckGLayer(tgid) {
    if(gMarkers[tgid]) {
        return('checked');
    }
    else return(false);
}

/* Check Visicom Marker Layer */
function CheckVLayer(idob) {
    if(objMarkers[idob]) {
        return('checked');
    }
    else return(false);
}

/* Check Panel Marker Layer */
function CheckPLayer() {
    if(!gMarkers[1409])
        document.getElementById('ch300').checked = false;
    if(!gMarkers[1821])
        document.getElementById('ch301').checked = false;
}

/* Geocoding City */
function GeoCity(scity) {
    if (ggeo && scity) {
        ggeo.getLatLng(
            scity,
            function(pnt) {if (pnt) {gmap.setCenter(pnt, 14);}}
        );
    }
}
/* Local Search POIs */
function OnSearch() {
      if (!gLocSearch.results) return;
      //alert('page='+gLocSearch.cursor.currentPageIndex+'of pages='+gLocSearch.cursor.pages.length+'gpage='+gpage);

      if(!gLocSearch.results.length) document.getElementById('messalert').style.display = 'block';
      else document.getElementById('messalert').style.display = 'none';

      for (var i = 0; i < gLocSearch.results.length; i++) {
          gCurrentResults.push(new LocalResult(gLocSearch.results[i]));
      }

      if(gLocSearch.cursor && gLocSearch.cursor.pages.length >1) {
        if(gLocSearch.cursor.pages.length != gLocSearch.cursor.currentPageIndex) {
            gpage++;gLocSearch.gotoPage(gpage);
        }
        else gpage = 0;

      }
      else {
           if(gLocSearch.results.length == 1) {
               gmap.setCenter(new GLatLng(gLocSearch.results[0].lat, gLocSearch.results[0].lng), gmap.getZoom());
           }
      }

      if(gLocSearch.cursor) var maxpage = gLocSearch.cursor.currentPageIndex + 1;
      if(gLocSearch.cursor && gLocSearch.cursor.pages.length == maxpage ) {
        if(fg_point[tgid].length) 
            visibleMarkersZone(fg_point);
        
      }
}

/* A Single Local Search Result Returned By The Google AJAX Search API */
function LocalResult(result) {
    this.result_ = result;
    var mark = this.marker(gPoiIcon);
    fg_point[500].push(new GLatLng(result.lat, result.lng, true));
    gMarkers[500].push(mark);

    var fng = '';
    if(result.streetAddress && result.streetAddress != result.city) fng += result.streetAddress+', ';
    if(result.city) fng += result.city+', ';
    if(result.country) fng += result.country;
    var ftg = result.title;

    ugobjects.push(new Array(result.lat, result.lng, ftg, fng ) );
    gmap.addOverlay(mark);
    }

/* Clear Overlays */
function rmOverlays() {
    gmap.clearOverlays();
    }

/* Returns The GMap Marker For This Result */
LocalResult.prototype.marker = function(opt_icon) {
      if (this.marker_) return this.marker_;

      var gpoint = new GLatLng(parseFloat(this.result_.lat), parseFloat(this.result_.lng));
      var marker = new GMarker(gpoint, opt_icon);

      var fn = '';
      if(this.result_.streetAddress && this.result_.streetAddress != this.result_.city) fn += this.result_.streetAddress+', ';
      if(this.result_.city) fn += this.result_.city+', ';
      if(this.result_.country) fn += this.result_.country;
      var ft = this.result_.title;
      
    
      GEvent.bind(marker, "click", this, function() {
      //marker.openInfoWindow(this.selectedHtml());
      marker.openInfoWindowHtml("<div class='marker_title'>"+ ft +"</div><div class='marker_address'>" + fn + "</div>");
      });
      this.marker_ = marker;
      this.gpoint_ = gpoint;
      //gmap.setCenter(gpoint);
      //gmap.setZoom(10);
      return marker;
    }

/* Returns The HTML We Display For A Result After It Has Been "Saved" */
LocalResult.prototype.selectedHtml = function() {
  return this.result_.html.cloneNode(true);
}

/* Create Marker */
function createMarker(point,markerName,markerHtml, mKey, mSite) {
    var htmlInfo = '<div class="markers">';
    htmlInfo += '<b>' + markerName + '</b><br>';
    htmlInfo += markerHtml;
    htmlInfo += '</div>';

    var typeIcon = new GIcon(G_DEFAULT_ICON);
        typeIcon.image = staticHost + "maps/images/" + mKey + ".png";
        typeIcon.iconSize = new GSize(23,23);


        markerOptions = {icon:typeIcon, title:markerName};
        var marker = new GMarker(point, markerOptions);

    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(htmlInfo);
    });

        return marker;
}

/* Plot a marker after positive response */
function place(lat,lng, cntr) {
    var point = new GLatLng(lat,lng);
    gmap.setCenter(point,14);

    var mmIcon = new GIcon(G_DEFAULT_ICON);
        mmIcon.image = staticHost+'maps/images/map_marker.png';
        mmIcon.iconSize = new GSize(39,36);
        mmIcon.shadowSize = new GSize(0, 0);

    var markOpt = {icon:mmIcon};

    gmap.addOverlay(new GMarker(point, markOpt));
    //changeGMap('find', cntr, lat, lng);
    /* Clear a results after place select */
    //document.getElementById("fresults").innerHTML = "";
}

/* Replace Controls Data */
function rePlace() {
    var first  = document.getElementById("textfield0").value;
    var second = document.getElementsByName("to")[0].value;

    document.getElementsByName("to")[0].value = first;
    document.getElementById("textfield0").value = second;

    gmap.clearOverlays();
    setDirections();
    return false;
}

/* Hide Replace Control Data */
function HideReplace() {
    document.getElementById("rpl").style.display = "none";
}

/* Remove the draggable markers from previous function call */
function onGDirectionsAddOverlay(){
  for (var i=0; i<newMarkers.length; i++){
    gmap.removeOverlay(newMarkers[i]);
  }
  
  /* Loop through the markers and create draggable copies */
  for (var i=0; i<=gdir.getNumRoutes(); i++){
    var originalMarker = gdir.getMarker(i);
    latLngs[i] = originalMarker.getLatLng();

    icons[i] = originalMarker.getIcon();
    newMarkers[i] = new GMarker(latLngs[i],{icon:icons[i], draggable:true, title:'Draggable'});
    gmap.addOverlay(newMarkers[i]);

    /* Get the new waypoints from the newMarkers array and call loadFromWaypoints by dragend */
    GEvent.addListener(newMarkers[i], "dragend", function(){
      var points = [];
      for (var i=0; i<newMarkers.length; i++){
        points[i]= newMarkers[i].getLatLng();
      }
      ///alert(GetDirType());
      gdir.loadFromWaypoints(points, {'locale':lang_act, 'travelMode':GetDirType()});
      
    });

    /* Bind 'click' event to original markers 'click' event
    copyClick(newMarkers[i],originalMarker); */

    /* Now we can remove the original marker safely */
    gmap.removeOverlay(originalMarker);
  }

/* Geocoding */
function showAddr(country) {
    var search = document.getElementById("searchword").value;
    //var locat = document.getElementById("location").value;
    document.getElementById("find_results").innerHTML = "";
    document.getElementById('mt1').className = '';
    document.getElementById('mt2').className = '';
    document.getElementById('mt3').className = 'current';
    //document.getElementById('search_reg').style.display ='none';

    /* Set search country */
    if(country) search = search + ' ' + country;
    else country = '"world"';
    
    /* Perform the Geocoding */
    //ggeo.getLocations(search + ' ' + locat, function (result)
    ggeo.getLocations(search, function (result)
      {
        //gmap.clearOverlays();
        if (result.Status.code == G_GEO_SUCCESS) {
          
          /* If there was more than one result, "ask did you mean" on them all */
          if (result.Placemark.length > 1) {
            //document.getElementById("fresults").innerHTML = "<br><b>Результаты поиска: </b>";
            
            /* Loop through the results */
            for (var i=0; i<result.Placemark.length; i++) {
              var p = result.Placemark[i].Point.coordinates;
              document.getElementById("find_results").innerHTML += "<a href='javascript:place(" +p[1]+","+p[0]+","+country+")'>"+(i+1)+". "+ result.Placemark[i].address + "<br /><span class='lighter font_size_90'>"+ result.Placemark[i].address+"<\/span><br class='clear'\/><\/a>";
            }
          }
          /* If there was a single marker */
          else {
            //document.getElementById("fresults").innerHTML = "";
            var p = result.Placemark[0].Point.coordinates;
            place(p[1],p[0], country);
            document.getElementById("find_results").innerHTML += "<a href='javascript:place(" +p[1]+","+p[0]+","+country+")'>1. "+ result.Placemark[i].address + "<br /><span class='lighter font_size_90'>"+ result.Placemark[0].address+"<\/span><br class=clear'\/><\/a>";
            }
        }
        /* Decode the error status */
        else {
          var reason="Code "+result.Status.code;
          if (reasons[result.Status.code]) {
            reason = reasons[result.Status.code]
          }
          alert('Could not find "'+search+ '" ' + reason);
        }
      }
    );
  }


/* Click Copy Function */
function copyClick(newMarker,oldMarker){
    GEvent.addListener(newMarker, 'click', function(){
      GEvent.trigger(oldMarker,'click');
    });
  }
}

/* Set Directions */
function setDirections(cntr) {
      var str = new Array();
      var marr = new Array();
      //gdir.clear();
      if(!cntr) cntr = 'world';

      $('#routes input').each( function() {str.push($(this).val());} );
      
      /* Array Steps Addres */                                     // document.getElementById('waytype').value
      
      gdir.loadFromWaypoints(str, {'locale':lang_act, 'travelMode':GetDirType()});
//      alert(GetDirType());
}

/* KOI-8 to UTF-8 Decode */
function koi2unicode(str) {
               var charmap   = unescape(
                  "%u2500%u2502%u250C%u2510%u2514%u2518%u251C%u2524%u252C%u2534%u253C%u2580%u2584%u2588%u258C%u2590"+
                  "%u2591%u2592%u2593%u2320%u25A0%u2219%u221A%u2248%u2264%u2265%u00A0%u2321%u00B0%u00B2%u00B7%u00F7"+
                  "%u2550%u2551%u2552%u0451%u2553%u2554%u2555%u2556%u2557%u2558%u2559%u255A%u255B%u255C%u255D%u255E"+
                  "%u255F%u2560%u2561%u0401%u2562%u2563%u2564%u2565%u2566%u2567%u2568%u2569%u256A%u256B%u256C%u00A9"+
                  "%u044E%u0430%u0431%u0446%u0434%u0435%u0444%u0433%u0445%u0438%u0439%u043A%u043B%u043C%u043D%u043E"+
                  "%u043F%u044F%u0440%u0441%u0442%u0443%u0436%u0432%u044C%u044B%u0437%u0448%u044D%u0449%u0447%u044A"+
                  "%u042E%u0410%u0411%u0426%u0414%u0415%u0424%u0413%u0425%u0418%u0419%u041A%u041B%u041C%u041D%u041E"+
                  "%u041F%u042F%u0420%u0421%u0422%u0423%u0416%u0412%u042C%u042B%u0417%u0428%u042D%u0429%u0427%u042A")
               var code2char = function(code) {
                           if(code >= 0x80 && code <= 0xFF) return charmap.charAt(code - 0x80)
                           return String.fromCharCode(code)
                        }
               var res = ""
               for(var i = 0; i < str.length; i++) res = res + code2char(str.charCodeAt(i))
               return res
            }


/* CP-1251 to UTF-8 Decode */
function win2unicode(str) {
               var charmap   = unescape(
                  "%u0402%u0403%u201A%u0453%u201E%u2026%u2020%u2021%u20AC%u2030%u0409%u2039%u040A%u040C%u040B%u040F"+
                  "%u0452%u2018%u2019%u201C%u201D%u2022%u2013%u2014%u0000%u2122%u0459%u203A%u045A%u045C%u045B%u045F"+
                  "%u00A0%u040E%u045E%u0408%u00A4%u0490%u00A6%u00A7%u0401%u00A9%u0404%u00AB%u00AC%u00AD%u00AE%u0407"+
                  "%u00B0%u00B1%u0406%u0456%u0491%u00B5%u00B6%u00B7%u0451%u2116%u0454%u00BB%u0458%u0405%u0455%u0457")
               var code2char = function(code) {
                           if(code >= 0xC0 && code <= 0xFF) return String.fromCharCode(code - 0xC0 + 0x0410)
                           if(code >= 0x80 && code <= 0xBF) return charmap.charAt(code - 0x80)
                           return String.fromCharCode(code)
                        }
               var res = ""
               for(var i = 0; i < str.length; i++) res = res + code2char(str.charCodeAt(i))
               return res
            }

/* Show Search Errors */
function handleErrors(){
       var err;

       if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS)
           err = geo_uknown_a;
         //alert("No corresponding geographic location could be found for one of the specified addresses. This may be due to the fact that the address is relatively new, or it may be incorrect");
       else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
         //alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.");
           err =geo_server_e;
       else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
         //alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input");
           err = geo_missing_q;
       else if (gdir.getStatus().code == G_GEO_BAD_KEY)
         //alert("The given key is either invalid or does not match the domain for which it was given");
           err = geo_bad_r;
       else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
         //alert("A directions request could not be successfully parsed");
           err = geo_bad_r;
       else 
           //alert("An unknown error occurred.");
           err = geo_uknown;

       document.getElementById('dirInfo').innerHTML = '<div class="show_errors">'+geo_error+': '+err+'</div>';
    }

/* Clear Objects Form */
function ClearMapConrols(count)
    {
    for (var i=0; i<count; i++){
                if(document.getElementById('ch' + i))
                    document.getElementById('ch' + i).checked = false;
              }

    uobjects = [];
    rmOverlays();
    }

/* Show/Hide Extras Panel */
function ExtrasPanel() {
    var st = document.getElementById('panelcontent').style;
    if(st.display == 'none') st.display = 'block'; else st.display = 'none';
}

/* Generate URLS Last Actions */
function changeGMap(typemap, country, lat, lng) {
    if (z != gmap.getZoom() || cm != gmap.getCenter() || !typemap ) {

        var z = gmap.getZoom();
        var cm = gmap.getCenter();
        cX = cm.lng();
        cY = cm.lat();

        if(!country) country = 'world';
        
        link = '?&typeview='+typemap+'&typemap='+country;

        /* Search Mode */
        if(typemap == 'find') {
            var mapword='';
            var arrw = [];
            var mmark = '';
            var mw = document.getElementById('searchword').value;

            arrw = explode(" ", trim(mw));
            mapword = implode('+', arrw);
            
            if(lat && lng) mmark = '&mlat=' + lat + '&mlng=' + lng;

            //link += '&mapcity=' + trim(document.getElementById('location').value) +
            link += '&mapword=' + mapword + mmark;
            
        }

        /* Object Mode */
        if(typemap == 'object') {
            
            link += '&poiType=' + lng;

            if(isArray(lat) && lat.length) {
                var t = 0;
                for( var tmp in lat) {
                    link += '&objID' + t + '=' + lat[tmp];
                    t++;    
                }
            }

            if(lng == 2) {
                if(searchtext = document.getElementById('filter_city').value) {
                    arrw = explode(" ", trim(searchtext));
                    mapword = implode('+', arrw);
                    link += '&objWord=' + mapword;
                }
            }
            if(lng == 3) link += '&objWord=' + searchtext;
        }

        /* Route Mode */
        if(typemap == 'route') {
            if(isArray(lat) && isArray(lng)) {
                for(var inc in lat) {
                    link += '&dlat' + inc + '=' + lat[inc] + '&dlng' + inc + '=' + lng[inc];
                }
            }

            link += '&travelMode=' + GetDirType();
        }

    setMapUrls(link);
    }
}

/* Set Dinamicaly Url */
function setMapUrls(lnk) {
    //$('#prntss').attr('href', maps_url+'print/'+lnk);
    $('#maplink').val(maps_url+lnk);
    $('#gcode').attr('href', maps_url+'gmapscode/'+lnk);
    $('#html_maplink').val('<a href="'+maps_url+lnk + '" target="_blank">'+link_name+'</a>');

    AClip.setText( maps_url+lnk );
    HClip.setText( '<a href="'+maps_url+lnk + '" target="_blank">'+link_name+'</a>' );

    //alert(maps_url+lnk);
    //clip2.setText( $('#html_maplink').val() );
    staticlink = lnk;

    if(print.length) {
        print = '';
        window.open(maps_url+'print/'+lnk);
    }

}

/* Check Array */
function isArray(arrays) {
    return Object.prototype.toString.apply(arrays) === '[object Array]';
}

/* Explode Function */
function explode(separator, string) {
    return string.split(separator);
    }

/* Trim Function */
function trim( str, charlist ) {
        charlist = !charlist ? ' \s\xA0' : charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
        var re = new RegExp('^[' + charlist + ']+|[' + charlist + ']+$', 'g');
        return str.replace(re, '');
}

/* String to Coordinates */
function StringToCoords(str){
    var st = new String(str);
    var cType = ['minlat', 'minlon', 'maxlat', 'maxlon'];

    if(st.length > 0) {
        var arr = explode(',', st);
        for(var n in arr) {
            arr[cType[n]] = trim(trim(arr[n]), '(())');
            }
        return(arr);
    }
    else return false;
}

/* Implode Function */
function implode (glue, pieces) {
    var i = '', retVal='', tGlue='';
    if (arguments.length === 1) {
        pieces = glue;
        glue = '';
    }
    if (typeof(pieces) === 'object') {
        if (pieces instanceof Array) {
            return pieces.join(glue);
        }
        else {
            for (i in pieces) {
                retVal += tGlue + pieces[i];
                tGlue = glue;
            }
            return retVal;
        }
    } else {
        return pieces;
    }
}

/* Add Route Points */
function addGPoint()
{
    var countDots = $('#routes').find('input').size();
        /*
        $('#intermediate').append(['<div class="dotdiv" id="dot',(countDots+1),'"><b>',lang_const.other_dot,' ',(countDots+1),'</b>',
            '<input id="textfield',(countDots+1),'" type="text" value="" style="width:140px; border:1px solid #D4E0EE; font-style: italic;" />',
            '<a href="#" id="del',(countDots+1),'" onclick="delgdot(',(countDots+1),')"><img class="vmid2" src="',staticHost,'maps/images/icon_trash.gif" width="22" height="22" alt="Delete" /></a>',
            '<div class="clear3"></div></div>'].join(''));
        */
    $('#intermediate').append(['<li id="lidot',(countDots-1),'"> <span class="routes_abc" id="dot',(countDots-1),'">',alpha[countDots-1],'</span>&nbsp;',
                '<span class="routes_input"><input id="textfield',(countDots-1),'" type="text" value="" /></span>',
                '<span class="routes_del"><a href="#" id="del',(countDots-1),'" onclick="delgdot(',(countDots-1),')">&nbsp;</a></span>',
                '</li>'].join(''));

    $('#finishdot input')
            .attr('id', 'textfield'+($('#routes').find('input').size()-1));

        $("#fd").text(alpha[($('#routes').find('input').size()-1)]);

        var lastId = $('#finishdot input').attr('id');
        //alert(lastId);
        n = lastId.match(/(\d+)/g);
        dpoints[n*1]=dpoints[n-1];
        //if(dpoints.length > 24) document.getElementById('addlnk').style.display = 'none';
        //document.getElementById("rpl").style.display = "none";
        ExtrasControls();
}


/* Delete Route Points */
var delgdot = function(i){
    $('#lidot'+i).remove();
        
    var countDots = $('#intermediate').find('input').size();
        $("#fd").text(alpha[($('#routes').find('input').size()-1)]);

        $('#intermediate .routes_abc').each( function(i){
                                                $(this).text(alpha[i+1]);
                                                }
                                           );

        //for (var j=0; j<countDots; j++){
        //$('.routes_abc:eq('+j+') input').attr('id', 'textfield'+(j+1));
        //$('.routes_abc:eq('+j+') a').attr('id', 'dot'+(j+1));
                //$('.routes_abc:eq('+j+')').val(alpha[j-1]);
                //$('.routes_abc:eq('+j+') a').click( function() {delgdot('+(j+1)+');});
                //$('#intermediate .routes_abc:eq('+j+') input').after('<span class="routes_del"><a href="#" id="del'+(j+1)+'" onclick="delgdot('+(j+1)+')">&nbsp;</a></span>');
    //}

    var temp = new Array();
    for (var k=0; k<dpoints.length; k++){
        if (k<i) temp[k] = dpoints[k];
        if (k>i) temp[k-1] = dpoints[k];
    }
    dpoints = temp;

    ExtrasControls();
        /* Show "Replace A->B" Control */
        //if(dpoints.length == 2) document.getElementById('rpl').style.display = 'block';
        //if(dpoints.length < 25) document.getElementById('addlnk').style.display = 'block';
}

/* Show/Hide Extras Controls*/
function ExtrasControls() {
    var cntInput = $('#routes').find('input').size();
    //alert(cntInput);
    if(cntInput > 2) document.getElementById("rpl").style.display = "none";
    else document.getElementById('rpl').style.display = 'block';

    if(cntInput > 25) document.getElementById('addlnk').style.display = 'none';
    else document.getElementById('addlnk').style.display = 'block';
}

/* Set Map Center */
function MapsCenter(lat, lng, zoom) {
    if (lng && lat) {
        gmap.setCenter(new GLatLng(lat, lng, zoom ));
    }
    else {
        gmap.setCenter(new GLatLng(48.405717, 31.604248), 1);
    }
}

/* Set Map Zoom */
function MapsZoom(zoom) {
    if(zoom) gmap.setZoom(zoom);
}

/* Set Map Marker */
function MapsMarker(mlng, mlat) {
    if (mlng && mlat) {
        gmap.addOverlay(new GMarker(new GLatLng(mlat, mlng), pmarkOpt));
    }    
}

/* Set Map Direction */
function MapsDirection(points, trMod) {
    if(!trMod) trMod = 'G_TRAVEL_MODE_DRIVING';
    if(points.length) gdir.loadFromWaypoints(points, {'locale':lang_act, 'travelMode':trMod});
}

/* Set POI Markers */
function SetPOIMarkers(town, typeName) {
    if(town && typeName) {
        gLocaSearch.setCenterPoint(town);
        gLocaSearch.execute(typeName);
    }
}

/* Set Map Type */
function SetGMType(type, btn) {
    $('#maptypes a').removeClass('current');
    if(type) {
        mapType = type;
        gmap.setMapType(type);
        btn.className = 'current';
    }
}

/* Get Current Map Type */
function GetGMType() {
    if(mapType == 'G_NORMAL_MAP') return('normal');
    else { 
        if(mapType.getName() == 'Карта') return('normal');
        if(mapType.getName() == 'Гибрид') return('hybrid');
        if(mapType.getName() == 'Ландшафт' || mapType.getName() == 'Рельеф') return('physical');
    }
    //return(gmap.getCurrentMapType().getName());
}

/* Show/Hide Map Panel */
function ShowHideMapPanel() {
    if(document.getElementById('uncollapse').style.display == 'none') {
        document.getElementById('uncollapse').style.display = 'block';
        document.getElementById('collapse').style.display = 'none';
    }
    else { 
        document.getElementById('uncollapse').style.display = 'none';
        document.getElementById('collapse').style.display = 'block';
    }
}

/* Set SearchType */
function SearchType(element) {
    el_id = element.id;
    element.className = "current";
    searchType = el_id;
    $('#mapsTab1').find('input').val(city_val);
    $('.subLevel input:checkbox').removeAttr('checked', false);
    //gmap.clearOverlays();
    if(el_id == 'world') document.getElementById('ukraine').className = '';
    else document.getElementById('world').className = '';
}

/* Get SearchType */
function GetSearchType() {
    if(searchType == 'undefined') searchType = 'ukraine';
    return searchType;
}

/* Set Panel Type */
function SetPanelType(element) {
    tabset = element.id;
    //gmap.clearOverlays();
    //if(tabset == 'mapsTab11') document.getElementById('search_reg').style.display = 'block';
    //else document.getElementById('search_reg').style.display = 'none';
    if(tabset == 'mapsTab11') {
        $('#mapsTab1').find('input').val(city_val);
        //$('div.subLevel input:checked').attr('checked', false);
        //document.getElementById('search_reg').style.display = 'block';
    }
    if(tabset == 'mapsTab22') {
        $('#mapsTab2').find('input').val('');
        $('#dirInfo').html('');
        $('#intermediate').html('');
        $('#ftid').html(def_val);
        $('#fd').html('B');
        document.getElementById('rpl').style.display = 'block';
        SetDirType(2);
    }
    if(tabset == 'mapsTab33') {
        $('#find_results').html('');
        $('#pages').html('');
        $('#find_results').html(info_res);
    }

    $('#left_search_bar').find('input').val();

}

/* Get Panel Type */
function GetPanelType() {
    if(!tabset) tabset = 'mapsTab0';
    return tabset;
}

/* Change Google Control */
function ChangeControl() {
    //$('img[src$=mapcontrols3d5.png]').attr('src', staticHost + 'maps/images/mapcontrols3d5.png');
}

/* Channge Google Icons */
function ChangeIcons() {
    if(gdir) {
        for(var abc=0; abc<gdir.getNumGeocodes();abc++) {
            $('img[src$=icon_green'+alpha[abc]+'.png]').attr('src', staticHost + 'maps/images/map_marker_num.gif');
        }
    }
}

/* Resize Maps Manage Panel */
function ResizeMPanel() {
    $('.TabContent').height($(window).height()-260-50);
    $('div.subLevel input:checked').attr('checked', false);
    $('#filter_city').val(city_val);
    $('#searchword').val('');
    //$('#filter_city').blur(city_val);
    //$('#filter_city').focus(city_val);
    $('#maplink').val('');
    $('#html_maplink').val('');
    //document.getElementById('maphelp').style.display='none';
}

/* Set Direction Type */
function SetDirType(id) {
    if(id == 1) dirType = G_TRAVEL_MODE_WALKING;
    if(id == 2) dirType = G_TRAVEL_MODE_DRIVING;
}

/* Get Direction Type */
function GetDirType() {
    if(!dirType) dirType = G_TRAVEL_MODE_DRIVING;
    return dirType;
}

/* Clear Routes Form */
function ClearRoutes() {
    $('#mapsTab2').find('input').val('');
    $('#dirInfo').html('');
    $('#intermediate').html('');
    $('#ftid').html(def_val);
    $('#fd').html('B');
    document.getElementById('rpl').style.display = 'block';
    //gmap.clearOverlays();
    SetDirType(1);
    uroute = [];
}

/* Create New Hash */
function GetHash(prnt) {
    var ru = su = ou = gu = [];
    //uni_data = '5838cb509a643d599bc666155fad125f';
    print = prnt;
    if(second_name != 'load') {
        if(second_name == 'search')   su = serialize(usearch);
        if(second_name == 'route')    ru = serialize(uroute);
        if(second_name == 'objects')  ou = serialize(uobjects);
        if(second_name == 'gobjects') gu = serialize(ugobjects);

        if(first_name != 'load') {
            if(first_name == 'search')   su = serialize(usearch);
            if(first_name == 'route')    ru = serialize(uroute);
            if(first_name == 'objects')  ou = serialize(uobjects);
            if(first_name == 'gobjects') gu = serialize(ugobjects);
        }

    $.ajax({
        type  : "POST",
        url  : "/mainpage/save_uni_link",
        dataType : "json",
        data  :  {
                    route:    ru,
                    search:   su,
                    objects:  ou,
                    gobjects: gu
                 },

        success: function (rr) {
            //uni_data = expdata;
            var hash = eval(rr);
            uni_data = hash['hash'];
            clickButt();
        },

        error: function(){
            //alert('Ajax-Error!!!');
            clickButt();
        }
        });

    }
    else {
        clickButt();
    }
    

}

/* Encode UTF-8 */
function utf8_encode ( argString ) {
//    var string = (argString+'');
//    var utftext = "";
//    var start, end;
//    var stringl = 0;
//    start = end = 0;
//    stringl = string.length;
//    for (var n = 0; n < stringl; n++) {
//        var c1 = string.charCodeAt(n);        var enc = null;
//
//        if (c1 < 128) {
//            end++;
//        } else if (c1 > 127 && c1 < 2048) {            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
//        } else {
//            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
//        }
//        if (enc !== null) {            if (end > start) {
//                utftext += string.substring(start, end);
//            }
//            utftext += enc;
//            start = end = n+1;        }
//    }
//
//    if (end > start) {
//        utftext += string.substring(start, string.length);    }
//
    return argString;
}

/* Serialize */
function serialize (mixed_value) {
    var _getType = function (inp) {
        var type = typeof inp, match;
        var key;
        if (type == 'object' && !inp) {return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';}
            var cons = inp.constructor.toString();
            match = cons.match(/(\w+)\(/);
            if (match) {
                cons = match[1].toLowerCase();}
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];break;
                }
            }
        }
        return type;};
    var type = _getType(mixed_value);
    var val, ktype = '';

    switch (type) {case "function":
            val = "";
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":mixed_value = this.utf8_encode(mixed_value);
            val = "s:" + encodeURIComponent(mixed_value).replace(/%../g, 'x').length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":val = "a";
            var count = 0;
            var vals = "";
            var okey;
            var key;for (key in mixed_value) {
                ktype = _getType(mixed_value[key]);
                if (ktype == "function") {
                    continue;
                }
                okey = (key.match(/^[0-9]+$/) ? parseInt(key, 10) : key);
                vals += this.serialize(okey) +
                        this.serialize(mixed_value[key]);
                count++;}
            val += ":" + count + ":{" + vals + "}";
            break;
        case "undefined": // Fall-through
        default: // if the JS object has a property which contains a null value, the string cannot be unserialized by PHP            val = "N";
            break;
    }
    if (type != "object" && type != "array") {
        val += ";";}
    return val;
}


/* Set Last Maps Position And Zoom Values */
function clickButt() {
    var z = gmap.getZoom();
    var cm = gmap.getCenter();
    var mt = GetGMType();
    cln = cm.lng();
    clt = cm.lat();
    
    var tmplink = '';
    //alert('unidata= '+uni_data);
    tmplink += '&lat='+clt+'&lng='+cln+'&z='+z+'&mtype='+mt;
    if(uni_data.length) tmplink += '&data='+uni_data;

    if(!staticlink) {
        staticlink = '?';
        setMapUrls(staticlink+tmplink);
    }
    else
    {
        if (staticlink.search('&z') != -1) {
            var urlarr = explode('&lat', staticlink);
            setMapUrls(urlarr[0]+tmplink);
        }
        else {
            setMapUrls(staticlink+tmplink);
        }
    }

    setCopyButtons();

}

/* Activate Zero Clipboard Component */
$(document).ready( function () {
    ZeroClipboard.setMoviePath(staticHost + 'maps/swf/ZeroClipboard10.swf');
    AClip = new ZeroClipboard.Client();
    AClip.setText( '' );
    AClip.setHandCursor( true );
    HClip = new ZeroClipboard.Client();
    HClip.setText( '' );
    HClip.setHandCursor( true );
    ResizeMPanel();
});


/* Set Copy Data For Copy Buttons */
function setCopyButtons() {
    $('div#clip').mouseover( function() {
        AClip.setText( document.getElementById('maplink').value );
        if (AClip.div) {
            AClip.receiveEvent('mouseout', null);
            AClip.reposition(this);
        }
        else AClip.glue(this);
        AClip.receiveEvent('mouseover', null);
    } );

    $('div#cliphtml').mouseover( function() {
        HClip.setText( document.getElementById('html_maplink').value );
        if (HClip.div) {
            HClip.receiveEvent('mouseout', null);
            HClip.reposition(this);
        }
        else HClip.glue(this);
        HClip.receiveEvent('mouseover', null);
    } );
}

//act_zoom, act_name;

/* Set Last Action */
function SetLastAction(a_name) {
    act_zoom = gmap.getZoom();
    act_name = a_name;
}

/* Get Last Action */
function GetLastAction() {
    return(new Array(act_zoom, act_name));
}

/* Check Actions For Maps Logics */
function CheckActions(n_name) {
    
    // FIFO Actions
    if(n_name != second_name) {
        first_name = second_name;
        second_name = n_name;
        act_name = n_name;
        //alert('NewAction!!!');
    } //else alert('OldAction!!!');

    // Default Reset
    var reset = true;

    // From Load Without Objects
    if(first_name == 'load' && second_name !== 'objects') { //&& second_name !== 'gobjects'){
	//alert('New->Load');
        reset = false;
    }

    // From Search To Search
//    if(second_name == 'search' && n_name == 'search'){
//        //ResetLayers();
//        reset = false;
//        alert('Search->Search');
//    }

    // From Route To Search
    if(first_name == 'route' && second_name == 'search'){
    	//alert('Route->Search');
        reset = false;
    }

    // From Route To Objects
    if(first_name == 'route' && second_name == 'objects'){
        //alert('Route->Objetcs');
        reset = false;
    }

    // From Search To Objects
    if(first_name == 'search' && second_name == 'objects'){
        //alert('Search->Objects');
        reset = false;
    }

    // From Route To Google Objects
    if(first_name == 'route' && second_name == 'gobjects'){
        //alert('Route->GObjetcs');
        reset = false;
    }

    // From Search To Google Objects
    if(first_name == 'search' && second_name == 'gobjects'){
        //alert('Search->GObjects');
        reset = false;
    }

    // From Load To Visiom Objects
    if(first_name == 'load' && second_name == 'objects'){
        //alert('Load->UkrObjects');
        reset = false;
    }

    // From TYPE To TYPE Without Google Objects
    if(n_name == second_name && n_name != 'gobjects'){
        //alert('Type->Type');
        reset = false;
    }

    // Go Reset
    if(reset == true) ResetLayers();

    return false;
}

/* Reset Layers */
function ResetLayers() {
    //alert('Reset!');
    gmap.clearOverlays();
    CreateUkrRect();
}

/* Create Urkaine In Rectangle */
function CreateUkrRect() {
            // Ukraine Polygone
            polygon = new GPolygon([
            new GLatLng(51.5429188223739, 23.609619140625),
            new GLatLng(51.93749209045435, 25.1806640625),
            new GLatLng(51.41976382669734, 30.30029296875),
            new GLatLng(52.06600028274635, 31.036376953125),
            new GLatLng(52.34205163638784, 33.81591796875),
            new GLatLng(50.359480346298696, 35.79345703125),
            new GLatLng(50.40151532278236, 37.5732421875),
            new GLatLng(49.59647007089266, 40.18798828125),
            new GLatLng(47.81315451752768, 39.781494140625),
            new GLatLng(47.56911375866714, 38.375244140625),
            new GLatLng(45.0502402697946, 37.08984375),
            new GLatLng(44.24519901522129, 33.837890625),
            new GLatLng(45.413876460821086, 28.223876953125),
            new GLatLng(46.4605655457854, 29.06982421875),
            new GLatLng(46.384833223492755, 30.157470703125),
            new GLatLng(47.945786463687185, 29.02587890625),
            new GLatLng(48.42191010942875, 27.740478515625),
            new GLatLng(47.73193447949174, 24.906005859375),
            new GLatLng(47.938426929481054, 22.939453125),
            new GLatLng(48.39273786659243, 22.1484375),
            new GLatLng(49.50380954152213, 22.67578125),
            new GLatLng(50.499452103967734, 24.114990234375),
            new GLatLng(51.5429188223739, 23.609619140625)
//            ], "#f33f00", 5, 1, "#ff0000", 0.2);
              ], "#000000", 0, 0, "#000000", 0.0);
            gmap.addOverlay(polygon);
}

function imgClick(expid, i) {
    var chbox = document.getElementById('ch'+i);
    
    if(chbox.checked) chbox.checked = false ;
    else chbox.checked = true ;

    if(chbox) ManageVisicomPOI(expid, i, chbox);
}


/* Create Marker Functions */
function SearchMarker(lat, lng, title, desc, page, is) {
    var psInfo = '<div class="markers">';
        psInfo += '<b>' + title + '</b><br>';
        psInfo += desc;
        psInfo += '</div>';
    var psKey = is+1+(page*8);

    var psIcon = new GIcon(G_DEFAULT_ICON);
        psIcon.iconSize = new GSize(24,38);
        psIcon.shadowSize = new GSize(34, 38);
        psIcon.shadow = staticHost+'maps/images/redShad.png';
        psIcon.image = staticHost + "maps/images/red" + psKey + ".png";

    var psOptions = {icon:psIcon};
    var psPoint = new GLatLng(lat, lng);
    var psmarker = new GMarker(psPoint, psOptions);

    GEvent.addListener(psmarker, "click", function() {
        psmarker.openInfoWindowHtml(psInfo);
    });

    gmap.addOverlay(psmarker);
}

/* Create Google POI Marker Functions */
function GPoiMarker(lat, lng, title, desc) {
    var pgInfo = '<div class="markers">';
        pgInfo += '<b>' + title + '</b><br>';
        pgInfo += desc;
        pgInfo += '</div>';

    var pgIcon = new GIcon(G_DEFAULT_ICON);
        pgIcon.iconSize = new GSize(24,38);
        pgIcon.shadowSize = new GSize(34, 38);
        pgIcon.shadow = staticHost+'maps/images/redShad.png';
        pgIcon.image = staticHost + "maps/images/google_poi.png";

    var pgOptions = {icon:pgIcon};
    var pgPoint = new GLatLng(lat, lng);
    var pgmarker = new GMarker(pgPoint, pgOptions);

    GEvent.addListener(pgmarker, "click", function() {
        pgmarker.openInfoWindowHtml(pgInfo);
    });

    gmap.addOverlay(pgmarker);
}

/* Create Visicom POI Marker Functions */
function VisicomMarker(lat, lng, title, desc, img) {
    var pvInfo = '<div class="markers">';
        pvInfo += '<b>' + title + '</b><br>';
        pvInfo += desc;
        pvInfo += '</div>';

    var mid = img;
    if(mid == 6401 || mid == 6402 || mid == 6403 || mid == 6404 || mid == 4103) mid = 1409;

    var pvIcon = new GIcon(G_DEFAULT_ICON);
        pvIcon.iconSize = new GSize(22,22);
        pvIcon.shadowSize = new GSize(0, 0);
        pvIcon.shadow = staticHost+'maps/images/redShad.png';
        pvIcon.image =  staticHost + "maps/images/"+mid+".png";

    var pvOptions = {icon:pvIcon};
    var pvPoint = new GLatLng(lat, lng);
    var pvmarker = new GMarker(pvPoint, pvOptions);

    GEvent.addListener(pvmarker, "click", function() {
        pvmarker.openInfoWindowHtml(pvInfo);
    });

    gmap.addOverlay(pvmarker);
}

/* Geocoding -- Find country and city */
var TravelLocation= function(keyword, zoom) {

    CheckActions('search');

    /* Set search country or city */
    googeo.getLocations(keyword, function (result)
      {
        gmap.clearOverlays();
        if (result.Status.code == G_GEO_SUCCESS) {
            var p = result.Placemark[0].Point.coordinates;
            gmap.setCenter(new GLatLng(p[1],p[0]), zoom);
        }
      }
    );
  }
