 /* 取得核心元件檔案：/DJJSLib/CanvasChartSVC/plugin/SKV/SKV.1.1.js */ 
(function($){

var globalReg=function(){
    window.SKV = function(selector,option){ return new UI.Bridge(selector,option); };
};

var UI={},
    DIV='<div>',DIV_='<div ',_DIV='</div>',
    SPAN='<span>',SPAN_='<span ',_SPAN='</span>',
    UL='<ul>',_UL='</ul>',LI_='<li ',_LI='</li>',
    TR_='<tr ',_TR='</tr>',
    TD='<td>',TD_='<td ',_TD='</td>';

var UTIL={//util
    isAry:$.isArray,
    ext:$.extend,
    each:$.each,
    Int:function(v){ return parseInt(v,10); },
    toStr:function(ary,splitor){
        if(!splitor) splitor=',';
        if(UTIL.isAry(ary)) return ary.join(splitor);
        return ary.toString();
    },
    isTouch:(window.ontouchstart!==undefined),
    isIE:function(version){
        if(!version) version=8;
        var userAgent = (document.documentMode)?document.documentMode:document.compatMode;
        return ($.browser.msie&&($.browser.version<=version||userAgent<=version));
    },
    isStr:function(str){ return (typeof str=='string'); },
    strLen:function(s){
        s=s.toString();
        var len=0;
        for(var i=0;i<s.length;i++){
            var c=s.charCodeAt(i);
            len+=((c>>8)>0)?2:1;
        }
        return len;
    },
    get$s:function(selector){
        return (typeof selector=='object' && selector.jquery)?selector:$(selector);
    },
    parseParam2Ary:function(val){
        if($.isArray(val)) return val;
        else if(UTIL.isStr(val)) return $.trim(val.toString()).split(' ');
        return [val];
    },
    parseQueryStringUpper: function(params){
        var obj={};
        if(typeof params=='object'){
            $.each(params,function(key,val){
                obj[key.toString().toUpperCase()]=(UTIL.isStr(val))?$.trim(val):val;
            });
        } else if(UTIL.isStr(params)) {
            $.each(params.split('&'), function(i, param) {
                var pair = $.trim(param.toString()).split('='),val;
                if(pair.length>1) {
                    obj[$.trim(pair[0].toUpperCase())] = $.trim(pair.slice(1).join('='));
                }
            });
        }
        return obj;
    }
};
UI.Tmpl={
    div:function(css,end){
        var sb=[DIV_];
        if(css){
            if(UTIL.isAry(css)) css=css.join(' ');
            sb.push('class="',css,'" ');
        }
        end=(end)?'/>':'>';
        sb.push(end);
        return sb.join('');
    },
    table:function(tabs,rows){
        if(!tabs.length||!rows.length) return;
        var i,k,sb=['<table>'],colIdx,cssCol;
        sb.push(TR_,'class="skv_row0">',TD,_TD)
        for(i=0;i<tabs.length;i++){
            colIdx=i+1;
            cssCol = (colIdx%2)?'col_odd':'col_even';
            sb.push(TD_,'class="',cssCol,'">',tabs[i],_TD);
        }
        sb.push(_TR);
        for(i=0;i<rows.length;i++){
            sb.push(TR_,'class="skv_row',(i+1),'">',TD_,'class="',((tabs.length>1)?'col0 col_fix':'col0'),'">',rows[i],_TD);
            for(k=0;k<tabs.length;k++){
                colIdx=k+1;
                cssCol = (colIdx%2)?'col_odd':'col_even';
                sb.push(TD_,'class="',cssCol,'">',_TD);
            }
            sb.push(_TR);
        }
        sb.push('</table>');
        return sb.join('');
    },
    dnArrow:function(){
        var sb=[SPAN_,'class="dnArrow">','▼',_SPAN];
        return sb.join('');
    },
    SKV:function(option){
        var me=this,i,tmp,
            opt={
                logo:'',
                logoUrl:'',
                loadingMsg:'loading...',
                tabIdx:0,
                views:1,
                tabStyle:0,
                tabs:null,//['加權','櫃檯']
                tableStyle:0,//0:全部商品,1:單一商品
                rows:null //['指數','漲跌','量']
            },sb=[];
        UTIL.ext(opt,option);
        //head
        sb.push(me.div('skv_head'));
        if(opt.logo){ sb.push(DIV_,'class="skv_logo"><a target="_blank" href="',opt.logoUrl,'">',opt.logo,'</a>',_DIV); }
        if(opt.tabs){
            sb.push(DIV_,'unselectable="on" class="skv_tabs">'); 
            if(opt.tabs.length<2){}//undo
            else if(opt.tabStyle){
                sb.push('<span name="tabTitle" idx="',opt.tabIdx,'" class="skv_tabTitle">',
                        SPAN_,'class="skv_tt">',opt.tabs[opt.tabIdx],_SPAN,me.dnArrow(),
                _SPAN);
                sb.push(DIV_,'class="skv_tabItems">',UL);
                for(i=0;i<opt.tabs.length;i++){
                    tmp = (i==opt.tabIdx)?'class="tabon" ':'';
                    sb.push(LI_,tmp,'name="tab',i,'">',opt.tabs[i],_LI);
                }
                sb.push(_UL,_DIV);
            } else {
                for(i=0;i<opt.tabs.length;i++){
                    tmp=['skv_tab'];
                    if(i==(opt.tabIdx+1%opt.tabs.length)) tmp.push('tabon');
                    sb.push('<span name="tab',i,'" class="',tmp.join(' '),'">',opt.tabs[i],_SPAN);
                }
            }
            sb.push(_DIV);
        }
        
        sb.push(_DIV);
        //body
        sb.push(me.div('skv_body'));
        for(i=0;i<opt.tabs.length;i++){
            var cssC=['skv_content','skv_c'+i,'skv_cton'];
            sb.push(me.div(cssC),
                DIV_,'name="skvView',i,'">',opt.loadingMsg,_DIV,
                me.div('skvLegend skvLg'+i,1),
                me.div('skvTitle skvT'+i,1),
            _DIV);
        }
        sb.push(_DIV);
        //foot
        sb.push(me.div('skv_foot'));
        if(opt.tabs&&opt.rows){
            tmp=(opt.tableStyle)?opt.tabs.slice(0,1):opt.tabs;
            sb.push(DIV_,'class="skv_table">',me.table(tmp,opt.rows),_DIV);
        }
        sb.push(_DIV);
        
        return sb.join('');
    }
};

UI.Act = function(selector,option){
    var me=this;
    me._$s=UTIL.get$s(selector);
    me.opt=UTIL.ext({},me.opt,option);
    me._init();
};
UI.Act.prototype={
    opt:{
        views:1,//1|2
        charts:2,//1|2
        table:1,//1|0
        tableStyle:0,//0:全部商品,1:單一商品
        logo:'',
        logoUrl:'',
        tabIdx:0,
        tabStyle:0,//0:輪播, 1:選單
        ud:1,//是否顯示漲跌
        udp:1,//是否顯示漲跌幅
        tabs:null,
        rows:null
    },
    _cW:0,
    _cH:0,
    _dp:2,
    _SF:0,
    _vLeft:null,
    _unit:null,
    _noTip:null,
    _$s:null,
    _dataList:null,//Array<{T,O,H,L,C,V,UD,UDP}>
    _bcdList:null,//Array<string>
    _addBcdList:null,//Array<string>
    _viewlist:null,
    _paramsList:null,
    //event
    _evt_click_tabRound:function(e){//跑馬燈風格的切換模式
        var me=this,
            $t=$(e.target),
            $items=$t.parent().find('.skv_tab'),
            len=me.opt.tabs.length,
            s_tabon='tabon',
            s_skv_cton='skv_cton',
            idx=UTIL.Int($t.attr('name').replace('tab',''));
        if(isNaN(idx)) idx=0;
        $t.removeClass(s_tabon);
        $items.eq((idx+1)%len).addClass(s_tabon);//move to next
        me._$s.find('.skv_content').removeClass(s_skv_cton);
        me._$s.find('.skv_c'+idx).addClass(s_skv_cton);
        if(me.opt.tableStyle) me._setTable(idx);
    },
    _evt_click_tabTitle:function(e){//選單風格的切換模式
        e.stopPropagation();
        var me=this,
            $t=$(e.target),
            $items=me._$s.find('.skv_tabItems'),
            h=$t.height(),cssObj={display:'block'},
            pad=3;
        //定位
        if(h>0) cssObj.top=h+3;
        if($items.css('display')=='none') $items.css(cssObj);
    },
    _evt_click_tabItems:function(e){
        e.stopPropagation();
        var me=this,
            s_skv_cton='skv_cton',
            s_tabon='tabon',
            $t=$(e.target),
            $items=me._$s.find('.skv_tabItems'),
            $title=me._$s.find('.skv_tabTitle'),
            idx=UTIL.Int($t.attr('name').replace('tab',''));
        //title換內容
        $title.find('.skv_tt').html($t.html());
        //換body
        me._$s.find('.skv_content').removeClass(s_skv_cton);
        me._$s.find('.skv_c'+idx).addClass(s_skv_cton);
        //switch
        $items.hide();
        $items.find('li').removeClass(s_tabon);
        $t.addClass(s_tabon);
        if(me.opt.tableStyle) me._setTable(idx);
    },
    _evt_mouseup_skv:function(e){
      var me=this,
          $items=me._$s.find('.skv_tabItems');
      if($items.length) $items.hide();
    },
    _eventBinding:function(){
        var me=this,
            mousedown=(UTIL.isTouch)?'touchstart':'mousedown',
            mouseup=(UTIL.isTouch)?'touchend':'mouseup';
        me._$s.find('.skv_tab').bind(mouseup,function(e){ me._evt_click_tabRound.apply(me,arguments); });
        me._$s.find('.skv_tabTitle')
            .bind(mouseup,function(e){ me._evt_click_tabTitle.apply(me,arguments); })
            .bind(mousedown,function(e){ e.stopPropagation(); });
        me._$s.find('.skv_tabItems')
            .bind(mouseup,function(e){ me._evt_click_tabItems.apply(me,arguments); })
            .bind(mousedown,function(e){ e.stopPropagation(); });
        me._$s.bind(mousedown,function(e){ me._evt_mouseup_skv.apply(me,arguments); });
    },
    //init
    _cssInit:function(){
        var me=this,
            flt=parseFloat,
            $tabs = me._$s.find('.skv_tabs'),
            $content = me._$s.find('.skv_content'),
            $foot=me._$s.find('.skv_foot'),
            $logo=me._$s.find('.skv_logo'),
            W=me._$s.width(),
            H=me._$s.height(),
            hHead=me._$s.find('.skv_head').height(),
            hFoot=0,
            hLg=me._$s.find('.skvLegend').height(),
            hBody;
        //table
        if(me.opt.table){ $foot.show(); hFoot=$foot.height(); }
        else $foot.hide();
        //body height
        if(!W) W=flt(me._$s.css('width'));//fixed ie,display:none problem
        if(!H) H=flt(me._$s.css('height'));//fixed ie,display:none problem
        if(!hLg) hLg=flt(me._$s.find('.skvLegend').css('font-size'))+2;//fixed ie,display:none problem
        hBody=H-hHead-hFoot;
        me._$s.find('.skv_body').css('height',hBody);
        me._cW=W;
        me._cH=hBody-hLg;
        if(me.opt.views==2){
            hBody=hBody/2;
            me._cH=hBody-hLg;
            me._$s.find('.skv_c1').css('top',hBody+'px');
            me._$s.find('.skv_c0').css({height:hBody+'px', bottom:'auto'});
        } 
        me._$s.find('.skvLegend').css('width',W);
        //tabs & views
        if(me.opt.views==2){ $tabs.hide(); $content.addClass('skv_cton'); }
        else{
            $content.removeClass('skv_cton');
            $content.eq(me.opt.tabIdx).addClass('skv_cton');
            var w = parseInt($logo.width()), fontSize=flt($logo.css('font-size'));
            if(!w) w = Math.round(UTIL.strLen($logo.text())*fontSize/1.8);//fixed ie,display:none problem
            if(isNaN(w)||!w) w=0;//fixed no logo problem
            $tabs.css({right:w+'px',display:'inline-block'});
        }
    },
    _init:function(){//template init
        var me=this;
        //create template
        if(me._$s.find('.'+me.opt.css).length==0){
            me._$s.html(UI.Tmpl.SKV(me.opt)).addClass('skv');
        }
        //data init
        if(me._viewlist==null) me._viewlist=[];
        me._paramsList=[];
        me._bcdList=[];
        me._addBcdList=[];
        me._dataList=[];
        me._vLeft={};
        me._unit={};
        me._noTip={};
        UTIL.each(me.opt.tabs,function(i,tab){
            //create view
            if(i>=me._viewlist.length){
                var view = MbChart.StockView(me._$s.find('[name="skvView'+i+'"]'));
                me._viewlist.push(view);
            }
            //init data inner
            me._paramsList.push({});
            me._bcdList.push('');
            me._addBcdList.push('');
            me._dataList.push({});
        });

        //css
        me._cssInit();
        //event binding
        me._eventBinding();
    },
    //util
    _validIdx:function(index){//檢查 view Index 是否正確
        var me=this;
        if(!index) index=0;
        if(index>=me._viewlist.length) index=me._viewlist.length-1;
        return index;
    },
    _data2bcd:function(o){
        var me=this,sb=[];
        if(!o.T||!o.O||!o.H||!o.L||!o.C) return '';
        sb.push(UTIL.toStr(o.T));
        sb.push(UTIL.toStr(o.O));
        sb.push(UTIL.toStr(o.H));
        sb.push(UTIL.toStr(o.L));
        sb.push(UTIL.toStr(o.C));
        if(o.V) sb.push(UTIL.toStr(o.V));
        return sb.join(' ');
    },
    _fmtNum:function(value){//加comma
        if(!value) return value;
        value=value.toString();
        var a=value.split('.'),
            x1=a[0],
            x2=(a.length>1)?'.'+a[1]:'',
            rgx = /(\d+)(\d{3})/;
        while (rgx.test(x1)) {
            x1 = x1.replace(rgx, '$1' + ',' + '$2');
        }
        return x1+x2;
    },
    _fmtHourTime:function(t){
        t = t.toString();
        if(t.indexOf(':')>0||isNaN(+t)) return t;
        var h = Math.floor(+t/100),
            m = +t%100;
        if(h<10) h='0'+h;
        if(m<10) m='0'+m;
        return h+':'+m;
    },
    //setting
    _setParams:function(index,params){
        var me=this;
        params['CtrlPos']='none';
        params['LegendPos']='none';
        params['Theme']='skv';
        params['Top']=20;
        params['Bottom']=22;
        params['Right']=2;
        params['Pn_Gap']=1;
        params['X_Gap']=8;
        params['GV_Pad']=0;
        params['Y_Pad']=0;
        if(me.opt.charts==2) params['DV']='7 3';
        else params['DV']='1';
        if(me._cW) params['WIDTH']=me._cW;
        if(me._cH) params['HEIGHT']=me._cH;
        if(index<me._paramsList.length){
            me._paramsList[index]=params;
            //additional setting
            me._unit[index]=(params['UNIT'])?params['UNIT']:'';
            if(params['NOTIP']=='1') me._noTip[index]=true;
        }
    },
    _setSymbol:function(value,isSymbol,refVal){
        if(value==undefined) return '';
        var sb=[],symbolUp='▲',symbolDn='▼',symbolEq='';
        if(!refVal) refVal=+value;
        if(refVal>0){
            sb.push(SPAN_,'class="skvUp">');
            if(isSymbol) sb.push(symbolUp);
        } else if(refVal<0){
            sb.push(SPAN_,'class="skvDn">');
            if(isSymbol) sb.push(symbolDn);
        } else {
            sb.push(SPAN);
            if(isSymbol) sb.push(symbolEq);
          }
      if (!isNaN(value)) {
        value = value.toFixed(2);
        if (value.indexOf('-') == 0) value = value.replace('-', '');
      }

      sb.push(value,_SPAN);
        return sb.join('');
    },
    _setTable:function(index){
        var me=this,row1,row2,row3,
            index=me._validIdx(index),
            data=me._dataList[index],
            len=data.T.length,
            c=data.C[len-1],
            ud=data.UD[len-1],
            $tb=me._$s.find('.skv_table>table'),
            unit=(me._unit[index])?me._unit[index]:'';
        row1=me._setSymbol(c,false,ud);
        row2=me._setSymbol(ud,true);
        var tv=(data.TV&&data.TV.length==len&&len>0)?me._fmtNum(data.TV[len-1]):'';
        row3=(tv)?tv+unit:'--';
        var tdIdx = (me.opt.tableStyle)?1:index+1;
        if(me.opt.tableStyle) $tb.find('tr.skv_row0 td:eq(1)').html(me.opt.tabs[index]);
        $tb.find('tr.skv_row1 td:eq('+tdIdx+')').html(row1);
        $tb.find('tr.skv_row2 td:eq('+tdIdx+')').html(row2);
        $tb.find('tr.skv_row3 td:eq('+tdIdx+')').html(row3);
    },
    //透過tipMoveCall(必須return false),改寫legend內容
    _setLegend:function(viewIdx, tipIndex, title, isTV){
        //指數 symbol 漲跌 symbol 漲跌幅 量
        var me=this,
            $lg=me._$s.find('.skvLg'+viewIdx),
            $title=me._$s.find('.skvT'+viewIdx),
            unit=(me._unit[viewIdx])?me._unit[viewIdx]:'',
            splitor=UTIL.isIE(6)?'&nbsp;&nbsp;':'',
            sb=[];
        if(tipIndex<0) { $lg.hide(); $title.hide(); return; }
        if($lg.length){
            var o = me._dataList[viewIdx],
                c=o.C[tipIndex],
                ud=o.UD[tipIndex],
                udp=(+o.UDP[tipIndex]).toFixed(me._dp);
            if(+me._SF) sb.push(SPAN);//顯示收盤標記
            sb.push(me._setSymbol(c,false,ud));
            if(+me._SF) sb.push('s',_SPAN);//顯示收盤標記
            if(!isNaN(udp)){
                if(me.opt.ud) sb.push(me._setSymbol(ud,true));
                if(me.opt.udp) sb.push(SPAN+me._setSymbol(udp+'%',true,ud)+_SPAN);
            }
            if(o.V && o.V.length){
                var v=(isTV)?o.TV[tipIndex]:o.V[tipIndex];
                v=me._fmtNum(v);
                sb.push(SPAN+v+unit+_SPAN);
            }
            $lg.html(sb.join(splitor)).show();
        }
        if($title.length){
            var tab = me.opt.tabs[viewIdx];
            sb=[SPAN,tab,_SPAN,SPAN,title,_SPAN];
            if(!me._vLeft[viewIdx]) me._vLeft[viewIdx] = me._viewlist[viewIdx].getViewLnR()[0];
            if(me._vLeft[viewIdx]) $title.css('left',me._vLeft[viewIdx]+'px').html(sb.join('')).show();
        }
    },
    _setEmptyLegend:function(viewIdx){
        var me=this,
            $title=me._$s.find('.skvT'+viewIdx);
        if($title.length){
            var tab = me.opt.tabs[viewIdx],
                sb=[SPAN,tab,_SPAN],
                left=0;
            left = me._viewlist[viewIdx].getViewLnR()[0];
            if(left) $title.css('left',left+'px').html(sb.join('')).show();
        }
    },
    _setLastLegend:function(viewIdx){
        var me=this,
            data=me._dataList[viewIdx],
            lastIdx=data.T.length-1;
        if(lastIdx>=0){
            var title=me._fmtHourTime(data.T[lastIdx]);
            me._setLegend(viewIdx,lastIdx,title,true);
        } else {//設定清盤的legend
            me._setEmptyLegend(viewIdx);
        }
    },
    //public
    poster:function(index,str){
        var me=this, view = me._viewlist[index];
        view.poster(str);
    },
    draw:function(index,type){
        var me=this;
        index=me._validIdx(index);
        var view = me._viewlist[index];
        if(type=='set') {
            //set legend
            //view set drawCall
            view.setDrawCall(function(){
                me._setLastLegend(index);
            });
            if(!me._noTip[index]) {
                //view set tipMoveCall
                view.tipMoveCall(function(tipIdx,title,content){
                    me._setLegend.apply(me,[index,tipIdx,title]); return false;
                });
            }
            //view setParams
            view.setParams(me._paramsList[index]);
        }
        //view setBCD || addBCD
        if(type=='set'){
            if(me._bcdList[index]) view.setBCD(me._bcdList[index]);
            if(!$.trim(me._bcdList[index]).length) me._setLegend(index,-1);
        } else if(type=='add') {
            if(me._addBcdList[index]) view.addBCD(me._addBcdList[index]);
        }
        //table setting
        if(me.opt.tableStyle){
            if(me.opt.tabIdx===index) me._setTable(index);
        } else me._setTable(index);
    },
    setParams:function(index,params){
        var me=this,
            p = UTIL.parseQueryStringUpper(params);
        me._setParams(index,p);
    },
    setBCD:function(index,o){//@o: {T:Array,O:Array,H:Array,L:Array,C:Array,V:Array,TV:Array,UD:Array,UDP:Array,SF:Bool}
        var me=this;
        index=me._validIdx(index);
        //set sf
        if(o.SF) me._SF = o.SF;
        //set bcd
        me._bcdList[index]=me._data2bcd(o);
        //set data
        var data=me._dataList[index];
        UTIL.ext(data,o);
        //paint
        me.draw(index,'set');
    },
    addBCD:function(index,o){//@o: Array<{T:Array,H:Array,L:Array,C:Array,V:Array,TV:Array,UD:Array,UDP:Array,SF:Bool}>
        var me=this,cIdx,
            index=me._validIdx(index),
            data=me._dataList[index];
        if(!data.T) return;//data is not ready,cannot add

        //set sf
        if(o.SF) me._SF = o.SF;
        //set add bcd
        me._addBcdList[index]=me._data2bcd(o);
        //concat data
        for(cIdx=data.T.length-1;cIdx>=0;cIdx--){//find current index
            if(data.T[cIdx]==o.T[0]) break;
        }
        if(!cIdx&&cIdx!==0) cIdx = data.T.length;//避免cIdx剛好是0時,被改寫掉
        data.T = data.T.slice(0,cIdx).concat(o.T);
        data.O = data.O.slice(0,cIdx).concat(o.O);
        data.H = data.H.slice(0,cIdx).concat(o.H);
        data.L = data.L.slice(0,cIdx).concat(o.L);
        data.C = data.C.slice(0,cIdx).concat(o.C);
        if(o.V){
            data.V = data.V.slice(0,cIdx).concat(o.V);
            data.TV = data.TV.slice(0,cIdx).concat(o.TV);
        }
        data.UD = data.UD.slice(0,cIdx).concat(o.UD);
        data.UDP = data.UDP.slice(0,cIdx).concat(o.UDP);
        //repaint
        me.draw(index,'add');
    },
    destroy:function(){
        var me=this;
        if(me._viewlist&&me._viewlist.length){
            UTIL.each(me._viewlist,function(i,view){
                view.destroy();
            });
        }
        me._viewlist=null;
        me._paramsList=null;
        me._dataList=null;
        me._bcdList=null;
        me._addBcdList=null;
        me.opt=null;
        me._$s=null;
    }
};

//data與UI.Act之間的橋接
UI.Bridge = function(selector,option){
    this._init(selector,option);
};
UI.Bridge.prototype={
    opt:{
        showAll:true,//是否同時顯示加權與櫃檯
        overlay:true,//價量是否要重疊
        table:false,//是否要顯示table
        tableStyle:0,//0:全部商品,1:單一商品
        logo:'嘉實',
        logoUrl:'',
        tabStyle:0,//0:輪播, 1:選單
        tabs:['加權','櫃檯'],
        rows:['指數','漲跌','量']
    },
    _isDestroy:false,
    _isReady:null,
    _isSet:null,
    _action:null,
    _init:function(selector,option){
        var me=this;
        me.opt=UTIL.ext({},me.opt,option);
        me.opt.views=(me.opt.showAll)?2:1;
        me.opt.charts=(me.opt.overlay)?1:2;
        me.opt.table=(me.opt.table)?1:0;
        me._isReady={};
        me._isSet={};
        me._action=new UI.Act(selector,me.opt);
    },
    setParams:function(index,params){
        var me=this;
        me._isReady[index]=true;
        this._action.setParams(index,params);
    },
    setBCD:function(index,bcd){
        var me=this;
        if(!me._isReady[index]) me.setParams(index,bcd);
        me._isSet[index]=true;
        me._action.setBCD(index,bcd);
    },
    addBCD:function(index,bcd){
        var me=this;
        if(!me._isSet[index]) return;
        me._action.addBCD(index,bcd);
    },
    destroy:function(){
        var me=this;
        me._action.destroy();
        me._action=null;
        me.opt=null;
        me._isReady=null;
        me._isSet=null;
        me._isDestroy=true;
    }
};

globalReg();

})(jQuery);