
/*****************************************************************************
 *
 * Purpose: parse JSON strings to HTML (query result outputs)
 * Author:  Armin Burger
 *
 *****************************************************************************
 *
 * Copyright (c) 2003-2006 Armin Burger
 *
 * This file is part of p.mapper.
 *
 * p.mapper is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version. See the COPYING file.
 *
 * p.mapper is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with p.mapper; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 *
 ******************************************************************************/

try {
    var queryResultLayout = opener.queryResultLayout;
} catch(e) {
    var queryResultLayout = 'table';
}



function parseJSON(jsonstr, infoWin) {
    //alert(infoWin);
    var rhtml = '';

    // Nothing found with query, return only header 
    if (jsonstr[0].length == 0) {
        rhtml += '<table class="restable" cellspacing="0" cellpadding="0">';
        rhtml += '<td>' + localeList['noRecords'] + '</td>'; 
        rhtml += '<td><a href="javascript:this.close();"><img align="right" src="images/close.gif" border=0 ></a></td>';
        rhtml += '</tr></table>';
    
        return rhtml;
    }


    // Features found, parse JSON string
    var groups = jsonstr[0];    
    
    var jlen = groups.length;
    
    
    for (var i=0; i<jlen; i++) {
        var layObj = groups[i];
        
        rhtml += '<div class="LAYERHEADER">' + layObj.description + '</div>';
        rhtml += '<table class="sortable" border="0" cellspacing="0" cellpadding="0">';
        
        //*** Header line ***/
        var hL = layObj.header;
        if (hL[0] == '@') {
            var withShpLink = true;
        } else {
            var withShpLink = false;
            //var withShpLink = true;
        }
        
        var hLlen = hL.length;
        rhtml += '<tr>';
        var startcol = withShpLink ? 0 : 1;
        for (var hi=startcol; hi<hLlen; hi++) {
            rhtml += '<th>' + hL[hi] + '</th>';
        }
        rhtml += '</tr>';
        
        
        //*** Values of the layer ***/
        var vL = layObj.values;
        var vLlen = vL.length;
        
        for (var vi=0; vi<vLlen; vi++) {
            
            //--- Rows ---//
            var rowL = vL[vi];
            var rowLlen = rowL.length;
            
            rhtml += '<tr>';
            for (var ri=startcol; ri<rowLlen; ri++) {
                // Write out shape link for zoom
                if (withShpLink && ri < 1) {
                    var shplinkL = rowL[ri].shplink;
										var mode = '';
												mode = opener.$("varform");
										//shplinkL[2]=xmin_n+'+'+ymin_n+'+'+xmax_n+'+'+ymax_n;
										//alert (shplinkL[2]+' parsejson pmjson');
										 //Notwendige Unterscheidung damit auch beim Ergebnisfenster der Suche der Zoom-Button funktioniert.
										if (mode==null) {
                    rhtml += '<td class=\"zoomlink\"><a href="javascript:' + (infoWin == 'frame' ? '' : 'opener.') + 'zoom2extent(\'' + shplinkL[0] + '\', \''+ shplinkL[1] +'\', \'' + shplinkL[2] + '\', \'search\')">';
                    //alert (rhtml);
									  }
										else {
										rhtml += '<td class=\"zoomlink\"><a href="javascript:' + (infoWin == 'frame' ? '' : 'opener.') + 'zoom2extent(\'' + shplinkL[0] + '\', \''+ shplinkL[1] +'\', \'' + shplinkL[2] + '\', \'' + opener.type + '\')">';
										//alert(rhtml);
										}
										rhtml += '<img src="images/zoomto.gif" alt="zoomto"></a></td>';
                } else {
                    // Check for Hyperlinks
                    if (isObject(rowL[ri])) {
                        var hypLinkL = rowL[ri].hyperlink;
                        rhtml += '<td><a href="javascript:openHyperlink(\'' + hypLinkL[0] + '\', \'' + hypLinkL[1] + '\', \'' + hypLinkL[2] + '\')">' + hypLinkL[3] + '</a></td>';
                    } else {
                        rhtml += '<td>' + rowL[ri] + '</td>';
                    }
                }
            }
            rhtml += '</tr>';
        }
        

        rhtml += '</table>';
    }
    
    
    /*** Zoom parameters ***/
    var zp = jsonstr[1];
    var infoWin = zp.infoWin;
    
    var allextent = zp.allextent;//shplinkL[2];//
    var zoomall = zp.zoomall;
    if (zoomall) {
        //alert('ja');
        var zStr = '<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\"><tr><td class=\"zoomlink\">';
        zStr += "<a href=\"javascript:";
        zStr += (infoWin == 'frame' ? '' : 'opener.') + 'zoom2extent(0,0,\'' + allextent + '\')';
        zStr += '\"><img src=\"images/zoomtoall.gif\"alt=\"za\"></a></td><td class=\"TDAL\">' + localeList['zoomSelected'] + '</td></tr></table>';
        
        rhtml += zStr;
    }
    
    
    var autozoom = zp.autozoom;
    // Add image for onload event
    var azStr = '<img src=\"images/blank.gif\" onload=\"';  
    if (autozoom) {
        //var azStr = '<script type=\"text/javascript\">';
        
        if (autozoom == 'auto') {
						azStr += (infoWin == 'frame' ? 'window.parent.' : 'opener.') + 'zoom2extent(0,0,\'' + allextent + '\');';
        } else if (autozoom == 'highlight') {
            azStr += (infoWin == 'frame' ? 'window.parent.' : 'opener.') + 'updateMap(opener.PM_XAJAX_LOCATION + \'x_load.php?' + SID +  '&mode=map&zoom_type=zoompoint\', \'\')';
        }
        //alert(azStr);
        //azStr += '</script>';
        
    } else {
        azStr += (infoWin == 'frame' ? 'window.parent.' : 'opener.') + 'hideLayer(\'zoombox\');';
    }
    
    azStr += '\" />';
    rhtml += azStr;
    
    
    //rhtml += '<p><a href="javascript:opener.startExportQueryResults(\'xls\')">Export to XLS</a>';
    
    //alert( rhtml);
    
    return rhtml;
}





