String.prototype.$$=(function()
{
    return function()
    {
        if(!arguments.length)
        {return this.toString()}
        var replaceList;
        if(arguments.length==1 && typeof(arguments[0])=='object')
        {
            replaceList=arguments[0];
        }
        else
        {
            replaceList=arguments;
        }
        var pattern=/{([^}]+)}/g;
        var result;
        var tmpStr=this.toString();
        var replacement;
        while((result=pattern.exec(this))!=null)
        {
            replacement=replaceList[result[1].toString()];
            tmpStr=replacement!=undefined?tmpStr.replace(result[0],replacement):tmpStr;
        }
        return tmpStr;
    }
})();

/**
 * @author Poly 89490364a@gmail.com
 * @version 0.3
 * @projectDescription  简单的分标签
 * 默认会在对象元素内寻找类tBtn与tCon通过点击设置类为current进行显示或隐藏。
 * 也可传入一个对象作为参数进行设置。
 * @param {jQuery Selector} tBtn 作为标签按钮的选择符。
 * @param {jQuery Selector} tCon 作为标签内容的选择符。
 * @param {String} method 作为触发标签选择行为的事件名称,默认为click事件,理论上支持自定义事件。
 * @param {boolean function} reset 在鼠标移出后是否恢复默认状态。如果值是一个函数，则将此函数作为方法调用。
 * @param {function} btnInit 初始化按钮
 * @param {function} conInit 初始化内容块
 * @param {function} btnOn 设置按钮激活行为
 * @param {function} btnOff 设置按钮隐藏行为
 * @param {function} conOn 设置内容激活行为
 * @param {function} conOff 设置内容隐藏行为
 * @param {String function} [filter] 分组函数,通过e.i将按钮和内容区本别分组。
 * @param {int} circle 设置自动循环间隔。
 * @param {boolean} activeDefault 设置是否执行默认动作。
 */

