﻿function ajaxRequest(data, url, methodName) {
    var d = "";
    var responseText = "";
    var _textStatus;
    var _error = false;
    $.ajax({
        async: false,
        cache: false,
        contentType: "application/json; charset=utf-8",
        data: data,
        dataType: "json",
        type: "POST",
        url: url + "/" + methodName,
        success: function(data, textStatus) {
            //this; // the options for this ajax request
            //textStatus = "success"
            d = data.d;
            _textStatus = textStatus;
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            //typically only one of textStatus or errorThrown will have info
            //this; // the options for this ajax request
            _error = true;
            responseText = XMLHttpRequest.responseText;
            _textStatus = textStatus;
        }
    });
    return { "d": d, error: _error, "responseText": responseText, "textStatus": _textStatus }
}

function changeSrcFileName(element, fileName) {
    var src = element.attr("src");
    var i = src.lastIndexOf("/");
    if (i == -1) {
        element.attr("src", fileName);
    }
    else {
        src = src.substring(0, i + 1) + fileName;
        element.attr("src", src);
    }
}

function confirmDelete() {
    return confirm('¿Confirma que desea eliminar el registro seleccionado?');
}

function confirmDeleteSelected() {
    return confirm("¿Confirma que desea eliminar los registros seleccionados?");
}

function confirmQuestion(question) {
    return confirm(question);
}

function deleteCookie(name, path, domain) {
    var value = getCookie(name);
    if (value) {
        document.cookie = name + '=' + ((path) ? ';path=' + path : '') + ((domain) ? ';domain=' + domain : '') + ';expires=Thu, 01-Jan-1970 00:00:01 GMT';
    }
}

function existsId(id) {
    var element = $("#" + id);
    return (element.size() > 0 ? true : false);
}

function existsOptionText(id, text) {
    var select = $("#" + id);
    if (select.find("option[text='" + text + "']").size() == 1) {
        return true;
    }
    return false;
}

function existsOptionValue(id, value) {
    var select = $("#" + id);
    if (select.find("option[value='" + value + "']").size() == 1) {
        return true;
    }
    return false;
}

function fix_JQuery_AttributeFilter(value) {
    value2 = value;
    value2 = replace(value2, "\"", "\\\"");
    value2 = replace(value2, "\'", "\\\'");
    return value2;
}

function fix_JQuery_UI_Dialog(HTMLDivElement) {
    //http://www.codeproject.com/Articles/37090/JQuery-UI-Dialog-with-ASP-NET-empty-post-values.aspx, 
    //http://blogs.microsoft.co.il/blogs/shayf/archive/2009/02/20/a-bad-of-roses-jquery-ui-dialog-and-asp-net-ajax.aspx            
    $(HTMLDivElement).parent().appendTo($("form"));
}

function getChildNode(node, id, tagName, completeId) {
    if (typeof (id) != "undefined") {
        id = trim(id.toLowerCase());
    }
    if (typeof (tagName) == "undefined") {
        tagName = "*";
    }
    if (typeof (completeId) != "boolean") {
        completeId = false;
    }
    var elements = node.getElementsByTagName(tagName);
    for (var i = 0; i < elements.length; i++) {
        var element = elements[i];
        if (completeId) {
            if (element.id.toLowerCase() == id) {
                return element;
            }
        }
        else {
            if (element.id.toLowerCase().indexOf(id) >= 0) {
                return element;
            }
        }
    }
    return null;
}

function getCookie(name) {
    var start = document.cookie.indexOf(name + "=");
    var len = start + name.length + 1;
    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return null;
    }
    if (start == -1) {
        return null;
    }
    var end = document.cookie.indexOf(';', len);
    if (end == -1) {
        end = document.cookie.length;
    }
    return unescape(document.cookie.substring(len, end));
}

function getDataItem(gridId, id) {
    var dataItems = $find(gridId).get_masterTableView().get_dataItems();
    var dataItem;
    var i;
    for (i = 0; i < dataItems.length; i++) {
        dataItem = dataItems[i];
        if ($("#" + id, dataItem.get_element()).size() == 1) {
            return dataItem;
        }
    }
    return null;
}

function getDataItemsLength(gridId) {
    return $find(gridId).get_masterTableView().get_dataItems().length;
}

function getDetailTableIndex(domElement) {
    return $("table.rgDetailTable").index($(domElement).closest("table.rgDetailTable").get(0));
}

function getEndNumbers(value) {
    var text = "";
    var i;
    for (i = value.length - 1; i >= 0; i--) {
        if (isNumberCharacter(value.substr(i, 1)))
            text = value.substr(i, 1) + text;
        else
            break;
    }
    return text;
}

