/********************************
	routeFunctions.js		
********************************/
var vectorLayer
var richiesta_percorso
var x_center_percorso
var y_center_percorso
var zoom_extent
var validate=1
var change_barriera=0
var change_partenza=0
var change_arrivo=0
var change_tappa=0
var type_succ=""
var nosend=0
var type_point_validation
var coordinate=""
var id_itinerario=0
var zoom_perc
// parsing della risposta di ArcIms alla richiesta di routing
function parseRoutingResults(theRep) {
	//prompt("",theRep);
	RTReply = "" + theRep;
	var strPart = "";
    var startpos = 0;
    var endpos = 0;
	    
    RouteResult = false;    
    var arrNewOrder = new Array();
    var str = '<ROUTE';
    var pos = theRep.indexOf(str, 0);
    
    if ( pos != -1 ) {
        // parse full route envelope
        var routestart = pos + str.length;
        str = '<ENVELOPE';
        pos = theRep.indexOf(str, routestart);
        if ( pos == -1 ) return; // error
        RTEnvelope = parseEnvelope(theRep, pos);
        if ( RTEnvelope == null ) return; // error
        RTEnvelope = inflateEnvelope( RTEnvelope, 0.1 );
        // parse route parts
        str = '<PARTS>';
        pos = theRep.indexOf(str, routestart);
        if ( pos != -1 ) {
            var partsstartpos = pos + str.length;
            var partsendpos = theRep.indexOf('</PARTS>', partsstartpos);
            if ( partsendpos == -1 ) return; // error

            RTSegments = new Array();
            RTSegmentsCount = 0;
            // parse part data
            str = '<PART';
            var intRunner = -1;
            pos = theRep.indexOf(str, partsstartpos);
            while ( pos != -1 && pos < partsendpos ) {
            	intRunner ++;
                var partstart = pos + str.length;
                var partend = theRep.indexOf('</PART>', partstart);
                strPart = theRep.substring(partstart,partend);
                var strNumber = strPart.substring(strPart.indexOf("fromstop"),strPart.indexOf("tostop"));
                var intStart= strNumber.indexOf("\"") + 1;
                var intEnd  = strNumber.indexOf("\"", intStart);
                strNumber   = strNumber.substring(intStart, intEnd);
                
                arrNewOrder[intRunner] = parseInt(strNumber);

                if ( partend == -1 ) return; // error
                
                // parse segments
                str = '<SEGMENT';
                pos = theRep.indexOf(str, partstart);
                while ( pos != -1 && pos < partend ) {
                    var segstart = pos + str.length;
                    var segend = theRep.indexOf('</SEGMENT>', segstart);
                    if ( partend == -1 ) return; // error
                    
                    var nSeg = RTSegmentsCount;
                    RTSegments[nSeg] = new RouteSegment();
                    RTSegmentsCount++;
                    
                    // get segment distance and time
                    str = '>';
                    pos = theRep.indexOf(str, segstart);
                    var strTag = theRep.substring(segstart, pos + str.length);
                    var d = parseAttrib( strTag, 'distance' );
                    var t = parseAttrib( strTag, 'time' );
                    if ( d == null || t == null ) return; // error
                    RTSegments[nSeg].distance = parseFloat(d);
                    RTSegments[nSeg].time = parseFloat(t);
                        
                    // parse segment envelope               
                    str = '<ENVELOPE';
                    pos = theRep.indexOf(str, segstart);
                    if ( pos == -1 || pos >= segend ) return; // error
                    RTSegments[nSeg].envelope = parseEnvelope(theRep, pos);
                    if ( RTSegments[nSeg].envelope == null ) return; // error
                    RTSegments[nSeg].envelope = inflateEnvelope( RTSegments[nSeg].envelope, 0.4 );
                        
                    // parse segment descriptions
                    RTSegments[nSeg].desc = new Array();
                    RTSegments[nSeg].type = "";
                    var nDesc = 0;
                    
                    str = '<DESCRIPTION';
                    var strTmp = "";
                    
                    pos = theRep.indexOf(str, segstart);
                  
                    while ( pos != -1 && pos < segend ) {
                        startpos = pos + str.length;
                        str = '</DESCRIPTION>';
                        pos = theRep.indexOf(str, startpos);

                        if ( (pos == -1) || (pos >= segend) )  return; // error
                        strTmp = theRep.substring(startpos, pos);
                        strTmp1 = theRep.substring(startpos, pos);
                        var nPos = strTmp.indexOf(">", 0);
                        strTmp = strTmp.substring(nPos + 1 , strTmp.length)
                        
                        RTSegments[nSeg].desc[nDesc] = makeStrFromXML(strTmp);
                        var type_point = parseAttrib( strTmp1, 'type' );
                        RTSegments[nSeg].type=type_point;
                        nDesc++;

                        str = '<DESCRIPTION';
                        pos = theRep.indexOf(str, pos);
                        
                    }//while 
                    
                    // get segment shape coords
                    str = '<POLYLINE>';
                    pos = theRep.indexOf(str, segstart);
                    if ( pos != -1 && pos < segend ) {
                        var startpoly = pos + str.length;
                        str = '</POLYLINE>';
                        var endpoly = theRep.indexOf(str, startpoly);
                        if ( endpoly == -1 || endpoly >= segend ) return; // error
                            
                        RTSegments[nSeg].shape = new Array();
                        var nPath = 0;
                        
                        // parse each <PATH> of polyline
                        str = '<PATH>';
                        var startpath = theRep.indexOf(str, startpoly);
                        if ( startpath == -1 || startpath >= endpoly ) return; // error
                        while ( startpath != -1 && startpath < endpoly ){
                            str = '</PATH>';
                            var endpath = theRep.indexOf(str, startpath);
                            if ( endpath == -1 || endpath >= endpoly ) return; // error
                                
                            str = '<COORDS>';
                            var startcoord = theRep.indexOf(str, startpath);
                            if ( startcoord == -1 || startcoord >= endpath ) return; // error
                            var startdata = startcoord + str.length;
                                
                            str = '</COORDS>';
                            var endcoord = theRep.indexOf(str, startcoord);
                            if ( endcoord == -1 || endcoord >= endpath ) return; // error
                            
                            RTSegments[nSeg].shape[nPath] = theRep.substring(startdata, endcoord);
                            nPath++;
                            
                            // parse next <PATH> of polyline
                            str = '<PATH>';
                            var startpath = theRep.indexOf(str, endpath);
                        }
                    } else {
						// no shape for that segment due to generalization
                        RTSegments[nSeg].shape = null;
                    }

                    // next segment                 
                    str = '<SEGMENT';
                    pos = theRep.indexOf(str, segend);
                }

                // next part
                str = '<PART';
                pos = theRep.indexOf(str, partend);
            }
        } else {
            return; // error
		}
        // parse route totals
        str = '<TOTALS';
        startpos = theRep.indexOf(str, routestart);
        if ( startpos == -1 )  return; // error
        str = '</TOTALS>';
        endpos = theRep.indexOf(str, startpos);
        if ( endpos == -1 ) return; // error
        
        RTTotals = new RouteTotals();
        
        // get totals distance and time
        str = '>';
        pos = theRep.indexOf(str, startpos);
        var strTag = theRep.substring(startpos, pos + str.length);
        var d = parseAttrib( strTag, 'distance' );
        var t = parseAttrib( strTag, 'time' );
        if ( d == null || t == null ) return; // error
        RTTotals.distance = parseFloat(d);
        RTTotals.time = parseFloat(t);

        // get totals descriptions
        RTTotals.desc = new Array();
        var nDesc = 0;
        
        str = '<DESCRIPTION';
        pos = theRep.indexOf(str, startpos);
        while ( pos != -1 && pos < endpos ) {
            startpos = pos + str.length;
            str = '</DESCRIPTION>';
            pos = theRep.indexOf(str, startpos);

            if ( (pos == -1) || (pos >= endpos) ) return; // error
            
            strTmp = theRep.substring(startpos, pos);
            var nPos = strTmp.indexOf(">", 0);
            strTmp = strTmp.substring(nPos + 1 , strTmp.length)
            
                
            RTTotals.desc[nDesc] = makeStrFromXML(strTmp);
            nDesc++;

            str = '<DESCRIPTION';
            pos = theRep.indexOf(str, pos);
        }
        
        // success
        RouteResult = true;        
    }
	// Non effettuo il riordino dei punti di stop
	/*if (boolOrder)
	{*/
		var arrNewStops = new Array();
		for (var intJ =1; intJ < arrNewOrder.length; intJ++){
                //for (var intJ =arrNewOrder.length-1; intJ > 0; intJ--){
                        arrNewStops[intJ-1] = new Array();
                        arrNewStops[intJ-1][0] = RTStopX[arrNewOrder[intJ]-1];
                        arrNewStops[intJ-1][1] = RTStopY[arrNewOrder[intJ]-1];
                        arrNewStops[intJ-1][2] = RTStopDesc[arrNewOrder[intJ]-1];
                        arrNewStops[intJ-1][3] = RTStopNames[arrNewOrder[intJ]-1];
                        arrNewStops[intJ-1][4]=RTStopIdMarker[arrNewOrder[intJ]-1];
                        arrNewStops[intJ-1][5]=RTStopIdPoi[arrNewOrder[intJ]-1]; 
                        arrNewStops[intJ-1][6]=RTStopTypePoi[arrNewOrder[intJ]-1];  
                        arrNewStops[intJ-1][7]=RTStopTitlePoi[arrNewOrder[intJ]-1];
                        arrNewStops[intJ-1][8]=RTStopTematismoPoi[arrNewOrder[intJ]-1]; 
             
                }
		for (intJ =1; intJ < arrNewOrder.length; intJ++){
			RTStopX[intJ-1]    = arrNewStops[intJ-1][0]; 
			RTStopY[intJ-1]    = arrNewStops[intJ-1][1]; 	
			RTStopDesc[intJ-1] = arrNewStops[intJ-1][2]; 	
			RTStopNames[intJ-1]= arrNewStops[intJ-1][3];
      RTStopIdMarker[intJ-1] = arrNewStops[intJ-1][4];
     	RTStopIdPoi[intJ-1] = arrNewStops[intJ-1][5];
      RTStopTypePoi[intJ-1] =  arrNewStops[intJ-1][6];
      RTStopTitlePoi[intJ-1] =  arrNewStops[intJ-1][7];
      RTStopTematismoPoi[intJ-1] =  arrNewStops[intJ-1][8];
      slc = obj_route.document.getElementById("passObblig");
      slc.options[intJ-1].text = String(intJ) + " - " + RTStopDesc[intJ-1];
      slc.options[intJ-1].value= String(intJ) + " - " + RTStopDesc[intJ-1];
		}
	//}

	okToSend = true;
	
	//Visualizzo sulla mappa il risultato com zoom sull'extent del percorso
	//se il percorso è stato trovato

	if (RouteResult) {
		zoomDaEnvelope( parseFloat(RTEnvelope.minx), parseFloat(RTEnvelope.maxy), parseFloat(RTEnvelope.maxx), parseFloat(RTEnvelope.miny));	
		bodyXmlRouting = writeXmlMapRequest(5002);
		//prompt("",bodyXmlRouting);
		aggiornaRouting=true;
	//	ECWOverlayOnMapRedraw("layervettoriale");
		//resultRouting = window.open("resultRouting.asp",nameResultRouting,featureResultRouting);
		
		var objDiv = document.getElementById("divResultRouting");	
		if (map)
			var objDivIframe = document.getElementById("ifrmResultRouting");
		else
				var objDivIframe = objDiv.contentWindow.document.getElementById("ifrmResultRouting");
		
		if (objDiv.style.display=="none"){
		objDivIframe.style.display = "";
		objDivIframe.src = "about:blank";
		document.getElementById("divResultGeocoding").style.display = "none";
		//document.getElementById("divResultCapAndVia").style.display = "none";
		//HideShowPercorso()
		objDiv.style.display = "";
		objDiv.style.height="196px";
		objDiv.style.width="310px";
		objDivIframe.src = "RoutingGeocoding/divResultRouting.asp";
	}else{
		objDivIframe.src = "RoutingGeocoding/divResultRouting.asp";
		 HideShowPercorso()
		}
		window.focus();
	}else{
		//alert("nessun percorso individuato");
		alert(GCLang[RTLang][4])
		document.getElementById("divWaitPlease").style.display = "none";
		RTSegmentsCount = 0;		
	}
	nosend=0
}

