﻿$.extend($.ML, {
    'get': function(url, divId, pmsg, callback, optionsCust) {
        this.AJAX(url, "GET", null, divId, pmsg, callback, optionsCust);
    },
    'post': function(url, data, divId, pmsg, callback, optionsCust) {
        this.AJAX(url, "POST", data, divId, pmsg, callback, optionsCust);
    },
    'AJAX': function(url, method, data, divId, pmsg, callback, optionsCust) {
        var options = { nofading: true, showPrograssMsg: true };
        jQuery.extend(true, options, optionsCust);
        var div;
        if (divId)
            div = $("#" + divId);
        if (options.showPrograssMsg) {
            if (pmsg == null)
                pmsg = "Loading...";
            $.ML.showProgMsg(divId, pmsg);
        }
        if (div) {
            if (options.nofading) {
                //div.hide();
            }
            else
                div.fadeOut($.ML.animationSpeed);
        }
        try {
            data = data.replace("__VIEWSTATE", "sysField1");
        }
        catch (ex) { }
        $.extend(true, data, { __AJAX: "true" });
        $.ajax({
            url: url,
            global: false,
            type: method,
            data: data,
            dataType: "html",
            success: function(ret) {
                //alert(ret);
                //if (div)
                $.ML.hideProgMsg(divId);
                if ($.ML.isOperResults(ret)) //json result contains operation result information from server
                {
                    //alert("oper json");
                    var jret = eval(json_parse(ret));
                    if (!jret.ClientAction || jret.ClientAction == "" || jret.ClientAction == "Prompty") {
                        alert(jret.Message);
                        if (div) {
                            div.html(jret.Result);
                            //$.ML.hideProgMsg(divId);
                            if (options.nofading) {
                                div.show();
                            }
                            else {
                                div.fadeIn($.ML.animationSpeed, function() {
                                    if ($.browser.msie) { $(this).get(0).style.removeAttribute('filter'); }
                                });
                            }
                            if (jret.Code != 0) { //error happened
                                div.addClass("error");
                            }
                            else {
                                div.removeClass("error");
                            }
                        }
                    }
                    if (jret.ClientAction == "Refresh")
                        window.location.reload(true);
                }
                else {
                    if (div) {
                        div.html(ret);
                        if (options.nofading)
                            div.show();
                        else
                            div.fadeIn($.ML.animationSpeed, function() {
                                if ($.browser.msie) { $(this).get(0).style.removeAttribute('filter'); }
                            });
                    }
                }

                if (callback) {
                    try {
                        callback();
                    }
                    catch (ex) { };
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                $.ML.hideProgMsg(divId);
                if ($.ML.debug) {
                    alert("Operation failed.");
                    var resp = XMLHttpRequest.responseText;
                    alert(resp);
                    if (div) {
                        alert(div.attr("id"));
                        div.html(resp);
                    }
                    //else
                    //alert(resp);

                    if (div) {
                        //$.ML.hideProgMsg(divId);
                        div.fadeIn($.ML.animationSpeed, function() {
                            if ($.browser.msie) { $(this).get(0).style.removeAttribute('filter'); }
                        });
                    }
                }
                else {
                    //window.location.reload(true); //not debug mode, refresh the page
                    if (div) {
                        div.text("<!-- error -->");
                    }
                }
            }
        }) //end of jquery ajax
    }, // end of function

    isOperResults: function(ret) {
        return (ret.indexOf("\"Message\"") > 0 && ret.indexOf("\"Code\"") > 0 && ret.indexOf("\"Result\"") > 0);
    },
    showProgMsg: function(divId, msg) {
        var elems = $("#" + divId);
        var msgid = "";
        if ($.ML.IsIE6())
            msgid = "mlSysDivMsg";
        else
            msgid = "mlSysDivMsg" + divId;
        var omsg
        var emsg = document.getElementById(msgid);
        if (emsg == null) {
            if ($.ML.IsIE6())
                return;
            omsg = $("<div id=" + msgid + "/>").attr("class", "popupMsg");
            $("body").append(omsg);
        }
        else
            omsg = $(emsg);
        omsg.html(msg);
        var pos = elems.offset();
        var y = pos.top;
        var x = pos.left;
        var win = $(window);
        if (x <= win.scrollLeft() && y <= win.scrollTop()) {
            y = win.height() / 3 + win.scrollTop();
            x = win.width() / 2 + win.scrollLeft();
        }
        omsg.css({ position: "absolute",
            top: y + "px",
            left: x + "px",
            zIndex: 5000
        })
        omsg.show();
        omsg.fadeTo(0, 0.8);
    },

    hideProgMsg: function(divId) {
        var msgid = "";
        if ($.ML.IsIE6())
            msgid = "mlSysDivMsg";
        else
            msgid = "mlSysDivMsg" + divId;
        var omsg = $("#" + msgid);
        omsg.fadeOut($.ML.animationSpeed);
    }

});                                                  //end of extend

$.namespace('ML', {
    fadeOut: function(elems, pars) {
        var msgid = "mlSysDivMsg" + elems.attr("id");
        var omsg
        var emsg = document.getElementById(msgid);
        if (emsg == null) {
            omsg = $("<div id=" + msgid + "/>").attr("class", "popupMsg");
            $("body").append(omsg);
        }
        else
            omsg = $(emsg);
        omsg.html(pars[0]);
        var pos = elems.offset();
        var y = pos.top;
        var x = pos.left;
        var win = $(window);
        if (x <= win.scrollLeft() && y <= win.scrollTop()) {
            y = win.height() / 3 + win.scrollTop();
            x = win.width() / 2 + win.scrollLeft();
        }
        omsg.css({ position: "absolute",
            top: y + "px",
            left: x + "px",
            zIndex: 5000
        })
        omsg.show();
        omsg.fadeTo(0, 0.8);
        elems.fadeOut(pars[1]);
        //elems.hide();
    }, //end of function fadeOut

    fadeIn: function(elems, pars) {
        $.ML.hideProgMsg(elems.attr("id"));

        elems.fadeIn(pars[0], function() {
            if ($.browser.msie) { $(this).get(0).style.removeAttribute('filter'); }
        });
        //elems.show();
    } //end of function fadeIn
}
    );        //end of extend
