var max_zoom = 17;
var min_zoom = 6;

var apts = null;
var markers = null;
var list_items = null;

function loadCityMap() {
    if (GBrowserIsCompatible()) {
        map = new GMap2(document.getElementById("citymap"));    
        map.setCenter(new GLatLng(lat,lng),zoom);
        
        //set up the pin placeholder
        basePin = new GIcon();
        basePin.shadow = "/gfx/map/pin-shadow.png";
        basePin.iconSize = new GSize(18, 28);
        basePin.shadowSize = new GSize(30, 28);
        basePin.iconAnchor = new GPoint(9, 28);
        basePin.infoWindowAnchor = new GPoint(9, 2);
        basePin.infoShadowAnchor = new GPoint(18, 25);
        basePin.imageMap = [2,5,16,5,16,16,9,22,2,16];
        basePin.transparent = "/gfx/map/pin-transparent.png";
        
        // get apartment markers
        $.get("/js/map_data.php", { id: city_id, type: "city" }, function(data) {
            var json = eval("(" + data + ")");
            var apartments = json.data;
            apts = [];
            markers = [];
            list_items = [];
            for (var i=0; i<apartments.length; i++) {
                addMarker(apartments[i], i);
            }
            addAptList();
        });
        
        // set up zoom events
        GEvent.addListener(map, "zoomend", function() {
            current_zoom = map.getZoom();
            zoomLevels(current_zoom);
        });
        initZoomBars();
        addAddressSearch();
        initStreetView();
    }
}

function addMarker(apt, i) {
    var points = new GLatLng(parseFloat(apt.lat),parseFloat(apt.lng));
    
    var pin = new GIcon(basePin);
    pin.image = "/gfx/map/pin-"+apt.classname+".png";    
    var marker = new GMarker(points, pin);
    
    apts[i] = apt;
    markers[i] = marker;
    list_items[i] = getAptListInfo(i);
    
    var info_html = getInfoHTML(apt);
    
    // click event
    GEvent.addListener(marker, "click", function() {
        aptMarkerClick(i);
    });
    // mouse over event
    GEvent.addListener(marker, "mouseover", function() {
        aptMarkerOver(i)
    });
    // mouse out event
    GEvent.addListener(marker, "mouseout", function() {
        aptMarkerOut(i)
    });
    map.addOverlay(marker);
}

function aptMarkerClick(i) {
    markers[i].openInfoWindowHtml(getInfoHTML(apts[i]));
}

function aptMarkerOver(i) {
    markers[i].setImage("/gfx/map/pin-"+apts[i].classname+"-large.png");
    showTooltip(markers[i], apts[i].name, "citymap");
}

function aptMarkerOut(i) {
    markers[i].setImage("/gfx/map/pin-"+apts[i].classname+".png");
    hideTooltip();
}

function getInfoHTML(apt) {
    var aptname_split = apt.name.split(" ");
    var j=0;
    var aptname = "";
    do {
        aptname += aptname_split[j] +" ";
        j++;
    } while ((j < aptname_split.length) && (aptname.length < 30));
    
    var html = "<div class='bubble'>";
    html += "<table>";
    html += "<tr><td colspan='2'><a href='"+apt.link+"' style='color:#0FAECF;font-weight:bold'>"+aptname+"</a></td></tr>";
    html += "<tr>";
    html += "<td style='padding:0px'><a href='"+apt.link+"'><img src='"+apt.tn+"' width='69' height='46' alt=\""+apt.name+"\" /></a></td>";
    html += "<td valign='top' style='padding-top:5px;padding-right:0px' class='info'><strong>Minimum Stay:</strong> "+apt.minstay+" "+getNights(apt.minstay)+"<br />";
    html += "<strong>Lowest Rate:</strong> <span class='rate'>"+apt.currency+apt.lowrate+"</span><br />";
    html += "<a href='"+apt.link+"'><img src='/gfx/btn-moredetails-sm.gif' width='85' height='17' alt='more details' /></a></td>";
    html += "</tr>";
    html += "</table>";
    html += "</div>";
    return html;
}

function getNights(nights) {
    return (parseInt(nights) > 1) ? "Nights" : "Night";
}

function getAptListInfo(i) {
    switch(apts[i].classname) {
        case "gold": var class_text = "G"; break;
        case "silver": var class_text = "S"; break;
        case "bronze": var class_text = "B"; break;
    }
    return "<div class='apt'><span class='"+apts[i].classname+"'>"+class_text+"</span><div><a href='#' onclick='aptMarkerClick("+i+");return false;' onmouseover='aptMarkerOver("+i+")' onmouseout='aptMarkerOut("+i+")' class='darklink'>"+apts[i].name+"</a> <a href='"+apts[i].link+"'><img src='/gfx/icon_openpage.gif' /></a></div></div>";
}

function addAptList() {
    var list = "<div class='list'>";
    var list_left = new Array();
    var list_right = new Array();
    var rows = Math.ceil(list_items.length/2);
    // first column
    for (var i=0;i<rows;i++) {
        list_left[i] = list_items[i];
    }
    // second column
    for (var i;i<list_items.length;i++) {
        list_right[i-rows] = list_items[i];
    }
    for (var i=0;i<list_left.length;i++) {
        if (i%2 == 0) {
            list += "<div>";
        }
        else {
            list += "<div class='stripe'>";
        }
        if (list_left[i]) {
            list += list_left[i]+"\n";
        }
        else {
            list += "<div></div>";
        }
        if (list_right[i]) {
            list += list_right[i]+"\n";
        }
        else {
            list += "<div class='apt'>&nbsp;</div>";
        }
        list += "</div>";
    }
    
    list += "</div><br class='clear' />";
    var div = document.createElement("div");
    div.innerHTML = list;
    
    var mapholder = document.getElementById("citymap").parentNode;
    mapholder.parentNode.insertBefore(div, mapholder.nextSibling);
}

addLoadEvent(loadCityMap);
window.onunload = function(){ GUnload(); };