jQuery.fn.poitree = function(options)
{
  

     var settings = jQuery.extend(
      {
        wsurl:null,
        zoom:10,
        map : null,
        lang:null,
        imgcontroller: null,
        zoomRestrictions:{3578:10}
      }
      , options);

      
      container        = this;
      var lang         = settings.lang;
      var poimarkers = new OpenLayers.Layer.Markers( "poi_render" );    
      var map  = settings.map.getMapInstance();
      map.addLayer(poimarkers);
      map.events.register('moveend',null,getPois);
      //map.setLayerIndex(poimarkers ,map.getNumLayers() - 2);
     
      jQuery.setAddsZoom = function(z)
      {
          settings.zoom = z;
      };

      function renderOnMap(poiList)
      {
         
         for(var prop in poiList)
         {
                 f = 0;
                 for ( var c in poiList[prop])
                 {
                     f++;
                     var offset;
                     var info = poiList[prop][c];
                     // alert(info.description);
                     var size = new OpenLayers.Size(25,25);
                     if (f == 1)
                         offset = new OpenLayers.Pixel(-(size.w/2) , -(size.h/2) );
                     else
                          offset = new OpenLayers.Pixel(-(size.w/2) , - ( ((size.h)*(f-1)) + ((size.h/2)* (f-1)) )  );

                     zoomR = settings.zoomRestrictions[info.poitype];

			//alert(settings.imgcontroller+"/"+info.poitype);
                     var icon = new OpenLayers.Icon(settings.imgcontroller+"/"+info.poitype,size,offset,null, info.id+'_poi_render' );
                     var marker = new OpenLayers.Marker(info.lonlat,icon);


                     if (zoomR == undefined || map.getZoom() >= zoomR )
                     {
                        addEvt(marker,info);
                        poimarkers.addMarker(marker);
                     }
                     jQuery('#'+info.id+'_poi_render').css('cursor','pointer');
                     //jQuery('#'+info.id+'_poi_render').css('border','1px solid green');

                     
                 }
         }
      }

      function addEvt(marker,info)
      {
            marker.events.register("mousedown", marker, function()
            {
                popuppoi = addPopup(info.id,info.lonlat,info.description,info.op,info.phone,info.email,info.www,info.opentime,info.gsm,info.address);
            });
      }

      function deleteMarkers() 
      {            
         poimarkers.clearMarkers();
      }
      
      function getPois()
      {
          deleteMarkers();
          if (map.getZoom() >= settings.zoom)
          {    
              ex = map.getExtent();
              ex.transform
              (
                new OpenLayers.Projection("EPSG:900913"),
                new OpenLayers.Projection("EPSG:4326")
              ); 
              wgsbb = ex.toArray();    
              jQuery.get(settings.wsurl+'/getPoi/'+wgsbb[0]+'/'+wgsbb[1]+'/'+wgsbb[2]+'/'+wgsbb[3],{} ,function(data)
              {
                  parsePoiData(data);
              });
               
          }

      }
      
      function parsePoiData(data)
      {
                var poiList = {};

                if(jQuery.browser.msie)
                  var xmldatapoi = jQuery.text2xml(data);
                else
                  var xmldatapoi = data;

                var plist = jQuery(xmldatapoi).find('poilist');
                c = 0;
                plist.each(function(){

                    c++;
                    var poitype     = jQuery(this).find('poitype').text();
                    var description = jQuery(this).find('description').text();
                    var phone       = jQuery(this).find('phone').text();
                    var email       = jQuery(this).find('email').text();
                    var www         = jQuery(this).find('www').text();
                    var opentime    = jQuery(this).find('opentime').text();
                    var gsm         = jQuery(this).find('gsm').text();
                    var address_orig = jQuery(this).find('address').text();
                    var address     = address_orig.replace('null','');//če ni hš
                    var op          = jQuery(this).find('about').text();
                    var x           = jQuery(this).find('x').text();
                    var y           = jQuery(this).find('y').text();


                    lonlat = new OpenLayers.LonLat(parseFloat(x),parseFloat(y)).transform(
                    new OpenLayers.Projection("EPSG:4326"),
                    new OpenLayers.Projection("EPSG:900913")
                    );
                        
                    //var id = c+"poi_" + String(lonlat.lon).replace('.','_')+"_"+String(lonlat.lat).replace('.','_');
                    var id = c;

                    if(lonlat in poiList )
                    {
                         poiList[lonlat].push({id:id,lonlat:lonlat,description:description,op:op,phone:phone,email:email,www:www,opentime:opentime,gsm:gsm,address:address,poitype:poitype});
                    }
                    else
                    {
                         poiList[lonlat] = [{id:id,lonlat:lonlat,description:description,op:op,phone:phone,email:email,www:www,opentime:opentime,gsm:gsm,address:address,poitype:poitype}] ;
                    }
                      
                });
                renderOnMap(poiList);              
      }
       
      function addPopup(id,lonlat,description,op,phone,email,www,opentime,gsm,address)
      {
               
               if ( document.getElementById("popup_"+id)== null)
               {
                   popupc= "<div>";
                    popupc+="<div class='popupTitle'><div class='popupDetailToggle' id='popupDetailToggle"+id+"'></div>"+description+"</div>";
                      popupc+="<div class='popupDetail' style='display:none' id=popup_detail_"+id+">";
                      popupc+="<table class='popupTable'>";
                        popupc+="<tr>";
                          popupc+="<td><b>"+lang.adds_popup_field_tel_lbl+":</b></td><td>&nbsp;"+phone+"</td>";
                        popupc+="</tr>";
                        popupc+="<tr>";
                          popupc+="<td><b>"+lang.adds_popup_field_gsm_lbl+":</b></td><td>&nbsp;"+gsm+"</td>";
                        popupc+="</tr>";
                        popupc+="<tr>";
                          popupc+="<td><b>"+lang.adds_popup_field_mail_lbl+":</b></td><td>&nbsp;"+email+"</td>";
                        popupc+="</tr>";
                        popupc+="<tr>";
                          popupc+="<td><b>"+lang.adds_popup_field_www_lbl+":</b></td><td>&nbsp;"+www+"</td>";
                        popupc+="</tr>";
                        popupc+="<tr>";
                          popupc+="<td><b>"+lang.adds_popup_field_open_lbl+":</b></td><td>&nbsp;"+opentime+"</td>";
                        popupc+="</tr>";
                        popupc+="<tr>";
                          popupc+="<td><b>"+lang.adds_popup_field_address_lbl+":</b></td><td>&nbsp;"+address+"</td>";
                        popupc+="</tr>";
                        popupc+="<tr>";
                          popupc+="<td><b>"+lang.adds_popup_field_op_lbl+":</b></td><td>&nbsp;"+op+"</td>";
                        popupc+="</tr>";
                      popupc+="</table>";
                      popupc+="<table>";
                        popupc+="<tr>";
                          popupc+="<td>";
                            popupc+=lang.adds_popup_routeplan_label+":<br>";
                          popupc+="</td>";
                        popupc+="</tr>";
                        popupc+="<tr>";
                          popupc+="<td>";
                            popupc+=lang.adds_route_plan_start_label+" : <img id='optims_"+id+"' style='cursor:pointer' src='"+lang.image_start_optim_menu+"' />";
                            popupc+=" | "+lang.adds_route_plan_via_label+" : <img id='optimv_"+id+"' style='cursor:pointer' src='"+lang.image_via_optim_menu+"' /> | ";
                            popupc+=lang.adds_route_plan_end_label+" : <img id='optime_"+id+"' style='cursor:pointer' src='"+lang.image_stop_optim_menu+"' />";
                          popupc+="</td>";
                       popupc+="</td>";
                      popupc+="</tr>";
                      popupc+="<tr>";
                        popupc+="<td id='zoomtopoi_"+id+"' style='cursor:pointer' >";
                          popupc+=lang.adds_popup_zoom_label+"&nbsp;<img src='"+lang.image_blue_zoom+"' /><br>";
                        popupc+="</td>";
                      popupc+="</tr>";
                      popupc+="</table>";
                      popupc+="</div>";
                   popupc+="</div>";


                   var popuppoi = new OpenLayers.Popup.Anchored("popup_"+id,
                                             lonlat,
                                             null,
                                             popupc,
                                             null, true, function afterclose(){
                                                     map.removePopup(popuppoi);
                                                     
                  });

                  popuppoi.autoSize = true;
                  map.addPopup(popuppoi);
                  
                  lawgs = new OpenLayers.LonLat(lonlat.lon,lonlat.lat).transform(
                   new OpenLayers.Projection("EPSG:900913"),
                   new OpenLayers.Projection("EPSG:4326")
                  );
                 
                  jQuery("#popupDetailToggle"+id).toggle(
                    function (){jQuery("#popup_detail_"+id).hide();popuppoi.updateSize();},function (){jQuery("#popup_detail_"+id).show();popuppoi.updateSize();}
                  );
          
                  jQuery('#optime_'+id).click(function(){jQuery.addOptimPoint(jQuery.routens.typeend,lawgs.lon,lawgs.lat,description )});
                  jQuery('#optimv_'+id).click(function(){jQuery.addOptimPoint(jQuery.routens.typevia,lawgs.lon,lawgs.lat,description )});
                  jQuery('#optims_'+id).click(function(){jQuery.addOptimPoint(jQuery.routens.typestart,lawgs.lon,lawgs.lat,description )});
                  jQuery('#zoomtopoi_'+id).click(function(){map.setCenter(lonlat,9)});
                  //map.setCenter(lonlat);
                  jQuery("#popup_detail_"+id).show();
                  popuppoi.updateSize();
              }
              return popuppoi;
      }
  
}