// change envelope size
function inflateEnvelope( env, coef ) {
    var H = Math.abs(env.maxy - env.miny);
    var W = Math.abs(env.maxx - env.minx);
    var nDX = W * coef;
    var nDY = H * coef;
    env.maxx += nDX;
    env.maxy += nDY;
    env.minx -= nDX;
    env.miny -= nDY;
    return env;
}

//----------------------------------------------------------------------
//parte della richiesta ad arcims per visualizzare il percorso trovato
function writeXmlRouteMapRequest() {
    var xml = "";
    var re = /,/ig;
    if (RouteResult) {
    	   //mc
  		
  				
          var style_part= {
          	    fillColor:"blue", 
          	    fillOpacity:1, 
                strokeColor: "#0000FF",
                strokeOpacity: 0,
                strokeWidth: 3,
                pointRadius: 10,
                pointerEvents: "visiblePainted"
                           
            }; 
         var style_green = {
                strokeColor: "#800080",
                strokeOpacity: 0.5,
                strokeWidth: 5,
                pointRadius: 6,
                pointerEvents: "visiblePainted"/*,
                #strokeEndarrow:"classic",
                joinstyle:"miter"*/
            };
        if (map){    
          indice_vector=map.getLayerIndex(vectorLayer)
          if (indice_vector!=-1) map.layers[indice_vector].destroy()
      	  vectorLayer = new OpenLayers.Layer.Vector("Percorso");
      		map.addLayer(vectorLayer);
      		z_partenza=Math.round(map.layers[map.getLayerIndex(stradario_vuoto)].div.style.zIndex)
      		
      	  indice_vector=map.getLayerIndex(vectorLayer)
      	 
      		map.layers[indice_vector].div.style.zIndex=z_partenza+1
      		 }
        // Verifica che dal parsing della risposta sono arrivati degli shape da disegnare
        var bShow = false;
        var route = "";
        min_x=25000000000000000
        max_x=0
        min_y=25000000000000000
         max_y=0
       
        for ( var i = 0; i < RTSegmentsCount; i++ ){
            if ( RTSegments[i].shape != null ) {
                bShow = true;
            
                 var pointList = [];
            		
                 for ( var j = 0; j < RTSegments[i].shape.length; j++ ) {
                 	   
                    route += "<OBJECT units=\"DATABASE\">\n";
                    route += '<LINE coords="' + coordPairForArcIms(coordForArcIms("" + RTSegments[i].shape[j])) + '">\n';
                    route += '<SIMPLELINESYMBOL transparency="0.5" type="solid" width="' + routeLineWidth + '" captype="round" jointype="round" color="' + routeLineColor  + '" />\n';
                    route += "</LINE>\n";
                    route += "</OBJECT>\n";
                
                  	coppia=coordPairForArcIms((coordForArcIms("" + RTSegments[i].shape[j]))).split("*")
                  	rg=/,/g
                  	
                   for (var k=0; k<coppia.length; k++) {	
                  	primo_p=(coppia[k]).replace(rg,".")
                   	coord_primo=primo_p.split(" ")
                    min_x=Math.min(coord_primo[0],min_x)
                    max_x=Math.max(coord_primo[0],max_x)
                    min_y=Math.min(coord_primo[1],min_y)
                    max_y=Math.max(coord_primo[1],max_y)
                   if (map){
                  	newPoint = new OpenLayers.Geometry.Point(coord_primo[0] ,
                                                         		 coord_primo[1] );
               			pointList.push(newPoint);
               			}
	              }   
					           
				          
				         }
				         
            }
          if (map){    
          	//alert(pointList.length)       
            var lineFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.LineString(pointList),null,style_green);
	          vectorLayer.addFeatures([lineFeature]);          
				   }
        }
         if (map){ 
        		zoom_extent=map.getZoomForExtent(new OpenLayers.Bounds(min_x,min_y,max_x,max_y))
        		zoom_perc=min_x+"$"+max_y+"$"+max_x+"$"+min_y
        } else
          	zoom_extent=min_x+"$"+max_y+"$"+max_x+"$"+min_y
          	
        x_center_percorso=(max_x+min_x)/2
        y_center_percorso=(max_y+min_y)/2
        if ( bShow ) { 
     
						xml += "<ENVIRONMENT><SEPARATORS cs=\" \" ts=\"*\" /></ENVIRONMENT>"    
            xml += "<LAYER type=\"ACETATE\" name=\"Route\">\n";
            xml += route;
              
            // segment points
            var xy = null;
            k=0;
            var puntistop=[];
            for ( i = 1; i < RTSegmentsCount; i++ ) {            
                xy = getSegStartPoint(i);
                
                if ( xy != null ) {
                    xy[0] = coordForArcIms("" + xy[0]);
                    xy[1] = coordForArcIms("" + xy[1]);                    
                    if (i==1){
												if(!flagModifyPA){							
													RTPartenzaX = parseFloat(xy[0]);
													RTPartenzaY = parseFloat(xy[1]);
													//xml += "<OBJECT units=\"DATABASE\">\n<TEXT coords=\"" + xy[0] + coordsDelimiter + xy[1] + "\" label=\"" + (i) + "\">\n";
													//xml += "<TEXTMARKERSYMBOL fontcolor=\"" + routeStartLabelColor + "\" font=\"Arial, Helvetica, san-serif\" fontstyle=\"bold\" fontsize=\"" + routeStartLabelWidth + "\" outline=\"0,0,255\" overlap=\"false\" interval=\"5\" antialiasing = \"true\"/></TEXT></OBJECT>\n";
													xml += "<OBJECT units=\"DATABASE\">\n<POINT coords=\"" + xy[0] + coordsDelimiter + xy[1] + "\">\n";
													xml += "<SIMPLEMARKERSYMBOL type=\"Circle\" color=\"" + routeStartColor + "\" width=\"" + routeStartSize + "\" overlap=\"false\" />\n</POINT></OBJECT>\n";
													
												}
										}else if (i==RTSegmentsCount-1){
												if(!flagModifyPA){
													RTArrivoX = parseFloat(xy[0]);
													RTArrivoY = parseFloat(xy[1]);
													//xml += "<OBJECT units=\"DATABASE\">\n<TEXT coords=\"" + xy[0] + coordsDelimiter + xy[1] + "\" label=\"" + (k+2) + "\">\n";
													//xml += "<TEXTMARKERSYMBOL fontcolor=\"" + routeFinishLabelColor + "\" font=\"Arial, Helvetica, san-serif\" fontstyle=\"bold\" fontsize=\"" + routeFinishLabelWidth + "\" outline=\"0,0,255\" overlap=\"false\" interval=\"5\" antialiasing = \"true\"/></TEXT></OBJECT>\n";
													xml += "<OBJECT units=\"DATABASE\">\n<POINT coords=\"" + xy[0] + coordsDelimiter + xy[1] + "\">\n";
													xml += "<SIMPLEMARKERSYMBOL type=\"Circle\" color=\"" + routeFinishColor + "\" width=\"" + routeFinishSize + "\" overlap=\"false\" />\n</POINT></OBJECT>\n";
													
												}
						
												}else{
													if (RTSegments[i].desc.length==1 && RTSegments[i].type.search("drivetext")==-1 &&  RTSegments[i].type.search("arrive")==-1){
														xml += "<OBJECT units=\"DATABASE\">\n<TEXT coords=\"" + xy[0] + coordsDelimiter + xy[1] + "\" label=\"" + (k+2) + "\">\n";
														xml += "<TEXTMARKERSYMBOL fontcolor=\"" + routeStopLabelColor + "\" font=\"Arial, Helvetica, san-serif\" fontstyle=\"bold\" fontsize=\"" + routeStopLabelWidth + "\" outline=\"0,0,255\" overlap=\"false\" interval=\"5\" antialiasing = \"true\"/></TEXT></OBJECT>\n";
													 
														xml += "<OBJECT units=\"DATABASE\">\n<POINT coords=\"" + xy[0] + coordsDelimiter + xy[1] + "\">\n";
														xml += "<SIMPLEMARKERSYMBOL type=\"Circle\" color=\"" + routeStopColor + "\" width=\"" + routeStopSize + "\" overlap=\"false\" />\n</POINT></OBJECT>\n";
														if (map){ 
													 		var	sPoint = new OpenLayers.Geometry.Point(parseInt(xy[0]), parseInt(xy[1]));
													 		puntistop.push(sPoint)
					 									}
					 									k=k+1;
					 								}
			                
                				}
            		}
   
			
			}
			 if (map){ 
			 	var pointFeature = new OpenLayers.Feature.Vector(new OpenLayers.Geometry.MultiPoint(puntistop),null,style_part);
			 	//alert(puntistop.length)
			  vectorLayer.addFeatures([pointFeature]);
			 }
      }
    }
     	xml += "</LAYER>";	
     //prompt("",xml)
    return xml;
}