function getParentNode(node, tagName, id, completeId) {
    while (node.parentNode.tagName.toLowerCase() != "body") {
        if (typeof (id) != "undefined") {
            id = trim(id.toLowerCase());
        }
        if (typeof (completeId) != "boolean") {
            completeId = false;
        }
        if (node.parentNode.tagName.toLowerCase() != tagName.toLowerCase())
            node = node.parentNode;
        else {
            if (typeof (id) != "undefined") {
                if (completeId) {
                    if (node.parentNode.id.toLowerCase == id) {
                        return node.parentNode;
                    }
                }
                else {
                    if (node.parentNode.id.toLowerCase().indexOf(id) >= 0) {
                        return node.parentNode;
                    }
                }
                node = node.parentNode;
            }
            else
                return node.parentNode;
        }
    }
    return null;
}

function getRadioButtonSelected(groupName, context) {
    var radios;
    if (typeof (context) != "undefined") {
        radios = $(":radio[name$='" + groupName + "']", context);
    }
    else {
        radios = $(":radio[name$='" + groupName + "']");
    }
    var radio;
    radios.each(function(index, element) {
        if (this.checked) {
            radio = $(this);
            return false;
        }
    });
    var id = radio.get(0).id;
    var i = id.lastIndexOf("_");
    if (i != -1) {
        id = id.substring(i + 1);
    }
    return { "element": radio, "id": id }
}

function getRadWindow() {
    var _window = null;
    if (window.radWindow)
        _window = window.radWindow;
    else if (window.frameElement.radWindow)
        _window = window.frameElement.radWindow;
    return _window;
}

function getSelectionWindowArgument(e) {
    return (e.get_argument() == null ? { "empty": true, "closed": true, "items": null} : e.get_argument());
}

function getStartNumbers(value) {
    var text = "";
    var i;
    var j = value.length;
    for (i = 0; i < j; i++) {
        if (isNumberCharacter(value.substr(i, 1)))
            text += value.substr(i, 1);
        else
            break;
    }
    return text;
}

function getValue(id) {
    if (!existsId(id)) {
        return "";
    }
    var value = "";
    var element = $("#" + id);
    if (element.is("select")) {
        value = element.val();
        if (!value) {
            value = "";
        }
        else {
            if (element.find("option:selected").attr("missing")) {
                value = "";
            }
        }
    }
    else {
        value = element.val();
        if (!value) {
            value = "";
        }
    }
    return value.trim();
}

function getValueUpDown(value, operation) {
    value = parseInt(value);
    if (operation == "+") {
        value++;
    }
    else if (operation == "-") {
        value--;
        if (value < 0) {
            value = 0;
        }
    }
    return (value);
}

function isJQuery(element) {
    //http://stackoverflow.com/questions/1271052/how-to-find-out-if-element-is-wrapped-by-jquery
    return element instanceof jQuery;
}

function isLetterCharacter(value) {
    var i = value.charCodeAt(0);
    if ((i >= 65 && i <= 90) || (i >= 97 && i <= 122)) {
        return true;
    }
    else {
        return false;
    }
}

function isListBoxEmpty(id) {
    if ($("#" + id + " option").size() == 0) {
        return true;
    }
    else {
        return false;
    }
}

function isMail(value) {
    var pattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
    var re = new RegExp(pattern);
    return re.test(value);
}

function isNumber(value, precision, decimalSeparator) {
    var pattern;
    if (typeof (decimalSeparator) == "undefined")
        decimalSeparator = ".";
    if (parseInt(precision) >= 1)
        pattern = "^(-|\\\+)?\\\d+((\\" + decimalSeparator + ")?\\\d{1," + precision + "})?$";
    else
        pattern = "^(-|\\\+)?\\\d+((\\" + decimalSeparator + ")?\\\d+)?$";
    var re = new RegExp(pattern);
    return re.test(value);
}

function isNumberCharacter(value) {
    var i = value.charCodeAt(0);
    if (i >= 48 && i <= 57) {
        return true;
    }
    else {
        return false;
    }
}

function left(value, length) {
    return String(value).substr(0, length);
}

function ltrim(value) {
    var i, text;
    text = String(value);
    i = text.indexOf(' ');
    while (i == 0) {
        text = text.substr(i + 1);
        i = text.indexOf(' ');
    }
    return text;
}

