Simplify javascript redirecting functions logic I have javascript file which is ugly but I have not idea how to make it better.
There are many function for redirecting with different number of parameters.
Just few functions are used for other thinks. All this functions will be called from Jquery event.
Like this:

$("#btnSomeButtonID").click(function () { SelectPTO(); });


I would like to simplify logic.
Do you have any ideas for refactoring?
Thank you for your help.

// Require refactoring, all is  public. Need to investigate what is best way.

var pushupdatesList; //public
var pushupdatesListRun = true;//public
var loading = false;//public

// functions with 0 parameters
function StartLoading() {
    if (loading)
        return;

    loading = true;
    $("#loadingbar").show();
}

function StopLoading() {
    loading = false;
    $("#loadingbar").hide();
}

// redirect functions with 0 parameters
function OpenAddCompany() {
    location.href = "/Administration/AddCompany";
}

function OpenAdminTools() {
    StartLoading();
    location.href = "/Administration/GetCompanies";
}

function Logout() {
    StartLoading();
    AbortPushUpdates();
    loading = 0;
    location.href = "/Home/Logoff";
}

function SelectPTO() {
    StartLoading();
    AbortPushUpdates();
    loading = 0;
    location.href = "/Home/SelectEquipmentCollection";
}

function OpenChangePassword() {
    StartLoading();
    loading = 0;
    location.href = "/Home/ChangePassword";
}

// functions with 1 parameter
function OpenGetPTOs(ID) {
    StartLoading();
    loading = 0;
    location.href = "/Administration/GetEquipmentCollections/" + ID;
}

function OpenAddPTO(ID) {
    StartLoading();
    loading = 0;
    location.href = "/Administration/AddEquipmentCollection/" + ID;
}

function OpenGetAccountsForCompany(ID) {
    StartLoading();
    loading = 0;
    location.href = "/Administration/GetAccountsForCompany/" + ID;
}

function OpenAddAccount(ID) {
    StartLoading();
    loading = 0;
    location.href = "/Administration/AddAccount/" + ID;
}

// functions with 2 parameters
function OpenGetAccountsForPTO(ID, CompanyID) {
    StartLoading();
    loading = 0;
    location.href = "/Administration/GetAccountsForEquipmentCollection/" + ID + "?CompanyID=" + CompanyID;
}

function OpenAddAccountToPTO(ID, CompanyID) {
    StartLoading();
    loading = 0;
    location.href = "/Administration/AddAccountToEquipmentCollection/" + ID + "?CompanyID=" + CompanyID;
}

function OpenGetVehiclesForPTO(ID, CompanyID) {
    StartLoading();
    loading = 0;
    location.href = "/Administration/GetEquipmentForCollection/" + ID + "?CompanyID=" + CompanyID;
}

function OpenAddVehicleToPTO(ID, CompanyID) {
    StartLoading();
    loading = 0;
    location.href = "/Administration/AddEquipmentToCollection/" + ID + "?CompanyID=" + CompanyID;
}
The first thing I see which will cut the file at least in half is making a single redirectToPage function that redirects to a given page. You have many copies of the same basic function which currently looks like this

function functionName(params) {
    StartLoading();
    loading = 0;
    location.href = "someURL"
}


When you see a similar block of code like this being repeated multiple times, it's a good time to refactor, (it's debatable, but I would consider refactoring at 2 repetitions, and definitely refactor at 3). Your new function will be

function redirectToPage(url) {
    StartLoading();
    loading = false; // explained below
    location.href = url;
}


You can now erase most of that file, using this one more generic function and passing the urls as arguments.

You are also using loading as a boolean sometimes, and sometimes as an integer. Your code will be easier to reason about if you stick to one. It looks like you're only using loading as a boolean, so I changed loading = 0 to loading = false. You can make this change throughout the rest of the file as well.

This may be enough changes for you. If not, there are a few other functions that you have that redirect to a page but with slightly different functionality, such as calling AbortPushUpdates or not setting the loading variable. You can extend your new redirectToPage function to handle these cases like so

/**
 * Call this function giving the url to redirect to, and other options
 */
function redirectToPage(url, options) {
   if (!options || !options.hasOwnProperty('startLoading') || options.startLoading == true) {
     // default is to run StartLoading()
     StartLoading();
   }

   if (options &amp;&amp; options.hasOwnProperty('abortPushUpdates') &amp;&amp; options.abortPushUpdates) {
     // default is to NOT call AbortPushUpdates
     AbortPushUpdates();
   }

   if (!options || !options.hasOwnProperty('setLoading') || options.setLoading == true) {
     // default is to set the loading variable
     loading = false;
   }

   // Always redirect
   location.href = url;
 }


You can now use this function in any of the following ways

redirectToPage('/Administration/AddAccount/' + accountID);
redirectToPage('/Administration/AddCompany', {setLoading: false, startLoading: false})
redirectToPage('/Home/SelectEquipmentCollection', {abortPushUpdates: true})


Good luck with your refactor, and let me know if you have any follow up questions!