// get coordinates of route segment start point
function getSegStartPoint(nSeg) {
    var coords = null;
    
    if ( RTSegments != null && RTSegments[nSeg].shape != null ) {
        var pairs = RTSegments[nSeg].shape[0].split(pairsDelimiter);
        if ( pairs != null && pairs.length > 0 ) {
            coords = pairs[0].split(coordsDelimiter);
        }
    }
    
    return coords;
}

// get coordinates of route segment finish point
function getSegFinishPoint(nSeg) {
    var coords = null;
    
    if ( RTSegments != null && RTSegments[nSeg].shape != null ) {
        var last = RTSegments[nSeg].shape.length - 1;
        var pairs = RTSegments[nSeg].shape[last].split(pairsDelimiter);
        if ( pairs != null && pairs.length > 0 ) {
            last = pairs.length - 1;
            coords = pairs[last].split(coordsDelimiter);
        }
    }
    
    return coords;
}

// route segment object constructor
function RouteSegment() {
    this.distance = 0.0; // segment distance
    this.time = 0.0; // segment time
    this.envelope = null; // segment envelope
    this.desc = null; // array of segment directions 
    this.shape = null; // array of segment parts
    //MC 01/10/07
    this.id_poi = null;
    this.tematismo_poi = null;
    this.type_poi = null;
}

