var blocks = [];
var blocks_on = null;
var t_lines = new Array();

function create_block() {
    var blockContainer;

    function BlockControl() {  }
    BlockControl.prototype = new GControl();

    BlockControl.prototype.initialize = function(map) {
        var container = document.createElement("div");
        blockContainer = document.createElement("div");
        blockContainer.id = "kvartovi";
        this.setButtonStyle_(blockContainer);
        container.appendChild(blockContainer);
            
        blockContainer.appendChild(document.createTextNode("Kvartovi"));
        GEvent.addDomListener(blockContainer, "click", function() {
            var button = document.getElementById("kvartovi");
            if(blocks_on) {
                blocks_on = null;
                button.style.border= "2px outset #b0b0b0";
            } else {
                blocks_on = 1;
                button.style.border= "2px inset #6c9ddf";
            }
            show_blocks();
        });

        map.getContainer().appendChild(blockContainer);
        return blockContainer;
    }

    BlockControl.prototype.getDefaultPosition = function() {
        return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(251,7));
    }
        
    BlockControl.prototype.setButtonStyle_ = function(button) {
        button.style.color = "#000000";
        button.style.backgroundColor = "White";
        button.style.font = "normal 12px Arial";
        button.style.border= "2px outset #b0b0b0";
        button.style.textAlign = "center";
        button.style.width = "78px";
        button.style.cursor = "pointer";
    }
    return BlockControl;
}

function post_ga(path) {
    if (path != window.location.pathname) {
        pageTracker._trackPageview(path);
    }
}

function createMarker(point, html) {
    var iconOptions = {};
    iconOptions.width = 32;
    iconOptions.height = 32;
    iconOptions.primaryColor = "#d20000";
    iconOptions.cornerColor = "#d20000";
    iconOptions.strokeColor = "#000000";
    var icon = MapIconMaker.createMarkerIcon(iconOptions);
    var marker = new GMarker(point, {icon: icon});
    
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
    GEvent.addListener(marker, "mouseover", function() {
        marker.openInfoWindowHtml(html);
    });
    return marker;
}

function weatherMarker(point, html, code) {
    var icon = new GIcon();
    icon.image = "/site_media/images/forecast/"+code+".png";
    icon.iconSize = new GSize(55, 55);
    icon.shadowSize = new GSize(1, 1);
    icon.iconAnchor = new GPoint(30, 65);
    icon.infoWindowAnchor = new GPoint(31, 5);
    
    var marker = new GMarker(point, {icon: icon});
    
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(html);
    });
    
    return marker;
}

function stationMarker(point) {
    var icon = new GIcon();
    icon.image = "/site_media/images/tramvaj_16.png";
    icon.iconSize = new GSize(16, 16);
    icon.shadowSize = new GSize(1, 1);
    icon.iconAnchor = new GPoint(8, 8);
    icon.infoWindowAnchor = new GPoint(8, 8);
    
    var marker = new GMarker(point, {icon: icon});
    
    GEvent.addListener(marker, "click", function() {
        var lat = marker.getLatLng().lat();
        var lng = marker.getLatLng().lng();
        $.ajax({
            type: "GET",
            url: "/ajax/t_lines/?lat="+lat+"&lng="+lng,
            contentType: "application/json",
            dataType: "text",
            cache: false,
            success: function(json) {
                var lines = JSON.parse(json);
                var html = lines[0].html;
                marker.openInfoWindowHtml(html);
            }
        });
    });
    
    return marker;
}

function show_markers(path) {
    
    $.ajax({
	type: "GET",
	url: path,
	contentType: "application/json",
	dataType: "text",
	cache: false,
	success: function(json) {
            map.clearOverlays();
            var sponsors = JSON.parse(json);
            var c_lat = sponsors[0].fields.lat;
            var c_lng = sponsors[0].fields.lng;
            var start_zoom = sponsors[0].fields.start_zoom;
    
            set_resolution(sponsors[0].fields.min_zoom, sponsors[0].fields.max_zoom);
            map.setCenter(new GLatLng(c_lat, c_lng), start_zoom);
    
            for (i=1; i<sponsors.length; i++) {
                var html = sponsors[i].html;
                var point = new GLatLng(sponsors[i].lat, sponsors[i].lng);
                var marker = createMarker(point, html);
               map.addOverlay(marker);
            }
            post_ga(path);
	}
    });
}

