/*
obsluga mapy
*/
var punkty = new Array();
var directions; //obiekt direction 
var unplugedDirections; //obiekt direction nie podlaczony do mapy
var map; //mapa GMAp2
var geocoder;
var g_rLenght = 0; //dlugosc trasy
var koniec = new Array(false,false); //flagi czy skonczyly sie wywolywania funkcji sprawdzajacych adresy
var query ='';
var poprawne = false; 
var ilePunktow = 0; //z ilu punktow mozna utworzyc trase
var markery = new Array(); //markery na trasie
var wskPunkty = -1;
var _usun_punkt = 'Usun ostatnio dodany punkt';
var _brak_adresu_lub_adres_niepoprawny = '_brak_adresu_lub_adres_niepoprawny';
var _error_G_GEO_MISSING_QUERY = '_error_G_GEO_MISSING_QUERY';
var _error_G_GEO_UNKNOWN_DIRECTIONS = '_error_G_GEO_UNKNOWN_DIRECTIONS';
var _error_wystapil_blad = '';
var submitButtonValueDefault = 'do_ustawienia';
var edycja = true;
var trasaZleceniodawcy = false;
var pokaz_alert = true;
var idFormularza = ''; //id formularza z ktorego przechodzi sie po wyszukaniu trasy prze googlemaps
var g_submitNow = false;  //zaladowanie trasy = wyslanie formularza
var g_modeAsync = false; //praca w trybie asynchronicznym czy synchronicznym
var is3 = false; //czy podano juz 3 punkty
//przelicznik punktow na kilometry
var wspNS = 111.3;
var wspEW = 68.7;

var g_x;
var g_y;
//pobiera ikone z ... http://www.geocodezip.com/basic8i.asp?filename=example_letter.xml
// Create our lettered marker icons 
// Create our lettered marker icons 
var icons = new Array();
icons[""] = new GIcon(); 
icons[""].image = "http://www.google.com/mapfiles/marker.png"; 
icons[""].shadow="http://www.google.com/mapfiles/shadow50.png"; 
icons[""].iconSize=new GSize(20, 34); 
icons[""].shadowSize=new GSize(37, 34); 
icons[""].iconAnchor=new GPoint(9,34); 
icons[""].infoWindowAnchor=new GPoint(9,2); 
icons[""].infoShadowAnchor=new GPoint(18,25); 
icons[""].printImage="http://www.google.com/mapfiles/markerie.gif"; 
icons[""].mozPrintImage="http://www.google.com/mapfiles/markerff.gif"; 
icons[""].printShadow="http://www.google.com/mapfiles/dithshadow.gif"; 
icons[""].transparent="http://www.google.com/mapfiles/markerTransparent.png";
//icons[""].imageMap=[9,0,6,1,4,2,2,4,0,8,0,12,1,14,2,16,5,19,7,23,8,26,9,30,9,34,11,34,11,30,12,26,13,24,14,21,16,18,18,16,20,12,20,8,18,4,16,2,15,1,13,0]; 
var intToStringTab = new Array("A","B","C","D","E");



/*
aktualizuje przejazd dla podania trzeciego punktu
zamienia "miejsce przyjazdu" z "przejazd przez"
*/

function aktualizujPrzejazdPrzez() {
    if (hPrzez = document.getElementById('przez')) {
        var tmp = hPrzez.value;
        var hMDost = document.getElementById('miejsce_dostarczenia');
        hPrzez.value = hMDost.value;
        hMDost.value = tmp;
    }    
}
//zapisuje LatLng kliknietego punktu w polu adresu
function punktNaAdres() {
	var tmp = ''; //tymaczsowa zmienna
    if ( punkty[wskPunkty] instanceof GLatLng ) {
        if (wskPunkty == 0 ) {
            if (hOdb = document.getElementById('miejsce_odbioru'))
                hOdb.value = punkty[wskPunkty].toUrlValue();
        }
        else if (wskPunkty == 1) {
            if (hDos = document.getElementById('miejsce_dostarczenia'))  
                hDos.value = punkty[wskPunkty].toUrlValue();  
        }
        else if (wskPunkty == 2) {
            if (hPrzez = document.getElementById('przez'))  {
                    
                if (is3) {
                     //sa 3 punkt - nadpisujemy - miejsce dostarczenia
                        hDos = document.getElementById('miejsce_dostarczenia');
                        hDos.value = punkty[wskPunkty].toUrlValue();
                      
                       hPrzez.value = punkty[wskPunkty-1].toUrlValue();
                      //aktualizujPrzejazdPrzez(); //zamienia - "przez" z "m dojazdu"
                      //gPodano3First = false;
                }  
                else {
                   //wlasnie podano 3 punkt - zamieniamy miejscami
                   is3 = true;
                    hDos = document.getElementById('miejsce_dostarczenia');   
                    hPrzez.value = punkty[wskPunkty].toUrlValue(); 
                    tmp = hDos.value;
                    hDos.value = hPrzez.value;
                    hPrzez.value = tmp; 
                }
            }
        }
    }
}
function get_icon(iconStr) {
   if ((typeof(iconStr)=="undefined") || (iconStr==null) || (iconStr < "A") || (iconStr > "Z")) { 
      // google only has markers A - J
      iconStr = ""; 
   } else if ((typeof iconStr == "string") && (iconStr.length > 1)) {
      iconStr = "";
   }
    
   if (!icons[iconStr]) {
      icons[iconStr] = new GIcon(icons[""]);
      icons[iconStr].image = "http://www.google.com/mapfiles/marker"+ iconStr +".png";
   } 
   return icons[iconStr];
}
//
var d2r = Math.PI / 180;   // degrees to radians
var r2d = 180 / Math.PI;   // radians to degrees
var earthsradius = 3963; // 3963 is the radius of the earth in miles
function drawCircle(lng, lat, map)
{
   var points = 32;
   var radius = 1;             // radius in miles

   // find the raidus in lat/lon
   var rlat = (radius / earthsradius) * r2d;
   var rlng = rlat / Math.cos(lat * d2r);

   var extp = new Array();
   for (var i=0; i < points+1; i++) // one extra here makes sure we connect the
   {
      var theta = Math.PI * (i / (points/2));
      ex = lng + (rlng * Math.cos(theta)); // center a + radius x * cos(theta)
      ey = lat + (rlat * Math.sin(theta)); // center b + radius y * sin(theta)
      extp.push(new GPoint(ex, ey));
   }

   map.addOverlay(new GPolyline(extp, "#000000", 2));
}

