// Function to add banner cycle
function add_banner_cycle() {
    var banner = $('#banner-container');
    if(banner.length > 0) {
        var pager = $('#banner-pager');
        var items = [];
        pager.find('.item').each(function() {
            items.push($(this));
        });
        pager.empty();
        banner.cycle({
            activePagerClass: 'active',
            pager: '#banner-pager',
            pagerAnchorBuilder: function(idx) {
                return items[idx];
            }
        });
    }
}

// Function to add blog feed (with fade-in animation)
function add_blog_feed() {
    var blog = $('.wp-blog');
    if(blog.length > 0 ) {
        blog.each(function() {
            var show = (blog.data('show')) ? blog.data('show') : 5;
            var length = (blog.data('length')) ? blog.data('length') : 100;
            blog.css({
                opacity: 0
            });
            $.ajax({
                url: '/resources/ajax/atom.php?show=' + show + '&length=' + length,
                success: function(feed) {
                    blog.html(feed);
                    blog.animate({
                        opacity: 1
                    });
                }
            });
        });
    }
}

// Function to add validation to forms with class "validate", uses inputs with classes "required" and "email"
function add_validation() {
    var form_elem = $('.validate');
    form_elem.each(function() {
        var req = $(this).find('.required');
        req.each(function() {
            var req_id = $(this).attr('id');
            var req_label = $('label[for="' + req_id + '"]');
            var error = $('<span id="error-' + req_id + '" class="error"> - required</span>');
            if(req_label.length > 0) {
                req_label.append(error);
            } else {
                $(this).before(error);
            }
            error.before(' ');
            error.hide();
        });
        $(this).submit(function(event) {
            var count = 0;
            req.each(function() {
                var message = $('#error-' + $(this).attr('id'));
                if($(this).val() === '') {
                    message.show();
                    count++;
                } else if($(this).hasClass('email')) {
                    var x = /[\(\)<\>\,\;\:\\\"\[\]]/;
                    var y = /^[^@]+@[^@.]+\.[^@]*\w\w$/;
                    if($(this).val().match(x) || (!y.test($(this).val()))) {
                        message.text(' - invalid email address');
                        message.show();
                        count++;
                    } else {
                        message.hide();
                    }
                } else {
                    message.hide();
                }
            });
            if(count > 0) {
                event.preventDefault();
            }
        });
    });
}

// Function to add map(s)
function add_map() {
    var maps = $('.map');
    maps.each(function(index) {
        var map_latlon = $(this).data('latlon').split(',');
        var latlon = new google.maps.LatLng(map_latlon[0], map_latlon[1]);
        var opts = {
            zoom: 15,
            center: latlon,
            mapTypeControl: false,
            streetViewControl: false,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var map = new google.maps.Map($(this).get(0), opts);
        var mark = new google.maps.Marker({
            position: latlon,
            title: 'Stowe Family Law'
        });
        mark.setMap(map);
    });
}

// Functions to run on load
$(document).ready(function() {
    add_banner_cycle();
    add_blog_feed();
    add_validation();
    add_map();
});

