﻿function adsearch_open(obj) {
    var drag = $(obj).parent("div.drag:eq(0)");
    drag.css({
        left: ($(window).width() - drag.width()) / 2,
        top: ($(window).height() - drag.height()) / 2
    }).trigger("open");
  
}
function adsearch_close(obj) {
    var drag = $(obj).parent("div.drag:eq(0)");
    drag.close();
}
function adsearch_init() {//高级查询初始化
    var ct = $("div.adsearch_body_ct:eq(0)");
    ct.each(function () {
        adsearch_setup(this);
    });
}
function adsearch_setup(obj) {
    var ct = $(obj);
    var table = ct.find("table:eq(0)");
    var body_ct = ct.find("div.body_ct:eq(0)");
    $(document.forms[0]).submit(function () {
        if (ct.is(":visible")) {
            var success = adsearch_validator(table[0]); //验证
            if (success) {
                var result = adsearch_get_result(table[0]); //获取结果
                if (result.length == 0) {
                    alert("请设定查询条件"); return false;
                } else {
                    $(".tbAdSreach_Result").val($.toJSON(result));
                }
            }
            return success;
        }
    });
    ct.find("input.addSearch:eq(0)").click(function () {
        adsearch_add(table[0]);
        body_ct.scrollTop(body_ct[0].scrollHeight);
    });
//    ct.find("input.closeSearch:eq(0)").click(function () {
//        adsearch_close(obj);
//    });
    $("div.demo").scrollTop(300);
    for (var i = 0; i < 5; i++)
        adsearch_add(table[0]);
}
function adsearch_get_result(obj) {//获取查询设置结果
    var table = $(obj);
    var result = []; //结果为{ name:"",exp:"",value:"" }
    table.find("tr:not(.template:eq(0),.head)").each(function () {
        var tr = $(this);
        var field = tr.find("select.field"); //选择的字段
        var condition = tr.find("select.condition"); //条件
        var parameter = tr.find("input.parameter"); //值
        if (field[0].value != "") {//设置了值的
            var name = field.find(":selected")[0].value;
            var exp = condition.find(":selected")[0].value;
            var value = parameter.val();
            result.push({
                name: name,
                exp: exp,
                value: value 
            });
        }
    });
    return result;
}
function adsearch_add(obj) {//增加一个查询条件
    var table = $(obj);
    var template = table.find(".template:eq(0)");
    var tr = template.clone();
    tr.removeClass("template");
    var field = tr.find("select.field"); //选择的字段
    var condition = tr.find("select.condition"); //条件
    var parameter = tr.find("input.parameter"); //值
    //绑定字段
    $(adsearch_property_info_json).each(function () {
        field.append(String.format("<option  value='{1}' type='{2}'>{0}</option>", this.title, this.name, this.type));
    });
    //选择字段设置相应的表达式
    field.change(function () {
        var option = $(this).find(":selected");
        if (option) {
            var type = option.attr("type");
            var sel_exp = null;
            switch (type) {
                case "string": sel_exp = adsearch_condition_exp.string; break;
                case "number": sel_exp = adsearch_condition_exp.number; break;
                case "datetime": sel_exp = adsearch_condition_exp.datetime; break;
            }

            if (type == "datetime") {//如果为日期类型的则设置日期点击事件
                parameter.addClass("Wdate");
                parameter.click(function () { WdatePicker(); });
            } else {
                parameter.unbind("click");
                parameter.removeClass("Wdate");
            }
            condition.find("option").remove();
            $(sel_exp).each(function () {
                var symbol = adsearch_get_condition_symbol(this);
                condition.append(String.format("<option  value='{1}'  >{0}</option>", this, symbol));
            });
        }
    });

    table.append(tr);
}
function adsearch_validator(obj) {//验证值是否正确
    var table = $(obj);
    var result = true;
    table.find("tr:not(.template,.head)").each(function () {
        result = result && adsearch_validator_item(this);
    });
    return result;
}
function adsearch_validator_item(obj) {//验证值是否正确
    var tr = $(obj);
    var field = tr.find("select.field"); //选择的字段
    var option = field.find(":selected");
    var condition = tr.find("select.condition"); //条件
    var parameter = tr.find("input.parameter"); //值

    if (field[0].value != "") {
        var value = parameter.val();
        var success = false;
        var msg = ""
        if (value == "") {//如果选择了字段，则值不允许为空
            msg = String.format("请输入“{0}”的值", option[0].text);
            success = false;
        } else {
            var type = option.attr("type");
            switch (type) {//验证各种类型的值格式是否正确
                case "string":
                    success = true;
                    break;
                case "number":
                    success = (new RegExp("^(?:[+-]?)\\d*\.?\\d+$").test(value));
                    msg = success ? "" : String.format("“{0}”输入格式错误！必须为数值类型。", option[0].text);
                    break;
                case "datetime":
                    success = new RegExp("^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$").test(value);
                    msg = success ? "" : String.format("“{0}”输入的格式错误！必须为正确的日期，如：2010-02-10。", option[0].text);
                    break;
            }
        }
        if (!success) {
            alert(msg);
            parameter.focus();
        }
        return success;
    }
    return true;
}
function adsearch_get_condition_symbol(expName)//将表达式转换为Linq查询的表达式
{
    var ref = [
            ["包含", ".Contains(@0)"],
            ["等于", "=@0"],
            ["大于", ">@0"],
            ["大于或等于", ">=@0"],
            ["小于或等于", "<=@0"],
            ["小于", "<@0"],
            ["从", ">=@0"],
            ["至", "<=@0"],
            ["---", "@0"]//没有用的
        ];
    var result = null;
    $(ref).each(function () {
        if (this[0] == expName) {
            result = this[1]; return false;
        }
    });
    return result;
}
