dojo.require("dojo.cookie");

/* EXPAND/COLLAPSE MENU */

function CollapseMenu() {
    try {
        //hide menu.
        var tdMenu = document.getElementById("tdMenu");
        SetClassByObject(tdMenu, "leftborder");
        //display show menu image.
        document.getElementById('menu-collapsed').style.display = "";
        document.getElementById('menu-expanded').style.display = "none";
        var menu_lvl1Row = document.getElementById("menu_lvl1Row");
        if (menu_lvl1Row != null) {
            menu_lvl1Row.style.display = "none";
        }
        var menuBody = document.getElementById("menuBody");
        if (menuBody != null) {
            menuBody.style.display = "none";
        }
    }
    catch (e) {
        alert('CollapseMenu: ' + e.message);
    }
}
function ExpandMenu() {
    try {
        //show menu.
        var tdMenu = document.getElementById("tdMenu");
        SetClassByObject(tdMenu, "menu");
        //display menu.
        document.getElementById('menu-expanded').style.display = "";
        document.getElementById('menu-collapsed').style.display = "none";
        var menu_lvl1Row = document.getElementById("menu_lvl1Row");
        if (menu_lvl1Row != null) {
            menu_lvl1Row.style.display = "";
        }
        var menuBody = document.getElementById("menuBody");
        if (menuBody != null) {
            menuBody.style.display = "";
        }
    }
    catch (e) {
        alert('ExpandMenu: ' + e.message);
    }
}

/* FORMATTING */

function FormatCurrency(num) {
    if (num != null) {
        num = num.toString().replace(/\$|\,/g, '');
        if (isNaN(num))
            num = "0";
        sign = (num == (num = Math.abs(num)));
        num = Math.floor(num * 100 + 0.50000000001);
        cents = num % 100;
        num = Math.floor(num / 100).toString();
        if (cents < 10)
            cents = "0" + cents;
        for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++)
            num = num.substring(0, num.length - (4 * i + 3)) + ',' +
    num.substring(num.length - (4 * i + 3));
        return (((sign) ? '' : '-') + '$' + num + '.' + cents);
    }
    else {
        return "";
    }
}

function FormatCurrencyNoSign(num) 
{
    return FormatCurrency(num).replace("$","");
}

