var $ctx = "";

try {
	var src = document.scripts[document.scripts.length - 1].src;
	if(src == ''){
		src = document.scripts[document.scripts.length - 2].src;
	}
	$ctx = src.substr(1).match(new RegExp("(\\?|&)ctx=([^&]*)(&|$)"))[2] || "";

} catch (e) {

}
var isSafari = /Safari/.test(navigator.userAgent) && !/Chrome/.test(navigator.userAgent);// 是否是safari浏览器
YunFileUtil = {
	downloadYunFile : function () {},
	url: '//noteyd.chaoxing.com/screen/note_note/files/status/',
	fileSuffix: '.txt,.pdz,.pdf,.epub,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.xlt,.xlsm,.xlsm,.xltm,.xlsb',
}
//获取js当前路径
YunFileUtil.url = function () {
	var jsPath = document.currentScript && document.currentScript.src ? document.currentScript.src : function () {
		var js = document.scripts
			, last = js.length - 1
			, src;
		for (var i = last; i > 0; i--) {
			if (js[i].readyState === 'interactive') {
				src = js[i].src;
				break;
			}
			if (js[i].src.indexOf('yun.file.util.js') > -1) {
				src = js[i].src;
				break;
			}
		}
		return src || js[last].src;
	}();
	return jsPath.substring(0, jsPath.indexOf('/res/')) + '/screen/note_note/files/status/';
}();

/**
 * 下载云盘附件。默认直接下载，传了callback则会回传地址，不进行下载
 * objectId和attachment不能同时为空
 * @param attachment 完整附件数据
 * @param objectId 云盘文件objectId
 * @param callback 获取到下载地址后的回调
 */
