﻿///////////////////////////////////////
// GPS Coordinators Visual Picker    //
///////////////////////////////////////
    var map = null;
    var geocoder = null;
    var gpsInputID = null;
    var uliceInputID = null;
    var mestoInputID = null; 
	var marker=null;
(function($) {
    $.fn.VisualGPS = function(params) {
        params = $.extend({}, params);
        uliceInputID = params.ulice;
        mestoInputID = params.mesto;
        if ($('#gpsDialogue').length > 0) {} else {
            $('body').append("<div id='gpsDialogue'></div>");
            $('#gpsDialogue').append("<a id='gpsCloseButton' href='javascript:;' title='CLOSE'>X</a>");
            $('#gpsDialogue').append("<div id='gpsMap' class='jmap'>...</div>");
            $('#gpsDialogue').append("<div id='gpsPositionLabel'>...</div>");
            $('#gpsDialogue').append("<div id='gpsSearchAddress'><input type='text' /><a id='gpsSearchButton' href='javascript:;' title='Search'><img src='/js/fmm.visualgps/search.gif' /></a></div>");
            $('#gpsDialogue').append("<div id='gpsLinks'></div>");
            $('#gpsLinks').append("<a id='gpsReset' href='javascript:;' title='Reset'>[Reset]</a> ");
            $('#gpsLinks').append(" - Quick Links: <a id='gpsLink1' href='javascript:;' title='Prague'>[Prague]</a> ");
            $('#gpsLinks').append("<a id='gpsLink2' href='javascript:;' title='Lyon'>[Lyon]</a> ");
            $('#gpsLinks').append("<a id='gpsLink3' href='javascript:;' title='Venezia'>[Venezia]</a> ");
            $('#gpsSearchAddress input').width(250);
            $('#gpsSearchAddress input').css('color', '#aaa');
            $('#gpsSearchAddress input').val('Address');
            $('#gpsSearchAddress input').bind("focus", function() { $('#gpsSearchAddress input').val('').css('color', '#000'); $('#gpsSearchAddress input').unbind() });
        }
        this.each(function() {
            gpsInputID = this.id;
            $('#' + gpsInputID).width(250);
            $(this).after(" <a id='gpsOpenButton' href='javascript:;' title='GPS Visual Picker'><img src='/js/fmm.visualgps/globe.gif' /></a> ");
            $("#gpsOpenButton").unbind();
            $("#gpsOpenButton").bind("click", "gpsOpenButton", showGpsDialogue);
            $("#gpsCloseButton").unbind();
            $("#gpsCloseButton").bind("click", "gpsOpenButton", hideGpsDialogue);
            $('#gpsSearchButton').bind("click", doSearchAddress);

            $("#gpsReset").unbind();
            $("#gpsReset").bind("click", function() { map.setCenter(new GLatLng(0, 0), 12); });
            // Prague
            $("#gpsLink1").unbind();
            $("#gpsLink1").bind("click", function() { map.setCenter(new GLatLng(50.086487146683226, 14.411519765853882), 12); });
            //Lyon
            $("#gpsLink2").unbind();
            $("#gpsLink2").bind("click", function() { map.setCenter(new GLatLng(45.73853688832657, 4.856901168823242), 12); });
            //Venezia
            $("#gpsLink3").unbind();
            $("#gpsLink3").bind("click", function() { map.setCenter(new GLatLng(45.434098506715735, 12.338322401046753), 12); });
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            if (GBrowserIsCompatible()) {
                map = new GMap2(document.getElementById("gpsMap"), { size: new GSize(682, 350) });

                if ($('#' + gpsInputID).val()) {
                    var aLat = $('#' + gpsInputID).val().split('|')[0];
                    var aLon = $('#' + gpsInputID).val().split('|')[1];
                    map.setCenter(new GLatLng(aLat, aLon), 12);
                } else {
                    var addressToSearch = $('#' + uliceInputID).val() + ' ' + $('#' + mestoInputID).val();
                    if (addressToSearch != ' ') {
                        $('#gpsSearchAddress input').val(addressToSearch).css('color', '#000').unbind();
                        map.setCenter(new GLatLng(0, 0), 12);
                    } else {
                        map.setCenter(new GLatLng(50.086487146683226, 14.411519765853882), 12);
                    }
                }
                setNumbers();

                map.addControl(new GLargeMapControl());
                map.addControl(new GMapTypeControl());

                var bottomRight = new GControlPosition(G_ANCHOR_BOTTOM_RIGHT, new GSize(0, 0));
                map.addControl(new GOverviewMapControl(), bottomRight);

                var bottomLeft = new GControlPosition(G_ANCHOR_BOTTOM_LEFT, new GSize(0, -30));

                map.addControl(new GNavLabelControl(), bottomLeft);
                geocoder = new GClientGeocoder();
                GEvent.addListener(map, "moveend", moveendHandler);

                marker = new GMarker(map.getCenter(), { draggable: true });
                map.addOverlay(marker);
                GEvent.addListener(marker, "dragend", dragendHandler);

            }
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        });
        return this;
    };

    function moveendHandler() {
        marker.setLatLng(map.getCenter());
        setNumbers();
    }

    function dragendHandler() {
        map.setCenter(marker.getLatLng());
        setNumbers();
    }

    function setNumbers() {
        var mapCenter = map.getCenter();
        $('#gpsPositionLabel').html('<b>LAT:</b> ' + mapCenter.y + ' <b>LON:</b> ' + mapCenter.x + '');
        $('#' + gpsInputID).val(mapCenter.y + '|' + mapCenter.x);
    }

    function doSearchAddress() {
        var address = $('#gpsSearchAddress input').val();
        if (geocoder) {
            geocoder.getLatLng(address, function(point) {
                if (!point) {
                    alert(address + " not found");
                } else {
                    map.setCenter(point, 12);
                    setNumbers();
                }
            }
        );
        }
    }
    function showGpsDialogue(event) {
        var NewX = getLeftOffset(event.data) - 260;
        var NewY = getTopOffset(event.data) + getHeight(event.data) - 5;
        
        //pokud pri kliku neni hodnota vyplnena nebo je nulova inicializujeme mapu na stred Prahy
        if (!$('#' + gpsInputID).val() || $('#' + gpsInputID).val() == "0|0") 
        {
            map.setCenter(new GLatLng(50.09, 14.41), 12);
        };

        $('#gpsDialogue').css("left", NewX + "px");
        $('#gpsDialogue').css("top", NewY + "px");
        $('#gpsDialogue').css('display', 'block');
        $("#gpsOpenButton").unbind();
        $("#gpsOpenButton").bind("click", event.data, hideGpsDialogue);
    }
    function hideGpsDialogue(event) {
        $('#gpsDialogue').css('display', 'none');
        $("#gpsOpenButton").unbind();
        $("#gpsOpenButton").bind("click", event.data, showGpsDialogue);
    }
    ////////////////////////////////////////////////////////////////////////
    function getLeftOffset(ID) {
        var p = $('#' + ID);
        var offset = p.offset();
        return offset.left;
    }
    function getTopOffset(ID) {
        var p = $('#' + ID);
        var offset = p.offset();
        return offset.top;
    }
    function getHeight(ID) {
        x = document.getElementById(ID);
        return x.offsetWidth;
    }
    ////////////////////////////////////////////////////////////////////////
})(jQuery);

