var mapData;
var cardData;
var searchModel;
var map;


$(document).ready(function () {
    $("div[data-url='" + window.location.pathname + "']").addClass("active");
    $("div[data-url='" + window.location.pathname + "']").prepend("<a name='active'></a>")
    setTimeout(ScrollToActive, 500);
    $("li.has-child").addClass("dropdown").removeClass("has-child");
    $("li.dropdown ul").addClass("dropdown-menu");
    $("ul.list-group.sidebar-nav-v1 li").addClass("list-group-item").addClass("list-toggle");

    
});

$(document).on("click", "#ToggleMap", function () {
    if ($(this).is(":checked")) {
        $(".school-cards").hide();
        $("#map").show();       
        LayoutMap();
        $(this).next().removeClass("off");
        $(this).next().addClass("on");
    } else {
        $("#map").hide();
        $(".school-cards").show().css("opacity", "1.0");
        if (cardData == undefined) {
            DoMasonary();
        }
        else{
            LayoutCards();
        }
        $(this).next().removeClass("on");
        $(this).next().addClass("off");
        //var $container = $('.grid-boxes');

        //var gutter = 30;
        //var min_width = 300;
        //$container.imagesLoaded(function () {
        //    $container.masonry({
        //        itemSelector: '.grid-boxes-in',
        //        gutterWidth: gutter,
        //        isAnimated: true,
        //        columnWidth: function (containerWidth) {
        //            var box_width = (((containerWidth - 2 * gutter) / 3) | 0);

        //            if (box_width < min_width) {
        //                box_width = (((containerWidth - gutter) / 2) | 0);
        //            }

        //            if (box_width < min_width) {
        //                box_width = containerWidth;
        //            }

        //            $('.grid-boxes-in').width(box_width);

        //            return box_width;
        //        }
        //    });
        //});
    }
})

$(document).on("click", "button.search", function (e) {
    e.preventDefault();
    var form = $("#SchoolSearchForm");
    var postData = $(form).serializeArray();

    $.ajax(
    {
        url: $(form).attr("action"),
        type: "POST",
        data: postData,

        success: function (data, textStatus, jqXHR) {
            if (data.Success) {
                mapData = data.Data;
                cardData = data.View;
                searchModel = data.SearchModel;

                $(".search-count").text(mapData.length + " results");

                // Set post code
                $("#PostCode").val("");
                if (data.SearchModel.PostCode != undefined && data.SearchModel.PostCode != null && data.SearchModel.PostCode.length > 0) {
                    $(".location-string").text(data.SearchModel.Location + ", " + data.SearchModel.PostCode)
                }

                //Layout map
                if ($("#map").css("display") == "block") {
                    LayoutMap();
                }
                else{
                    // Add the cards
                    LayoutCards();
                }
            } else {
                ErrorMessage(data.Message);
            }
        },
        error: function (jqXHR, textStatus, errorThrown) {
            ErrorMessage(errorThrown);
        }
    });
});

function LayoutCards() {
    $(".school-cards").children().remove();
    $(".school-cards").append(cardData);
    DoMasonary();
}

function LayoutMap() {

    var myLatlng = new google.maps.LatLng(searchModel == undefined ? "-33.873651" : searchModel.Latitude, searchModel == undefined ? "151.20688960000007" : searchModel.Longitude);
    var mapOptions = {
        zoom: 12,
        center: myLatlng,
        scrollwheel: false,
    };

    map = new google.maps.Map(document.getElementById('map'), mapOptions);

    AddMarkers();
}

$(document).on("click", ".search-criteria", function () {
    var target = "#" + $(this).data("target");
    var current = Number($(target).val());
    if ($(this).is(":checked")) {
        current += Number($(this).data("value"));
    } else {
        current -= Number($(this).data("value"));
    }
    $(target).val(current);
});

$('.tab-v1 a').click(function (e) {
    e.preventDefault()
    $(this).tab('show')
})

function ScrollToActive() {
    var target = $('a[name=active]');    
    if (target.length) {
        $('html,body').animate({
            scrollTop: target.offset().top
        }, 1000);
        return false;
    }
}

