$(document).ready(function() {

    //init big map
    var firstrun = "1";
    var det_lat = $("#detectedlat").attr("rel");
    var det_lng = $("#detectedlng").attr("rel");
    var bigmap = new GMap2(document.getElementById("bigmap_canvas"));
    var topRight = new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(10, 10));
    var markerHash = {};
    var markers = [];
    var markerClusterer = null;
    var tsTimeStamp = new Date().getTime();
    var zoomLevel = 1;
    if (getParameterByName("zoom") != "") {
      zoomLevel = 8;
    }
    bigmap.setCenter(new GLatLng(det_lat, det_lng), zoomLevel);
    bigmap.addControl(new GLargeMapControl3D(), topRight);
    bigmap.addMapType(G_PHYSICAL_MAP);
    bigmap.setMapType(G_PHYSICAL_MAP);
    bigmap.enableContinuousZoom();
    bigmap.enablePinchToZoom();
    bigmap.enableScrollWheelZoom();

    for (i = 0; i < markers.length; i++) {
        var current = markers[i];
        marker = addMarker(current.latitude, current.longitude, current.id);
        markerHash[current.id] = {marker:marker, visible:true};
    }

    var minMapScale = 2;
    var maxMapScale = 12;

    var mapTypes = bigmap.getMapTypes();     // get array of map types

    for (var oi = 0; oi < mapTypes.length; oi++) {     // overwrite the getMinimumResolution() and getMaximumResolution() methods for each map type
        mapTypes[oi].getMinimumResolution = function() {
            return minMapScale;
        };
        mapTypes[oi].getMaximumResolution = function() {
            return maxMapScale;
        };
    }

    silentlyLoadUserPane();


    GEvent.addListener(bigmap, "dragend", function() {
        currentzoom = bigmap.getZoom();
        loadIndividuals(currentzoom);
    });
    GEvent.addListener(bigmap, "zoomend", function() {
        currentzoom = bigmap.getZoom();
        loadIndividuals(currentzoom);
    });
    GEvent.addListener(bigmap, "tilesloaded", function() {
        firstrun = "0";
        currentzoom = bigmap.getZoom();
        loadIndividuals(currentzoom);
        GEvent.clearListeners(bigmap, "tilesloaded");
    });

    function loadIndividuals(currentzoom) {
        if (currentzoom >= "8") {
            var currentCenter = bigmap.getCenter();
            $.get('/map/markers.xml', { action: "get", time: tsTimeStamp, currentlatlng: currentCenter}, function(data) {
                var yellowIcon = new GIcon(G_DEFAULT_ICON);
                yellowIcon.image = "http://media.animalsmatter.org/images/am-individual-pin.png";
                yellowIcon.shadow = null;
                yellowIcon.iconSize = new GSize(26, 31);
                var superChargeIcon = new GIcon(G_DEFAULT_ICON);
                superChargeIcon.image = "http://media.animalsmatter.org/images/am-individualsuper-pin.png";
                superChargeIcon.shadow = null;
                superChargeIcon.iconSize = new GSize(26, 31);

                markerOptions = { icon:yellowIcon };

                $(data).find('marker').each(function() {
                    var lat = $(this).attr('lat');
                    var lng = $(this).attr('lng');
                    var id = $(this).attr('id');
                    var point = new GLatLng(lat, lng);
                    var marker = new GMarker(point, markerOptions);

                    markers.push(marker);

                    GEvent.addListener(marker, "click", function() {
                        $("#userpane").slideUp(250);
                        moveToMarker(bigmap, marker);
                        loadUserPane(id);
                    });
                });
                if (markerClusterer != null) {
                    markerClusterer.clearMarkers();

                }
                var mcOptions = {gridSize: 20};

                markerClusterer = new MarkerClusterer(bigmap, markers, mcOptions);
                markers = null;
                markers = [];

            });

        }
        else if (currentzoom < "8")
        {
            if (markerClusterer != null) {
                markerClusterer.clearMarkers();
            }
            markers = null;
            markers = [];
        }
    }

    $.get('/map/animalwelfaremarkers.xml', function(data) {

        // Set up our GMarkerOptions object
        var orangeIcon = new GIcon(G_DEFAULT_ICON);
        orangeIcon.image = "http://media.animalsmatter.org/images/am-animalwelfare-pin.png";
        orangeIcon.shadow = null;
        orangeIcon.iconSize = new GSize(26, 31);
        markerOptions = { icon:orangeIcon };
        var welfaremarkers = [];
        $(data).find('marker').each(function() {
            var lat = $(this).attr('lat');
            var lng = $(this).attr('lng');
            var id = $(this).attr('id');
            var point = new GLatLng(lat, lng);
            var welfaremarker = new GMarker(point, markerOptions);

            bigmap.addOverlay(welfaremarker);

            GEvent.addListener(welfaremarker, "click", function() {
                $("#userpane").slideUp(250);
                moveToMarker(bigmap, welfaremarker);
                loadUserPane(id);
            });
        });
    });

    $.get('/map/politicalmarkers.xml', function(data) {

        // Set up our GMarkerOptions object
        var blueIcon = new GIcon(G_DEFAULT_ICON);
        blueIcon.image = "http://media.animalsmatter.org/images/am-political-pin.png";
        blueIcon.shadow = null;
        blueIcon.iconSize = new GSize(26, 31);
        markerOptions = { icon:blueIcon };
        var govtmarkers = [];
        $(data).find('marker').each(function() {
            var lat = $(this).attr('lat');
            var lng = $(this).attr('lng');
            var id = $(this).attr('id');
            var point = new GLatLng(lat, lng);
            var govtmarker = new GMarker(point, markerOptions);

            bigmap.addOverlay(govtmarker);

            GEvent.addListener(govtmarker, "click", function() {
                $("#userpane").slideUp(250);
                moveToMarker(bigmap, govtmarker);
                loadUserPane(id);
            });
        });
    });

    $.get('/map/professionalmarkers.xml', function(data) {

        // Set up our GMarkerOptions object
        var professionalIcon = new GIcon(G_DEFAULT_ICON);
        professionalIcon.image = "http://media.animalsmatter.org/images/am-professional-pin.png";
        professionalIcon.shadow = null;
        professionalIcon.iconSize = new GSize(26, 31);
        markerOptions = { icon:professionalIcon };
        var professionalmarkers = [];
        $(data).find('marker').each(function() {
            var lat = $(this).attr('lat');
            var lng = $(this).attr('lng');
            var id = $(this).attr('id');
            var point = new GLatLng(lat, lng);
            var professionalmarker = new GMarker(point, markerOptions);

            bigmap.addOverlay(professionalmarker);

            GEvent.addListener(professionalmarker, "click", function() {
                $("#userpane").slideUp(250);
                moveToMarker(bigmap, professionalmarker);
                loadUserPane(id);
            });
        });
    });

    $.get('/map/championmarkers.xml', function(data) {

        // Set up our GMarkerOptions object
        var starIcon = new GIcon(G_DEFAULT_ICON);
        starIcon.image = "http://media.animalsmatter.org/images/am-champion-pin.png";
        starIcon.shadow = null;
        starIcon.iconSize = new GSize(26, 31);
        markerOptions = { icon:starIcon };
        $(data).find('marker').each(function() {
            var lat = $(this).attr('lat');
            var lng = $(this).attr('lng');
            var id = $(this).attr('id');
            var point = new GLatLng(lat, lng);
            var championmarker = new GMarker(point, markerOptions);

            bigmap.addOverlay(championmarker);

            GEvent.addListener(championmarker, "click", function() {
                $("#userpane").slideUp(250);
                moveToMarker(bigmap, championmarker);
                loadUserPane(id);
            });
        });
    });


    $.get('total', function(data) {

        // Set up our GMarkerOptions object
        var countryIcon = new GIcon(G_DEFAULT_ICON);
        countryIcon.image = "http://google-maps-icons.googlecode.com/files/home.png";
        countryIcon.shadow = null;
        countryIcon.iconSize = new GSize(15, 15);
        markerOptions = { icon:countryIcon };
        var countrymarkers = [];
        var locale = "";
        var see_profiles_text = "";
        var supporters_text = "";        
        $(data).find('settings').each(function() {
          locale = $(this).attr('locale');
          see_profiles_text = $(this).attr('see_profiles_text');
          supporters_text = $(this).attr('supporters_text');
        });

        $(data).find('marker').each(function() {
            var lat = $(this).attr('lat');
            var lng = $(this).attr('lng');
            var id = $(this).attr('id');
            var total = $(this).attr('total');
            var country = $(this).attr('country');
            var iso = $(this).attr('iso');

            var capital = $(this).attr('capital');
            var latlng = GLatLng(lat, lng, false);

            var point = new GLatLng(lat, lng);
            var countrymarker = new GMarker(point, markerOptions);

            bigmap.addOverlay(countrymarker);

            GEvent.addListener(countrymarker, "click", function() {

                var newNode = document.getElementById('country_total');
                countrymarker.openInfoWindow("<div id='total_supporters_country'>" + country + "<br><span id='total'> " + total + " " + supporters_text + "</span><br><span id='country_zoom_link'><a href='/" + locale + "/map?zoom=" + iso + "' id='zoomer'>" + see_profiles_text + "</a></span></div>");

            });



        });
    });

});

