﻿;
(function($) {
    $.extend({
        "cuiToolbar":function(options){
            return new CuiToolbar(options);
        }
    });
    $.fn.extend({
       "cuiToolbar":function(options){
           var g = new CuiToolbar(options);
           return g.show(this);
       }
    });
})(jQuery);

/***
 * -CLASS-
 * @name CuiToolbar
 * @package cui
 * @description 工具栏类
 * @pageTag
 * @depend CuiButton,CuiSearchBox
 * @paramType string
 * @param id string/object/array <生成toolbar的id,id数组或jquery对象,对象数组>
 * @author ypu
 * @version 2011-08-03
 * @since 0.1
 */
var CuiToolbar = function(options) {
    //组件数组
    var _buttons_ = [];
    //分页对象，分页需要额外处理，放置右侧最后
    var _paging_;
    //上下文对象
    var _context_ = [];

//    var _idGenerator_ = 0;
    //当前toolbar对象
    var _self_ = this;

    //todo 分割线 toolbar
    //左侧部分结构
    this.leftFrameHtml = '<div class="cui_toolBarLeft"></div>';
    //右侧部分结构
    this.rightFrameHtml = '<div class="cui_toolBarRight"></div>';
    //总体结构
    this.frameHtml = '<div class="cui_buttonArea"></div>';

//    if (id) {
//        if (typeof id == 'string') {
//            _context_.push($('#' + id));
//        } else if (id.length && id.length > 0) {
//            for (var i = 0; i < id.length; i++) {
//                if (typeof id[i] == 'string') {
//                    _context_.push($('#' + id[i]));
//                } else if (id[i].jquery) {
//                    _context_.push(id[i]);
//                } else {
//                    _context_.push($(id[i]));
//                }
//            }
//        } else if (id.jquery) {
//            _context_.push(id);
//        } else {
//            _context_.push($(id));
//        }
//    }

    this.privateSetProxy = function(proxy) {
        if (proxy)_self_ = proxy;
    }

    /**
     * -METHOD-
     * @summary 添加CuiPaging控件
     * @description  添加CuiPaging控件，加入toolbar中
     * @method setPaging
     * @param obj CuiPaging <分页对象>
     * @return CuiToolbar
     * @since 0.1
     */
    this.setPaging = function(obj) {
        _paging_ = obj;
        return _self_;
    }
    /**
     * -METHOD-
     * @summary 获取CuiPaging控件
     * @method getPaging
     * @return CuiPaging
     * @since 0.1
     */
    this.getPaging = function() {
        return _paging_;
    }
//    /**
//     * -METHOD-
//     * @summary 添加搜索框
//     * @description  添加搜索框，加入toolbar中
//     * @method setSearchBox
//     * @param func function <搜索事件回调函数，参数(string)，搜索内容>
//     * @param params json <搜索输入框设置>
//     * @param title string <输入框提示> params
//     * @param maxlength int <输入框最大输入> params
//     * @return CuiToolbar
//     * @since 0.1
//     */
    this.setSearchBox = function(func, params) {
        var obj = new CuiSearchBox(func, params, _self_);
        obj._align_ = 'right';
        _buttons_.push(obj);
        return _self_;
    }
     /**
     * -METHOD-
     * @summary 添加toolbar组件
     * @description  添加toolbar显示组件，CuiButton、CuiSearchBox、CuiSelector、CuiPaging等。
     * @method add
     * @param obj object <toolbar组件对象，对象需要实现show方法>
     * @param align string <对齐方式，可选为"left","right","center",默认为"left">
     * @return CuiToolbar
     * @since 0.1
     */
    this.add = function(obj, align) {
        if (!align) {
            obj._align_ = 'left'
        } else {
            obj._align_ = align;
        }
        _buttons_.push(obj);
        return _self_;
    }

//    /**
//     * -METHOD-
//     * @summary 添加按钮
//     * @description  添加按钮，绑定触发事件
//     * @method addButton
//     * @param name string <按钮名称>
//     * @param fun function <按钮回调函数>
//     * @return CuiToolbar
//     * @since 0.1
//     */
    this.addButton = function(name, fun) {
        var obj = new CuiButton(name, fun, _self_);
        obj._align_ = 'left';
        _buttons_.push(obj);
        return _self_;
    }

    /**
     * -METHOD-
     * @summary 显示工具栏
     * @description  根据id显示工具栏。
     * @method show
     * @param id string/object/array <生成toolbar的id,id数组或jquery对象,对象数组>
     * @return none
     * @since 0.1
     */
    this.show = function(id) {
        if (id) {
            if (typeof id == 'string') {
                _context_.push($('#' + id));
            } else if (id.length && id.length > 0) {
                for (var i = 0; i < id.length; i++) {
                    if (typeof id[i] == 'string') {
                        _context_.push($('#' + id[i]));
                    } else if (id[i].jquery) {
                        _context_.push(id[i]);
                    } else {
                        _context_.push($(id[i]));
                    }
                }
            } else if (id.jquery) {
                _context_.push(id);
            } else {
                _context_.push($(id));
            }
        }
        var tmpFrame = [];
        var tmpRight = [];
        var tmpLeft = [];
        for (var i = 0; i < _context_.length; i++) {
            var frame = $(this.frameHtml);
            tmpFrame.push(frame);
            _context_[i].append(frame);
        }
        for (var i = 0; i < tmpFrame.length; i++) {
            var frameLeft = $(this.leftFrameHtml);
            tmpLeft.push(frameLeft);
            tmpFrame[i].append(frameLeft);
        }
        for (var i = 0; i < tmpFrame.length; i++) {
            var frameRight = $(this.rightFrameHtml);
            tmpRight.push(frameRight);
            tmpFrame[i].append(frameRight);
        }
        //if (_paging_)_paging_.show(tmpRight);
        for (var i = 0; i < tmpFrame.length; i++) {
            this.privateShow(tmpFrame[i], tmpLeft[i], tmpRight[i]);
        }
        if (_paging_)_paging_.show(tmpRight);
//        $(".toolBar_button").button();
        return _self_;
    }

    this.privateShow = function(tag, tleft, tright) {
        for (var s in _buttons_) {
            if(typeof _buttons_[s].show != 'function')continue;
            var type = _buttons_[s]._align_;
            if (type == 'left') {
                _buttons_[s].show(tleft);
            } else if ('right') {
                _buttons_[s].show(tright);
            } else {
                _buttons_[s].show(tag);
            }
        }
    }

}
///EndClass