(function($){
	$.fn.tab168=function(o)
	{
		o=o?o:{};
		o.btnOn=typeof(o.btnOn)=="function"?o.btnOn:stdOn;
		o.btnOff=typeof(o.btnOff)=="function"?o.btnOff:stdOff;
		o.conOn=typeof(o.conOn)=="function"?o.conOn:stdOn;
		o.conOff=typeof(o.conOff)=="function"?o.conOff:stdOff;
		o.btnInit=typeof(o.btnInit)=="function"?o.btnInit:null;
		o.conInit=typeof(o.conInit)=="function"?o.conInit:null;
        o.freq=parseInt(o.circle)?parseInt(o.circle):0;
		if(typeof(o.filter)=="string" )
		{eval("o.filter="+o.filter);}
		if(!o.filter)
		{o.filter=single;}
		
		this.each(function(){
            var that=$(this);
			var def;
			that.data("tBtn",$(o.tBtn||".tBtn",this));
			that.data("tCon",$(o.tCon||".tCon",this));

            if(o.freq)
            {
                that.hover(stopTimer,beginTimer)
                    .bind('circle',setCurrent)
                    .trigger('mouseleave');
            }
						
			that.bind("selectChange",changeSelect).bind("reset",reset);

			if(!that.data("tBtn").length)
			{return true;}

			that.data("tBtn").each(function(i){
				var that=$(this);
				that.data("i",i);
				that.bind(o.method||"click",function(e){
					var event=new jQuery.Event("selectChange");
					event.i=i;
					that.trigger(event);
                    if(!o.activeDefault)
                    {
                        e.preventDefault();
                    }
				});
				if(that.hasClass("current"))
				{def=i;}
				if(o.btnInit)
				{
					o.btnInit.apply(this);
				}
			});

			that.data("tBtn").bind("itemOn",o.btnOn).bind("itemOff",o.btnOff);
			that.data("tBtn").bind("itemOff",stopPropagation);
			that.data("tBtn").bind("itemOn",stopPropagation);

			if(that.data("tCon").length)
			{

                that.data("tCon").each(function(i){
                    var that=$(this);
                    that.data("i",i);
                    if(o.conInit)
                    {
                        o.conInit.apply(this);
                    }
                });


                that.data("tCon").bind("itemOn",o.conOn).bind("itemOff",o.conOff);
                that.data("tCon").bind("itemOff",stopPropagation);
                that.data("tCon").bind("itemOn",stopPropagation);
            }

			that.data("def",def?def:0);
			that.trigger("reset");
			if(o.reset)
			{
				that.mouseleave(function(){that.trigger("reset");})
			}
		});
		return this;

		/**
		 * 默认的激活处理程序，设置类为current。
		 * @param {event} e
		 */
		function stdOn(e)
		{
			$(this).addClass("current");
		}
		
		/**
		 * 默认的隐藏处理程序，移除类current。
		 * @param {event} e
		 */
		function stdOff(e)
		{
			$(this).removeClass("current");
		}
		
		/**
		 * 在当前唯一的tab和con上触发itemOn,其余的触发itemOff;
		 * @param {event} e
		 * @return {object} 包含两组对象，itemOn和itemOff
		 */
		function single(e)
		{
			var that=$(this);
			var onBtn=that.data("tBtn").eq(e.i);
			var offBtn=that.data("tBtn").not(onBtn[0]);
            if(that.data("tCon").length)
            {
                var onCon=that.data("tCon").eq(e.i);
                var offCon=that.data("tCon").not(onCon[0]);
                onBtn=onBtn.add(onCon);
                offBtn=offBtn.add(offCon);
            }
			return {itemOn:onBtn,itemOff:offBtn};
		}
		
		/**
		 * 选择改变时的处理函数
		 * @param {event} e
		 */
		function changeSelect(e)
		{
            var that=$(this);
            if(this != e.target)
            {
                that.data('current',$(e.target));
            }
			var filter=o.filter.call(this,e);
			filter.itemOff.trigger("itemOff");
			filter.itemOn.trigger("itemOn");
			e.stopPropagation();
		}
		
		/**
		 * 设置为默认状态
		 */
		function reset(e)
		{
			var that=$(this);
			var event=new jQuery.Event("selectChange");
			event.i=that.data("def");
			$(this).trigger(event);
			if(typeof(o.reset)=="function")
			{
				o.reset.apply(this);
			}
			e.stopPropagation();
		}
		
		/**
		 * 阻止事件冒泡。
		 */
		function stopPropagation(e)
		{
			var that=$(this);
			e.stopPropagation();
		}
            
        //终止计时器
        function stopTimer()
        {
            var that=$(this);
            var timer=that.data("timer");
            if(timer)
            {
                clearTimeout(timer);
            }
        }
        //启动计时器
        function beginTimer()
        {
            var that=$(this);
            var timer=setTimeout(function(){that.trigger("circle")},o.freq||5000);
            //that.trigger('circle')
            that.data("timer",timer);
        }
        //设置当前项
        function setCurrent()
        {
            var that=$(this);
            var tBtn=that.data('tBtn');
            var current=that.data('current')||tBtn.eq(0);
            var next=tBtn.eq(current.data("i")+1);
            next=next.length?next:tBtn.eq(0);
            next.trigger(o.method||'click');
            beginTimer.apply(this);
        }

	}
})(jQuery);

//检查链接是否当前路径或当前路径的父目录
function checkCurrent()
{
    var that=$(this);
    var hr=that.attr("href");
    if(hr)
    {
        var pn=location.pathname;
        var reg=new RegExp("^{0}\\b".$$(hr.replace(/(?=[.*?])/g,"\\")));
        if(pn==hr || (!/(首|主)页|基本资料|国外大学/.test(that.text()) && reg.test(pn)))
        {
            that.trigger("turnOn");
            return false;
        }           
    }
}

/**
 * 初始化标签选择器。
 */
function tagSelector()
{
	var that=$(this);
	if (that.attr("initype") != "tagSelector") 
	{
		that.attr("initype", "tagSelector")
		var txtbox = $(".txtbox", this);
		var tags = $("a", this);
		tags.each(function(){
			var that = $(this);
			that.data("reg", new RegExp(that.html() + "(?=\\s|$)", "g"));
		});
		tags.click(function(e){
			var that = $(this);
			var str = txtbox.val();
			if (that.is(".selected")) {
				str = str.replace(that.data("reg"), "");
				that.removeClass("selected");
			}
			else {
				str = str + " " + that.html();
				that.addClass("selected")
			}
			txtbox.val(str.replace(/\s+/g, " ").replace(/^\s+|\s+$/, ""));
			that.blur();
			e.preventDefault();
		});
		txtbox.bind("change keyup", function(e){
			var that = $(this);
			var tester = that.val();
			tags.each(function(){
				var that = $(this);
				if (that.data("reg").test(tester)) {
					that.addClass("selected");
				}
				else {
					that.removeClass("selected");
				}
				that.data("reg").lastIndex = 0;
			});
		});
	}
}

