// ===============================================================
// CBkort version 2.x, copyright Carl Bro GIS&IT, 2006
// ===============================================================
// $Archive: /Products/CBKort2/development/2.3/standard_patch_04/wwwroot/WEB-INF/config/modules/standard/spatialquery/js/spatialquery.js $ 
// $Date: 3-03-08 22:10 $
// $Revision: 47 $ 
// $Author: Kpo $
// =============================================================== 


//********************************************//
//  Aktivér en søgning                        //
//  Søgningen gemmes queryResultContainer     //
//********************************************//
var spatialquery_showOnActivate        = false;
var spatialquery_currentQueryResult    = null;
var spatialquery_currentQueryUrl       = null;
var spatialquery_currentSearchText     = '';
var spatialquery_paramHandlers         = new Array();
var spatialquery_resultlayoutHandlers  = new Array();

function spatialquery_doQuery (profilequery, queryurl, searchtext, closeHandler)
{
    closeHandler = null;
    spatialquery_currentSearchText = searchtext;
    spatialquery_currentQueryUrl = queryurl;
    
    // Execute query and get result
    var resultlayout = spatialquery_getResultLayout(profilequery);
    var hideSearchImg = false;
 
    // Show result    
    switch (resultlayout)
    {
        case 'leftbar':
            queryurl = replaceUrlParam('page', 'spatialquery-getresult', queryurl);
            leftbarsq_showQueryresult(queryurl,searchtext,false,hideSearchImg);
        break;
        case 'leftbarnoreport':
            queryurl = replaceUrlParam('page', 'spatialquery-getresult', queryurl);
            leftbarsq_showQueryresult(queryurl,searchtext,true,hideSearchImg);
        break;
        case 'default':
        case 'report':
        default:
            var customhandler = false;
            for(var i=0;i < spatialquery_resultlayoutHandlers.length;i++)
            {
                if(spatialquery_resultlayoutHandlers[i].id == resultlayout)
                {
                    spatialquery_resultlayoutHandlers[i].handler(profilequery, queryurl, closeHandler);
                    customhandler = true;
                    i = spatialquery_resultlayoutHandlers.length;
                }
            }
            if(!customhandler)
            {
                queryurl = replaceUrlParam('page', 'spatialquery-getresult-html', queryurl);
                // closehandler is removed (set to null)!!!
                showDivBox('Info', queryurl, false, null, null, '249px', '205px',closeHandler);
            }
        break;
    }
}


function spatialquery_markAndQuery (wkt, distance, profilequery, seekAllThemes, dynamiclayer, searchtext, closeHandler)
{
    var request = new CBhttp();

    showWaitingBox('Henter data ...');
     
    // Remove dynamic layers
    var url = cbKort.getServletUrl();
    url += "?page=spatialquery-remove-highlight-dynlayer";
    url += "&sessionid=" + cbKort.getSessionId();
    
    request.executeUrl(url, false);

    // Add new dynamic layer with the polygon
    var url =  cbKort.getFormParamAsUrl();
    url = replaceUrlParam('page', 'ds-tilfoej-wkt-som-dynamisk-lag', url);
    url = replaceUrlParam('zoomdir', '0', url);    
    url = replaceUrlParam('shape_wkt', wkt, url);    
    url = replaceUrlParam('dynamiclayer', dynamiclayer,        url);    
    
    setHelperframeSrc(url);
 
    //Foretag soegning
    url =  cbKort.getServletUrl();
    url+=  "?page=spatialquery-getresult";
    url+=  "&profilequery="+profilequery;
    url+=  "&profile="+cbKort.getProfile();
    url+=  "&wkt="+wkt;
    url+=  "&sessionid="+cbKort.getSessionId();
    url+=  "&layers="+cbKort.getLayers();
    url+=  "&distance="+distance;
    url+=  "&currentscale="+cbKort.getCurrentScale();
    if (seekAllThemes)
    {  url+= "&seek_all_themes=true";
    }
    for(var i=0;i < spatialquery_paramHandlers.length;i++)
    {
        var p = spatialquery_paramHandlers[i]();
        url = replaceUrlParam(p.name, p.value, url);
    }
    
    spatialquery_doQuery (profilequery, url, searchtext, spatialquery_removedynlayer)
    
    hideWaitingBox();
}    


