// ===============================================================
// CBkort version 2.x, copyright Carl Bro GIS&IT, 2006
// ===============================================================
// $Archive: /Products/CBKort2/development/2.6/standard/wwwroot/WEB-INF/config/modules/standard/dk/spatialaddress/js/spatialaddress.js $ 
// $Date: 27-09-11 12:09 $
// $Revision: 3 $ 
// $Author: Nsm $
// =============================================================== 

SpatialAddress = SpatialMap.Class({
    
    id: null,
    
    apikey: null,

    HOST: 'http://find.spatialsuite.com/',
    SERVICE_PATH: 'service/locations/2/',
    DETECT_PATH: 'detect/json/',
    MISSING_PATH: 'missing/json/',
    
    limit: 25,
    
    filter: '',
    
    minLength: 1,
    
    displaybuffer: '50',
    
    showbbox: false,
    
    initialize: function (options) {
        // Add properties from options to this.
        SpatialMap.Util.applyDefaults (this,options);
        
        cbKort.log ('SpatialAddress.initialize () - ',this);
        
        if (this.id==null){
            return;
        }

        if (this.apikey==null){
            alert ('APIKEY missing for the SpatialAddress module!');
            return;
        }

        this.data = {
            apikey: this.apikey,
            area: this.filter,
            limit : this.limit
        };
        
        require(['/js/standard/jquery/jquery-ui.min.js'], SpatialMap.Function.bind (function() {
            jq("#"+this.id).autocomplete({
                selectFirst : true,
                source: SpatialMap.Function.bind (function(request, response) {
                    jq.ajax( {
                    	scriptCharset: 'UTF-8',
                        url : this.HOST + this.SERVICE_PATH + this.DETECT_PATH + encodeURIComponent(request.term),
                        dataType : "jsonp",
                        data : this.data,
                        success : function(result) {
                            response(jq.map(result.data, function(item) {
                                displayLabel = item.presentationString;
                                displayValue = item.presentationString;
                                return {
                                    label: displayLabel,
                                    value: displayValue,
                                    data: item
                                };
                            }));
                        }
                    });
                },this),
                delay: 200,
                minLength : 1,
                select : SpatialMap.Function.bind (this.select,this)
            });
        },this));
    },
    
    select: function (event, ui) {
        cbKort.dynamicLayers.remove ('userdatasource');
        var item = ui.item.data;
        if (item.type == "street") {
            if(item.validCoordinates) {
                wkt = item.wkt;
                cbKort.dynamicLayers.addWKT ({name:'userdatasource',wkt:wkt,clear:true});
                cbKort.dynamicLayers.zoomTo ('userdatasource',this.displaybuffer);
                if (this.showbbox != true) {
                    cbKort.dynamicLayers.remove ('userdatasource');
                }
            }
        } else if (item.type == "addressaccess") {
            if(item.validCoordinates) {
                wkt = item.wkt;
                cbKort.dynamicLayers.addWKT ({name:'userdatasource',wkt:wkt,clear:true});
                cbKort.dynamicLayers.zoomTo ('userdatasource',this.displaybuffer);
            }
        }
    },

    CLASS_NAME: 'SpatialAddress'
});





/*
 * jQuery UI Autocomplete Select First Extension
 *
 * Copyright 2010, Scott González (http://scottgonzalez.com)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * http://github.com/scottgonzalez/jquery-ui-extensions
 */
(function( jq ) {

jq( ".ui-autocomplete-input" ).live( "autocompleteopen", function() {
    var autocomplete = jq( this ).data( "autocomplete" ),
        menu = autocomplete.menu;

    if ( !autocomplete.options.selectFirst ) {
        return;
    }
    //the requested term no longer matches the search, so drop out of this now
    if(autocomplete.term != jq(this).val()){
        //console.log("mismatch! "+autocomplete.term+'|'+$(this).val());
        return;
    }
    //hack to prevent clearing of value on mismatch
    menu.options.blur = function(event,ui){return}
    menu.activate( jq.Event({ type: "mouseenter" }), menu.element.children().first() );
});

}( jQuery ));

