$(document).ready(function() {
    $('#findstorezipinput').mask('99999');
    $('#findstorezipinput').focus();
    $('#findstorezippanel form').submit(submitZip);
    $('#findstorestategraphics img').click(clickState);
    load();
});

function submitZip(e) {
    var zip = $('#findstorezipinput').val();
    $.getJSON('/stores/zipajax/' + zip, zipResults );
    e.preventDefault();
}

function zipResults(ro) {
    var zip = $('#findstorezipinput').val();
    addSearchZipMarker(ro);
    $('#findstorescroller').html(ro.html);
    $('.store a').click(clickStore);
    $('.store:first a').click();
}

function clickState(e) {
    var state = this.name;
    selectState(state);
    e.preventDefault();
}

function selectState(state) {
    var states = Array();
    states['MI'] = { lat: 45.151, lon: -86.375, zoom: 6 };
    states['FL'] = { lat: 27.702, lon: -83.848, zoom: 6 };
    states['OH'] = { lat: 40.296, lon: -82.814, zoom: 7 };
    states['TX'] = { lat: 31.579, lon: -99.448, zoom: 5 };
    states['NC'] = { lat: 35.729, lon: -80.398, zoom: 6 };
    states['MN'] = { lat: 46.332, lon: -93.845, zoom: 6 };
    states['TN'] = { lat: 36.069, lon: -86.111, zoom: 6 };
    states['GA'] = { lat: 32.741, lon: -83.397, zoom: 7 };
    states['IL'] = { lat: 39.946, lon: -89.104, zoom: 6 };
    states['KY'] = { lat: 37.570, lon: -85.737, zoom: 6 };
    states['IN'] = { lat: 40.021, lon: -86.100, zoom: 7 };

    $('#gmap').css('visibility', 'visible');
    map.setCenter(new GLatLng(states[state]['lat'], states[state]['lon']));
    map.setZoom(states[state]['zoom']);
    $.getJSON('/stores/stateajax/' + state, stateResults);
}

function stateResults(ro) {
    $('#findstorescroller').html(ro.html);
    $('.store a').click(clickStore);
}

function clickStore(e) {
    var id = this.id.replace('store', '');
    $('#gmap').css('visibility', 'visible');
    map.panTo(markers[id].getPoint());
    markers[id].openInfoWindow(markers[id].html);
    map.setZoom(11);
    e.preventDefault();
}

var map;
var markers;

function load() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("gmap"));
        map.addControl(new GLargeMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(37.230328,-96.503906));
        map.setZoom(3);
        var zip = $('#findstorezipinput').val();
        $.getJSON('/stores/allstoresajax', addStoreMarkers);
    }
}

function addSearchZipMarker(ro) {
    var tinyIcon = new GIcon();
    tinyIcon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    tinyIcon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    tinyIcon.iconSize = new GSize(12, 20);
    tinyIcon.shadowSize = new GSize(22, 20);
    tinyIcon.iconAnchor = new GPoint(6, 20);
    tinyIcon.infoWindowAnchor = new GPoint(5, 1);

    var point = new GLatLng(ro.searchziplatitude, ro.searchziplongitude);
    var marker = new GMarker(point, {title: ro.searchzip, icon: tinyIcon});
    map.addOverlay(marker);

}

function addStoreMarkers(ro) {
    markers = new Array();
    for (var i in ro.stores) {
        var store = ro.stores[i];

        var point = new GLatLng(store.latitude, store.longitude);
        var marker = new GMarker(point, {title: store.city});
        marker.html = store.html;
        markers[store.id] = marker;
        map.addOverlay(marker);
        GEvent.addListener(marker, 'click', function() {
                                                map.panTo(this.getPoint());
                                                this.openInfoWindow(this.html);
                                            });
    }

}