function spatialquery_getResultLayout(profilequery)
{
    var resultlayout = '';
    var url = cbKort.getServletUrl()+'?page=get.profile.nodevalue&profile='+cbKort.profile+'&xpath=/profile/queries/spatialquery[@name="'+profilequery+'"]/@resultlayout';
        url+="&jdaf.error.xslt=";
        url+="&jdaf.error.contenttype=text/xml";
    
    var request = new CBhttp ();
    pcol = request.executeUrl(url);
    if (pcol!=null)
    {
        var resultlayout = pcol.get(0).column("nodevalue").getValue();
        if(resultlayout==null)
        {
            url = cbKort.getServletUrl()+'?page=get.profile.nodevalue&profile='+cbKort.profile;
            url+='&xpath=/profile/queries/defaults/resultlayout';
            url+='&jdaf.error.xslt=';
            url+='&jdaf.error.contenttype=text/xml';
            
            var request = new CBhttp ();
            pcol = request.executeUrl(url);
            if (pcol!=null)
            {
                var resultlayout = pcol.get(0).column("nodevalue").getValue();
                if(resultlayout==null)
                {
                    alert('Der er ikke angivet en resultlayout i profilen');
                }
            }
        }
    }
    return resultlayout;
}

function spatialquery_getQueryResult (queryurl, searchText) 
{
    var queryResult = new QueryResult(searchText);
    queryResult.searchURL = queryurl;
    
    var request = new CBhttp();

    var result = request.executeUrl(queryurl, false);
    
    if (result==null)
    {  return null;
    }
    
    result = result.get(0);
    
    var targets = result.get("targethits");

    var misc = result.get("misc");
    if (misc!=null)
    {   var col = misc.get('querystring');
        if (col!=null) 
        {  var querystring = col.getValue();
           queryResult.queryString = querystring;
        }
    }
    
    if (targets==null)
    {  // Maybe there is an extra PComposite around the result
       targets = result.get(0).get("targethits");   
    }
    
    // Løber alle targets igennem. Targets er en pcomposite.    
    
    for (var i=0; targets!=null && i<targets.size(); i++) 
    {
        var target = targets.get(i);
        	
        var targetName = '';
        var targetNumber = '';
        
        var header = '';
        var expand = true;
        var warning = null;
        var errorText = '';
            
        var i2 = 0;
            
        // Get static text elements 
        while (i2<target.size() && target.get(i2).isColumn())
        {
           var text = target.get(i2); 
           var name  = text.getName();
           var value = text.getValue();	

           if(name=="targetname")
           {  targetName = value;
           }
           else if(name=="targetnumber")
           {  targetNumber = value;
           }
           else if(name=="overskrift" || name=="header")
           {   header = value;
           } 
           else if(name=="expanded" || name=="expand")
           {
               if(value == 'false')
               {  expand = false;
               }
           }
           else if(name=="warning")
           {  warning = value;
           }
           else if(name=="errortext")
           {  errorText = value;
           }
           
           i2++;
        }   
    
        var queryResultTarget = queryResult.addTarget(targetName, targetNumber, header, expand, warning, errorText);
            
        // Løb alle hits igennem.
        while (i2<target.size() && target.get(i2).isRowList())
        {  
        	var hit = target.get(i2);

            var queryResultTargetHit = queryResultTarget.addTargetHit();

            // Løb alle værdier i et hit igennem. Hit er en rowlist.
            for(var h = 0; h < hit.size(); h++)
            {
               var presRow = hit.row(h);     
               var formattedValue = (presRow.column("value").getValue() == null) ? '':presRow.column("value").getValue();
               var formattedLabel = (presRow.column("label").getValue() == null) ? '':presRow.column("label").getValue();
               
               var val = 
               {  value:formattedValue,
                  label:formattedLabel,
                  format:presRow.column("format").getValue()
               };
                       
               queryResultTargetHit.addValue(val);
               queryResult.lasthit = h + '_' + h;
            }   
            i2++;
        }
    }
    
    var selectors = result.get("selectors");
    
    if (selectors!=null)
    {
    	var selector = selectors.get("selector");
    	if (selector!=null)
        {  queryResult.selectorPcolId = selector.getId();
        }
    }
    
    return queryResult
}

