﻿jQuery.fn.extend({
	silGoogleMap: function(options) {
		return this.each(function() {
			new jQuery.silGoogleMap(this, options);
		});
	}
});

jQuery.silGoogleMap = function(obj, opt) {

  var opt = opt || {};
  opt.zoom = opt.zoom || 13;
  opt.googleLatLngX = opt.googleLatLngX || 50.317408;
  opt.googleLatLngY = opt.googleLatLngY || 18.676758;
  opt.mainPoints = opt.mainPoints || {};
  opt.data = opt.data || "";
  opt.infoWindowHtml = opt.infoWindowHtml || "tekst";
  opt.otherPoints = opt.otherPoints || {};
  opt.route = opt.route || 1;
  opt.id = opt.id || 0;
  var $select = $(obj);
  
  var oddzialy = new Object();
  //domyślnie siedziba firmy
  oddzialy[0] = '50.097839::19.03816::<div class=\"special2\" style=\"padding-top:6px;\">RYTM TRADE Sp. z o.o.</div>ul. Strefowa 14<br/>43-100 Tychy, Polska</div>';//domyslne
  //zachodniopomorskie
  oddzialy[1] = '54.189437::16.162024::<div class=\"special2\" style=\"padding-top:6px;\">P.H. Prokmet</div>ul. Mieszka I 11<br/>75-124 Koszalin</div>';//prokmet
  oddzialy[2] = '53.472990::14.513310::<div class=\"special2\" style=\"padding-top:6px;\">Przedsiębiorstwo Handlowe SZUBERT s.c.</div>ul. Wiśniowa 10<br/>78-400 Szczecin</div>';//szubert
  //pomorskie
  oddzialy[3] = '54.341686::18.366073::<div class=\"special2\" style=\"padding-top:6px;\">"Zryw-Pol"</div>ul. Koscierska 60<br />83-330 Żukowo Glincz</div>';//zryw-pol
  oddzialy[4] = '53.726334::18.932418::<div class=\"special2\" style=\"padding-top:6px;\">P.P.H. "Tex-1"</div>ul. Kamionka 28<br />82-500 Kwidzyn</div>';//tex-1
  oddzialy[5] = '54.555060::18.322060::<div class=\"special2\" style=\"padding-top:6px;\">"Rytm-L"</div>ul. Żwirowa 2<br/>84-206 Nowy Dwór Wejherowski</div>';//rytm-l
  oddzialy[29] = '54.09132::18.78402::<div class=\"special2\" style=\"padding-top:6px;\">"F.H.U. JARD"</div>Al. Zwycięstwa 1E/8<br/>83-110 Tczew</div>';//jard
  //warminsko-mazurskie
  oddzialy[6] = '54.081144::22.930894::<div class=\"special2\" style=\"padding-top:6px;\">DOM S.J.</div>ul. Wojska Polskiego 110f<br/>62-200 Suwałki</div>';//dom sj
  //mazowieckie
  oddzialy[7] = '52.027425::21.036928::<div class=\"special2\" style=\"padding-top:6px;\">"Maxi" S.C.</div>ul. Sądowa 10<br />05-540 Zalesie Górne</div>';//maxi
  oddzialy[8] = '52.285480::21.137278::<div class=\"special2\" style=\"padding-top:6px;\">RYTM TRADE Grupa Warszawa</div>ul. Szwoleżerów 136<br />05-091 Ząbki k/ Warszawy</div>';//rytm trade grupa warszawa
  oddzialy[27] = '51.381672::21.193400::<div class=\"special2\" style=\"padding-top:6px;\">Przedsiębiorstwo Wielobranżowe TERMAL</div>ul. Skaryszewska 39<br />26-600 Radom</div>';//termal
  //kujawsko-pomorskie
  oddzialy[9] = '53.050530::18.711226::<div class=\"special2\" style=\"padding-top:6px;\">Tasmet</div>ul. Nad Strugą 34<br />87-122 Grębocin</div>';//tasmet
  //lodzkie       
  oddzialy[10] = '52.031004::20.690045::<div class=\"special2\" style=\"padding-top:6px;\">ARS-PUR Sylwester Skorupiński</div>ul. Dzwonkowa 4<br />96-321 Żabia Wola</div>';//ars-pur
  //wielkopolskie
  oddzialy[11] = '51.758623::18.078149::<div class=\"special2\" style=\"padding-top:6px;\">GREINPARTNER S.C.</div>ul. Dobrzecka 7<br />62-800 Kalisz</div>';//greinpartner
  oddzialy[12] = '52.544260::17.651790::<div class=\"special2\" style=\"padding-top:6px;\">P.H.U. EVER Konrad Kasprzyk</div>ul. Kruszwicka 19<br />62-200 Gniezno</div>';//ever
  //lubuskie
  oddzialy[28] = '51.653555::15.129561::<div class=\"special2\" style=\"padding-top:6px;\">Oddział Żary</div>ul. Wapienna 3<br />68-200 Żary</div>';//oddział żary
  //dolnoslaskie  
  oddzialy[13] = '51.077865::17.064556::<div class=\"special2\" style=\"padding-top:6px;\">Dystrybutor Chemii Motoryzacyjnej Oil Center Jacek Wruszak</div>ul. Gazowa 3<br />50-513 Wrocław</div>';//oil center
  oddzialy[30] = '51.215933::16.156862::<div class=\"special2\" style=\"padding-top:6px;\">Oddział Legnica</div>ul. Bagienna 4<br />59-220 Legnica</div>';//oddział Legnica
  //opolskie
  oddzialy[14] = '50.860430::17.467370::<div class=\"special2\" style=\"padding-top:6px;\">"Oddział Brzeg"</div>ul. Składowa 6<br />49-305 Brzeg</div>';//oddzial brzeg
  //slaskie
  oddzialy[15] = '49.678648::19.183682::<div class=\"special2\" style=\"padding-top:6px;\">Art Mark PHU</div>ul. Łączna 7<br />34-300 Żywiec</div>';//art mark
  oddzialy[17] = '49.826846::19.050498::<div class=\"special2\" style=\"padding-top:6px;\">F.U.H. "Pianex"</div>ul. Nadbrzeżna 8<br />43-300 Bielsko-Biała</div>';//pianex
  oddzialy[18] = '50.457473::18.846841::<div class=\"special2\" style=\"padding-top:6px;\">Tahema</div>ul. Towarowa 15<br />42-600 Tarnowskie Góry</div>';//tahem
  //malopolskie
  oddzialy[19] = '49.982316::19.920379::<div class=\"special2\" style=\"padding-top:6px;\">Przedsiębiorstwo wielobranżowe "TADMAR" S.C.</div>ul. Smoleńskiego 137<br />30-499 Kraków</div>';//tadmar
  oddzialy[20] = '50.061334::19.870437::<div class=\"special2\" style=\"padding-top:6px;\">P.H.U.P. SYLWIA Sławomir Sokół</div>ul. Leśna 5a<br />30-199 Kraków</div>';//sylwia
  oddzialy[16] = '49.975542::19.824920::<div class=\"special2\" style=\"padding-top:6px;\">MASTER</div>ul. Piłsudskiego 55<br />32-050 Skawina</div>';//master
  //swietokrzyskie
  oddzialy[21] = '50.900342::20.638348::<div class=\"special2\" style=\"padding-top:6px;\">P.U.H.P. "SEVEN"</div>ul. Magazynowa 6<br />25-701 Kielce</div>';//seven
  //lubelskie
  oddzialy[22] = '51.244470::22.632331::<div class=\"special2\" style=\"padding-top:6px;\">Asko-Servis</div>ul. Mełgiewska 74<br />20-234 Lublin</div>';//asko-servis
  oddzialy[23] = '51.236584::22.611657::<div class=\"special2\" style=\"padding-top:6px;\">Przedsiębiorstwo "MID" Spółka Jawna</div>ul. Lucyny Herc 48<br />20-328 Lublin</div>';//mid
  //podkarpackie
  oddzialy[24] = '50.027639::21.427397::<div class=\"special2\" style=\"padding-top:6px;\">Hurtownia farb i lakierów "Chemal" SP. z o.o.</div>ul. Tetmajera 2a<br />39-200 Dębica</div>';//chemal
  oddzialy[25] = '49.775789::22.800635::<div class=\"special2\" style=\"padding-top:6px;\">Centrofarb Spółka Jawna</div>ul. Jasińskiego 58<br />37-700 Przemyśl</div>';//centrofarb
  oddzialy[26] = '50.258490::21.971790::<div class=\"special2\" style=\"padding-top:6px;\">Fullfarb Spółka Jawna</div>ul. Wolska 2<br />36-130 Raniżów</div>';//fullfarb

//ostatnie id 30
  
  var oddzial = oddzialy[opt.id].split("::");
  opt.googleLatLngX = oddzial[0];
  opt.googleLatLngY = oddzial[1];
  opt.infoWindowHtml = oddzial[2];
  
  var gdir, map , control;
  var tmp_id = $select.attr("id");
  
  var bicon = new Object();
  bicon.iconSize = new GSize(32, 32);
  bicon.iconAnchor = new GPoint(16, 32);
  bicon.infoWindowAnchor = new GPoint(11, 33);

  var gicons = new Object();
  gicons["blue_pin"] = new GIcon(bicon);
  gicons["green_pin"] = new GIcon(bicon);
  gicons["light_blue_pin"] = new GIcon(bicon);
  gicons["pink_pin"] = new GIcon(bicon);
  gicons["red_pin"] = new GIcon(bicon);
  
  gicons["blue_pin"].image = 'blue-pushpin.png';
  gicons["green_pin"].image = 'grn-pushpin.png';
  gicons["light_blue_pin"].image = 'ltblu-pushpin.png';
  gicons["pink_pin"].image = 'pink-pushpin.png';
  gicons["red_pin"].image = 'red-pushpin.png';



  function google_load() {
    if (GBrowserIsCompatible()) {
      
      if(opt.route == 1) {
        //$select.before("<div id=\"wrap_1_" + tmp_id + "\" align=\"center\"><div id=\"miasto_" + tmp_id + "\">Miasto</div><div id=\"ulica_" + tmp_id + "\">Ulica</div><div id=\"nr_domu_" + tmp_id + "\">Nr domu</div></div><div id=\"select_" + tmp_id + "\">Punkt docelowy</div></div>");
        $select.before("<div id=\"wrap_2_" + tmp_id + "\" style=\"padding-bottom:20px;\"><div style=\"float:left\">Miasto<br/><input type=\"text\" size=\"17\" id=\"fromAddress_1_" + tmp_id + "\" class=\"form\"/></div><div style=\"float:left\">Ulica<br/><input type=\"text\" size=\"22\" id=\"fromAddress_2_" + tmp_id + "\" class=\"form\"/></div><div style=\"float:left\">Nr domu<br/><input type=\"text\" size=\"5\" id=\"fromAddress_3_" + tmp_id + "\" class=\"form\"/></div><input id=\"button_1" + tmp_id + "\" name=\"submit\" type=\"button\" value=\"Wyznacz trasę\"/></div>");
        $select.before("<div id=\"silGoogleMap_Error_" + tmp_id + "\"></div>");
        $select.after("<div align=\"center\" id=\"silGoogleMap_Route_" + tmp_id + "\" style=\"display:none\"></div>");
        document.getElementById("silGoogleMap_Route_" + tmp_id).innerHTML = "";
      }
      
      if(opt.route == 1) {
        $("#button_1" + tmp_id).click(function() {
          setDirections2(document.getElementById('fromAddress_1_' + tmp_id).value + ', ' + document.getElementById('fromAddress_2_' + tmp_id).value + ' ' + document.getElementById('fromAddress_3_' + tmp_id).value);
        });
      }
      
      map = new GMap2(document.getElementById(tmp_id));
      var mapControl = new GMapTypeControl();

      map.addControl(mapControl);
      map.addControl(new GLargeMapControl());
      map.removeMapType(G_HYBRID_MAP);
      if(opt.route == 1){
        gdir = new GDirections(map, document.getElementById("silGoogleMap_Route_" + tmp_id));
        GEvent.addListener(gdir, "load", onGDirectionsLoad);
        GEvent.addListener(gdir, "error", handleErrors);
      }
      
      map.setCenter(new GLatLng(opt.googleLatLngX, opt.googleLatLngY), opt.zoom);
      marker = new GMarker(new GLatLng(opt.googleLatLngX, opt.googleLatLngY));
      map.addOverlay(marker);
      marker.openInfoWindowHtml(opt.infoWindowHtml);

      if(opt.otherPoints) {
        jQuery.each(opt.otherPoints, function(i, val) {
          var tmp_opt = val.split("::");
          tmp_opt[0] = parseFloat(tmp_opt[0]);
          tmp_opt[1] = parseFloat(tmp_opt[1]);
          var point = new GLatLng(tmp_opt[0], tmp_opt[1]);
          var options = {icon:gicons[tmp_opt[2]]};
          marker = new GMarker(point, options);
          map.addOverlay(marker);
          
          GEvent.addListener(marker, "click", function() {
            this.openInfoWindowHtml(i);
          });
        });
      }
      
      if(opt.mainPoints.length) {
        jQuery.each(opt.mainPoints, function(i, val) {
          var tmp_mpt = val.split("::");
          tmp_mpt[0] = parseFloat(tmp_mpt[0]);
          tmp_mpt[1] = parseFloat(tmp_mpt[1]);
          var point = new GLatLng(tmp_mpt[0], tmp_mpt[1]);
          var options = {icon:gicons[tmp_mpt[2]]};
          main_markers = new GMarker(point, options);
          map.addOverlay(main_markers);
          
          $("#fromAddress_4_" + tmp_id).append("<option>" + i +"</option>");
          $("#fromAddress_4_" + tmp_id).children("option:last").val(tmp_mpt[0] + ", " + tmp_mpt[1]);

          GEvent.addListener(main_markers, "click", function() {
            this.openInfoWindowHtml(i);
          });
        });
      }
      
      map.setCenter(new GLatLng(opt.googleLatLngX, opt.googleLatLngY), opt.zoom);
      
      if(opt.data.length>0 && opt.data!=",  ") {
        setDirections(opt.data);
      }
    }
  }

  function setDirections(fromAddress) {
    if(opt.route) {
      if(opt.data){
        fromAddress = opt.data;
        opt.googleLatLng = opt.googleLatLngX + ", " + opt.googleLatLngY;
      }
      else{
        opt.googleLatLng = $("#fromAddress_4_" + tmp_id).val();
      }
      gdir.load("from: " + fromAddress + " to: @" + opt.googleLatLng);
    }
    else {
      gdir.load("from: " + fromAddress + " to: @" + opt.googleLatLngX + ", " + opt.googleLatLngY);
    }
    document.getElementById("silGoogleMap_Route_" + tmp_id).style.display = 'block';
    map.setCenter(new GLatLng(opt.googleLatLngX, opt.googleLatLngY), opt.zoom);
  }
  
  function setDirections2(fromAddress) {
    if(opt.route) {
      opt.googleLatLng = opt.googleLatLngX + ", " + opt.googleLatLngY;
      gdir.load("from: " + fromAddress + " to: @" + opt.googleLatLng);
    }
    else {
      gdir.load("from: " + fromAddress + " to: @" + opt.googleLatLngX + ", " + opt.googleLatLngY);
    }
    document.getElementById("silGoogleMap_Route_" + tmp_id).style.display = 'block';
    map.setCenter(new GLatLng(opt.googleLatLngX, opt.googleLatLngY), opt.zoom);
  }

  function onGDirectionsLoad(){
    document.getElementById("silGoogleMap_Error_" + tmp_id).style.display = 'none';
  }

  function handleErrors(){
    if (gdir.getStatus().code == G_GEO_UNKNOWN_ADDRESS){
      document.getElementById("silGoogleMap_Error_" + tmp_id).innerHTML = "Nie znaleziono zadanej lokalizacji.<br/>Wskazówka: Szukając opisz dok?adnie lokalizację, np: Ruda Śląska, Niedurnego 30.";
      $("#silGoogleMap_Error_" + tmp_id).slideDown(1000);
    }
    else if (gdir.getStatus().code == G_GEO_SERVER_ERROR)
      alert("A geocoding or directions request could not be successfully processed, yet the exact reason for the failure is not known.\n Error code: " + gdir.getStatus().code);
    else if (gdir.getStatus().code == G_GEO_MISSING_QUERY)
      alert("The HTTP q parameter was either missing or had no value. For geocoder requests, this means that an empty address was specified as input. For directions requests, this means that no query was specified in the input.\n Error code: " + gdir.getStatus().code);
    else if (gdir.getStatus().code == G_GEO_BAD_KEY)
      alert("The given key is either invalid or does not match the domain for which it was given. \n Error code: " + gdir.getStatus().code);
    else if (gdir.getStatus().code == G_GEO_BAD_REQUEST)
      alert("A directions request could not be successfully parsed.\n Error code: " + gdir.getStatus().code);
    else {
      document.getElementById("silGoogleMap_Error_" + tmp_id).innerHTML = "Zadany punkt wyjściowy znajduje poza zasięgiem systemu.";
      $("#silGoogleMap_Error_" + tmp_id).slideDown(1000);
    }
  }

  google_load();
  
}