YunFileUtil.downloadYunFile = function (attachment, objectId, callback) {
	if (!attachment && !objectId) {
		return;
	}
	var fileName = '',suffix = '';
	var resid = '';
	if (attachment) {
		switch (attachment.attachmentType) {
			case 18:
				// 云盘附件
				fileName = attachment.att_clouddisk.name;
				objectId = attachment.att_clouddisk.fileId || '';
				if(window.location.host.indexOf('chaoxing.com') > -1 || window.location.host.indexOf('xuexi365.com') > -1){
					resid = attachment.att_clouddisk.residstr || attachment.att_clouddisk.resid || '';
				}
				try {
					if(attachment.att_clouddisk && attachment.att_clouddisk.resid && typeof attachment.att_clouddisk.resid == 'number' && attachment.att_clouddisk.infoJsonStr && attachment.att_clouddisk.infoJsonStr.residstr){
						resid = attachment.att_clouddisk.infoJsonStr.residstr;
					}
				}catch (e) {

				}

				suffix = attachment.att_clouddisk.suffix;
				break;
			case 29:
				// 视频附件
				fileName = attachment.att_video.fileTitle || '';
				objectId = attachment.att_video.objectId2 || '';
				suffix = attachment.att_video.type;
				break;
			case 26:
				// 音频附件
				fileName = attachment.att_voice.fileTitle || '';
				objectId = attachment.att_voice.objectId2 || '';
				suffix = attachment.att_voice.type;
				break;
		}
	}
	if (fileName) {
		// 2024-2-2 不再去文件后缀,音视频文件名里没有后缀的加上后缀
		fileName = fileName.replace(/;/g,''); //带分号的文件名下载会从分号处截断，没有后缀，需要把分号去掉
		if(fileName.indexOf('.') == -1 && attachment.attachmentType == 29){
			//视频没有后缀补上，音频之前添加的后缀不准确，就不处理音频了
			fileName = fileName + '.' + suffix
		}

		if (fileName.lastIndexOf('.') == fileName.length - 1) {
			// 以.结尾的，去掉最后面的.，不用 endsWith ， 老版ie不支持
			fileName = fileName.substring(0, fileName.lastIndexOf('.'));
		} else if (fileName.indexOf('.') > -1) {
			// 文件名里面包含文件后缀，去掉文件后缀
			//中心存储在2023年修改成了是按照文件名里有没有.来区分带不带扩展名的，文件名中如果带点，就不再加后缀，需要改成去掉后缀后如果有点就加上后缀，具体笔记https://noteyd.chaoxing.com/pc/065dfd40-a332-4bda-81f3-a5740ef0e714
			var tempFileName = fileName.substring(0, fileName.lastIndexOf('.'));
			if(tempFileName.indexOf('.') == -1){
				fileName = tempFileName
			}
		}
	}
	if (!objectId) {
		return;
	}
	if (window.location.host.indexOf('istudy.szpt.edu.cn') != -1 && typeof RichTextUitl != 'undefined') {
		// 这两个域名做了云盘镜像，要请求定制的笔记域名，才能请求到镜像云盘
		YunFileUtil.url = RichTextUitl.convertUrl('https://noteyd.chaoxing.com/screen/note_note/files/status/');
	}
	// 分享页面和一些门户页面没登录也可以下载，请求投屏下的接口，不需要登录
	var url = YunFileUtil.url + objectId + '?resid=' + resid + '&puid=' + (getCookie('UID') || '');
	// 如果是镜像模式
	if(window.obj && window.obj.mirrorDomain && window.obj.mirrorDomain.hasOwnProperty('isMirrorDeploy')){
		if(window.obj.mirrorDomain.isMirrorDeploy || window.obj.mirrorDomain.isMirrorDeploy == false && window.obj.mirrorDomain.NoteDomain.indexOf('chaoxing.com') == -1){
			url = window.obj.mirrorDomain.NoteDomain + '/screen/note_note/files/status/'+objectId+'?resid='+resid+'&puid='+(getCookie('UID') || '');
		}
	}
	url = window.location.protocol + url.replace('https:','').replace('http:','');
	if(typeof RichTextUitl != 'undefined'){
		if(typeof RichTextUitl.cloudUrl != 'undefined'){
			url += '&cloudUrl=' + RichTextUitl.cloudUrl;
		}
		if(typeof RichTextUitl.csUrl != 'undefined'){
			url += '&csUrl=' + RichTextUitl.csUrl;
		}
	}
	//先从镜像获取 如果失败 并且是镜像域名，从公网获取一遍
	if (window.location.host.indexOf("course.ustc.edu.cn") != -1 || window.location.host.indexOf("istudy.szpt.edu.cn") != -1
		|| window.location.host.indexOf("mooc.ucas.edu.cn") != -1) {
		let result = getCommonFileDownLoadUrl(url);
		if ( !result ){
			let urlDomain = url.replace('http:','').replace('https:','').replace('//','');
			if(urlDomain.indexOf('/') > -1){
				url = urlDomain.substring(urlDomain.indexOf('/'))
			}
			url = window.location.protocol + "//noteyd.chaoxing.com"+url ;
		}
	}
	//镜像附件地址
	if(typeof RichTextUitl != "undefined" && RichTextUitl.annexMirrorPrefix && attachment && attachment.attachmentType == 18 && attachment.att_clouddisk.isMirror){
		 url = RichTextUitl.annexMirrorPrefix + '/screen/note_note/files/status/' + objectId + '?resid=' + resid + '&puid=' + (getCookie('UID') || '');
	}
	$.ajax({
		url: url,
		type: "get",
		xhrFields: {
			withCredentials: true
		},
		success: function (data) {
			if(data && data.status == false && data.msg){
				//如果云盘文件被删除，取不到下载地址，给错误提示
				if(typeof RichTextUitl != 'undefined'){
					RichTextUitl.showTips(data.msg,0)
				}
			}
			if (!data || (data.status && !data.download))
				return;
			var downloadUrl = data.download;
			if (!downloadUrl) {
				return;
			}
			if(fileName){
				if(downloadUrl.indexOf('fn=') > -1 ){
					//下载地址里已经有fn的,替换fileName
					downloadUrl = changeURLArg(downloadUrl,'fn',encodeURIComponent(fileName))
				}else if (downloadUrl.indexOf('fn=') == -1 ) {
					// 下载地址带上云盘文件名，避免修改了附件文件名，下载下来的还是旧的文件名
					if (downloadUrl.indexOf('?') > -1) {
						downloadUrl += '&fn=' + encodeURIComponent(fileName);
					} else {
						downloadUrl += '?fn=' + encodeURIComponent(fileName)
					}
				}
			}
			if(isSafari){ //safari浏览器下载时，加参数&mac=1
				downloadUrl += '&mac=1'
			}
			if (self != top) {
				// 嵌入在iframe里面
				if (location.protocol.indexOf('https') != -1) {
					// https服务下，下载地址换成https的
					downloadUrl = downloadUrl.replace("http://", 'https://');
				}
			} else {
				if(window.location.protocol == 'https:'){
					downloadUrl = downloadUrl.replace("http:", 'https:');
				}
			}
			if (typeof callback == 'function') {
				callback(downloadUrl);
				return;
			}
			downloadFileFn(downloadUrl)
		},
		error: function () {
		}
	});
}

