﻿/// <reference path="jquery-1.3.2.min-vsdoc.js" />
/// <reference path="jquery.hiAlerts-min.js" />

///++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
///Title：模窗的标题
///Target：需要在模窗显示的内容，可以是id:#EditForm；可以是class: .MyForm；也可以是Url: /Home/Vincent
///注意，Url的时候不能跨域。
///ajaxForm：true|false，用于设置内容框是否用ajaxform提交
//callBack：function类型，在点击关闭模窗的callback
//edit by houhl at 10/11/18 将js中的top.document.body 替换成 window.document.body ,有top.hiBox()类似的调用弹出窗口的把top.删掉了。
//修改原因是：在框架页中弹出不了修改成功提示
///+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

function DBWinMessage(Fun) {

    if (typeof Fun != 'undefined') {
        var msg = Fun();
        if (msg != true) {
            hiBox('#DialogBox', '提交出错..', 400, '', '', '.a_close');
            ShowInfo("提交出错", msg, true, false);
            return false;
        }
    }
    else {
        return true;
    }
}

function CloseBox() {
    try {

        hiBoxHidden();
//        top.hiBoxHidden();
    }
    catch (e) {
        //alert(e);
    }
}

function yanctest(obj, obj2) {
    alert(obj);
    obj.focus(function() {
        obj2.removeClass('input-validation-error');
        $("span.field-validation-error", obj2.parent()).remove();
    });
}


function DBWinDialog(title, target, ajaxForm, closeCallBack, postCallBack) {
    var IsTargetExist = -1;
    try {
        IsTargetExist = $(target).size();

    } catch (e) {

    }
    var ajaxFormOption =
    { 
    //OnSuccess: VinTest
    };
    hiBox('#DialogBox', title, '', '', '', '.a_close', closeCallBack);
    $("#popup_content", window.document.body).html('Loading....');

    if (IsTargetExist > 0) {

        $("#popup_content", window.document.body).html($(target).html());
    }
    else {


        $.ajax({
            type: "Get",
            url: target,
            data: "sb=" + Math.random(),
            success: function(msg, textStatus) {
              
                var json;
                var ShowHtml = true;
                try {
                    json = eval('(' + msg + ')');
                    if (typeof json.IsSuccess == "xml") {

                    } else {
                        if (json.IsSuccess) {
                            ShowHtml = false;
                        }
                    }
                } catch (e) {

                }

                if (ShowHtml) {
                    $("#popup_content", window.document.body).html(msg);
                    if (ajaxForm) {

                        $('form[method!=get]', $("#popup_content", window.document.body)).DBWinAjaxForm(ajaxFormOption);
                    }
                }
                else {
                    $("#popup_content", window.document.body).html(DBWinJsonHandler(json));
                }
            },
            error: function(XMLHttpRequest, textStatus, errorThrown) {
                if (XMLHttpRequest.status == 404) {
                    $("#popup_content", window.document.body).html("找不到页面：" + target);
                    return;
                }
                if (XMLHttpRequest.status == 500) {
                    $("#popup_content", window.document.body).html("页面：" + target + " 发生内部错误！");
                    return;
                }
            }
        });

    }
    if (window != self) {
        $("#popup_container", window.document.body).css("position", "absolute");
    }
}

