;
(function($) {
    $.fn.extend({
        "cuiUpload":function(options) {
            if (!this.length) {
                return this;
            }
            var _self_ = this;
            var _config_ = {
                'name':'file',
                'css':'cui_fileBtn',
                'ajax':true
            }
            var template = '<div class="cui_fileDiv"><ul><li><span class="cui_fileName">${fileName}</span><span class="cui_fileLoading"></span><a class="cui_fileCancel" href="#">'+CuiRes["CANCEL"]+'</a></li></ul></div>';
            var imageRule = ['jpg','jpeg','gif','bmp','png','ico','jpe','tif','tiff','jfif','dib'];
            var checkFileType = function(name,rule){
                var rules = rule.split(',');
                var filetype = name.substr(name.lastIndexOf('.') + 1);
                if(filetype)filetype = filetype.toLowerCase();
                for (var i in rules) {
                    if (rules[i] == 'image/*') {
                        for(var j in imageRule){
                             if(imageRule[j] == filetype){
                                 return true;
                             }
                        }
                    } else if (rules[i] == filetype) {
                        return true;
                    }
                }
                return false;
            }

            _config_ = $.extend(_config_, options);
            var _input_ = $("<input type='file' class='cui_fileInput'>").attr("name", _config_.name);
            if (_config_.ajax) {

                _input_.change(function() {
                    if (!_config_.action)return;
                    var form = $('#cuiTmpform');
                    if (form.length == 0) {
                        form = $('<form>').attr('id', 'cuiTmpform').attr('encoding', "multipart/form-data").attr("method","post");
                        form.appendTo($('body'));
                    }
                    var content = this.value;
                    if(_config_.preHandle && !_config_.preHandle.apply(this,[content])){
                        return;
                    }

                    if(_config_.include && !checkFileType(content,_config_.include)){
                        CuiOverWarn(CuiRes['ILLEGAL_FILE_TYPE']);
                        return ;
                    }

                    if(_config_.exclude && checkFileType(content,_config_.exclude)){
                        CuiOverWarn(CuiRes['ILLEGAL_FILE_TYPE']);
                        return ;
                    }

                    var obj = $(this);
                    form.append(obj);
                    _self_.prepend(obj.clone(true));
                    var index = content.lastIndexOf('\\')+1;
                    var name = content.substr(index);
                    d = new Date();
                    var id = 'cui_'+d.getMinutes()+d.getSeconds()+d.getMilliseconds();
                    //todo maxlength
                    if(_config_.progressId){
                        var t = $(template.replace('${fileName}',name));
                        t.attr('id',id);
                        $('#'+_config_.progressId).append(t).find('.cui_fileCancel').click(function(){
                           $(this).parent().parent().parent().remove();
                        })
                    }
                    $.cuiAjaxForm("cuiTmpform", _config_.action, function(o, flag) {
                        form.empty();
                        if(flag && o.size){
                            $('.cui_fileLoading',$('#'+id)).before($('<span class="cui_fileSize"></span>').text($.cuiNumber2Size(o.size))).remove();
                        }else{
                            $('.cui_fileLoading',$('#'+id)).remove();
                        }
                        if (_config_.handle)_config_.handle.apply($('#'+id), [o,flag]);
                    },_config_.params);
                });
            }
            _self_.prepend(_input_);
            _self_.addClass(_config_.css);
        }
    });
})(jQuery);