$(function () {
    $('a[href*=#]:not([href=#])').click(function () {
        if ($(this).data("toggle")!=undefined) { return;}
        if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
            var target = $(this.hash);
            target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
            if (target.length) {
                $('html,body').animate({
                    scrollTop: target.offset().top
                }, 1000);
                return false;
            }
        }
    });
});

function InitTypeAheadData(selector, method, minlength) {
    $(selector).typeahead({
        source: function (query, process) {
            return $.get(method, { query: query }, function (data) {
                return process(data.options);
            });
        }
        , items: 100
        , minLength: minlength
    });
}

function AddMarkers() {
    
    var markers = [];
    for (var i = 0; i < mapData.length; i++) {
        
        var schoolId = 'School_' + mapData[i].Id;
        markers[i] = new google.maps.Marker({
            map: map,            
            title: mapData[i].Name,
            place: {location:{lat: mapData[i].Latitude, lng: mapData[i].Longitude}, placeId: schoolId}
        });

        google.maps.event.addListener(markers[i], 'click', function () {
            var infowindow = new google.maps.InfoWindow({
                content: "<div class='infowindow'>" + $("#" + this.place.placeId)[0].innerHTML + "</div>"
            });
            infowindow.open(map, this);
        });
    }
}

var SchoolsSearch = function () {

    return {

        //Basic Map
        initMap: function () {
            var map;
            $(document).ready(function () {
                
                var myLatlng = new google.maps.LatLng(-33.873651000000000000, 151.206889600000070000);
                var mapOptions = {
                    zoom: 12,
                    center: myLatlng,
                    scrollwheel: false,
                };

                map = new google.maps.Map(document.getElementById('map'), mapOptions);

                //map = new GMaps({
                //    div: '#map',
                //    scrollwheel: false,
                //    lat: -33.873651000000000000,
                //    lng: 151.206889600000070000,
                //    zoom: 12
                //});
                $.getJSON("/Maps", function (data) {
                    if (data.Success) {
                        mapData = data.Data;
                        AddMarkers();
                        $("#map").hide();
                        $(".school-cards").show();
                    } else {
                        ErrorMessage(data.Message);
                    }
                });

               
            });
        },
      
        //Panorama Map
        initPanorama: function () {
            var panorama;
            $(document).ready(function () {
                panorama = GMaps.createPanorama({
                    el: '#panorama',
                    lat: -33.876865,
                    lng: 151.208615
                });
            });
        },

        initTypeahead: function(){
            InitTypeAheadData(".postcode", "/Maps/PostcodeSearch", 2);
        }

    };
}();
/*
 * Template Name: Unify - Responsive Bootstrap Template
 * Description: Business, Corporate, Portfolio, E-commerce and Blog Theme.
 * Version: 1.7
 * Author: @htmlstream
 * Website: http://htmlstream.com
*/

