google.load("maps", "2");
google.load("jquery", "1.3");

function gmapLinkify(address, text) {
    var plusAddress = address.replace(/\s/g, "+");
    return '<p><a href="http://maps.google.com/maps?q='+plusAddress+'&iwstate1=dir">'+text+'</a></p>';
}

function genEventInfo(description, address) {
    var described = "<p><strong>Description:</strong> "+description+"</p>";
    var addressed = "<p><strong>Address:</strong> "+address+"</p>";
    $('#event_info').html(described+addressed);
}

// Call this function when the page has been loaded
function initialize() {
    var has_canvas = document.getElementById("map_canvas");
    if(has_canvas) {
    var map = new google.maps.Map2(has_canvas);
        var uiOptions = map.getDefaultUI();
        uiOptions.controls.largemapcontrol3d = false;
        uiOptions.controls.smallzoomcontrol3d = true;
        uiOptions.controls.maptypecontrol = false;
        map.setUI(uiOptions);
        var home_address = $('li.address span').text(); // address to event on home page
        var first_address = $('ol#event_list li:first span.address').text(); // address to first event on events page
    
        function setPoint(address) {
            var geocoder = new GClientGeocoder();
    
            geocoder.getLatLng(
                address,
                function(point) {
                    map.setCenter(point, 13);
                    var marker = new GMarker(point);
                    map.addOverlay(marker);
                    var infoContent = gmapLinkify(address, address);
                    marker.bindInfoWindowHtml(infoContent);
                    marker.openInfoWindowHtml(infoContent);
                }
            );
        }
        
        setPoint(home_address);
        setPoint(first_address);
    }
    
    // BAD INTERNET EXPLORER!

    if(jQuery.support.boxModel!=true) {
        $("p#bad_ie").show();
    }

    // Initialize Events Page
    $('ol#event_list li:first').addClass('current');
    var first_description = $('ol#event_list li:first span.description').html();
    genEventInfo(first_description,first_address);
    
    // Events Page Swap Event Info
    
    $("ol#event_list li").click(function() {
        var new_address = $(this).children("span.address").text();
        var new_description = $(this).children("span.description").html();
        $("ol#event_list li").removeClass("current");
        $(this).addClass("current");
        setPoint(new_address);
        genEventInfo(new_description, new_address);
    });
    
    // Events Page Cycle Events
    function prepEvents() {
        $("ol#event_list li:last").addClass("last");
        $("ol#event_list li:first").addClass("first");
    
        if(!$("ol#event_list li:eq(3)").hasClass("last")) {
            $("ol#event_list li:eq(3)").addClass("fake_last");
            $("ol#event_list li:gt(3)").hide();
        }
    }
    
    prepEvents();
    
    if(location.hash.search(/e[0-9]+/) != -1) {
        $("ol#event_list li").removeClass("fake_last,fake_first").hide();
        $(location.hash).show().click();
    }
    
    $("ol#event_list li.fake_last").live("click", function() {
        if(!$(this).hasClass("last")) {
            $("ol#event_list li:visible:eq(0)").slideUp().removeClass("fake_first")
            .next().addClass("fake_first");
            $(this).removeClass("fake_last")
            .next().slideDown().addClass("fake_last");
        }
    });
    
    $("ol#event_list li.fake_first").live("click", function() {
        if(!$(this).hasClass("first")) {
            $("ol#event_list li:visible:eq(3)").slideUp().removeClass("fake_last")
            .prev().addClass("fake_last");
            $(this).removeClass("fake_first")
            .prev().slideDown().addClass("fake_first");
        }
    });
    
    // Show only classes
    
    $("a#classy").click(function() {
        var n = $("ol#event_list li.class").length;
        
        if (n != 0) {
            $("ol#event_list li").show().removeClass("fake_first, fake_last").not(".class").remove();
            prepEvents();
        }
        
        var plural = "";
        if (n != 1) {
            plural = "es"
        }
        $("span#event_count").text(n+" upcoming class"+plural);
        return false;
    });

    // Books page clicky
    
    $("ul#books li").click(function() {
        if(!$(this).hasClass("current")) {
            $("ul#books li").removeClass("current")
            .children("img").animate({width: "110px", height: "170px", marginLeft: "0px", marginBottom: "0px"})
            .siblings(".content").slideUp();
            $(this).addClass("current")
            .children("img").animate({width: "220px", height: "340px", marginLeft: "32px", marginBottom: "32px"})
            .siblings(".content").slideDown();
            location.hash = $(this).attr("id");
        }
    });
        
    // Contact Slide Down
    
    function contactShow() {
        $("ul#nav li a.current").addClass("uncurrent").removeClass("current");
        $("a#contact_link").addClass("current").text("Close");
        $("div#contact").slideDown();
    }
    
    if(location.hash == "#contact") {
        contactShow();
    }
    
    $("a#contact_link").click(function() {
        if(!$(this).hasClass("current")) {
            contactShow();
        }
        else {
            $("ul#nav li a.uncurrent").addClass("current").removeClass("uncurrent");
            $(this).removeClass("current").text("Contact");
            $("div#contact").slideUp();
        }
    });
}

google.setOnLoadCallback(initialize);