var Va = Va || {};
Va.Crm = Va.Crm || {};
Va.Crm.Scripts = Va.Crm.Scripts || {};
Va.Crm.Scripts.Utility = Va.Crm.Scripts.Utility || {};

Va.Crm.Scripts.Utility.getPageCache = 0;
Va.Crm.Scripts.Utility.getPage = function () {
    if (Va.Crm.Scripts.Utility.getPageCache === 0) {
        var search = location.search;
        var url = location.href;
        var page = "";
        if (search === "") {
            var pos = url.toLowerCase().indexOf("%3f");
            if (pos > -1) {
                search = "?" + decodeURIComponent(url.substring(pos + 3));
                page = url.substring(0, pos);
                url = page + search;
            }
        } else {
            page = url.substring(0, url.indexOf("?"));
        }
        Va.Crm.Scripts.Utility.getPageCache = {};
        Va.Crm.Scripts.Utility.getPageCache.page = page;
        Va.Crm.Scripts.Utility.getPageCache.search = search;
        Va.Crm.Scripts.Utility.getPageCache.url = url;
    }
    return Va.Crm.Scripts.Utility.getPageCache;
}

Va.Crm.Scripts.Utility.buildURL = function (baseUrl, querystring) {
    var url = baseUrl;
    if (url === "") {
        url = Va.Crm.Scripts.Utility.getPage().url;
    }
    if (querystring.length > 0) {
        if (querystring[0] !== "?") {
            url = url + "?";
        }
        url = url + querystring;
    }
    return url;
}

Va.Crm.Scripts.Utility.getUrlParamsCache = 0;
Va.Crm.Scripts.Utility.getUrlParams = function () {
    if (Va.Crm.Scripts.Utility.getUrlParamsCache === 0) {
        var result = {};
        var search = Va.Crm.Scripts.Utility.getPage().search;
        var pArr = search.substr(1).split("&");
        
        for (var i = 0; i < pArr.length; i++) {
            var p = pArr[i].split('=');
            if (p[0].toLowerCase() != "data") {
                result[p[0].toLowerCase()] = decodeURIComponent(p[1]);
            } else {
                var dResult = {};
                var data = p[1];
                if (p.length>2) { 
                    data = "";
                    for (var n=1; n < p.length; n=n+2) {
                        data = data + p[n] + "=" + p[n+1] + "&";
                    }
                    data = data.substring(0,data.length-1);
                }
                var dArr = decodeURIComponent(data).split("&");
                for (var k = 0; k < dArr.length; k++) {
                    var d = dArr[k].split('=');
                    dResult[d[0].toLowerCase()] = d[1];
                }
                result["data"] = dResult;
            }
        }
        Va.Crm.Scripts.Utility.getUrlParamsCache = result;
    }
    return Va.Crm.Scripts.Utility.getUrlParamsCache;
}

Va.Crm.Scripts.Utility.getQueryParameter = function (name) {
    name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
    var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
    results = regex.exec(Va.Crm.Scripts.Utility.getPage().search);  //was location.search
    return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

Va.Crm.Scripts.Utility.getDataParameter = function (dataValue) {
    var dataParameter = null;
    if (dataValue != "") {
        dataParameter = {};
        var vals = new Array();
        vals = decodeURIComponent(dataValue).split("&");
        for (var i in vals) {
            vals[i] = vals[i].replace(/\+/g, " ").split("=")
        }
        for (var i in vals) {
            dataParameter[vals[i][0]] = vals[i][1];
        }
    }
    return dataParameter;
}

Va.Crm.Scripts.Utility.dateFilter = function (date) {
    var monthString;
    var rawMonth = (date.getMonth() + 1).toString();
    if (rawMonth.length == 1) {
        monthString = "0" + rawMonth;
    }
    else { monthString = rawMonth; }

    var dateString;
    var rawDate = date.getDate().toString();
    if (rawDate.length == 1) {
        dateString = "0" + rawDate;
    }
    else { dateString = rawDate; }


    var dateFilter = "datetime\'";
    dateFilter += date.getFullYear() + "-";
    dateFilter += monthString + "-";
    dateFilter += dateString;
    dateFilter += "T00:00:00Z\'";
    return dateFilter;
}

Va.Crm.Scripts.Utility.dateTimeFilter = function (date) {
    var monthString;
    var rawMonth = (date.getMonth() + 1).toString();
    if (rawMonth.length == 1) {
        monthString = "0" + rawMonth;
    }
    else { monthString = rawMonth; }

    var dateString;
    var rawDate = date.getDate().toString();
    if (rawDate.length == 1) {
        dateString = "0" + rawDate;
    }
    else { dateString = rawDate; }


    var dateFilter = "datetime\'";
    dateFilter += date.getFullYear() + "-";
    dateFilter += monthString + "-";
    dateFilter += dateString;
    dateFilter += "T" + date.getHours() + ":";
    dateFilter += date.getMinutes() + ":";
    dateFilter += date.getSeconds();
    dateFilter += "Z\'";
    return dateFilter;
}

Va.Crm.Scripts.Utility.getEntityTypeCode = function (entityName) {
    try {
        var command = new RemoteCommand("LookupService", "RetrieveTypeCode");
        command.SetParameter("entityName", entityName);
        var result = command.Execute();
        if (result.Success && typeof result.ReturnValue == "number") {
            return result.ReturnValue;
        }
        else {
            return null;
        }
    }
    catch (ex) {
        return null;
    }
}

Va.Crm.Scripts.Utility.formatTelephone = function (inPhone) {
    var phone = inphone;
    var ext = '';
    var result;
    if (phone != null) {
        if (0 != phone.indexOf('+')) {
            if (1 < phone.lastIndexOf('x')) {
                ext = phone.slice(phone.lastIndexOf('x'));
                phone = phone.slice(0, phone.lastIndexOf('x'));
            }
            phone = phone.replace(/[^\d]/gi, '');
            result = phone;
            if (7 == phone.length) {
                result = phone.slice(0, 3) + '-' + phone.slice(3)
            }
            if (10 == phone.length) {
                result = '(' + phone.slice(0, 3) + ') ' + phone.slice(3, 6) + '-' + phone.slice(6);
            }
            if (11 == phone.length) {
                result = phone.slice(0, 1) + ' (' + phone.slice(1, 4) + ') ' + phone.slice(4, 7) + '-' + phone.slice(7);
            }
            if (0 < ext.length) {
                result = result + ' ' + ext;
            }
            return result;
        }
    }
    return "";
}