﻿//var states = { AL: 'Alabama', AK: 'Alaska', AZ: 'Arizona', AR: 'Arkansas', CA: 'California', CO: 'Colorado', CT: 'Connecticut', DE: 'Delaware', DC: 'District of Columbia', FL: 'Florida', GA: 'Georgia', HI: 'Hawaii', ID: 'Idaho', IL: 'Illinois', IN: 'Indiana', IA: 'Iowa', KS: 'Kansas', KY: 'Kentucky', LA: 'Louisiana', ME: 'Maine', MD: 'Maryland', MA: 'Massachusetts', MI: 'Michigan', MN: 'Minnesota', MO: 'Missouri', MT: 'Montana', NE: 'Nebraska', NV: 'Nevada', NH: 'New Hampshire', NJ: 'New Jersey', NM: 'New Mexico', NY: 'New York', NC: 'North Carolina', ND: 'North Dakota', OH: 'Ohio', OK: 'Oklahoma', OR: 'Oregon', PA: 'Pennsylvania', RI: 'Rhode Island', SC: 'South Carolina', SD: 'South Dakota', TN: 'Tennessee', TX: 'Texas', UT: 'Utah', VT: 'Vermont', VA: 'Virginia', WA: 'Washington', WV: 'West Virginia', WI: 'Wisconsin', WY: 'Wyoming' };
var states = { CA: 'California', CT: 'Connecticut', DC: 'District of Columbia' };


$(loadStates);
$(setParams);
$(initializeMap);
function setParams() {
    if ($.url.param("Search")) {

    }
    if ($.cookies.get('MyStoreID')) {
        $('.SubmitYourLocationDiv').hide();
    }
    $('#ZipInput,#CityInput,#StateSelect,#GetLocationsButton,#WithinSelect').keyup(function(e) { if (e.keyCode == 13) { GetLocationsAjax(); } });
}

function loadStates() {
    var stateSelect = $('#StateSelect');
    if (stateSelect.length > 0) {
        var stateSelectContainer = stateSelect.parent();
        stateSelect.remove();
        var option = $('<option value="0">...</option>');
        stateSelect.append(option);
        $.each(states, function(code, name) {
            var option = $('<option value="' + code + '">' + name + '</option>');
            stateSelect.append(option);
        });
        stateSelectContainer.append(stateSelect);
    }
}

function GetLocationsAjax() {
    if ($('#ZipInput').val() != '') {
        SearchByZipAjax($('#ZipInput').val().trim(), $('#WithinSelect').val());
    }
    else if ($('#StateSelect').val() != '0') {
        var address = $('#CityInput').val().replace(/ /gi, '+') + '+' + $('#StateSelect').val().replace(/ /gi, '+') + '+USA';

        $.getJSON("http://maps.google.com/maps/geo?q=" + address + "&key=" + getApiKey() + "&sensor=false&callback=?",
                function(response) {
                    if (!response || response.Status.code != 200) {
                        alert("\"" + address + "\" not found");
                    }
                    else {
                        var zip = null;
                        var lat = null;
                        var lon = null;
                        if (response.Placemark && response.Placemark.length > 0 && response.Placemark[0]) {
                            var placeMark = response.Placemark[0];
                            try { zip = placeMark.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber; }
                            catch (ex) {
                                lon = placeMark.Point.coordinates[0];
                                lat = placeMark.Point.coordinates[1];
                            }
                        }
                        if (zip) {
                            SearchByZipAjax(zip, $('#WithinSelect').val());
                        }
                        else {
                            SearchByLatLonAjax(lat, lon, $('#WithinSelect').val());
                        }

                    }
                });
    }
}
function SearchByZipAjax(zip, range) {
    $.post("/Library/Handlers/GetLocations.ashx?Zip=" + zip + "&Distance=" + range, function(data) {
        $("#LocationResults").html(data);
        SetDynamicMap();
    });
}

function SearchByLatLonAjax(lat, lon, range) {
    $.post("/Library/Handlers/GetLocations.ashx?Latitutde=" + lat + "&Longitude=" + lon + "&Distance=" + range, function(data) {
        $("#LocationResults").html(data);

        SetDynamicMap();
    });

}
var geocoder = null;
var map = null;
var bounds = null;