;
(function($) {
    $.extend({
        "cuiButton":function(options,func,proxy){
            return new CuiButton(options,func,proxy);
        }
    });
    $.fn.extend({
       "cuiButton":function(options,func,proxy){
           var g = new CuiButton(options,func,proxy);
           return g.show(this);
       }
    });
})(jQuery);

/***
 * -CLASS-
 * @name CuiButton
 * @package cui
 * @description 按钮类
 * @pageTag
 * @paramType string
 * @param name string <按钮显示名称> <I>
 * @param func function <按钮回调函数>
 * @author ypu
 * @version 2011-09-06
 * @since 0.1
 */
var CuiButton = function(name, func, proxy) {
    //名称
    var _name = name;
    //回调函数
    var _func = func;
    //当前按钮对象
    var _self = this;
    //上下文
    var _context = [];
    //按钮状态
    var _status = true;

    if (proxy)_self = proxy
/**
 * -PROPERTY-
 * @summary 按钮框架
 * @description 按钮框架html
 * @param frame string
 * @since 0.1
 */
    this.frameHtml = '<input type="button" class="toolBar_button">';
    /**
     * -METHOD-
     * @summary 显示按钮
     * @description  根据id显示按钮。
     * @method show
     * @param id string/object <生成按钮的id或jquery对象>
     * @return none
     * @since 0.1
     */
    this.show = function(id) {
        var tag;
        if (id) {
            if (typeof id == 'string') {
                tag = $('#' + id);
            } else if (id.jquery) {
                tag = id;
            } else {
                tag = $(id);
            }
        }
        if(!tag.hasClass('cui_buttonArea'))tag.addClass('cui_buttonArea');
        this.privateShow(_name,tag);
        return _self;
    }

    this.privateShow = function(b,tag){
        if(typeof b == 'string'){
            var btn ;
            btn = $(this.frameHtml).val(b);
            if (_func)btn.bind('click', function() {
                if(!_status)return;
                if (_func && typeof _func == "function") {
                    _func.apply(_self, [$(this).val()]);
                }
            });
            btn.attr("name",b);
            tag.append(btn);
            _context.push(btn);
            btn.button();
        }else if($.isArray(b)){
            for(var i = 0;i < b.length;i++){
                this.privateShow(b[i],tag);
            }
        }else{ //pic button
            var btn ;
            if(b.css){
               btn = $("<button></button>");
            }else{
               btn = $(this.frameHtml);
            }
            var text = true;
            if(b.name){
                btn[b.css?"text":"val"](b.name);
                btn.attr('name',b.name);
            }else{
                text = false;
            }

            if(b.id){
                btn.attr('id',b.id);
            }

            if(b.func && typeof b.func == 'function'){
                btn.bind('click', function() {
                if (!_status)return;
                var value = $(this).attr('id');
                if(!value)value = $(this).attr('name');
                b.func.apply(_self,[value])});
            }else if(_func){
                btn.bind('click', function() {
                if (!_status)return;
                var value = $(this).attr('id');
                if (!value)value = $(this).attr('name');
                _func.apply(_self, [value])});
            }
            tag.append(btn);
            if (b.css) {
                btn.button({
                    icons: {
                        primary: b.css,
                        text:text
                    }
                });
            } else {
                btn.button();
            }
            _context.push(btn);
        }
    }
    /**
     * -METHOD-
     * @summary 隐藏按钮
     * @description  隐藏按钮
     * @method hide
     * @return none
     * @since 0.1
     */
    this.hide = function(){
        for(var i = 0;i < _context.length; i++){
            _context[i].hide();
        }
        return _self;
    }
     /**
     * -METHOD-
     * @summary 显示按钮
     * @description  显示按钮
     * @method display
     * @return none
     * @since 0.1
     */
    this.display = function(){
        for(var i = 0;i < _context.length; i++){
            _context[i].show();
        }
        return _self;
    }
     /**
     * -METHOD-
     * @summary 禁用按钮
     * @description  禁用按钮
     * @method disable
     * @return none
     * @since 0.1
     */
    this.disable = function(){
        _status = false;
        return _self;
    }
     /**
     * -METHOD-
     * @summary 启用按钮
     * @description  启用按钮
     * @method enable
     * @return none
     * @since 0.1
     */
    this.enable = function(){
       _status = true;
        return _self;
    }
}
///EndClass