// route totals object constructor
function RouteTotals() {
    this.distance = 0.0;
    this.time = 0.0;
    this.desc = null; // array of totals descriptions
}
//MC 17/10/07
function check_query(type_point){
	
	 if (type_point=="partenza"){
	 		position_box();
	 	 	mostraDivWaitPlease();
	 	}
	 validate=1;
	 obj_route=document.getElementById("menu_route").contentWindow
	 partenza=obj_route.document.getElementById("partenza_com").value
	 arrivo=obj_route.document.getElementById("partenza_com").value

	 if ((partenza!="" && arrivo!="") || nosend==1){
	 	   
			 if (eval("change_"+type_point)=="1"){ 
			  indirizzo_p=obj_route.document.getElementById(type_point+"_ind").value
			  comune_p=obj_route.document.getElementById(type_point+"_com").value
			  civ_p=obj_route.document.getElementById(type_point+"_civ").value
					 
			  type_point_validation=type_point
			  validate_point(indirizzo_p,comune_p,civ_p)
			 
			 }else{
			 	 switch (type_point){
			 	 		case "partenza":
			 	 		   check_query("arrivo");
			 	 		   break;
			 	 		case "arrivo":
			 	 				if (RTStopsCount!=0 || change_tappa==1) check_query("tappa")
			 	 				else{ 
			 	 					    if (RTBarCount!=0 || change_barriera==1)  check_query("barriera")
			 	 							else sendRoutingQuery();
			 	 						}
			 	 				break;
			 	 		case "tappa":
			 	 				if (RTBarCount!=0 || change_barriera==1) check_query("barriera")
			 	 				else sendRoutingQuery();
			 	 				break;
			 	 		case "barriera":
			 	 		     sendRoutingQuery();
			 	 		     break;
			 		}
			 								
			 }
		}else{
			//alert("E' necessario specificare almeno il punto di partenza e il punto di arrivo");
			alert(GCLang[RTLang][5])
			document.getElementById("divWaitPlease").style.display = "none";
			return;	
		}
	 	
}
prefissi=new Array("contrada", "corso", "largo", "lungomare", "molo", "piazza", "piazza dell'", "piazzale", "piazzetta", "ponte", "sottovia", "strada", "strada dei", "strada del", "strada della", "stradella", "via", "via dei", "via delle", "viale", "vico")

function validate_point(indirizzo,comune,civico){
					GCActiveLayer = 0;
          inputPrefix=""
          parameter_indirizzo=indirizzo.split(" ")
          
          for (var k=0;k<prefissi.length;k++){
		          if ((parameter_indirizzo[0]).toUpperCase()==(prefissi[k]).toUpperCase()){
		             inputPrefix=parameter_indirizzo[0]
		             cerca[0]=((parameter_indirizzo.splice(1,parameter_indirizzo.length)).toString()).replace(","," ");
		          }
		         
          }
          if (inputPrefix=="") cerca[0]=indirizzo
		      
          cerca[1]=comune
          
          cerca[2]=civico
	  //alert(cerca[0]+","+cerca[1]+","+cerca[2])
					//Carico i vettori relativi ai servizi di geocoding e popolo la select					
					
					changeGcSelect();
				 if (geocoding){
				 	validate=0
				  }
				sendGeocodeQuery();
}
//Manda la routing query
function sendRoutingQuery(){
   obj_route=document.getElementById("menu_route").contentWindow
	if (RTPartenza && RTArrivo){
		var s = obj_route.document.getElementById("chkTipoPercorso");
		if (s.checked){				
			boolOrder = true;		
		}else{				
			boolOrder = false;
		}			
		if (obj_route.document.getElementById("radioTipoPercorso1").checked){				
			RTType = "quickest";
		}else{				
			RTType = "shortest";
		}
		var s = obj_route.document.getElementById("chkPassaggioPercorso");
		if (s.checked){				
			RTHwyPref = 1;		

		}else{				
			RTHwyPref = 100;
		}
		var theText = writeRouteXML();
		flagModifyPA = false;		
		sendToServer(imsRouteURL, theText, 5002 );			
	}else{
		//alert("E' necessario specificare almeno il punto di partenza e il punto di arrivo");
		alert(GCLang[RTLang][5])
		document.getElementById("divWaitPlease").style.display = "none";
		nosend=0
		return;	
	}	
}

// compone la richiesta XML di routing
function writeRouteXML() {
	var str = '';
    var theRequest = '<ARCXML version="1.1">\n<REQUEST>\n<GET_ROUTE name="">\n';
    
    theRequest += '<STOPSLIST>\n';
    
    // aggiungi partenza
    str = RTPartenzaDesc;
    theRequest += '<ROUTE_STOP id="0" desc="' + makeXMLsafe(str) +'">\n';    
    theRequest += '<POINT x="' + coordForArcIms("" + RTPartenzaX) + '" y="' + coordForArcIms("" + RTPartenzaY) + '"/>\n</ROUTE_STOP>\n';
        
     // aggiungi passaggi obbligatori
    for ( var i = 0; i < RTStopsCount; i++ ){
        str = RTStopDesc[i];
        theRequest += '<ROUTE_STOP id="' + String(parseInt(i+1)) + '" desc="' + makeXMLsafe(str) +'">\n';
        theRequest += '<POINT x="' + coordForArcIms("" + RTStopX[i]) + '" y="' + coordForArcIms("" + RTStopY[i]) + '"/>\n</ROUTE_STOP>\n';
    }    

	// aggiungi Arrivo
    str = RTArrivoDesc;
    theRequest += '<ROUTE_STOP id="' + String(parseInt(RTStopsCount+1)) + '" desc="' + makeXMLsafe(str) +'">\n';    
    theRequest += '<POINT x="' + coordForArcIms("" + RTArrivoX) + '" y="' + coordForArcIms("" + RTArrivoY) + '"/>\n</ROUTE_STOP>\n';
    
    theRequest += '</STOPSLIST>\n';
    
    // aggiungi barriere
    theRequest += '<BARRIERSLIST>\n';
    for (i = 0; i < RTBarCount; i++ ){
        str = RTBarDesc[i];
        theRequest += '<BARRIER_POINT>\n';
        theRequest += '<POINT x="' + coordForArcIms("" + RTBarX[i]) + '" y="' + coordForArcIms("" + RTBarY[i]) + '"/>\n</BARRIER_POINT>\n';
    }
    theRequest += '</BARRIERSLIST>\n';       

    //Proprietà
    theRequest += '<ROUTE_PROPERTIES>\n';    
    //Più breve o più corto
    theRequest += '<ROUTETYPE>' + RTType + '</ROUTETYPE>\n';    
    //Passaggio all'interno di centri abitati
   // theRequest += '<HWYPREF>' + RTHwyPref + '</HWYPREF>\n';
    if (RTHwyPref==1) 
        theRequest +='<RESTRICTIONS><SETRESTRICTION name="TOLL" type="relaxed"/></RESTRICTIONS>\n'
    //else
        //theRequest +='<RESTRICTIONS><SETRESTRICTION name="FOOT" type="strict"/></RESTRICTIONS>\n'  
        
    //Linguaggio
    theRequest += '<LOCALE language=\"' + GCLang[RTLang][0] + '\" country=\"'  + GCLang[RTLang][1] + '\" variant = \"\" />\n';
    //Ottimizzazione punti di passaggio
    if (boolOrder){
		theRequest += "<OPTIMIZE_STOPS enable=\"true\" />\n";
	}else 	theRequest += "<OPTIMIZE_STOPS enable=\"false\" />\n";
    //RTPrecision = coordForArcIms("" + calcScale());  
    var px = Math.abs(RTPartenzaX - RTArrivoX);
    var py = Math.abs(RTPartenzaY - RTArrivoY);
    var prec = 0;    
    if (px > py){
		prec = ""+px / CoefRTPrecision;
    }else{
		prec = ""+py / CoefRTPrecision;
    }    
	//theRequest += '<PRECISION>' + RTPrecision + '</PRECISION>\n';
	//MC settiamo la precisione ==10 per limitare il numero dei punti
	//theRequest += '<PRECISION>5000</PRECISION>\n';
	//MC end fine precisione =10
	theRequest += '<PRECISION>' + prec + '</PRECISION>\n';	  
	theRequest += "<LENGTH_UNITS name=\"meter\"/>";
    theRequest += '</ROUTE_PROPERTIES>\n';
    theRequest += '<FEATURECOORDSYS id="' + FEATURECOORDSYS + '" />\n';
   theRequest += '<FILTERCOORDSYS id="' + FILTERCOORDSYS + '" />\n';
    theRequest += '</GET_ROUTE>\n</REQUEST>\n</ARCXML>\n';
        
    //prompt("",theRequest);
    return theRequest;
}