function show_user_location(path) {
    $.ajax({
	type: "GET",
	url: path,
	contentType: "application/json",
	dataType: "text",
	cache: false,
	success: function(json) {
            map.clearOverlays();
            var loc = JSON.parse(json);
            var c_lat = loc[0].lat;
            var c_lng = loc[0].lng;
    
            map.setCenter(new GLatLng(c_lat, c_lng));
            var html = loc[0].html;
            var point = new GLatLng(loc[0].lat, loc[0].lng);
            var marker = createMarker(point, html);
            map.addOverlay(marker);
            marker.openInfoWindowHtml(html);
	}
    });
   return false;
}

function show_company_on_map(company, c_lat, c_lng, address, city) {
    var comments = company[0].comments;
    if(c_lat && c_lng) {
        map.setCenter(new GLatLng(c_lat, c_lng), 17);
        var html = company[0].html;
        var point = new GLatLng(company[0].lat, company[0].lng);
        var marker = createMarker(point, company[0].name);
        map.addOverlay(marker);
        $('div#company').empty().append(html);
    } else {
        geo.getLocations(address+","+city, function (result) { 
            if (result.Status.code == G_GEO_SUCCESS) {
                var p = result.Placemark[0].Point.coordinates;
                map.setCenter(new GLatLng(p[1], p[0]), 17);
                var html = company[0].html;
                var point = new GLatLng(p[1], p[0]);
                var marker = createMarker(point, company[0].name);
                map.addOverlay(marker);
                $('div#company').empty().append(html);
            }
        });
    }
    $('div#dogadanjaNaslovnica').empty();
    $('div#komentari').empty().hide().append(comments).show('slow');
    post_ga(company[0].url);
}

function show_company(slug) {
    $.ajax({
	type: "GET",
	url: "/poduzeca/"+slug+"/"+page+"/",
	contentType: "application/json",
	dataType: "text",
	cache: false,
	success: function(json) {
            map.clearOverlays();
            var company = JSON.parse(json);
            var c_lat = company[0].lat;
            var c_lng = company[0].lng;
            var address = company[0].address;
            var city = company[0].cityname;
            
            show_company_on_map(company, c_lat, c_lng, address, city)
            
	}
    });
   return false;
}

function get_company(search_term) {
    $.ajax({
	type: "GET",
	url: "/ajax/getcompany/"+search_term+"/"+page+"/",
	contentType: "application/json",
	dataType: "text",
	cache: false,
	success: function(json) {
            map.clearOverlays();
            var company = JSON.parse(json);
            if (company == null) {
                alert("Nije pronađena niti jedna tvrtka. Molim pokušajte ponovo.");
                return;
            }
            var c_lat = company[0].lat;
            var c_lng = company[0].lng;
            var address = company[0].address;
            var city = company[0].cityname;
            var comments = company[0].comments;
			var count = company[0].count;
            
            show_company_on_map(company, c_lat, c_lng, address, city)
            
            if (company.length > 1) {
                $('div#rezultati').empty().hide();
                $('div#rezultati').append(
                    "<h1>"+company.length+" rezultata za <strong>\""+search_term+"\"</strong><a href=\"#\" class=\"close_results\"><img src=\"/site_media/images/close_rez.png\" border=\"0\" /></a></h1>"
                );
                $(company).each(function(index) {
                    addr = '<a href="'+company[index].slug+'" class="show_comp">' + company[index].name + '</a>';
                    $('div#rezultati').append("<div id='ispisR'>"+(index+1)+". "+ addr +"<br /></div>");
                });
				
				if (company.length == 15 && count != 0) {
					var link = company[0].f_url;
					$('div#rezultati').append("<div style='text-align:center'><a href='"+ link +"'>Popis svih " + count + " rezultata</a></div>");
				}
                
                $('div#rezultati').show('slow');
            }
            $('div#komentari').empty().hide().append(comments).show('slow');
	}
    });
   return false;
}

function show_location(path) {
    
    $.ajax({
	type: "GET",
	url: path,
	contentType: "application/json",
	dataType: "text",
	cache: false,
	success: function(json) {
            map.clearOverlays();
            var sponsors = JSON.parse(json);
            var c_lat = sponsors[0].fields.lat;
            var c_lng = sponsors[0].fields.lng;
            var start_zoom = sponsors[0].fields.start_zoom;
    
            set_resolution(sponsors[0].fields.min_zoom, sponsors[0].fields.max_zoom);
            map.setCenter(new GLatLng(c_lat, c_lng), start_zoom);
    
            for (i=1; i<sponsors.length; i++) {
                var html = sponsors[i].html;
                var point = new GLatLng(sponsors[i].lat, sponsors[i].lng);
                var marker = createMarker(point, html);
                map.addOverlay(marker);
            }
	}
    });
}