function FormatNumber(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function FormatDate(date)
{
    if(date != "")
    {
        return dojo.date.locale.format(date, {selector:'date', datePattern:'MM/dd/yyyy'});
    }
    else
    {
        return "";
    }
}

function FormatName(name) {
    if (name != null) {
        return name.replace("'", "&#146;");
    }
    else {
        return "";
    }
}

function RemoveSpaces(str) {
    while (str.indexOf(" ") > -1) {
        str = str.replace(" ", "");
    }
    return str;
}

function IsNumeric(myText)
{
	return !isNaN(myText);
}

/* DUNBAR CHECK */

function IsDunbar()
{
    var url = location.href.toLowerCase();
    if(url.indexOf("dunbar") > -1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

/* COMMON */

function Show(element, classes) {
    if (element != null) {
        element.setAttribute("class", classes);
        element.setAttribute("className", classes);
    }
}

function Hide(element) {
    if (element != null) {
        element.setAttribute("class", "hide");
        element.setAttribute("className", "hide");
    }
}

function SetClass(elementId, classes) {
    var element = document.getElementById(elementId);
    element.setAttribute("class", classes);
    element.setAttribute("className", classes);
}

function SetClassByObject(element, classes) {
    if (element != null) {
        element.setAttribute("class", classes);
        element.setAttribute("className", classes);
    }
}

function SetDropdownValue(dropdown, value) {
    for (var i = 0; i < dropdown.length; i++) {
        if (dropdown[i].value == value) {
            dropdown[i].selected = true;
        }
    }
}

function Postback() {
    var hiddenFieldId = "hfPostback";
    var hiddenField = dojo.byId("hfPostback");
    if (hiddenField) {
        hiddenField.value = (new Date()).getTime();
        __doPostBack(hiddenFieldId, "");
    }
}

/* QUERYSTRING */

function GetQuerystringValue(name)
{  
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]").toUpperCase();  
    var regexS = "[\\?&]"+name+"=([^&#]*)";  
    var regex = new RegExp( regexS );  
    var results = regex.exec( window.location.href.toUpperCase() );  
    if( results == null )   
    { 
        return "";  
    }
    else {
        var result = results[1];
        while (result.indexOf("%20") > -1) {
            result = result.replace("%20", " ");
        }
        return result;
    }
}

function Encode(x) {
    //ascii -> hex.
    hex = "0123456789ABCDEF";
    almostAscii = ' !"#$%&' + "'" + '()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[' + '\\' + ']^_`abcdefghijklmnopqrstuvwxyz{|}'; 
    r = "";
    for (i = 0; i < x.length; i++) { let = x.charAt(i); pos = almostAscii.indexOf(let) + 32; h16 = Math.floor(pos / 16); h1 = pos % 16; r += hex.charAt(h16) + hex.charAt(h1); };
    return r;
};

function Decode(x) {
    //hex -> ascii.
    hex = "0123456789ABCDEF";
    almostAscii = ' !"#$%&' + "'" + '()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[' + '\\' + ']^_`abcdefghijklmnopqrstuvwxyz{|}';
    r = "";
    for (i = 0; i < x.length; i++) { let1 = x.charAt(2 * i); let2 = x.charAt(2 * i + 1); val = hex.indexOf(let1) * 16 + hex.indexOf(let2); r += almostAscii.charAt(val - 32); };
    return r;
};

/* AJAX GRID */

function CheckIfGridLoaded() {
    window.setTimeout("IsGridLoaded();", 700);
}

function IsGridLoaded() {//TODO: why doesn't grid load on startup in IE sometimes??
    try {//check if grid loaded declaratively.
        var gridWidget = dijit.byId("gridWidget");
        gridWidget.IsBusy();
    }
    catch (exc) {//grid didn't load declaratively.
        try {//try to load grid programmatically.
            var divWidget = dojo.byId("gridWidget");
            CreateGrid(divWidget);
        }
        catch (exc) {//grid didn't load programmatically, wait 100ms and try again.
            window.setTimeout("IsGridLoaded();", 100);
        }
    }
}

function SetGridCookie(cookieName, name, value) {
    value = String(value);
    var cookie = dojo.cookie(cookieName);
    var gridCriteria = cookie;
    if (cookie == null) {
        gridCriteria = "";
    }
    if (gridCriteria.indexOf(name + ":") > -1) {
        var startPos = gridCriteria.indexOf(name + ":") + name.length + 1;
        var segment = gridCriteria.substring(startPos);
        var endPos = segment.indexOf(";");
        var originalValue = segment.substring(0, endPos);
        gridCriteria = gridCriteria.replace(name + ":" + originalValue, name + ":" + value);
    }
    else {
        gridCriteria += name + ":" + value + ";";
    }
    dojo.cookie(cookieName, gridCriteria);
}

function GetGridCookie(cookieName, name) {
    var cookie = dojo.cookie(cookieName);
    var gridCriteria = cookie;
    if (cookie != null && gridCriteria.indexOf(name + ":") > -1) {
        var startPos = gridCriteria.indexOf(name + ":") + name.length + 1;
        var segment = gridCriteria.substring(startPos);
        var endPos = segment.indexOf(";");
        var value = segment.substring(0, endPos);
        return value;
    }
    return null;
}

function FormatGridStatus(isActive) {
    if (isActive) {
        return "Active";
    }
    else {
        return "Inactive";
    }
}

function GridError(error) {
    var errorMessage = error.get_message();
    console.debug("ASP.NET Ajax Extensions error: " + errorMessage);
    PageMethods.LogException(errorMessage, dojo.hitch(this, this.GridErrorLogged));
    if (errorMessage.indexOf("Authentication failed") > -1) {
        Postback();
    }
}

function GridErrorLogged() {
    console.debug("ASP.NET Ajax Extensions error logged!");
}