//Aggiunta o sostituzione punto di partenza
function addPartenza(X,Y,controlla,desc,coord,civico){	
	if (controlla){
		typeReverseGeocodingForRouting = "P";
		controllaPuntoRouting(X,Y);	
			//MC 02/10/07
				remove_Partenza_POI(RTPartenzaIdMarker);
				RTPartenzaIdMarker=0;
				RTPartenzaIdPoi= 0;
				RTPartenzaTypePoi = "";
				RTPartenzaTematismoPoi= "";
		//end MC			
	}else{		
		flagModifyPA = true;
		RTPartenzaNames = desc;
		RTPartenzaDesc = desc;
		RTPartenzaX = X;
		RTPartenzaY = Y;
		RTPartenza = true;
		
		//Aggiorna il link
		contenutoTd = '<p class="box_td_no_line"';
		contenutoTd += ' onClick="zoomDaEnvelope(' + parseFloat(X) + ',' + parseFloat(Y) + ',' + parseFloat(X) + ',' + parseFloat(Y) + ');return false;"';
		contenutoTd += ' title="Zoom" style="cursor:hand;">';
		contenutoTd += splittaStringa(RTPartenzaDesc);				
		contenutoTd += '</p>';
		//MC 17/10/07
		contenutoTd=splittaStringa(RTPartenzaDesc);
		
		//document.getElementById("partenza").innerHTML = contenutoTd;
		
		descpartenza=RTPartenzaDesc.split(",")
		comune=descpartenza[descpartenza.length-1]
		obj_route=document.getElementById("menu_route").contentWindow
		//alert(descpartenza)
		if (descpartenza.length==3) 
		if (civico){
			 ncivico=civico
			 indirizzo=descpartenza[0].slice(0,descpartenza[0].length-civico.length)
			 obj_route.document.getElementById("partenza_civ").value = civico;
			 
		}else{
			 indirizzo=descpartenza[0]
			 obj_route.document.getElementById("partenza_civ").value=""
		}
		RTPartenzaCiv=obj_route.document.getElementById("partenza_civ").value
		
		 obj_route.document.getElementById("partenza_ind").value = makeStrFromXML(indirizzo);
		 obj_route.document.getElementById("partenza_com").value =makeStrFromXML(comune.slice(1,comune.length));
		
		bodyXmlRouting = writeXmlMapRequest(5002);
	
		aggiornaRouting=true;
		//MC 25/06/07 non si usa arcims
		coord=new OpenLayers.LonLat(X,Y)
		//if (RTPartenzaIdPoi==0)
		//	add_marker_route(coord,"P");
		//else 
			remove_marker_route("P");
			add_marker_route(coord,"P",RTPartenzaIdMarker);
		change_partenza=0;
		if (type_succ=="arrivo" && nosend==1) check_query(type_succ)
	//	nosend=0
	}
	
}

//Rimuovi punto di partenza
function removePartenza(){
	RTPartenza = false;
	
	//Aggiorna il link	
	document.getElementById("partenza").innerHTML = msgSelect;
	
	bodyXmlRouting = writeXmlMapRequest(5002);
	aggiornaRouting=true;
			//MC 02/10/07
				remove_Partenza_POI(RTPartenzaIdMarker);
				RTPartenzaIdMarker=0;
				RTPartenzaIdPoi= 0;
				RTPartenzaTypePoi = "";
				RTPartenzaTematismoPoi= "";
		//end MC	
	rimuovi_icone("P")
//	ECWOverlayOnMapRedraw("layervettoriale");	
}

//Aggiunta o sostituzione punto di arrivo
function addArrivo(X,Y,controlla,desc,coord,civico){
	//alert('x='+X+' y='+Y+' civ='+civico+' desc='+desc);
	if (controlla){
	//	alert(controlla)
		typeReverseGeocodingForRouting = "A";
		controllaPuntoRouting(X,Y);	
				//MC 02/10/07
				remove_Arrivo_POI(RTArrivoIdMarker);
				RTArrivoIdMarker=0;
				RTArrivoIdPoi= 0;
				RTArrivoTypePoi = "";
				RTArrivoTematismoPoi= "";
				
		//end MC			
	}else{
		flagModifyPA = true;
		RTArrivoNames = desc;
		RTArrivoDesc = desc;
		RTArrivoX = X;
		RTArrivoY = Y;
		RTArrivo = true;
		
		//Aggiorna il link
		contenutoTd = '<p class="box_td_no_line"';
		contenutoTd += ' onClick="zoomDaEnvelope(' + parseFloat(X) + ',' + parseFloat(Y) + ',' + parseFloat(X) + ',' + parseFloat(Y) + ');return false;"';
		contenutoTd += ' title="Zoom" style="cursor:hand;">';
		contenutoTd += splittaStringa(RTArrivoDesc);
		contenutoTd += '</p>';
		//document.getElementById("arrivo").innerHTML = contenutoTd;
		
		descarrivo=RTArrivoDesc.split(",")
		comune=descarrivo[descarrivo.length-1]
		obj_route=document.getElementById("menu_route").contentWindow
		//alert(obj_route)
		if (descarrivo.length==3) 
		
		if (civico){
			 ncivico=civico
			 indirizzo=descarrivo[0].slice(0,descarrivo[0].length-civico.length)
			 obj_route.document.getElementById("arrivo_civ").value = civico;
		}else{
			indirizzo=descarrivo[0]
			obj_route.document.getElementById("arrivo_civ").value=""
		}
		RTArrivoCiv=obj_route.document.getElementById("arrivo_civ").value
		obj_route.document.getElementById("arrivo_ind").value = makeStrFromXML(indirizzo);
		obj_route.document.getElementById("arrivo_com").value = makeStrFromXML(comune.slice(1,comune.length));
		
		bodyXmlRouting = writeXmlMapRequest(5002);
		coord=new OpenLayers.LonLat(X, Y)
		//alert(X+" "+Y)
	/*	if (RTArrivoIdPoi==0)
			add_marker_route(coord,"A");
		else*/
			remove_marker_route("A");
			add_marker_route(coord,"A",RTArrivoIdMarker);
			
		aggiornaRouting=true;
		
		change_arrivo=0;
		
		if (nosend==1){
			if (RTStopsCount!=0 || change_tappa==1) check_query(type_succ);
			else if (RTBarCount!=0 || change_barriera==1) check_query("barriera");
				   else  sendRoutingQuery();
				   	
		}
		//nosend=0
		//ECWOverlayOnMapRedraw("layervettoriale");
	}	
	
}