function show_forecast() {
    if (!load_weather) {
        return;
    }
    $.ajax({
	type: "GET",
	url: "/weather/",
	contentType: "application/json",
	dataType: "text",
	cache: false,
	success: function(json) {
            var weather = JSON.parse(json);
            
            for (i=0; i<weather.length; i++) {
                var html = weather[i].html;
                var point = new GLatLng(weather[i].lat, weather[i].lng);
                var marker = weatherMarker(point, html, weather[i].code);
                map.addOverlay(marker);
                w_markers[i] = marker;
            }
	}
    });
    
}

function show_tram_stations() {
    $.ajax({
	type: "GET",
	url: "/ajax/t_stations/"+current_city+"/",
	contentType: "application/json",
	dataType: "text",
	cache: false,
	success: function(json) {
            var stations = JSON.parse(json);
            
            for (i=0; i<stations.length; i++) {
                var point = new GLatLng(stations[i].lat, stations[i].lng);
                var marker = stationMarker(point);
                map.addOverlay(marker);
                t_markers[i] = marker;
            }
    }
    });
}

function show_tram_line(path, l_name) {
    var poly_c = t_lines[l_name];
    if(poly_c != undefined) {
        poly_c.isHidden() ? poly_c.show(): poly_c.hide()
        return false;
    }
    
    post_ga(path);
    
    $.ajax({
	type: "GET",
	/*url: "/karta-"+current_city+"/tramvajska-linija-"+line+"/",*/
	url: path,
	contentType: "application/json",
	dataType: "text",
	cache: false,
	success: function(json) {
            var lines = JSON.parse(json);
            
            var encodedPolyline = new GPolyline.fromEncoded({
                    color: lines[0].colour,
                    weight: lines[0].weight,
                    points: lines[0].poly,
                    levels: lines[0].level,
                    opacity: 0.8,
                    zoomFactor: 16,
                    numLevels: 0
            });
            map.addOverlay(encodedPolyline);
            t_lines[l_name] = encodedPolyline;
	}
    });
    return false;
}

function from_to_dirs(from, to) {
    var link = "/karta-"+swap(current_city)+"/?from="+encodeURIComponent(from)+"&to="+encodeURIComponent(to);
    var print = "/putanja/ispis/?from="+encodeURIComponent(from)+"&to="+encodeURIComponent(to);
    map.clearOverlays();
    $('div#putanje').empty().append("<div id=\"share\"><a href="+link+">Link od A do B</a></div>");
    $('div#putanje').append("<div id=\"share\"><a href="+print+">Stranica za ispis</a></div>");
    directionsPanel = document.getElementById("putanje");
    directions = new GDirections(map, directionsPanel);
    directions.load("from: "+from+" to: "+to+"");
    
    GEvent.addListener(directions, "load", function() {
        loading = false;
    });
    
    GEvent.addListener(directions, "error", function() {
        loading = false;
        var retval = directions.getStatus();
        if (retval.code == 602) {
            alert('Nažalost nije pronađena niti jedna putanja sa zadanim parametrima.')
        } else {
            reason = reasons[retval.code];
            alert('Could not find "'+from+"-"+to+ '" ' + reason);
        }
    });
}

