﻿/* 
 *   Google Map 
 */

var map = null;
var currentPanelPage = 1;
var markerGroups = { "electricity": [], "gas": [], "photoCell": [], "install": [] };
var pageSize = 10;
var currentPage = 1;
var adrField = "";
var dirn = null;
var selectedDealerValue = new Array();
var isFirstElement = true;
var dealerList = new Array();
var currentCreationPage = 1;
var IconSize		= {			// Icon size
	iconSize 				: { w : 20, h : 34 },
	shadowSize 				: { w : 37, h : 34},
	iconAnchor 				: { w : 9,  h : 34},
	infoWindowAnchor 		: { w : 9,  h : 2}
}

/* 
 *   gMap
 */

function initGmap() {
    if (GBrowserIsCompatible() && document.getElementById("gMap") != null) {
        map = new GMap2(document.getElementById("gMap"));
        var ui = map.getDefaultUI();
        ui.controls.smallzoomcontrol3d = true;
        ui.controls.scalecontrol = false;
        ui.maptypes.physical = false;
        ui.zoom.scrollwheel = false;
        map.setUI(ui);
    }
}

// Get List Item
function listHtml(showAllPv) {
    
    $("#loader .loaderBackground").css("height", $("#container").height()).css("width", $("#container").width());
    $("#loader").show();

    resetPage();
    //showAllPvLink();
    
    var url = null;
    if(showAllPv){
        url = urlHandler + "?ts=" + Math.random() * 11 + "&showAllPv=true";
    }else{
        url = urlHandler + "?ts=" + Math.random() * 11 + "&dealerSpec=" + DealerSpecs();
    }

    var request         = GXmlHttp.create();
    request.open("GET", url, true);
    request.onreadystatechange = function() {
        if (request.readyState == 4) {
            var xmlDoc = request.responseXML;
            var bounds = new GLatLngBounds();
            var detailsMap = xmlDoc.documentElement;
            detailMap = new Array();

            detailMap["resultsCount"] = parseInt(detailsMap.getAttribute("resultsCount"));
            if (detailsMap.getAttribute("sessionError") == null) {

                //Ref Point
                detailMap["searchLat"] = parseFloat(detailsMap.getAttribute("searchLat"));
                detailMap["searchLng"] = parseFloat(detailsMap.getAttribute("searchLng"));
                
                //Search with street
                var streetSearchLat = detailsMap.getAttribute("streetSearchLat");
                var streetSearchLng = detailsMap.getAttribute("streetSearchLng");
                if (streetSearchLat != null && streetSearchLng != null) {
                    var point = new GLatLng(streetSearchLat, streetSearchLng);
                    createMarker(null, point, false);
                }

                var point = new GLatLng(detailMap["searchLat"], detailMap["searchLng"]);
                createMarker(null, point, true);
                bounds.extend(point);

                if (detailMap["resultsCount"] > 0) {
                    $("#numResult #numItem").html(detailMap["resultsCount"]);
                    if (detailMap["resultsCount"] > 1) {
                        $("#singleResult").hide();
                        $("#multipleResults").show();
                    } else {
                        $("#singleResult").show();
                        $("#multipleResults").hide();
                    }
                    $("#numResult").show();
                    var markers = xmlDoc.documentElement.getElementsByTagName("dealer");        // obtain the array of markers
                    var countMarker = detailMap["resultsCount"];
                    for (var i = 0; i < countMarker; i++) {                                     // parse de array of markers
                        /* Get Marker */
                        var dealer = new Array();
                        dealer['ID'] = markers[i].getAttribute("id");
                        dealer['lat'] = parseFloat(markers[i].getAttribute("lat"));
                        dealer['lng'] = parseFloat(markers[i].getAttribute("lng"));
                        dealer['name'] = markers[i].getAttribute("name");
                        dealer['street'] = markers[i].getAttribute("street");
                        dealer['houseNumber'] = markers[i].getAttribute("houseNumber");
                        dealer['postalCode'] = markers[i].getAttribute("postalCode");
                        dealer['city'] = markers[i].getAttribute("city");
                        dealer['country'] = markers[i].getAttribute("country");
                        dealer['telephone'] = markers[i].getAttribute("telephone");
                        dealer['mobilePhone'] = markers[i].getAttribute("mobilePhone");
                        dealer['fax'] = markers[i].getAttribute("fax");
                        dealer['email'] = markers[i].getAttribute("email");
                        dealer['webSite'] = markers[i].getAttribute("webSite");
                        dealer['elecInst'] = markers[i].getAttribute("ElecInst");
                        dealer['gasInst'] = markers[i].getAttribute("GasInst");
                        dealer['renewables'] = markers[i].getAttribute("Renewables");
                        dealer['IsPost'] = markers[i].getAttribute("IsPost");
                        dealer['isRetailer'] = markers[i].getAttribute("IsRetailer");
                        dealer['dealerNumItem'] = i;
                        dealerList[i] = dealer;

                        /* Create Marker */
                        var point = new GLatLng(dealer["lat"], dealer["lng"]);
                        createMarker(dealer, point, false);
                        bounds.extend(point);

                        /* Create Item */
                        createItemList(dealer, countMarker, i);
                    }

                    var zoomLevel = (map.getBoundsZoomLevel(bounds) > 0) ? map.getBoundsZoomLevel(bounds) : 0;
                    map.setCenter(bounds.getCenter(), zoomLevel);
                    bounds = null;
                    createPager();

                    $('#listLoader').hide();
                    $('#dealersList').show();
                } else {
                    $('#errorMsg').html(contentText['EMNoItem']);
                    $('#' + errorBoxId).show();
                    $('#listLoader').hide();
                    map.setCenter(new GLatLng(detailMap["searchLat"], detailMap["searchLng"]), 12);
                }
            } else {
                window.location.href = "Default.aspx";
            }
            $("#loader").hide();
        }
    }
    request.send(null);    
}

