﻿var SEARCH_URL = "http://www.mapquestapi.com/search/v1/radius?key=" + KEY + "&callback=<callback>&origin=<lat>,<lng>&radius=<radius>&hostedData=" + MAPQUEST_DBLAYER + ",," + DBLAYER_FIELDS + "&units=" + GetDistanceUnits() + "&pageSize=" + MAX_MATCHES + "&currentPage=<curpage>&maxMatches=" + MAX_MATCHES;
var PAGING_URL = "http://www.mapquestapi.com/search/v1/page?key=" + KEY + "&callback=<callback>&pageKey=<pagekey>&currentPage=<curpage>";
var STATICMAP_URL = "http://www.mapquestapi.com/staticmap/v3/getmap?key=" + KEY + "&center=<lat>,<lng>&zoom=12&size=" + STATICIMAGE_WIDTH + "," + STATICIMAGE_HEIGHT + "&type=map&imagetype=jpeg&style=2k6a&pois=blue<num>,<lat>,<lng>";
var GEOCODE_URL = "http://www.mapquestapi.com/geocoding/v1/address?key=" + KEY + "&street=<street>&city=<city>&state=<state>&postalCode=<postal>&country=<country>&callback=<callback>";
var DIRECTIONS_URL = "http://www.mapquest.com/maps?1c=<fromcity>&1s=<fromstate>&1a=<fromstreet>&1z=<fromzip>&1y=<fromcountry>&2c=<tocity>&2s=<tostate>&2a=<tostreet>&2z=<tozip>&2y=<tocountry>";

var searchRadius = 100;
var geocodeCallback;
var searchResponse;
var noResultCallback;
function setRadius(radius) {
    searchRadius = radius;
}

function GetDistanceUnits() {
    switch (DISTANCE_UNITS) {
        case "mi":
            return "m";
        case "km":
            return "k";
    }
    return DISTANCE_UNITS;
}

function doGeocode(address, city, state, postal, country, callback) {
    var location = address + ' ' + city + ' ' + state + ' ' + postal;
    var url = GEOCODE_URL
                .replace(/<street>/, address || '')
                .replace(/<city>/, city || '')
                .replace(/<state>/, state || '')
                .replace(/<postal>/, postal || '')
                .replace(/<country>/, country || '')
                .replace(/<callback>/, "processGeocode");
    $.getScript(url);
    geocodeCallback = callback;
}

function doGeocode(address, city, state, postal, country, callback, emptyCallback) {
	var location = address + ' ' + city + ' ' + state + ' ' + postal;
	var url = GEOCODE_URL
                .replace(/<street>/, address || '')
                .replace(/<city>/, city || '')
                .replace(/<state>/, state || '')
                .replace(/<postal>/, postal || '')
                .replace(/<country>/, country || '')
                .replace(/<callback>/, "processGeocode");
	$.getScript(url);
	geocodeCallback = callback;
	noResultCallback = emptyCallback;
}

function getStaticMapUrl(latLng, num) {
    var iconString = "";
    if (num) {
        iconString = "-" + num;
    }
    return STATICMAP_URL.replace(/<lat>/g, latLng[0]).replace(/<lng>/g, latLng[1]).replace(/<num>/, iconString);
}

function doRadiusSearch(location, callback) {
    var latLng = location.latLng;
    var lat = latLng.lat || latLng[0];
    var lng = latLng.lng || latLng[1];

    var url = SEARCH_URL.replace(/<lat>/, lat).replace(/<lng>/, lng).replace(/<radius>/, searchRadius).replace(/<curpage>/, 1).replace(/<callback>/, callback);
    $.getScript(url);
}