//清理空格
function trim()
{
    var that=$(this);
    var value=that.val();
    var cleanValue=$.trim(value);
    if(value!=cleanValue)
    {
        that.val(cleanValue);
    }
}

//设置默认值
function setDef(){
    var that=$(this);
    var value=$.trim(that.val());
    if(!value)
    {
        that.val(that.attr("def"));
        that.addClass("c999");
    }
    else
    {
        that.val(value);
    }
}
//清空默认值
function cleanDef()
{
    var that=$(this);
    that.removeClass("c999");
    if(that.val()==that.attr("def"))
    {
        that.val("");
    }
    else
    {
        that.select();
    }
}

$(function(){
    //fuckie6
    if($.browser.msie && $.browser.version=="6.0")
    {
        fixhover();
    }

    function fixhover()
    {
        $(".fixhover,.fixhover>*").hover(function(){$(this).addClass("hover")},function(){$(this).removeClass("hover")});
    }
    $("*[note]").each(initNote);

    //初始化提示框
    function initNote()
    {
        var that=$(this);
        if(!that.data("vMsg"))
        {
            var vMsg=$("<div class='vMsg'></div>");
            $("body").append(vMsg);
            that.data("vMsg",vMsg);
        }
        that.bind("noteShow",noteShow);
        that.bind("noteHide",noteHide);
    }

    
    //显示提示
    function noteShow()
    {
        var that=$(this);
        var offset=that.offset();
        var vMsg=that.data("vMsg");
        vMsg.css({left:offset.left+that.outerWidth(true)+10,top:offset.top});
        vMsg.removeClass("valid loading invalid").addClass("note");
        vMsg.html(that.attr("note")).show();
    }

    //隐藏提示
    function noteHide()
    {
        $(this).data("vMsg").hide();
    }

    $("table").bind("toggleAll",toggleAll).bind("reverseAll",reverseAll);

    function toggleAll(e)
    {
        $(":checkbox",this).attr("checked",$(e.target).attr("checked"));
    }

    function reverseAll()
    {
        $(":checkbox",this).each(function(){
            var that=$(this);
            that.attr("checked",!that.attr("checked"));
        });
    }

    //初始化输入框行为
    $(".defVal").each(function(){
        var that=$(this);
        that.addClass("c999");
        that.attr("def",that.val());
        that.focus(cleanDef);
        that.blur(setDef);
        //that.keyup(trim);
    });


    $(".toggleEdit").bind("toggleEdit",function(){$(this).toggleClass("onedit");$(":text:first",this).focus()});
    $(".toggleEdit .btn").click(function(e){$(this).trigger("toggleEdit").blur();e.preventDefault()});
    
    $(".selector").each(function(){
        var that=$(this);
        that.click(function(e){
            var view=$("dt div",this);
            var val=$("dt input",this);
            var dd=$("dd",this);
            var tango=$(e.target);
            if(tango.is("dd *[value]"))
            {
                view.html(tango.html());
                val.val(tango.attr("value"));
                if(!e.init)
                {
                    val.change();
                }
            }
        });
        var checked=$("dd *[checked]",this);
        checked=checked.length?checked:$("dd *[value]:first",this);
        var setdef=new jQuery.Event("click");
        setdef.init=true;
        checked.trigger(setdef);
        $("dt",this).width($("dd",this).innerWidth(true));

        that.hover(slide);
        function slide(e)
        {
            var that=$(this);
            var dd=$("dd",this);
            if(!that.data("defTop"))
            {
                that.data("defTop",dd.height());
            }
            var horse=$("dd>*:first",this);
            var top0=that.height();
            var top1=horse.innerHeight(true);
            var top=e.type=="mouseleave"?-top1:0;
            if(top==0 && dd.is(":hidden"))
            {
                horse.css({marginTop:-dd.innerHeight(true)});
                dd.show();
            }
            horse.stop(true).animate({marginTop:top},{duration:600,easing:"easeInOutCirc"});
        }
    });

    $(".fancybox").fancybox();

    $("ol").each(function(){$(">li:lt(3)",this).addClass("top")});
    $(".selectall").click(function(){
        var that=$(this);
        $(":checkbox").attr("checked",that.attr("checked"));
    });
    $(".content_toggle").click(function(){$(this).toggleClass("content_toggle_on")});
    $(".order_dl a.current").parents("ul").show();


});

