// ===============================================================
// CBkort version 2.x, copyright Carl Bro GIS&IT, 2006
// ===============================================================
// $Archive: /Products/CBKort2/development/2.6/standard/wwwroot/js/standard/select.js $ 
// $Date: 9-09-10 18:25 $
// $Revision: 5 $ 
// $Author: Nsm $
// =============================================================== 

SelectObject = SpatialMap.Class({
    
    baseUrl: null,
    
    datasources: [],
    datasourceoptions: [],
    cache: {},
    
    initialize: function (options) {
        this.baseUrl = cbKort.getServletUrl ()+'?sessionid='+cbKort.getSessionId ();
        
        // Add properties from options to this.
        OpenLayers.Util.applyDefaults (this,options);
        
        
    },
    
    query: function (queryobject) {
        /*
         * queryobject = {
         *     wkt: 'POINT(111 222)',
         *     datasource: 'ds_abc',
         *     command: 'read',
         *     buffer: 0
         * }
         */
         
        if (!queryobject.datasource || !queryobject.wkt) {
            return;
        }
        var wkt = [];
        
        //CALL SERVER PAGE
        var page = 'getfeature-from-wkt';
        var url = getServletUrl();
        url+= "?page=getfeature-from-wkt";
        url+= "&sessionid="+cbKort.getSessionId();
        url+= "&profile="+cbKort.getProfile();
        url+= "&wkt="+queryobject.wkt;
        url+= "&datasource="+queryobject.datasource;
        url+= "&command="+(queryobject.command || 'read-spatial');
        url+= "&buffer="+(queryobject.buffer || '0');
        var request = new CBhttp ();
    
        var pcol = request.executeUrl(url+'&type=polygon');
        if (pcol!=null) {
            var rowlist = pcol.get(0);
            if (rowlist!=null) {
                for (var i=0;i<rowlist.size ();i++) {
                    var row = rowlist.row(i);
                    wkt.push (row.column("shape_wkt").getValue());
                }
            }
        }
        return wkt;
    },
    
    getDatasourceOptions: function (elementid,filter) {
        if (this.datasources.length == 0) {
            filter = filter || 'isspatial';
            var url = this.baseUrl+'&jdaf.error.contenttype=text/xml' +
                                   '&jdaf.error.xslt=' +
                                   '&page=get-datasources' +
                                   '&filter=' + encodeURIComponent (filter); 
            var request = new CBhttp ();
            pcol = request.executeUrl(url);
            if (pcol!=null) {
                var dsList = pcol.get("datasources");
                var str = "";
                for (var i=0; i<dsList.size(); i++) {
                    var dsName = dsList.get(i).getName();
                    var displayDsName = dsList.get(i).get('displayname').getValue();
                    if (displayDsName==null) {  
                        displayDsName = dsName;
                    }
                    this.datasources.push ({displayname:displayDsName,name:dsName});
                    
                    if (displayDsName.length>60) {
                        displayDsName = displayDsName.substring(0, 57) + "...";
                    }
                    this.datasourceoptions.push (new Option(displayDsName,dsName));
                }
            }
        }
        if (typeof elementid != 'string') {
            elementid = elementid.id;
        }
        for (var i=0;i<this.datasourceoptions.length;i++) {
            getElement(elementid).options[element.options.length] = this.datasourceoptions[i];
        }
    },
    
    searchDatasource: function (elementid,callback,filterhandler) {
        require(['/js/standard/jquery/jquery-ui.min.js'], SpatialMap.Function.bind (function(elementid,callback) {
            jq("input#"+elementid).autocomplete({
                source: SpatialMap.Function.bind (this.getDatasources,this,filterhandler),
                minLength: 0,
                select: callback,
                delay: 1000
            });
        },this,elementid,callback));
    },
    
    getDatasources: function (filterhandler, input, response) {
        if (filterhandler) {
            filter = filterhandler (input.term);
        } else {
            if ( input.term in this.cache ) {
                response( this.cache[ input.term ] );
                cbKort.log ('SelectObject.getDatasources () - USE CACHE - ',input,this.cache[ input.term ])
                return;
            }
            var filter = "isspatial";
            var admFilter = cbInfo.getParam ("module.spatialanalyze.datasourcefilter");
            if (admFilter!=null && admFilter!= "") {
                filter = filter + " and (" + admFilter + ")";
            }
            if (input.term!= "") {
                filter = filter + " and ( DatasourceHasCategory(datasource, '" + input.term + "') "
                    + "or displayname like '%" + input.term + "%' or datasource like '%" + input.term + "%' or endpoint like '%" + input.term + "%')";
            }
        }
        var params = {
            page: 'get-datasources',
            filter: encodeURIComponent (filter)
        };
        var url = cbKort.getUrl (params)+'&jdaf.error.contenttype=text/xml' +
                                         '&jdaf.error.xslt=';
        var request = new CBhttp ();
        pcol = request.executeUrl(url);
        var data = [];
        if (pcol!=null) {
            var dsList = pcol.get("datasources");
            var str = "";
            for (var i=0; i<dsList.size(); i++) {
                if (i>30) {
                    break;
                }
                var dsName = dsList.get(i).getName();
                var displayDsName = dsList.get(i).get('displayname').getValue();
                if (displayDsName==null) {  
                    displayDsName = dsName;
                }
                
                if (displayDsName!=dsName) {
                    displayDsName = displayDsName + " (" + dsName + ")";
                }
                
                if (displayDsName.length>60) {
                    displayDsName = displayDsName.substring(0, 57) + "...";
                }
                data.push ({value:dsName,label:displayDsName});
            }
        }
        cbKort.log ('SelectObject.getDatasources () - USE CACHE - ',filter,input,data)
        if (!filterhandler) {
            this.cache[ input.term ] = data;
        }
        response (data);
    },
    
    CLASS_NAME: 'SelectObject'
});

