/**
 * rhhz.js ---仁和软件前端插件js集合
 * tools{
 * 	subTextMax:文本内容按长度设置截取,
 * 	menuView:按照页面设置进行页面菜单对应高亮
 * }
 * function{
 * 	hasChinese:判断当前对象中是否包含中文字符,
 * 	trim:解决IE 对jquery Trim方法的兼容性,
 * 	startWith:判断当前对象是否以字符开始,
 * 	endWith:判断字符串是否以字符结束,
 *  getFileUrl:获取本地资源文件的路径,
 *  preImg:预览本地图片,
 *  getUrlParam:获取URL参数列表,
 *  getRefSupIndex:获取参考文献引用索引,
 *  isNull:判断对象是否为空,
 *  formatDateToEn:将日期转换成英文格式 2016-1-1 --> 01 Jan 2016
 *  GetRandomNum:获取随机数
 *  dateStr:获取网页顶部显示需要的日期信息 参数，type 1:中文  2英文 3英文简写 （ 2017-1-11 星期三;  Wednesday, 11 January, 2017 ;Jan 20th, Wednesday
 * 	shareTools(type,obj):分享工具，qzone,sina,weixin,renren,google+,facebook,linkedin,twitter
 * }
 * 
 * @version     v1.0
 * @date 		2016-09-30
 */

+function ($) {
	//设置字符串截取默认参数
	var subTextDefaluts = {
		add_title:true,      //默认截取后设置全内容title
        trim:true,//默认截取后去除首尾空及换行，感觉没啥用，后面考虑取消
        content_type:'html',//默认处理内容为html标签，如设置为text会清除原有标签
        keep_len:10//默认截取保留10个字符，建议采用配置方式或者在标签中设置
	};
	
	//设置菜单高亮默认参数
	var menuDefaults = {
		defaultPage:'index',			//默认获取不到页面索引，设置为首页
		pageViewId:'pageViewId',		//页面索引取值ID
		hightLightTag:'li',				//需要设置高亮的标签
		highLightClass:'current',		//当前页选中高亮class
		pageRelAttr:'rel_page',			//菜单列表中索引属性标识
		pageRelTag:'li span'			//菜单列表中索引取值标签，默认取text().trim(),pageRelTag和pageRelAttr不需要同时存在
	}
	
	$.fn.subTextMax = function(options) {
		var opts = $.extend({}, subTextDefaluts, options); 
		return this.each(function(){
		var keepindex = parseInt($(this).attr("keep_len") == undefined ? opts.keep_len : $(this).attr("keep_len"));//超出keep值需要截取
		var contentHtml = $(this).html().replace(/&nbsp;/ig, '').replace(/\s+/g, ' ').replace(/\t|\r|\n/g,"").replace('<sec> <b>','<sec><b>').replace(/<br[ ]*[/]{0,1}>/g,"<br/>").trim();
		//var contentText = $(this).text().replace(/&nbsp;/ig, '').replace(/\s+/g, ' ').replace(/\t|\r|\n/g,"").trim();
		var contentText = filterHTMLTag(contentHtml);
		
		if(contentText.length > keepindex){
	       //如果需要，可加title，title为全部文本内容
		   if(opts.add_title){
			   if($(this).attr("title")==''||$(this).attr("title") == undefined){
				   $(this).attr("title",contentText);
		      }
		    }
		    contentText = contentText.substr(0,keepindex);
		    if(opts.content_type == 'text'){
		        $(this).html(contentText + "...");
		    }else{
		        //对HTML标签内容进行截取分为四个步骤1存储原有标签  2按照text进行截取  3对截取后的text进行标签插入  4补全未闭合标签
		        //1.处理原有标签
		        //获取当前内容中的各个标签及所在位置
		        var rgx = /<[^<^>]+>/; //标签匹配正则
		        var index = 0;
		        var tags = new Array();
		        while(rgx.test(contentHtml)){
		            var t = new Object();
		            //标签出现的位置
		            t.index = index + contentHtml.search(rgx);
		            //标签内容
		            t.tag = contentHtml.match(rgx).toString();
		            //每次匹配第一个标签，匹配完删除此标签，同时索引位置加当前标签的长度
		            var len = contentHtml.search(/<[^<^>]+>/) + contentHtml.match(/<[^<^>]+>/)[0].length;
		            contentHtml = contentHtml.substr(len);
		            index += len;
		            tags.push(t);
		        }
		        //2.截取text内容，上面已经截取过了
		        //3.填充原有标签
		        if(tags.length > 0){
		            $.each(tags,function(i,e){
		                if(e.index > contentText.length){
		                //如果当前节点的开始位置大于当前返回字符串的长度则不再继续判断
		                tags = tags.slice(0,i);
		                return false;
		                }else{
		                //将原有标签插入原位置
		                contentText = contentText.substr(0,e.index) + e.tag + contentText.substr(e.index,contentText.length);
		                }
		            })
		        }
		        //4.闭合标签
		        //获取未闭合标签，标签填充时不需要填充的标签都被slice过滤掉了，所以剩下的都是已经在内容中的标签了，需要进行判断闭合处理
		        var insertTags = new Array();//已正确插入标签
		        var uncloseTags = new Array();//未闭合标签
		        if(tags.length > 0){
		            $.each(tags,function(i,e){
		            //先将所有插入的标签放到插入和未闭合列表中
		            uncloseTags.push(e.tag);
		            insertTags.push(e.tag);
		            })
		            $.each(insertTags,function(i,e){
		                //自闭合标签不需要补全，删除如<br/>
		                if(/<[^<^>^\/]+\/>/.test(e)){
		                    uncloseTags.splice($.inArray(e,uncloseTags),1);
		                    return true;
		                }
		                //对左标签进行闭合判断，如果同时存在一组左右标签，则同时删除即可，由于成组的删除，所以不用考虑多个<div>对应一个</div>的情况，我们只需要按照顺序获取到未闭合的列表即可
		                if(/<[^<^>^\/]+>/.test(e)){
		                    var tagClosed = "";
		                       if(e.indexOf(" ") > 0){
		                        tagClosed = "</" + e.substring(1, e.indexOf(" ")) + ">";
		                    }else{
		                        tagClosed = "</" + e.substring(1, e.length);
		                    }
		                    //同时存在闭合标签
		                    if($.inArray(tagClosed,uncloseTags) != -1){
		                        uncloseTags.splice($.inArray(e,uncloseTags),1);
		                        uncloseTags.splice($.inArray(tagClosed,uncloseTags),1);
		                       }
		                }
		            })
		        }
		        //此时uncloseTags已经是未闭合的标签列表了
		        //生成闭合标签，根据标签嵌套规则，右标签和左标签对应，如<div><p>   --  </p></div>，所以先将未闭合标签数组逆序
		        if(uncloseTags.length > 0){
		            var closeTagStr = "";
		            uncloseTags.reverse();
		            $.each(uncloseTags,function(i,e){
		                if(e.indexOf(" ") > 0){
		                    closeTagStr += "</" + e.substring(1, e.indexOf(" ")) + ">";
		                }else{
		                    closeTagStr += "</" + e.substring(1, e.length);
		                }
		            })
		            contentText += "..." + closeTagStr;
		        }else{
		            contentText += "...";
		        }
		        //拼接完成
		        $(this).html(contentText);
	       	}
	        
    		}
	    })
   }
}(jQuery);