//Function per splittare una stringa lunga in più righe da numlettere ciascuna
function splittaStringa(stringa){	
	var numlettere = 14;
	var tempLenght = stringa.length;
	var stringaSplittata = "";
	var tempRighe=Math.ceil(tempLenght/numlettere);	
	for (j=1; j<=tempRighe; j++) {
		stringaSplittata += stringa.substring ( (j-1)*numlettere, j*numlettere );
		if(j!=tempRighe){
			stringaSplittata += " "
			//MC 17/10/07 stringaSplittata += "<br>"
		}
	}
	return stringaSplittata;
}

//Rimuovi punto di arrivo
function removeArrivo(){
	RTArrivo = false;
	//Aggiorna il link	
	document.getElementById("arrivo").innerHTML = msgSelect;
	bodyXmlRouting = writeXmlMapRequest(5002);
	aggiornaRouting=true;
	//MC 02/10/07
				remove_Arrivo_POI(RTArrivoIdMarker);
				RTArrivoIdMarker=0;
				RTArrivoIdPoi= 0;
				RTArrivoTypePoi = "";
				RTArrivoTematismoPoi= "";
	//end MC	
	rimuovi_icone("A")
//	ECWOverlayOnMapRedraw("layervettoriale");		
}

//Aggiunta punto di passaggio obbligatorio
function addPassaggio(X,Y,controlla,desc){
	if (controlla){
		typeReverseGeocodingForRouting = "PS";
		controllaPuntoRouting(X,Y);
		//MC 02/10/07
		RTStopIdMarker[RTStopsCount] = 0;
		RTStopIdPoi[RTStopsCount] = 0;
		RTStopTypePoi[RTStopsCount] =  "";
    RTStopTitlePoi[RTStopsCount] =  "";
		RTStopTematismoPoi[RTStopsCount] =  "";
		//end MC			
	}else{
		
		RTStopNames[RTStopsCount] = desc;
		RTStopDesc[RTStopsCount] = desc;
		RTStopX[RTStopsCount] = X;
		RTStopY[RTStopsCount] = Y;
		RTStopsCount++;
			obj_route=document.getElementById("menu_route").contentWindow
		//aggiorno la select
		slc = obj_route.document.getElementById("passObblig");
		if (slc.options[slc.selectedIndex].value == msgSelect){
			slc.options.length=0;						
		}
		slc.options[slc.options.length] = new Option(String(slc.options.length + 1) + " - " +makeStrFromXML(RTStopDesc[RTStopsCount - 1]), String(slc.options.length + 1) + " - " + RTStopDesc[RTStopsCount - 1]);
		slc.selectedIndex = slc.options.length - 1;
		
		if (slc.options.length > 1){
			obj_route.document.getElementById("chkTipoPercorso").disabled = false;
		}else{
			obj_route.document.getElementById("chkTipoPercorso").disabled = true;
		}
		
		/*descpassaggio=RTStopDesc[RTStopsCount-1].split(",")
		comune=descpassaggio[descpassaggio.length-1]
		if (descpassaggio.length==3) 
		
		if (civico){
			 ncivico=civico
			 indirizzo=descpassaggio[0].slice(0,descpassaggio[0].length-civico.length)
			 document.getElementById("passaggio_civ").value = civico;
		}else{
			indirizzo=descpassaggio[0]
			document.getElementById("passaggio_civ").value=""
		}
		RTStopCiv[RTStopsCount-1]=obj_route.document.getElementById("partenza_civ").value
		document.getElementById("passaggio_ind").value = indirizzo;
		document.getElementById("passaggio_com").value = comune;*/
		
		//aggiorno la mappa
		bodyXmlRouting = writeXmlMapRequest(5002);
		coord=new OpenLayers.LonLat(X, Y)
		aggiornaRouting=true;
	
		if (RTStopIdPoi[RTStopsCount-1]==0 || RTStopIdPoi.length==0){
			  RTStopIdMarker[RTStopsCount-1] = 0;
				RTStopIdPoi[RTStopsCount-1] = 0;
				RTStopTypePoi[RTStopsCount-1] =  "";
				RTStopTematismoPoi[RTStopsCount-1] =  "";

				//add_marker_route(coord,"PS");
		}
		add_marker_route(coord,"PS",RTStopIdMarker[RTStopsCount-1]);
		change_tappa=0;
	
		if (nosend==0){
				if (type_succ=="barriera"){
					if (RTBarCount!=0 || change_barriera==1) check_query(type_succ);
				  else sendRoutingQuery();
						   	
				}
		
		}
			document.getElementById("divWaitPlease").style.display = "none";
		nosend=0;
		//ECWOverlayOnMapRedraw("layervettoriale");	
	}	
}

//Rimuovi punto di passaggio obbligatorio
function removePassaggio(){
		obj_route=document.getElementById("menu_route").contentWindow
	slc = obj_route.document.getElementById("passObblig");
	if (slc.options[slc.selectedIndex].value == msgSelect){
                RTStopsCount = 0;
                RTStopIdMarker[0] = 0;
		RTStopIdPoi[0] = "";
		RTStopTypePoi[0] =  "";
                RTStopTitlePoi[0]=  "";
		RTStopTematismoPoi[0] =  "";
		return;
	}else{	
		var theIndex = slc.selectedIndex;		
		var intCount = RTStopsCount;
		//MC 03/10/07
		
		remove_Passaggio_POI(theIndex);
		//end MC
		if (theIndex >= 0) {
			for ( var i = theIndex; i < intCount-1 ; i++ ) {
				moveStop( i, i+1 ,0);
			}
		}
		RTStopsCount--;
		slc.options[theIndex] = null;		
		if (slc.options.length == 0){
			slc.options[0] = new Option(msgSelect, msgSelect);
			
		}
		slc.selectedIndex = slc.options.length - 1;
		
		if (slc.options.length > 1){
			obj_route.document.getElementById("chkTipoPercorso").disabled = false;
		}else{
			obj_route.document.getElementById("chkTipoPercorso").disabled = true;
		}
		
		bodyXmlRouting = writeXmlMapRequest(5002);
		aggiornaRouting=true;
		rimuovi_icone("PS",theIndex)
	//	ECWOverlayOnMapRedraw("layervettoriale");
		
	}	
}

