"use strict";
/* global $ */

var utilities = utilities || {};

utilities.isValidUrl = function(url) {
    return (/^(http|https):\/\/[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}?(\/.*)?$/i.test(url))
            || (/^[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}?(\/.*)?$/i.test(url)) && url.indexOf('?') < 0 && url.indexOf('&') < 0;
};

utilities.validateUrlInput = function(inputId) {

    if (!utilities.isValidUrl($("#" + inputId).val())) {
        $("#" + inputId).addClass('ui-state-highlight');
        return false;
    }
    else {
        $("#" + inputId).removeClass('ui-state-highlight');
        return true;
    }

};

utilities.authKey = function() {
    return $("#authKey").text();
};

utilities.getParameterByName = function(name) {

    var match = RegExp('[?&]' + name + '=([^&]*)')
                    .exec(window.location.search);

    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));

};

utilities.createUrl = function(url, newArgs) {

    var oldArgs = utilities.getArgsFromUrl(url);

    var args = '';
    if (oldArgs && oldArgs.length > 0) {
        for (var index = 0; index < oldArgs.length; index++) {
            if (!utilities.isPresent(oldArgs[index].name, newArgs)) {
                if (args.length == 0) {
                    args += "?";
                }
                else {
                    args += "&";
                }
                args += oldArgs[index].name + "=" + oldArgs[index].value;
            }
        }
    }

    for (var index = 0; index < newArgs.length; index++) {
        if (args.length == 0) {
            args += "?";
        }
        else {
            args += "&";
        }
        args += newArgs[index].name + "=" + newArgs[index].value;
    }

    return url.split("?")[0] + args;

}

utilities.getArgsFromUrl = function(url) {

    var splitUrl = url.split("?");
    if (splitUrl.length < 2) {
        return;
    }
    else {
        var rawArgs = splitUrl[1].split("&");
        var args = [];
        for (var index = 0; index < rawArgs.length; index++) {
            var pair = rawArgs[index].split("=");
            var value = pair.length < 2 ? '' : pair[1];
            args[index] = { name: pair[0], value: value};
        }
        return args;
    }

}

utilities.isPresent = function(name, args) {

    var present = false;

    if (args && args.length > 0) {
        for (var index = 0; index < args.length && !present; index++) {
            present = args[index].name == name;
        }
    }

    return present;

}
