var map = false;
var baseIcon = false;
var toggleState = 1;
var geoXml = false;
var myLastPoint = false;
var marker = false;
var popupFx = null;
var oForm = false;
var lat = parseFloat(0);
var lng= parseFloat(0);
window.addEvent('domready', function(){
    oForm = document.forms['mainform'];
});

function initialize(div){
    if (GBrowserIsCompatible()) {
        baseIcon = new GIcon();
        map = new GMap2(document.getElementById(div));
        /*map.addControl(new google.maps.LocalSearch(), new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(10, 20)));*/
        
        //map.enableGoogleBar();
        
        map.setUIToDefault();
        baseIcon.image = DIR_STATIC_SKIN + "/img/icons/marker.png";
        baseIcon.shadow = DIR_STATIC_SKIN + "/img/icons/shadow.png";
        baseIcon.iconSize = new GSize(20, 34);
        baseIcon.shadowSize = new GSize(37, 34);
        baseIcon.iconAnchor = new GPoint(9, 34);
        baseIcon.infoWindowAnchor = new GPoint(9, 2);
        baseIcon.infoShadowAnchor = new GPoint(18, 25);
        add_custom_map(map);
        
    }
}

function createMarker(latlng, message, options){
    if (options) 
        options = {
            draggable: true,
            icon: baseIcon
        };
    else 
        options = {
            icon: baseIcon
        };
    var marker = new GMarker(latlng, options);
    GEvent.addListener(marker, "click", function(){
        marker.openInfoWindowHtml(message);
    });
    return marker;
}

function mapFilter(filter, mode, type){
    map.clearOverlays();
    var path;
    var tmp;
	
	var filt = encodeURI(filter);//.replace(/\'/g, "&#39;");
	//if (mode) if (filt.indexOf('&#39;')>-1) return;
    (type) ? tmp = "" + type + "/" + filt : tmp = "common/" + filt;
    (mode) ? path = "/map/kml/?" + mode + "=" + filt + "" : path = "/map/point/" + tmp + "";
    GDownloadUrl(DIR_WEB_ROOT + "" + path + "", function(data, responseCode){
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("placemark");
        var length = markers.length;
        for (var i = 0; i < length; i++) {
            lat = parseFloat(lat + parseFloat(markers[i].getElementsByTagName("lat")[0].firstChild.data));
            lng = parseFloat(lng + parseFloat(markers[i].getElementsByTagName("lng")[0].firstChild.data));
            var point = new GLatLng(parseFloat(markers[i].getElementsByTagName("lat")[0].firstChild.data), parseFloat(markers[i].getElementsByTagName("lng")[0].firstChild.data));
            var message = '<div style="min-height: 160px"><h2>' + markers[i].getElementsByTagName("name")[0].firstChild.data + '</h2>' + '<b>Заметка:</b>' + markers[i].getElementsByTagName("description")[0].firstChild.data + '<br/>';
            if (markers[i].getElementsByTagName("author")[0]) {
                var author = markers[i].getElementsByTagName("author")[0].firstChild.data;
                message += '<b>Автор:</b><a href="' + DIR_WEB_ROOT + '/profile/' + author + '/">' + author + '</a>';
            }
            if (markers[i].getElementsByTagName("company")[0]) {
                var company = markers[i].getElementsByTagName("company")[0].firstChild.data;
                message += '<a href="' + DIR_WEB_ROOT + '/company/' + company + '/"><b>Страница компании¸</b></a>';
            }
			message +='<div style="clear: both"></div></div>';
            //tmp
            
            map.addOverlay(createMarker(point, "" + message + ""));
            //map.addOverlay(new GMarker(point));
//alert(lat,lng);

        }
        lat = parseFloat(lat / length);
        lng = parseFloat(lng / length);
        map.panTo(new GLatLng(lat,lng));
        lat = parseFloat(0);
        lng=parseFloat(0);	
    });
}