//Aggiunta barriera
function addBarriera(X,Y,controlla,desc){
	if (controlla){
		typeReverseGeocodingForRouting = "B";
		controllaPuntoRouting(X,Y);			
	}else{
		RTBarNames[RTBarCount] = desc;
		RTBarDesc[RTBarCount] = desc;
		RTBarX[RTBarCount] = X;
		RTBarY[RTBarCount] = Y;
		RTBarCount++;
				obj_route=document.getElementById("menu_route").contentWindow	
		//aggiorno la select
		slc = obj_route.document.getElementById("barriere");
		if (slc.options[slc.selectedIndex].value == msgSelect){
			slc.options.length=0;						
		}
		slc.options[slc.options.length] = new Option(String(slc.options.length + 1) + " - " + makeStrFromXML(RTBarDesc[RTBarCount - 1]), String(slc.options.length + 1) + " - " + RTBarDesc[RTBarCount - 1]);
		slc.selectedIndex = slc.options.length - 1;
		
		//aggiorno la mappa
		bodyXmlRouting = writeXmlMapRequest(5002);
		aggiornaRouting=true;
		coord=new OpenLayers.LonLat(X, Y)
		add_marker_route(coord,"B");
		change_barriera=0;
	if (nosend==0){
		if (type_succ=="route") sendRoutingQuery();
	 }
	 nosend=0
	 document.getElementById("divWaitPlease").style.display = "none";
	//	ECWOverlayOnMapRedraw("layervettoriale");
	}	
}

//Rimuovi barriera
function removeBarriera(){
	obj_route=document.getElementById("menu_route").contentWindow	
	slc = obj_route.document.getElementById("barriere");
	if (slc.options[slc.selectedIndex].value == msgSelect){
		return;
	}else{	
		var theIndex = slc.selectedIndex;		
		var intCount = RTBarCount;
		if (theIndex >= 0) {
			for ( var i = theIndex; i < intCount - 1; i++ ) {
				moveStop( i, i+1 , 1);
			}
		}
		RTBarCount--;		
		slc.options[theIndex] = null;		
		if (slc.options.length == 0){
			slc.options[0] = new Option(msgSelect, msgSelect);
		}
		slc.selectedIndex = slc.options.length - 1;
		
		bodyXmlRouting = writeXmlMapRequest(5002);
		aggiornaRouting=true;
		rimuovi_icone("B",theIndex)
	//	ECWOverlayOnMapRedraw("layervettoriale");
	}	
}

function clearAll() { 
	RTPartenza = false;
	obj_route=document.getElementById("menu_route").contentWindow	
	obj_route.document.getElementById("partenza_com").value = msgSelect;
	obj_route.document.getElementById("partenza_ind").value = msgSelect;
	obj_route.document.getElementById("partenza_civ").value = msgSelect;
	RTArrivo = false;
	obj_route.document.getElementById("arrivo_com").value = msgSelect;
	obj_route.document.getElementById("arrivo_ind").value = msgSelect;
	obj_route.document.getElementById("arrivo_civ").value = msgSelect;
	RTStopsCount = 0;
	slc = obj_route.document.getElementById("passObblig");	
	slc.options.length=0;
	slc.options[0] = new Option(msgSelect, msgSelect);
	obj_route.document.getElementById("chkTipoPercorso").disabled = true;
	obj_route.document.getElementById("tappa_com").value = msgSelect;
	obj_route.document.getElementById("tappa_ind").value = msgSelect;
	obj_route.document.getElementById("tappa_civ").value = msgSelect;
	
	RTBarCount = 0;
	slc = obj_route.document.getElementById("barriere");
	slc.options.length=0;
	slc.options[0] = new Option(msgSelect, msgSelect);
		obj_route.document.getElementById("barriera_com").value = msgSelect;
	obj_route.document.getElementById("barriera_ind").value = msgSelect;
	obj_route.document.getElementById("barriera_civ").value = msgSelect;
	
	bodyXmlRouting = "";
	aggiornaRouting=true;
	RouteResult = false;
	okToSend = true;
	rimuovi_icone("ALL")
	indice_vector=map.getLayerIndex(vectorLayer)
  if (indice_vector!=-1) map.layers[indice_vector].destroy()
//	ECWOverlayOnMapRedraw("layervettoriale");
}