function initializeMap(secondRender) {
    var mapContainer = $('#DynamicMap')[0];
    map = new GMap2(mapContainer);
    geocoder = new GClientGeocoder();
    bounds = new GLatLngBounds();
    map.clearOverlays();
    if (!secondRender) {
        map.setCenter(new GLatLng(43.907787, -79.359741), 8);
    }
    map.setUIToDefault();
}
function createB360Marker(point) {
    var icon = new GIcon();
    icon.image = "/Global/images/BeautyPin.png";
    icon.shadow = "/Global/images/shadow-BeautyPin.png";
    icon.iconSize = new GSize(54.0, 54.0);
    icon.shadowSize = new GSize(82.0, 54.0);
    icon.iconAnchor = new GPoint(27.0, 54.0);
    icon.infoWindowAnchor = new GPoint(27.0, 27.0);

    return new GMarker(point, icon);

}
function SetDynamicMap() {
    var mapContainer = $('#DynamicMap')[0];
    var mapURL = $('[Id $= LocationsMapURL]').val();
    var Addresses = mapURL.split('|');

    if (mapURL.length > 0) {
        $('.LocationsMapPanel').show();
        initializeMap(true);
        $.each(Addresses, function(idx, item) {
            var address = item.split('~!~')[0];
            var latlon = item.split('~!~')[1].split(',');
            var storeDetails = item.split('~!~')[2];
            var point = new GPoint(latlon[1], latlon[0]);
            var marker = createB360Marker(point);
            var gLatLng = new GLatLng(latlon[0], latlon[1]);
            map.addOverlay(marker);
            GEvent.addListener(marker, "click", function() {
                var markup = '';
                markup += storeDetails.split('+')[1] + "<BR/>";
                markup += address.replace(/\+/gi, ' ') + "<BR/>";
                markup += "<a href='#' onclick=\"MakeThisMyStore('" + storeDetails.split('+')[0] +
                    "','" + storeDetails.split('+')[1] + "');\">Make this my store</a>";
                marker.openInfoWindowHtml(markup);
            });

            GEvent.addListener(marker, "dblclick", function() {
                map.setCenter(point, 13);
            });

            bounds.extend(gLatLng);
            //marker.openInfoWindowInfo(item);
            if (idx == Addresses.length - 1) {
                setTimeout(function() { centerAndZoomOnBounds(bounds) }, 100);
            }
        });
        $('.SubmitYourLocationDiv').hide();
        $('.FeaturedEventsPanel').hide();
        
        $('.NoResultsDiv').hide();
    }
    else {
        $('.SubmitYourLocationDiv').show();
        $('.FeaturedEventsPanel').hide();
        $('.LocationsMapPanel').hide();
        $('.NoResultsDiv').show();
    }
    
}

function centerAndZoomOnBounds(bounds) {

    var center = bounds.getCenter();
    var newZoom = map.getBoundsZoomLevel(bounds);
    if (newZoom > 15)
        newZoom = 15;    
    if (map.getZoom() != newZoom) {

        map.setCenter(center, newZoom);
    } else {
        map.panTo(center);
    }
}



function MakeThisMyStore(storeid, cookieText) {
    var oneyear = new Date()
    oneyear.setDate(oneyear.getDate() + 365)
    //$.cookies.set('MyStoreName', cookieText, { expiresAt: new Date(2012, 1, 1) });
    //$.cookies.set('MyStoreID', storeid, { expiresAt: new Date(2012, 1, 1) });
    $.cookies.set('MyStoreName', cookieText, { expiresAt: oneyear });
    $.cookies.set('MyStoreID', storeid, { expiresAt: oneyear });
    window.location.href = window.location.href.split('#')[0];
}

function ClearMyStore() {
    $.cookies.del('MyStoreName');
    $.cookies.del('MyStoreID');
    window.location.href = window.location.href.split('#')[0];
}

function ShowPopup(url) {
    $.post(url, function(data) {
        $.facebox(data);
        Cufon.refresh('h2');
        
    });
}