// End of onready

function moveToMarker(mapname, thismarker) {
    //add listener that moves map to clicked marker, requires the map instance and the marker to be passed to the function
    var moveEnd = GEvent.addListener(mapname, "moveend", function() {
        var markerOffset = mapname.fromLatLngToDivPixel(thismarker.getLatLng());
        GEvent.removeListener(moveEnd);
    });
    mapname.panTo(thismarker.getLatLng());
}

function loadCountryTotal(id) {

}

function loadUserPane(id) {
    $("li.supertab").hide(150);
    $("#website").hide(150);
    $("#url").attr({href: ""});        
    $.get('/map/get_user_data/' + id + '.xml', function(data) {
        $(data).find('user').each(function() {
            var login = $(this).find("login").text();
            var usertype = $(this).find("usertype").text();
            var website = "http://" + $(this).find("website").text();
            var animal = $(this).find("animal").text();
            vidref = $(this).find("vid_ref").text();
            twitter_id = $(this).find("twitter_id").text();
            flickr_id = $(this).find("flickr_id").text();
            var tumblr_id = $(this).find("tumblr_id").text();
            var declaration = $(this).find("written").text().replace(/\n/g, '<br/>');
            var userlocation = $(this).find("userlocation").text();

            if (usertype == "Individual"){
                $(".profileicon").css("background-image", "url(http://media.animalsmatter.org/images/photo_" + animal + ".png)");
            }
            else if (usertype == "Animal Welfare"){
                $(".profileicon").css("background-image", "url(http://media.animalsmatter.org/images/am-animalwelfare.png)");
            }
            else if (usertype == "Political"){
                $(".profileicon").css("background-image", "url(http://media.animalsmatter.org/images/am-political.png)");
            }
            else if (usertype == "Professional"){
                $(".profileicon").css("background-image", "url(http://media.animalsmatter.org/images/am-professional.png)");
            }
            else if (usertype == "Champion"){
                $(".profileicon").css("background-image", "url(http://media.animalsmatter.org/images/am-champion.png)");
            }
            $('span.screen_name').text(login);
            $('span.location').text(userlocation);
            $('span.usertype').text(usertype);

            if (website != "http://"){
                $("#url").attr({href: website});
                $('#website').show();
            } 

            $('span.clan').text(animal);
            $('#declaration').html(declaration);
            $('#vid_load, #twitterfeed_load, #flickrfeed_load, #supercharged').hide();


            //check supercharge routine
            if (vidref == ""  && twitter_id == "" && flickr_id == "")
            {
               // $('#supercharged').hide();

                $('span.supercharged').text("No");
                $("li.supertab a").fadeOut(200).removeClass("selected");
                $("#dectab").addClass("selected");
                $('#profile').fadeIn(200);
            }
            else
            {
                if (vidref == ""){
                  $('#vid_load').hide();
                }else{
                  $('#vid_load').show();                    
                }
                if (twitter_id == ""){
                 $('#twitterfeed_load').hide();
                }else{
                 $('#twitterfeed_load').show();                     
                }
                if (flickr_id == ""){
                 $('#flickrfeed_load').hide();
                }else{
                 $('#flickrfeed_load').hide();              
                }
                //$('#supercharged').hide();
                $('span.supercharged').text("Yes");
                //$("#supetab").removeClass("selected");
                //$("li.supertab").fadeIn(200);
                $("#dectab").addClass("selected");
                $('#profile').fadeIn(200);
            }


        });
        $("#userpane").slideDown(500);

        $('.closeuserpane').click(function() {
            $("#userpane").slideUp(200);
        });

    });

}