// muovi stop (passaggio-type=0 o barriera-type=1)
function moveStop( from, to , type) {
	obj_route=document.getElementById("menu_route").contentWindow	
	if (0==type){	
		slc = obj_route.document.getElementById("passObblig");
		var tmpName = RTStopNames[to];
		var tmpDesc = RTStopDesc[to];
		var tmpX = RTStopX[to];
		var tmpY = RTStopY[to];		
    
    	//MC 02/10/07
                var tmpIdMarker=RTStopIdMarker[to];
		var tmpId=RTStopIdPoi[to];
		var tmpType=RTStopTypePoi[to];
                var tmpTitle=RTStopTitlePoi[to];
		var tmpTematismo=RTStopTematismoPoi[to];
		//end MC		
		
		RTStopNames[to] = RTStopNames[from];
		RTStopDesc[to] = RTStopDesc[from];
		RTStopX[to] = RTStopX[from];
		RTStopY[to] = RTStopY[from];		
                
                //MC 02/10/08
		RTStopIdMarker[to] = RTStopIdMarker[from];
		RTStopIdPoi[to] = RTStopIdPoi[from];
		RTStopTypePoi[to] =  RTStopTypePoi[from];
                RTStopTitlePoi[to] =  RTStopTitlePoi[from];
		RTStopTematismoPoi[to] =  RTStopTematismoPoi[from];
		//end MC
                
		RTStopNames[from] = tmpName;
		RTStopDesc[from] = tmpDesc;
		RTStopX[from] = tmpX;
		RTStopY[from] = tmpY;		
		
		//MC 02/10/07
		RTStopIdMarker[from] = tmpIdMarker;
		RTStopIdPoi[from] = tmpId;
		RTStopTypePoi[from] =  tmpType;
                RTStopTitlePoi[from] =  tmpTitle;
		RTStopTematismoPoi[from] =  tmpTematismo;
		//end MC		
				
		slc.options[to].text = String(from + 1) + " - " + RTStopDesc[from];
		slc.options[to].value = String(from + 1) + " - " + RTStopDesc[from];		
		slc.options[from].text = String(to + 1) + " - " + RTStopDesc[to];
		slc.options[from].value = String(to + 1) + " - " + RTStopDesc[to];			   
	}else{	
		slc = obj_route.document.getElementById("barriere");
		var tmpName = RTBarNames[to];
		var tmpDesc = RTBarDesc[to];
		var tmpX = RTBarX[to];
		var tmpY = RTBarY[to];

		RTBarNames[to] = RTBarNames[from];
		RTBarDesc[to] = RTBarDesc[from];
		RTBarX[to] = RTBarX[from];
		RTBarY[to] = RTBarY[from];

		RTBarNames[from] = tmpName;
		RTBarDesc[from] = tmpDesc;
		RTBarX[from] = tmpX;
		RTBarY[from] = tmpY;	
		
		slc.options[to].text = String(from + 1) + " - " + RTBarDesc[from];
		slc.options[to].value = String(from + 1) + " - " + RTBarDesc[from];
		slc.options[from].text = String(to + 1) + " - " + RTBarDesc[to];
		slc.options[from].value = String(to + 1) + " - " + RTBarDesc[to];	
	}		    
}
var p_barriere=[]
var p_passaggio=[]
//Crea l'xml da aggiungere alla richiesta ad arcims per la descrizione del percorso da cercare
function strInitializeRoutingMap(){
	
	var strRes = "";
	var intI; 
	var strColor, strTColor, intSize, strText, strTextDecor; 
 

	strRes += writeXmlRouteMapRequest();
	
	if ( (RTPartenza) || (RTArrivo) || (RTStopsCount > 0) || (RTBarCount > 0) ){
		strTextDecor  = "shadow=\"64,64,64\" glowing=\"255,255,0\" "
   		strTextDecor += "halignment=\"right\" valignment=\"top\" overlap=\"false\"";   		
		strRes += "<LAYER type=\"acetate\" name=\"StopsAndBars\">\n";
		
		if (RTPartenza){
			strColor  = routeStartColor;
     		strTColor = routeStartLabelColor;
     		strText  = "Partenza";   	
     		intSize  = routeStartLabelWidth;
     		
     		strRes += strDrawPoint(RTPartenzaX, RTPartenzaY, strColor, "circle", strText, strTColor, intSize, strTextDecor,routeStartImg);
		}
		
		if (RTArrivo){
			strColor  = routeFinishColor;
     		strTColor = routeFinishLabelColor;
     		strText  = "Arrivo";   	
     		intSize  = routeFinishLabelWidth;
     		
     		strRes += strDrawPoint(RTArrivoX, RTArrivoY, strColor, "circle", strText, strTColor, intSize, strTextDecor,routeFinishImg);
		}
		
		for (intI =0; intI < RTStopsCount; intI ++){
			strColor  = routeStopColor;
			strTColor = routeStopLabelColor;
			strText   = "Passaggio " + (intI + 1);
			intSize   = routeStopLabelWidth;
				
    	 strRes += strDrawPoint(RTStopX[intI], RTStopY[intI], strColor, "circle", strText, strTColor, intSize, strTextDecor,routeStopImg);
   		 if (map){
   		 	pPoint = new OpenLayers.Geometry.Point(RTStopX[intI], RTStopY[intI]);
   		 	p_passaggio.push(pPoint) 	
   		 }
   			
   		
   		}
   		
   	
		 
		for (intI = 0; intI < RTBarCount; intI ++)
   		{
   			strColor  = routeBarColor;			
			strTColor = routeBarLabelColor;
			strText   = "Barriera " + (intI + 1);
			intSize   = routeBarLabelWidth;							
			
    		strRes += strDrawPoint(RTBarX[intI], RTBarY[intI], strColor, "triangle", strText, strTColor, intSize, strTextDecor,routeBarImg);
   		 if (map){
   			pBar = new OpenLayers.Geometry.Point(RTBarX[intI], RTBarY[intI]);
   		  p_barriere.push(pBar) 
   		 }	
   		}
   		
		strRes += "</LAYER>";				
	}
  //MC per la stampa 
  richiesta_percorso=strRes
  //prompt("",richiesta_percorso)
  /*xml_doc=getimage(richiesta_percorso)
  
  
  var success = requestSuccess(this);
       
  new OpenLayers.Ajax.Request("http://ptpuglia.viaggaireinpuglia.it/servlet/com.esri.esrimap.Esrimap?ServiceName=stradario_vuoto", { method:'post', postBody: xml_doc, onComplete: success }); 
 // sendToServer("http://ptpuglia.viaggaireinpuglia.it/servlet/com.esri.esrimap.Esrimap?ServiceName=stradario_vuoto",xml_doc,0)
	*/
	return(strRes);
}

  
 function requestSuccess(request) {
        var doc = request.responseXML;
        
        if (!doc || request.fileType!="XML") {
            doc = OpenLayers.parseXMLString(request.responseText);
        }
      
        url_img= doc.getElementsByTagName('OUTPUT')[0].getAttribute("url");
        //alert(url_img)
        arcxml=new OpenLayers.Layer.Image(
                "ArcXML",
                 url_img,
                 //this.bounds,
                map.bounds,
                map.size,
                 
                {isBaseLayer:false,projection:"EPSG:32633","units":"m"}
                );       				
   		   
   		  
   		  map.addLayers([arcxml])
       // console.log(doc);
       
    }
//----------------------------------------------------------------------
// Aggiungi un punto colorato alla mappa
// fltX - x coordinate of Point
// fltY - y coordinate of Point
// strColor - string, contanes color in RGB format, 3 numbers[0;255] coma separated
// strType  - type of marker symbol {circle, triangle, square, cross, star}
// strText  - string, lable of this point 
// strTextColor - string, contanes color in RGB format, 3 numbers[0;255] coma separated
// intTextSize  - font size for label
// strTextDecor - different decoration for text
function strDrawPoint(fltX, fltY, strColor, strType, strText, strTextColor, intTextSize, strTextDecor,strImg){
	var reDot  = /,/ig;
	var strRes = "", strX, strY;
	strX = "" + fltX;
	strY = "" + fltY;
	strTr = "0,5";

	strX  = coordForArcIms("" + strX);
	strY  = coordForArcIms("" + strY);
	strTr = coordForArcIms("" + strTr);

	strRes = "<OBJECT units=\"DATABASE\">\n";
	strRes += "<POINT  coords=\"" + strX + coordsDelimiter + strY + "\">\n";	
	//MC 03/07/07
	//strRes += "<SIMPLEMARKERSYMBOL transparency=\"" + strTr +"\" type=\"" + strType + "\"";
	strRes += "<RASTERMARKERSYMBOL overlap='true' size='26,29' hotspot='0,26' shadow='0,0,0'   url='"+strImg+"'/>"
				
	/*strRes += " width=\"" + routeStartSize + "\"";
	strRes += " color=\"" + strColor  + "\" />\n";*/
	strRes += "</POINT>\n";
	strRes += "</OBJECT>\n";

/*	strRes += "<OBJECT units=\"DATABASE\">\n";
	strRes += "<TEXT coords=\"" + strX + coordsDelimiter + strY + "\" label=\"" + strText +"\">\n";  
	strRes += "<TEXTMARKERSYMBOL fontcolor=\"" + strTextColor  + "\" fontsize=\"" + intTextSize + "\" " + strTextDecor + " />\n";
	strRes += "</TEXT>\n";
	strRes += "</OBJECT>\n";*/
 // prompt("",strRes)
	return(strRes);
}

//Funzione per il controllo del punto cliccato con il reverse geocoding
function controllaPuntoRouting(X,Y){

	coordInput.length = 0;	
	coordInput[0] = X;
	coordInput[1] = Y;
	//sendCoordToServer(coordInput[0],coordInput[1],"parseCoordTransformForRouting");	
	parseCoordTransformForRouting(coordInput[0],coordInput[1])
}

//riceve la risposta della trasformazione di coordinate
//da wgs84 utm33 a lat/lon
function parseCoordTransformForRouting(lon,lat){	
	okToSend = true;
	GCLayers[indexReverseService].input.GCvalue[indexCoordInput[0]] = String(lat);
	GCLayers[indexReverseService].input.GCvalue[indexCoordInput[1]] = String(lon);
	flagReverseGeocodingForRouting = true;
	
	var theText = writeGeocodeXML(indexReverseService);
	//prompt("TEST TG",theText);
	//prompt("TEST TG",imsGeoCoderURL);

	sendToServer(imsGeoCoderURL, theText, 5004 );
}

