$(function () {
    $("input#Date").datepicker({ maxDate: '+0d' });

    $("input#CityName").autocomplete({
        source: "/City/Autocomplete",
        minLength: 2
    });
    
    $("input#EmployeeName, input#Assigned, input#UserFullName").autocomplete({
        source: "/User/Autocomplete",
        minLength: 2
    });
    
    $("form select#Year").change(function () {
        $.getJSON('/Log/GetValidLogMonths', { year: $(this).val() }, function (months) {
            var options = '<option>Select Month</option>';
            for (var i = 0; i < months.length; i++) {
                options += '<option>' + months[i] + '</option>';
            }
            $("form select#Month").html(options);
        });
    });
    
    $("input#ModelYear,input#Price,input#VehicleId,input#EndOdometer,input#GasPurchased").numeric();
    
    $(".report-miles").append('&nbsp;<span class="muted">&#9652;</span>').each(function () {
        var content = $(this).next('.report-calculation');
        $(this).qtip({
            content: content,
            hide: {
                fixed: true,
                delay: 1000
            },
            style: {
                width: 520,
                classes: "qtip-light"
            },
            position: {
                my: "top right",
                at: "bottom left"
            },
        });
    });

    // add popup for span titles
    $('span[title]').append('&nbsp;<span class="muted">&#9652;</span>').qtip({
        content: {
            text: false // Use each elements title attribute
        },
        style: { classes: "qtip-light" } // Give it some style
    });

    $(".miles-unknown").addClass('label label-warning').append('&nbsp;<span class="muted">&#9652;</span>')
        .each(function () {
            $(this).qtip({
                content: "No previous log for this vehicle",
                style: {
                    classes: "qtip-red"
                }
            });
        });
});

// add recent logs to a div if it exists
$(function () {
    var $recentLogs = $("#RecentLogs");
    if ($recentLogs.length > 0) {
        $.ajax({
            url: "/CreateLog/RecentLogs",
            success: function (data) {
                $recentLogs.append(data);
            }
        });
    }
});

$(function() {
    // move checkbox elements into their labels
    $('label[for]').each(function() {
        var $label = $(this);
        var $for = $label.attr('for');
        if ($for.length > 0) {
            var $input = $('input#' + $for + ',input[name="' + $for + '"]');
            if ($input.filter(':checkbox').length > 0) {
                $input.prependTo($label);
                $label.addClass('checkbox');
            }
        }
    });
});

// Add active class to nav
$(function() {
    var idNavActiveRegex = {
        'log-nav': /\/log/i,
        'vehicle-nav': /\/vehicle/i,
        'user-nav': /\/user/i
    };
    $.each(idNavActiveRegex, function (id, regex) {
        if (regex.test(document.URL)) {
            $("#" + id).addClass('active');
        }
    });
});

$(function () {
    var textToIcon = {
        'Edit': 'edit', 
        'Filter': 'filter',
        'Details' : 'zoom-in',
        'Delete': 'trash',
        'Add': 'plus',
        'Export': 'download',
        'Driver Mileage': 'user',
        'Vehicle Mileage': 'car'
    };
    $.each(textToIcon, function(text, icon) {
        $("a:contains('" + text + "')")
            .prepend('<i class="icon-' + icon + '" /> ');
    });

    $(".navbar-inverse a[title='Manage']")
        .prepend('<i class="icon-user icon-white" /> ');
});

// Convert MVC3 WebGrid paging to Bootstrap
$(function() {
    var $paging = $('table.table tfoot tr td');

    var $currentPage =
        $paging.contents()
            .filter(function () { return this.nodeType == 3 && this.length != 1; });
    var $otherPages = $('a', $paging);

    if ($paging.length == 1 && $otherPages.length > 0) {
        $currentPage.wrap('<li class="active"><a href="#">');
        $otherPages.wrap('<li>');
        $('li', $paging).wrapAll('<div class="pagination"><ul>');
    }
});

// auto complete email address based on username
$(function () {
    $('.create-user input#FullName').keyup(function () {
        var fullName = $(this).val();
        var names = fullName.split(' '); ///[a-z().]+(\s+[a-z().]+)+/i.test(fullName)
        if (names.length > 1) {
            var username = names[0][0] + names[names.length - 1];
            username = username.toLowerCase();
            $('.create-user input#Username').val(username);
            $('.create-user input#Email').val(username + "@ethra.org");
        }
    });
    
    $('.create-user input#Username').keyup(function () {
        $('.create-user input#Email').val($(this).val() + "@ethra.org");
    });
});

$(function() {
    // add qtip
    $("a.qtip-modal").each(function () { bindQtipModal($(this)); });
    
    function bindQtipModal(element) {

        element.click(function() { return false; });

        element.append('&nbsp;<span class="muted">&#9652;</span>');

        element.qtip({
            content: {
                ajax: {
                    url: element.attr('href')
                },
                text: "<p class=\"loading\">...</p>"
            },
            hide: {
                fixed: true,
                delay: 500
            },
            style: {
                classes: 'qtip-light qtip-shadow',
                width: 300
            },
            position: {
                viewport: $(window)
            }
        });
    }
});

/*
 * Form Validation
 * This script will set Bootstrap error classes when form.submit is called.
 * The errors are produced by the MVC unobtrusive validation.
 */
$(function () {
    var errorSelector = 'span.field-validation-error, .input-validation-error';
    $('form').submit(function () {
        $(this).find('div.control-group').each(function () {
            if ($(this).find(errorSelector).length == 0) {
                $(this).removeClass('error');
            }
        });

        if (!$(this).valid()) {
            $(this).find('div.control-group').each(function () {
                if ($(this).find(errorSelector).length > 0) {
                    $(this).addClass('error');
                }
            });
        }
    });
    $('form').each(function () {
        $(this).find('div.control-group').each(function () {
            if ($(this).find(errorSelector).length > 0) {
                $(this).addClass('error');
            }
        });
    });

    //Update that validator
    if ($.validator === undefined)
        return;
    
    $.validator.setDefaults({
        highlight: function(element) {
            if (element.type === 'radio') {
                this.findByName(element.name).closest(".control-group").addClass("error");
            } else {
                $(element).closest(".control-group").addClass("error");
            }
        },
        unhighlight: function(element) {
            if (element.type === 'radio') {
                this.findByName(element.name).closest(".control-group").removeClass("error");
            } else {
                $(element).closest(".control-group").removeClass("error");
            }
        }
    });
});

/* End Form Validation */

