﻿var $webservice = function(url_, data_, successFun_) {
    $.ajax({
        type: "POST",
        contentType: "application/json;utf-8",
        url: url_,
        //data: data_,
        data: $toJson(data_),
        //dataType: 'json',  // webserver的默认返回类型为 html/xml
        dataType: 'html/xml',
        success: function(result) {
            //alert(result);
            //var json = $deserialize(result);
            var json = eval('(' + result + ')');
            //alert(json);
            successFun_(json.d);
        },
        error: function(err) {
            var h = '错误：status ' + err.status + '(' + err.statusText + ')' + '\r\n' + err.responseText;
            alert(h);
            /*
            var h = '错误：status ' + err.status + '(' + err.statusText + ')' + '<br />' + err.responseText;
            h = "<div style='width:830px; height:450px; overflow-y:scroll'><div style='padding:12px;'>" + h + "</div></div>"
            $.modal(h, { containerCss: { height: 450, width: 830} });
            */
        }
    });
}

var $serialize = function(b) {
    var a = "";
    switch (typeof b) {
        case "string": a += ('"');
            var re___ = new RegExp('["\b\f\n\r\t\\\\\x00-\x1F]', "i");

            if ($.browser.safari || re___.test(b)) {
                var k = b.length;
                for (c = 0; c < k; ++c) {
                    var d = b.charAt(c);
                    if (d >= " ") {
                        if (d === "\\" || d === '"')
                            a += ("\\");
                        a += (d);
                    }
                    else {
                        switch (d) {
                            case "\b":
                                a += ("\\b");
                                break;
                            case "\f":
                                a += ("\\f");
                                break;
                            case "\n":
                                a += ("\\n");
                                break;
                            case "\r":
                                a += ("\\r");
                                break;
                            case "\t":
                                a += ("\\t");
                                break;
                            default:
                                a += ("\\u00");
                                if (d.charCodeAt() < 16)
                                    a += ("0");
                                a += (d.charCodeAt().toString(16));
                        }
                    }
                }
            }
            else
                a += (b);
            a += ('"');
            break;
        case "number":
            if (isNaN(parseFloat(b))) {
                a += "0";
            }
            else {
                a += b.toString();
            } break;
        case "boolean":
            a += b.toString();
            break;
        case "object":
            try {
                a += ('"\\/Date(');
                a += (b.getTime());
                a += (')\\/"');
            }
            catch (ex___) {
                a += b.toString();
            }
            break;
    }
    return a;
};

function $toJson(j) {
    var i = 0;
    var h = "{";
    for (var b in j) {
        switch (typeof eval("(j." + b + ")")) {
            case "function": break;
            default: h += "\"" + b + "\":";
                h += $serialize(eval("(j." + b + ")")) + ",";
                i++; break;
        }
    }
    if (i > 0) {
        h = h.substring(0, h.length - 1);
    }
    h += "}";
    //alert(h);
    return h;
}

var $deserialize = function(data) {
    if (data.length === 0)
        return {};
    try {
        var exp = data.replace(new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)\\)\\\\/\\"', "g"), "$1new Date($2)");
        //alert(exp);
        return eval("(" + exp + ")");
    }
    catch (a) {
        return {};
    }
};

// json返回的时间（getTime()）转化为本地时间
function FormatTime(jsonDate, format) {
    if (jsonDate == '/Date(-62135596800000)/') {
        return '';
    }
    jsonDate = jsonDate.split('(')[1].split(')')[0];
    var rDate = new Date(parseInt(jsonDate));
    if (format != undefined) {
        if (format == "年月日") {
            return rDate.getFullYear() + "年" + (rDate.getMonth() + 1) + "月" + rDate.getDate() + "日";
        }
        else if (format == "月日点") {
            return (rDate.getMonth() + 1) + "月" + rDate.getDate() + "日 " + rDate.getHours() + "点";
        }
        else if (format == "yy-MM-dd") {
            var year = rDate.getFullYear().toString();
            var month = (rDate.getMonth() + 1).toString();
            var day = rDate.getDate().toString();
            var date = year.substring(2, year.length) + '-' + month.PadLeft(2, '0') + '-' + day.PadLeft(2, '0');
            return date;
        }
        else if (format == "yyyy-MM-dd") {
            var year = rDate.getFullYear().toString();
            var month = (rDate.getMonth() + 1).toString();
            var day = rDate.getDate().toString();
            var date = year + '-' + month.PadLeft(2, '0') + '-' + day.PadLeft(2, '0');
            return date;
        }
        else if (format == "full") {
            return rDate.toLocaleString();
        }
        else if (format == "birthday") {
            var month = (rDate.getMonth() + 1).toString();
            var day = rDate.getDate().toString();
            var date = month.PadLeft(2, '0') + '月' + day.PadLeft(2, '0') + '日';
            return date;
        }
    }
    return rDate.toLocaleString();
}