function DBWinJsonHandler(responseText) {


    var IsSuccess = responseText.IsSuccess;

    var Title = responseText.Title;
    var Content = responseText.Content;

    var AutoRedirect = responseText.AutoRedirect;
    var RedirectUrl = responseText.RedirectUrl;
    var HideCloseButton = responseText.HideCloseButton;
    var Icon = responseText.Icon;

    var Links = responseText.Links;
    var ModelState = responseText.ModelState;
    var Model = responseText.Model;
    var RediretctTime = responseText.RediretctTime

    var MessageInfo = "";
    var HideClose = false;




    ///附加主要信息
    if (Content != "") {
        MessageInfo += "<p>" + Content + "</p>";
    }


    ///处理错误
    var ErrorSummary = "";
    if (ModelState != null && ModelState != "") {

        for (var i = 0; i < ModelState.length; i++) {

            var key = ModelState[i].Key.replace('.', '_');
            var ErrorString = "";
            for (var j = 0; j < ModelState[i].Errors.length; j++) {

                ErrorString = ErrorString + "<label  class='error' for='" + key + "'>" + ModelState[i].Errors[j] + "</label>";
            }

            var e = $('#' + key, form);
            if (e.length > 0) {

                if (i == 0) {
                    //e.trigger("focus");
                    document.getElementById(e.attr("id")).focus();

                }

                e.addClass('input-validation-error');
                e.parent().append("<span class='field-validation-error'>" + ErrorString + "</span>");

                e.focus(function() {
                    $(this).removeClass('input-validation-error');
                    $("span.field-validation-error", $(this).parent()).remove();
                });


            }
            else {
                ErrorSummary += "<li>" + ErrorString + "</li>";
            }


        }
    }



    var ThisUrl = window.location.protocol + "//" + window.location.host + "/";

    ///生成连接
    var LinkString = "";
    if (Links != null && Links != "") {

        for (var i = 0; i < Links.length; i++) {
            var url = "";
            if (Links[i].Url.toLowerCase().substring(0, 4) == "http") {
                url = Links[i].Url;
            } else {
                url = ThisUrl + Links[i].Url;
            }

            LinkString += "<li><a href='" + url + "' target='" + window.name + "'>" + Links[i].Title + "</a></li>";
        }
    }



    //添加自动跳转
    if (AutoRedirect && RedirectUrl != null) {

        if (RedirectUrl.toLowerCase().substring(0, 4) != "http") {

            RedirectUrl = ThisUrl + RedirectUrl;
        }

        HideCloseButton = true;
        MessageInfo += "<div class='AutoRedirect'><b>将在 " + eval(RediretctTime / 1000) + " 秒内转向页面....</b> <br />如果浏览器没有反应，<a href='" + RedirectUrl + "' target='" + window.name + "'>点击直接跳转</a></div>";
        window.setTimeout(function() { window.location.href = RedirectUrl; CloseBox(); }, RediretctTime);
    }

    if (ErrorSummary.length > 0) {
        IsSuccess = false;
        MessageInfo += "<div class='ErrorMessage'><b>错误信息：</b><ul>" + ErrorSummary + "</ul></div>"
    }

    if (LinkString.length > 0) {
        MessageInfo += "<div class='JumpLinks'><b>跳转链接：</b><ul>" + LinkString + "</ul></div>"

    }

    return MessageInfo;

}


