﻿var map;
var shopPins = new Array();
var shopCounter = 0;
var cityPins = new Array();
var cityCounter = 0;
var pinPool = null;
var loadingImage = '<div style="width:100%;text-align:center;margin-top:30px;"><img width="16" height="11" title="Loading, please wait" alt="Loading, please wait" src="' + root + 'content/images/ajax-loader.gif" /></div>';

$(document).ready(function () {
    $('#search_form').submit(validateSearchForm);
    $('#search-button').click(function () {
        $('#search_form').submit();
    });

    $('.return').live("click", function () {
        $("#assetIntro").fadeOut(200);
        var selected = $("li.home-left ul.tabs a.selected");
        $("#" + selected.attr('id').replace("Stream", "")).fadeIn(200);
    });


    if ($("#coordinates").length > 0) {
        loadMap($("#coordinates").val());
    }

    //make the map resizable
    $(".home-center").resizable({
        alsoResize: '#map_canvas',
        inverseResize: '.home-right, #slider1, .panel, .wrapper, .comment',
        handles: 'e',
        minWidth: 400,
        maxWidth: 640,
        stop: function (event, ui) {
            //if ($(this).width() >= 640) {
            google.maps.event.trigger(map, "resize");
            //} 
        },
        containment: '.home-contents'
    });
    //sort of hackey, add tooltip for resize handles
    $(".ui-resizable-handle").attr("title", "Drag to resize");
});

function loadMap(coord) {    
    if (coord != "" && coord != null) {
        coords = coord.split(",");

        var mapLatlng = new google.maps.LatLng(coords[0], coords[1]);
        var mapOptions = {
            zoom: 10,
            center: mapLatlng,
            panControl: true,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };

        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

        loadPoints($('#city').val());
    }
}

function findShop(assetId) {
    var toReturn;
    for (var i = 0; i < shopPins.length; i++) {
        if (shopPins[i].assetId == assetId) {
            toReturn = shopPins[i].marker.getTitle();
            break;
        }
    }
    return toReturn;
}

function loadPinsByStars() {
    var rating = $("#sltStarSearch").val();
    var pins;

    pins = shopPins;
    
    var counterAdd = 0;
    var counterRemove = 0;

    var tempShopsToAdd = new Array();
    var tempShopsToRemove = new Array();

    for (var i = 0; i < pins.length; i++) 
    {
        if (pins[i].rating >= rating) 
        {
            tempShopsToAdd[counterAdd] = pins[i];
            counterAdd++;
        }
        else 
        {
            tempShopsToRemove[counterRemove] = pins[i];
            counterRemove++;
        }
    }

    for (var i = 0; i < tempShopsToRemove.length; i++) 
    {
        tempShopsToRemove[i].marker.setMap(null);
    }

    for (var i = 0; i < tempShopsToAdd.length; i++) 
    {
        tempShopsToAdd[i].marker.setMap(map);
    }

    pinPool = tempShopsToAdd;
}

function filterPins() {

    loadPinsByStars();
    
    var pins;

    if (pinPool == null)
        pins = shopPins;
    else
        pins = pinPool;
        
    for (var i = 0; i < pins.length; i++) {
        pins[i].marker.setMap(null);
    }
    var tempShops = new Array();

    var counter = 0;

    var chks = document.getElementsByName("chkLooking[]");

    var allUnchecked = true;

    for (var i = 0; i < chks.length; i++) {
        if (chks[i].checked) {
            allUnchecked = false;
            for (var j = 0; j < pins.length; j++) {
                for (key in pins[j].features) {
                    if (key == chks[i].value) {
                        if (pins[j].features[key]) {
                            tempShops[counter] = pins[j];
                            counter++;
                        }
                    }
                }
            }
        }
    }

    if (allUnchecked) 
    {
        if ($("#sltStarSearch").val() == "0") {
            pinPool = shopPins;
        }
        else 
        {
            pinPool = pins;
        }
        for (var i = 0; i < pins.length; i++) {
            pins[i].marker.setMap(map);
        }
        return true;
    }
    else 
    {
        pinPool = tempShops;
        for (var i = 0; i < tempShops.length; i++) {
            tempShops[i].marker.setMap(map);
        }
    }
}

function checkIfExists(arrayElement, el) {
    var found = false;
    for (var i = 0; i < arrayElement.length; i++) {
        if (arrayElement[i] == el) {
            found = true;
            break;
        }
    }
    return found;
}