function show_directions(aobject) {
    map.clearOverlays();
    if (dirs) {
        dirs = false;
        $(aobject).text("Uključi prikaz putanje");
        $('div#putanje').empty();
        
        for (var i=0; i<gevents.length;i++) {
            GEvent.removeListener(gevents[i]);
        }
        
        if (current_city == country) {
            if(!dirs_on && map.getZoom() == 7) {
                for(var i=0; i<w_markers.length;i++) {
                    map.addOverlay(w_markers[i]);
                }
            }
        }
    } else {
        
        if (current_city == country) {
            for(var i=0; i<w_markers.length;i++) {
                map.removeOverlay(w_markers[i]);
            }
        }
        
        dirs = true;
        $(aobject).text("Isključi prikaz putanje");
        var dirn1 = new GDirections();
        var dirn2 = new GDirections();
        var dirn3 = new GDirections();
        var firstpoint = true;
        var gmarkers = [];
        var lastindex = 0;
        
        function detail(point, num, description, dist) {
            var mapname = "map";
            var html = '';
            var target = '"' + mapname+".showMapBlowup(new GLatLng("+point.toUrlValue(6)+"))"  +'"';
            html += '<table>';
            html += '  <tr  onclick='+target+'>';
            html += '    <td>';
            html += '      <a href="javascript:void(0)"> '+num+'. <\/a>';
            html += '    <\/td>';
            html += '    <td >';
            html +=        description;
            html += '    <\/td>';
            html += '    <td >';
            html +=        dist;
            html += '    <\/td>';
            html += '  <\/tr>';
            html += '<\/table>';
            return html;
        }
        
        function get_routes(dirn) {
            $('div#putanje').empty().show();
            for (var i=0; i<dirn.getNumRoutes(); i++) {
                if (i==0) {
                    var type="play";
                } else {
                    var type="pause";
                }
                var route = dirn.getRoute(i);
                var geocode = route.getStartGeocode();
                var point = route.getStep(0).getLatLng();
                // === Waypoint at the start of each GRoute
                //waypoint(point, type, geocode.address);
                $('div#putanje').append("<p class=\"p_header\">"+geocode.address+"</p>");
                $('div#putanje').append("<p class=\"duljina\">"+route.getDistance().html+" (oko "+route.getDuration().html+")"+"</p>");
                
                if(firstpoint) {
                } else {
                    for (var j=0; j<route.getNumSteps(); j++) {
                        var step = route.getStep(j);
                        // === detail lines for each step ===
                        var html = detail(step.getLatLng(), j+1, step.getDescriptionHtml(), step.getDistance().html);
                        $('div#putanje').append(html);
                    }
                }
                $('div#putanje').append(dirn.getCopyrightsHtml());
            }
        }
        
        var clickHandler = GEvent.addListener(map, "click", function(overlay,point) {
            // == When the user clicks on a the map, get directiobns from that point to itself ==
            if (!overlay) {
                if (firstpoint) {
                    dirn1.loadFromWaypoints([point.toUrlValue(6),point.toUrlValue(6)],{getPolyline:true,getSteps:true});
                } else {
                    indicateLoading();
                    dirn1.loadFromWaypoints([gmarkers[gmarkers.length-1].getPoint(),point.toUrlValue(6)],{getPolyline:true,getSteps:true});
               }
            }
        });
        gevents.push(clickHandler);
        
        var calculateDistance = function() {
            var dist = 0;
            for (var i=0; i<gpolys.length; i++) {
                dist+=gpolys[i].getLength();
            }
            return (dist/1000).toFixed(2);
        }
        
        var plotHandler = GEvent.addListener(dirn1,"load", function() {
            
            loading = false;
            // snap to last vertex in the polyline
            var n = dirn1.getPolyline().getVertexCount();
            var p=dirn1.getPolyline().getVertex(n-1);
            var marker=new GMarker(p,{draggable:true});
            
            if (gmarkers.length > 1) {
                return;
            }
            
            if(firstpoint) {
                marker.getIcon().image = G_START_ICON.image;
            } else {
                marker.getIcon().image = G_END_ICON.image;
            }
            
            GEvent.addListener(marker, "dragend", function() {
                indicateLoading();
                lastIndex = marker.MyIndex;
                var point = marker.getPoint();
                if (lastIndex>0) {
                // recalculate the polyline preceding this point
                    dirn2.loadFromWaypoints([gmarkers[lastIndex-1].getPoint(),point.toUrlValue(6)],{getPolyline:true,getSteps:true});
                }
                if (lastIndex<gmarkers.length-1) {
                // recalculate the polyline following this point
                    dirn3.loadFromWaypoints([point.toUrlValue(6),gmarkers[lastIndex+1].getPoint()],{getPolyline:true,getSteps:true});
                }
            });
            gevents.push(plotHandler);
            
            map.addOverlay(marker);
            // store the details
            marker.MyIndex=gmarkers.length;
            gmarkers.push(marker);
            if (!firstpoint) {
                map.addOverlay(dirn1.getPolyline());
                gpolys.push(dirn1.getPolyline());
            }
            get_routes(dirn1);
            firstpoint = false;
            //if (gmarkers.length>1 && gmarkers.length<26) {
            //    document.getElementById("link").style.display="";
            //} else {
            //    document.getElementById("link").style.display="none";
            //}
        });
        
        var plotHandler2 = GEvent.addListener(dirn2,"load", function() {
            loading = false;
            // snap to last vertex in the polyline
            var n = dirn2.getPolyline().getVertexCount();
            var p=dirn2.getPolyline().getVertex(n-1);
            gmarkers[lastIndex].setPoint(p);
            // remove the old polyline
            map.removeOverlay(gpolys[lastIndex-1]);
            // add the new polyline
            map.addOverlay(dirn2.getPolyline());
            gpolys[lastIndex-1] = (dirn2.getPolyline());
            get_routes(dirn2);
        });
        gevents.push(plotHandler2);

        // == move the polyline following this point ==
        var plotHandler3 = GEvent.addListener(dirn3,"load", function() {
            loading = false;
            // snap to first vertex in the polyline
            var p=dirn3.getPolyline().getVertex(0);
            gmarkers[lastIndex].setPoint(p);
            // remove the old polyline
            map.removeOverlay(gpolys[lastIndex]);
            // add the new polyline
            map.addOverlay(dirn3.getPolyline());
            gpolys[lastIndex] = (dirn3.getPolyline());
            get_routes(dirn3);
        });
        gevents.push(plotHandler3);
    }
}