/**
 * 同步判断是否有下载地址
 * @param url
 * @returns {boolean}
 */
function getCommonFileDownLoadUrl (url){
	var result = false;
	$.ajax({
		url: url,
		type: "get",
		async: false,
		xhrFields: {
			withCredentials: true
		},
		success: function (data) {
			if(data && data.status){
				result = data.status;
			}
		},
		error: function () {
		}
	});
	return result;
}

/**
 * 同步获取下载地址
 * @param objectId
 * @returns {string}
 */
YunFileUtil.getDownloadUrl = function (objectId) {
	if (!objectId) {
		return '';
	}
	$.ajaxSettings.async = false;//设置同步执行
	var downloadUrl = '';

	if(typeof RichTextUitl != 'undefined'){
		if (window.location.host.indexOf('course.ustc.edu.cn') != -1 || window.location.host.indexOf('istudy.szpt.edu.cn') != -1) {
			// 这两个域名做了云盘镜像，要请求定制的笔记域名，才能请求到镜像云盘
			YunFileUtil.url = RichTextUitl.convertUrl('https://noteyd.chaoxing.com/screen/note_note/files/status/');
		}
		if(typeof RichTextUitl.cloudUrl != 'undefined'){
			url += '&cloudUrl=' + RichTextUitl.cloudUrl;
		}
		if(typeof RichTextUitl.csUrl != 'undefined'){
			url += '&csUrl=' + RichTextUitl.csUrl;
		}
	}
	$.ajax({
		url: YunFileUtil.url + objectId,
		type: "get",
		xhrFields: {
			withCredentials: true
		},
		success: function (data) {
			if (!data || data.status && !data.download)
				return;
			downloadUrl = data.download;
			if (location.protocol.indexOf('https') != -1) {
				// https服务下，下载地址换成https的
				downloadUrl = downloadUrl.replace("http://", 'https://');
			}
		},
		error: function () {
		}
	});
	$.ajaxSettings.async = true;//取消设置同步执行
	return downloadUrl;
};

/**
 * 下载本地文件夹
 * @param residArray resid数组
 * @param folderPuid 文件夹所属人puid
 * @param folderName 文件夹名称
 */
