;(function() {


    /**
     * 파일 업로드
     */
    /**
     * 파일 업로드
     */
    cl.InstantUpload = new function() {

        // var self = this;
        /**
         * 선택한 파일폼요소를 잠깐 임시로 생성한 form 요소로 감싸 Ajax 로 이미지를 전송
         * @param fileFormElement input[type=file] 요소 선택
         * @param option $.ajax option
         */
        this.ajax = function(fileFormElement, url, options) {
            fileFormElement = $(fileFormElement);
            ElementValue = fileFormElement.data("path"); 


            var instantForm = $(document.forms.instantUpload);

            if(instantForm.length <= 0) {
                instantForm = $('<form>').attr({
                    'name': 'instantUpload',
                    'action': url + '?_format=json',
                    'method': 'post',
                    'enctype': 'multipart/form-data'
                });

                $('body').append(instantForm);
            }

            var sign = fileFormElement.clone();
            var cdElement = $("<input>");
            var cdForm = $("<input>");
            fileFormElement.after(sign);

            instantForm.append(fileFormElement.attr('name', 'file'));
            instantForm.append(cdElement.attr({name: "path", type: "hidden", value: ElementValue }));

            var jqxhr = cl.Ajax.syncFormUpload(document.forms.instantUpload, $.extend({
                success: function(data, status, xhr) {
                    // jquery form plugin 의 버그(?) 로 인해 Deferred.resolve 을 호출할때
                    // parseJSON 이 된 data 가 아닌 responseText 를 전달해주므로
                    // multipart 와 jquery form plugin submit 을 이용하는 경우에만
                    // 값을 대체해준다
                    // jquery.form.js:745 (deferred.resolve...)
                    xhr.responseText = data;
                }
            }, options));

            jqxhr.always(function() {
                fileFormElement.removeAttr('name');
                sign.before(fileFormElement);
                sign.remove();
            });

            $(document.forms.instantUpload).trigger('submit');
            $(document.forms.instantUpload).off('submit');

            return jqxhr;
        };
    };

})();