function show_blocks() {
    var labels = [];
    
    if(!blocks_on) {
        GEvent.removeListener(block_name);
        if(!blocks.length < 1) {
            $(blocks).each(function(index) {
               map.removeOverlay(blocks[index]); 
            });
        }
    } else {
        block_name = GEvent.addListener(map, "click", function(overlay,point) {
                        if (!overlay) {
                            for (var i=0; i<blocks.length; i++) {
                                if (blocks[i].Contains(point)) {
                                    map.openInfoWindowHtml(point,"Kvart " + labels[i]
                                    );             i = 999; // Jump out of loop
                                }
                            }
                        }
                    });
        if(blocks.length > 0) {
            $(blocks).each(function(index) {
               map.addOverlay(blocks[index]); 
            });
        } else {
            $.ajax({
                type: "GET",
                url: "/site_media/xml/kvartovi_zagreb.xml",
                dataType: "xml",
                cache: false,
                success: function(xml) {
                    $('kvart', xml).each(function(i) {
                        var name = $(this).attr("name");
                        var colour = $(this).attr("colour");
                        var lat = $(this).attr("lat");
                        var lng = $(this).attr("lng");
                        var points = $(this).children();
                
                        var pts = [];
                        points.each(function(index) {
                            pts[index] = new GLatLng(parseFloat($(this).attr("lat")),
                                                     parseFloat($(this).attr("lng")));
                        });
                        var poly = new GPolygon(pts,"#ffffff",1,1,colour,0.45,{clickable:false});
                        blocks.push(poly);
                        labels.push(name);
                        map.addOverlay(poly);
                    });
                }
            }); 
        }
    }
}

function set_resolution(min, max) {
    var mt = map.getMapTypes();
    // Overwrite the getMinimumResolution() and getMaximumResolution() methods
    for (var i=0; i<mt.length; i++) {
        mt[i].getMinimumResolution = function() {return min;}
        mt[i].getMaximumResolution = function() {return max;}
    } 
}

function create_map(lat, lng, func) {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("karta"));
        map.checkResize(); 
        //map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(lat, lng), start_zoom);
        map.setUIToDefault();
        set_resolution(min_zoom, max_zoom);
        
        $(kvartovi).each(function (index) {
            if(kvartovi[index] == current_city) {
                map.addControl(new (create_block())());
            }
        });
        
        if (typeof(func) == 'function') {
            func();
        }
        
        if (tram_line) {
            $(tram_line).each(function (index) {
                if(tram_line[index] == current_city) {
                    show_tram_stations();
                }
            });
        }

        var publisher_id = "pub-9865207184243772";
        adsManagerOptions = {
            maxAdsOnMap : 2,
            style: 'adunit',
            channel: '9249827175'
        };
        adsManager = new GAdsManager(map, publisher_id, adsManagerOptions);
        adsManager.enable();
        
        GEvent.addListener(map,'tilesloaded',function() {
            loading = false;
        });
        
        if (current_city == country) {
            GEvent.addListener(map,'zoomend',function() {
                var zoom = map.getZoom();
                if (zoom == 8) {
                    for(var i=0; i<w_markers.length;i++) {
                        map.removeOverlay(w_markers[i]);
                    }
                }
                if (zoom == 7) {
                    if(!dirs && !dirs_on) {
                        for(var i=0; i<w_markers.length;i++) {
                            map.addOverlay(w_markers[i]);
                        }
                    }
                }
            });
        }
        
        reasons[G_GEO_SUCCESS]            = "Success";
        reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
        reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
        reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
        reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
        reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
        reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";
        
    } else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }
}

function create_info(text) {
    var addr = text.replace("City of", "Grad").replace("Croatia", "Hrvatska").replace("Serbia", "Srbija");
    var arr = addr.split(",");
    if(arr.length == 2) {
       info = '<div style="width:240px"><strong>'+ arr[0] +'<br /><br />' +arr[1] + '<\/div>'; 
    } else if (arr.length == 3) {
       info = '<div style="width:240px"><strong>'+ arr[0] +'</strong><br /><br />' +arr[1] + '<\/div>'; 
    } else {
        info = '<div style="width:240px"><strong>'+ text +'</strong><\/div>';
    }
    
    return info;
}