YunFileUtil.downloadLocalFolder = function (residArray, folderPuid, folderName) {
	if (!residArray || residArray.length == 0) {
		return;
	}
	var batchDownloadCallback = function () {

		var cloudArray = new Array();
		$.each(residArray, function (idx, val) {
			cloudArray.push({'puid': folderPuid, 'resid': val});
		})
		var open_url = 'https://ypdownload.chaoxing.com/download/downloadFilePackage?_token='
			+ YunFileUtil.yunToken + '&puid=' + YunFileUtil.puid
			+ '&fileArray=' + encodeURIComponent(JSON.stringify(cloudArray))
			+ '&downloadFileName=' + encodeURIComponent(folderName);
		window.location.href = open_url;
	}
	if (typeof RichTextUitl != 'undefined' && RichTextUitl.yunToken && RichTextUitl.puid) {
		// 页面上有引用 rich_text_util.js 或者 rich.text.util.js，里面会调云盘接口获取token
		YunFileUtil.yunToken = RichTextUitl.yunToken;
		YunFileUtil.puid = RichTextUitl.puid;
		batchDownloadCallback();
	} else {
		YunFileUtil.getUploadConfig(batchDownloadCallback)
	}

}
/**
 * 获取云盘token
 * @param callback
 */
YunFileUtil.getUploadConfig = function (callback) {
	if (typeof jQuery != 'undefined') {
		// 之前http页面可以调用https的接口，现在新版的chrome浏览器上面不行了，这里做下域名适配
		// var noteDomain = 'https://noteyd.chaoxing.com';
		var noteDomain = window.obj.mirrorDomain.NoteDomainHttps;
		if (window.location.protocol == 'http:') {
			// noteDomain = 'http://note.yd.chaoxing.com';
			noteDomain = window.obj.mirrorDomain.NoteDomain;
		}
		var json = {
			url: YunFileUtil.convertUrl(noteDomain + "/pc/files/getUploadConfig"),
			type: "get",
			xhrFields: {
				withCredentials: true
			},
			headers: {"Content-Type": "application/x-www-form-urlencoded"},
			data: {},
			dataType: "json",
			success: function (resultData) {
				if (resultData && resultData.result == 1) {
					YunFileUtil.puid = resultData.msg.puid;
					YunFileUtil.yunToken = resultData.msg.token || '';
				}
				if (typeof callback == 'function') {
					callback();
				}
			},
			error: function () {
			}
		}
		$.ajax(json);

	}
}
//获取js当前路径
YunFileUtil.currentDomain = function () {
	var jsPath = document.currentScript && document.currentScript.src ? document.currentScript.src : function () {
		var js = document.scripts
			, last = js.length - 1
			, src;
		for (var i = last; i > 0; i--) {
			if (js[i].readyState === 'interactive') {
				src = js[i].src;
				break;
			}
			if (js[i].src.indexOf('yun.file.util.js') > -1) {
				src = js[i].src;
				break;
			}
		}
		return src || js[last].src;
	}();
	jsPath = jsPath.substring(jsPath.indexOf('//') + 2, jsPath.lastIndexOf('/') + 1);
	// jsPath = jsPath.substring(0, jsPath.indexOf('/'));
	return jsPath;
}();
/**
 * 地址转换
 * @param url
 * @returns {*}
 */
