/*optim js by pix*/
jQuery.fn.route = function(options)
{
      var settings = jQuery.extend(
      {
        map:null,
        wsurl:null,
        mailurl:null,
        optimkind:'optim_kind',
        optimorder:'#optim_order',
        optimorderPointContainerCss:'optimorderPointContainerCss',
        optimorderLocationDescriptionCss:'optimorderLocationDescriptionCss',
        optimorderOrderDescriptionCss:'optimorderOrderDescriptionCss',
        optimorderOrderButtonCss:'optimorderOrderButtonCss',
        descriptioncontainer:'#optim_results',
        totalroutedesc:'#total_route',
        descriptionCss:'optimDescrCss',
        printCss      :'optimPrintCss',
        printCssDiv   :'optimPrintCssDiv',
        printCssPrintButton:'optimPrintCssPrintButton',
        printCssCloseButton:'optimPrintCssCloseButton',
        lang:null,
        imgcontroller:null,
        printcontroller:null
      }
      , options);
      
      route_style = {
          "default": 
          {
            strokeWidth: 6,
            strokeColor: "#ff00ff",
            fillColor: "#ff00ff",
            cursor: "pointer",
            strokeOpacity: 0.7
          },
          "select": 
          {
            strokeWidth: 10,
            strokeColor: "#008bae",
            fillColor: "#008bae",
            cursor: "pointer",
            strokeOpacity: 0.7
          }
       }

      //set sortable route points
      jQuery(settings.optimorder).sortable({ items: "li" ,stop:function(){orderlist2array(true);} });

      var lang              = settings.lang;
      var animateroute      = [];
      var timer             = null;
      var popup             = null;
      var OlMapMiniPop      = null;
      var OlMapMiniAnimate  = null;
      var animarkers        = null;
      var optimpoints       = [];
      var map               = settings.map.getMapInstance();
      var optimpointmarkers = new OpenLayers.Layer.Markers( "optim_points" );
      var route_vectors     = new OpenLayers.Layer.Vector("route_layer",{style:route_style['default']});
     
      selectRouteControl = new OpenLayers.Control.SelectFeature(route_vectors,{onSelect: onRouteSelect, onUnselect: onRouteUnselect,hover: false,selectStyle: route_style['select']});
      map.addLayer(optimpointmarkers);
      map.addLayer(route_vectors);
      map.addControl(selectRouteControl);
      selectRouteControl.activate();
      
      jQuery.routens = {} ;
      jQuery.routens.typestart  = "START";
      jQuery.routens.typeend    = "END";
      jQuery.routens.typevia    = "VIA";
        
      deleteMarkers();
            
      jQuery.addOptimPointFromMenu = function(type)
      {
          mc     = map.getControlsByClass('OpenLayers.Control.MousePosition');
          lastXy = mc[0].lastXy;
          lonlat =  map.getLonLatFromViewPortPx(new OpenLayers.Pixel(lastXy.x,lastXy.y));
          //jQuery('#beta_message').html(lonlat.lon+","+lonlat.lat);
          var lawgs = lonlat.transform
          (
             new OpenLayers.Projection("EPSG:900913"),
             new OpenLayers.Projection("EPSG:4326")
          ); 
          jQuery.addOptimPoint(type,lawgs.lon,lawgs.lat);  
      }
      
      jQuery.addOptimPoint = function(type,x,y,description)
      {
          optid      = type+"_"+x+"_"+y;
          lidescr = "";
          if (description == null) lidescr = roundit(x,7) +" "+roundit(y,7); else lidescr = description;
          if(type == jQuery.routens.typeend || type == jQuery.routens.typestart)//if new start or end
          {    
            jQuery("li[@id*="+type+"]").remove();
          }
          descshort = lidescr.split(",");
          desctrun = descshort[0];
          jQuery(settings.optimorder).append("<li title='"+lang.hint1+"' class='"+settings.optimorderPointContainerCss+"' id="+optid+"><span class='optorderico' /><span class='"+settings.optimorderLocationDescriptionCss+"'>"+lidescr+"</span></li>");
          orderlist2array(false);
          //hide news
          jQuery('#left_meni_bottom_news').hide('slow');
      }
      
      jQuery.printOptimResults = function(view)
      {
           
            match1 = new RegExp('route_header*', "g");
            nd1 = jQuery(settings.descriptioncontainer).clone(true).html().replace(match1,'route_header_print');
            match2 = new RegExp('route_content*', "g");
            nd2 = nd1.replace(match2,'route_content_print');
            
            jQuery.post(settings.printcontroller,{descr:nd2},function(data)
            {
                jQuery('body').append(data);
                   
                mapSettingsMini.div         = view;
                mapSettingsMini.tileBuffer  = '0';

                route_markers_print = new OpenLayers.Layer.Markers( "optim_turn_points_print" );
                route_vectors_print = new OpenLayers.Layer.Vector("route_layer_print",{style:route_style['default']});

                OlMapPrint = new OlMiniMap(mapSettingsMini);
                printMap = OlMapPrint.getMapInstance();
                printMap.addLayer(route_markers_print);

                printMap.addLayer(route_vectors_print);

                if (route_vectors.features.length > 0)
                {
                    rpl = [];
                    for (a=0;a<route_vectors.features.length;a++)
                    {
                        lineseg     = route_vectors.features[a];
                        x = lineseg.attributes.x1;
                        y = lineseg.attributes.y1;
                        size = new OpenLayers.Size(21,27);
                        offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
                        icon = new OpenLayers.Icon(settings.imgcontroller+'/'+(a+1)+'/optim_via',size,offset,null,'orderopt');
                        la = new OpenLayers.LonLat(x,y);
                        var lamerc = la.transform
                        (
                           new OpenLayers.Projection("EPSG:4326"),
                           new OpenLayers.Projection("EPSG:900913")
                        );

                        marker = new OpenLayers.Marker(lamerc,icon);
                        route_markers_print.addMarker(marker);

                        for (c=0; lineseg.geometry.components.length>c; c++)
                        {
                             rp = lineseg.geometry.components[c];
                             rpl.push(rp);
                        }

                    }

                    var lineFeature = new OpenLayers.Feature.Vector( new OpenLayers.Geometry.LineString(rpl));
                    route_vectors_print.addFeatures( [lineFeature] );
                    printMap.zoomToExtent(route_markers_print.getDataExtent());
                }
            
          });   
      }

      function roundit(Num, Places)
      {
         if (Places > 0) {
            if ((Num.toString().length - Num.toString().lastIndexOf('.')) > (Places + 1)) {
               var Rounder = Math.pow(10, Places);
               return Math.round(Num * Rounder) / Rounder;
            }
            else return Num;
         }
         else return Math.round(Num);
      }

      function createSortOrder(usorted)
      {
          var orderedlist = []; 
          var tmpstart = null;
          var tmpend   = null;
          var gl = jQuery(settings.optimorder).find("li");
          c = 0;
          jQuery(gl).each(function(){

            c++;
            opar  = this.id.split('_');
            ty    = opar[0];
            x     = opar[1];
            y     = opar[2];
            
            //added from meni 1=START 1+n=END 1..1n=VIA
            if (!usorted)
            {    
                  if (ty==jQuery.routens.typevia)
                    orderedlist.push(jQuery(this));
                  else if (ty==jQuery.routens.typestart)
                    tmpstart = jQuery(this);
                  else if (ty==jQuery.routens.typeend)
                    tmpend = jQuery(this);
            }  
            else if (usorted)
            {    
                  //if draged
                  if (c==1)
                  {
                      jQuery(this).attr('id', jQuery.routens.typestart+"_"+x+"_"+y);
                  }    
                  else if (c==gl.length)
                  {
                      jQuery(this).attr('id', jQuery.routens.typeend+"_"+x+"_"+y);
                  }      
                  else if (c>1 && c<gl.length)
                  {
                      jQuery(this).attr('id', jQuery.routens.typevia+"_"+x+"_"+y);
                  }    
                  orderedlist.push(jQuery(this));
            }    
          });

          if (tmpstart != null){orderedlist.unshift(tmpstart);}
          if (tmpend != null){orderedlist.push(tmpend);}

          //redraw list
          jQuery(settings.optimorder).empty();
          return orderedlist;
 
      }

      function orderlist2array(usorted)
      {
        
        deleteMarkers();
        clearRoute();
        jQuery(settings.descriptioncontainer).children().remove();
        jQuery(settings.totalroutedesc).html('');
        optimpoints = [];
        var hasStart = false;
        var hasEnd   = false;
        var orderedlist = createSortOrder(usorted);
        c = 0;
        for (a=0;a<orderedlist.length;a++)
        { 
               c++;

               opar  = jQuery(orderedlist[a]).attr('id').split('_');
               ty    = opar[0];
               x     = opar[1];
               y     = opar[2];

               if (ty==jQuery.routens.typestart) //(c==1)
                isrc = settings.imgcontroller+'/'+c+'/optim_start_meni';
               else if (ty==jQuery.routens.typeend) //(c == orderedlist.length)
                isrc = settings.imgcontroller+'/'+c+'/optim_end_meni';
               else
                isrc = settings.imgcontroller+'/'+c+'/optim_via_meni';
               
               jQuery(orderedlist[a]).find('div').remove();//remove old order
               jQuery(orderedlist[a]).append("<div title='"+lang.hint2+"' class='"+settings.optimorderOrderButtonCss+"' id=rorder"+c+"></div>");//delete
               jQuery(orderedlist[a]).find('.optorderico').append("<div  class='"+settings.optimorderOrderDescriptionCss+"'><img src='"+isrc+"'></div>");//order
               jQuery(settings.optimorder).append(orderedlist[a]);
               jQuery("#rorder"+c).click(function(){jQuery(this).parent().remove() ;orderlist2array(false)});
               addGraphicPoint(new OpenLayers.LonLat(x,y),ty,c);
               optimpoints.push(new OpenLayers.LonLat(x,y));
               if (ty == jQuery.routens.typeend ){hasEnd = true;}
               if (ty == jQuery.routens.typestart) {hasStart = true};
               
        }
        if (hasEnd && hasStart) run();
      }

      function addGraphicPoint(la,type,z)
      {
         
         var lamerc = la.transform
         (
             new OpenLayers.Projection("EPSG:4326"),
             new OpenLayers.Projection("EPSG:900913")
         );
         var size = new OpenLayers.Size(21,27);
         var offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
         if (type == jQuery.routens.typestart)
            icon = new OpenLayers.Icon(settings.imgcontroller+'/'+z+'/optim_start',size,offset,null,type+'_optim');
         if (type == jQuery.routens.typeend)
            icon = new OpenLayers.Icon(settings.imgcontroller+'/'+z+'/optim_end',size,offset,null,type+'_optim');
         if (type == jQuery.routens.typevia) 
            icon = new OpenLayers.Icon(settings.imgcontroller+'/'+z+'/optim_via',size,offset,null,type+'_optim');
        
         marker = new OpenLayers.Marker(lamerc,icon); 
         optimpointmarkers.addMarker(marker);
      }

      function clearRoute()
      {
          route_vectors.removeFeatures();
          route_vectors.destroyFeatures();
          jQuery("#mailoptim").remove();
      }

      function deleteMarkers() 
      {   
          optimpointmarkers.clearMarkers();
      }

      function getOptimString()
      {
         optimstring='';
         for (var z = 0; optimpoints.length>z ;z++)
         {
              optimstring+=optimpoints[z].lon+"x"+optimpoints[z].lat+",";
         }
         return optimstring.substring(0,optimstring.length-1);
      }
      
      function parseDescription(rlist)
      { 
          var format = new OpenLayers.Format.WKT({
                   'internalProjection': new OpenLayers.Projection("EPSG:900913"),
                   'externalProjection': new OpenLayers.Projection("EPSG:4326")
          });

          route = [];
          count = 0;
          countall = rlist.length;
        
          rlist.each(function(){
               count++; 
               var wkt          = jQuery(this).find('wkt').text();
               var x1           = jQuery(this).find('x1').text();
               var y1           = jQuery(this).find('y1').text();
               var descr        = jQuery(this).find('description').text();
               var direction    = jQuery(this).find('direction').text();
               var len          = jQuery(this).find('len').text();
               var totallen     = jQuery(this).find('totallen').text();
               var time         = jQuery(this).find('time').text();
               var totaltime    = jQuery(this).find('totalltime').text();
               var lineseg      = format.read(wkt);
               
               lineseg.attributes = {description:descr,len:getFmeters(len),time:getFtime(time),totaltime:getFtime(totaltime),x1:x1,y1:y1};
               route.push(lineseg);
               createsnapshot(descr,direction,getFmeters(len),getFtime(time),lineseg,getFmeters(totallen),getFtime(totaltime),count,countall);
          });
          
          route_vectors.addFeatures(route);
          route = [];
          route = null; 
          if (route_vectors.getDataExtent() != null)
          {
              map.zoomToExtent(route_vectors.getDataExtent());
          }         
      }
      

      function getPlayer()
      {
          return '<div id="route_player" style="z-index:99999;"><img src="'+lang.image_ply_start+'" style="cursor:pointer" onclick="jQuery.startAnimateRoute(500,8000,8)"/>&nbsp;<img src="'+lang.image_ply_stop+'" style="cursor:pointer" onclick="jQuery.stopAnimateRoute()"/>&nbsp;<img src="'+lang.image_ply_pause+'" style="cursor:pointer" onclick="jQuery.pauseAnimateRoute()"/></div>';
      }

      function getFmeters(met)
      {
          km = parseInt (met/1000);
          m = parseInt  (met - (km*1000));
          return km+ " km "+m+ " m";
      }
      
      function getFtime(sec)
      {
         spi  =parseInt(sec); 
         h = parseInt ( (spi/3600) ) ;
         m = parseInt ( (spi - (h*3600)) /60  );
         s = parseInt (spi - ((m*60)+(h*3600))   );
         return h+":"+m+":"+s;
      }

      jQuery.stopAnimateRoute = function()
      {
          if (timer != null) 
          {
                animateroute = [];
                clearInterval(timer); 
                animarkers.clearMarkers();
                if (OlMapMiniAnimate != null) OlMapMiniAnimate.getMapInstance().destroy();
                OlMapMiniAnimate = null;
                jQuery('#olMapMiniOptimContainer').remove();
                
          }
      }
      
      jQuery.pauseAnimateRoute = function()
      {
           if (timer != null)
           {
               clearInterval(timer);
           }           
      }
      
      jQuery.startAnimateRoute = function(aspeed, turnspeed ,zoom )
      {
          if (animateroute.length == 0)
          {    
              animateRouteGetData();
              if (animateroute.length == 0) return false;
              if (OlMapMiniAnimate == null)
              {
                  jQuery("#"+mapSettings.div).append("<div id='olMapMiniOptimContainer'><div id='olMapMiniOptimDisplay'></div><div id='olMapMiniOptim'></div></div>");//preview
                  jQuery('#olMapMiniOptimContainer').append(getPlayer());
                  mapSettingsMini.div = 'olMapMiniOptim';
                  mapSettingsMini.tileBuffer = '2';  
                  OlMapMiniAnimate = new OlMiniMap(mapSettingsMini);
                  mmapAnimate = OlMapMiniAnimate.getMapInstance();
                  animarkers = new OpenLayers.Layer.Markers( "ani_points" );
                  mmapAnimate.addLayer(animarkers);
                  mmapAnimate.zoomTo(zoom);
              }
              x = 0;
          }
           
          maxf = animateroute.length; 
          if (maxf == 0) return false; 
          speed = aspeed;

          timer = setInterval(function()
          {
           
            if (animateroute.length == 0) return false;
            x++;  
            descriptor = animateroute[x];
            
            if (descriptor.start != undefined || descriptor.stop != undefined )
            {
                  speed = turnspeed;
            }
            else
            {
                  speed = aspeed;
                  point = descriptor.point;
                  line  = descriptor.line;
                  
                  description = descriptor.descr;
                  jQuery('#olMapMiniOptimDisplay').html(description);
                  la = new OpenLayers.LonLat(point.x,point.y);
                
                  size = new OpenLayers.Size(14,14);
                  offset = new OpenLayers.Pixel(-(size.w/2), -size.h);
                  icon = new OpenLayers.Icon(OpenLayers.Util.getImagesLocation() + 'marker_track.png',size,offset,null);
                  marker = new OpenLayers.Marker(la,icon);
                  animarkers.clearMarkers();
                  animarkers.addMarker(marker);

                  if ( ! point.intersects(mmapAnimate.getExtent().toGeometry()) ) {mmapAnimate.panTo(la);}

                  if (x == maxf)
                  {
                      jQuery.stopAnimateRoute();
                  }
            }     
          },speed)
      }
      
      function animateRouteGetData()
      {
          for (f=0; route_vectors.features.length - 1 > f; f++)
          {
            lineseg     = route_vectors.features[f];
            linesegNext = route_vectors.features[(f+1)];
            //alert("");
            desc= lang.optim_animate_route_t1 + lineseg.attributes.description+" ";
            desc+= lang.optim_animate_route_t2 + lineseg.attributes.totaltime+"<br>";
            desc+=lang.optim_animate_route_t3 + linesegNext.attributes.description+" ";
            desc+=lang.optim_animate_route_t4+ linesegNext.attributes.totaltime;
            starts = {start:'true'};
            animateroute.push(starts);
            for (c=0; lineseg.geometry.components.length>c; c++)
            {
                 anicon = {descr:desc,line:lineseg,point:lineseg.geometry.components[c]};
                 animateroute.push(anicon);
            }  
            stops = {stop:'true'};
            animateroute.push(stops);
          }    
      }

      function createsnapshot(descr,direction,len,time,lineseg,totallen,totaltime,count,countall)
      {
          var routedesc   =  "";
          
          var dirimg = null;
          if (direction == "DESNO" || direction == "OSTRO DESNO" )
          {
              dirimgblue = '<img src="'+lang.image_turn_right+'" />';
              dirimgwhite = '<img src="'+lang.image_turn_right_white+'" />';
          }
          if (direction == "LEVO" || direction == "OSTRO LEVO" )
          {
              dirimgblue = '<img src="'+lang.image_turn_left+'" />';
              dirimgwhite = '<img src="'+lang.image_turn_left_white+'" />';
          }
          if (direction == "NARAVNOST")
          {
              dirimgblue = '<img src="'+lang.image_straight+'" />';
              dirimgwhite = '<img src="'+lang.image_straight_white+'" />';
          }
          
          descshort = descr.split(",");
          desctrun = descshort[0];
          if (count == 1)//start
          {
              routedesc+= lang.routedescr_drive+" <b>"+len+"</b> "+'<img src="'+lang.image_straight+'" />'+"</b><br>";
              jQuery(settings.descriptioncontainer).append("<div title='"+lang.hint3+"'><div class='title' id='route_header_"+count+"'>"+"<b>"+count+" </b>"+lang.routedescr_start+" "+desctrun+" "+lang.routedescr_pojdi+" "+dirimgwhite+"</div><div style='display:none' class='"+settings.descriptionCss+"'  id='route_content_"+count+"'>"+routedesc+"</div></div>");
          } 
          else if(count > 1 && count < countall)
          {
              
              routedesc+= descr +  "</b><br>";
              routedesc+=lang.routedescr_drive+" <b>"+len+"</b> "+'<img src="'+lang.image_straight+'" />'+"   ";
              routedesc+=lang.routedescr_atime+"<b>"+totaltime+"</b><br> ";
              jQuery(settings.descriptioncontainer).append("<div title='"+lang.hint3+"'><div class='title' id='route_header_"+count+"'>"+"<b>"+count+" </b>"+" "+lang.routedescr_pojdi_1+" "+desctrun+" "+lang.routedescr_pojdi+" "+dirimgwhite+"</div><div style='display:none' class='"+settings.descriptionCss+"'  id='route_content_"+count+"'>"+routedesc+"</div></div>");
          }
          else //konec
          {
              routedesc+=lang.routedescr_stop+" <br>";
              routedesc+=descr+"<br>";
              routedesc+=lang.routedescr_stop_totalkm+"<b>"+totallen+"</b> "+lang.routedescr_stop_totalhr+"<b>"+totaltime+"</b>";
              jQuery(settings.descriptioncontainer).append("<div title='"+lang.hint3+"'><div class='title' id='route_header_"+count+"'>"+"<b>"+count+" </b>"+lang.routedescr_stop_totalkm+totallen+"  "+lang.routedescr_stop_totalhr+totaltime+"</div><div style='display:none' class='"+settings.descriptionCss+"'  id='route_content_"+count+"'>"+routedesc+"</div></div>");
              jQuery(settings.totalroutedesc).html(lang.routedescr_stop_totalkm+totallen+"  "+lang.routedescr_stop_totalhr+totaltime);
          }
          
          jQuery('#route_header_'+count).click(function()
          {
            jQuery(this).next().toggle('slow');
            return false;
          }).next().hide();

          
          tmpseg = null;
          
          jQuery("#route_header_"+count).draggable({appendTo:'body',zIndex:999999,opacity:0.5,distance:5,delay:100,revert:true,helper:'clone',revertDuration:500,
          drag:function(e,ui)
          {
               jQuery(this).fadeOut("slow");
               jQuery("div[id*=route_header_]").css("color", "white");
               
          },
          stop:function(e,ui)
          {
               tmpseg = lineseg;
               lineseg.style =  route_style['select'];
               map.zoomToExtent(lineseg.geometry.getBounds());
               jQuery(this).fadeIn("slow");
               jQuery(this).css('color','black');
          },
          start:function(e,ui)
          {
             jQuery(this).css('cursor','pointer');
             if (tmpseg != null)
             {    
                  tmpseg.style =  route_style['default'];
             }     
          }
          });
          
      }
      
      function onRouteSelect(seg)
      {
          onRouteUnselect();
          mc = map.getControlsByClass('OpenLayers.Control.MousePosition');
          lastXy = mc[0].lastXy;
          lonlat =  map.getLonLatFromViewPortPx(new OpenLayers.Pixel(lastXy.x,lastXy.y));
          
          descshort = seg.attributes.description.split(",");
          desctrun = descshort[0];
          
          description= lang.minimap_t1  + desctrun+" ";
          description+= lang.minimap_t2 + seg.attributes.totaltime;
        
          popupc="<div class='popupTitle'><div class='popupDetailToggle' id='popupDetailToggleMinmap'></div>"+description+"</div>";
          popupc+="<div class='popupDetail' style='display:none' id='popup_detail_Minmap'>";
          popupc+="<table>";
          popupc+="<tr>";
          popupc+="<td>";
          popupc+="<div>"+description+"</div>";
          popupc+="</td>";
          popupc+="</tr>";
          popupc+="<tr>";
          popupc+="<td  align=\"center\">";
          popupc+="<div style=\"width:260px;border:1px solid #008bae;height:200px\" id=\"olMapMiniOptDetail\"></div>";
          popupc+="</td>";
          popupc+="</tr>";
          popupc+="</table>";
          popupc+="</div>";
         
          
          if (popup == null)
          {
              
              popup = new OpenLayers.Popup.Anchored("popup_"+seg.id,
                                         lonlat,
                                         null,
                                         popupc,
                                         null, true, function afterclose(){
                                                 mmapPopup.destroy();
                                                 map.removePopup(popup);
                                                 popup = null;
                                                 OlMapMiniPop = null;
                                         });
              popup.autoSize = true;
              map.addPopup(popup);
              jQuery("#popupDetailToggleMinmap").toggle
              (
                function ()
                {
                    jQuery("#popup_detail_Minmap").show();
                    popup.updateSize();
                    route_vectors_mini = new OpenLayers.Layer.Vector("route_layer_mini",{style:route_style['default']});
                    mapSettingsMini.div = 'olMapMiniOptDetail';
                    mapSettingsMini.tileBuffer = '2';
                    OlMapMiniPop = new OlMiniMap(mapSettingsMini);
                    mmapPopup = OlMapMiniPop.getMapInstance();
                    mmapPopup.addLayer(route_vectors_mini);
                    route_vectors_mini.addFeatures(seg.clone());
                    mmapPopup.zoomToExtent(seg.geometry.getBounds());
                    
                },
                function ()
                {
                    mmapPopup.destroy();
                    OlMapMiniPop = null;
                    jQuery("#popup_detail_Minmap").hide();
                    popup.updateSize();
                }
              );
          }
          
         
      }
      
      function onRouteUnselect()
      {
          if (popup != null){map.removePopup(popup);popup=null} //OlMapMini.getMapInstance().destroy();
      }
      
      jQuery.runOptim = function()
      {
          orderlist2array();
      }

      function sendRouteToMail()
      {
            jQuery("#mailoptim").remove();
            parstr = jQuery(optimpoints).get().join(',');
            img = "<img border='0'align='bottom' style='padding-top:5px;float:right' src='"+lang.image_mail+"'/>";
          
            optstr = '<a style="text-decoration:none;color:red;font-family:verdana;font-size:10px" href="mailto:?body='+settings.mailurl+'/paramsRoute/'+parstr+'">'+lang.optim_msg8+img+'</a>';
            jQuery('#left_meni').append("<div style='display:block;margin-top:15px;height:30px;width:40%'  id='mailoptim'>"+optstr+"</div>");
      }

      function run()
      {
          if (optimpoints.length >= 2)
          {
                  os = getOptimString();
                 
                  //jQuery("#beta_message").html(os);
                  kn = jQuery("input[@name="+settings.optimkind+"]:checked").val(); 
                  var optimid = null;
                  jQuery('#app_msg').show();
                  jQuery('#app_msg').html(lang.optim_msg1);
                  jQuery.get(settings.wsurl+'/startOptim/'+os+'/'+kn,{},function(data){
                      optimid = data;
                      if (optimid == -1) {alert (lang.optim_msg2);jQuery('#app_msg').html('');jQuery('#app_msg').hide();return false; }
                      if (optimid == -2) {alert (lang.optim_msg3);jQuery('#app_msg').html('');jQuery('#app_msg').hide();return false; }
                      if (optimid == -3) {alert (lang.optim_msg4);jQuery('#app_msg').html('');jQuery('#app_msg').hide();return false; }
                      jQuery('#app_msg').html(lang.optim_msg5);
                      jQuery.get(settings.wsurl+'/getOptimData/'+optimid,{},function(data){
                          try
                          {
                              jQuery('#app_msg').html(lang.optim_msg6);
                              var xmldata = jQuery.text2xml(data);
                              var rlist = jQuery(xmldata).find('routelist');
                            
                              if (rlist.length > 0)
                              {
                                    sendRouteToMail();
                                    parseDescription(rlist);
                                   
                              }
                              else
                              {
                                    alert (lang.optim_msg7);
                                    jQuery('#app_msg').hide();
                              }
                          }
                          catch(err)
                          {
                                alert("javascript err : " + err.description);
                                jQuery('#app_msg').html('');
                                jQuery('#app_msg').hide();
                          }
                          jQuery('#app_msg').html('');
                          jQuery('#app_msg').hide();
                      });
                  });
          }
          
      }

     
}
