
jQuery.extend({
    handleError: function (s, xhr, status, e) {
        if (s.error) { s.error.call(s.context || s, xhr, status, e); }
        if (s.global) { (s.context ? jQuery(s.context) : jQuery.event).trigger("ajaxError", [xhr, s, e]); }
    },

    createUploadIframe: function (id, uri) {
        var frameId = 'jUploadFrame' + id;
        var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';
        if (window.ActiveXObject) { if (typeof uri == 'boolean') { iframeHtml += ' src="' + 'javascript:false' + '"'; } else if (typeof uri == 'string') { iframeHtml += ' src="' + uri + '"'; } }
        iframeHtml += ' />';
        jQuery(iframeHtml).appendTo(document.body);

        return jQuery('#' + frameId).get(0);
    },
    createUploadForm: function (id, fileElementId, data) {
        var formId = 'jUploadForm' + id;
        var fileId = 'jUploadFile' + id;
        var form = jQuery('<form  action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
        if (data) { for (var i in data) { jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form); } }
        var oldElement = jQuery('#' + fileElementId);
        var newElement = jQuery(oldElement).clone();
        jQuery(oldElement).attr('id', fileId);
        jQuery(oldElement).before(newElement);
        jQuery(oldElement).appendTo(form);

        jQuery(form).css('position', 'absolute');
        jQuery(form).css('top', '-1200px');
        jQuery(form).css('left', '-1200px');
        jQuery(form).appendTo('body');
        return form;
    },

    ajaxFileUpload: function (s) {
        s = jQuery.extend({}, jQuery.ajaxSettings, s);
        var id = new Date().getTime()
        var form = jQuery.createUploadForm(id, s.fileElementId, (typeof (s.data) == 'undefined' ? false : s.data));
        var io = jQuery.createUploadIframe(id, s.secureuri);
        var frameId = 'jUploadFrame' + id;
        var formId = 'jUploadForm' + id;
        if (s.global && !jQuery.active++) { jQuery.event.trigger("ajaxStart"); }
        var requestDone = false;
        var xml = {}
        if (s.global) { jQuery.event.trigger("ajaxSend", [xml, s]); }
        var uploadCallback = function (isTimeout) {
            var io = document.getElementById(frameId);
            try {
                if (io.contentWindow) {
                    xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null;
                    xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument : io.contentWindow.document;
                } else if (io.contentDocument) {
                    xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null;
                    xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document;
                }
            } catch (e) { jQuery.handleError(s, xml, null, e); }
            if (xml || isTimeout == "timeout") {
                requestDone = true;
                var status;
                try {
                    status = isTimeout != "timeout" ? "success" : "error";
                    if (status != "error") {
                        var data = jQuery.uploadHttpData(xml, s.dataType);
                        if (s.success) { s.success(data, status); }
                        if (s.global) { jQuery.event.trigger("ajaxSuccess", [xml, s]); }
                    } else { jQuery.handleError(s, xml, status); }
                } catch (e) { status = "error"; jQuery.handleError(s, xml, status, e); }

                if (s.global) { jQuery.event.trigger("ajaxComplete", [xml, s]); }
                if (s.global && ! --jQuery.active) { jQuery.event.trigger("ajaxStop"); }
                if (s.complete) { s.complete(xml, status); }
                jQuery(io).unbind()
                setTimeout(function () { try { jQuery(io).remove(); jQuery(form).remove(); } catch (e) { jQuery.handleError(s, xml, null, e); } }, 100)
                xml = null
            }
        }

        if (s.timeout > 0) { setTimeout(function () { if (!requestDone) uploadCallback("timeout"); }, s.timeout); }
        try {

            var form = jQuery('#' + formId);
            jQuery(form).attr('action', s.url);
            jQuery(form).attr('method', 'POST');
            jQuery(form).attr('target', frameId);
            if (form.encoding) { jQuery(form).attr('encoding', 'multipart/form-data'); } else { jQuery(form).attr('enctype', 'multipart/form-data'); }
            jQuery(form).submit();

        } catch (e) { jQuery.handleError(s, xml, null, e); }

        jQuery('#' + frameId).load(uploadCallback);
        return { abort: function () { } };

    },

    uploadHttpData: function (r, type) {
        var data = !type;
        data = type == "xml" || data ? r.responseXML : r.responseText;
        if (type == "script") { jQuery.globalEval(data); }
        if (type == "json") { data = data.replace('<pre style="word-wrap: break-word; white-space: pre-wrap;">', '').replace('<pre>', '').replace('</pre>', '').replace(/\\/g, '/'); eval("data = " + data); }
        if (type == "html") jQuery("<div>").html(data).evalScripts();

        return data;
    }
})


function ajax_upload(ajaxURI, feid, callback) { $.ajaxFileUpload({ fileElementId: feid, url: ajaxURI, type: 'post', dataType: 'json', secureuri: false, async: true, success: function (data) { if (callback) callback.call(this, data); }, error: function (data, status, e) { console.log(e); } }); }
function imgCheck(field) { var img = document.getElementById(field); return /.(jpg|png|gif|bmp)$/.test(img.value) ? true : (function () { alert('图片格式仅支持jpg、png、gif、bmp格式，且区分大小写。'); return false; })(); }
function UploadImg(obj, targetCtrl, cb) {
    var image = $("#" + obj.id).val();
    if ($.trim(image) == "") { layer.msg("请选择图片！"); return; }
    var postURI = "/AjaxHandler/ajImg.aspx?action=Image&R=" + Math.random();
    var objId = obj.id;
    ajax_upload(postURI, obj.id, function (data) { if (data.status == "success") { $("#" + targetCtrl).val(data.msg); if (cb) { cb(targetCtrl, data.msg); } } else { layer.alert(data.msg); } });
}