﻿/***********************************************************************
我的公用Js
均写于此    张旭

1.1 公用的级联加载数据Js                                     2011-04-21
1.2 公用的伪级联修改数据                                     2011-07-08
1.3 公用的伪级联修改数据                                     2011-07-08

2.0 下拉列表改变时（通用、任意个数） 显示或者隐藏控件          2011-08-25
        限制：Value从1开始，中间不能断
2.1 下拉列表改变时 显示或者隐藏控件                           2011-04-21
2.2 下拉列表改变时 显示或者隐藏控件（同时反控制另一个控件）     2011-04-21
2.3 复选框改变时 显示或者隐藏控件                             2011-04-21
2.4 复选框改变时 显示或者隐藏控件（同时反控制另一个控件）       2011-04-21
2.5 显示或者隐藏控件（同时反控制另一个控件）                    2011-9-4

3.1 删除确认提示                                             2011-05-21

4 针对窗口的操作
4.1 打开窗体                                                2011-06-8
4.2 打开并重载窗体                                           2011-06-8
4.3 刷新窗体                                                2011-06-8
4.4 关闭窗体                                                2011-06-8

4-2 弹窗选择插件中使用到的Js方法（通用）                      2011-08-31
    // 局部全选
    // 全选
    // 单选
    // 选择并关闭窗体

4-3 弹出层                                                  2011-09-15

5  Telerik文本编辑框获取源码                                 2011-06-24
6  Telerik上传控件 上传成功后修改 ImageUrl文本框的内容        2011-06-26
7  后台Grid全选/全不选（Grid名字为Grid）                     2011-08-15

8  通用的单选方法                                            2011-08-15
8-1.1 通用的单选方法（针对树结构）                            2011-09-15
8-1.2 选择框发生变化时执行（针对树结构）                      2011-09-14
***********************************************************************/


/*1.1 公用的级联加载数据Js  2011-04-21
initiativeId    主动Id  即触发控件Id 会已其Value为参数
passiveId       被动Id  即被修改的控件Id
passiveText     被动Text 默认选中项
passiveValue    被动Value 默认选中项
jsonAction      jsonAction方法名 默认路径为../Json/+方法名

引用：onchange = "MyCascadeSelect('ActionName','ParameterName','" + Model.ParameterName + "','" + Model.ParameterName + "','GetJsonParameter');"
*/
function MyCascadeSelect(initiativeId, passiveId, passiveText, passiveValue, jsonAction) {
    //alert(initiativeId + "  " + passiveId + " " + passiveValue + " " + jsonAction);
    //alert($('#' + initiativeId)[0].options[$('#' + initiativeId)[0].selectedIndex].value);
    $.ajax({
        type: "POST",
        url: "../../JsonData/" + jsonAction,
        data: "condition=" + $('#' + initiativeId)[0].options[$('#' + initiativeId)[0].selectedIndex].value,
        dataType: "text/plain",
        success: function (response) {
            $("#loading").hide();
            var listjson = eval("(" + response + ")");
            var obj = $("#" + passiveId);
            obj.empty();
            for (var i = 0; i < listjson.length; i++) {
                //                var checked = "";
                //                if (listjson[i].Selected)
                //                    checked = " checked = \"checked\"";
                $("<option value=" + listjson[i].Value + ">" + listjson[i].Text + "</option>").appendTo(obj);
            }
            // 设置选中项
            for (var i = 0; i < obj[0].options.length; i++) {
                if (obj[0].options[i].text == passiveText || obj[0].options[i].value == passiveValue) {
                    obj[0].options[i].selected = true;
                    break;
                }
            }
            // 触发被动控件的onchange 保证多层级联时 可正常
            obj[0].onchange();
        }
    });
}


/*1.2 公用的伪级联修改数据  2011-07-08
self            this自身
showValue       将自身的value赋值到 显示控件controlId

引用：onchange = "OnSelectToText(this,'type1Div');"
*/
function OnSelectToText(self, controlId) {
    var value = self.options[self.selectedIndex].value;
    var divObj = $("#" + controlId);
    divObj[0].value += value;
}

/*1.3 公用的伪级联修改数据  2011-07-08
self            this自身
showValue       将自身的value赋值到 显示控件controlId
isAdd           是增加还是修改

引用：onchange = "TitleToText(this,'type1Div',true);"
*/
function TitleToText(self, controlId, isAdd) {
    var value = self.title;
    var divObj = $("#" + controlId);
    if (isAdd) {
        divObj[0].value += value;
    } else {
        divObj[0].value = value;
    }
}