function mapModal(id, mode, type){
    var content = new Element('div', {
        id: 'modal'
    });
    var mapCanvas = (new Element('div', {
        id: 'map_canvas'
    })).inject(content);
    mapCanvas.setStyle('width', parseInt(screen.width / 1.2));
    mapCanvas.setStyle('height', parseInt(screen.height / 1.6));
    
    //mapCanvas.inject(content);
    (new Element('span')).appendText('Положение объекта на карте').inject(content);
   var close = new Element('input', {
        value: 'Закрыть',
        type: 'submit'
    });
	close.set('value','Закрыть');
    close.addEvent('click', function(){
        closeModal();
    });
    //var close ="<input type='button' value='Закрыть' onclick='closeModal()' />"
    close.inject(content);
    window.addEvent("domready", function(){
        popupFx = new MoodalBox("Popup", "Overlay", content);
        initialize("map_canvas");
    });
    mapFilter(id, mode, type);
    popupFx.show();
}

function mapModalEdit(mode, id, eP, type){

    var content = new Element('div', {
        id: 'modal'
    });
    var mapCanvas = (new Element('div', {
        id: 'map_canvas'
    })).inject(content);
    mapCanvas.setStyle('width', parseInt(screen.width / 2));
    mapCanvas.setStyle('height', parseInt(screen.height / 3));
    var save = new Element('input', {
        value: 'Сохранить',
        type: 'submit'
    });
	save.set('value','Сохранить');
	save.addEvent('click', function(){
        mapSetPosition();
    });
    save.inject(content);
	
    var close = new Element('input', {
        value: 'Закрыть',
        type: 'submit'
    });
	close.set('value','Закрыть');
    close.addEvent('click', function(){
        closeModal();
    });
    //var close ="<input type='button' value='Закрыть' onclick='closeModal()' />"
    close.inject(content);
    window.addEvent("domready", function(){
        popupFx = new MoodalBox("Popup", "Overlay", content);
        initialize("map_canvas");
    });
    map.removeOverlay(geoXml);
    geoXml = false;
    var options = true;
    var tmp;
    (type) ? tmp = "" + type + "/" + id : tmp = "common/" + id;
    (mode) ? path = "/map/kml/?" + mode + "=" + id + "" : path = "/map/point/" + tmp + "";
    if (eP &&
    GDownloadUrl(DIR_WEB_ROOT + "" + path + "", function(data, responseCode){
        var xml = GXml.parse(data);
        var markers = xml.documentElement.getElementsByTagName("placemark");
        var lat = parseFloat(markers[0].getElementsByTagName("lat")[0].firstChild.data);
        var lng = parseFloat(markers[0].getElementsByTagName("lng")[0].firstChild.data);
        var point = new GLatLng(lat, lng);
        var message = markers[0].getElementsByTagName("name")[0].firstChild.data + "<br />" + markers[0].getElementsByTagName("description")[0].firstChild.data;
        marker = createMarker(point, message, options);
        map.addOverlay(marker);
        map.panTo(new GLatLng(lat, lng));
        GEvent.addListener(marker, "dragstart", function(){
            map.closeInfoWindow();
        });
        GEvent.addListener(marker, "drag", function(){
            myLastPoint = marker.getPoint()
        });
        GEvent.addListener(marker, "dragend", function(){
            var myHtml = "Latitude: " + myLastPoint.lat() + "<br/>Longitude: " + myLastPoint.lng() +
            "<br/> at zoom level " +
            map.getZoom();
            marker.openInfoWindow(myHtml);
        });
        if (!lat || !lng) 
            return false;
    })) {
        marker.draggable = true;
    }
    else {
        mapMakeClickable();
    }
    popupFx.show();
}