function showSuperPane(superpane, twitter_id, flickr_id, vidref) {
    $('#vidpane').hide();
    $('#twitterpane').hide();
    $('#flickrpane').hide();
    $('#tumblrpane').hide();

    // clear existing tweets from hidden panel
    $("#twitter_viewport ul").empty();
    $('#video_dec_loader').empty();
    if (superpane == '#twitterpane')
    {
        $.get('/grab_twitters/' + twitter_id + '.xml', function(data) {
            $(data).find('record').each(function() {
                var tweet = $(this).find("tweet").text();
                $("#twitter_viewport ul").append("<li>" + " " + tweet + "</li>");
            });

        });
    } else if (superpane == '#vidpane')
    {
        var vidurl_reformat = "http://www.youtube.com/v/" + vidref.substring(31, 42);
        $('#video_dec_loader').flash(
			{
				swf: vidurl_reformat,
                id: "uservid",
                allowscriptaccess: "always",
                height: 300,
				width: 500
			});
//        $("#youtube_object").attr({data: vidurl_reformat});
//        $("#youtube_object param").attr({value: vidurl_reformat});
    } else if (superpane == '#flickrpane')
        {
            $('#flickr_viewport').empty();
            //$.getJSON('http://api.flickr.com/services/rest/?method=flickr.photos.search&api_key=52c5e2d51eb6f9a9b3ee41f8bb9ad250&tags=animalsmatter%2C+wspa%2C+udaw&user_id=77742739@N00&format=json', function(data) {            
            $.getJSON('http://api.flickr.com/services/feeds/photos_public.gne?id=' + flickr_id + '&tags=animalsmatter&format=json&jsoncallback=?', function(data) {
                $.each(data.items, function(i, item) {
                    $("<img class='flickrimages'/>").attr("src", item.media.m).appendTo("#flickr_viewport").wrap("<a rel='external' href='" + item.link + "'></a>");
                });

            });
        }


    $(superpane).slideDown(400);
    $('.closesuperpane').click(function() {
        $(superpane).slideUp(250);
        pauseYouTube();
    });
}

