aboutsummaryrefslogblamecommitdiffstats
path: root/toj/jcs/common.js
blob: 84468e3843a9c004b878f91184463f7334bec48f (plain) (tree)















































































































































































































































































































































                                                                                                   
var RESULTMAP = {0:'AC',1:'WA',2:'TLE',3:'MLE',4:'RF',5:'RE',6:'CE',7:'ERR',100:'WAIT'};

var USER_PER_USER           = 0x00000001;
var USER_PER_PROCREATOR     = 0x00000002;
var USER_PER_PROADMIN       = 0x00000004;

var USER_LEVEL_USER         = 0x00000001;
var USER_LEVEL_PROCREATOR   = 0x00000003;
var USER_LEVEL_PROADMIN     = 0x00000007;
var USER_LEVEL_ADMIN        = 0x0000ffff;
var USER_LEVEL_SUPERADMIN   = -1;

var __extend = function(child,parent){
    child.prototype.__super = parent;
};

var common = {
    page_list:new Array(),
    url_prev:null,
    url_curr:null,
    mbox_curr:null,
    mbox_defer:null,

    init:function(){
        var i;
        var url;
        var urlpart;
        
        urlpart = location.href.split('?');
        if(urlpart[0].search(/\/$/) == -1){
            url = urlpart[0] + '/';
            if(urlpart.length > 1){
                url = url + '?';
                for(i = 1;i < urlpart.length;i++){
                    url = url + urlpart[i];
                }
            }
            window.history.replaceState(null,document.title,url);
        }

        common.url_curr = location.href;

        $(document).on('click','a',function(e){
            common.pushurl($(this).attr('href'));   
            return false;
        });
        $(document).on('keyup',function(e){
            if(e.which == 27){
                common.hidembox(false);
            }
        });
    },

    exheight:function(){
        var i;
        var es;
        var extop;
        var exbottom;
        var j_e;
        var j_parent;

        es = $('[exheight=true]');
        for(i = 0;i < es.length;i++){
            j_e = $(es[i]);
            if((extop = j_e.attr('extop')) == undefined){
                extop = j_e.css('top').match(/(.+)px/)[1];
            }
            if((exbottom = j_e.attr('exbottom')) == undefined){
                exbottom = 0;
            }
            extop = parseInt(extop);
            exbottom = parseInt(exbottom);

            j_e.css('height',($(window).height() - (extop + exbottom) + 'px'));
        }
    },
    getcookie:function(){
        var ret;
        var i;
        var part;
        var subpart;
        
        ret = new Array();
        part = document.cookie.split(';');
        for(i = 0;i < part.length;i++){
            part[i] = part[i].replace(/\+/g,' ');
            subpart = part[i].split('=');
            ret[decodeURIComponent(subpart[0])] = decodeURIComponent(subpart[1]);
        }

        return ret;
    },
    getdate:function(str){
        var part;
        part = str.match(/(\d+)-(\d+)-(\d+) (\d+):(\d+):(\d+)/);
        return new Date(part[1],parseInt(part[2]) - 1,part[3],part[4],part[5],part[6],0);
    },
    getdatestring:function(date,secflag){
        var month;
        var day;
        var hr;
        var min;
        var sec;

        month = date.getMonth() + 1;
        if(month < 10){
            month = '0' + month;
        }
        day = date.getDate();
        if(day < 10){
            day = '0' + day;
        }
        hr = date.getHours();
        if(hr < 10){
            hr = '0' + hr;
        }
        min = date.getMinutes();
        if(min < 10){
            min = '0' + min;
        }
        if(secflag == true){
            sec = date.getSeconds();
            if(sec < 10){
                sec = '0' + sec;
            }

            return date.getFullYear() + '-' + month + '-' + day + ' ' + hr + ':' + min + ':' + sec;
        }else{
            return date.getFullYear() + '-' + month + '-' + day + ' ' + hr + ':' + min;
        }
    },
    getlang:function(value){
        var i;
        var ret;
        var langlist = ['C++','JAVA','Pascal'];

        ret = new Array;
        i = 0;
        while(value > 0){
            if((value & 1) == 1){
                ret.push(langlist[i]);
            }
            value = value >> 1;
        }

        return ret;
    },

    geturlpart:function(url){
        if(url == undefined){
            return location.href.match(/toj\/(.*)/)[1].split('/');
        }else{
            return url.match(/toj\/(.*)/)[1].split('/');
        }
    },
    pushurl:function(url){
        common.url_prev = location.href;
        window.history.pushState(null,document.title,url);   
        common.url_curr = location.href;
        common.page_urlchange();
    },
    replaceurl:function(url){
        window.history.replaceState(null,document.title,url);   
        common.url_curr = location.href;
    },
    prevurl:function(notpagename){
        if(common.url_prev == null || common.geturlpart(common.url_prev)[0] == notpagename){
            common.pushurl('/toj/home/');
        }else{
            common.pushurl(common.url_prev);
        }
    },
    page_urlchange:function(){
        var urlpart;
        var pagename;
        var pagename_prev;

        if(arguments.callee.reentrant == true){
            arguments.callee.hasnext = true;
            return;
        }else{
            arguments.callee.reentrant = true;
            arguments.callee.hasnext = true;
        }

        while(arguments.callee.hasnext){
            arguments.callee.hasnext = false;

            if(common.mbox_curr != null){
                common.hidembox(false);
            }

            urlpart = common.geturlpart();
            pagename = urlpart[0];
            if(pagename == ''){
                common.replaceurl('/toj/home/');
                common.page_urlchange();
                continue;
            }else if(!(pagename in common.page_list)){
                common.replaceurl('/toj/none/');
                common.page_urlchange();
                continue;
            }

            if(common.url_prev != null){
                pagename_prev = common.geturlpart(common.url_prev)[0];
                if(pagename == pagename_prev){
                    common.page_list[pagename].urlchange('same');
                }else{
                    if(pagename_prev in common.page_list){
                        common.page_list[pagename_prev].urlchange('out');
                    }
                    common.page_list[pagename].urlchange('in');
                }
            }else{
                common.page_list[pagename].urlchange('in');
            }
        }
        arguments.callee.reentrant = false;
    },
    addpage:function(pagename,pageobj){
        common.page_list[pagename] = pageobj;
    },
    removepage:function(pagename){
        delete common.page_list[pagename];
    },

    showmbox:function(mboxobj){
        common.mbox_curr = mboxobj;
        mboxobj.switchchange('in');
        common.mbox_defer = $.Deferred();
        return common.mbox_defer.promise();
    },
    hidembox:function(done){
        if(common.mbox_curr != null){
            common.mbox_curr.switchchange('out');
            common.mbox_curr = null;
            if(done == true){
                common.mbox_defer.resolve();
            }else{
                common.mbox_defer.reject();
            }
        }
    }
};