function renderResults(curPage) {
    $("#mapresults").empty();
    var allResults = searchResponse.searchResults;
    // Perform search
    if (!window.map && $("#mapWindow").size() > 0) {
        loc = searchResponse.origin.latLng;
        window.map = new MQA.TileMap(document.getElementById('mapWindow'), 7, { lat: loc.lat, lng: loc.lng }, 'map');
        MQA.withModule('zoomcontrol3', 'viewcontrol3', function () {
            map.addControl(new MQA.LargeZoomControl3(new MQA.MapCornerPlacement(MQA.MapCorner.TOP_LEFT)));
            map.addControl(new MQA.ViewControl3(), new MQA.MapCornerPlacement(MQA.MapCorner.TOP_RIGHT));
        });
    }

    if (window.map) {
        map.removeAllShapes();
    }

    addPoi(searchResponse.origin.latLng, ORIGIN_IMAGE_URL, "Origin");

    $("#mappagetext").text(SHOWINGRESULTS_TEXT.replace(/<pagefrom>/, (curPage - 1) * PAGE_SIZE + 1).replace(/<pageto>/, Math.min(curPage * PAGE_SIZE, allResults.length)).replace(/<pagettl>/, allResults.length));

    if (curPage <= 1) {
        $("#mapprev,.mapprev").hide();
    } else {
        $("#mapprev,.mapprev").show();
        $("#mapprev,.mapprev").attr({ href: "javascript:renderResults('" + (curPage*1 - 1) + "')" });
    }

    if ((curPage * PAGE_SIZE) < allResults.length) {
        $("#mapnext,.mapnext").show();
        $("#mapnext,.mapnext").attr({ href: "javascript:renderResults(" + (curPage*1 + 1) + ")" });
    } else {
        $("#mapnext,.mapnext").hide();
    }

    for (var i = ((curPage - 1) * PAGE_SIZE); i < Math.min(curPage * PAGE_SIZE, allResults.length); i++) {

        var result = allResults[i];
        if (typeof result == undefined) break;
        var latLng = result.shapePoints;

        var recordId = result.fields["RecordID"];
        while (recordId && recordId.length < 8) {
            recordId = '0' + recordId;
        }


        var $dom = $("#mapresultstemplate .mapresults").clone();
        var country = result.fields["Country"];

        $dommap = $(".minimap", $dom);
        if ($dommap.size() > 0) {
            //$dommaphref = $domhref.clone();
            $domimg = $("<img/>");
            $domimg.attr({ src: getStaticMapUrl(latLng, i+1) });
            //$dommaphref.append($domimg);
            $dommap.append($domimg);
        }

        //$domnamehref = $domhref.clone();
        //$domnamehref.text(result.name);
        $sitelink = $("<a/>");
        $sitelink.attr("href", "http://" + (country == "US" ? BASECENTERLINK_US : BASECENTERLINK_CA) + "/" + result.fields["EpageUrl"].toLowerCase());
        $sitelink.text(SITELINK_TEXT);

        $(".name", $dom).text(result.name);
        $(".sitelink", $dom).append($sitelink);
        $(".dist", $dom).text(Math.ceil(result.distance * 100) / 100 + " " + DISTANCE_UNITS + " ");
        $(".address", $dom).text(result.fields["Address"]);
        $(".address3", $dom).text(result.fields["Address3"]);
        $(".city", $dom).text(result.fields["City"]);
        $(".state", $dom).text(' ' + result.fields["State"]);
        $(".postal", $dom).text(' ' + result.fields["Postal"]);
        $(".country", $dom).text(country);
        $(".phone", $dom).text(result.fields["Phone"]);
        var $inp = $("input[name=centerSelect]", $dom);
        $inp.val(recordId);
        if ($inp.val() == $("input[id$=hfCenterId]").val()) {
            $inp.attr("checked", "checked");
        }

        if (result.fields["JuniorKumon"] == 1) {
            $(".juniorkumon", $dom).show();
        } else {
            $(".juniorkumon", $dom).hide();
        }

        var $reqInfoLnk = $(".requestinfo", $dom);
        if ($reqInfoLnk.size() > 0) {
            $reqInfoLnk.attr({ href: $reqInfoLnk.attr("href") + "?centerid=" + escape(recordId) + "&centername=" + escape(result.name) + "&centeraddress=" + escape(result.fields["Address"]) + "&centercity=" + escape(result.fields["City"]) + "&centerstate=" + escape(result.fields["State"]) + "&address=" + escape(address) + "&city=" + escape(city) + "&state=" + escape(state) + "&postal=" + escape(postal) + "&country=" + escape(country) });
        }
        $("#mapresults").append($dom);
        addPoi(latLng, "", result.name, i+1);
    }
    $("#mapresultsnav").show();
    $("#mapWindow").show();
    if (window.map) {
        map.bestFit();
    }
}