function addTo(search) {
    $("input[@name=to]#toAddress").val(search);
}

function addFrom(search) {
    $("input[@name=from]#fromAddress").val(search);
}

function showAddress(search) {
    indicateLoading();
    var str = '';
    var zoom = 16;
    map.clearOverlays();
    if (current_city == "hrvatska") {
        src_city = "Croatia";
    } else if (current_city == "srbija") {
        src_city = "Serbia";        
    } else {
        src_city = current_city;
    }
    geo.getLocations(search+","+src_city, function (result) { 
        if (result.Status.code == G_GEO_SUCCESS) {
            $('div#rezultati').empty().hide(); 
            var link = "/karta-"+swap(current_city)+"/ulice/"+URLify(search, 50)+"/";
            html = html + '<div id="shareUlice"> <a href="'+link+'">Direktan link</a>   </div>' ;
            var no_res = result.Placemark.length;
            if(no_res > 1) {
                $('div#rezultati').append(
                    "<h1>"+result.Placemark.length+" rezultata za <strong>\""+search+"\"</strong><a href=\"#\" class=\"close_results\"><img src=\"/site_media/images/close_rez.png\" border=\"0\" /></a></h1>"
                );
                
                for (var i=0; i<result.Placemark.length; i++) {
                    var p = result.Placemark[i].Point.coordinates;
                    var addr = result.Placemark[i].address.replace("City of", " ").replace("Croatia", " ").replace("Serbia", " ");
                    addr =  addr.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
                    if (addr.charAt(addr.length-1) == ",") {
                        addr = addr.substring(0, addr.length-1);
                    }
                    addr = '<a href="'+p[1]+','+p[0]+'" class="show_loc">' + addr + '</a>'; 
                    $('div#rezultati').append("<div id='ispisR'>"+(i+1)+". "+ addr +"<br /></div>");
                }
                $('div#rezultati').show('slow');
            }
            i = 2;
		
            var p = result.Placemark[0].Point.coordinates;
	    var place = result.Placemark[0];
            var point = new GLatLng(p[1],p[0]);
            var html = create_info(place.address);
            html = html + '<div id="BalonOdDo">Pravac: <a href="#" onclick="javascript:addFrom(\''+search+'\')">Od<\/a> - <a href="#" onclick="javascript:addTo(\''+search+'\')">Do<\/a> </div>';
	    var link = "/karta-"+swap(current_city)+"/ulice/"+URLify(search, 50)+"/";
            html = html + '<div id="shareUlice"> <a href="'+link+'">Direktan link</a>   </div>' ;
	    html = html + '<div id="shareUlice"> <a href="#" onclick="window.open(\'/print/\')">Printaj</a>   </div>' ;
            var marker = createMarker(point, html);
            map.addOverlay(marker);
            map.setCenter(new GLatLng(p[1],p[0]), zoom);
            marker.openInfoWindowHtml(html);
        }
        // ====== Decode the error status ======
        else {
            var reason="Code "+result.Status.code;
            if (reasons[result.Status.code]) {
                reason = reasons[result.Status.code]
            }
            loading = false;
            alert('Could not find "'+search+ '" ' + reason);
        }
    });
}

function new_loc(coordinates, text) {
    map.clearOverlays();
    var i = coordinates.split(",")[0];
    var j = coordinates.split(",")[1];
    var point = new GLatLng(i, j);
    var info = create_info(text);
    var marker = createMarker(point, info)
    map.addOverlay(marker);
    map.setCenter(point, 16);
    marker.openInfoWindowHtml(info);
}

function capfirst(string) {
    return string.charAt(0).toUpperCase() + string.slice(1).toLowerCase();
}

function ucwords( str ) {
    return (str+'').replace(/^(.)|\s(.)/g, function ( $1 ) { return $1.toUpperCase( ); } );
}

function searchPerson(person) {
    
    $.ajax({
	type: "GET",
	url: "/users/",
	contentType: "application/json",
        data: "search="+person,
	dataType: "text",
	cache: false,
	success: function(json) {
            var r = JSON.parse(json);
            $('div#rezultati').empty().append(r[0].html).show('slow');
	}
    });
}

function swap(city) {
    var retcity;
    switch (city) {
        case "zagreb":
            retcity = "zagreba";
            break;
        case "split":
            retcity = "splita";
            break;
        case "hrvatska":
            retcity = "hrvatske";
            break;
        case "osijek":
            retcity = "osijeka";
            break;
        case "rijeka":
            retcity = "rijeke";
            break;
        case "beograd":
            retcity = "beograda";
            break;
        default:
            retcity = city;
    }
    
    return retcity;
}

