﻿Number.prototype.toFixedRound = function(n) {
    if (!n) n = 0;
    var N = this;
    N = Math.round(N * Math.pow(10, n));
    N /= Math.pow(10, n);
    return (N.toFixed(n));
}

function calculateDistanceFromGeo(sLatIn, sLonIn, eLatIn, eLonIn) {
    var dLat = convertDegreesToRadians(eLatIn - sLatIn);
    var dLon = convertDegreesToRadians(eLonIn - sLonIn);
    var a = Math.sin(dLat / 2) * Math.sin(dLat / 2) + Math.cos(convertDegreesToRadians(sLatIn)) * Math.cos(convertDegreesToRadians(eLatIn)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);
    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    var test = convertKilometersToMiles(6371 * c);
    return convertKilometersToMiles(6371 * c);
}

function catchEvent(e) {
    e.preventDefault();
    e.stopPropagation();
}

function convertDegreesToRadians(dIn) {
    return dIn * Math.PI / 180;
}

function convertKilometersToMiles(kmIn) {
    return kmIn * 0.621371192;
}

function convertMilesToKilometers(mIn) {
    return mIn * 1.609344;
}

function formatURL(urlIn) {
    if (!/^http:\/\/.*$/.test(urlIn))
        return $.validator.format("http://{0}", urlIn);
    else
        return urlIn;
}

function getPhoneNumberDigitsUS(phoneIn) {
    phone = phoneIn.replace(/[\D]/g, '');

    if (/^[\d]{10}$/.test(phone))
        return '+1' + phone;
    else
        return phone;
}

function getPhoneNumberFormattedUS(phoneIn) {
    phone = phoneIn.replace(/[\D]/g, '');

    if (/^[\d]{10}$/.test(phone))
        return '1 (' + phone.substring(0, 3) + ') ' + phone.substring(3, 6) + '-' + phone.substring(6, 10);
    else
        return phone;
}

function isValidAirportCode(airportCodeIn) {
    return /(^\S{3}$)/.test(airportCodeIn);
}

function isValidCityState(cityIn, stateIn) {
    var valid = /(^[A-Z]{2}$)/i.test(stateIn);
    return valid ? valid : /(^[\D]+$)/i.test(cityIn) && valid;
}

function isValidZip(zipIn) {
    return /(^\d{5}$)|(^\d{5}-\d{4}$)/.test(zipIn);
}

function isViewOnDocument(elmIn) {
    var docTop = $document.scrollTop();
    var docBtm = docTop + $document.height();
    var elmTop = elmIn.offset().top;
    var elmBtm = elmTop + elmIn.height();

    return ((elmBtm >= docTop) && (elmTop <= docBtm)
      && (elmBtm <= docBtm) && (elmTop >= docTop));
}