function renderRadiusResults(response,curPage) {
    $('#mqFindACenter').show();
    $("#nomapresults").hide();
    $("#mapambiguityselect").hide();
    if (response.searchResults) {
        searchResponse = response;
        searchResponse.searchResults.sort(
            function (resultA, resultB) {
                var nameA = resultA.name.toLowerCase();
                var nameB = resultB.name.toLowerCase();
                if (resultA.distance == resultB.distance) {
                    return (nameA < nameB ? -1 : nameA == nameB ? 0 : 1);
                } else {
                    return resultA.distance - resultB.distance;
                }
            });
        renderResults(1);
    } else {
	   	$("#nomapresults").show();
	   	if (noResultCallback) {
       		noResultCallback();
       	}
    }
    
    if (geocodeCallback) {
        geocodeCallback();
    }
}

function addPoi(latLng, img, title, num) {
    MQA.withModule('htmlpoi', function () {
        var Lat = latLng.lat || latLng[0];
        var Lng = latLng.lng || latLng[1];
        var p = new MQA.Poi({ lat: Lat, lng: Lng });
        if (img) {
            p.setIcon(new MQA.Icon(img, 16, 16));
            p.setShadow(false);
        } else {
            p = new MQA.HtmlPoi({ lat: Lat, lng: Lng });
            p.setHtml(num + "&nbsp;", 0, -27, 'mqPoi');
        }

        p.setInfoContentHTML(title);

        if (window.map) {
            map.addShape(p);
        }
    });
}

function processGeocode(response) {
    if (response.results.length > 0 && response.results[0].locations.length > 0) {
        var result = response.results[0];
        var locations = result.locations;

        $("#mapresultsnav").hide();
        $("#mapWindow").hide();
        if (locations.length > 1) {
            $("#mapambiguityselect").empty();
            $("#nomapresults").hide();
            // Ambiguous search query
            for (var i = 0; i < locations.length; i++) {
                var loc = $.extend({}, locations[i]);

                addPoi(loc, i + 1);

                var $dom = $("#mapambiguitytemplate .mapambiguity").clone();
                $(".mapnarrow", $dom).click(
                    function (locArg) {
                        return function () {
                            doRadiusSearch(locArg, 'renderRadiusResults');
                        }
                    } ($.extend(true, {}, loc)));

                $(".mapnarrow", $dom).text(
                    (loc.adminArea5 || '') + " " + (loc.adminArea4 || '') + " " + (loc.adminArea3 || '') + " " + (loc.adminArea2 || '') + " " + (loc.postalCode || '') + " " + (loc.adminArea1 || '')
                );
                if (locations[i].mapUrl) {
                    $img = $("<img/>");
                    $img.attr({ src: $.extend({}, loc).mapUrl.replace(/size=(\d+),(\d+)/, "size=198,119"), width: 198, height: 119 });
                    $(".minimap", $dom).append($img);
                }
                $("#mapambiguityselect").append($dom);
                
                if (geocodeCallback) {
                    geocodeCallback();
                }
            }
            $("#mapambiguityselect").show();
        } else {
            var loc = locations[0];
            doRadiusSearch(loc, 'renderRadiusResults');
        }
    }
}

function callFloodlight(source) {
    var tag_url = source + Math.floor(Math.random() * 999999) + "?";
    if (document.getElementById("DCLK_FLDiv")) { var flDiv = document.getElementById("DCLK_FLDiv"); }
    else { var flDiv = document.body.appendChild(document.createElement("div")); flDiv.id = "DCLK_FLDiv"; flDiv.style.display = "none"; }
    var DCLK_FLIframe = document.createElement("iframe");
    DCLK_FLIframe.id = "DCLK_FLIframe_" + Math.floor(Math.random() * 10000000000000);
    DCLK_FLIframe.src = tag_url;
    flDiv.appendChild(DCLK_FLIframe);
}