function openRadWindow(radWindowManagerID, windowName, url) {
    var _window = $find(radWindowManagerID).getWindowByName(windowName);
    _window.set_navigateUrl(url);
    _window.show();
}

function removeQTip() {
    //http://craigsworks.com/projects/qtip/forum/topic/506/how-to-destroy-all-qtips/
    try {
        var i = $.fn.qtip.interfaces.length;
        while (i--) {
            $.fn.qtip.interfaces[i].destroy();
        }
        $.fn.qtip.interfaces = new Array();
    }
    catch (e) {
    }
}

function replace(value, find, replacement) {
    //http://lineadecodigo.com/2009/03/12/implementarnos-la-funcion-replace-de-javascript/
    return value.split(find).join(replacement);
    var pattern = "";
    var reg;
    var i;
    var j = find.length;
    for (i = 0; i < j; i++) {
        pattern += "\\" + find.substr(i, 1);        
    }
    var re = new RegExp(pattern, "g");
    return String(value).replace(re, replacement);
}

function replicate(number, character) {
    var text = ""
    var i, j;
    if (typeof (character) == "number")
        character = String.fromCharCode(character);
    else {
        character = String(character);
        if (character.length > 1)
            character = character.substr(0, 1);
    }
    j = parseInt(number);
    for (i = 0; i < j; i++)
        text += character;
    return text;
}

function right(value, length) {
    return String(value).substr(String(value).length - length, length);
}

function rtrim(value) {
    var i, text;
    text = String(value);
    i = text.lastIndexOf(' ');
    while (i == text.length - 1 && i != -1) {
        text = text.substr(0, text.length - 1);
        i = text.lastIndexOf(' ');
    }
    return text;
}

function setCookie(name, value, expires, path, domain, secure) {
    var today = new Date();
    today.setTime(today.getTime());
    if (expires) {
        expires = expires * 1000 * 60 * 60 * 24;
    }
    var expires_date = new Date(today.getTime() + (expires));
    document.cookie = name + '=' + escape(value) + ((expires) ? ';expires=' + expires_date.toGMTString() : '') + ((path) ? ';path=' + path : '') + ((domain) ? ';domain=' + domain : '') + ((secure) ? ';secure' : '');
}

function setValueUpDown(value, operation) {
    value = parseInt(value);
    if (operation == "+") {
        value++;
    }
    else if (operation == "-") {
        value--;
    }
    return value;
}

function trim(value) {
    return ltrim(rtrim(value));
}

function webService_OnFailure(result, context) {
    try {
        alert(result.get_message());
    }
    catch (e) {
        alert(e.message);
    }
}

function webService_OnFailure2(result, context) {
    try {
        alert(result.get_message());
        if (context.length > 0) {
            if (context.indexOf("|") != -1) {
                var code = context.split("|")[1];
                if (code.length > 0) {
                    eval(code);
                }
            }
            else {
                eval(context);
            }
        }
    }
    catch (e) {
        alert(e.message);
    }
}

function webService_OnSuccess(result, context) {
}

function webService_OnSuccess2(result, context) {
    try {
        if (context.length > 0) {
            if (context.indexOf("|") != -1) {
                var code = context.split("|")[0];
                if (code.length > 0) {
                    eval(code);
                }
            }
            else {
                eval(context);
            }
        }
    }
    catch (e) {
        alert(e.message);
    }
}

//http://jquery-howto.blogspot.com/2009/03/check-if-jqueryjs-is-loaded.html
if (jQuery) {

    //http://remysharp.com/2008/10/17/jquery-really-visible/
    jQuery.extend(
        jQuery.expr[":"], {
            reallyvisible: function(obj, index, meta, stack) {
                return ($(obj).is(":visible") && $(obj).parents(":hidden").length == 0);
            }
        }
    );

    //http://jquery-howto.blogspot.com/2009/06/jquery-custom-selectors-with-parameters.html        
    jQuery.extend(
        jQuery.expr[":"], {
            cellIndex: function(obj, index, meta, stack) {
                var tagName = obj.tagName.toLowerCase();
                if (tagName == "td" || tagName == "th") {
                    if (obj.cellIndex == parseInt(meta[3])) {
                        return true;
                    }
                    else {
                        return false;
                    }
                }
                else {
                    return false;
                }
            }
        }
    );

    //http://asimilia.wordpress.com/2008/12/17/jquery-extend-confusion/
    //jQuery("div").myMethod()
    jQuery.fn.extend({
        convertToNumericTextBox: function() {
            //this //jQuery object
            this.keypress(function(e) {
                if (e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)) {
                    return false;
                }
            });
        }
    });
}