/*
* rysuj okrag wokol LatLng o prmieniu promien(km)
*/
function rysuj_okrag(lat, promien) {
  geocoder.getLatLng(lat,
	        function(point){ 
    var LatLng = point;
    var mapNormalProj = G_NORMAL_MAP.getProjection();
    var mapZoom = map.getZoom();
    var lng2k = 111; 
    var lat2k = 111 * Math.cos(LatLng.lat() ); //lat to km
    var y = promien / lng2k; //roznica w stopniach
    var x = promien / lat2k; // jw
    var pOd = new GLatLng(LatLng.lat() + y , LatLng.lng() ); //punkt odniesienia
    var p1 = mapNormalProj.fromLatLngToPixel(LatLng, mapZoom);
    var p2 = mapNormalProj.fromLatLngToPixel(pOd, mapZoom);
    //wyliczenie roznicy w pixelach
    var distInPix = p2.y - p1.y;
    
    var d2r = Math.PI / 180;   // degrees to radians
    var r2d = 180 / Math.PI;   // radians to degrees
    var promienZiemi = 6378.135; //km
    // find the raidus in lat/lon
   var rlat = (promien / promienZiemi) * r2d;
   var rlng = rlat / Math.cos(LatLng.lat() * d2r);
    
    var polyPoints = Array();
    
    
    var clickedPixel = mapNormalProj.fromLatLngToPixel(LatLng, mapZoom);
    var polyColor = '#0066aa';
    
    var polyNumSides = 20;
    var polySideLength = 18;
    for (var a = 0; a<(polyNumSides+1); a++) {
	    var aRad = polySideLength*a*(Math.PI/180);
	    var polyRadius = distInPix; //?? 
	    //var pixelX = clickedPixel.x + rlng * Math.cos(aRad);
	    //var pixelY = clickedPixel.y + rlat * Math.sin(aRad);
	    var pixelX = clickedPixel.x + polyRadius * Math.cos(aRad);
	    var pixelY = clickedPixel.y + polyRadius * Math.sin(aRad);
	    var polyPixel = new GPoint(pixelX,pixelY);
	    var polyPoint = mapNormalProj.fromPixelToLatLng(polyPixel,mapZoom);
	    polyPoints.push(polyPoint);
    }
    map.clearOverlays();
    var polygon = new GPolygon(polyPoints,"#000000",2,.5,polyColor,.5);
	map.addOverlay(polygon);
  //drawCircle(LatLng.lng(), LatLng.lat(), map);
  //var punktXY = GProjection.fromLatLngToPixel(LatLng,  zoom)
  var marker = new GMarker( LatLng );   //utowrzenie markera
  map.addOverlay(marker);    //dodanie markera
  })
  //var punktXY = map.fromLatLngToDivPixel(LatLng);
  //alert(punktXY.x);
  //punktXY.x + 100
  //var punktOdniesienia = new GLatLng(LatLng.lat() , LatLng.lng() + 0.5 );
  //var po = new GPoint(punktXY.x, (punktXY.y+10) );
  //var mark = new GMarker( po );   //utowrzenie markera
  //var opts = {};
  //map.addOverlay(mark, opts);    //dodanie markera
  
  //punktOdniesienia = map.fromDivPixelToLatLng(GPoint);
 // var dystans = punktOdniesienia.distanceFrom(LatLng) / 1000; //dystans w km dla 100px roznicy
  
  
}
//czysci trase
function resetuj_trase() {
    if (!map) return;
    pokaz_alert = true;
    edycja = true;
    poprawne = false;
    bPoprawne = false;
    wskPunkty = -1;
    map.clearOverlays();
    markery = new Array(); //markery na trasie
    punkty = new Array();
    document.getElementById('miejsce_odbioru').readOnly = false; 
    document.getElementById('miejsce_dostarczenia').readOnly = false;
    //document.getElementById('miejsce_odbioru').value = ''; 
    //document.getElementById('miejsce_dostarczenia').value = '';
    
    //if (hPrzez = document.getElementById('przez')) {
    //    hPrzez.value = '';
    //    hPrzez.readOnly = false;
    //}
    if (hSb = document.getElementById('submit_button'))
        hSb.value = submitButtonValueDefault;
    if (hTr = document.getElementById('trasa'))
        hTr.innerHTML = '';
    if ( hDtd = document.getElementById('dlTrasyDiv'))
        hDtd.innerHTML = '';
    //ustawienie na pierwszej pozycji menu wyboru podkategorii
    if (subcats = document.getElementsByTagName('select')) {
        for (i = 0 ; i < subcats.length  ; i++ ) {
            //if (subcats[i].name= 'subcategories[]' ) {
                if (subcats[i].name != 'tryb_wyszukiwania') { //zeby dalo sie zmienic tryb ;)
                  if (subcats[i].name == 'nadkladam_promien' || subcats[i].name == 'nadkladam_wzdluz'  ) {
                    ;//subcats[i].selectedIndex = 3;
                  }
                  else {
                  	if (subcats[i].name == 'wybor_czasu_dostarczenia' || subcats[i].name == 'wybor_czasu_odbioru' ) {
                  		subcats[i].selectedIndex = 1;
                  	}
                  	else {
                    	subcats[i].selectedIndex = 0;  
                    }
                  }
                }
                //break;
            //}    
        }  
    }
    //ustawienei wyboru radio buttonow
    radios = document.getElementsByName('czas_dostarczenia');
    for (i = 0 ; i < radios.length  ; i++ ) {
        if (radios[i].type=='radio' && radios[i].value  == 'nie_wazne') {
            radios[i].checked = true;   
           
        }
    }
    radios = document.getElementsByName('czas_odbioru');
    for (i = 0 ; i < radios.length  ; i++ ) {
        if (radios[i].type=='radio' && radios[i].value  == 'nie_wazne') {
            radios[i].checked = true; 
              
        }
    }
   
    
}
/*
*malyReset - kasuje ustawienienia zwiazane z blednym punktem, adresem, brakiem trasy
*/
function malyReset(){
    if (hMdo = document.getElementById('miejsce_odbioru')){
        hMdo.value = '';
    }
    if (hModb = document.getElementById('miejsce_dostarczenia')){
        hModb.value = '';
    }
    if (hPrzez = document.getElementById('przez')){
        hPrzez.value = '';
    }
    //kasowanie ustawien
    wskPunkty = -1;
    map.clearOverlays();
    markery = new Array(); 
    punkty = new Array();
    
}