;
(function($) {
    $.extend({
        "cuiSearchBox":function(func,options,proxy){
            return new CuiSearchBox(func,options,proxy);
        }
    });
    $.fn.extend({
       "cuiSearchBox":function(func,options,proxy){
           var g = new CuiSearchBox(func,options,proxy);
           return g.show(this);
       }
    });
})(jQuery);
/***
 * -CLASS-
 * @name CuiSearchBox
 * @package cui
 * @description 搜索框类
 * @pageTag
 * @paramType string
 * @param func function/json <搜索回调函数>
 * @param search function <高级搜索时，搜索回调函数> func
 * @param advsearch function <高级搜索时，高级搜索的回调函数> func
 * @param params json <搜索框参数>
 * @param title string <输入框title提示> params
 * @param maxlength int <输入框最大输入值> params
 * @author ypu
 * @version 2011-09-06
 * @since 0.1
 */
var CuiSearchBox = function(func, params, proxy) {
    //回调函数
    var _func_ ;

    var _advfunc_;

    if(typeof func == 'function'){
        _func_ = func;
    }else if(func.search && func.advsearch){
        _func_ = func.search;
        _advfunc_ = func.advsearch;
    }
    //参数设置
    var _params_ = params;
    //当前对象
    var _self = this;
    //上下文
    var _context = [];
    //状态
    var _status = true;
    if (proxy)_self = proxy;

    if(_advfunc_){
        /**
         * -PROPERTY-
         * @summary 输入框样式
         * @description 输入框样式名称
         * @param inputClass string
         * @since 0.1
         */
        this.inputClass = 'cui_advSearchInput';
        /**
         * -PROPERTY-
         * @summary 搜索按钮样式
         * @description 搜索按钮样式名称
         * @param buttonClass string
         * @since 0.1
         */
        this.buttonClass = 'cui_advSearchSubmit';
        /**
         * -PROPERTY-
         * @summary 高级搜索按钮样式
         * @description 高级搜索按钮样式名称
         * @param advClass string
         * @since 0.1
         */
        this.advClass = 'cui_advSearch';
    }else{
        this.inputClass = 'cui_searchInput';
        this.buttonClass = 'cui_searchSubmit';
    }


/**
 * -PROPERTY-
 * @summary 搜索框框架
 * @description 搜索框框架html
 * @param frame string
 * @since 0.1
 */
    this.frameHtml = '<div class="cui_searchArea"></div>';
    /**
     * -METHOD-
     * @summary 显示搜索框
     * @description  根据id显示搜索框。
     * @method show
     * @param id string/object <生成搜索框的id或jquery对象>
     * @return none
     * @since 0.1
     */
    this.show = function(id) {
        var tag;
        if (id) {
            if (typeof id == 'string') {
                tag = $('#' + id);
            } else if (id.jquery) {
                tag = id;
            } else {
                tag = $(id);
            }
        }

        var input = ($("<input>").attr('type', 'text').addClass(this.inputClass));
        if (_params_)input.attr(_params_);
        input.bind('keyup', function(event) {
            if (event.keyCode == 13) {
                if(!_status)return ;
                var value = $(this).val();
                for (var i = 0; i < _context.length; i++) {
                    $("input[type=text]", _context[i]).val(value);
                }
                if (_func_ && typeof _func_ == "function") {
                    _func_.apply(_self, [value]);
                }
            }
        });
        var button = $("<span></span>").addClass(this.buttonClass).attr('title', CuiRes.SEARCH);
        button.bind('click', function() {
            if(!_status)return;
            var value = input.val();
            for(var i=0;i<_context.length;i++){
                $("input[type=text]",_context[i]).val(value);
            }
            if (_func_ && typeof _func_ == "function") {
                _func_.apply(_self, [value]);
            }
        });
	  
        var frame = $(this.frameHtml);
        frame.append(input);
        frame.append(button);

        if (_advfunc_) {
            var adv = $("<span></span>").addClass(this.advClass).attr('title', CuiRes.ADVSEARCH);
            adv.bind('click', function() {
                if (!_status)return;
                if (_advfunc_ && typeof _advfunc_ == "function") {
                    _advfunc_.apply(_self, []);
                }
            });
            frame.append(adv);
        }

        tag.append(frame);
        _context.push(frame);
        return _self;
    }
     /**
     * -METHOD-
     * @summary 隐藏搜索框
     * @description  隐藏搜索框
     * @method hide
     * @return none
     * @since 0.1
     */
    this.hide = function(){
        for(var i=0;i<_context.length;i++){
            _context[i].hide();
        }
        return _self;
    }
     /**
     * -METHOD-
     * @summary 显示搜索框
     * @description  显示搜索框
     * @method display
     * @return none
     * @since 0.1
     */
    this.display = function(){
        for (var i = 0; i < _context.length; i++) {
            _context[i].show();
        }
        return _self;
    }
     /**
     * -METHOD-
     * @summary 禁用搜索框
     * @description  禁用搜索框
     * @method disable
     * @return none
     * @since 0.1
     */
    this.disable = function(){
        for (var i = 0; i < _context.length; i++) {
            $("input",_context[i]).attr("disabled", "disabled");
        }
        _status = false;
        return _self;
    }
     /**
     * -METHOD-
     * @summary 启用搜索框
     * @description  启用搜索框
     * @method enable
     * @return none
     * @since 0.1
     */
    this.enable = function(){
        for (var i = 0; i < _context.length; i++) {
            $("input",_context[i]).removeAttr("disabled");
        }
        _status = true;
        return _self;
    }
}
///EndClass