/*2.0 下拉列表改变时 显示或者隐藏控件  2011-08-25
self            this自身
controlName     备操作的控件的名称（通用部分） 例：（div0,div1,div2 则传div）
len             被操作的控件的个数                 3

引用：onchange = "OnSelectForIntValue(this,'div',3);"
*/
function OnSelectForIntValue(self, controlName, len) {
    //alert(self.id + " " + controlName + "   " + len);
    var value = self.options[self.selectedIndex].value;
    for (var j = 1; j <= len; j++) {
        var divObj = $("#" + controlName + j);
        if (j == value) {
            divObj.attr('style', "DISPLAY:;");
        } else {
            divObj.attr('style', "DISPLAY:none;");
        }
    }
}

/*2.1 下拉列表改变时 显示或者隐藏控件  2011-04-21
self            this自身
showValue       当为自身选中value时 显示控件controlId
controlId       被操作的控件Id

引用：onchange = "OnSelectShowOrHide(this,'" + (int)TestEnum.RuleType.Sql语句 + "','type1Div');"
*/
function OnSelectShowOrHide(self, showValue, controlId) {
    //alert(self.id + " " + showValue + " " + controlId);
    var value = self.options[self.selectedIndex].value;
    var divObj = $("#" + controlId);
    if (value == showValue) {
        divObj.attr('style', "DISPLAY:;");
    } else {
        divObj.attr('style', "DISPLAY:none;");
    }
}

/*2.2 下拉列表改变时 显示或者隐藏控件（同时反控制另一个控件）  2011-04-21
self            this自身
showValue       当为自身选中value时 显示控件controlId 隐藏控件controlId2
controlId       被操作的控件Id
controlId2      被反操作的控件Id

引用：onchange = "OnSelectShowOrHide(this,'" + (int)TestEnum.RuleType.Sql语句 + "','type1Div','type2Div');"
*/
function OnSelectShowOrHide(self, showValue, controlId, controlId2) {
    //alert(self.id + " " + showValue + " " + controlId + " " + controlId2);
    var value = self.options[self.selectedIndex].value;
    var divObj = $("#" + controlId);
    var divObj2 = $("#" + controlId2);
    if (value == showValue) {
        divObj.attr('style', "DISPLAY:;");
        divObj2.attr('style', "DISPLAY:none;");
    } else {
        divObj.attr('style', "DISPLAY:none;");
        divObj2.attr('style', "DISPLAY:;");
    }
}

/*2.3 复选框改变时 显示或者隐藏控件  2011-04-21
self            this自身
showValue       当为自身选中value时 显示控件controlId
controlId       被操作的控件Id

引用：onclick = "OnCheckShowOrHide(this,'" + (int)TestEnum.RuleType.Sql语句 + "','type1Div');"
*/
function OnCheckShowOrHide(self, state, controlId) {
    //alert(self.id + " " + state + " " + controlId);
    var divObj = $("#" + controlId);
    if (self.checked == state) {
        divObj.attr('style', "DISPLAY:;");
    } else {
        divObj.attr('style', "DISPLAY:none;");
    }
}

/*2.4 复选框改变时 显示或者隐藏控件（同时反控制另一个控件）  2011-04-21
self            this自身
showValue       当为自身选中value时 显示控件controlId 隐藏控件controlId2
controlId       被操作的控件Id
controlId2      被反操作的控件Id

引用：onclick = "OnCheckShowOrHide(this,'" + (int)TestEnum.RuleType.Sql语句 + "','type1Div','type2Div');"
*/
function OnCheckShowOrHide(self, state, controlId, controlId2) {
    //alert(self.id + " " + state + " " + controlId + " " + controlId2);
    var divObj = $("#" + controlId);
    var divObj2 = $("#" + controlId2);
    if (self.checked == state) {
        divObj.attr('style', "DISPLAY:;");
        divObj2.attr('style', "DISPLAY:none;");
    } else {
        divObj.attr('style', "DISPLAY:none;");
        divObj2.attr('style', "DISPLAY:;");
    }
}

/*2.5 显示或者隐藏控件（同时反控制另一个控件）  2011-9-4
controlId       被显示的控件Id
controlId2      被隐藏的控件Id

引用：onclick = "OnShowOrHide('type1Div','type2Div');"
*/
function OnShowOrHide(controlId, controlId2) {
    //alert(controlId + " " + controlId2);
    var divObj = $("#" + controlId);
    var divObj2 = $("#" + controlId2);
    divObj.attr('style', "DISPLAY:;");
    divObj2.attr('style', "DISPLAY:none;");
}

/*3.1 删除确认提示                                        2011-05-21
*/
Delete = function () {
    return confirm("你确定要删除该条信息吗？");
};

/*4.1 打开窗体                                            2011-06-8
*/
OpenWindow = function (name) {
    var win = $('#' + name).data('tWindow');
//    alert(win);
//    alert(name + "_" + url);
//    win.refresh();
    win.center().open();
};