function DBWinAjaxGet(Url) {
    hiBox('#DialogBox', '', 400, '', '', '.a_close');
    $("#popup_container", window.document.body).css("position", "absolute");

    $.getJSON(Url, "sb=" + Math.random(), function(responseText) {


        var IsSuccess = responseText.IsSuccess;

        var Title = responseText.Title;
        var Content = responseText.Content;

        var AutoRedirect = responseText.AutoRedirect;
        var RedirectUrl = responseText.RedirectUrl;

        var Icon = responseText.Icon;

        var Links = responseText.Links;
        var ModelState = responseText.ModelState;
        var Model = responseText.Model;
        var RediretctTime = responseText.RediretctTime

        var MessageInfo = "";
        var HideClose = false;




        ///附加主要信息
        if (Content != "") {
            MessageInfo += "<p>" + Content + "</p>";
        }


        ///处理错误
        var ErrorSummary = "";
        if (ModelState != null && ModelState != "") {

            for (var i = 0; i < ModelState.length; i++) {

                var key = ModelState[i].Key.replace('.', '_');
                var ErrorString = "";
                for (var j = 0; j < ModelState[i].Errors.length; j++) {

                    ErrorString = ErrorString + "<label  class='error' for='" + key + "'>" + ModelState[i].Errors[j] + "</label>";
                }

                //                e = $('#' + key, form);

                //                if (e.length > 0) {

                //                    e.addClass('input-validation-error');
                //                    e.after("<span class='field-validation-error'>" + ErrorString + "</span>");
                //                    e.click(function() {

                //                        $(this).removeClass('input-validation-error');
                //                        $(this).next("span.field-validation-error").remove();
                //                    });

                //                }
                //                else {
                ErrorSummary += "<li>" + ErrorString + "</li>";
                //}


            }
        }






        var ThisUrl = window.location.protocol + "//" + window.location.host + "/";

        ///生成连接
        var LinkString = "";
        if (Links != null && Links != "") {

            for (var i = 0; i < Links.length; i++) {
                var url = "";
                if (Links[i].Url.toLowerCase().substring(0, 4) == "http") {
                    url = Links[i].Url;
                } else {
                    url = ThisUrl + Links[i].Url;
                }

                LinkString += "<li><a href='" + url + "' target='" + window.name + "'>" + Links[i].Title + "</a></li>";

            }
        }

        //添加自动跳转
        if (AutoRedirect && RedirectUrl != null) {
            HideClose = true;

            if (RedirectUrl.toLowerCase().substring(0, 4) != "http") {

                RedirectUrl = ThisUrl + RedirectUrl;
            }

            MessageInfo += "<div><b>将在 " + eval(RediretctTime / 1000) + " 秒内转向页面....</b> <br />如果浏览器没有反应，<a href='" + RedirectUrl + "'>点击直接跳转</a></div>";

            window.setTimeout(function() { window.location.href = RedirectUrl; }, RediretctTime);
        }

        if (ErrorSummary.length > 0) {
            MessageInfo += "<div><h3>错误信息：</h3><ul>" + ErrorSummary + "</ul></div>"
        }

        if (LinkString.length > 0) {
            MessageInfo += "<div><h3>跳转链接：</h3><ul>" + LinkString + "</ul></div>"

        }

        ShowInfo(Title, MessageInfo, IsSuccess, HideClose);

    });


}

function ShowInfo(Title, Content, isError, HideClose) {


    if (Content == null || Content == "") {

       hiBoxHidden();
    }
    $("#popup_content", window.document.body).empty();


    if (isError == true) {
        $("#popup_content", window.document.body).addClass("validation-summary-errors");
    } else {
        $("#popup_content", window.document.body).addClass("operation-success");
    }


    $("#popup_title", window.document.body).html(Title);
    $("#popup_content", window.document.body).html(Content + "<div class='a_close'> <button onclick='hiBoxHidden();'> 确 定</button> </div>");

    if (HideClose) {
        $("#popup_close", window.document.body).remove();
        $(".a_close", window.document.body).remove();

    }


}




$.fn.DBWinAjaxForm = function(formOptions) {
    $(this).each(function() {
        $(this).DBWinAjaxFormold(formOptions);
    });
}