/* 
 *   Direction 
 */
function initDirection(fromId, toId) {

    $('#listLoader').show();
    $('#errorBlock').hide();
    $('#contentBlock').hide();
    $('#gMap').show();

    if (dirn != null) {
        dirn.clear();
    }
    dirn = new GDirections(map);
    
    dirn.load("from: " + document.getElementById(fromId).value + " to: " + document.getElementById(toId).value + "", { getSteps: true });
    GEvent.addListener(dirn, "load", function() {
        customPanel(map, "map", dirn, document.getElementById("path"));
        $('#contentBlock').show();
    });

    GEvent.addListener(dirn, "error", function() {
        var code = dirn.getStatus().code;
        var reason = "Code " + code;
        if (errorMsg[code]) {
            reason = errorMsg[code]
        }
        showErrorMessage(reason);
    });
}

function customPanel(map,mapname,dirn,div) {

    var html = "";
    createListDirection.mapname = mapname;
    
    //read through the GRoutes and GSteps
    for (var i = 0; i < dirn.getNumRoutes(); i++) {
        type = (i==0) ? "play" : "pause";
        
        var route       = dirn.getRoute(i);
        var geocode     = route.getStartGeocode();
        var point       = route.getStep(0).getLatLng();
        
        //Waypoint at the start of each GRoute
        html += createListDirection.routeDistance(route.getDistance().html + " ("+errorMsg['TitleDist']+" " + route.getDuration().html + ")");
        var adressToShow = geocode.address.split(",");
        adressToShow = adressToShow[0]+","+adressToShow[1];
        document.getElementById('dealerAdr').innerHTML = adressToShow;
        html += createListDirection.waypoint(point, type, geocode.address);
        html += '<ol class="steps">';

        for (var j=0; j<route.getNumSteps(); j++) {
            var step = route.getStep(j);
            html += createListDirection.detail(step.getLatLng(), j + 1, step.getDescriptionHtml(), step.getDistance().html);
        }
        
        html += '</ol>';
    }

    //the final destination waypoint   
    var geocode = route.getEndGeocode();
    var point = route.getEndLatLng();
    html += createListDirection.waypoint(point, "stop", geocode.address, mapname);
             
    //the copyright text
    html += createListDirection.copyright(dirn.getCopyrightsHtml());

    //drop the whole thing into the target div
    div.innerHTML = html;
    $('#listLoader').hide();
}

/* 
 * Update cities list 
 */

function updateCitiesList(zip, language, selectedCity) {
    var drp = document.getElementById("citiesList");
    var i = 0;
    var selectedIndex = 0;

    $('#citiesList >option').remove();

    $.getJSON("/GetCitiesHandler.ashx", { zipCode: zip, lang: language },
    function(data) {
        $.each(data.items, function(i, item) {
            drp.options[drp.options.length] = new Option(item.city, item.city);
            i++;
            if (i == 1) {
                $("#" + hfCityID).val(item.city);
            }
            if (item.city == selectedCity) {
                selectedIndex = i;
            }
        });
        drp.selectedIndex = (selectedCity != null) ? selectedIndex - 1 : 0;
    });

}

/*
 *   Events
 */

window.onunload = function() {
    GUnload();
}

