﻿BylectricGoogleMap = {
    IsIE: function() {
        return '\v' == 'v';
    },
    Initialization: function() {
        var script = document.createElement('script');
        script.src = "http://maps.google.com/maps/api/js?sensor=false";
        script["onload"] = function() { alert("aaaaaa"); };
        var head = document.getElementsByTagName('head')[0];
        head.appendChild(script);
    },
    MapRegistration: function(containerID, parametersID) {
        var container = document.getElementById(containerID);
        var parameters = document.getElementById(parametersID);
        var doc = BylectricGoogleMap.GetXML(parameters.value);
        var markerCount = 0;
        var initialZoom = 12;
        var maxDialogWidth = 20;
        var markersOnMap = 0;
        if (!window.google) {
            BylectricGoogleMap.NoServiceHandler(container);
            return;
        }
        var mapNodes = BylectricGoogleMap.GetNodes(doc, "/Map/*");
        for (m = 0; m < mapNodes.length; m++) {
            var mapChild = mapNodes[m];
            var markerNodeValue = mapChild.textContent;
            if (!markerNodeValue) markerNodeValue = mapChild.text;
            switch (mapChild.tagName.toLowerCase()) {
                case "initialzoom":
                    initialZoom = parseInt(markerNodeValue);
                    break;
                case "markersonmap":
                    markersOnMap = parseInt(markerNodeValue);
                    break;
                case "maxdialogwidth":
                    maxDialogWidth = parseInt(markerNodeValue);
                    break;
            }
        }
        var nodes = BylectricGoogleMap.GetNodes(doc, "/Map/Markers/*");

        for (a = 0; a < nodes.length; a++) {
            var contentString = null;
            var markerNode = nodes[a];
            var markerOptions = {};
            var longitude = 0;
            var latitude = 0;
            var iconwidth = 32;
            var iconheight = 32;

            var iconPath = "";
            for (b = 0; b < markerNode.childNodes.length; b++) {

                var child = markerNode.childNodes[b];
                if (!child.tagName) continue;
                var nodeValue = child.textContent;
                if (!nodeValue) nodeValue = child.text;
                switch (child.tagName.toLowerCase()) {
                    case "shadow":
                        var shadow = new google.maps.MarkerImage(nodeValue, new google.maps.Size(37, 32), new google.maps.Point(0, 0), new google.maps.Point(0, 32));
                        markerOptions["shadow"] = shadow;
                        break;
                    case "icon":
                        var iconPath = nodeValue;
                        break;
                    case "tooltip":
                        markerOptions["title"] = nodeValue;
                        break;
                    case "longitude":
                        longitude = parseFloat(nodeValue);
                        break;
                    case "latitude":
                        latitude = parseFloat(nodeValue);
                        break;
                    case "content":
                        contentString = nodeValue;
                        break;
                    case "iconwidth":
                        iconwidth = parseInt(nodeValue);
                        break;
                    case "iconheight":
                        iconheight = parseInt(nodeValue);
                        break;
                }
            }
            if (iconPath != "") {
                markerOptions["icon"] = new google.maps.MarkerImage(iconPath, new google.maps.Size(iconwidth, iconheight), new google.maps.Point(0, 0), new google.maps.Point(iconwidth / 2, iconheight))
            }
            var markerPosition = new google.maps.LatLng(latitude, longitude);
            if (!map) {
                var myOptions = { zoom: initialZoom, center: markerPosition, mapTypeId: google.maps.MapTypeId.ROADMAP };
                var map = new google.maps.Map(container, myOptions);
                var bounds = new google.maps.LatLngBounds(markerPosition, markerPosition);
            }
            if (markersOnMap == 0 || markersOnMap > markerCount) {
                bounds.extend(markerPosition);
            }
            markerOptions["position"] = markerPosition;
            markerOptions["map"] = map;

            var marker = new google.maps.Marker(markerOptions);
            markerCount++;
            BylectricGoogleMap.MarkerDialogInit(map, marker, contentString, maxDialogWidth);


        }
        if (map && markerCount > 1) {
            map.fitBounds(bounds);
        }
    },
    NoServiceCssClass: "",
    NoServiceMessage: "There isn't access to google map service.",
    NoServiceHandler: function(container) {
        if (BylectricGoogleMap.NoServiceCssClass != "") {
            container.className = BylectricGoogleMap.NoServiceCssClass;
        }
        container.innerHTML = BylectricGoogleMap.NoServiceMessage;
    },
    MarkerDialogInit: function(map, marker, textContent, width) {
        if (textContent) {
            var infowindow = new google.maps.InfoWindow({ content: textContent, maxWidth: width });

            google.maps.event.addListener(marker, 'click', function() {
                infowindow.open(map, marker);
            });
        }
    },
    GetXML: function(text) {
        var xmlDoc;
        if (document.implementation && document.implementation.createDocument) {
            xmlDoc = document.implementation.createDocument("", "", null);
            xmlDoc.async = "false";
            parser = new DOMParser();
            xmlDoc = parser.parseFromString(text, "text/xml");
        }
        else {
            xmlDoc = new ActiveXObject("MSXML2.DOMDocument");
            xmlDoc.loadXML(text);
        }
        return xmlDoc;
    },
    GetNode: function(doc, expression) {
        if (BylectricGoogleMap.IsIE) {

        } else {


        }

    },
    GetNodes: function(doc, expression) {
        if (BylectricGoogleMap.IsIE()) {
            return doc.selectNodes(expression);
        } else {
            var queryResult = doc.evaluate(expression, doc, null, XPathResult.singleNodeValue, null);
            var markerNode = queryResult.iterateNext();
            var nodes = [];
            while (markerNode) {
                nodes.push(markerNode);
                markerNode = queryResult.iterateNext();
            }
            return nodes;
        }
    }
}
