//tolerance when we ask wfs (comes from conf file)
if(typeof(mb_wfs_tolerance)==='undefined') {
var mb_wfs_tolerance = 8;
}
var targetArray = tooltipTarget.split(",");
//initialize Element Vars
//destination frame for the request (creates Popup if empty)
if(typeof(tooltip_destinationFrame)==='undefined')
var tooltip_destinationFrame = "";
if(typeof(tooltip_timeDelay)==='undefined')
var tooltip_timeDelay = 1000;
if(typeof(tooltip_styles)==='undefined')
var tooltip_styles = "";
if(typeof(tooltip_width)==='undefined')
var tooltip_width = 270;
if(typeof(tooltip_height)==='undefined')
var tooltip_height = 200;
if(typeof(tooltip_styles_detail)==='undefined')
var tooltip_styles_detail = "";
if(typeof(tooltip_disableWms)==='undefined')
var tooltip_disableWms = "0";
if(typeof(tooltip_disableWfs)==='undefined')
var tooltip_disableWfs = "0";
try{
var no_result_text = eval(tooltip_noResultArray);
}catch(e){
var no_result_text = ["Kein Ergebnis.",'
'];
}
var mouseMoves=0;
var tooltipWin=null;
var point;
var tooltipWfsRequestCount = 0;
var tooltipWmsRequestCount = 0;
var numberOfFinishedWfsRequests = 0;
var numberOfFinishedWmsRequests = 0;
var visibleRequest = 0;
var tooltipMsg = {'title':""};
function mod_tooltipInit(){
var tooltip_map = getMapObjByName(tooltipTarget);
var ind = getMapObjIndexByName(tooltipTarget);
var myMapObj = mb_mapObj[ind];
var map_el = myMapObj.getDomElement();
$(map_el.ownerDocument).mousemove(function(event){
point = tooltip_map.getMousePosition(event);
//mb_getMousePos(event,myMapObj.getMousePosition(event));
mod_tooltip_run(point);
}).mouseout(function(){
mouseMoves=0;
});
}
eventInit.register(mod_tooltipInit); //initialize tooltips!
function mod_tooltip_run(point){
mouseMoves++;
var currentMouseMoves = mouseMoves;
setTimeout(function () {
if(point !== null && mouseMoves == currentMouseMoves) {
fireRequests(point);
}
}
,tooltip_timeDelay
);
}
function fireRequests(point){
var ind = getMapObjIndexByName(tooltipTarget);
var point_geom = new Geometry(geomType.point);
point_geom.addPoint(mapToReal(tooltipTarget,point));
visibleRequest = 0;
if(tooltip_disableWms != '1') {
//FeatureInfo requests
urls = mb_mapObj[ind].getFeatureInfoRequests(point);
tooltipWmsRequestCount = urls.length;
numberOfFinishedWmsRequests = 0;
for(var j=0;j < urls.length;j++){
mb_ajax_post("../extensions/ext_featureInfoTunnel.php", {url:urls[j]},
checkFeatureInfoResults);
}
}
if(tooltip_disableWfs != '1') {
//WFS requests
requests = getWfsRequests(tooltipTarget, point_geom, true);
tooltipWfsRequestCount = requests.length;
numberOfFinishedWfsRequests = 0;
resultGeomArray = new GeometryArray();
for(var j=0;j< requests.length;j++){
(function () {
var currentRequest = requests[j];
mb_ajax_post("../" + wfsResultModulePath + wfsResultModuleFilename,currentRequest,function(js_code,status){
var geom = new GeometryArray();
if (js_code && geom.importGeoJSON(js_code)) {
if (typeof(currentRequest) === "object" && typeof(currentRequest.js_wfs_conf_id) !== "undefined") {
for (var i = 0; i < geom.count(); i++) {
geom.get(i).wfs_conf = parseInt(currentRequest.js_wfs_conf_id);
}
}
}
checkWfsResultsFinished(geom);
});
}());
}
}
}
function checkFeatureInfoResults(js_code,status){
numberOfFinishedWmsRequests++;
//check if there are results
if(js_code == ""){
if(!isFirstResult())
displayResultDoc("");
return;
}
for(var k=0;k < no_result_text.length;k++){
if(js_code.indexOf(no_result_text[k])!==-1){
if(!isFirstResult()) {
displayResultDoc("");
}
return;
}
}
//output code
displayResultDoc(js_code);
}
function checkWfsResultsFinished(g){
//check if all wfs requests arrived
numberOfFinishedWfsRequests++;
if (typeof(g) == 'object'){
resultGeomArray.union(g);
}
if (numberOfFinishedWfsRequests == tooltipWfsRequestCount) {
if(resultGeomArray.count()>0){
//generate and output result
//if(resultGeomArray.count()>1) {
var html = createSimpleWfsResultHtml(resultGeomArray);
//}
//else {
// var html = createDetailedWfsResultHtml(resultGeomArray);
//}
displayResultDoc(html);
}
else if(!isFirstResult())
displayResultDoc("");
}
}
function isFirstResult(){
return visibleRequest == 0;
}
function isLastResult(){
return (numberOfFinishedWfsRequests == tooltipWfsRequestCount && numberOfFinishedWmsRequests == tooltipWmsRequestCount);
}
function displayResultDoc(html){
//test if we have a fixed destination and create popup otherwise
if(tooltip_destinationFrame=="") {
return showBalloonFrame(html);
}
//put the frame there
$("#"+tooltip_destinationFrame).each(function(){
var oDoc = this.contentWindow || this.contentDocument;
if (oDoc.document) {
oDoc = oDoc.document;
}
if(isFirstResult())
oDoc.open();
oDoc.write(html);
if(isLastResult())
oDoc.close();
});
visibleRequest++;
}
function showBalloonFrame(html){
if(isFirstResult()){
//calculate Position
x=point.x+parseInt(document.getElementById(tooltipTarget).style.left, 10);
y=point.y+parseInt(document.getElementById(tooltipTarget).style.top, 10);
//hide old Popup
if(tooltipWin&&tooltipWin.isVisible())
tooltipWin.destroy();
//create Popup and append document
tooltipWin = new mb_popup({html:'',title:tooltipMsg.title,width:tooltip_width,height:tooltip_height,balloon:true,left:x,top:y});
//open document
tooltipWin.open();
}
tooltipWin.write(html);
if(isLastResult()){
tooltipWin.close();
}
//finally display popup
tooltipWin.show();
visibleRequest++;
// destroy the popup if the mouse leaves the popup
$("#"+tooltipWin.id + " #tooltipWin").mouseout(function() {
tooltipWin.destroy();
});
}
function getWfsRequests(target, geom, checkscale, filteroption){
//get all configurations
wfs_config = get_complete_wfs_conf();
var ind = getMapObjIndexByName(target);
var db_wfs_conf_id = [];
var js_wfs_conf_id = [];
//search configurations that are selected (and in scale)
for (var i=0; i < mb_mapObj[ind].wms.length; i++){
for(var ii=0; ii < mb_mapObj[ind].wms[i].objLayer.length; ii++){
var o = mb_mapObj[ind].wms[i].objLayer[ii];
if(o.gui_layer_wfs_featuretype != '' && o.gui_layer_querylayer == '1'){
if(!checkscale || o.checkScale(mb_mapObj[ind]))
db_wfs_conf_id[db_wfs_conf_id.length] = o.gui_layer_wfs_featuretype;
}
}
}
for(var i=0; i < db_wfs_conf_id.length; i++){
for(var ii=0; ii < wfs_config.length; ii++){
if(wfs_config[ii]['wfs_conf_id'] == db_wfs_conf_id[i]){
js_wfs_conf_id[js_wfs_conf_id.length] = ii;
break;
}
}
}
//build requests
var requests = [];
for(var i=0;i < js_wfs_conf_id.length; i++){
//build url
var url = wfs_config[js_wfs_conf_id[i]]['wfs_getfeature'];
url += mb_getConjunctionCharacter(wfs_config[js_wfs_conf_id[i]]['wfs_getfeature']);
url += "service=wfs&request=getFeature&version=1.0.0";
url += "&typename="+ wfs_config[js_wfs_conf_id[i]]['featuretype_name'];
url += "&filter=";
//search for geometry column
var geometryCol;
for(var j=0; j < wfs_config[js_wfs_conf_id[i]]['element'].length; j++){
if(wfs_config[js_wfs_conf_id[i]]['element'][j]['f_geom'] == 1){
geometryCol = wfs_config[js_wfs_conf_id[i]]['element'][j]['element_name'];
}
}
//get filter
var filter = new WfsFilter();
filter.addSpatial(geom, geometryCol, filteroption, wfs_config[js_wfs_conf_id[i]]['featuretype_srs'], target);
requests.push({'url':url,'filter':filter.toString(), 'typename':wfs_config[js_wfs_conf_id[i]]['featuretype_name'],'js_wfs_conf_id':js_wfs_conf_id[i], 'db_wfs_conf_id':db_wfs_conf_id[i]});
}
return requests;
}
function createSimpleWfsResultHtml(_geomArray){
var geometryIndex = 0;
wfsConf = get_complete_wfs_conf();
var html = '\n";
for (var i = 0 ; i < _geomArray.count(); i ++) {
if (_geomArray.get(i).get(-1).isComplete()) {
html += "\t\n\t\t" + geomName +" | ";
html += "\t\t
\n";
}
}
html += "
\n";
return html;
}
function createDetailedWfsResultHtml(_geomArray){
var geometryIndex = 0;
var cnt = 0;
wfsConf = get_complete_wfs_conf();
var html = '\n";
var wfsConfIndex = _geomArray.get(geometryIndex).wfs_conf;
var currentWfsConf = wfsConf[wfsConfIndex];
for (var i = 0 ; i \n";
html += currentWfsConf.element[i].f_label;
html +=" | \n";
html += "\n";
var elementVal = _geomArray.get(geometryIndex).e.getElementValueByName(currentWfsConf.element[i].element_name);
if(currentWfsConf.element[i].f_form_element_html.indexOf("href")!=-1){
var setUrl = currentWfsConf.element[i].f_form_element_html.replace(/href\s*=\s*['|"]\s*['|"]/, "href='"+elementVal+"' target='_blank'");
if(setUrl.match(/><\/a>/)){
var newLink = setUrl.replace(/><\/a>/, ">"+elementVal+"");
}
else{
var newLink = setUrl;
}
html += newLink;
}
else{
html += elementVal;
}
html += " | \n";
cnt++;
}
}
}
html += "
\n";
return html;
}
function getWfsListEntry (geom) {
wfsConfId = geom.wfs_conf;
wfsConf = window.frames["wfs_conf"].get_wfs_conf();
if (typeof(wfsConfId) == "number" && wfsConfId >=0 && wfsConfId < wfsConf.length) {
var resultArray = [];
for (var i = 0 ; i < wfsConf[wfsConfId]['element'].length ; i++) {
if (wfsConf[wfsConfId]['element'][i]['f_show'] == 1 && geom.e.getElementValueByName(wfsConf[wfsConfId]['element'][i]['element_name']) !=false) {
var pos = wfsConf[wfsConfId]['element'][i]['f_respos'];
if (typeof(resultArray[pos]) != "undefined") {
resultArray[pos] += " " + geom.e.getElementValueByName(wfsConf[wfsConfId]['element'][i]['element_name']);
}
else {
resultArray[pos] = geom.e.getElementValueByName(wfsConf[wfsConfId]['element'][i]['element_name']);
}
}
}
var resultName = resultArray.join(" ");
if (resultName == "") {
resultName = wfsConf[wfsConfId]['g_label'];
}
return resultName;
}
else {
return false;
}
}
/*
* event -> {over || out || click}
* geom -> commaseparated coordinates x1,y1,x2,y2 ...
*/
function setResult(event, index){
var currentGeom = resultGeomArray.get(index);
var resultHighlight = new parent.Highlight(targetArray, "tooltipHighlight", {"position":"absolute", "top":"0px", "left":"0px", "z-index":100}, 2);
var cw_fillcolor = "#cc33cc";
if (event == "over") {
resultHighlight.add(currentGeom, cw_fillcolor);
resultHighlight.paint();
}
else if (event == "out"){
resultHighlight.del(currentGeom, cw_fillcolor);
resultHighlight.paint();
}
else if (event == "click"){
resultHighlight.del(currentGeom, cw_fillcolor);
var bbox = currentGeom.getBBox();
//parent.mb_calculateExtent(tooltipTarget, bbox[0].x, bbox[0].y, bbox[1].x, bbox[1].y);
//parent.zoom(tooltipTarget, 'true', 1.0);
resultHighlight.add(currentGeom, cw_fillcolor);
resultHighlight.paint();
}
return true;
}