/**
 * 自定义字符串结尾判定方法，以s结尾返回true，否则返回false
 * @param s
 * @return
 */
String.prototype.endWith = function(s) {
	if (s == null || s == "" || this.length == 0 || s.length > this.length)
		return false;
	if (this.substring(this.length - s.length) == s)
		return true;
	else
		return false;
	return true;
}

/**
 * 自定义字符串开始判定方法，以s开始返回true，否则返回false
 * @param s
 * @return
 */
String.prototype.startWith = function(s) {
	if (s == null || s == "" || this.length == 0 || s.length > this.length)
		return false;
	if (this.substr(0, s.length) == s)
		return true;
	else
		return false;
	return true;
}

/**
 * IE浏览器兼容jquery trim方法
 * @return
 */
String.prototype.trim=function(){
  	return this.replace(/(^\s*)|(\s*$)/g, "");
}
/**
 * 获取地址栏url参数
 * @param name
 * @return
 */
function getUrlParam(name){
     var reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)");
     var r = window.location.search.substr(1).match(reg);
     if(r!=null)return  unescape(r[2]); return null;
	//return $("#language").val();
}

/**
 * 从参考文献引用信息中提取参考文献索引
 * 支持格式"[1,3,5-8,11,13-18,19]"
 * @param refSup
 * @return
 */
function getRefSupIndex(refSup){
	if(!isNull(refSup)){
		refSup = refSup.replace(/[\[|\]]/g, '').trim();
		var chars = ['~','—','–','，','-','−','⁃'];
		$.each(chars,function(ind,val){
			var reg = new RegExp(val,"g");
			refSup = refSup.replace(reg,'&');
		});
		var refIndexs = [] ;
		$.each(refSup.split(","),function(i,e){
			if(isNaN(e)){
				var startEnd = e.split("&");
				var start = parseInt(startEnd[0]);
				var end = parseInt(startEnd[1]);
				for(var i = start ; i <= end ; i++){
					refIndexs.push(i);
				}
			}else{
				refIndexs.push(e);
			}
		})
		//alert(refIndexs);
		return refIndexs;
	}
	return null;
}

