Files
MileageTraker/Web/Scripts/Shared/Site.js
T
2014-02-02 10:19:02 -05:00

250 lines
7.2 KiB
JavaScript

$(function () {
$("input#Date").datepicker({ maxDate: '+0d' });
$("input#CityName").autocomplete({
source: "/City/Autocomplete",
minLength: 2
});
$("input#EmployeeName, input#Assigned, input#UserFullName, input#UserName").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 addButtonIcons () {
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 + "'):not(:has(i))")
.prepend('<i class="icon-' + icon + '" /> ');
});
$(".navbar-inverse a[title='Manage']:not(:has(i))")
.prepend('<i class="icon-user icon-white" /> ');
}
$(function () {
addButtonIcons();
});
// 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 */