var map;
var maps = new Array();
var marker;
var markers = new Array();
var geocoder;

function str_replace (search, replace, subject, count) {
   // Replaces all occurrences of search in haystack with replace
   // version: 909.322
   // discuss at: http://phpjs.org/functions/str_replace    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
   f = [].concat(search),
   r = [].concat(replace),
   s = subject,
   ra = r instanceof Array, sa = s instanceof Array;    s = [].concat(s);
   if (count) {
      this.window[count] = 0;
   }
   for (i=0, sl=s.length; i < sl; i++) {
      if (s[i] === '') {
         continue;
      }
      for (j=0, fl=f.length; j < fl; j++) {
         temp = s[i]+'';
         repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
         s[i] = (temp).split(f[j]).join(repl);
         if (count && s[i] !== temp) {
            this.window[count] += (temp.length-s[i].length)/f[j].length;
         }
      }
   }
   return sa ? s : s[0];
}

window.onload = function() {
   for(var i = 1; i <= 6; i++) {
      new Ajax.Autocompleter("city" + i, "city_results" + i, "common/gradovi.php", {
         paramName: "value",
         minChars: 2,
         indicator: "city_ind" + i,
         afterUpdateElement: findAddress
      });
   }
	
   calendar = Calendar.setup({
      triggerElement : 'calendarButton',
      selectHandler : getSelectedDate,
      closeHandler : applyDateSelection0
   })
	
   calendarrstart = Calendar.setup({
      triggerElement : 'calendarButton1',
      selectHandler : getSelectedDate,
      closeHandler : applyDateSelection1
   })
	
   calendarrstart = Calendar.setup({
      triggerElement : 'calendarButton2',
      selectHandler : getSelectedDate,
      closeHandler : applyDateSelection2
   })

   if (GBrowserIsCompatible()) {
      for (i = 1; i <= 6; i++) {
         var dirn = new GDirections();
         geocoder = new GClientGeocoder();
         
         map = new google.maps.Map2($('map_canvas_' + i));
         //map.addControl(new GOverviewMapControl());

         maps[i] = map;
         GEvent.addListener(map, "click", function(overlay,point) {
            maps[current_map_id].clearOverlays();
            if (!overlay) {
               dirn.loadFromWaypoints([point.toUrlValue(6), point.toUrlValue(6)], {
                  getPolyline:true
               });
            }
         });

         GEvent.addListener(dirn, "load", function() {
            var p = dirn.getPolyline().getVertex(0);
            markers[current_map_id] = createMarker(p);
            maps[current_map_id].addOverlay(markers[current_map_id]);
            getAddress(markers[current_map_id], p);
         });

         j = i - 1;
         if ($('lat' + j).value != '') {
            $('map_wrapper_' + i).show();
            var point = new google.maps.LatLng($('lat' + j).value, $('lon' + j).value);
            map.setCenter(point, 13);
            map.checkResize();
            markers[i] = createMarker(point);
            map.addOverlay(markers[i]);
            map.panDirection(1,1);            
         }
         else {
            map.setCenter(new google.maps.LatLng(44.8, 20.45), 10);
         }
         map.setUIToDefault();
      }
   }
}

var current_map_id = 0;
var clicked_latlng = 0;
function getAddress(overlay, latlng) {
   if (latlng != null) {
      clicked_latlng = latlng;
      address = latlng;
      geocoder.getLocations(latlng, showAddress);
   }
}

function showAddress(response) {
   if (!response || response.Status.code != 200) {
      //alert("Status Code:" + response.Status.code);
      return;
   } else {
      $('lat' + (current_map_id - 1)).value = clicked_latlng.lat().toFixed(6);
      $('lon' + (current_map_id - 1)).value = clicked_latlng.lng().toFixed(6);

      for (i = 0; i < response.Placemark.length; i++) {
         place = response.Placemark[i];
         var locality = null;
         var address = null;
         try {
            locality = place.AddressDetails.Country.Locality.LocalityName;
         }
         catch (err) {
            try {
               locality = place.AddressDetails.Country.AdministrativeArea.Locality.LocalityName;
            }
            catch(err) {
               try {
                  locality = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.AddressLine[0];
               }
               catch(err) {
                  try {
                     locality = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName;
                  } catch (err) {}
               }
            }
         }
         if (locality != null) {
            break;
         }
      }
      if (locality != null) {
         var needle = Array("\u0410", "\u0411", "\u0412", "\u0413", "\u0414", "\u0402",
            "\u0415", "\u0416", "\u0417", "\u0418", "\u0408", "\u041a", "\u041b", "\u0409", "\u041c", "\u041d", "\u040a", "\u041e", "\u041f",
            "\u0420", "\u0421", "\u0422", "\u040b", "\u0423", "\u0424", "\u0425", "\u0426", "\u0427", "\u040f", "\u0428", "\u0430", "\u0431",
            "\u0432", "\u0433", "\u0434", "\u0452", "\u0435", "\u0436", "\u0437", "\u0438", "\u0458", "\u043a", "\u043b", "\u0459", "\u043c",
            "\u043d", "\u045a", "\u043e", "\u043f", "\u0440", "\u0441", "\u0442", "\u045b", "\u0443", "\u0444", "\u0445", "\u0446", "\u0447",
            "\u045f", "\u0448");
         var replacement = Array("A", "B", "V", "G", "D", "\u0110", "E",
            "\u017d", "Z", "I", "J", "K", "L", "Lj", "M", "N", "Nj", "O", "P", "R",
            "S", "T", "\u0106", "U", "F", "H", "C", "\u010c", "D\u017e", "\u0160", "a", "b", "v",
            "g", "d", "\u0111", "e", "\u017e", "z", "i", "j", "k", "l", "lj", "m", "n",
            "nj", "o", "p", "r", "s", "t", "\u0107", "u", "f", "h", "c", "\u010d", "d\u017e",
            "\u0161");

         locality = str_replace(needle, replacement, locality);
         address = str_replace(needle, replacement, place.address);
         markers[current_map_id].openInfoWindowHtml(address + '<br />' +
            '<strong><img src="img/car.gif" /> ' + locality + '</strong>');

         $('city' + current_map_id).value = locality;
         Element.removeClassName($('city' + current_map_id), 'city-helptext');
         $('addressdata' + (current_map_id - 1)).value = address;
      }
      

   }
}