/**
 * 封装判断对象为空方法
 * @param object
 * @return
 */
function isNull(object){
	return typeof(object) == "undefined" || object == null || object == ""; 
}

/**
 * 获取随机数
 * @param Min
 * @param Max
 * @return
 */
function GetRandomNum(Min,Max){   
	var Range = Max - Min;   
	var Rand = Math.random();   
	return(Min + Math.round(Rand * Range));   
} 

/**
 * 获取网页顶部显示需要的日期信息
 * @param type 1:中文  2英文 3英文简写
 * 	  2017-1-11 星期三
 * 	  Wednesday, 11 January, 2017 
 *    Jan 20th, Wednesday
 * @return
 */
function dateStr(type){
	var date = new Date();
	return parseInt(type) == 1 ? 
		formatDate(date,type) + " "+ getTodayWeek(type) : 
		getTodayWeek(type) + ", " +formatDate(date,type)  ;
}


/**
 * 将日期格式化成英文格式
 * 2017-1-11
 * 11 January, 2017
 * Jan 11, 2017
 * @param date
 * */
function formatDate(date,type){
	if(!isNull(date)){
		var dateStr = JSON.stringify(date).substring(1,11);
		var dateVal = dateStr.split("-");
		var month = dateVal[1];
		if(month.charAt(0)== 0){month = month.charAt(1);}
		var monthArray = new Array
        ("January","February","March","April","May","June","July","August",
        "September","October","November","December");
		var monthArraySimple = new Array
        ("Jan","Feb","Mar","Apr","May","June","July","Aug",
        "Sep","Oct","Nov","Dec");
        switch (type) { 
		    case 1 : 
	            return dateStr;
		    case 2 : 
		    	return dateVal[2]+" "+monthArray[month-1]+", "+dateVal[0];
		    case 3 : 
		    	return monthArraySimple[month-1]+" "+dateVal[2]+", "+dateVal[0];
		}
 	}
}

/**
 * 获取星期几
 * @param type 1:中文  2英文 3英文简写
 * @return
 */
function getTodayWeek(type){
	var chinese = new Array("星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六");  
	var english = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");  
	var englishSigle = new Array("Sun.","Mon.", "Tues.", "Wed.", "Thur.", "Fri.", "Sat.");  
	var week = new Date().getDay(); 
	switch (type) { 
	    case 1 : 
            return chinese[week];
	    case 2 : 
	    	return english[week];
	    case 3 : 
	    	return englishSigle[week];
	}  
}

/**
 * 分享工具方法
 * @param type
 * @return
 */
function shareTools(type,obj){
	var url = window.location;
	var title = $("head title").text();
	var description = $("meta[name='abstract']").attr("content") || $("meta[name='description']").attr("content") || $("meta[name='dc.description']").attr("content") || $("meta[http-equiv='description']").attr("content");
	var shareUrl = "";
	switch (type)
	{
		case 'qzone':
			shareUrl = "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+url+"&title="+title;
			break;
		case 'sina':
			shareUrl = "http://service.weibo.com/share/share.php?title="+title+"&url="+url+"&pic=";
			break;
		case 'weixin':
			shareUrl = local_host + "util/QrcodeServlet?url="+url;
			break;
		case 'renren':
			shareUrl = "http://widget.renren.com/dialog/share?resourceUrl="+url+"&srcUrl="+url+"&title="+title+"&pic=&description="+description;
			break;
		case 'google+':
			shareUrl = "https://plus.google.com/share?url="+url+"&t="+title;
			break;
		case 'facebook':
			shareUrl = "http://www.facebook.com/sharer.php?s=100&p[title]="+title+"&p[summary]="+description+"&p[url]="+url+"&p[images]=";
			break;
		case 'linkedin':
			shareUrl = "http://www.linkedin.com/shareArticle?armin=armin&ro=true&mini=true&url="+url+"&source=&title="+title+"&summary="+description;
			break;
		case 'twitter':
			shareUrl = "https://twitter.com/intent/tweet?text="+title+"&url="+url;
			break;
		default:
			shareUrl = "http://sns.qzone.qq.com/cgi-bin/qzshare/cgi_qzshare_onekey?url="+url+"&title="+title;
			break;
	}
	if("weixin" == type){
		$(".weixinQrcode").attr("src",shareUrl);
	}else{
		window.open(shareUrl, "_blank");
	}
}
function closeWeiXinBox(obj){
	$(obj).parent().hide();
}

//过滤HTML标签
function filterHTMLTag(str) {
    var msg = str.replace(/<\/?[^>]*>/g, ''); //去除HTML Tag
    msg = msg.replace(/[|]*\n/, ''); //去除行尾空格
    msg = msg.replace(/&nbsp;/ig, ''); //去掉npsp
    return msg;
}