function mapMakeClickable(){
    GEvent.addListener(map, "click", function(overlay, latlng){
        if (overlay) {
            return;
        }
        map.removeOverlay(marker);
        myLastPoint = latlng;
        var myHtml = "Latitude: " + latlng.lat() + "<br/>Longitude: " + latlng.lng() +
        "<br/> at zoom level " +
        map.getZoom();
        marker = createMarker(latlng, 'marker');
        map.addOverlay(marker);
        map.openInfoWindowHtml(latlng, myHtml);
    });
    
}

function mapSetPosition(){
    if (myLastPoint) {
        oForm.point_lat.value = myLastPoint.lat();
        oForm.point_lng.value = myLastPoint.lng();
    }
    //alert(myLastPoint);
    /*(new Element('input', {
     'type': 'hidden',
     'value': myLastPoint.lat(),
     'name': 'point_lat'
     })).inject(oForm);
     (new Element('input', {
     'type': 'hidden',
     'value': myLastPoint.lng(),
     'name': 'point_lng'
     })).inject(oForm);*/
    popupFx.hide();
}

function closeModal(){
    popupFx.hide();
}


function add_custom_map(map){
    var copyright = new GCopyright(1, new GLatLngBounds(new GLatLng(52.87399965383824, 41.3157176971435757), new GLatLng(52.67468726105585, 41.59792900085449)), 14, "itambov");
    var copyrightCollection = new GCopyrightCollection('Map Data:');
    copyrightCollection.addCopyright(copyright);
    var tilelayers = [new GTileLayer(copyrightCollection, 0, 19)];
    tilelayers[0].getTileUrl = CustomGetTileUrl;
    tilelayers[0].getCopyright = function(a, b){
        var c = copyrightCollection.getCopyrightNotice(a, b);
        if (!c) {
            c = G_NORMAL_MAP.getTileLayers()[0].getCopyright(a, b);
        }
        return c;
    }
    var custommap = new GMapType(tilelayers, new GMercatorProjection(20), "Live.com", {
        shortName: "live"
    });
    
    map.addMapType(custommap);
    
    var tilelayers2 = [tilelayers[0], G_HYBRID_MAP.getTileLayers()[1]];
    var custommap2 = new GMapType(tilelayers2, new GMercatorProjection(20), "LiveГибрид", {
        shortName: "LiveH"
    });
    map.addMapType(custommap2);
    map.setCenter(new GLatLng(52.7271, 41.4253), 14, custommap2);
    
    var hierarchy = new GHierarchicalMapTypeControl();
    hierarchy.addRelationship(custommap, custommap2, "Гибрид", false);
    
    //map.addControl(hierarchy);
}

Alpha = new Array(20);
function CustomGetTileUrl(a, b){
    if (0 == 0) {
        x = a.x;
        y = a.y;
        z = b;
        AX = 0;
        AY = 0;
        BX = Math.pow(2, z) - 1;
        BY = BX;
        for (j = 0; j <= z - 1; j++) {
            Alpha[j] = 0;
            centerX = (BX - AX) / 2 + AX;
            centerY = (BY - AY) / 2 + AY;
            if (x > centerX) {
                Alpha[j] = Alpha[j] + 1;
            };
            if (y > centerY) {
                Alpha[j] = Alpha[j] + 2;
            };
            switch (Alpha[j]) {
                case 0:
                    BX = centerX;
                    BY = centerY;
                    break;
                case 1:
                    AX = centerX;
                    BY = centerY;
                    break;
                case 2:
                    AY = centerY;
                    BX = centerX;
                    break;
                case 3:
                    AX = centerX;
                    AY = centerY;
                    break;
            }
        }
        s = '';
        
        for (j = 0; j <= z - 1; j++) {
            s = s + (Alpha[j]);
        }
        
        
        
        
        
        
        
        return "http://ecn.t" + Alpha[z - 1] + ".tiles.virtualearth.net/tiles/a" + s + ".jpeg?g=282&mkt=en-us";
    }
    else 
        return G_SATELLITE_MAP.getTileLayers()[0].getTileUrl(a, b);
}

//function get