function spatialquery_removedynlayer()
{
    showWaitingBox();
    cbKort.removeSearchResults('dynlayer_remove_user');
}

//********************************************//
//  Håndtering af flere søgeresultater        //
//  Et søgeresultat kan gemmes og hentes frem //
//********************************************//


function spatialquery_getQueryResultTargetHit (targetId,targetHitId)
{
    return spatialquery_currentQueryResult.targets[targetId].targetHits[targetHitId];
}


function spatialquery_showSearchElementInMap()
{
    var res = spatialquery_currentQueryResult;
    if (res!=null)
    {  var pcolid = res.selectorPcolId;
       var displaybuffer = '25+pct!400+minimum';
       var dynamiclayer = "user*";
       spatialquery_showInMap(pcolid, displaybuffer, dynamiclayer);    
    }
}

function spatialquery_showInMap(pcolid, displaybuffer, dynamiclayer)
{
    showWaitingBox();
    if(dynamiclayer)
      setTimeout('spatialquery_showInMapExecute("'+pcolid+'","'+displaybuffer+'","'+dynamiclayer+'")',100);
    else
      setTimeout('spatialquery_showInMapExecute("'+pcolid+'","'+displaybuffer+'")',100);
}

function spatialquery_showInMapExecute(pcolid, displaybuffer, dynamiclayer)
{
    if(!displaybuffer)
    {  displaybuffer = '25+pct!400+minimum';
    }
    
    var request = new CBhttp();

    var url = cbKort.getServletUrl();
    url += "?page=spatialquery-remove-highlight-dynlayer";
    url += "&sessionid=" + cbKort.getSessionId();

    request.executeUrl(url, false);

    var url = cbKort.getServletUrl();
    url += "?page=spatialquery-add-dynlayer-from-pcolid";
    url += "&savename=last_sq_result";
    url += "&pcolid=" + pcolid;
    if(dynamiclayer)
       url += "&dynamiclayer=" + dynamiclayer;
    else
       url += "&dynamiclayer=smalluser*found";
    url += "&append=false";
    url += "&sessionid=" + cbKort.getSessionId();

    request.executeUrl(url, false);

    var url = cbKort.getFormParamAsUrl();
    url = replaceUrlParam('page','spatialquery-get-map-zoom-to-datasource',url);
    url = replaceUrlParam('datasource','userdatasource',url);
    url = replaceUrlParam('displaybuffer',displaybuffer,url);
    // create map 
    updateMapData(getMapDataRequest(url));

    hideWaitingBox();
}


//********************************************//
//  Dan rapport                               //
//********************************************//
function spatialquery_printReport(url, searchtext, page, targetlist, includeheader)
{
    
    if (targetlist!=null && targetlist!="")
    {
      	url = replaceUrlParam('page', page, url);
       	url = replaceUrlParam('targetlist', targetlist, url);
       	url = replaceUrlParam('stext', searchtext, url);
       	url = replaceUrlParam('dato', formatDate(new Date(), "dd-MM-yyyy"), url);
       	url = replaceUrlParam('includeheader', includeheader, url);
       	url = replaceUrlParam('seek_all_themes', "true", url);
       	for(var i=0;i < spatialquery_paramHandlers.length;i++)
       	{
       	    var p = spatialquery_paramHandlers[i]();
       	    url = replaceUrlParam(p.name, p.value, url);
       	}
        window.open(url, 'report', 'toolbar=no,location=no,directories=no,status=yes,menubar=yes,resizable=yes,scrollbars=yes,width=800,height=500,left=50,top=50');
    }
    else
        alert ("Der skal medtages mindst een gruppe af resultater");
}

//********************************************//
//  Param registration                        //
//  register a handler to return name and     //
//  value (see example)                       //
//********************************************//
function spatialquery_registerParamHandler(handler)
{
    spatialquery_paramHandlers[spatialquery_paramHandlers.length] = handler;
}
/*
function spatialquery_example()
{
    return {name:'paramname',value:'myvalue'};
}
spatialquery_registerParamHandler(spatialquery_example);
*/

//********************************************//
//  Resultlayout registration                 //
//  register a handler to run the query       //
//********************************************//
function spatialquery_registerResultlayoutHandler(id, handler)
{
    spatialquery_resultlayoutHandlers[spatialquery_resultlayoutHandlers.length] = {id:id,handler:handler};
}