function parseJSON_dtree(jsonstr, infoWin) {
    //alert(infoWin);
    var rhtml = '';

    // Nothing found with query, return only header 
    if (jsonstr == 0) {
        rhtml += '<table class="restable" cellspacing="0" cellpadding="0">';
        rhtml += '<td>' + localeList['noRecords'] + '</td>'; 
        rhtml += '<td><a href="javascript:this.close();"><img align="right" src="images/close.gif" border=0 ></a></td>';
        rhtml += '</tr></table>';
    
        return rhtml;
    }
    

    // Features found, parse JSON string
    
    d = new dTree('d');
    d.add(0,-1,'Result');
		    
    var groups = jsonstr[0];    
    
    var jlen = groups.length;
    
    
    var id = 1;
    var gid = 0;
    
    for (var i=0; i<jlen; i++) {
        var layObj = groups[i];
        
        d.add(id, 0, layObj.description, '');
        var gid = id;
        id++;
        
        
        //*** Header line ***/
        var hL = layObj.header;
        if (hL[0] == '@') {
            var withShpLink = true;
        } else {
            var withShpLink = false;
            //var withShpLink = true;
        }
        
        var hLlen = hL.length;
        var startcol = withShpLink ? 0 : 1;
        var n4node = withShpLink ? 1 : 0;

        
        
        //*** Values of the layer ***/
        var vL = layObj.values;
        var vLlen = vL.length;
        
        for (var vi=0; vi<vLlen; vi++) {
            
            //--- Rows ---//
            var rowL = vL[vi];
            var rowLlen = rowL.length;
            
            if (isObject(rowL[n4node])) {
                var nodeAnnot = rowL[n4node].hyperlink[3];
            } else {
                var nodeAnnot = rowL[n4node];
            }
            d.add(id, gid, nodeAnnot, '');
            var rid = id;
            id++;
            
            for (var ri=startcol; ri<rowLlen; ri++) {
                // Write out shape link for zoom
                if (withShpLink && ri < 1) {
                    var shplinkL = rowL[ri].shplink;
                    //rhtml += '<td class=\"zoomlink\"><a href="javascript:' + (infoWin == 'frame' ? '' : 'opener.') + 'zoom2extent(\'' + shplinkL[0] + '\', \'' + shplinkL[1] + '\', \'' + shplinkL[2] + '\')">';
                    //rhtml += '<img src="images/zoomto.gif" alt="zoomto"></a></td>';
                } else {
                    // Check for Hyperlinks
                    if (isObject(rowL[ri])) {
                        var hypLinkL = rowL[ri].hyperlink;
                        var hlink = 'javascript:openHyperlink(\'' + hypLinkL[0] + '\', \'' + hypLinkL[1] + '\', \'' + hypLinkL[2] + '\')' ;
                        //var resrow = '<div class="qrow"><div class="qcell">' + hL[ri] + '</div>' + '<div class="qcell">' + hypLinkL[3] + '</div></div>';
                        var resrow =  '<span class="qcname">' + hL[ri] + '</span>: &nbsp;' +  hypLinkL[3];
                    } else {
                        var hlink = '';
                        //var resrow = '<div class="qrow"><div class="qcell">' + hL[ri] + '</div>' + '<div class="qcell">' + rowL[ri] + '</div></div>';;
                        var resrow =  '<span class="qcname">' + hL[ri] + '</span>: &nbsp;' + rowL[ri];
                        id++;
                    }
                    
                    d.add(id, rid, resrow, hlink);
                    id++;
                }
            }
        }
    }
    
    
    /*** Zoom parameters ***/
    var zp = jsonstr[1];
    var infoWin = zp.infoWin;
    
    var allextent = zp.allextent;
    
    var zoomall = zp.zoomall;
    if (zoomall) {
        //alert('ja');
        var zStr = '<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" width=\"100%\"><tr><td class=\"zoomlink\">';
        zStr += "<a href=\"javascript:";
        zStr += (infoWin == 'frame' ? '' : 'opener.') + 'zoom2extent(0,0,\'' + allextent + '\')';
        zStr += '\"><img src=\"images/zoomtoall.gif\"alt=\"za\"></a></td><td class=\"TDAL\">' + localeList['zoomSelected'] + '</td></tr></table>';
        
        rhtml += zStr;
    }
    
    
    var autozoom = zp.autozoom;
    // Add image for onload event
    var azStr = '<img src=\"images/blank.gif\" onload=\"';  
    if (autozoom) {
        //var azStr = '<script type=\"text/javascript\">';
        
        if (autozoom == 'auto') {
            azStr += (infoWin == 'frame' ? 'window.parent.' : 'opener.') + 'zoom2extent(0,0,\'' + allextent + '\');';
        } else if (autozoom == 'highlight') {
            azStr += (infoWin == 'frame' ? 'window.parent.' : 'opener.') + 'updateMap(opener.PM_XAJAX_LOCATION + \'x_load.php?' + SID +  '&mode=map&zoom_type=zoompoint\', \'\')';
        }
        //alert(azStr);
        //azStr += '</script>';
        
    } else {
        azStr += (infoWin == 'frame' ? 'window.parent.' : 'opener.') + 'hideLayer(\'zoombox\');';
    }
    
    azStr += '\" />';
    rhtml += azStr;
    
    var resList = new Array();
    resList[0] = d;
    resList[1] = rhtml;
    //alert( rhtml);
    
    var res = d + '<br />' + rhtml;
    
    return res; //List;
}