/*4.2 打开并重载窗体                                       2011-06-8
    url不为空 则对重新赋值加载页面
*/
OpenAndRefreshWindow = function (name, url) {
    var win = $('#' + name).data('tWindow');
//    alert(win);
//    alert(name + "_" + url);
    RefreshWindow(name, url);

    win.center().open();
};

/*4.3 刷新窗体                                            2011-06-8
*/
RefreshWindow = function (name, url) {
    var win = $('#' + name).data('tWindow');
    //    alert(win);
    //    alert(name + "_" + url);
    if (url != undefined) {
        win.contentUrl = "http://localhost:1213" + url;
    }

    win.refresh();
};

/*4.4 关闭窗体                                            2011-06-8
*/
CloseWindow = function (name) {
    var win = $('#' + name).data('tWindow');
    //alert(win);
//    alert(name + "_" + url);
    win.close();
};


/*4-2 弹窗选择插件中使用到的Js方法（通用）                      2011-08-31
*/
// 局部全选
function window_PartChecked(groupChk, groupValue, windowName) {
    $("#" + windowName + " input:checkbox[name=" + groupValue + "]").each(function () {
        $(this).attr("checked", groupChk.checked);
    });
}
// 全选
function window_CheckedAll(groupChk, windowName) {
    $("#" + windowName + " input:checkbox").each(function () {
        $(this).attr("checked", groupChk.checked);
    });
}
// 单选
function window_Radio(chk, windowName) {
    if (chk.checked) {
        $("#" + windowName + " input:checkbox").each(function () {
            if (this.value != chk.value) {
                $(this).attr("checked", false);
            }
        });
    }
}
// 选择并关闭窗体
function window_SelectAndCloseWindow(windowName, contentSeparate, triggerControlsName, passiveControlsName) {
    var selectStr = "";
    var selectTextStr = "";
    $("#" + windowName + " input:checkbox[mytype='result']").each(function () {
        if (this.checked && this.value != null) {
            if (selectStr != null && selectStr.length > 0) {
                selectStr += contentSeparate;
                selectTextStr += contentSeparate;
            }
            selectStr += this.value;
            selectTextStr += this.title;
        }
    });

    if (triggerControlsName && $("#" + triggerControlsName)[0]) {
        $("#" + triggerControlsName)[0].value = selectStr;
    }

    if (passiveControlsName && $("#" + passiveControlsName)[0]) {
        $("#" + passiveControlsName)[0].value = selectTextStr;
    }

    CloseWindow(windowName);
}


function myPopupLayer(trigger, popupBlk, closeBtn) {
    var t9 = new PopupLayer({ trigger: "#" + trigger, popupBlk: "#" + popupBlk, closeBtn: "#" + closeBtn, useOverlay: true, useFx: true,
        offsets: {
            x: 0,
            y: -41
        }
    });
    t9.doEffects = function (way) {
        if (way == "open") {
            var top = (document.documentElement.clientHeight - this.popupLayer.height()) / 2 + $(document).scrollTop();
            if (top < 0) {
                // 针对弹出层顶部位置特殊处理 如果弹出层总高度大于浏览器高度 则会为负数 显示不完整
                top = 0;
            }

            this.popupLayer.css({ opacity: 0.2 }).show(200, function () {
                this.popupLayer.animate({
                    left: ($(document).width() - this.popupLayer.width()) / 2,
                    top: top,
                    opacity: 0.4
                }, 500, function () { this.popupLayer.css("opacity", 1) } .binding(this));
            } .binding(this));
        }
        else {
            this.popupLayer.animate({
                left: this.trigger.offset().left,
                top: this.trigger.offset().top,
                opacity: 0.1
            }, { duration: 500, complete: function () { this.popupLayer.css("opacity", 1); this.popupLayer.hide() } .binding(this) });
        }
    }
}

