var ICON_WIKITUDE = 'icnWikitude.png';
var ICON_WIKITUDE_SELECTED = 'icnWikitudeSelected.png';

jQuery(document).ready(function() {
    var iconWikitude = new GIcon(G_DEFAULT_ICON);
    iconWikitude.image = ICON_WIKITUDE_SELECTED;
    iconWikitude.shadow = null;
    iconWikitude.iconSize = new GSize(40, 34);
    iconWikitude.dragCrossAnchor = new GPoint(0, 19);

    // Namespace import
        var gMaps = jQuery.nGeoUtil.google;

        var propertyWindow = jQuery('#mapProperties');
        var helpWindow = jQuery('#mapHelp');
        var infoWindow = jQuery('#mapInfo');
        var editMode = false;
        var addMode = false;

        jQuery('#closeButton').click(closeInfo);

        jQuery('#addButton').click(function() {
            var map = jQuery('#myMap').data('map');
            jQuery('#addHint').show('normal');
            gMaps.onClick(map, poiAddModeOn);
        });

        jQuery('#poiForm').ajaxForm(function() {
            reloadMarkers();
            poiEditModeOff();
        });
        jQuery('#cancelButton').click(poiEditModeOff);
        jQuery('#addHintClose').click(function() {
        	jQuery('#addHint').hide('normal');
        	var map = jQuery('#myMap').data('map');
        	gMaps.clearClickListeners(map);
        });

        function poiAddModeOn(overlay, latlng) {
        	jQuery('#addHint').hide('normal');
            jQuery('#poiForm').clearForm();
            jQuery('#record_id').val('');
            jQuery('#record_category').val('traffic');
            jQuery('#record_language').val('en');
            
            addMode = true;
            if (!overlay || overlay == null) {
                var markerOptions = {
                    icon : iconWikitude,
                    draggable : true
                };
                var marker = new google.maps.Marker(latlng, markerOptions);
                var map = jQuery('#myMap').data('map');
                map.addOverlay(marker);
                jQuery('#myMap').data('activeMarker', marker);
                jQuery('#record_longitude').val(latlng.lng());
                jQuery('#record_latitude').val(latlng.lat());
                poiEditModeOn();
                gMaps.clearClickListeners(map);
            }
        }

        /**
         * Turns POI edit mode on
         */
        function poiEditModeOn() {
            editMode = true;

            helpWindow.hide();
            infoWindow.hide();
            propertyWindow.fadeIn();

            var marker = jQuery('#myMap').data('activeMarker');
            marker.originalPos = marker.getLatLng();
            marker.enableDragging();
            marker.setImage(ICON_WIKITUDE_SELECTED);

            gMaps.onDragend(marker, function(latLng) {
                jQuery('#record_longitude').val(latLng.lng());
                jQuery('#record_latitude').val(latLng.lat());
            });
        }

        /**
         * Turns POI edit mode off
         */
        function poiEditModeOff(reset) {
            var map = jQuery('#myMap').data('map');
            var activeMarker = jQuery('#myMap').data('activeMarker');

            resetMarker();

            if (reset) {
                activeMarker.setLatLng(activeMarker.originalPos);
                if (addMode) {
                    map.removeOverlay(activeMarker);
                }
            } else {
                map.removeOverlay(activeMarker);
                jQuery('#myMap').removeData('markers');
            }

            jQuery('#myMap').removeData('activeMarker');
            propertyWindow.hide();
            infoWindow.hide();
            helpWindow.fadeIn();
            editMode = false;
            addMode = false;
            jQuery('#poiForm').clearForm();
            jQuery('#record_id').val('');
        }

        function closeInfo() {
            resetMarker();

            propertyWindow.hide();
            infoWindow.hide();
            helpWindow.fadeIn();
        }

        window.resetMarker = function() {
            var activeMarker = jQuery('#myMap').data('activeMarker');

            if (activeMarker) {
                activeMarker.setImage(activeMarker.getIcon().image);
            }
        }

        window.showInForm = function(id, title, lng, lat, description, category, website, language, marker) {
            jQuery('#record_id').val(id);
            jQuery('#record_title').val(title);
            jQuery('#record_longitude').val(lng);
            jQuery('#record_latitude').val(lat);
            jQuery('#record_description').val(description);
            jQuery('#record_category').val(category);
            jQuery('#record_language').val(language);
            jQuery('#record_website').val(website);

            jQuery('#myMap').data('activeMarker', marker);
            poiEditModeOn();
        };

        window.showDetails = function(title, lng, lat, description, category, website, language, marker) {
            propertyWindow.hide();
            helpWindow.hide();

            var fadeSpeed = 'normal';
            if (infoWindow.css('display') != 'none') {
                fadeSpeed = 'fast';
                infoWindow.fadeOut(fadeSpeed);
            }

            jQuery('#info_title').text(title);
            jQuery('#info_description').text(description);
            jQuery('#info_category').text(category);
            jQuery('#info_language').text(language);
            jQuery('#info_website').text(website);

            jQuery('#myMap').data('activeMarker', marker);
            infoWindow.fadeIn(fadeSpeed);
        }

    });