function parseJSON_IQuery(jsonstr) {

    // Nothing found with query 
    if (jsonstr == 0) {
        return false;
    }

    // Features found, parse JSON string
    var groups = jsonstr[0];    
    
    // Only take the first layer from group
    var layObj = groups[0];
    
    var startcol = 1; 
    
    //*** Header line ***/
    var hL = layObj.header;    
    var hLlen = hL.length;
    
    //*** Values of the layer ***/
    var vL = layObj.values;  
        
    //--- Rows ---//
    var rowL = vL[0];  // <====== Only take the first from result
   
   
    // Loop through records and create HTML
    var rhtml = '';
    rhtml += '<table  class="iquery" border="0" cellspacing="0" cellpadding="0">';
    rhtml += '<tr><th colspan="2" class="header">' + layObj.description + '</td></tr>';
    
    for (var hi=startcol; hi<hLlen; hi++) {
       if (hi==hLlen-1) {
				rhtml += '<tr >';
        rhtml += '<th style="border-bottom-style:solid; border-bottom-width:0px;text-align:left;">' + hL[hi] + '</th>';
        
        // Check for Hyperlinks
			
        if (isObject(rowL[hi])) {
            var hypLinkL = rowL[hi].hyperlink;
            rhtml += '<td style="border-bottom-style:solid; border-bottom-width:0px;">' + hypLinkL[3] + '</td>';
        } else {
            rhtml += '<td style="border-bottom-style:solid; border-bottom-width:0px;">' + rowL[hi] + '</td>';
        }
			 }
       else {
				rhtml += '<tr >';
        rhtml += '<th style="border-bottom-style:solid; border-bottom-width:1px;text-align:left;">' + hL[hi] + '</th>';
				
        // Check for Hyperlinks
			
				if (isObject(rowL[hi])) {
            var hypLinkL = rowL[hi].hyperlink;
            rhtml += '<td style="border-bottom-style:solid; border-bottom-width:1px;">' + hypLinkL[3] + '</td>';
        } else {
            rhtml += '<td style="border-bottom-style:solid; border-bottom-width:1px;">' + rowL[hi] + '</td>';
        }
			 }
       rhtml += '</tr>';
    }

    rhtml += '</table>';
    
    return rhtml;
}




