function adjustFormTarget(formArr, form, options) {
    if (typeof options['target'] != 'undefined') {
        return true;
    }
    var cd, ft = $(form).attr('target');
    if (ft == 'newin') {
        var opt = $(document).data($(form).attr('id'))
        if (typeof(opt) == 'undefined') {
            opt = {};
        }
        cd = OpenDialog('', opt);
        //cd = OpenDialog();
    } else {
        cd = getCntDiv(form);
    }
    if (cd) {
        options['target'] = cd;
    }

    return true;

}

function submitAjaxForm(form, options) {
    options = options || {};
    options['beforeSubmit'] = adjustFormTarget;

//    if (d || options['target'] == 'unknow') {
//        if (d) {
//            options['target'] = d;
//        } else {
//            delete options['target'];
//        }
//    }

    $(form).ajaxSubmit(options);
    if (!$(form).attr('name').search(/search/i)) {
        $(':submit', form).attr("disabled", "disabled");
    }
    return false;
}

var __winid = 0;
var win = null;
function getCntDiv(el) {
    //ui-dialog
    //var el = e.target || e;
    var i = 0;
    var d = $(el).parent();
    while (d[0] != document && d[0] != window && !d.hasClass('ui-dialog-content')) {
        d = $(d[0]).parent();
        i++;
        if (i > 99) break;
    }
    return (i > 99) ? null : d;
}
function RefreshDialog(e) {
    var el = e.target || e;
    var d = getCntDiv(el);
    if (d) {
        var url = $(d).dialog('option', 'url');
        if (url) $(d).load(url);
    }
}

function OpenDialog(url, opts) {
    if (url) {
        if (url.indexOf('?') > -1) {
            url += '&__rnd='+Math.random();
        } else {
            url += '?__rnd='+Math.random();
        }
    }
    var _id = '__win_' + __winid++;
    var _el = $('<div id="' + _id + '" />');
    var defaults = {
        bgiframe: true,
        width: 500,
        height: 400,
        modal: true,
        open: function () {
            var msg = $(this).dialog('option', 'message');
            if (msg) $(this).html(msg);
            var url = $(this).dialog('option', 'url');
            if (url) $(this).load(url);
        },
        close: function () {
            $(this).dialog('destroy');
            _el.remove();
        }
    }
    opts = opts || {};
    opts['url'] = url;
    opts = $.extend(defaults, opts);
    _el.dialog(opts);

    return _el;
//    if (win){
//        var durl = $(win).dialog('option', 'url');
//        if (ourl != durl) {
//            win.dialog('close');
//            //更新配置
//            $(win).dialog('option', opts);
//        }
//        win.dialog('open');
//    } else {
//        win = $("#dialog").dialog(opts);
//    }

}

function CloseDialog(e) {
    var el = e.target || e;
    var d = getCntDiv(el);
    if (d) {
        $(d).dialog('destroy');
        $(d).remove();
    }
//    if (win) {
//        win.dialog('close');
//    } else {
//        $('#dialog').dialog('close');
//    }
}

function MessageBox(msg) {
    var _el = $('<div/>');
    _el.html(msg).appendTo(document.body).dialog({
        bgiframe: true,
        modal: true,
        close: function () {
            $(this).dialog('destroy');
            _el.remove();
        },
        buttons: {
            Ok: function() {
                $(this).dialog('destroy');
                _el.remove();
            }
        }
    });
    return _el;
}
function ConfirmBox(msg, opt) {
    var btnYes = opt['yes'] || 'Yes';
    var btnNo  = opt['no'] || 'No';
    var _el = $('<div/>');
    _el.html(msg).appendTo(document.body).dialog({
        autoOpen: false,
        bgiframe: true,
        resizable: false,
        height:140,
        modal: true,
        overlay: {
            backgroundColor: '#000',
            opacity: 0.5
        },
        open: function () {
            var w1 = _el.width();
            var w2 = _el.outerWidth();
            var h1 = _el.height();
            var h2 = _el.outerHeight();
            if (w2 > w1) {
                var w3 = $(_el).dialog('option', 'width');
                $(_el).dialog('option', 'width', w3 + w2 - w1);
                _el.width(w2);
            }
            if (h2 > h1) {
                var h3 = $(_el).dialog('option', 'height');
                $(_el).dialog('option', 'height', h3 + h2 - h1);
                _el.height(h2);
            }
            //if ()
        },
        close: function () {
            $(this).dialog('destroy');
            _el.remove();
        }
    });

    var buttons = {};
    buttons[btnYes] = function(event, ui) {
                //var self = this;
                if (opt['callback']) {
                    opt['callback'].apply(opt['scope'] || window, opt['args'] || []);
                }
                $(this).dialog('destroy');
                _el.remove();
            //$(this).load(url, {success: function () {$(self).dialog('destroy');}});
            };
    buttons[btnNo] = function(event, ui) {
                $(this).dialog('destroy');
                _el.remove();
            };
    _el.dialog('option', 'buttons', buttons);
    _el.dialog('open');
    return _el;
}