var class_common_page = function(){
    var that = this;
    that.tab_list = Array();
    that.tabname_curr = null;

    that.urlchange = function(direct){};
    that.fadein = function(j_e){
        j_e.stop().fadeIn('fast');
    };
    that.fadeout = function(j_e){
        j_e.stop().hide();
    };

    that.tab_urlchange = function(tabname){
        if(arguments.callee.reentrant == true){
            arguments.callee.hasnext = true;
            return;
        }else{
            arguments.callee.reentrant = true;
            arguments.callee.hasnext = true;
        }

        while(arguments.callee.hasnext){
            arguments.callee.hasnext = false;

            if(tabname == null){
                if(that.tabname_curr in that.tab_list){
                    index.lltab(that.tabname_curr);
                    that.tab_list[that.tabname_curr].urlchange('out');
                }
                that.tab_list = new Array();
                that.tabname_curr = null;
                continue;
            }

            if(!(tabname in that.tab_list)){
                common.replaceurl('/toj/none/');
                common.page_urlchange();
                return;
            }

            if(tabname == that.tabname_curr){
                that.tab_list[tabname].urlchange('same');
            }else{
                if(that.tabname_curr in that.tab_list){
                    index.lltab(that.tabname_curr);
                    that.tab_list[that.tabname_curr].urlchange('out');
                }
                that.tabname_curr = tabname;
                index.hltab(tabname);
                that.tab_list[tabname].urlchange('in');
            }
        }
        arguments.callee.reentrant = false;
    };
    that.addtab = function(tabname,tabobj){
        that.tab_list[tabname] = tabobj;
    };
    that.removetab = function(tabname){
        delete that.tab_list[tabname];
    };
};

var class_common_tab = function(paobj){
    var that = this;
    that.paobj = paobj;

    that.urlchange = function(direct){};
    that.fadein = function(j_e){
        j_e.stop().fadeIn('fast');
    };
    that.fadeout = function(j_e){
        j_e.stop().hide();
    };
};

var class_common_mbox = function(paobj){
    var that = this;
    that.paobj = paobj;

    that.switchchange = function(direct){};
    that.fadein = function(j_e){
        j_e.stop().show();
        index.showmask();
    };
    that.fadeout = function(j_e){
        index.hidemask();
        j_e.stop().hide();
    };
}