/*
pokazuje trase jaka podal uzytkownik przy wyszukiwaniu
*/
function pokazTraseWyszukiwania() {
}


//do wyswietlania podczas przegladania aukcji
function initializeRoute() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("map_canvas"));
        directions = new GDirections(map, null );
        GEvent.addListener(directions,"error",error_e);          //error przy wyliczaniu trasy
        GEvent.addListener(directions,"load",loadRoute_e);           //trasa wyliczona
        //GMarker.
        geocoder = new GClientGeocoder();
        geocoder.setBaseCountryCode('pl');
        map.addControl(new GSmallMapControl());
        //map.addControl(new GMapTypeControl());
        wsp = (document.getElementById('punkty').value).split(':');
        odb = wsp[0].split(',');
        dost = wsp[1].split(',');
        punkty[0] = new GLatLng(odb[0],odb[1]);
        punkty[1] = new GLatLng(dost[0],dost[1]);
        //query = document.getElementById('miejsce_odbioru').innerHTML + ' to: ' + document.getElementById('miejsce_dostarczenia').innerHTML;
        //alert(query);
        var gDO = {locale:"pl_PL"} //locale:"pl_PL"
        directions.loadFromWaypoints(punkty,gDO); //'locale:"pl_PL"
        
        
        //map.setCenter(new GLatLng(37.4419, -122.1419), 8);
 	
      }      
}