function save_search(search) {
    $.post("/ajax/save_search/", { term: search, city: current_city },
        function(data){
        }, "json");
}

function post_to_url(path, params, method) {
    method = method || "post"; 

    var form = document.createElement("form");
    form.setAttribute("method", method);
    form.setAttribute("action", path);

    for(var key in params) {
        var hiddenField = document.createElement("input");
        hiddenField.setAttribute("type", "hidden");
        hiddenField.setAttribute("name", key);
        hiddenField.setAttribute("value", params[key]);

        form.appendChild(hiddenField);
    }

    document.body.appendChild(form);    
    form.submit();
}

function search(elem, attr) {
    var group = $(elem).attr(attr);
    var search = $('input#'+group).val();
    if (view == "map") {
        switch (group) {
            case 'ulica':
                showAddress(search);
                save_search(search);
                break;
            case 'firma':
                get_company(search);
                break;
            case 'osoba':
                searchPerson(search);
                break;
        }
    } else {
        switch (group) {
            case 'ulica':
				window.location = "/karta-"+swap(current_city)+"/ulice/"+URLify(search, 50)+"/";
                break;
            case 'firma':
				window.location = "/popis-firmi/"+encodeURIComponent(search)+"/";
                break;
            case 'osoba':
                post_to_url("/users/", {'search': search});
                break;
        }
    }
}

function indicateLoading() {
	loading = true;
    $("div#loading").css("display", "block");
	displayLoadingMsg();
}

function displayLoadingMsg() {
	if (loading){
	    var to = window.setTimeout('displayLoadingMsg()',100);
	}
	else {
	    $("div#loading").css("display", "none");
	}
}

var CROATIAN_MAP = {
    'š': 's', 'đ': 'dj', 'č': 'c', 'ć': 'c', 'ž': 'z',
    'Š': 'S', 'Đ': 'Dj', 'Č': 'C', 'Ć': 'C', 'Ž': 'Z'
}

var ALL_DOWNCODE_MAPS=new Array()
ALL_DOWNCODE_MAPS[0]=CROATIAN_MAP

var Downcoder = new Object();
Downcoder.Initialize = function()
{
    if (Downcoder.map) 
        return ;
    Downcoder.map ={}
    Downcoder.chars = '' ;
    for(var i in ALL_DOWNCODE_MAPS)
    {
        var lookup = ALL_DOWNCODE_MAPS[i]
        for (var c in lookup)
        {
            Downcoder.map[c] = lookup[c] ;
            Downcoder.chars += c ;
        }
     }
    Downcoder.regex = new RegExp('[' + Downcoder.chars + ']|[^' + Downcoder.chars + ']+','g') ;
}

downcode= function( slug )
{
    Downcoder.Initialize() ;
    var downcoded =""
    var pieces = slug.match(Downcoder.regex);
    if(pieces)
    {
        for (var i = 0 ; i < pieces.length ; i++)
        {
            if (pieces[i].length == 1)
            {
                var mapped = Downcoder.map[pieces[i]] ;
                if (mapped != null)
                {
                    downcoded+=mapped;
                    continue ;
                }
            }
            downcoded+=pieces[i];
        }
    }
    else
    {
        downcoded = slug;
    }
    return downcoded;
}

function URLify(s, num_chars) {
    // changes, e.g., "Petty theft" to "petty_theft"
    // remove all these words from the string before urlifying
    s = downcode(s);
    removelist = [];
    //r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi');
    //s = s.replace(r, '');
    // if downcode doesn't hit, the char will be stripped here
    s = s.replace(/[^-\w\s]/g, '');  // remove unneeded chars
    s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
    s = s.replace(/[-\s]+/g, '-');   // convert spaces to hyphens
    s = s.toLowerCase();             // convert to lowercase
    return s.substring(0, num_chars);// trim to first num_chars chars
}

function postavi_visinu() {
    document.getElementById("desno").style.width = document.body.clientWidth - 307;
}

function postavi_visinu_mapa() {
    document.getElementById("desno").style.width = document.body.clientWidth - 307;
}

function set_background() {
    var randnum = Math.random();
    var inum = 24;

    // Change this number to the number of images you are using.
    var rand1 = Math.round(randnum * (inum-1)) + 1;
    images = new Array();
    for(i=1; i<=24; i++) {
	var slika = "/site_media/foto/"+i+".jpg";
	images[i] = slika;
    }

    // Ensure you have an array item for every image you are using.
    var image = images[rand1]
    // Deactivate cloaking device -->
    Image1 = new Image();
    Image1.src = image;
    
    return image;
}