var App = function () {
    //Fixed Header
    function handleHeader() {
         jQuery(window).scroll(function() {
            if (jQuery(window).scrollTop()>100){
                jQuery(".header-fixed .header-sticky").addClass("header-fixed-shrink");
            }
            else {
                jQuery(".header-fixed .header-sticky").removeClass("header-fixed-shrink");
            }
        });
    }

    //Header Mega Menu
    function handleMegaMenu() {
        jQuery(document).on('click', '.mega-menu .dropdown-menu', function(e) {
            e.stopPropagation();
        })
    }

    //Search Box (Header)
    function handleSearch() {    
        jQuery('.search').click(function () {
            if(jQuery('.search-btn').hasClass('fa-search')){
                jQuery('.search-open').fadeIn(500);
                jQuery('.search-btn').removeClass('fa-search');
                jQuery('.search-btn').addClass('fa-times');
            } else {
                jQuery('.search-open').fadeOut(500);
                jQuery('.search-btn').addClass('fa-search');
                jQuery('.search-btn').removeClass('fa-times');
            }   
        }); 
    }

    //Search Box v1 (Header v5)
    function handleSearchV1() {
        jQuery('.header-v5 .search-button').click(function () {
            jQuery('.header-v5 .search-open').slideDown();
        });

        jQuery('.header-v5 .search-close').click(function () {
            jQuery('.header-v5 .search-open').slideUp();
        });

        jQuery(window).scroll(function(){
          if(jQuery(this).scrollTop() > 1) jQuery('.header-v5 .search-open').fadeOut('fast');
        });
    }

    //Sidebar Navigation Toggle
    function handleToggle() {
        jQuery('.list-toggle').on('click', function() {
            jQuery(this).toggleClass('active');
        });

        /*
        jQuery('#serviceList').on('shown.bs.collapse'), function() {
            jQuery(".servicedrop").addClass('glyphicon-chevron-up').removeClass('glyphicon-chevron-down');
        }

        jQuery('#serviceList').on('hidden.bs.collapse'), function() {
            jQuery(".servicedrop").addClass('glyphicon-chevron-down').removeClass('glyphicon-chevron-up');
        }
        */
    }

    //Equal Height Columns    
    function handleEqualHeightColumns() {
        var EqualHeightColumns = function () {            
            $(".equal-height-columns").each(function() {
                heights = [];              
                $(".equal-height-column", this).each(function() {
                    $(this).removeAttr("style");
                    heights.push($(this).height()); // write column's heights to the array
                });
                $(".equal-height-column", this).height(Math.max.apply(Math, heights)); //find and set max
            });
        }

        EqualHeightColumns();        
        $(window).resize(function() {            
            EqualHeightColumns();
        });
        $(window).load(function() {
            EqualHeightColumns("img.equal-height-column");
        });
    }    

    //Hover Selector
    function handleHoverSelector() {
        $('.hoverSelector').on('hover', function(e) {        
            $('.hoverSelectorBlock', this).toggleClass('show');
            e.stopPropagation();            
        });
    }    

    //Bootstrap Tooltips and Popovers
    function handleBootstrap() {
        /*Bootstrap Carousel*/
        jQuery('.carousel').carousel({
            interval: 15000,
            pause: 'hover'
        });

        /*Tooltips*/
        jQuery('.tooltips').tooltip();
        jQuery('.tooltips-show').tooltip('show');      
        jQuery('.tooltips-hide').tooltip('hide');       
        jQuery('.tooltips-toggle').tooltip('toggle');       
        jQuery('.tooltips-destroy').tooltip('destroy');       

        /*Popovers*/
        jQuery('.popovers').popover();
        jQuery('.popovers-show').popover('show');
        jQuery('.popovers-hide').popover('hide');
        jQuery('.popovers-toggle').popover('toggle');
        jQuery('.popovers-destroy').popover('destroy');
    }

    return {
        init: function () {
            handleBootstrap();
            handleSearch();
            handleSearchV1();
            handleToggle();
            handleHeader();
            handleMegaMenu();
            handleHoverSelector();
            handleEqualHeightColumns();
        },

        //Scroll Bar 
        initScrollBar: function () {
            jQuery('.mCustomScrollbar').mCustomScrollbar({
                theme:"minimal",
                scrollInertia: 300,
                scrollEasing: "linear"
            });
        },

        //Counters 
        initCounter: function () {
            jQuery('.counter').counterUp({
                delay: 10,
                time: 1000
            });
        },

        //Parallax Backgrounds
        initParallaxBg: function () {
             jQuery(window).load(function() {
                jQuery('.parallaxBg').parallax("50%", 0.2);
                jQuery('.parallaxBg1').parallax("50%", 0.4);
            });
        },

        //Animate Dropdown
        initAnimateDropdown: function () {
            function MenuMode() {
                jQuery('.dropdown').on('show.bs.dropdown', function(e){
                    jQuery(this).find('.dropdown-menu').first().stop(true, true).slideDown();
                });
                jQuery('.dropdown').on('hide.bs.dropdown', function(e){
                    jQuery(this).find('.dropdown-menu').first().stop(true, true).slideUp();
                });
            }
         
            jQuery(window).resize(function(){
                if (jQuery(window).width() > 768) {
                    MenuMode();
                }
            });

            if (jQuery(window).width() > 768) {
                MenuMode();
            }
        },

    };

}();