//do wyswietlania podczas pobierania punktow z mapy
function initialize(mapCanvasId,trasaId) {
   
      if (GBrowserIsCompatible()) {
        //sprawdzenie domyslnych wartosci
        if (mapCanvasId == null){
            mapCanvasId = 'map_canvas';
        }
        if (trasaId == null){
            //trasaId = 'trasa';
        }
        //map = new GMap2(document.getElementById("map_canvas"));
        //directions = new GDirections(map, document.getElementById('trasa') );
        map = new GMap2(document.getElementById(mapCanvasId));
        if (document.getElementById(trasaId)) 
            directions = new GDirections(map, document.getElementById(trasaId) );
        else 
            directions = new GDirections(map, null);
            
        GEvent.addListener(map,"click", function mapOnClick_e(overlay,point){
            //edycja zakonczona, trasa wczytana
            if (!edycja) return;
            
            if (overlay instanceof GMarker) {
                
                map.removeOverlay(markery[wskPunkty]);   
               
                delete punkty[wskPunkty];
                if (wskPunkty == 2) {
                    //trzeba zamienic przez z miejscem przyjazdu i usunac przez
                    if (hPrzez = document.getElementById('przez')) {
                        var hMDost = document.getElementById('miejsce_dostarczenia');   
                        hMDost.value = hPrzez.value;
                        hPrzez.value = '';
                    }
                }
                 wskPunkty--; 
                is3 = false;
                
            }
        	if (point != null)  {
        	  //ile mamy miec punktow
        	  var cNo = punkty.length; //current number
        	  if ( wskPunkty < (ilePunktow - 1)) {
        	       wskPunkty++;
        	        //var opts = {title: (wskPunkty+1)};
        	        var opts = {};
        	        opts.icon =  get_icon(intToStringTab[ wskPunkty] );
        	        opts.clickable = true;
        	        opts.draggable = false;
                    var marker = new GMarker( point, opts );
                    markery[wskPunkty] = marker;
                    map.addOverlay(marker); 
                    punkty[wskPunkty] = point;
                    punktNaAdres();
                    //pierwszy raz podano 3 punktu
                   
              }
              else {
                if (ilePunktow == 1) { //wyszukiwanie w promieniu
                    wskPunkty = 0;
                    map.clearOverlays();    //wyczyszczenie znacznikow
                    markery = new Array(); //markery na trasie
                    punkty = new Array();   
                    //ustawienie parametrow markera
                    var opts = {};
                    opts.icon =  get_icon(intToStringTab[ wskPunkty] );
        	        opts.clickable = true;
        	        opts.draggable = false;
                    var marker = new GMarker( point, opts );    
                    markery[wskPunkty] = marker;
                    map.addOverlay(marker); 
                    punkty[wskPunkty] = point;    
                    punktNaAdres();
                    //rysuj_okrag(marker.getLatLng(),70);
               }
                else {   
                    //zastapienie ostatniego punktu miejsce klikniecia       
                    var opts = {};
                    opts.icon =  get_icon(intToStringTab[ wskPunkty] );
        	        opts.clickable = true;
        	        opts.draggable = false;
        	        map.removeOverlay(markery[wskPunkty]);
                    var marker = new GMarker( point, opts );    
                    markery[wskPunkty] = marker;
                    map.addOverlay(marker); 
                    punkty[wskPunkty] = point;    
                    punktNaAdres();
                    
                    
                    //alert(_usun_punkt);
                }
               
              }
	       }       
        }
        
        );           //klikniecie mapy    
            
        
        geocoder = new GClientGeocoder();
        geocoder.setBaseCountryCode('pl');
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        
        //GEvent.addListener(map,"click",pobierzWspolrzedne); //klikniecie
        GEvent.addListener(directions,"error",error_e);          //error przy wyliczaniu trasy
        GEvent.addListener(directions,"load",load_e);           //trasa wyliczona
        
        map.setCenter(new GLatLng(52.0, 19.00), 6);
 
      }
      else {
        alert('Przegladarka nie obslugiwana'); //pominiecie mechanizmu tlumaczenia  
      }
}

//
function error_e() {
    poprawne = false;
    bPoprawne = false;
    edycja = true;
     //kasowanie ustawien
    wskPunkty = -1;
    map.clearOverlays();
    markery = new Array(); 
    punkty = new Array();
    var kod = directions.getStatus().code;
    if (kod == G_GEO_MISSING_QUERY) {
        alert(_error_G_GEO_MISSING_QUERY);
    }
    else if (kod == G_GEO_UNKNOWN_DIRECTIONS) {
        alert(_error_G_GEO_UNKNOWN_DIRECTIONS);
    }
    else {
        alert(_error_wystapil_blad);
        
        malyReset(); //kasuje ustawienia zwiazane z trasa
    }
    if (h = document.getElementById('status_wyszukiwania')) {
            h.innerHTML = g_blad_wyszukiwania;  
    }
	//alert(directions.getStatus().code);
	
	//return false;
}

var submitButtonValueOk ='default';

