var _xmlRoadCondWKTTemplate = '<ORIONML version="1.0" customresponse="false"><REQUEST plugin="GenericWKT" version=""><GENERIC_WKT table="dbo.Triss_Vaglag"><GET_WKT><FILTER cols="distinct #columns#" where="" /><ENVELOPE minx="#minX#" miny="#minY#" maxx="#maxX#" maxy="#maxY#" /></GET_WKT></GENERIC_WKT></REQUEST></ORIONML>'; 
var _xmlRoadCondInfoTemplate = '<ORIONML version="1.0"><REQUEST plugin="TrissData2" version="" locale="SE_sv"><PLUGINML table="RoadConditions" filter="condition>1 #sectionNo#" selectcolumns="#columns#"/></REQUEST></ORIONML>';
var _orionRoadCondInfoResponse = null;
var _noInfoFound="Ingen information hittades.";
var _errorMsg="Fel uppstod. Försök igen.";
var SELECT_COLUMNS_ROADCOND_WKT = "sectionno";
var SELECT_COLUMNS_FULLINFO_ROADCOND = "Id,LPV_IconId,Provider,ConditionText,LocationText,RoadNumber,ConditionInfo,Warning,StartTime";

// For pix for restareas and vvis
var _requestRA_Photos = '<ORIONML version="1.0"><REQUEST plugin="CameraInfo" version=""><PLUGINML table="Cameras" selectcolumns="Cameragroup, PhotoUrl, PhotoUrlThumb" filter="Cameragroup in (#ids#)"/></REQUEST></ORIONML>';
var _responseRA_Photos = null;
var _requestVVIS_Data = '<ORIONML version="1.0"><REQUEST plugin="TrissData2" version="" locale="SE_sv"><PLUGINML table="WeatherHistory" selectcolumns="Id,MeasureTime,PrecipitationAmountName,RoadTemp,AirTemp,AverageWindForce,AverageWindDirection,MaxWindForce,MaxWindDirection" filter="id in (#ids#)" orderby="Id,MeasureTime desc"/></REQUEST></ORIONML>';
var _responseVVIS_Data = null;
function serverRequestVVISData(orionResponse, menuObjId) {
    try {
//        var strXmlData = menuObjId==101 ? _requestVVISDataForCameras : _requestVVIS_Data;
        var strXmlData = menuObjId==13 ? _requestVVISDataForCameras : _requestVVIS_Data;
        var c = orionResponse.size ();
        var ids = "";
        var id = "";
        
        if (c>0) {
            for (var i=0; i<c; i++) {
                if ( (menuObjId==13) || (menuObjId==14) )
                    id = orionResponse[i].CameraGroup;
                else
                    id = orionResponse[i].Id;
                ids += "'" + id + "',";
            }
                
            ids += "'-99'";
            strXmlData = strXmlData.replace ("#ids#", ids);                
            
            try {
                strXmlData = strXmlData.replace ("SE_sv", getLocale ());
            } catch (e) {} 
            
            new Ajax.Request(_orionURL, 
             {
                method: 'POST', 
                contentType: "text/xml", 
                postBody: strXmlData, 
                onSuccess: function(transport) { onSuccessVVIS_Data(transport, orionResponse, menuObjId); }  
                ,onFailure: function (transport) { onErrorVVIS_Data (transport, orionResponse, menuObjId); }
             }
            );
         }
         else
            showDetailInfo (orionResponse, menuObjId);         
    } catch (e) {showDetailInfo (orionResponse, menuObjId);}
}
function serverRequestRestareaPhotos (orionResponse, menuObjId) {
    try {
        var strXmlData = _requestRA_Photos;
        var c = orionResponse.size ();
        var ids = "";
        
        if (c>0) {
            for (var i=0; i<c; i++) 
                ids += "'" + orionResponse[i].Id + "',";
                
            ids += "'-99'";
            strXmlData = strXmlData.replace ("#ids#", ids);                

            try {
                strXmlData = strXmlData.replace ("SE_sv", getLocale ());
            } catch (e) {} 
                        
            new Ajax.Request(_orionURL, 
             {
                method: 'POST', 
                contentType: "text/xml", 
                postBody: strXmlData, 
                onSuccess: function(transport) { onSuccessRA_Photos(transport, orionResponse, menuObjId); }  
                ,onFailure: function (transport) { onErrorRA_Photos (transport, orionResponse, menuObjId); }
             }
            );
         }
         else
            showDetailInfo (orionResponse, menuObjId);         
    } catch (e) {showDetailInfo (orionResponse, menuObjId);}
}
function onSuccessRA_Photos(objHttpRequest, orionResponse, menuObjId) {
    try {
        _responseRA_Photos = objHttpRequest.responseText.evalJSON(); 
    } catch (e) {}
    try {
        showDetailInfo (orionResponse, menuObjId);
    } catch (e) {}
}
function onErrorRA_Photos(objHttpRequest, orionResponse, menuObjId) {
    try {
        _responseRA_Photos = null;
        showDetailInfo (orionResponse, menuObjId);
    } catch (e) {}
}
function onSuccessVVIS_Data(objHttpRequest, orionResponse, menuObjId) {
    try {
        _responseVVIS_Data = objHttpRequest.responseText.evalJSON(); 
    } catch (e) {}
    try {
        showDetailInfo (orionResponse, menuObjId);
    } catch (e) {}
}
function onErrorVVIS_Data(objHttpRequest, orionResponse, menuObjId) {
    try {
        _responseVVIS_Data = null;
        showDetailInfo (orionResponse, menuObjId);
    } catch (e) {}
}
//
//
//
function serverRequest(strUrl, strXmlData, menuObjId) {
    try {
        strXmlData = strXmlData.replace ("SE_sv", getLocale ());
    } catch (e) {} 
            
    new Ajax.Request(strUrl, 
     {
        method: 'POST', 
        contentType: "text/xml", 
        postBody: strXmlData, 
        onSuccess: function(transport) { onSuccess(transport, menuObjId); },
        onFailure: function (transport) { onError (transport); }
     }
    );
}
function serverRequestWKT(strUrl, strXmlData, minX, maxX, minY, maxY, menuObjId) {
    try {
        strXmlData = strXmlData.replace ("SE_sv", getLocale ());
    } catch (e) {} 
            
    new Ajax.Request(strUrl, 
     {
        method: 'POST', 
        contentType: "text/xml", 
        postBody: strXmlData, 
        onSuccess: function(transport) { onSuccessWKT(transport, minX, maxX, minY, maxY, menuObjId); },
        onFailure: function (transport) { onErrorWKT (transport, minX, maxX, minY, maxY, menuObjId); }
     }
    );
}
function serverRequestRoadCondInfo(strUrl, strXmlData, minX, maxX, minY, maxY, menuObjId) {
    try {
        strXmlData = strXmlData.replace ("SE_sv", getLocale ());
    } catch (e) {} 
            
    new Ajax.Request(strUrl, 
     {
        method: 'POST', 
        contentType: "text/xml", 
        postBody: strXmlData, 
        onSuccess: function(transport) { onSuccessRoadCondInfo(transport, minX, maxX, minY, maxY, menuObjId); },
        onFailure: function (transport) { onErrorRoadCondInfo (transport, minX, maxX, minY, maxY, menuObjId); }
     }
    );
}
function serverRequestEmergencyReport(strUrl, strXmlData) {
    try {
        strXmlData = strXmlData.replace ("SE_sv", getLocale ());
    } catch (e) {} 
            
    new Ajax.Request(strUrl, 
     {
        method: 'POST', 
        contentType: "text/xml", 
        postBody: strXmlData, 
        onSuccess: function(transport) { onSuccessEmergencyReport(transport); }  
        ,onFailure: function (transport) { onErrorEmergencyReport (transport); }
     }
    );
}
function onSuccess(objHttpRequest, menuObjId) {
    try {
        var orionResponse = getOrionJSONobject (objHttpRequest.responseText.evalJSONex());
        
        if (_orionRoadCondInfoResponse!=null) {
            if (orionResponse==null)
                orionResponse=_orionRoadCondInfoResponse.clone ();
            else {
                for (var i=0; i<_orionRoadCondInfoResponse.size(); i++) {
                    orionResponse.push (_orionRoadCondInfoResponse[i]);
                }
            }
        }
        
        if (orionResponse==null) {
            showInfo (_noInfoFound);
            return;
        }

        if (menuObjId==3) { //Restareas
            serverRequestRestareaPhotos (orionResponse, menuObjId);
        } else if ( (menuObjId>=8) && (menuObjId<=11) ) {   // VVIS
            serverRequestVVISData(orionResponse, menuObjId)
        } else if (menuObjId==13) {   // Cameras
            serverRequestVVISData(orionResponse, menuObjId)        
        } else {
            showDetailInfo (orionResponse, menuObjId);
        }
    } catch (e) {showInfo (_errorMsg);}
}
function showDetailInfo (orionResponse, menuObjId) {
    try {
        var c = orionResponse.size();
        
        if (c==0)
            showInfo (_noInfoFound);
        else if (c==1)
            showFullInfo (orionResponse, menuObjId);
        else
            showShortInfo (orionResponse, menuObjId);
    } catch (e) {showInfo (_errorMsg);}
}
function onSuccessWKT(objHttpRequest, minX, maxX, minY, maxY, menuObjId) {
    try {
        var orionResponse = getOrionJSONobject (objHttpRequest.responseText.evalJSONex());
        var sectionNos = "";
        var xml = _xmlRoadCondInfoTemplate;
        
        for (var i=0; i<orionResponse.size();i++) 
            sectionNos += orionResponse[i].SECTIONNO + ",";
            
        sectionNos += "-1";               
        xml = xml.replace ("#sectionNo#", "and id in (" + sectionNos + ")");
        xml = xml.replace ("#columns#", SELECT_COLUMNS_FULLINFO_ROADCOND);
        serverRequestRoadCondInfo (_orionURL, xml, minX, maxX, minY, maxY, menuObjId);
    } catch (e) {
        sendRequestForFullInfoByEnv(minX, maxX, minY, maxY, menuObjId);
    }
}
function onSuccessRoadCondInfo(objHttpRequest, minX, maxX, minY, maxY, menuObjId) {
    try {
        _orionRoadCondInfoResponse = getOrionJSONobject (objHttpRequest.responseText.evalJSONex());
    } catch (e) {}
    try {
        sendRequestForFullInfoByEnv(minX, maxX, minY, maxY, menuObjId);
    } catch (e) {}
}
function onErrorWKT(objHttpRequest, minX, maxX, minY, maxY, menuObjId) {
    _orionRoadCondInfoResponse = null;
    sendRequestForFullInfoByEnv(minX, maxX, minY, maxY, menuObjId);
}
function onErrorRoadCondInfo(objHttpRequest, minX, maxX, minY, maxY, menuObjId) {
    _orionRoadCondInfoResponse = null;
    sendRequestForFullInfoByEnv(minX, maxX, minY, maxY, menuObjId);
}
function onError(objHttpRequest) {
    try {
        showInfo (_errorMsg);
        orionResponse = objHttpRequest.responseText.evalJSON();
    } catch (e) {}
}
// Get sectionnos for RoadCond by env
function sendRequestForRoadCondWKT(minX, maxX, minY, maxY, menuObjId) {
    try {
        var xml = _xmlRoadCondWKTTemplate;
        
        xml = xml.replace ("#minX#", parseInt(minX));
        xml = xml.replace ("#minY#", parseInt(minY));
        xml = xml.replace ("#maxX#", parseInt(maxX));
        xml = xml.replace ("#maxY#", parseInt(maxY));
        xml = xml.replace ("#columns#", SELECT_COLUMNS_ROADCOND_WKT);
        
        serverRequestWKT (_orionURL, xml, minX, maxX, minY, maxY, menuObjId);
    } catch (e) {}
}
// Returns only one object in the response
function sendRequestForFullInfoById(id, menuObjId) {
    try {
        var xml = _requestInfo; 
        var filter = _requestSettingsLite.Filter["@id"].replace ("#id#", id);
        var selectColumns = _requestSettingsLite.SelectColumns["@detail"];
        
        switch (menuObjId) {
            case 1:     // Drivingroadcondition (trafficmsg, accidents, ferries)
                break;
                
            case 2:     // Roadwork   
                break;

            case 3:     // Restarea
                break;

            case 4:     // Ferry
                break;

            case 5:     // Frostdamage
                break;
                
            case 7:     // ATK
                break;
                
            case 12:     // Restriktioner
                break;
        }
        
        xml = xml.replace ("#filter#", filter);
        xml = xml.replace ("#selectColumns#", selectColumns);
        
        serverRequest (_orionURL, xml, menuObjId);
    } catch (e) {showInfo (_errorMsg);}
}
// Returns one or many objects in the response
function sendRequestForFullInfoByEnv(minEW, maxEW, minNS, maxNS, menuObjId) {
    try {
        var xml = _requestInfo; 
        var filter = _requestSettingsLite.Filter["@boundingBox"].replace ("#minEW#", minEW).replace ("#maxEW#", maxEW).replace ("#minNS#", minNS).replace ("#maxNS#", maxNS);
        var scaleFilter = "";
        var selectColumns = _requestSettingsLite.SelectColumns["@detail"];
        var roadCategoryZoomFilter = "";
        var zoomLevelFilter = "";
        var severityZoomFilter = "";
        
        // Create filter for roadcategory
        try {
            var zoomFilter = "";
            var split = _scaleMgr.find (_zoomLevel).jsFilterRoadcategory.split (','); // getCookie ("currentRCZoomFilter").split (',');
            var c = split.size();
            for (var i=0;i<c;i++) {
                zoomFilter += "'" + split[i] + "'" + (i<(c-1) ? ",":"");                
            }
            
            if (zoomFilter!="") roadCategoryZoomFilter = " and ( (roadcategory in (" + zoomFilter + ") or roadcategory is null)";
        } catch (e) {}
        
        // Create filter for severity
        try {
            var zoomFilter = "";
            var split = _scaleMgr.find (_zoomLevel).jsFilterSeverity.split (',');    //getCookie ("currentSeverityZoomFilter").split (',');
            var c = split.size();
            for (var i=0;i<c;i++) {
                zoomFilter += "'" + split[i] + "'" + (i<(c-1) ? ",":"");                
            }
            
            if (zoomFilter!="") severityZoomFilter = " or (severity in (" + zoomFilter + "))";
        } catch (e) {}

        switch (menuObjId) {
            case 1:     // Drivingroadcondition (trafficmsg, accidents, ferries)
                break;
                
            case 2:     // Roadwork                
                scaleFilter = roadCategoryZoomFilter + severityZoomFilter + ")";
                break;

            case 3:     // RestArea
                scaleFilter = roadCategoryZoomFilter + ")";
                break;

            case 4:     // Ferry
                break;

            case 5:     // Frostdamage
                break;
                
            case 7:     // ATK
                scaleFilter = roadCategoryZoomFilter + ")";
                break;

            case 8:     // VVIS - Wind
            case 9:     // VVIS - Maxwind
            case 10:    // VVIS - Precipitation
            case 11:    // VVIS - Temp
                // Create filter for zoomlevel, used by VVIS
                try {
                    var currentZoomFilter = _scaleMgr.find (_zoomLevel).jsFilterVVIS;  
                    if (currentZoomFilter!="") zoomLevelFilter = " and (" + currentZoomFilter + " <= zoomLevel)";
                } catch (e) {}
                
                scaleFilter = zoomLevelFilter;
                break;

            case 12:     // Restriktioner
                break;
                
            case 13:   // Väglagskamera
                filter += " and LPV_Type='Väglagskamera'";
                break;
                
            case 14:   // Trafikkamera
                filter += " and LPV_Type='Trafikkamera'";
                break;            
        }
       
        xml = xml.replace ("#filter#", filter.escapeHTML());
        xml = xml.replace ("#scaleFilter#", scaleFilter.escapeHTML());
        xml = xml.replace ("#selectColumns#", selectColumns);
        
        serverRequest (_orionURL, xml, menuObjId);
    } catch (e) {}
}