function textReplacement(input){
    var originalvalue = input.val();
    input.focus( function(){
        if( $.trim(input.val()) == originalvalue ){ input.val(''); }
    });
    input.blur( function(){
        if( $.trim(input.val()) == '' ){ input.val(originalvalue); }
    });
}

$(document).ready(function() {
    
    /*
    $("body").css("background", "url('" + set_background() + "')"
            ).css("text", "black"
            ).css("background-attachment", "fixed");
                              */

    var resizeTimer = null;
    $(window).bind('resize', function() {
        if (resizeTimer) clearTimeout(resizeTimer);
        if($('div#karta').length > 0) {
            resizeTimer = setTimeout(postavi_visinu_mapa, 100);
        } else {
            resizeTimer = setTimeout(postavi_visinu, 100);
        }
    }).load(function() {
        if($('div#karta').length > 0) {
            postavi_visinu_mapa();
        } else {
            postavi_visinu();
        }
    }).unload(function() {
        GUnload();
    });
    
    $("select.izborGrada").change(function() {
        window.location = $(this).val();
    });
    
    $("input#nadji, input#nadji2, input#nadji3").click(function() {
        search(this, 'name');
    });
   
    $("input#ulica, input#osoba, input#firma").keypress(function (e) {
        if (e.which == 13 ) {
           search(this, 'id'); 
        }
    });
    
    textReplacement($('input#ulica'));
    textReplacement($('input#firma'));
    textReplacement($('input#osoba'));
	
	$('form#ffirme, form#fulice').submit(function(){
		return false;
	});
    
    if (!toggle) {
        $('div#rezultati').hide();
    }
    
    $("form#dirs_submit").submit(function () { return false; });
    $(".put_btn").click(function() {
        
        var f = $('input[type=text]#fromAddress');
        var t = $('input[type=text]#toAddress');
        var from = f.val();
        var to = t.val();
        
        if(!from) {
            f.css("background-color", "#FCD9D9");
        }
        if(!to) {
            t.css("background-color", "#FCD9D9");
        }
        if(!from || !to) {
            return false;
        } else {
            f.css("background-color", "#FFF");
            t.css("background-color", "#FFF");
        }
        
        if (current_city == country) {
            from += ", "+country+"";
            to += ", "+country+"";
        } else {
            from += ", "+current_city+"," + country;
            to += ", "+current_city+", " + country;
        }
        indicateLoading();
        dirs_on = true;         
        from_to_dirs(from, to);
        
    });
    
    if (view == "map") {
        $('a.show_loc').live("click", function(e) {
            indicateLoading();
            e.preventDefault();
            var ahref = this.pathname.substring(this.pathname.lastIndexOf('/')+1);
            new_loc(ahref, $(this).text());
            return false;
        });
        
        $('a.show_comp').live("click", function(e) {
            indicateLoading();
            e.preventDefault();
            var ahref = this.pathname.substring(this.pathname.lastIndexOf('/')+1);
            show_company(ahref);
            return false;
        });
        
        $('a.close_results').live("click", function(e) {
            e.preventDefault();
            $(this).parent().parent().fadeOut("slow");
            e.stopPropagation();
        });
        
        $('a#link_sponzori').live("click", function(e){
            e.preventDefault();
            var $link = $(this).attr("href");
            show_markers($link);
            e.stopPropagation();
        });
        
        $('a.get_location').live("click", function(e){
            e.preventDefault();
            var $link = $(this).attr("href");
            show_user_location($link);
            e.stopPropagation();
        });
        
        $('a.show_path').bind('click', function(e){
            e.preventDefault();
            show_directions($(this));
            e.stopPropagation();
        });
        
        $('input[@name=cb_putanje].show_path').click(function(){
            show_directions($(this).next());
        });
        
        $("#fromAddress").tooltip({
            offset: [0, -15],
            tip: '#tooltip2',
            effect: 'fade', 
            opacity: 0.9,
            delay: 0
        });
    
        $("#toAddress").tooltip({
            offset: [0, -15],
            tip: '#tooltip3',
            effect: 'fade', 
            opacity: 0.9,
            delay: 0
        });
    
        $('#trigger').tooltip({
            position: ['bottom', 'center'],
            tip: '#tooltip',
            effect: 'toggle',
            offset: [0, 35],
            opacity: 0.9,
            delay: 0
        });
    }
});
