﻿if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(obj) {
        for (var i = 0; i < this.length; i++) {
            if (this[i].toLowerCase() == obj.toLowerCase())
                return i;
        }
        return -1;
    };
}


google.load("maps", "2.140", { "other_params": "sensor=true" });

var CustomersOnMap;
var MarkersOnMap = [];
var VeluxIcon;
var gMap;
var gGeo;
var pageloaded = false;
var globalsearchmarker;
var globalmarkers = new Array();
var clickedmarker;


function VelMarker() {
    this.id;
    this.lat;
    this.lng;
    this.icon;
    this.point;
    this.name;
    this.address;
    this.town;
    this.phones;
    this.url;
    this.logo;
    this.showinfo = true;
    this.properties = [];
    this.products = new Array();
    this.overlay;
    this.display = true;
}

function ToggleMap() {
    var DealerList = querySt("DealerList");
    var dlist = "#MapDealersList";
    if (DealerList == "NewStyle") {
        dlist = "#MapDealersListNew";
    }


    if ($(dlist).is(":hidden")) {
        $("#ListLink").text("Вернуться к карте");
        $("#GoogleMap").fadeOut("fast");
        $("#SearchZone").fadeOut("fast");
        $("#helpblock").fadeOut("fast");
        $(dlist).fadeIn("slow");
    } else {
        $("#ListLink").text("Перейти к списку");

        $(dlist).hide();
        $("#GoogleMap").fadeIn("slow");
        $("#SearchZone").fadeIn("slow");
        $("#helpblock").fadeIn("slow");
    }

}

function product(group, code, desc) {
    this.group = group;
    this.code = code;
    this.desc = desc;
}