function load_e() {
    //var dist = directions.getDistance();
    bPoprawne = true; //trasa zaladowana pomyslnie
    wsp = punkty[0].toUrlValue() + ' : ' + punkty[1].toUrlValue();
    if (punkty[2]!=null && punkty[2]!= 'undefined') {
        wsp = punkty[0].toUrlValue() + ' : ' + punkty[1].toUrlValue() + ' : ' + punkty[2].toUrlValue();    
    }
    else {
        wsp = punkty[0].toUrlValue() + ' : ' + punkty[1].toUrlValue();    
    }
        
    if (document.getElementById ('submit_button'))
        document.getElementById ('submit_button').value = submitButtonValueOk;
    //pobranie dlugosci trasy
    var dist = directions.getDistance();
    if (document.getElementById ('dlugosc_trasy'))
        document.getElementById ('dlugosc_trasy').value = (dist.meters/1000);
    if (document.getElementById ('dlTrasyDiv')) {
        document.getElementById ('dlTrasyDiv').innerHTML = (dist.meters/1000);    
    }
    //poprawne = true;    //walidacja przeszla, mozna isc dalej
    //wyliczenie punktow
    
    
    //wrzucenie wspolrzednych do ukrytego pola
    if (! trasaZleceniodawcy) {
        g_rLenght = (directions.getDistance()).meters;
        var pol = directions.getPolyline();
        var vxs = pol.getVertexCount();
    	var stepNo = 20;
	   // var step = Math.floor(vxs / stepNo);
	    var step = (vxs / stepNo);
	    var stringa = '';
	    var index = 0;
	    for (var i = 0; i < stepNo ; i++) {
	       index = Math.round(i * step );
	       if (index > vxs || i == (19))
	           index = (vxs - 1);
            cord = pol.getVertex(index);
            stringa += cord.toUrlValue()+ ";"; //\n sie usunie
        } 
        //trasa licytujacego
        if (document.getElementById('punkty'))
            document.getElementById('punkty').value = wsp;  
        if (document.getElementById('wspolrzedne_trasy')) {
            document.getElementById('wspolrzedne_trasy').value = stringa;   
        }
        if (wskPunkty >=1 && document.getElementById('miejsce_odbioru') ) {
            document.getElementById('miejsce_odbioru').value = punkty[0].toUrlValue(); 
            if (wskPunkty ==1)
                document.getElementById('miejsce_dostarczenia').value = punkty[1].toUrlValue();
            else 
                document.getElementById('miejsce_dostarczenia').value = punkty[2].toUrlValue();   
           
        }
        //document.getElementById('miejsce_odbioru').readOnly = true; 
        //document.getElementById('miejsce_dostarczenia').readOnly = true;
        //if (hPrzez = document.getElementById('przez')) hPrzez.readOnly = true;
        //wyslanie formularza
        if (idFormularza != '' && g_submitNow) {
            var hForm = document.getElementById(idFormularza);
            if (hForm != null) {
                hForm.submit();
            }    
        }
        
    }
    else {
        zablokujEdcyjeZlec();
        //trasa zleceniodawcy pobieramy tylko 2 punkty
        if (document.getElementById('punkty'))
            document.getElementById('punkty').value = wsp;
        //podanie trasy przez punkty - w miejsce adresow trzeba by podac wspolrzedne
        if (wskPunkty >=1) {
            document.getElementById('miejsce_odbioru').value = punkty[0].toUrlValue(); 
            document.getElementById('miejsce_dostarczenia').value = punkty[1].toUrlValue();
            //if (hPrzez = document.getElementById('przez')) hPrzez.readOnly = true;
        }
        //wyslanie formularza
        if (idFormularza != '' && g_submitNow) {
            var hForm = document.getElementById(idFormularza);
            if (hForm != null) {
                hForm.submit();
            }    
        }
    }
    //usuniecie markerow podanych przez uzytkownika
    for (var i = 0; i < markery.length ; i++) {
        if (markery[i] instanceof GMarker) {
            map.removeOverlay(markery[i]);
        }
    }
    
    edycja = false;
    
    //praca w trybie asynchronicznym
    if (g_modeAsync) {
        wyslij_zapytanie(); //wysyla zapytanie do serwera 
    }
}
function loadRoute_e() {
    var dist = directions.getDistance();
    var pol = directions.getPolyline();
    var vxs = pol.getVertexCount();
    //alert('vertexy: ' + vxs);
  
    /*
    var numRoutes = directions.getNumRoutes();
    for (var i = 0; i < numRoutes; i++) {
        route = directions.getRoute(i);  
        steps = route.getNumSteps();
        alert('ile krokow: ' + steps);
        for (var j = 0; j < steps; j++) {
            step = route.getStep(j);  
            step.
            
        }
    }
    */
    wsp = punkty[0].toUrlValue() + ' : ' + punkty[1].toUrlValue();
    if (document.getElementById('punkty'))
        document.getElementById('punkty').value = wsp;  
  }
