var mapCanvas = 'map_canvas';
var restaurantAddress;
var geolocateSupported = false;
var userCurrPos;
var geocoder;
var userCurrAddress;
var directionsPanel;
var map1;
var permissionTimeout = 30000;
var travelMode;
var userDefinedLoc;
$(function(){
    map1 = new GMap2(document.getElementById(mapCanvas));
    map1.setUIToDefault();
    map1.disableScrollWheelZoom();
    restaurantAddress = $('input[name=res_address]').val();
    restaurantPos = new GLatLng($('input[name=res_lat]').val(), $('input[name=res_lng]').val());
    map1.setCenter(restaurantPos, 15);
    addResMarker();

    geocoder = new GClientGeocoder();
    directionsPanel = document.getElementById("route");

    $('#dialog').dialog({
        autoOpen: false,
        height: 300,
        modal: true,
        buttons: {
            Show: function(){
                add = $('#user_defined_loc').val();
                if(add.length==0){
                    $('#dialog').dialog('option', 'title', 'Please type an address');
                    $('div.ui-dialog').effect('shake', { 
                        times: 3
                    }, 200);
                }
                else
                    loadRoute(add) ;
            },
            Cancel:function(){
                $(this).dialog('close');
            },
            Autolocate:function(){
                $.fn.myautolocate(loadSuccessCallback, function(){
                    $('#dialog').dialog('option', 'title', 'Browser doesn\'t support geolocate');
                    $('div.ui-dialog').effect('shake', {
                        times: 3
                    }, 200);

                }, 30000);
            }
        }
    });
    $('#show_walking_route').click(function() {
        travelMode = G_TRAVEL_MODE_WALKING;
        if(!$('#map_canvas').is(':visible')){
            $('#toggle_map').trigger("click");
        }
        $('#dialog').dialog('open');
    })


    $('#show_driving_route').click(function() {
        travelMode = G_TRAVEL_MODE_DRIVING;
        if(!$('#map_canvas').is(':visible')){
            $('#toggle_map').trigger("click");
        }
        $('#dialog').dialog('open');
    })

    $('li.toggle-search-options').live('mouseover', function(){
        $(this).addClass("toggle-search-options-hover");
    }).live('mouseout', function(){
        $(this).removeClass("toggle-search-options-hover");

    })

    $('#toggle_map').live('click', function(){
        $('#map_canvas').toggle('slow', function(){
            if($(this).is(':visible')){
                $('#toggle_map').html("Hide Map");
                $('#show_walking_route').fadeIn();
                $('#show_driving_route').fadeIn();
            }else{
                $('#toggle_map').html("Show Map");
                $('#show_walking_route').fadeOut();
                $('#show_driving_route').fadeOut();
                
            }
            map1.checkResize();
        }
        )
    });
    if($('input[name=map_hidden]').val()=='true'){
        $('#toggle_map').trigger('click');
    }
});

function locationErrorCallback(status){
//showAddressSelectBox();
//https://developer.mozilla.org/En/Using_geolocation
}
function autolocate(){
    $.fn.myautolocate(loadSuccessCallback, function(){
        $('#dialog').dialog('option', 'title', 'Browser doesn\'t support geolocate');
        $('div.ui-dialog').effect('shake', { 
            times: 3
        }, 200);

    }, 30000)
    
    
    
}

function loadRoute(userLoc){

    if(typeof(userLoc)=="undefined"){
        $('#dialog').dialog('option', 'title', 'Please try again');
        $('div.ui-dialog').effect('shake', { 
            times: 3
        }, 200);
    }else{
        dir = userLoc + " to " + restaurantPos;
        directions = new GDirections(map1, directionsPanel);
        $('#dialog').dialog('close');
        map1.clearOverlays();
        $('li#route').html('');
        directions.load(dir, {
            travelMode: travelMode
        });
        addResMarker();
    }
}

//function geolocateUser(){
//    //check for geolocation feature; only supported by Firefox 3.5 as of now
//    if(navigator.geolocation){
//        geolocateSupported = true;
//        navigator.geolocation.getCurrentPosition(loadSuccessCallback, locationErrorCallback, {
//            timeout: permissionTimeout
//        })
//    //get the current location and loadJSON
//    }else{
//        //check for google gears; default by installed in Google Chrome
//        if(google.gears){
//            geolocateSupported = true;
//            //google gears is installed
//            googleGear = google.gears.factory.create('beta.geolocation');
//            googleGear.getCurrentPosition(loadSuccessCallback, locationErrorCallback, {
//                timeout: permissionTimeout
//            })
//        }
//    }
//}

function loadSuccessCallback(position){
    if(position instanceof GLatLng){
        userCurrPos = position;
    }else{
        userCurrPos = new GLatLng(position.coords.latitude, position.coords.longitude);
    }
    //geolocateUser();
    loadRoute(userCurrPos);
}

function addResMarker(){
    resMarker = new GMarker(restaurantPos);
    map1.addOverlay(resMarker);
}