$(function(){
    var ajaxMsger=$("<div id='ajaxMsger'><span></span></div>");
    $("body").append(ajaxMsger).bind("ajaxsend ajaxdone ajaxerror",newMsg);
    ajaxMsger.hide();
    //显示消息
    //根据event对象类型显示不同样式
    //可用event对象的msg属性指定自定义消息内容
    //可用event对象的timer属性指定自定义消息显示时间
    function newMsg(e)
    {
        if(this.timer)
        {clearTimeout(this.timer)}
        var defmsg={
            "ajaxsend":"传输ing...",
            "ajaxdone":"传输完成！",
            "ajaxerror":"噢嗤！貌似出错啦~请稍等片刻重试~"
        };
        var content=$("#ajaxMsger span");
        content.removeClass().addClass(e.type).html(e.msg||defmsg[e.type]);
        ajaxMsger.show();
        content.stop(true).animate({"top":0},{duration:600,easing:"easeInOutCirc"});
        if(e.type!="ajaxsend")
        {
            this.timer=setTimeout(function(){content.stop(true).animate({"top":-content.outerHeight(true)},{duration:600,easing:"easeInOutCirc",complete:function(){ajaxMsger.hide();}})},parseInt(e.timer)||5000);
            
        }
        e.stopPropagation();
    }

    //全局方法
    //@param msgType str 指定消息类型，默认为ajaxSend。
    //@param msg str 指定消息内容，可选。
    //@param timer int 指定消息显示时间，默认为5000ms。
    window.ajaxMsg=function(msgType,msg,timer){
        var e=new jQuery.Event(msgType||"ajaxsend");
        e.msg=msg;
        e.timer=timer;
        $("body").trigger(e);
    }
});

//简单从上至下的滚动
//接收由对象设置的参数
//@param step int 步长
//@param interval int 间隔时间
(function($){
        $.fn.simpscroll=function(arg0,arg1)
        {
            var step,interval;
            if(arg0 && typeof(arg0)=="object")
            {
                step=parseInt(arg0.step);
                interval=parseInt(arg1.interval);
            }
            else if(arg0)
            {
                step=arg0;
                interval=arg1;
            }
            step=step?step:3;
            interval=interval?interval:3000;

            this.each(function(){
                var that=$(this);
                var item=$(">*",this);
                item.each(itemInit);
                that.bind("recharge",function(){$(">*:last",this).trigger("reload")});
                that.hover(toggleFreezing,toggleFreezing);
                that.trigger("recharge");
            });

            //冻结&解冻条目显示
            function toggleFreezing(e)
            {
                var tango=$(">*:first",this);
                var eMap={"mouseenter":"freezing","mouseleave":"fire"}
                tango.trigger(eMap[e.type]); 
            }

            //条目初始化
            function itemInit()
            {
                var that=$(this);
                that.data("h",that.outerHeight(true));
                that.bind("reload",itemReload);
                that.bind("fire",itemFire);
                that.bind("freezing",itemFreezing);
            }

            //条目装载，将自己置于头部并设置初始状态
            function itemReload()
            {
                var that=$(this);
                that.css({"marginTop":-that.data("h"),"opacity":0});
                that.parent().prepend(that);
                that.data("t",setTimeout(function(){that.trigger("fire")},interval));
            }

            //条目显示，动画完毕后准备下一条
            function itemFire()
            {
                var that=$(this);
                var cmt=parseInt(that.css("marginTop"))+step;
                var t=that.data("t");
                if(t)
                {clearTimeout(t)}
                if(cmt<0)
                {
                    that.css("marginTop",cmt);
                    that.data("t",setTimeout(function(){that.trigger("fire")},50));
                }
                else if(that.css("opacity")==0)
                {
                    that.css("marginTop",0).animate({"opacity":1},{"duration":500});
                    that.trigger("recharge");
                }
            }

            //条目冻结
            function itemFreezing()
            {
                var that=$(this);
                var t=that.data("t");
                if(t)
                {clearTimeout(t)}
            }

            return this;
        }
        $(function(){$(".simpscroll").simpscroll()});
})(jQuery);


/**
 * @author zengli
 */