function TabReload(tab, idx) {
    if (tab.charAt(0) != '#') tab = '#' + tab
    if (idx.charAt(0) != '#') idx = '#' + idx
    if (typeof(idx) == 'string') {
        idx = $(tab + " li").index($(idx));
    }
    $(tab).tabs('load', idx);
}

function DelLinkCB(a, url) {
    var self = a;
    jQuery.ajax({
        type: "GET",
        url: url,
        //data: data,
        success: function (data) {if (data) setTimeout(self.attr('success'), 1); },
        dataType: 'json'
    });
}

/*
 *
 */
function AjaxPagination(div, opt) {
    var hs = $(div + ' a');
    hs.click(function (event) {
        var url = $(this).attr('href');
        if (typeof opt['target'] == 'undefined') {
            var dlg = getCntDiv(this);
            if (dlg) {
                $(dlg).dialog('option', 'url', url);
                $(dlg).load(url);
            }
        } else {
            var t = opt['target'];
            if (t.charAt(0) != '#') t = '#' + t;
            $(t).load(url);
        }
        return false;
    });
}

function AjaxForm(form, options) {
    options = options || {};
    options['beforeSubmit'] = adjustFormTarget;
    $(form).ajaxForm(options);
}

/*
 *
 */

function showA(el, tar) {
    var $tar = $(tar), $el = $(el);
    //console.log($el.attr('id'));
//    if (!$el.is(":hidden")) {
//        return;
//    }
    var curr = $tar.data('curr');
    if (curr) {
        if (curr == $el.attr('id')) {
            return;
        } else {
            $('#'+curr).hide();
        }

    }
    if ($el.attr('ied')) {
        $el.show();
    } else {
        var pos = $tar.position(), w = $tar.width(), h = $tar.height();
        $el.show().css({left: pos.left, top: pos.top, width: w+'px', height: h+'px', 'zIndex': '99999'});
        $el.attr('ied', 'true');
    }



    var overlay = $tar.data('overlay');
    if (typeof overlay === "undefined") {
        $e = $('<div class="overlay"></div>').appendTo(document.body).css({left: pos.left, top: pos.top, width: w+'px', height: h+'px'});
        $tar.data('overlay', $e);
    } else {
        overlay.show();
    }
    $tar.data('curr', $el.attr('id'));
    $(el).data('hide', false);
}
function hideA(el, tar) {
    var $tar = $(tar), $el = $(el);
    if ($el.is(":hidden")) return;
    $el.data('hide', true);
    setTimeout(function () {
        if ($(el).data('hide')) {
            $el.hide();
            if ($tar.data('curr') == $el.attr('id')) {
                $tar.data('curr', '');
                $tar.data('overlay').hide();
            }
        }}, 300);
}
function mouseA(el) {
    $(el).data('hide', false);
}


function DateRangePicker(begin_, end_) {
    $(begin_).datepicker({dateFormat: 'yy-mm-dd',changeMonth: true,changeYear: true, maxDate: new Date(), onClose: function () {$(end_).datepicker('option', 'minDate', $(this).datepicker('getDate'))}});
    $(end_).datepicker({dateFormat: 'yy-mm-dd',changeMonth: true,changeYear: true, maxDate: new Date(), onClose: function () {$(begin_).datepicker('option', 'maxDate', $(this).datepicker('getDate'))}});
}


$(document).ready(function () {
    $("a[dialog]").live("click", function(e){
        var self = $(this);
        var optname = self.attr('dialog');
        if (optname.length < 1) {
            return ;
        }
        e.preventDefault();
        e.stopPropagation();

        var url = self.attr('href');
        var msg = self.attr('message');

        var opt = $(document).data(optname)
        if (typeof(opt) == 'undefined') {
            opt = {};
        }
        if (optname == 'delete' && msg) {
            opt['callback'] = DelLinkCB;
            opt['args'] = [self, url]
            ConfirmBox(msg, opt);
        } else if (optname == '_current') {
            var d = getCntDiv(this);
            $(d).dialog('option', 'url', url);
            $(d).load(url);
        } else {
            //alert(url);
            OpenDialog(url, opt);
        }
        return false;
    })
});

