﻿S.UI = function(){}

S.apply(S.UI,{
    Input : function(pos,config){
        var el = S(pos);
        if(!el) return;
        S.apply(el,config,{
            inType : 'string',
            msg : '',
            showType : 0,//0:class tip,1:show tip,2:msgbox
            required : true,
            Exp : '',
            isValid : true,
            len : 50,
            theSame : null,
            validate : function(v){ return true;},
            //ondblclick : function(){this.value=this.content;},
            //onfocus : function(){this.content=this.value;this.value="";},
            onblur  : function(){/*if(!this.value) this.value=this.content; else this.content = this.value;*/this.check();},
            check : function(){
                if(!this.required){this.isValid = true; return true;}
                if(this.theSame) this.Exp = this.Exp.replace("STR",S(this.theSame).value);
                this.setResult(this.value!='' && new RegExp(this.Exp).test(this.value) && this.validate(this.value));
                return this.isValid;
            },
            setResult : function(result,msg){
                this.isValid = result;
                msg=msg||this.msg;
                jQuery('#'+this.id+"_msg").each(function(){this.innerHTML = msg;});
                switch(this.showType){
                    case 0:if(result) jQuery('#'+this.id+"_msg").attr('class',''); else jQuery('#'+this.id+"_msg").attr('class','inputerror'); break;
                    case 1:if(result){this.appendSpan();}else{jQuery('#'+this.id+"_msg").hide();} break;
                    case 2:if(!result)alert(msg ? msg : this.msg);break;
                }
            },
            appendSpan : function(){
                var span = this.nextSibling;
                if(span && span.tagName=='SPAN'){span.innerHTML = this.msg;return;}
                else span = document.createElement("span");
                span.innerHTML = this.msg;
                span.id=this.id+"_msg";
                if(this.nextSibling) this.parentNode.insertBefore(span,this.nextSibling);
                else this.parentNode.appendChild(span);
            }
        });
        if(!el.Exp)el.Exp = S.testStr[el.inType];
        if(!el.Exp) alert("输入类型错误");
        if(el.showType==0)el.appendSpan();
        if(el.inType=="string") el.Exp=el.Exp.replace("LEN",el.len);
        return el;
    },
    Navi : function(pos,data,fn){
        var el = S(pos);
        if(!el) return;
        jQuery(el).addClass('navi');
        el.innerHTML = '';
        el.appendChild(S.UI.E({tag:'div',className:'label',innerHTML:'当前位置： '}));
        for (var i = data.length -1; i >=0 ; i--){
            var lk = S.UI.E({tag:'a',Dir:data[i],innerHTML:data[i].Name});
            var div = S.UI.E({tag:'div',className:'dir',items:[lk]});
            if(i==0) lk.id='pos';
            if(i==data.length -1){ lk.href = S.Base.web; div.className = 'navi-head';}
            if(i>0 && i<data.length -1) lk.dirChange = dirChange;
            el.appendChild(div);
            if(i!=0) el.appendChild(S.UI.E({tag:'div',items:[{text:' -> '}]}));
        }
        if(fn) fn(data[data.length-2],data[0]);
        return el;
    },
    Menu : function(pos,data,check){
        var el = S(pos);
        if(!el) return;
        jQuery(el).addClass('menu');
        el.check = check || function(dir){ return dir.Valid;};
        el.innerHTML="";
        var ul = document.createElement('UL');
        for(i = 0;i<data.length;i++){
            if(!el.check(data[i])) continue;
            ul.appendChild(S.UI.E({tag:'li',items:[{tag:'div',items:[{tag:'a',Dir:data[i],innerHTML:data[i].Name,dirChange:dirChange}]}]}));
        }
        el.appendChild(ul);
        return el;
    },
    Content : function(config){
        config = S.apply({},config,{len:22,type:1});
        var el = S(config.pos||'content');
        if(!el) return;
        jQuery(el).addClass('content');
        el.innerHTML = '';
        var ul = S.UI.E({tag:'ul',width:'96%'});
        if(!config.data || !config.data.List) ul.appendChild(S.UI.E({tag:'li',items:[{tag:'a',innerHTML:'没有文章'}]}));
        else {
            var count = config.data.List.length;
            for(i = 0;i<count;i++){
                var a=config.data.List[i];
                var href=(config.pageto||S.Base.web+'articleRead.aspx')+'?id='+a.ID;
                if(config.headtype>5)href +='&dept='+config.headtype;
                var lk = S.UI.E({tag:'a',title:a.Title,eid:a.ID,target:config.target||'_blank',innerHTML:a.Title});
                if(config.click) lk.onclick = config.click;
                else lk.href = href;
                if(i==0 && a.Commend){
                    if(config.cmd){/*显示置顶*/
                        lk.innerHTML = a.Title.Limit(config.len*1.5);
                        ul.appendChild(S.UI.E({tag:'div',className:'topic',items:[lk]}));count--;}
                    continue;
                }
                if(config.type==3){
                    switch(config.headtype){
                        case 1:if(a.Directory!=17) lk.innerHTML ='<span style="color:#888;">['+a.DirName+']</span>'+a.Title;break;
                        case 2:if(a.Dept!=18) lk.innerHTML ='<span style="color:#888;">['+a.DeptName+']</span>'+a.Title;break;
                        case 3:if(a.Topic!=19) lk.innerHTML ='<span style="color:#888;">['+a.TopicName+']</span>'+a.Title;break;
                        default:break;
                    }
                    ul.appendChild(S.UI.E({tag:'li',items:[lk]}));
                    continue;
                }
                /************************************************/
                var str=a.Title.Limit(config.len);
                switch(config.headtype){
                    case 1:if(a.Directory!=17)str ='<span style="color:#888;">['+a.DirName+']</span>'+str.Limit(config.len-a.DirName.length);break;
                    case 2:if(a.Dept!=18)str ='<span style="color:#888;">['+a.DeptName+']</span>'+str.Limit(config.len-a.DeptName.length);break;
                    case 3:if(a.Topic!=19)str ='<span style="color:#888;">['+a.TopicName+']</span>'+str.Limit(config.len-a.TopicName.length);break;
                    case 5:str='<span style="color:#888;">['+ ZPGStatus.Name(a.Status) +']</span>' +str.Limit(config.len-2);break;
                    case 'undefined':break;
                    default:break;
                }
                var len=Math.max(config.len,str.length)-3;
                var date = a.PublishDate||a.CreateDate;
                if(date && ((new Date()).getTime()-date.getTime())/(24*60*60*1000) < 3)
                    str = str.Limit(len)+'<img src="'+S.Base.web+'/images/li-new.gif" />';
                else switch(a.Type){
                    case 1:str=str.Limit(len)+'<img src="'+S.Base.web+'/images/li-img.gif" />';break;
                    case 2:str=str.Limit(len)+'<img src="'+S.Base.web+'/images/li-file.gif" />';break;
                    case 3:str=str.Limit(len)+'<img src="'+S.Base.web+'/images/li-media.gif" />';break;
                }
                /************************************************/
                lk.innerHTML = str;
                switch(config.type){
                    case 1:ul.appendChild(S.UI.E({tag:'li',items:[lk,{tag:'div',innerHTML:date.format("yyyy年MM月dd日")}]}));break;
                    case 2:ul.appendChild(S.UI.E({tag:'li',items:[lk]}));break;
                    default:break;
                }
            }
        }
        el.appendChild(ul);
        return el;
    },
    E : function(config){
        if(!config) return null;
        if(config.tagName) return config;
        if(!config.tag) return document.createTextNode(config.text);
        var elem = document.createElement(config.tag);
        var defaults = {};
        if(config.tag=='a')S.apply(defaults,{
            onclick:function(){
                if(this.Dir && this.dirChange) this.dirChange(this.Dir);
                if(this.pageNo && this.pageChange) this.pageChange(this.pageNo);
            }
        });
        if(config.tag=='table')S.apply(defaults,{border:0,cellSpacing:0,cellPadding:0});
        S.apply(elem,config,defaults);
        if(config.items) for(var i=0;i<config.items.length;i++)if(config.items[i]) elem.appendChild(S.UI.E(config.items[i]));
        return elem;
    },
    PageBar : function(config){
        var el = S(config.pos||'pageBar');
        if(!el) return;
        S.apply(el,config,{
            artSum:100,
            pageSize:12,
            pageNo:1,
            firstText:'第一页',
            privText:'上一页',
            nextText:'下一页',
            lastText:'最后一页',
            tailText:'共{artSum}条记录 共{pageSum}页',
            itemCls:'item',
            selectCls:'seled',
            labelCls:'label',
            disableCls:'disable'
        });
        jQuery(el).addClass('pageBar');
        var pc = function(pn){if(pageChange) pageChange(pn);};
        var appendText = function(str,cls){el.appendChild(S.UI.E({tag:'div',innerHTML:str,className: cls || el.disableCls}));};
        var appendLink = function(text,pn){
            el.appendChild(S.UI.E({tag:'div',className:el.itemCls,items:[{tag:'a',innerHTML:text,pageNo:pn,pageChange:pc}]}));
        }
        var top=0,bottom=0;
        var pageSum = parseInt(el.artSum / el.pageSize);
        if(el.artSum % el.pageSize > 0) pageSum++;//计算页数
        if(pageSum <= 5) {bottom = 1; top = pageSum;}
        else if(el.pageNo <= 3) {bottom = 1; top = 5;}
        else if(el.pageNo >= pageSum-2){top = pageSum; bottom = pageSum - 4;}
        else {top = parseInt(el.pageNo) + 2;bottom = parseInt(el.pageNo) - 2;}//计算top，bottom页号
        el.innerHTML='';
        if(pageSum <100){
            appendText('页',el.labelCls);
            var sel = S.UI.E({tag:'select',onchange:function(){pc(this.value);}});
            for(i=1;i<=pageSum;i++) sel.appendChild(S.UI.E({tag:'option',value:i,innerHTML:i,selected:i==el.pageNo}));
            el.appendChild(S.UI.E({tag:'div',items:[sel]}));
            appendText('转到',el.labelCls);
        }
        if(el.pageNo!=pageSum) {appendLink(el.lastText,pageSum);appendLink(el.nextText,el.pageNo+1);}
        else {appendText(el.lastText);appendText(el.nextText);}
        for(i=top;i>=bottom;i--)if(i!=el.pageNo) appendLink(i,i);else appendText(i,el.selectCls);
        if(el.pageNo > 1) {appendLink(el.privText,el.pageNo-1);appendLink(el.firstText,1);}
        else {appendText(el.privText);appendText(el.firstText);}
        appendText(String.format(el.tailText,{artSum:el.artSum,pageSum:pageSum}),el.labelCls);
        return el;
    },
    ImgNews : function(pos,data,width,height,Interval){
        var el = S(pos);
        if(!el||!data||data.length==0) return;
        jQuery(el).addClass('imgNews');
        var pics = S.UI.E({tag:'div',className:'pics'});
        var dl = S.UI.E({tag:'dl',className:'dl'});
        var span = S.UI.E({tag:'div',className:'span'});
        el.appendChild(pics);
        el.appendChild(S.UI.E({tag:'div',className:'bg'}));
        el.appendChild(span);
        el.appendChild(dl);
        el.index = 0;
        el.len = data.length;
        el.changeIndex = function(){
            var data = null;
            jQuery('.imgNews dd').each(function(){
                if(jQuery(this).index()==el.index){this.childNodes[0].src = S.Base.web+'images/num/'+(jQuery(this).index()+1)+'-1.jpg';data=this.data;}
                else this.childNodes[0].src = S.Base.web+'images/num/'+(jQuery(this).index()+1)+'.jpg';
            });
            jQuery('.imgNews .pics div').each(function(){
                if(jQuery(this).index()==el.index){jQuery(this).fadeIn(500);}
                else jQuery(this).hide();
            });
            span.innerHTML = '';
            span.appendChild(S.UI.E({tag:'a',href:data.lk,target:'_blank',innerHTML:data.title}));
            el.index++;
            el.index=el.index%el.len;
        }
        var i=0;
        jQuery(data).each(function(){
            pics.appendChild(S.UI.E({tag:'div',items:[{tag:'a',title:this.title,href:this.lk,target:'_blank',items:[{tag:'img',src:this.pic}]}]}));
            dl.appendChild(S.UI.E({tag:'dd',data:this,items:[{tag:'img',src:S.Base.web+'images/num/'+ ++i +(i==1? '-1.jpg':'.jpg')}],
                onclick:function(){el.index=jQuery(this).index();el.changeIndex();}}));
        });
        el.changeIndex(0);
        setInterval(el.changeIndex,Interval||4000);
        jQuery('.imgNews').width(width);
        jQuery('.imgNews .pics').width(width);
        jQuery('.imgNews .pics').height(height);
        jQuery('.imgNews .pics img').width(width);
        jQuery('.imgNews .pics img').height(height);
        return el;
    }
});