YunFileUtil.convertUrl = function (url) {
	try {
		if(window.location.origin.indexOf('file:') > -1 || window.location.origin.indexOf('//localhost') > -1){
			return url;
		}
		var protocol = window.location.protocol;
		// 获取当前域名，有一些单位定制了域名，需求请求对应的定制笔记域名
		// 例如: http://groupyd2.ecourse.ucas.ac.cn/pc/activity/activityList
		var domain = window.location.host;
		//处理统一域名+路径访问模式，域名转换为xxxx.com/noteyd/xxx
		if (YunFileUtil.currentDomain && YunFileUtil.currentDomain.indexOf('/noteyd/') > -1 && url.indexOf('yd.') > -1) {
			url = url.substring(url.indexOf('//') + 2, url.length);
			urlDomain = url.substring(0, url.indexOf('/'));
			var service = '';
			if (urlDomain.substring(0, urlDomain.indexOf('.')).indexOf('yd') > -1) {
				service = '/' + urlDomain.substring(0, urlDomain.indexOf('.'));
			}
			url = url.replace(urlDomain, domain + service);
			return '//' + url;
		}else if(YunFileUtil.currentDomain && YunFileUtil.currentDomain.indexOf('bistatic-') > -1 && url.indexOf('chaoxing.com') > -1){
			//超星域名换成ipv6域名bistatic-xx.chaoxing.com,例noteyd.chaoxing.com换成bistatic-noteyd.chaoxing.com
			url = url.substring(url.indexOf('//')+2,url.length);
			return '//bistatic-' + url;
		}
		if (domain.indexOf('chaoxing.com') > -1) {
			// 超星域名
			if (protocol == 'http:') {
				// 当前协议是http的，之前http页面可以调用https的接口，现在新版的chrome浏览器上面不行了，这里做下域名适配
				url = url.replace('https://', 'http://');
			}
			return url;
		}
		// 截取域名
		domain = domain.substring(domain.indexOf('.'))
		// 笔记服务和小组，有http页面是两级的，note.yd.chaoxing.com , group.yd.chaoxing.com，去掉yd
		domain = domain.replace('.yd.', '.');

		if (protocol == 'http:' && url.indexOf('https://noteyd.chaoxing.com') > -1) {
			// 当前页面是http协议的，使用的接口地址是笔记的https域名，需要改成笔记http域名，大多定制单位都是配置http的定制域名，没有配https的
			var prefix = 'http://note.yd';
			// 丽水学院 特殊判断
			if (url.indexOf('lsu.edu.cn') > -1) {
				prefix = 'http://noteyd';
			}
			if(YunFileUtil.currentDomain.indexOf('noteyd') > -1 && YunFileUtil.currentDomain.indexOf('chaoxing.com') == -1){
				url = url.replace('https://noteyd.chaoxing.com', 'http://noteyd' + domain);
			}else{
				url = url.replace('https://noteyd.chaoxing.com', prefix + domain);
			}
		} else {
			if (url.indexOf('mooc1-2.chaoxing.com') > -1) {
				// 目前看一个定制域名的单位（国科大），慕课域名是用的mooc1，mooc1.ecourse.ucas.ac.cn
				url = url.replace('mooc1-2.chaoxing.com', 'mooc1.chaoxing.com')
			}
			url = url.replace('.chaoxing.com', domain);
		}
		if (protocol == 'http:' && url.indexOf('https://') > -1) {
			// 当前页面是http的，请求的地址是https的换，换成http
			url = url.replace('https://', 'http://')
		}
	} catch (e) {

	}
	return url;
}

function getCookie(name) {
	var strcookie = document.cookie;//获取cookie字符串
	var arrcookie = strcookie.split("; ");//分割
	//遍历匹配
	for (var i = 0; i < arrcookie.length; i++) {
		var arr = arrcookie[i].split("=");
		if (arr[0].trim() == name) {
			return arr[1];
		}
	}
	return '';
}

//获取地址里传过来的参数
function getUrlParamNew(name,str){
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
	var r = str.match(reg);  //匹配目标参数
	if (r != null) return r[2]; return null; //返回参数值
}
//修改url参数
function changeURLArg(url,arg,arg_val){
	var pattern=arg+'=([^&]*)';
	var replaceText=arg+'='+arg_val;
	if(url.match(pattern)){
		var tmp='/('+ arg+'=)([^&]*)/gi';
		tmp=url.replace(eval(tmp),replaceText);
		return tmp;
	}else{
		if(url.match('[\?]')){
			return url+'&'+replaceText;
		}else{
			return url+'?'+replaceText;
		}
	}
}

// 文件下载
function downloadFileFn(url) {
	if(typeof MultiEditor !== 'undefined') {
		MultiEditor.isFileDownloadPageJump = true
	}
	window.location.href = url
	if(typeof MultiEditor !== 'undefined') {
		MultiEditor.isFileDownloadPageJump = false
	}
}