/*
function pobierzWspolrzedne(ovr,point) {
   	
   	ilePunktow = punkty.length;
   	if (ilePunktow == 0){
        punkty[0] = point;
        map.addOverlay(new GMarker(point));
    }
    else if (ilePunktow == 1) {
        punkty[1] = point;
        map.addOverlay(new GMarker(point));
        //wyznaczTrase();
    }
    else {
        //przesuniecie punktow
        punkty[0] = punkty[1];
        punkty[1] = point; //punkty[2];
        //wyznaczTrase();
        //punkty[2] = point; //nowy punkt
        
    }
 	//punkty[0] = new GLatLng(38.4419, -122.1419);
 	//punkty[0] = this.fromDivPixelToLatLng(point);
 	this.setCenter(point,8);
}

*/
//waliduje adres podany przez uzytkownika(a jesli podany punkt to nie robi nic)
function walidujPunkt(hMiejsceOdbioru) {
    if (wskPunkty >=0) {
        //mamy wspolrzedne punktu - bo zostaj wyklikany
        poprawne = true;
        edycja = false;
        if (document.getElementById ('submit_button'))
            document.getElementById ('submit_button').value = submitButtonValueOk;
        document.getElementById('wspolrzedne_trasy').value = punkty[0].toUrlValue();
            //usuniecie markerow oprocz pierwszego
            for (var i = 1; i < markery.length ; i++) {
                if (markery[i] instanceof GMarker) {
		            map.removeOverlay(markery[i]);
		        }
            }
        //skopiowanie wspolrzednych by sie przydalo..
         hMiejsceOdbioru.value = punkty[0].toUrlValue();
         document.getElementById('miejsce_dostarczenia').value = '';
         //document.getElementById('miejsce_odbioru').readOnly = true; 
         //document.getElementById('miejsce_dostarczenia').readOnly = true;
         //if (hPrzez = document.getElementById('przez') ) hPrzez.readOnly = true;
         var wsp = punkty[0].toUrlValue();
         if (document.getElementById('punkty'))
                        document.getElementById('punkty').value = wsp;
         if (document.getElementById('promien'))
             document.getElementById('promien').value = document.getElementById('nadkladam_promien').value
         //wyslanie formularza
        if (idFormularza != '' && g_submitNow) {
            var hForm = document.getElementById(idFormularza);
            if (hForm != null) {
                hForm.submit();
            }    
        }
        //wysylamy zapytanie
        if (g_modeAsync) {
            wyslij_zapytanie();
        }
        
    }
    //wczytanie adresu by sie przydalo
    else {
        pokaz_alert = true;
        miejsceOdbioru = hMiejsceOdbioru.value;
        //waliduje adres
        geocoder.getLatLng(miejsceOdbioru,
	        function(point){
	            punkty[0] = sprawdz(point,miejsceOdbioru);
	            if (punkty[0]!= null && document.getElementById('wspolrzedne_trasy')) {
                    if (hSb = document.getElementById('submit_button')) hSb.value = submitButtonValueOk;
                    document.getElementById('wspolrzedne_trasy').value = punkty[0].toUrlValue(); 
                    //hMiejsceOdbioru.readOnly = true; 
                    //map.setCenter( punkty[0], 8); 
                    edycja = false;
                    poprawne = true;
                    var marker = new GMarker( punkty[0] );
                    map.addOverlay(marker);
                    var wsp = punkty[0].toUrlValue();
                    if (document.getElementById('punkty'))
                        document.getElementById('punkty').value = wsp; 
                    if (document.getElementById('promien'))
                        document.getElementById('promien').value = document.getElementById('nadkladam_promien').value 
           	         //wyslanie formularza
	        		if (idFormularza != '' && g_submitNow) {
			            var hForm = document.getElementById(idFormularza);
			            if (hForm != null) {
			                hForm.submit();
			            }    
			        }
			        //wysylamy zapytanie
                    if (g_modeAsync) {
                        wyslij_zapytanie();
                    }
                }
                //nie powiodlo sie
                else {
                    //wysylamy zapytanie
                    if (g_modeAsync) {
                        //w tym miejscu nie potrzebne...
                        document.getElementById('status_wyszukiwania').innerHTML = g_blad_wyszukiwania;
                    }    
                }
	        }
	    );
    }
}
/*
    wyznacza trase na podstawie 2 lub 3 ostatnio kliknietych punktow mapy
    submitNow - jesli true - nie kresli trasy tylko wysyla formularz na ktorym sie to znajduje
*/
function wyznaczTrase(submitNow) {
    pokaz_alert = true; 
    miejsceOdbioru = document.getElementById('miejsce_odbioru').value; 
    miejsceDostarczenia = document.getElementById('miejsce_dostarczenia').value; 
    var przez='';
    if (hPrzez = document.getElementById('przez'))
        przez =  hPrzez.value;
    
    koniec[0] = false;
    koniec[1] = false;
    //jesli nie ma przynajmniej 2 wyklikanych punktow na mapie
    
    if ( wskPunkty < 1) {
        //spisanie adresu kliknietego punktu
        //if (punkty[0] instanceof GLatLng) {
        //    document.getElementById('miejsce_odbioru').value = punkty[0].toUrlValue();    
        //}
    	
	    /*
	    getLatLng - wywolanie asynchroniczne!!!!!!
	    */
	    if ( !(punkty[0] instanceof GLatLng))
	    geocoder.getLatLng(miejsceOdbioru,
	        function(point){
	            punkty[0] =sprawdz(point,miejsceOdbioru);
	            koniec[0] = true;
	        }
	        
	    
	    ); 
	    geocoder.getLatLng(miejsceDostarczenia,
	        function(point){
	            punkty[1] = sprawdz(point,miejsceDostarczenia);
	            koniec[1] = true;
	        }
	        
	    );
	    //trasa bedzie przez 3 punkty
	    if (przez != '') {
	       geocoder.getLatLng(przez,
	           function(point){
	               punkty[2] = sprawdz(point,przez);
	               koniec[2] = true;
	           }
	       );
            
            punkty = new Array(); //kasowanie
	        //czekamy na zlokalizowanie punktu "przez"
            parameter = 3;  // trasa na 3 punkty
            setTimeout(function(){kreslTraseLicytujacego(parameter); parameter = null},2000);
	    }
	    //2 punktowa
	    else {
            parameter = 2;  // trasa na 2 punkty
            setTimeout(function(){kreslTraseLicytujacego(parameter); parameter = null},2000);    
        }
    }
    //trasa z punktow
    else {
        //sprawdzenie czy jest podany punkt "przez"
        if (punkty[2] instanceof GLatLng) {
            //kreslimy od razu i nie zamieniamy kolejnoscia!!!
            //console.log("punkty[2] instanceof GLatLng");
            kreslTraseLicytujacego(3,false);    
        }
        else {
          
            if (przez != '') {
              //console.log("przez rozne od pustego stringa");
                geocoder.getLatLng(przez,
	               function(point){
	                   punkty[2] = sprawdz(point,przez);
	                   koniec[2] = true;
	               }
                );
                 //czekamy na zlokalizowanie punktu "przez"
                parameter = 3;  // trasa na 3 punkty
                setTimeout(function(){kreslTraseLicytujacego(parameter); parameter = null},1500);
	       	}  
            else {
                //kreslimy od razu
                //console.log("kreslTraseLicytujacego(2); ");
                kreslTraseLicytujacego(2); 
            }  
        }
        
       
                
    }
}
/*
kreslTraseLicytujacego() pNo - liczba punktow na trase
*/
function kreslTraseLicytujacego(pNo,swap){
    //debug
    //console.log("pNo = %i", pNo);
    var dobrePunkty = new Array();
    var j = 0;
    //ustalenie liczby "dobrych" punktow
    for (var i = 0 ; i < punkty.length ; i++) {
        if (punkty[i] instanceof GLatLng) {
            dobrePunkty[j] = punkty[i];
            j++;    
        }
    }  
    if (pNo != null) {
        if (dobrePunkty.length != pNo)
            return; //za malo punktow
        else {
            if (pNo == 3 && swap!= false) {
                //trzeba punkt "przez" umiescic jako [1]
                var tmp = dobrePunkty[1];
                dobrePunkty[1] = dobrePunkty[2];
                dobrePunkty[2] = tmp;
                punkty = dobrePunkty;
            }
            //bez sprawdzania liczby punktow
            if (g_submitNow) {
                //wysylamy formularz po wczytaniu trasy
                gDO = {preserveViewport:true,getPolyline:true,getSteps:true,locale:"pl_PL"} //locale:"pl_PL"
                unplugedDirections = new GDirections(); //obiekt direction nie przylaczony do mapy ;)
                GEvent.addListener(unplugedDirections,"error",error_e);          //error przy wyliczaniu trasy
                GEvent.addListener(unplugedDirections,"load",load_e2);           //trasa wyliczona
                unplugedDirections.loadFromWaypoints(dobrePunkty,gDO); 
            }
            else {
                gDO = {preserveViewport:false,getPolyline:true,locale:"pl_PL" }
                directions.loadFromWaypoints(dobrePunkty,gDO);  //locale:"pl_PL"
            }    
        }    
    }
    //dla wstecznej kompatybilnosci...
    else {
        if (g_submitNow) {
            //wysylamy formularz po wczytaniu trasy
            gDO = {preserveViewport:true,getPolyline:true,getSteps:true,locale:"pl_PL"} //locale:"pl_PL"
            unplugedDirections = new GDirections(); //obiekt direction nie przylaczony do mapy ;)
            GEvent.addListener(unplugedDirections,"error",error_e);          //error przy wyliczaniu trasy
            GEvent.addListener(unplugedDirections,"load",load_e2);           //trasa wyliczona
            unplugedDirections.loadFromWaypoints(dobrePunkty,gDO); 
        }
        else {
            gDO = {preserveViewport:false,getPolyline:true,locale:"pl_PL"}
            directions.loadFromWaypoints(dobrePunkty,gDO);  
        }
    }
}