function findAddress(text, li) {
   $('map_wrapper_' + current_map_id).show();
   map = maps[current_map_id];
   map.checkResize();
   var state = li.select('div.state[]').first().innerHTML;
   var search = $('city' + current_map_id).value + "," + state;

   geocoder.getLocations(search, function (result)
   {
      map.clearOverlays();
      if (result.Status.code == G_GEO_SUCCESS) {
         var p = result.Placemark[0].Point.coordinates;
         var point = new google.maps.LatLng(p[1], p[0]);
         map.setCenter(point, 13);
      }
     
      else {
         var reason="Code "+result.Status.code;
         if (reasons[result.Status.code]) {
            reason = reasons[result.Status.code]
         }
         alert('Could not find "'+search+ '" ' + reason);
      }
   }
   );
   return false;
}


var markerIndex = 0;
function createMarker(point) {
   var marker = new GMarker(point);
   marker.value = markerIndex++;
   return marker;
}

var selectedDate = null;

function getSelectedDate(a, b) {
   selectedDate = b;
}

var trigger = '';
function applyDateSelection0() {
   trigger = '';
   applyDateSelection();
}

function applyDateSelection1() {
   trigger = '-rstart';
   applyDateSelection();
}
function applyDateSelection2() {
   trigger = '-rstop';
   applyDateSelection();
}

function applyDateSelection() {
   if (selectedDate != null) {
      selectedDate = selectedDate.split('-');
      var dan = $('dan' + trigger);
      var mesec = $('mesec' + trigger);
      var godina = $('godina' + trigger);
      dan[dan.selectedIndex].selected = false;
      dan[selectedDate[2] - 1].selected = true;
      mesec[mesec.selectedIndex].selected = false;
      mesec[selectedDate[1] - 1].selected = true;
      godina[godina.selectedIndex].selected = false;
      godina[selectedDate[0] - 2009].selected = true;
      selectedDate = null;
   }
}

var cityN = 1;
function addcity() {
   if (cityN < 5) {
      cityN++;
      $('city-div' + cityN).show();
      $('city-delete' + cityN).show();
      $('city' + cityN).enable();
      if (cityN > 2)
         $('city-delete' + (cityN - 1)).hide();
   }
}
function removecity() {
   if (cityN > 1) {
      $('city-div' + cityN).hide();
      $('city' + cityN).disable();
      cityN--;
      if (cityN < 5 && cityN > 1)
         $('city-delete' + cityN).show();
   }
}

function periodicTime(enable) {

   if (enable) {
      $('date-div').hide();
		
      $('dan').disable();
      $('mesec').disable();
      $('godina').disable();
		
      $('recursive-div').show();
      for(i = 0; i < 7; i++)
         $('rday' + i).enable();
		
      $('dan-rstart').enable(); $('dan-rstop').enable();
      $('mesec-rstart').enable(); $('mesec-rstop').enable();
      $('godina-rstart').enable(); $('godina-rstop').enable();
   }
   else {
      $('recursive-div').hide();
      $('date-div').show();
		
      $('dan-rstart').disable(); $('dan-rstop').disable();
      $('mesec-rstart').disable(); $('mesec-rstop').disable();
      $('godina-rstart').disable(); $('godina-rstop').disable();
		
      for(i = 0; i < 7; i++)
         $('rday' + i).disable();
		
      $('dan').enable();
      $('mesec').enable();
      $('godina').enable();
   }

}