;
(function($) {
    $.extend({
        "cuiSelector":function(options,proxy){
            return new CuiSelector(options,proxy);
        }
    });
    $.fn.extend({
       "cuiSelector":function(options,proxy){
           var g = new CuiSelector(options,proxy);
           return g.show(this);
       }
    });
})(jQuery);
/***
 * -CLASS-
 * @name CuiSelector
 * @package cui
 * @description 下拉框类
 * @pageTag
 * @paramType JSON
 * @param title string <下拉框显示标题> <I>
 * @param data Array <下拉数据，数据对象[{"name":"","value":""},.....]> <I>
 * @param handler function <选择回调函数，参数为该内容的value>
 * @param titleChange boolean <选择后下拉框标题是否变为该内容，默认为false>
 * @author ypu
 * @version 2011-12-07
 * @since 0.1
 */
var CuiSelector = function(options,proxy){
    //下拉数据
    var _data;
    //标题
    var _title;
    //回调函数
    var _func;
    //当前对象
    var _self = this;
    //内容改变是否改变标题
    var _change = false;
    //上下文
    var _context = [];
    //状态
    var _status = true;

    if (options) {
        if (options.title)_title = options.title;
        if (options.data)_data = options.data;
        if (options.handler)_func = options.handler;
        if (options.titleChange)_change = options.titleChange;
    }
    if (proxy)_self = proxy;

//    this.frameCss = "cui_selectBox";
//    this.titleCss = "cui_selectTitle";
//    this.subCss = "cui_selectSub";
//    this.speratorCss = "cui_selectLine";

    /**
     * -METHOD-
     * @summary 展示下拉框
     * @description  展示下拉框
     * @method show
     * @param id string <下拉框显示到元素的id>
     * @return none
     * @since 0.1
     */
    this.show = function(id){
        var tag;
        if (id) {
            if (typeof id == 'string') {
                tag = $('#' + id);
            } else if (id.jquery) {
                tag = id;
            } else {
                tag = $(id);
            }
        }
        var rid = 'cui_'+$.cuiRandom(10000)
        tag.append($("<div class='cui_selectBox'>").attr("id",rid));
        tag = $("#"+rid,tag);
        tag.append($('<div class="cui_selectTitle"></div>').text(_title));

        var _selector_ = $('<div class="cui_selectSub"></div>');
        for(var i = 0;i<_data.length;i++){
            if(_data[i] == CuiSelector.SEPERATOR ){
                _selector_.append($('<div class="cui_selectLine"></div>'));
            }else{
                _selector_.append($('<p></p>').append( $('<a href="#"></a>').attr('value',_data[i].value).text(_data[i].name)))
            }
        }
        tag.append(_selector_);

        $("div.cui_selectTitle",tag).click(function() {
            var cui_select = $(".cui_selectSub",tag);
            if (cui_select.css("display") == "none") {
                cui_select.slideDown(600);
            } else {
                cui_select.slideUp(600);
            }
        });

        tag.mouseleave(function() {
            $(".cui_selectSub",tag).slideUp(600);
        })

        $("a",tag).click(function(){
            if(!_status)return;
            if(_change){
                var value = $(this).text();
                for (var i = 0; i < _context.length; i++) {
                    $("div.cui_selectTitle", _context[i]).html(value);
                }
            }
            //todo
            if(_func){
               _func.apply(_self,[$(this).attr('value')]);
            }
        });
        _context.push(tag);
        return _self;
    }

    /**
     * -METHOD-
     * @summary 隐藏下拉框
     * @description  隐藏下拉框
     * @method hide
     * @return none
     * @since 0.1
     */
    this.hide = function(){
        for(var i=0;i<_context.length;i++){
            _context[i].hide();
        }
        return _self;
    }
     /**
     * -METHOD-
     * @summary 显示下拉框
     * @description  显示下拉框
     * @method display
     * @return none
     * @since 0.1
     */
    this.display = function(){
        for (var i = 0; i < _context.length; i++) {
            _context[i].show();
        }
        return _self;
    }
     /**
     * -METHOD-
     * @summary 禁用下拉框
     * @description  禁用下拉框
     * @method disable
     * @return none
     * @since 0.1
     */
    this.disable = function(){
        for (var i = 0; i < _context.length; i++) {
            $("input",_context[i]).attr("disabled", "disabled");
        }
        _status = false;
        return _self;
    }
     /**
     * -METHOD-
     * @summary 启用下拉框
     * @description  启用下拉框
     * @method enable
     * @return none
     * @since 0.1
     */
    this.enable = function(){
        for (var i = 0; i < _context.length; i++) {
            $("input",_context[i]).removeAttr("disabled");
        }
        _status = true;
        return _self;
    }
}
CuiSelector.SEPERATOR = {'cui_seperator':'cui_seperator'};
///EndClass