/*
sprawdzanie czy podano prawidlowy adres, rzuca jakim komunikatem na razie
*/
function sprawdz(point,adres) {
    if (!point) {
        if (pokaz_alert) {
            alert(_brak_adresu_lub_adres_niepoprawny + ' ' + adres); //przez zmienna pobierana ze skryptu trzeba to zrobic.. raczej?
            pokaz_alert = false;
            poprawne = false; //nie wysle formularza
        }
       
        return null;
    }
    else {
        return point;
    }
}
//kresli trase z punktow GLatLng z var punkty
function kreslTrase() {
    gDO = {preserveViewport:false,getPolyline:true,locale:"pl_PL"} //locale:"pl_PL"
    //gDO.preserveViewport = false;
    //document.getElementById('wyznaczanie').style.display="none";
    if (punkty.length >= 2 && punkty[0]!= null && punkty[1] != null) {
        if (!g_submitNow) {
            directions.loadFromWaypoints(punkty,gDO);  //locale:"pl_PL"
        }
        //wysylanie formularza od razu
        else {
            gDO = {preserveViewport:true,getPolyline:true,getSteps:true,locale:"pl_PL"}
            unplugedDirections = new GDirections(); //obiekt direction nie przylaczony do mapy ;)
         
            GEvent.addListener(unplugedDirections,"error",error_e);          //error przy wyliczaniu trasy
            GEvent.addListener(unplugedDirections,"load",load_e2);           //trasa wyliczona
        
            unplugedDirections.loadFromWaypoints(punkty,gDO); 
        }     
    }
    else {
        //alert('_brak_punktow'); //a najlepiej zadnego komunikatu
    }
    /*
    if (g_submitNow) {
        //wysylamy formularz po wczytaniu trasy
         
    }
    else {
        gDO = {preserveViewport:false,getPolyline:true}
        directions.loadFromWaypoints(dobrePunkty,gDO);  
    }
    */
}