function parseJSON_IQuery_0(jsonstr) {
    
    var rhtml = '';

    // Nothing found with query, return only header 
    if (jsonstr == 0) {
        return false;
    }


    // Features found, parse JSON string
    var groups = jsonstr[0];    
    
    var jlen = groups.length;
    
    
    for (var i=0; i<jlen; i++) {
        var layObj = groups[i];
        
        rhtml += '<div class="LAYERHEADER">' + layObj.description + '</div>';
        rhtml += '<table class="iquery" border="0" cellspacing="0" cellpadding="0">';
        
        //*** Header line ***/
        var hL = layObj.header;
        if (hL[0] == '@') {
            var withShpLink = true;
        } else {
            var withShpLink = false;
        }
        
        var hLlen = hL.length;
        rhtml += '<tr>';
        var startcol = 1; //withShpLink ? 0 : 1;
        for (var hi=startcol; hi<hLlen; hi++) {
            rhtml += '<th>' + hL[hi] + '</th>';
        }
        rhtml += '</tr>';
        
        
        //*** Values of the layer ***/
        var vL = layObj.values;
        var vLlen = vL.length;
        
        for (var vi=0; vi<vLlen; vi++) {
            
            //--- Rows ---//
            var rowL = vL[vi];
            var rowLlen = rowL.length;
            
            rhtml += '<tr>';
            for (var ri=startcol; ri<rowLlen; ri++) {
                // Write out shape link for zoom

                // Check for Hyperlinks
                if (isObject(rowL[ri])) {
                    var hypLinkL = rowL[ri].hyperlink;
                    rhtml += '<td>' + hypLinkL[3] + '</td>';
                } else {
                    rhtml += '<td>' + rowL[ri] + '</td>';
                }
                
            }
            rhtml += '</tr>';
        }
        

        rhtml += '</table>';
    }
    
    return rhtml;
}




/**
 * Parse JSON result string with parseJSON()
 * and insert resulting HTML into queryresult DIV
 */
function writeQResult() {
    if (queryResultLayout == 'table') {
        var resstr = parseJSON(resultJSON, opener.infoWin);
        $('queryresult').innerHTML = resstr;
        //window.onload = function() {alert('pippo')};
        sortables_init();
    } else {
        var restree = parseJSON_dtree(resultJSON, opener.infoWin);
        $('dtreequeryresult').innerHTML = restree;
    }
}


function showDtreeInfo() {
    var d = parseJSON_dtree(resultJSON, opener.infoWin);
    //alert(d);
    $('queryresult').innerHTML = d;
    
}



function isObject(a) {
    return (a && typeof a == 'object') || typeof a == 'function';
} 