$(function(){
    $("img:not(:hidden,.editMode img,.slider img,.h300 img,#scrollFlg img,.imgFade img)").lazyload({placeholder:"/img/blank.gif",effect:"fadeIn"});

    /**
     * 兼容编辑器生成的img边框
     */
    $(".format img[border]").each(function(){
        var that=$(this);
        var borderSet="{0}px solid".$$(that.attr("border"));
        that.css({"border":borderSet});
    });

    $(".searchSuggest").each(function(){
        var that=$(this);
        var text=$(":text",this);
        var ul=$("<ul/>").css({"position":"absolute","zIndex":"999"}).addClass("ssr").hide();
        $("body").append(ul);
        text.bind("keypress",checkEnter)
		     .bind("keyup",onInput)
             .bind("blur",function(){$(this).trigger("reset")})
             .bind("inputChanged",checkChange)
            //.bind("mouseenter",function(){$(this).select();});
        that.data("ul",ul)
              .bind("reset",reset)
              .bind("inputChanged",ajaxRequest)
              .bind("prev next",moveSelect)
        ul.data("rel",text)
		  .bind("show",poset)
          .bind("mousemove",setCurrent);
    });
	
    /**
     * 检查回车事件
     */
	function checkEnter(e)
	{
		if(e.keyCode==13 && $(".ssr:visible").length)
		{
			return false;
		}
	}
	
	
	/**
	 * 复位
	 */
	function reset()
	{
		var that=$(this);
		that.data("ul").hide();
	}
	
	
	/**
	 * 显示搜索建议
	 */
	function poset()
	{
		var that=$(this);
		var text=that.data("rel");
		that.css({"minWidth":text.innerWidth(true),"left":text.offset().left,"top":text.offset().top+text.outerHeight(true)-1}).show();
	}
	
    /**
     * 建议值处理
     */
	function dataFomat(source,data)
	{
		//source=source.replace(/(\S+)(\s.*)(\1)/g,"$1$2");
		source=source.replace(/\S+$/g,data);
		return source;
	}
	
    /**
     * 响应鼠标事件设置选择
     */
    function setCurrent(e){
        var target=$(e.target);
		var rel=$(this).data("rel");
        if(target.is("li"))
        {
            $(".current", this).removeClass();
            //$(this).data("rel").val(target.addClass("current").html());
           rel.val(dataFomat(rel.val(),target.addClass("current").html()));
            if (sType == 10)
            	$("#userId").val(target.filter(".current").attr("id"));
        }
    }
    
    /**
     * 响应键盘事件设置选择
     */
    function moveSelect(e)
    {
        var that=$(this);
        var li=$("li",that.data("ul"));
        var text=$(":text",this);
        if(li.length)
        {
            var hf={"prev":":last","next":":first"}
            var current=li.filter(".current").removeClass();
            eval("var tango=current."+e.type+"()");
            if(tango.length)
            {
                tango.addClass("current");
            }
            else
            {
                li.filter(hf[e.type]).addClass("current");
            }
            //text.val(li.filter(".current").html());
            text.val(dataFomat(text.val(),li.filter(".current").html()));
            if (sType == 10)
            	$("#userId").val(target.filter(".current").attr("id"));
        }
    }
    
    /**
     * 文本框按键事件处理
     */
    function onInput(e)
    {
        var that=$(this);
        var evenType={
            "38":"prev",
            "40":"next",
			"13":"reset"
            };
        that.trigger(evenType[e.keyCode]||"inputChanged");
    }
    
    /**
     * 检查值的变化
     */
    function checkChange(e)
    {
        var that=$(this);
        var currentVal=$.trim(that.val());
        if(that.attr("val")!=currentVal)
        {
            that.attr("val",currentVal);
        }
        else
        {
            that.trigger("hide");
            e.stopPropagation();
        }
    }
    
    /**
     * ajax查询
     */
    function ajaxRequest()
    {
        var that=$(this);
        clearTimeout(that.data("timer"));
        that.data("timer",setTimeout(function(){
            if (sType == 10){
        		var h = "";
        		var name = $(":text",that).val().replace(/^.+\s/g,"");
        		if (name != "") {
					DUser.getUsers(name, function(data){
						for ( var i = 0; i < data.length; i++) {
							h += '<li id="'+data[i].in_user_id+'">'+data[i].in_itemname+'</li>';
						}
			        	var ul=that.data("ul");
		        		if (h)
		        			ul.html(h).trigger("show");
		        		else
		        			ul.hide();
					})
				}else{
					$("#userId").val("0");
				}
        	}else{
	            DCheck.searchItem(sType, $(":text",that).val().replace(/^.+\s/g,""), function (data){
	        		var ul=that.data("ul");
	                if(data)
	                {
	                    ul.html(data).trigger("show");
	                }
	                else
	                {
	                    ul.hide();
	                }
	        	});
	        }
        },200));
    }
});