function zaladujTrase() {
    gDO = {preserveViewport:false,getPolyline:true,locale:"pl_PL"} //locale:"pl_PL"
    var points = new Array();
    if (hPunkty = document.getElementById('punkty')) {
        var punktyStr = hPunkty.value.split(':');
        for (var i=0 ; i<punktyStr.length ; i++) {
            var punkt = punktyStr[i].split(','); 
            punkty[i] = new GLatLng(punkt[0],punkt[1]);   
        } 
    }
    g_submitNow = false;
    directions.loadFromWaypoints(punkty,gDO);  
}
function load_e2() {
    //var dist = directions.getDistance();
    wsp = punkty[0].toUrlValue() + ' : ' + punkty[1].toUrlValue();
    if (punkty[2]!=null && punkty[2]!= 'undefined') {
        wsp = punkty[0].toUrlValue() + ' : ' + punkty[1].toUrlValue() + ' : ' + punkty[2].toUrlValue();    
    }
    else {
        wsp = punkty[0].toUrlValue() + ' : ' + punkty[1].toUrlValue();    
    }
        
   
    
    poprawne = true;    //walidacja przeszla, mozna isc dalej
    //wyliczenie punktow
    
    
    //wrzucenie wspolrzednych do ukrytego pola
    if (! trasaZleceniodawcy) {
        g_rLenght = (directions.getDistance()).meters;
        var pol = unplugedDirections.getPolyline();
        var vxs = pol.getVertexCount();
    	var stepNo = 20;
	    var step = (vxs / stepNo);
	    var index = 0;
	    var stringa = '';
	    for (var i = 0; i < stepNo ; i++) {
	       index = Math.round(i * step); 
	       if (index > vxs || i == 19)
                index = (vxs - 1);
            cord = pol.getVertex(index);
            stringa += cord.toUrlValue()+ ";"; //\n sie usunie
        } 
        //trasa licytujacego
        if (document.getElementById('punkty'))
            document.getElementById('punkty').value = wsp;  
        if (document.getElementById('wspolrzedne_trasy')) {
            document.getElementById('wspolrzedne_trasy').value = stringa;   
        }
        if (wskPunkty >=1 && document.getElementById('miejsce_odbioru') ) {
            document.getElementById('miejsce_odbioru').value = punkty[0].toUrlValue(); 
            if (wskPunkty ==1)
                document.getElementById('miejsce_dostarczenia').value = punkty[1].toUrlValue();
            else {
                document.getElementById('miejsce_dostarczenia').value = punkty[1].toUrlValue();   
                document.getElementById('przez').value = punkty[2].toUrlValue();   
            }
           
        }
        //document.getElementById('miejsce_odbioru').readOnly = true; 
        //document.getElementById('miejsce_dostarczenia').readOnly = true;
        //document.getElementById('przez').readOnly = true;
        //wyslanie formularza
        if (idFormularza != '' && g_submitNow) {
            var hForm = document.getElementById(idFormularza);
            if (hForm != null) {
                hForm.submit();
            }    
        }
        
    }
    else {
        zablokujEdcyjeZlec();
        //trasa zleceniodawcy pobieramy tylko 2 punkty
        if (document.getElementById('punkty'))
            document.getElementById('punkty').value = wsp;
        //podanie trasy przez punkty - w miejsce adresow trzeba by podac wspolrzedne
        //if (wskPunkty >=1) {
        //    document.getElementById('miejsce_odbioru').value = punkty[0].toUrlValue(); 
        //    document.getElementById('miejsce_dostarczenia').value = punkty[1].toUrlValue();
        //}
        //wyslanie formularza
        if (idFormularza != '' && g_submitNow) {
            var hForm = document.getElementById(idFormularza);
            if (hForm != null) {
                hForm.submit();
            }    
        }
    }
    //usuniecie markerow podanych przez uzytkownika
    for (var i = 0; i < markery.length ; i++) {
        if (markery[i] instanceof GMarker) {
            map.removeOverlay(markery[i]);
        }
    }
    edycja = true;
    //szukanie w tle
    if (g_modeAsync) {
        wyslij_zapytanie();
    }
    
    //document.getElementById('dosubmit').
    //alert(wsp); 
}
//zwraca string dd-mm-yyyy dd-mm-yyyy
function getFormatedDates(days) {
    days = parseInt(days);
    if (isNaN(days))
        days = 0; 
    if (days < 0) {
        days = 0;
    }
    var today = new Date();
    var mSec = today.getTime();
    var future = mSec + days*24*3600*1000;
    var newDate = new Date(future);
    return (today.getDate()+ '-' +(today.getMonth()+1)+'-'+ today.getFullYear() +' '+ newDate.getDate()+'-'+(newDate.getMonth()+1)+'-'+newDate.getFullYear());
            
}