function loadPoints(city) {
    var url = root + applicationUrl + '/getpins/' + city;
    $.getJSON(url, {}, function (jsonPins) {
        for (var i = 0; i < jsonPins.length; i++) {
            var pin = jsonPins[i];

            if (pin.PinType == "Asset") {
                var shopIcon = new google.maps.MarkerImage();
                shopIcon.url = fullRoot + "content/images/" + applicationUrl + "/location.png";
                shopIcon.scaledSize = new google.maps.Size(25, 30);
                shopIcon.anchor = new google.maps.Point(6, 20);

                var latLng = new google.maps.LatLng(pin.Location.Latitude, pin.Location.Longitude);
                var marker1 = new google.maps.Marker({
                    position: latLng,
                    map: map,
                    draggable: false,
                    title: pin.Name,
                    icon: shopIcon,
                    visible: true
                });

                var shop = new Object();
                shop.name = pin.Name;
                shop.slug = pin.Slug;
                shop.rating = pin.Rating;
                shop.assetId = pin.AssetId;


                shop.features = new Array();

                for (key in pin.Features) {
                    shop.features[key] = pin.Features[key];
                }

                shop.marker = marker1;
                shopPins[shopCounter] = shop;
                shopCounter++;
                marker1.setMap(map);

                google.maps.event.addListener(marker1, 'click', function () {
                    //find the one we are looking for
                    for (var i = 0; i < shopPins.length; i++) {
                        if (shopPins[i].marker == this) {
                            loadShopDetails(shopPins[i].slug, shopPins[i].assetId);
                        }
                    }
                });
            }
            else if (pin.PinType == "Region") {
                var cityIcon = new google.maps.MarkerImage();
                cityIcon.url = fullRoot + "content/images/" + applicationUrl + "/region.png";
                cityIcon.scaledSize = new google.maps.Size(25, 30);
                cityIcon.anchor = new google.maps.Point(6, 20);

                var latLng = new google.maps.LatLng(pin.Location.Latitude, pin.Location.Longitude);
                var marker = new google.maps.Marker({
                    position: latLng,
                    map: map,
                    draggable: false,
                    title: pin.Name,
                    icon: cityIcon,
                    visible: true
                });

                var city = new Object();
                city.assetId = pin.AssetId;
                city.slug = pin.Slug;
                city.marker = marker;
                cityPins[cityCounter] = city;
                cityCounter++;
                marker.setMap(map);

                google.maps.event.addListener(marker, 'click', function () {
                    for (var i = 0; i < cityPins.length; i++) {
                        if (cityPins[i].marker == this) {
                            window.location = root + applicationUrl + '/' + regionControllerName + '/' + cityPins[i].slug;
                        }
                    }
                });
            }
        }
    });
}
function submitForm() {
    $.post(root + applicationUrl + '/Review/AddReview', $("#frmAddReview").serialize(), function (data) { $("#shopDetails").html(data); });
}

function loadShopDetails(slug, guid) {

    var container = $('#assetIntro');
    var url = root + applicationUrl + '/' + assetControllerName + '/intro/' + slug;
    var selected = $("td.header-left ul.tabs a.selected");
    $("#" + selected.attr('id').replace("Stream", "")).hide();
    container.show();
    container.html(loadingImage);

    $.post(url, function (data) {
        container.html(data);
        convertGallery();
        prepareLoginTooltips();
    });
}

function convertGallery() {
    $(function () { // wait for document to load
        $('input.star').rating(
                {
                    callback: function (value, link) {
                        var ratingForm = $(this).parent();
                        ratingForm.find("#hdnRating").val(value);
                        $.post(root + applicationUrl + '/Rating/AddRating', ratingForm.serialize(), function (data) {
                            $.growlUI('Thank you for sharing the love', 'Have a nice day!');
                        });
                    }
                });
    });
}
var validateSearchForm = function () {
    var encodedValue = $.trim($.URLEncode($("#SearchValue").val()));
    if (encodedValue.length < 1) {
        alert("Please enter a name to search for. (1 character minimum)");
        return false;
    } else {
       
        $("#search_form").attr('action', root + applicationUrl + '/' + locationNamePlural + '/find?q=' + encodedValue);
        return true;
    }
}