//jQuery.fn.fadeToggle = function(speed, easing, callback) {
//   return this.animate({opacity: 'toggle'}, speed, easing, callback);
//};

function showHelpBox() {
    $("li.supertab").hide();
    $("#website").hide();
    $('#vidpane').hide();
    $('#twitterpane').hide();
    $('#flickrpane').hide();
    $('#tumblrpane').hide();
    $('#userpane').hide();
    $('#helpbox').fadeIn(300);

    $('.closesuperpane').click(function() {
        $("#helpbox").fadeOut();
    });
}

function showMYMBox() {
  var supported_this_session = $("#session_check").attr("rel");
    if (supported_this_session == "true")
    $("li.supertab").hide();
    $("#website").hide();
    $('#vidpane').hide();
    $('#twitterpane').hide();
    $('#flickrpane').hide();
    $('#tumblrpane').hide();
    $('#userpane').hide();
    $('#mymbox').fadeToggle();

    $('.closesuperpane').click(function() {
        $("#mymbox").fadeOut();
    });
}

function silentlyLoadUserPane() {
    //jquery stuff for tabs in userpane
    $("li.supertab").hide();
    $('#website').hide();    
    $("#userpane").appendTo("#bigmap_canvas");
    $("#vidpane").appendTo("#bigmap_canvas");
    $("#twitterpane").appendTo("#bigmap_canvas");
    $("#flickrpane").appendTo("#bigmap_canvas");
    $("#tumblrpane").appendTo("#bigmap_canvas");

    var tabContainers = $('div.tabs > div');

    $('div.tabs ul.tabNavigation a').click(function () {
        tabContainers.hide().filter(this.hash).fadeIn();

        $('div.tabs ul.tabNavigation a').removeClass('selected');
        $(this).addClass('selected');

        return false;
    }).filter(':first').click();

    $('.showsuper').click(function() {
        var superpane = $(this).attr("rel");
        showSuperPane(superpane, twitter_id, flickr_id, vidref);
    });


}

function getParameterByName( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return decodeURIComponent(results[1].replace(/\+/g, " "));
}
//temporary functions



function rndUserIcon() {
    var randomImages = ['image_01','image_02','image_03','image_03','image_03','image_03','image_03','image_03','image_03','image_03'];
    var rndNum = Math.floor(Math.random() * randomImages.length);
    $(".profileicon").css("background-image", "url(/images/icon" + rndNum + ".png)");
}

function pauseYouTube(){
    ytplayer.pauseVideo();
}


// This gets called after the page has loaded when the YouTube API is switched on via the embed tag
// it is required for further API interaction with specified player
function onYouTubePlayerReady(playerId) {
      ytplayer = document.getElementById("uservid");
}



