/**
 * @author Radu Almasan
 * @version 0.1
 */



window.roportal = window.roportal || {};
roportal.harta = roportal.harta || {};



google.maps.Map.prototype.Markers = new Array();
google.maps.Map.prototype.AddMarker = function(marker) {
    this.Markers.push(marker)
    return this.Markers.length - 1;
};
google.maps.Map.prototype.ClearMarkers = function(removeAll) {
    removeAll = typeof removeAll == 'boolean' ? removeAll : false;
    for (i in this.Markers)
        if (removeAll || this.Markers[i].permanent == false || typeof this.Markers[i].permanent != 'boolean') this.Markers[i].setMap(null);
};
google.maps.Map.prototype.InfoWindow = new google.maps.InfoWindow();
google.maps.Map.prototype.InfoBox = new google.maps.InfoBox();





jQuery(document).ready(function() {
    // For IE6, get file with JSON object
    if (typeof JSON == 'undefined') jQuery.getScript(base_url + 'js/json2.js');

    flash_vars = flash_vars.replace('&amp;', '&');

    flash_vars = flash_vars.split('&');
    for (i in flash_vars) {
        tmp = flash_vars[i].split('=');
        switch (tmp[0]) {
            case 's': flash_vars[i] = (tmp.length == 3 ? tmp[1] + '=' + tmp[2] : ''); break;
        }
    }


    // Get a json with businesses to palce on the map
    if (typeof rtype == 'undefined' || rtype == '')
        jQuery.get(base_url + 'xml_yahoo.php?json=1&' + flash_vars.join('&'), {}, function (response) {
            try {
                response = JSON.parse(response.replace(/\\`/g, "`"));
                locations = response.locations;
            } catch(e) { return; }

            // center the map to the requested position
            roportal.harta.map.panTo(new google.maps.LatLng(response.lat, response.long));
            roportal.harta.map.setZoom(19 - parseInt(response.zoom));

            jQuery('#businesses_list').empty(); // clear the businesses list

            var n = flash_vars.join('&').match('hid=[0-9]+');
            if (n != null) n = parseInt(n[0].split('=')[1]);
            for (i in locations) {
                if (n == locations[i].id) {
                    roportal.harta.map.panTo(new google.maps.LatLng(locations[i].lat, locations[i].long));
                    roportal.harta.map.setZoom(16);
                }

                marker = new google.maps.Marker({
                    icon: temppath + 'img/' + (parseInt(locations[i].s) == 0 ? 'mark0000l.png' : 'mark0001l.png'),
                    map: roportal.harta.map,
                    position: new google.maps.LatLng(locations[i].lat, locations[i].long),
                    title: locations[i].label
                });
                marker.permanent = true; // The first placed markers on the map are permanent and do not get removed on a search
                marker.type = locations[i].s;
                marker.label = locations[i].label;
                marker.contentString = '<a href="' + locations[i].u + '">' + locations[i].label + '</a><div>' + locations[i].a  + '</div>' + '<a href="' + locations[i].catu + '">' + locations[i].catn + '</a>';
                mid = roportal.harta.map.AddMarker(marker);

                google.maps.event.addListener(marker, 'mouseover', function() {
                    roportal.harta.map.InfoBox.open(roportal.harta.map, this, 'mouseover');
                });

                a = document.createElement('a');
                jQuery(a).html(locations[i].label).attr('lat', locations[i].lat).attr('long', locations[i].long).attr('mid', mid)
                         .addClass('map_shortcut' + (locations[i].s == 1 ? ' recommended' : ''));
                jQuery('#businesses_list').append(a);
            }
        });



    // When map_shortcut clicked, pan the map to the shortcut`s coordonates
    jQuery('.map_shortcut').live('click', function (e) {
        roportal.harta.map.panTo(new google.maps.LatLng(jQuery(this).attr('lat'), jQuery(this).attr('long')));
        google.maps.event.trigger(roportal.harta.map.Markers[jQuery(this).attr('mid')], 'mouseover');

        // Load routes that are near
        if (jQuery(this).hasClass('street'))
            jQuery.get(base_url + 'xml_google.php', {q: 'routes', lat: jQuery(this).attr('lat'), lng: jQuery(this).attr('long') }, function(response) {
                try {
                    routes = JSON.parse(response);
                } catch (e) { return; }

                roportal.harta.DrawRoutes(routes);
            });

        return false;
    });



    jQuery('#harta_google_map .search_box button').click(function() {
        w = jQuery('#harta_google_map .search_box [name="w"]:checked').val();
        name = jQuery('#harta_google_map .search_box [name="name"]').val();

        if (name.length == 0) return;

        jQuery.get(base_url + 'xml_yahoo.php?json=1&' + w + '=' + name, {}, function (response) {
            try {
                response = JSON.parse(response.replace(/\\`/g, "`"));
                locations = response.locations;
            } catch (e) { return; }

            roportal.harta.map.ClearMarkers();
            jQuery('#harta_google_map .search_box .results').html('');
            jQuery('#harta_google_map .search_box .results').slideDown();
            roportal.harta.map.InfoBox.onRemove(); // hide InfoBox which may be open

            for (i in locations) {
                marker = new google.maps.Marker(options = {
                    icon: temppath + 'img/' + (w == 'cstrada' ? 'mark0002l.png' : (parseInt(locations[i].s) == 0 ? 'mark0000l.png' : 'mark0001l.png')),
                    map: roportal.harta.map,
                    position: new google.maps.LatLng(locations[i].lat, locations[i].long),
                    title: locations[i].label
                });
                marker.type = locations[i].s;
                marker.label = locations[i].label;
                mid = roportal.harta.map.AddMarker(marker);

                if (w == 'cstrada') {
                    marker.contentString = '<a href="' + locations[i].u + '">' + locations[i].label + '</a>';
                    marker.type = 2;
                } else {
                    marker.contentString = '<a href="' + locations[i].u + '">' + locations[i].label + '</a><div>' + locations[i].a  + '</div>' + '<a href="' + locations[i].catu + '">' + locations[i].catn + '</a>';
                    marker.type = locations[i].s;
                }

                google.maps.event.addListener(marker, 'mouseover', function() {
                    roportal.harta.map.InfoBox.open(roportal.harta.map, this, 'mouseover');
                });

                a = document.createElement('a');
                jQuery(a).html(locations[i].label).attr('lat', locations[i].lat).attr('long', locations[i].long).addClass('map_shortcut').attr('mid', mid)
                         .addClass(w == 'cstrada' ? 'street' : (locations[i].s == 1 ? 'recommended' : null));
                jQuery('#harta_google_map .search_box .results').append(a);
            }
        });
    });



    // The search results box`s show/hide button
    jQuery('#harta_google_map .search_box .button').click(function() {
        jQuery('#harta_google_map .search_box .results').slideToggle();
    });



});