$.fn.DBWinAjaxFormold = function(formOptions) {

    var submitButton = $(":submit", $(this));
    if (typeof (formOptions) != 'undefined') {
        if (typeof (formOptions.sumitbutton) != 'undefined') {
            submitButton = $(formOptions.sumitbutton);
        }
    }
    var callBacks = { OnSuccess: null };
    if (formOptions) {
        if (formOptions.OnSuccess) {
            callBacks.OnSuccess = formOptions.OnSuccess;
        }

    }
    ///FckEditor Fixing By Vincent.xiaojie@gmail.com
    submitButton.click(function fn() {
        if (typeof FCKeditorAPI != 'undefined') {
            if (FCKeditorAPI.Instances) {
                for (var i in FCKeditorAPI.Instances) {

                    var anFCK = FCKeditorAPI.Instances[i];
                    anFCK.UpdateLinkedField();
                }
            }
        }
        if (typeof CKEDITOR != 'undefined') {
            if (CKEDITOR.instances) {
                for (var i in CKEDITOR.instances) {
                    var anFCK = CKEDITOR.instances[i];
                    anFCK.updateElement();
                }
            }
        }

    });






    var ClickedButton;
    var TempValue = "";
    var form = this;
    var ClearnPosting = function() {
        submitButton.attr('disabled', "");
        submitButton.val(TempValue);
        //        $(':submit', form).blur();
        $('#ajaxFormPosting').remove();
    }


    var ShowInfo = function(Title, Content, IsSuccess, HideClose) {



        if (Content == null || Content == "") {

            return;
        }

        if (HideClose == false) {
            hiAlert(Content, Title, function(e) {
                //Todo:关闭框之后返回焦点
                $(':submit', form).blur();
                return false;
            });
        }
        else {


            hiBox('#DialogBox', "加载中...", 400, '', '', '.a_close');


            $("#popup_content").empty();

            if (IsSuccess == false) {
                $("#popup_content").addClass("validation-summary-errors");
            } else {
                $("#popup_content").addClass("operation-success");

            }

            // alert($("#popup_title",top.document.body).html());
            $("#popup_title", window.document.body).html(Title);
            $("#popup_content", window.document.body).html(Content + "<div class='a_close'> <button onclick='hiBoxHidden();'> 确 定</button> </div>");

            if (HideClose) {
                $("#popup_close", window.document.body).remove();
                $(".a_close", window.document.body).remove();
            }
            $(':submit', form).blur();

        }

        if (top != self) {


            $("#popup_container", window.document.body).css("position", "absolute");
        }
        ClearnPosting();


    };

    var BeforeSubmit = function(formData, jqForm, options) {

        $('.input-validation-error', form).each(function() {
            $(this).removeClass("input-validation-error");
        });
        $('.field-validation-error', form).each(function() {
            $(this).remove();
        });


        // hiBox('#DialogBox', '提交中..', 400, '', '', '.a_close');


        submitButton.focus();
        submitButton.attr('disabled', 'true');
        TempValue = submitButton.val();
        submitButton.val("");
        submitButton.after("<img id='ajaxFormPosting' src='/Content/Images/Public/ajax-loader.gif' />");


        return true;
    };

    var CompleteSubmit = function(XMLHttpRequest, statusText) {

        ClearnPosting();



    };
    var SubmitError = function(XMLHttpRequest, ajaxOptions) {
        var msg = "请求错误，代码：" + escape(XMLHttpRequest.status);
        switch (escape(XMLHttpRequest.status)) {
            case "404":
                msg = "地址错误：" + ajaxOptions.url;
                break;

            case "500":
                msg = "请求的服务器内部错误500，地址：" + ajaxOptions.url;
                break;

        }
        ShowInfo("发生错误", msg, false);


    };


    var SubmitSuccess = function(responseText, statusText) {


        if (statusText == "error") {
            return false;
        }

        var IsSuccess = responseText.IsSuccess;

        var Title = responseText.Title;
        var Content = responseText.Content;

        var AutoRedirect = responseText.AutoRedirect;
        var RedirectUrl = responseText.RedirectUrl;
        var HideCloseButton = responseText.HideCloseButton;
        var Icon = responseText.Icon;

        var Links = responseText.Links;
        var ModelState = responseText.ModelState;
        var Model = responseText.Model;
        var RediretctTime = responseText.RediretctTime

        var MessageInfo = "";
        var HideClose = false;




        ///附加主要信息
        if (Content != "") {
            MessageInfo += "<p>" + Content + "</p>";
        }


        ///处理错误
        var ErrorSummary = "";
        if (ModelState != null && ModelState != "") {

            for (var i = 0; i < ModelState.length; i++) {

                var key = ModelState[i].Key.replace('.', '_');
                var ErrorString = "";
                for (var j = 0; j < ModelState[i].Errors.length; j++) {

                    ErrorString = ErrorString + "<label  class='error' for='" + key + "'>" + ModelState[i].Errors[j] + "</label>";
                }

                var e = $('#' + key, form);
                //alert(e.attr("name"));
                if (e.length > 0) {

                    if (i == 0) {
                        //e.trigger("focus");
                        document.getElementById(e.attr("id")).focus();
                        //e.focus();
                        //alert("11");
                        // e.focus();
                    }

                    e.addClass('input-validation-error');
                    e.parent().append("<span class='field-validation-error'>" + ErrorString + "</span>");
                    //                    e.click(function() {

                    //                        $(this).removeClass('input-validation-error');
                    //                        $("span.field-validation-error", $(this).parent()).remove();
                    //                    });

                    //                    (function() {
                    //                    e.focus = function() {
                    //                            $(this).removeClass('input-validation-error');
                    //                            $("span.field-validation-error", $(this).parent()).remove();
                    //                        }
                    //                    })();

                    //setTimeout(yanctest(e), 1000);
                    //yanctest(e, $(this));
                    e.focus(function() {
                        $(this).removeClass('input-validation-error');
                        $("span.field-validation-error", $(this).parent()).remove();
                    });


                }
                else {
                    ErrorSummary += "<li>" + ErrorString + "</li>";
                }


            }
        }

        ///清空验证码
        $("#VerifyCode", form).val("");
        $("#validateImg", form).trigger("click", null);

        var ThisUrl = window.location.protocol + "//" + window.location.host + "/";

        ///生成连接
        var LinkString = "";
        if (Links != null && Links != "") {

            for (var i = 0; i < Links.length; i++) {
                var url = "";
                if (Links[i].Url.toLowerCase().substring(0, 4) == "http") {
                    url = Links[i].Url;
                } else {
                    url = ThisUrl + Links[i].Url;
                }

                LinkString += "<li><a href='" + url + "' target='" + window.name + "'>" + Links[i].Title + "</a></li>";
            }
        }



        //添加自动跳转
        if (AutoRedirect && RedirectUrl != null) {

            if (RedirectUrl.toLowerCase().substring(0, 4) != "http") {

                RedirectUrl = ThisUrl + RedirectUrl;
            }

            HideCloseButton = true;
            MessageInfo += "<div class='AutoRedirect'><b>将在 " + eval(RediretctTime / 1000) + " 秒内转向页面....</b> <br />如果浏览器没有反应，<a href='" + RedirectUrl + "' target='" + window.name + "'>点击直接跳转</a></div>";
            window.setTimeout(function() { window.location.href = RedirectUrl; CloseBox(); }, RediretctTime);
        }

        if (ErrorSummary.length > 0) {
            IsSuccess = false;
            MessageInfo += "<div class='ErrorMessage'><b>错误信息：</b><ul>" + ErrorSummary + "</ul></div>"
        }

        if (LinkString.length > 0) {
            MessageInfo += "<div class='JumpLinks'><b>跳转链接：</b><ul>" + LinkString + "</ul></div>"

        }

        ShowInfo(Title, MessageInfo, IsSuccess, HideCloseButton);


        if (callBacks.OnSuccess) {
            //alert(formOptions.OnSuccess);
            //eval(formOptions.OnSuccess + "()");
            //    $.event.trigger("VinTest", [responseText, statusText]);
        }
    };
    var ajaxFormOptions = {
        beforeSubmit: BeforeSubmit,
        success: SubmitSuccess,

        // url: "163.com",
        type: 'post',
        dataType: 'json',
        // dataType: 'jsonp',
        //jsonp: 'jsoncallback',

        // clearForm: true,
        // resetForm: true,

        error: SubmitError,
        complete: CompleteSubmit,
        //timeout: 9000,
        global: false
    };




    return $(this).ajaxForm(ajaxFormOptions);
}