/*5  Telerik文本编辑框获取源码                                 2011-06-24
*/
var htmlSourcePopup;
function showHtml(e, id) {
    e.stopPropagation();
    e.preventDefault();

    var editor = $('#' + id).data('tEditor');
    var html = editor.value();
    if (!htmlSourcePopup) {
        htmlSourcePopup =
                    $('<div class="html-view">' +
                          '<div class="textarea t-state-default"><textarea></textarea></div>' +
                          '<div class="t-button-wrapper" style="text-align:center">' +
                              '<button id="htmlCancel" class="t-button t-state-default">取消</button>' +
                              '<button id="htmlUpdate" class="t-button t-state-default">修改</button>' +
                          '</div>' +
                      '</div>')
                    .css('display', 'none')
                  .tWindow({
                      title: '查看源代码',
                      modal: true,
                      resizable: false,
                      draggable: true,
                      width: 700,
                      height: 200,
                      onLoad: function () {
                          var $popup = $(this);
                          $popup.find('textarea')
                                    .css('width', function () {
                                        return 700 - 20;
                                    })
                                    .css('height', function () {
                                        return 200 - 40;
                                    })
                                    .focus()
                                  .end()
                                  .find('#htmlCancel')
                                    .click(function () {
                                        htmlSourcePopup.close();
                                    })
                                  .end()
                                  .find('#htmlUpdate')
                                    .click(function () {
                                        var value = $popup.find('textarea').val();
                                        editor.value(value);
                                        htmlSourcePopup.close();
                                    });
                      },
                      onClose: function () {
                          editor.focus();
                      },
                      effects: $.telerik.fx.toggle.defaults()
                  })
                .data('tWindow');
    }
    $(htmlSourcePopup.element).find('textarea').text(html);
    htmlSourcePopup.center().open();
}


/*6  Telerik上传控件 上传成功后修改 ImageUrl文本框的内容        2011-06-26
*/
function onSuccess(e) {
    //        alert(document.getElementById("ImageUrl").value);
    //        alert("Success (" + e.operation + ") :: " + getFileInfo(e));
    document.getElementById("ImageUrl").value = getFileInfo(e);
}

function getFileInfo(e) {
    return $.map(e.files, function (file) {
        var info = file.name;
        //            // File size is not available in all browsers
        //            if (file.size > 0) {
        //                info += " (" + Math.ceil(file.size / 1024) + " KB)";
        //            }
        return info;
    }).join(", ");
}




/*7  后台Grid全选/全不选（Grid名字为Grid）                      2011-08-15
*/
checkGridAll = function (checkAll) {
    $("#Grid tbody input:checkbox").attr("checked", checkAll.checked);
}


/*8  通用的单选方法                                            2011-08-15
*/
function onRadio(chk) {
    if (chk.checked) {
        $('input[type=checkbox][name=' + chk.name + ']').each(function () {
            if (this.value != chk.value) {
                $(this).attr('checked', false);
            }
        });
    }
}

/*8-1.1  通用的单选方法                                            2011-08-15
*/
function onRadioForTree(chk, treeName, treeId, treeParentId) {
    if (chk.checked) {
        $('input[type=checkbox][treeName=' + treeName + '][treeParentId=' + treeParentId + ']').each(function () {
            if (this.name != chk.name) {
                $(this).attr('checked', false);
            }
        });
    }
}

/*8-1.2 选择框发生变化时执行（针对树结构）                          2011-09-14
chk             this自身
treeName        当前操作的Model名称 防止同页面不同类型的 因为Id相同出现混淆
treeId          自身Id
treeParentId    自身父节点Id

考虑到在页面存在两种情况（是否两个选择框、直接一个选择框） 所以都做了判断
*/
function onCheckedForTree(chk, treeName, treeId, treeParentId) {
    if (treeParentId) {
        // 如果存在父节点 则查询同父节点下的所有子节点 当前选择true的个数
        var trueCount = 0;
        $('input[type=checkbox][treeName=' + treeName + '][treeParentId=' + treeParentId + ']').each(function () {
            if (this.value == "true" && this.checked) {
                trueCount++;
            } else if (this.value == "false") {
            } else if (this.checked) {
                trueCount++;
            }
        });

        // 根据子项选择为true的个数 来判断父节点的选中状态
        $('input[type=checkbox][treeName=' + treeName + '][treeId=' + treeParentId + ']').each(function () {
            if (this.value == "true") {
                $(this).attr('checked', trueCount > 0);
            } else if (this.value == "false") {
                $(this).attr('checked', !(trueCount > 0));
            } else {
                $(this).attr('checked', trueCount > 0);
            }
        });
    }

    // 如果自身选择为否 则其子项也为 未选中状态
    if ((!chk.value && !chk.checked) || (chk.value == "true" && !chk.checked) || (chk.value == "false" && chk.checked)) {
        $('input[type=checkbox][treeName=' + treeName + '][treeParentId=' + treeId + ']').each(function () {
            if (this.value == "true") {
                $(this).attr('checked', false);
            } else if (this.value == "false") {
                $(this).attr('checked', true);
            } else {
                $(this).attr('checked', false);
            }
        });
    }
}
// Ajax获取页面信息 传入的Url一定要有至少一个参数(没有就加1=1才能包含?)
function GetAjaxContentByUrl(id, url) {
    if (document.getElementById(id)) {
        $.get(url + '&r=' + new Date().getMilliseconds(), function (d) {
            document.getElementById(id).innerHTML = d;
        });
    }
}
