// hover class plugin
(function() {
    $.fn.hoverClass = function(c) {
        return this.each(function() {
            $(this).hover(
                function() { $(this).addClass(c); },
                function() { $(this).removeClass(c); }
            );
        });
    };
})(jQuery);

var $form,
    nav_title,
    state;

// dom ready
$(function() {
    $form = $("body > form");

    // main navigational elements
    $("#navigation li:gt(0)").hover(
        function() {
            nav_title = $("> a", this).addClass("active").attr("title");
            $("> a", this).attr("title", "");
            $("ul", this).fadeIn(500);
        },
        function() {
            $("> a", this).removeClass("active").attr("title", nav_title);
            $("ul", this).fadeOut(0);
        }
    );
    $("#navigation li:gt(0)").hoverClass("active").find("ul").fadeOut(0);

    // class addition for shared content pages
    state = window.location.pathname.split("/")[1].toLowerCase();
    if (state != "" && !$form.hasClass(state)) {
        $form.addClass(state);
    }

    // smooth scroll
    $("a[href*=#]").click(function() {
        if (location.pathname.replace(/^\//, '')
        == this.pathname.replace(/^\//, '')
        && location.hostname == this.hostname) {
            if (this.hash != "") {
                var $target = $(this.hash);
                $target = $target.length && $target || $("[id=" + this.hash.slice(1) + "]");
                if ($target.length) {
                    var targetOffset = $target.offset().top;
                    $('html,body').animate({ scrollTop: targetOffset }, 1000, "swing");
                    return false;
                }
            }
        }
    });


    // google map route drawing
    if ($("#googleMap").length > 0 && typeof (GBrowserIsCompatible) !== "undefined") {
        if (GBrowserIsCompatible()) {
            var map = new GMap2(document.getElementById("googleMap"));
            var startIcon = new GIcon();
            var finishIcon = new GIcon();
            var error = false;
            var state = $form.hasClass("sa") ? "sa" :
                            $form.hasClass("vic") ? "vic" : "nsw";
            var line = {
                color: "#EE0000",
                opacity: 0.5,
                weight: 6
            }
            var startIconOpts = {
                image: "/Common/Images/start-icon.png",
                shadow: "/Common/Images/start-icon-shadow.png",
                iconSize: new GSize(51.0, 55.0),
                shadowSize: new GSize(79.0, 55.0),
                iconAnchor: new GPoint(25.0, 27.0),
                infoWindowAnchor: new GPoint(25.0, 27.0)
            }
            var finishIconOpts = {
                image: "/Common/Images/finish-icon.png",
                shadow: "/Common/Images/finish-icon-shadow.png",
                iconSize: new GSize(49.0, 42.0),
                shadowSize: new GSize(71.0, 42.0),
                iconAnchor: new GPoint(24.0, 21.0),
                infoWindowAnchor: new GPoint(24.0, 21.0)
            }

            jQuery.extend(startIcon, startIconOpts);
            jQuery.extend(finishIcon, finishIconOpts);


            switch (state) {
                case "nsw":
                    map.setCenter(new GLatLng(-33.870611530112306, 151.20693683624268), 15);
                    var startLat = -33.86551592544912;
                    var startLng = 151.20725870132446;
                    var finishLat = -33.87604531881672;
                    var finishLng = 151.20343923568726;
                    var polyline = new GPolyline([
                         new GLatLng(startLat, startLng),
  	                     new GLatLng(-33.86872298483739, 151.20691537857056),
                         new GLatLng(-33.870754060135496, 151.2069582939148),
                         new GLatLng(-33.87289198192407, 151.2069582939148),
                         new GLatLng(-33.874317233366696, 151.20680809020996),
                         new GLatLng(-33.876401620744, 151.20612144470215),
                         new GLatLng(finishLat, finishLng)
                    ], line.color, line.weight, line.opacity, {}, {});
                    map.addOverlay(polyline);

                    var start = new GMarker(new GLatLng(startLat, startLng), startIcon);
                    var finish = new GMarker(new GLatLng(finishLat, finishLng), finishIcon);

                    break;
                case "sa":
                    map.setCenter(new GLatLng(-34.91665752419092, 138.59381675720215), 15);
                    var startLat = -34.9187688946398;
                    var startLng = 138.59832286834717;
                    var finishLat = -34.91985974809142;
                    var finishLng = 138.5967779159546;
                    var polyline = new GPolyline([
                        new GLatLng(startLat, startLng),
                        new GLatLng(-34.91915597333065, 138.59742164611816),
                        new GLatLng(-34.91978937088692, 138.59617710113525),
                        new GLatLng(-34.91982455949671, 138.59201431274414),
                        new GLatLng(-34.91905040659602, 138.58941793441772),
                        new GLatLng(-34.9183818141235, 138.58677864074707),
                        new GLatLng(-34.91616486327115, 138.58551263809204),
                        new GLatLng(-34.91465167195755, 138.5839033126831),
                        new GLatLng(-34.91496838872677, 138.5852336883545),
                        new GLatLng(-34.91609448289837, 138.58652114868164),
                        new GLatLng(-34.917502078888056, 138.5873794555664),
                        new GLatLng(-34.917079802625736, 138.58913898468018),
                        new GLatLng(-34.91795954238727, 138.59149932861328),
                        new GLatLng(-34.91880408368718, 138.59304428100586),
                        new GLatLng(-34.9183818141235, 138.59463214874268),
                        new GLatLng(-34.91834662489513, 138.59609127044678),
                        new GLatLng(-34.916129673092314, 138.59793663024902),
                        new GLatLng(-34.91570738976939, 138.59973907470703),
                        new GLatLng(-34.91560181859921, 138.6013698577881),
                        new GLatLng(-34.91693904338886, 138.60368728637695),
                        new GLatLng(-34.917642837159384, 138.6038589477539),
                        new GLatLng(-34.91778359518931, 138.60287189483643),
                        new GLatLng(-34.91683347380278, 138.60145568847656),
                        new GLatLng(-34.91662233422328, 138.6002540588379),
                        new GLatLng(-34.91683347380278, 138.59896659851074),
                        new GLatLng(-34.91964861629686, 138.5976791381836),
                        new GLatLng(finishLat, finishLng)
                    ], line.color, line.weight, line.opacity, {}, {});
                    map.addOverlay(polyline);

                    var start = new GMarker(new GLatLng(startLat, startLng), startIcon);
                    var finish = new GMarker(new GLatLng(finishLat, finishLng), finishIcon);

                    break;
                case "vic":
                    map.setCenter(new GLatLng(-37.845443694183736, 144.96923446655273), 14);
                    var startLat = -37.84124135065977;
                    var startLng = 144.9660587310791;
                    var finishLat = -37.8410380053835;
                    var finishLng = 144.96545791625977;
                    var polyline = new GPolyline([
                    //new GLatLng(startLat, startLng),
  	                     new GLatLng(-37.840224618672174, 144.96657371520996),
                         new GLatLng(-37.83859781833985, 144.96760368347168),
                         new GLatLng(-37.83839446577554, 144.96983528137207),
                         new GLatLng(-37.83886895422019, 144.9707794189453),
                         new GLatLng(-37.840495748572614, 144.97172355651855),
                         new GLatLng(-37.84496924803535, 144.97095108032227),
                         new GLatLng(-37.84652813106079, 144.97138023376465),
                         new GLatLng(-37.84842585722213, 144.97429847717285),
                         new GLatLng(-37.84930692776673, 144.97678756713867),
                         new GLatLng(-37.85113680987325, 144.97756004333496),
                         new GLatLng(-37.85235670604731, 144.97867584228516),
                         new GLatLng(-37.853508811678125, 144.97661590576172),
                         new GLatLng(-37.85289887564572, 144.97541427612305),
                         new GLatLng(-37.85134012730394, 144.97421264648438),
                         new GLatLng(-37.84598591461569, 144.9679470062256),
                         new GLatLng(-37.84395256743894, 144.9631404876709),
                         new GLatLng(-37.84286809268742, 144.962797164917),
                         new GLatLng(-37.842122507045296, 144.9638271331787),
                    //new GLatLng(finishLat, finishLng)
                    ], line.color, line.weight, line.opacity, {}, {});
                    map.addOverlay(polyline);

                    var start = new GMarker(new GLatLng(-37.838733386404606, 144.96614456176758), startIcon);
                    var finish = new GMarker(new GLatLng(-37.840902441554526, 144.96356964111328), finishIcon);

                    break;
                default:
                    map.setCenter(new GLatLng(-33.870611530112306, 151.20693683624268), 15);
                    var polyline = new GPolyline([
                         new GLatLng(-33.86551592544912, 151.20725870132446),
  	                     new GLatLng(-33.86872298483739, 151.20691537857056),
                         new GLatLng(-33.870754060135496, 151.2069582939148),
                         new GLatLng(-33.87289198192407, 151.2069582939148),
                         new GLatLng(-33.874317233366696, 151.20680809020996),
                         new GLatLng(-33.876401620744, 151.20612144470215),
                         new GLatLng(-33.87604531881672, 151.20343923568726)
                    ], line.color, line.weight, line.opacity, {}, {});
                    map.addOverlay(polyline);

                    var start = new GMarker(new GLatLng(-33.86551592544912, 151.20725870132446), startIcon);
                    var finish = new GMarker(new GLatLng(-33.87604531881672, 151.20343923568726), finishIcon);

                    error = true;
                    break;
            }

            if (error) {
                console.error("Could not obtain correct state class from form to draw map. Defaulted to NSW/Sydney.");
            }
            function addMarker(point) {
                var icon = new GIcon();
                icon.image = "images/finish-icon.png";
                icon.shadow = "images/shadow-finish-icon.png";
                icon.iconSize = new GSize(49.0, 42.0);
                icon.shadowSize = new GSize(71.0, 42.0);
                icon.iconAnchor = new GPoint(24.0, 21.0);
                icon.infoWindowAnchor = new GPoint(24.0, 21.0);

                map.addOverlay(new GMarker(point, icon));
            }

            map.addOverlay(start);
            map.addOverlay(finish);
        }
    }

    // ambassadors page functionality
    if ($form.hasClass("ambassadors")) {

        // normalise height to stop prev/next buttons from jumping
        $(".ambassador").normaliseHeight()

        // prev/next
        $("#internal p.actions a").click(function(e) {
            e.preventDefault();
            var $this = $(this);
            var id = $this.attr("id");

            $visible = $(".ambassador:visible");
            if (id == "next") {
                $next = $visible.next("div").length > 0 ? $visible.next("div") : $(".ambassador:eq(0)");
            } else if (id == "prev") {
                $next = $visible.prev("div").length > 0 ? $visible.prev("div") : $(".ambassador:last");
            }

            var index = $(".ambassador").index($next.get(0));
            var hash = $("ul.ambassadors li").removeClass("active").eq(index).addClass("active").find("a").get(0).hash;

            window.location.hash = hash;
            $visible.hide();
            $next.show();
        });

        // thumbnail images
        $("ul.ambassadors li a").click(function(e) {
            e.preventDefault();
            var $this = $(this);
            var hash = $this.get(0).hash;

            $(".ambassador:visible").hide();
            var index = $("ul.ambassadors li a").index(this);
            $("ul.ambassadors li").removeClass("active").eq(index).addClass("active");

            $(".ambassador:eq(" + index + ")").show();
            window.location.hash = hash;
        });

        // activate ambassador passed via hash
        var hash = window.location.hash;
        var error = (hash == "") ? true : false;
        if (!error) {
            $("ul.ambassadors li a[href='" + hash + "']").trigger("click");
        } else {
            $("ul.ambassadors li:eq(0)").trigger("click");
        }
    }
});