function DrawMarkers() {

    if (!pageloaded) {
        $('#helpblock').fadeIn('slow');
        $('#helpblock #startuse').fadeIn('slow');
        pageloaded = true;
    }

    var markers = CustomersOnMap.documentElement.getElementsByTagName("Customer");

    if (markers.length > 0) {


        for (var i = 0; i < markers.length; i++) {


            var velmarker = new VelMarker();
            velmarker.id = markers[i].getAttribute("id");
            velmarker.lat = parseFloat(markers[i].getElementsByTagName("crd")[0].getAttribute("lat"));
            velmarker.lng = parseFloat(markers[i].getElementsByTagName("crd")[0].getAttribute("lng"));
            velmarker.name = markers[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;

            velmarker.logo = Boolean.parse(markers[i].getElementsByTagName("logo")[0].childNodes[0].nodeValue);

            velmarker.address = markers[i].getElementsByTagName("addr")[0].childNodes[0].nodeValue;
            if (markers[i].getElementsByTagName("phn")[0].childNodes[0] != null) {
                velmarker.phone = markers[i].getElementsByTagName("phn")[0].childNodes[0].nodeValue;
            }
            if (markers[i].getElementsByTagName("url")[0].childNodes[0] != null) {
                velmarker.url = markers[i].getElementsByTagName("url")[0].childNodes[0].nodeValue;
            }

            velmarker.icon = VeluxIcon;
            velmarker.showinfo = true;
            var products = markers[i].getElementsByTagName("prd");

            if (products != null) {
                if (products.length > 0) {

                    for (var a = 0; a < products.length; a++) {

                        velmarker.products[a] = new product(products[a].getAttribute("g"), products[a].getAttribute("m"), products[a].getAttribute("d"));
                    }
                }
            }


            if (markers[i].getElementsByTagName("prop")[0].childNodes.length > 0) {
                if (markers[i].getElementsByTagName("prop")[0].childNodes[0] != null) {

                    if (markers[i].getElementsByTagName("prop")[0].childNodes[0].nodeValue.length > 0) {
                        velmarker.properties = markers[i].getElementsByTagName("prop")[0].childNodes[0].nodeValue.split(',');
                    }
                }
            }

            velmarker.point = new GLatLng(velmarker.lat, velmarker.lng);


            if (MarkersOnMap[velmarker.id] != velmarker.id) {
                MarkersOnMap[velmarker.id] = velmarker.id;
                var marker = CreateMarker(velmarker);

                gMap.addOverlay(marker);

                velmarker.overlay = marker;

                globalmarkers[velmarker.id] = velmarker;

            }
        }

        MarkersToProperties();
        $('#UpdateProgress1').hide();
    }


}
function GetUserLocation() {
    $('#UpdateProgress1').show();
    var uip = $('#HiddenIp').val().replace(/write/gi, "");
    uip = uip.replace(/write/gi, "");

    $.ajax({
        type: "Get",
        cache: false,
        contentType: "text/xml; charset=\"utf-8\"",
        url: "http://dealers.veluxdesign.ru/Map/MapApi/CurrentLocation.aspx",
        data: { ip: uip },
        dataType: "xml",
        success: function(msg) {
            var data = msg.getElementsByTagName("Response")[0];
            var lat = parseFloat(data.getElementsByTagName("Latitude")[0].childNodes[0].nodeValue);
            var lng = parseFloat(data.getElementsByTagName("Longitude")[0].childNodes[0].nodeValue);

            gMap.setCenter(new GLatLng(lat, lng), 12);
            $('#UpdateProgress1').hide();
        },

        error: function(msg) {
            $('#UpdateProgress1').hide();
            alert("Error: " + msg.responseText);

        }

    });
}

function CreateMarker(m) {

    var marker = new GMarker(m.point, m.icon);
    if (m.showinfo) {
        var infowindow = '<div class="GoogleMarker">';

        if (m.logo == true) {
            infowindow += '<img src="/Images2/logos/' + m.id + '.jpg" />';
        }

        infowindow += '<b>' + m.name + '</b><br>' + m.address;
        if (m.phone != null) {
            infowindow += "<br>" + m.phone;
        }

        if (m.properties.length > 0) {
            infowindow += '<br><b>Услуги</b><ul>';
            for (var i = 0; i < m.properties.length; i++) {
                if (m.properties[i].length > 0) {
                    infowindow += '<li>' + m.properties[i] + '</li>';
                }
            }
            infowindow += '</ul>';
        }

        if (m.url != null) {
            infowindow += '<br><a href="' + m.url + '" target="_blank">Перейти на сайт компании</a>';
        }




        marker.tooltip = m;


        if (m.products.length > 0) {

            var prods = '<div class="GoogleMarker">В этом магазине представлены<br />следующие образцы продукции<ul>';
            var oldprod = "";
            for (var i = 0; i < m.products.length; i++) {
                if (oldprod != m.products[i].code.split(' ')[0]) {
                    prods += "<li>" + m.products[i].desc + " " + m.products[i].code.split(' ')[0] + "</li>";
                    oldprod = m.products[i].code.split(' ')[0];
                }
            }
            prods += "</ul></div>"

            var infoTabs = [new GInfoWindowTab("Контакты", infowindow), new GInfoWindowTab("Посмотреть", prods)];
            // var infoTabs = [new GInfoWindowTab("Контакты", infowindow)];
        } else {
            var infoTabs = [new GInfoWindowTab("Контакты", infowindow)];
        }
    }


    GEvent.addListener(marker, "click", function() {

        $('#helpblock').fadeOut('slow');
        clickedmarker = marker;
        marker.openInfoWindowTabsHtml(infoTabs);
        // gMap.panTo(marker.getLatLng());
    });

    var MarkerZone = $('#MarkerZone');

    GEvent.addListener(marker, "mouseover", function() {

        MarkerZone.html('<b>' + marker.tooltip.name + '</b>');

        MarkerZone.fadeIn("fast");


    });
    GEvent.addListener(marker, "mouseout", function() {
        MarkerZone.hide();
    });


    GEvent.addListener(marker, "infowindowopen", function() {


    });


    return marker;


}




function MarkersToProperties() {

    var prop10 = $('#CheckBoxList1_0').is(':checked');
    var prop11 = $('#CheckBoxList1_1').is(':checked');
    var prop12 = $('#CheckBoxList1_2').is(':checked');
    var prop13 = $('#CheckBoxList1_3').is(':checked');
    var prop14 = $('#CheckBoxList1_4').is(':checked');
    var prop15 = $('#CheckBoxList1_5').is(':checked');

    var prop20 = $('#CheckBoxList2_0').is(':checked');
    var prop21 = $('#CheckBoxList2_1').is(':checked');
    var prop22 = $('#CheckBoxList2_2').is(':checked');
    var prop23 = $('#CheckBoxList2_3').is(':checked');


    $('.cblock').each(function () {

        if (prop10 || prop11 || prop12 || prop13 || prop14 || prop15 || prop20 || prop21 || prop22 || prop23) {

            var str = $("input", this).val().replace(/write/gi, "");
            str = str.replace(/write/gi, "");
            if (
                        str.indexOf("Установка окон") == -1 && prop10
                       || str.indexOf("Наличие на складе") == -1 && prop11
                       || str.indexOf("Постгарантийное обслуживание") == -1 && prop12
                       || str.indexOf("Продажа штор и аксессуаров") == -1 && prop13
                       || str.indexOf("Консультации по комплексным решениям") == -1 && prop14
                       || str.indexOf("Окраска окон") == -1 && prop15
                       || str.indexOf("VRW") == -1 && str.indexOf("100") == -1 && str.indexOf("BOM") == -1 && prop20
                       || str.indexOf("INS") == -1 && str.indexOf("FLA") == -1 && str.indexOf("600") == -1 && prop21
                       || str.indexOf("DSP") == -1 && str.indexOf("400") == -1 && str.indexOf("300") == -1 && prop22
                       || str.indexOf("VRS") == -1 && str.indexOf("410") == -1 && prop23) {

                $(this).fadeOut("fast");
            } else {
                $(this).fadeIn("fast");
            }

        } else {
            $(this).fadeIn("fast");
        }

    });


    for (var i = 0; i < globalmarkers.length; i++) {
        var m = globalmarkers[i];
        if (m != null) {

            if (prop10 || prop11 || prop12 || prop13 || prop14 || prop15 || prop20 || prop21 || prop22 || prop23) {
                var prods = [];
                if (m.products != null) {
                    for (var a = 0; a < m.products.length; a++) {
                        if (m.products[a].group != null) {
                            prods[a] = m.products[a].group;
                        }
                    }
                }
                var str = m.properties.join(',') + ',' + prods.join(',');
                if (
                        str.indexOf("Установка окон") == -1 && prop10
                       || str.indexOf("Наличие на складе") == -1 && prop11
                       || str.indexOf("Постгарантийное обслуживание") == -1 && prop12
                       || str.indexOf("Продажа штор и аксессуаров") == -1 && prop13
                       || str.indexOf("Консультации по комплексным решениям") == -1 && prop14
                       || str.indexOf("Окраска окон") == -1 && prop15
                       || str.indexOf("VRW") == -1 && str.indexOf("100") == -1 && str.indexOf("BOM") == -1 && prop20
                       || str.indexOf("INS") == -1 && str.indexOf("FLA") == -1 && str.indexOf("600") == -1 && prop21
                       || str.indexOf("DSP") == -1 && str.indexOf("400") == -1 && str.indexOf("300") == -1 && prop22
                       || str.indexOf("VRS") == -1 && str.indexOf("410") == -1 && prop23) {
                    gMap.removeOverlay(m.overlay);
                    globalmarkers[i].display = false;
                } else {

                    if (!globalmarkers[i].display) {
                        gMap.addOverlay(m.overlay);
                    }
                    globalmarkers[i].display = true;
                }
            } else {
                if (!globalmarkers[i].display) {
                    gMap.addOverlay(m.overlay);
                }
                globalmarkers[i].display = true;
            }

        }

    }

}

function RemoveMarker(velmarker) {

    gMap.removeOverlay(velmarker.mapmarker);
    globalmarkers[velmarker.id] = null;
}

function NavigateLocation(p1, p2) {

    var searchmarker = new VelMarker();
    var searchstr = $('#TextBoxSearch').val();
    searchstr = searchstr.replace(/write/gi, "").replace(/write/gi, "");

    searchmarker.id = "searchmarker";
    searchmarker.showinfo = false;
    searchmarker.lat = p1;
    searchmarker.lng = p2;
    searchmarker.point = new GLatLng(p1, p2);
    searchmarker.icon = VeluxIcon;
    globalsearchmarker = searchmarker;
    gMap.setCenter(searchmarker.point, 12);
    gMap.openInfoWindowHtml(searchmarker.point, searchstr);
    
    
    
}

function SearchLocation(search) {
    $('#UpdateProgress1').show();
    $('#helpblock').fadeOut('slow');
    if (search == null) {
        var search = $('#TextBoxSearch').val();
        search = search.replace(/write/gi, "").replace(/write/gi, "");

    }
    gGeo.getLocations(search, function(result) {


        if (result.Status.code == G_GEO_SUCCESS) {

            if (result.Placemark.length > 1) {

                var links = "Пожалуйста, уточните адрес:<ul>";
                for (var i = 0; i < result.Placemark.length; i++) {
                    var p = result.Placemark[i].Point.coordinates;
                    var found = result.Placemark[i];
                    links += "<li><a href='javascript:NavigateLocation(" + p[1] + "," + p[0] + ")'>" + found.address + "</a></li>";
                }
                links += "</ul>";
                $('#helpblock .hb_center #SearchResults').html(links);
                $('#helpblock').fadeIn('slow');
                $('#helpblock .hb_center div').hide();
                $('#helpblock .hb_center #SearchResults').fadeIn('slow');

            } else if (result.Placemark.length == 1) {
                var p = result.Placemark[0].Point.coordinates;

                var searchmarker = new VelMarker();
                searchmarker.showinfo = false;
                searchmarker.lat = p[1];
                searchmarker.lng = p[0];
                searchmarker.point = new GLatLng(p[1], p[0]);
                searchmarker.icon = VeluxIcon;
                CreateMarker(searchmarker);

                gMap.setCenter(searchmarker.point, 12);
                gMap.openInfoWindowHtml(searchmarker.point, search);

            }

        } else {

            var error = "<b>Ошибка</b><br>Не получилось найти адрес. Попробуйте упростить поиск.";
            $('#helpblock .hb_center #SearchResults').html(error);
            $('#helpblock').fadeIn('slow');
            $('#helpblock .hb_center div').hide();
            $('#helpblock .hb_center #SearchResults').fadeIn('slow');
        }

    }
        );

    $('#UpdateProgress1').hide();
}


function onEnter(evt, frm) {
    var keyCode = null;

    if (evt.which) {
        keyCode = evt.which;
    } else if (evt.keyCode) {
        keyCode = evt.keyCode;
    }
    if (13 == keyCode) {
        SearchLocation();
        return false;
    }
    return true;
}


function RequestBoundsCustomers() {
    var bounds = gMap.getBounds();
    $('#PrintLink').attr("href", "PrintMap.aspx?bounds=" + gMap.getCenter().toUrlValue() + "&z=" + gMap.getZoom() + "&b1=" + bounds.getNorthEast().toUrlValue() + "&b2=" + bounds.getSouthWest().toUrlValue());
    $.ajax({
        type: "Get",
        cache: false,
        contentType: "text/xml; charset=\"utf-8\"",
        url: "/Map/MapApi/CustomersList.aspx",
        data: { b1: bounds.getNorthEast().toUrlValue(), b2: bounds.getSouthWest().toUrlValue() },
        dataType: "text",
        success: function(msg) {

            CustomersOnMap = GXml.parse(msg);
            DrawMarkers();
        },

        error: function(msg) {

            alert("Error: " + msg.responseText);
        }

    });


}


$(document).ready(

    function() {

        $('#ListSelector').mouseover(function() {

            MarkersToProperties();
        });

        $('#UpdateProgress1').show();
        if (GBrowserIsCompatible()) {
            gMap = new GMap2(document.getElementById('GoogleMap'), { });
            gMap.addControl(new GLargeMapControl());
            gMap.enableDoubleClickZoom();
            gMap.enableContinuousZoom();
            gMap.enableScrollWheelZoom();
            gGeo = new GClientGeocoder();


            VeluxIcon = new GIcon();
            VeluxIcon.image = "/Images/marker-logo.png";
            VeluxIcon.shadow = "/Images/marker-shadow.png";
            VeluxIcon.iconSize = new GSize(45, 26);
            VeluxIcon.shadowSize = new GSize(45, 26);
            VeluxIcon.iconAnchor = new GPoint(7, 24);
            VeluxIcon.infoWindowAnchor = new GPoint(7, 24);
            VeluxIcon.infoShadowAnchor = new GPoint(18, 25);
            VeluxIcon.transparent = "";
            VeluxIcon.printImage = "";
            VeluxIcon.mozPrintImage = "";

            var centr = new GLatLng($('#HiddenCenterMap').val().replace(/script/gi, "").replace(/write/gi, "").split(',')[0], $('#HiddenCenterMap').val().replace(/script/gi, "").replace(/write/gi, "").split(',')[1]);

            gMap.setCenter(centr, 12);

            RequestBoundsCustomers();


            // GoogleMap Events Listener

            GEvent.addListener(gMap, "moveend", function() {
                $('#helpblock').fadeOut('slow');
                RequestBoundsCustomers();



            });

        }



    }
    );



function querySt(ji) {
    hu = window.location.search.substring(1);
    gy = hu.split("&");
    for (i = 0; i < gy.length; i++) {
        ft = gy[i].split("=");
        if (ft[0] == ji) {
            return ft[1];
        }
    }
}




function GetStores(p) {

    $.ajax({
        type: "Get",
        cache: false,
        contentType: "text/xml; charset=\"utf-8\"",
        url: "/Map/MapApi/CustomersByDistance.aspx",
        data: { lat: p[1], lng: p[0], radius: 10, models: 'GGL,GGU', searchstring: $('#TextBoxDealersListAddress').val().replace(/script/gi, "").replace(/write/gi, ""), Country: querySt('Country') },
        dataType: "text",
        success: function(msg) {
            CustomersOnMap = GXml.parse(msg);
            var markers = CustomersOnMap.documentElement.getElementsByTagName("Customer");
            var dealers = "";

            if (markers.length > 0) {


                for (var i = 0; i < markers.length; i++) {
                    var did = markers[i].getAttribute("id");
                    var dist = parseFloat(markers[i].getElementsByTagName("distance")[0].childNodes[0].nodeValue);
                    var distance = markers[i].getElementsByTagName("distance")[0].childNodes[0].nodeValue;
                    var compname = markers[i].getElementsByTagName("name")[0].childNodes[0].nodeValue;
                    var props = '';
                    if (markers[i].getElementsByTagName("prop")[0].childNodes[0] != null) {
                        props = markers[i].getElementsByTagName("prop")[0].childNodes[0].nodeValue;
                    }
                    var prod = '';
                    if (markers[i].getElementsByTagName("product")[0].childNodes[0] != null) {
                        prod = '<br/>Можно посмотреть стенд с окном '
                                        + markers[i].getElementsByTagName("product")[0].childNodes[0].nodeValue;
                    }

                    var img = '';
                    if (markers[i].getElementsByTagName("logo")[0].childNodes[0] != null) {
                        img = '<img src="/Images2/logos/'
                                        + markers[i].getElementsByTagName("logo")[0].childNodes[0].nodeValue + '" style="float: right;width:120px" />';
                    }

                    var geolink = '<br/><a href="javascript:ToggleMap(); gMap.setCenter(new GLatLng(' + parseFloat(markers[i].getElementsByTagName("crd")[0].getAttribute("lat")) + ', ' + parseFloat(markers[i].getElementsByTagName("crd")[0].getAttribute("lng")) + '),16);">Показать магазин на карте</a>';


                    var url = '';
                    if (markers[i].getElementsByTagName("url")[0].childNodes[0] != null) {
                        url = '<br/><a target="_blank" href="' + markers[i].getElementsByTagName("url")[0].childNodes[0].nodeValue + '">Перейти на сайт компании '
                                        + compname + '</a>';
                    }

                    var phn = '';
                    if (markers[i].getElementsByTagName("phn")[0].childNodes[0] != null) {
                        phn = '<br/>'
                                        + markers[i].getElementsByTagName("phn")[0].childNodes[0].nodeValue;
                    }


                    var services = '';
                    if (markers[i].getElementsByTagName("prop")[0].childNodes[0] != null) {
                        services = '<div style="padding:4px;float:left;width: 400px"><strong>Услуги:</strong><ul>';
                        for (var a = 0; a < markers[i].getElementsByTagName("prop")[0].childNodes[0].nodeValue.split(',').length; a++) {
                            var seritem = markers[i].getElementsByTagName("prop")[0].childNodes[0].nodeValue.split(',')[a];
                            if (seritem != '') {
                                services += '<li>' + seritem + '</li>';
                            }
                        }
                        services += '</ul></div>';
                    }

                    var products = markers[i].getElementsByTagName("prd");
                    var prodsblock = '';
                    if (products != null) {
                        if (products.length > 0) {
                            prodsblock = '<div style="padding:4px;float:left"><strong>Что посмотреть:</strong><ul>';

                            for (var a = 0; a < products.length; a++) {

                                prodsblock += '<li>' + products[a].getAttribute("d") + ' ' + products[a].getAttribute("m").split(' ')[0] + '</li>';
                                props += ','  +products[a].getAttribute("g");
                            }

                            prodsblock += '</ul></div>';
                        }
                    }


                    dealers += '<div class="cblock"><h3>' + distance + ' - ' +
                                       compname +
                                        '</h3>' + img + '<div style="float:left;width:450px">' +
                                             '' +
                                        markers[i].getElementsByTagName("addr")[0].childNodes[0].nodeValue +
                                       phn + url + geolink +
                                       '</div><div style="clear:both"></div>' + services + prodsblock + '<input type="hidden" value="' + props +
                                        '"></input><div style="clear:both;"></div></div>';
                }

            }
            $('#DealersListRadiusResults').html(dealers);
            MarkersToProperties();
        },

        error: function(msg) {
            var error = "<b>Ошибка</b><br>Не удалось найти ближайшие магазины.<br/>Попробуйте упростить адрес.";
            $('#DealersListRadiusResults').html(error);
           // alert(msg.responseText);
        }

    });


}

function SearchDealersListRadiusLocation(search, solo) {
    if (search == null) {
        search = $('#TextBoxDealersListAddress').val();
        search = search.replace(/script/gi, "").replace(/write/gi, "");
     //   alert(search);
    }
    if (solo == null) {
        solo = false;
    }
    var htmlresult = $('#DealersListRadiusResults');
    htmlresult.html('<img src="/Images/loading.gif" /> Подождите, производится поиск...');

    var illegalsearch = 'москва,санкт-петербург,санктпетербург,петербург,санкт-питербург,санктпитербург,питербург,екатеринбург,Краснодар,Воронеж,Казань';

    if (illegalsearch.split(',').indexOf(search) == -1) {


        gGeo.getLocations(search, function(result) {

            if (result.Status.code == G_GEO_SUCCESS) {

                if (result.Placemark.length > 1 && !solo) {

                    var links = "Пожалуйста, уточните адрес:<ul>";
                    for (var i = 0; i < result.Placemark.length; i++) {
                        var p = result.Placemark[i].Point.coordinates;
                        var found = result.Placemark[i];
                    
                            links += "<li><a href=\"javascript:SearchDealersListRadiusLocation('" + found.address + "', true)\">" + found.address + "</a></li>";
                        
                    }
                    links += "</ul>";
                    htmlresult.html(links);

                } else {

                    var p = result.Placemark[0].Point.coordinates;
                    $('#TextBoxDealersListAddress').val(result.Placemark[0].address);
                    GetStores(p);

                }

            } else {

                htmlresult.html("<b>Ошибка</b><br>Не удалось найти ближайшие магазины.<br/>Попробуйте упростить адрес.");

            }

        }
        );
    } else {

        htmlresult.html("Пожалуйста, уточните адрес, добавив к поиску улицу, метро или индекс");


    }
    return false;
}
