importPackage(Packages.cn.myapps.core.macro.runner);
importPackage(Packages.cn.myapps.util.file); // ļ
importPackage(Packages.cn.myapps.util.http); // HttpURL
importPackage(Packages.cn.myapps.util.mail); // ʼ

/**
 * MAP
 */
var GLOBAL_MAP = Packages.cn.myapps.constans.Environment.GLOBAL_MAP;

/**
 * ȡǰĵID
 * 
 * @return ȡǰĵID
 */
function getId() {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		return doc.getId();
	}
	return "";
}

/**
 * ȡǰĵItemֵ
 * 
 * @return ȡǰĵItemֵ
 * 
 * @param fieldName
 *            ǰĵֶ
 */
function getItemValue(fieldName) {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		return doc.getItemValueAsString(fieldName);
	}
	return "";
}

/**
 * ȡǰĵItemֵ,ַʽ
 * 
 * @return ȡǰĵItemֵ,ַʽ
 * 
 * @param fieldName
 *            ǰĵֶ
 */
function getItemValueAsString(fieldName) {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		return doc.getItemValueAsString(fieldName);
	}
	return "";
}

/**
 * ȡǰĵItemֵ,ʽ
 * 
 * @return ȡǰĵItemֵ,ʽ
 * 
 * @param fieldName
 *            ǰĵֶ
 */
function getItemValueAsDate(fieldName) {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		return doc.getItemValueAsDate(fieldName);
	}
	return null;
}

/**
 * ȡǰĵItemֵ,doubleʽ
 * 
 * @return ȡǰĵItemֵ,doubleʽ
 * 
 * @param fieldName
 *            ǰĵֶ
 */
function getItemValueAsDouble(fieldName) {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		return doc.getItemValueAsDouble(fieldName);
	}
	return 0;
}

/**
 * @return ȡǰĵItemֵ,ֵʽ
 * 
 * @param fieldName:ǰĵֶ
 */
function getItemValueAsInt(fieldName) {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		return doc.getItemValueAsInt(fieldName);
	}
	return 0;
}

/**
 * ĵȡǰĵĵ
 * 
 * @return ĵȡǰĵĵ
 * 
 * @param formName
 *            ǰĵĵ
 */
function countSubDocument(formName) {
	var doc = $CURRDOC.getCurrDoc();
	var total = 0;
	if (doc != null) {
		if (doc != null) {
			var subdocs = doc.getChilds(formName);
			if (subdocs != null && subdocs.size() > 0) {
				total = subdocs.size();
			}
		}
	}
	return total;
}

/**
 * ĵֶȡǰĵĵֶεֵܺ
 * 
 * @return ĵֶȡǰĵĵֶεֵܺ
 * 
 * @param formName
 *            ǰĵĵ
 * @param fieldName
 *            ĵֶ
 */
function sumSubDocument(formName, fieldName) {
	var doc = $CURRDOC.getCurrDoc();
	var accurateCalculate = $BEANFACTORY
			.createObject("cn.myapps.util.Arith");
	var total = 0;
	if (doc != null) {
		var subdocs = doc.getChilds(formName);
		if (subdocs != null && subdocs.size() > 0) {
			for (var iter = subdocs.iterator(); iter.hasNext();) {
				var subdoc = iter.next();
				total += subdoc.getItemValueAsDouble(fieldName);
			}
		}
	}
	return accurateCalculate.round(total, 2);
}

/**
 * صǰĵ
 * 
 * @return صǰĵ
 */
function getCurrentDocument() {
	var doc = $CURRDOC.getCurrDoc();
	return doc;
}

/**
 * صǰ¼ûҵID
 * 
 * @return صǰ¼ûҵID
 */
function getDomainid() {
	return $WEB.getDomainid();
}

/**
 * صǰĵĸĵ
 * 
 * @return صǰĵĸĵ
 */
function getParentDocument() {
	var doc = $CURRDOC.getCurrDoc();
	var parentid = getParameter("parentid");
	if(parentid != null){
		var pid = parentid.split(",");
		parentid = pid[0].replaceAll("'", "");
	}
	var user = $WEB.getWebUser();
	var parent = null;

	if (user != null) {
		// Բȡ
		if (parentid != null) {
			parent = user.getFromTmpspace(parentid);
		}

		// Զȡ
		if (parent == null && doc != null) {
			if (doc.getParentid() != null) {
				parent = user.getFromTmpspace(doc.getParentid());
			}
		}
	}

	if (parent == null && doc != null) {
		parent = doc.getParent();
		if(parent == null && parentid != null) {
			parent = new Packages.cn.myapps.core.dynaform.document.ejb.Document();
			parent.setId(parentid);
		}
	}
	return parent;
}

/**
 * ȡĵԪزڸӹϵʱЧ
 * 
 * @return ȡĵԪزڸӹϵʱЧ
 */
function getRelateDocument() {
	return getParentDocument();
}

/**
 * ȡĵItemֵ,ַʽ
 * 
 * @return ȡĵItemֵ,ַʽ
 * 
 * @param docid
 *            ĵidʶ
 * @param fieldName
 *            ĵֶ
 */
function getDocItemValue(docid, fieldName) {

	var process = getDocProcess($WEB.getApplication());
	var doc = process.doView(docid);
	if (doc != null) {
		return doc.getItemValueAsString(fieldName);
	}
	return "";
}

/**
 * ȡĵItemֵ,ַʽ
 * 
 * @return ȡĵItemֵ,ַʽ
 * 
 * @param docid
 *            ĵidʶ
 * @param fieldName
 *            ĵֶ
 */
function getDocItemValueAsString(docid, fieldName) {
	var process = getDocProcess($WEB.getApplication());
	var doc = process.doView(docid)
	if (doc != null) {
		return doc.getItemValueAsString(fieldName);
	}
	return "";
}

/**
 * ȡĵItemֵ,doubleʽ
 * 
 * @return ȡĵItemֵ,doubleʽ
 * 
 * @param docid
 *            ĵidʶ
 * @param fieldName
 *            ĵֶ
 */
function getDocItemValueAsDouble(docid, fieldName) {
	var process = getDocProcess($WEB.getApplication());
	var doc = process.doView(docid)
	if (doc != null) {
		return doc.getItemValueAsDouble(fieldName);
	}
	return 0.0;
}

/**
 * ȡĵItemֵ,ʽ
 * 
 * @return ȡĵItemֵ,ʽ
 * 
 * @param docid
 *            ĵidʶ
 * @param fieldName
 *            ĵֶ
 */
function getDocItemValueAsDate(docid, fieldName) {

	var process = getDocProcess($WEB.getApplication());
	var doc = process.doView(docid)
	if (doc != null) {
		return doc.getItemValueAsDate(fieldName);
	}
	return null;
}

/**
 * ȡĵItemֵ,ֵʽ
 * 
 * @return ȡĵItemֵ,ֵʽ
 * 
 * @param docid
 *            ĵidʶ
 * @param fieldName
 *            ĵֶ
 */
function getDocItemValueAsInt(docid, fieldName) {
	var process = getDocProcess($WEB.getApplication());
	var doc = process.doView(docid)
	if (doc != null) {
		return doc.getItemValueAsInt(fieldName);
	}
	return 0;
}

/**
 * ݸdocidȡDocument
 * 
 * @return ݸdocidȡDocument
 * 
 * @param docid
 *            ĵidʶ
 */
function findDocument(docid) {
	var process = getDocProcess($WEB.getApplication());
	var doc = process.doView(docid)
	return doc;
}

/**
 * dqlѯDocumentCollection
 * 
 * @return dqlѯDocumentCollection
 * 
 * @param dql
 *            dqlѯ
 */
function queryByDQL(dql) {
	var process = getDocProcess($WEB.getApplication());
	var dpg = process.queryByDQL(dql, $WEB.getDomainid());
	return dpg.datas;
}

/**
 * dql()ѯDocumentCollection
 * 
 * @return dql()ѯDocumentCollection
 * 
 * @param dql
 *            dqlѯ
 */
function queryByDQLWithCache(dql) {
	var process = getDocProcess($WEB.getApplication());
	var dpg = process.queryByDQLWithCache(dql, $WEB.getDomainid());
	if (dpg)
		return dpg.datas;
	return null;
}

/**
 * DQLȡĵ
 * 
 * @param dql
 *            dqlѯ
 * @return DQLȡĵ
 */
function findByDQL(dql) {
	var process = getDocProcess($WEB.getApplication());
	return process.findByDQL(dql, $WEB.getDomainid());
}

/**
 * SQLȡĵ
 * 
 * @return SQLȡĵ
 * 
 * @param sql
 *            sqlѯ
 */
function findBySQL(sql) {
	var process = getDocProcess($WEB.getApplication());
	return process.findBySQL(sql, $WEB.getDomainid());
}

/**
 * dqlѯDocumentCollection
 * 
 * @return dqlѯDocumentCollection
 * 
 * @param dql
 *            dqlѯ
 * @param domainName
 *            ҵ
 */
function queryByDQLDomain(dql, domainName) {
	var process = getDocProcess($WEB.getApplication());
	var dpg = process.queryByDQLDomainName(dql, domainName);
	return dpg.datas;
}

/**
 * dqlͳƷDocument
 * 
 * @return dqlͳƷDocument
 * 
 * @param dql
 *            dqlѯ
 */
function countByDQL(dql) {
	var process = getDocProcess($WEB.getApplication());
	var count = process.countByDQL(dql, $WEB.getDomainid());
	return count;
}

/**
 * SQLܼ¼
 * 
 * @param sql
 *            SQLѯ
 * @return ͳƽ
 */
function countBySQL(sql) {
	var process = getDocProcess($WEB.getApplication());
	var count = process.countBySQL(sql, $WEB.getDomainid());
	return count;
}

/**
 * dqlܷDocumentֶָ
 * 
 * @return dqlܷDocumentֶָ
 * 
 * @param dql
 *            dqlѯ
 * @param fieldName
 *            ĵֶ
 */
function sumByDQL(dql, fieldName) {
	var process = getDocProcess($WEB.getApplication());
	var sum = process.sumByDQL(dql, fieldName, $WEB.getDomainid());
	return sum;
}

/**
 * sqlܷDocumentֶָ
 * 
 * @return sqlܷDocumentֶָ
 * 
 * @param sql
 *            sqlѯ
 * @param fieldName
 *            ĵֶ
 */
function sumBySQL(sql) {
	var process = getDocProcess($WEB.getApplication());
	var sum = process.sumBySQL(sql, $WEB.getDomainid());
	return sum;
}

/**
 * ǷΪָʽַǷtrue,򷵻false
 * 
 * @return ǷΪָʽַǷtrue,򷵻false
 * 
 * @param str
 *            ַͲ
 */
function isNumberText(str) {
	var retvar = $TOOLS.STRING_UTIL.isNumber(str);
	return retvar;
}

/**
 * ǷΪڸʽַǷtrue,򷵻false
 * 
 * @return ǷΪڸʽַǷtrue,򷵻false
 * 
 * @param str
 *            ַͲ
 */
function isDateText(str) {
	var retvar = $TOOLS.STRING_UTIL.isDate(str);
	return retvar;
}

/**
 * ָķָиıָõĽͨ鷵
 * 
 * @return ָķָиıָõĽͨ鷵
 * 
 * @param str
 *            Ҫֵַ
 * @param separator
 *            ָ
 */
function splitText(str, separator) {
	var retvar = $TOOLS.STRING_UTIL.split(str, separator);
	return retvar;
}

/**
 * ָķָиıָõĽͨ鷵
 * 
 * @return ָķָиıָõĽͨ鷵
 * 
 * @param str
 *            Ҫֵַ
 * @param separator
 *            ִָ
 */
function splitString(str, separator) {
	var retvar = $TOOLS.STRING_UTIL.splitString(str, separator);
	return retvar;
}

/**
 * ַָ鰴ָķָϳַַ
 * 
 * @return ַָ鰴ָķָϳַַ
 * 
 * @param strs
 *            ַ
 */
function joinText(strs) {
	var retvar = $TOOLS.STRING_UTIL.unite(strs);
	return retvar;
}

/**
 * ȡ
 * 
 * @return ȡ
 */
function getToday() {
	var retvar = $TOOLS.DATE_UTIL.getToday();
	return retvar;
}

/**
 * ȡ
 * 
 * @return ȡ
 * 
 * @param date
 *            Ͳ
 */
function getDay(date) {
	var retvar = $TOOLS.DATE_UTIL.dayOfDate(date);
	return retvar;
}

/**
 * ȡ·
 * 
 * @return ȡ·
 * 
 * @param date
 *            Ͳ
 */
function getMonth(date) {
	var retvar = $TOOLS.DATE_UTIL.monthOfDate(date);
	return retvar;
}

/**
 * ȡ
 * 
 * @return ȡ
 * 
 * @param date
 *            Ͳ
 */
function getYear(date) {
	var retvar = $TOOLS.DATE_UTIL.yearOfDate(date);
	return retvar;
}

/**
 * ַʽתΪ
 * 
 * @return ַʽתΪ
 * 
 * @param str
 *            תַ,formatָĸʽ
 * @param format
 *            ڸʽ
 */
function parseDate(str, format) {
	var retvar = $TOOLS.DATE_UTIL.parseDate(str, format);
	return retvar;
}

/**
 * ȡ
 * 
 * @return ȡ
 * 
 * @param startDate
 *            yyyy-MM-ddʽַ
 * @param endDate
 *            yyyy-MM-ddʽַ
 */
function diffYears(startDate, endDate) {
	var retvar = $TOOLS.DATE_UTIL.getDistinceYear(startDate, endDate);
	return retvar;
}

/**
 * ȡ·
 * 
 * @return ȡ·
 * 
 * @param startDate
 *            yyyy-MM-ddʽַ
 * @param endDate
 *            yyyy-MM-ddʽַ
 */
function diffMonths(startDate, endDate) {
	var retvar = $TOOLS.DATE_UTIL.getDistinceMonth(startDate, endDate);
	return retvar;
}

/**
 * ȡ
 * 
 * @return ȡ
 * 
 * @param startDate
 *            yyyy-MM-ddʽַ
 * @param endDate
 *            yyyy-MM-ddʽַ
 */
function diffDays(startDate, endDate) {
	var retvar = $TOOLS.DATE_UTIL.getDistinceDay(startDate, endDate);
	return retvar;
}

/**
 * У
 * 
 * @return У
 * 
 * @param date
 *            Ͳ
 * @param num
 *            
 */
function adjustYear(date, num) {
	var retvar = $TOOLS.DATE_UTIL.getNextDateByYearCount(date, num);
	return retvar;
}

/**
 * У·
 * 
 * @return У·
 * 
 * @param date
 *            Ͳ
 * @param num
 *            
 */
function adjustMonth(date, num) {
	var retvar = $TOOLS.DATE_UTIL.getNextDateByMonthCount(date, num);
	return retvar;
}

/**
 * У
 * 
 * @return У
 * 
 * @param date
 *            Ͳ
 * @param num
 *            
 */
function adjustDay(date, num) {
	var retvar = $TOOLS.DATE_UTIL.getNextDateByDayCount(date, num);
	return retvar;
}

/**
 * ÿεʱָԶ1(ݼ,0ΪԪ),к
 * 
 * @return ÿεʱָԶ1(ݼ,0ΪԪ),к
 * 
 * @param countLabel
 *            ַͲ
 */
function countNext(countLabel) {
	var process = new Packages.cn.myapps.core.counter.ejb.CounterProcessBean($WEB
			.getApplication());
	var retvar = process.getNextValue(countLabel, $WEB.getApplication(), $WEB
					.getDomainid());
	return retvar;
}

/**
 * ءǰ׺ + кš
 * 
 * @return ءǰ׺ + кš
 * 
 * @param headText
 *            Ϊǰ׺ַ
 * @param isYear
 *            boolean,ǰ׺Ƿ
 * @param isMonth
 *            boolean,ǰ׺Ƿ·
 * @param isDay
 *            boolean,ǰ׺Ƿ
 * @param digit
 *            ֵָͣкŵλ
 */
function countNext2(headText, isYear, isMonth, isDay, digit) {
	var process = new Packages.cn.myapps.core.counter.ejb.CounterProcessBean($WEB
			.getApplication());

	var dateUtil = $BEANFACTORY.createObject("cn.myapps.util.DateUtil");

	var countLabel = headText;
	if (isYear) {
		countLabel += dateUtil.format(dateUtil.getToday(), "yy");
	}
	if (isMonth) {
		countLabel += dateUtil.format(dateUtil.getToday(), "MM");
	}
	if (isDay) {
		countLabel += dateUtil.format(dateUtil.getToday(), "dd");
	}
	var count = process.getNextValue(countLabel, $WEB.getApplication(), $WEB
					.getDomainid());
	var val = "";
	if (count < 10) {
		for (var temp = 1; temp <= digit - 1; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 100) {
		for (var temp = 1; temp <= digit - 2; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 1000) {
		for (var temp = 1; temp <= digit - 3; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 10000) {
		for (var temp = 1; temp <= digit - 4; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 100000) {
		for (var temp = 1; temp <= digit - 5; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 1000000) {
		for (var temp = 1; temp <= digit - 6; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 10000000) {
		for (var temp = 1; temp <= digit - 7; temp++) {
			val += "0";
		}
		val += count;
	} else
		val += count;
	var retvar = countLabel + val;
	return retvar;
}

/**
 * ݼƻȡĵǰֵ
 * 
 * @return ݼƻȡĵǰֵ
 * 
 * @param countLabel
 *            ַͲ
 */
function getLastCount(countLabel) {
	var process = new Packages.cn.myapps.core.counter.ejb.CounterProcessBean($WEB
			.getApplication());
	var retvar = process.getLastValue(countLabel, $WEB.getApplication(), $WEB
					.getDomainid());
	return retvar;
}

/**
 * ءǰ׺ ++ ĵǰֵ
 * 
 * @return ءǰ׺ ++ ĵǰֵ
 * 
 * @param headText
 *            Ϊǰ׺ַ
 * @param isYear
 *            boolean,ǰ׺Ƿ
 * @param isMonth
 *            boolean,ǰ׺Ƿ·
 * @param isDay
 *            boolean,ǰ׺Ƿ
 * @param digit
 *            ֵָͣкŵλ
 */
function getLastCount2(headText, isYear, isMonth, isDay, digit) {
	var process = new Packages.cn.myapps.core.counter.ejb.CounterProcessBean($WEB
			.getApplication());

	var dateUtil = $BEANFACTORY.createObject("cn.myapps.util.DateUtil");

	var countLabel = headText;
	if (isYear) {
		countLabel += dateUtil.format(dateUtil.getToday(), "yy");
	}
	if (isMonth) {
		countLabel += dateUtil.format(dateUtil.getToday(), "MM");
	}
	if (isDay) {
		countLabel += dateUtil.format(dateUtil.getToday(), "dd");
	}
	var count = process.getLastValue(countLabel, $WEB.getApplication(), $WEB
					.getDomainid());
	var val = "";
	if (count < 10) {
		for (var temp = 1; temp <= digit - count.toString().length; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 100) {
		for (var temp = 1; temp <= digit - count.toString().length; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 1000) {
		for (var temp = 1; temp <= digit - count.toString().length; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 10000) {
		for (var temp = 1; temp <= digit - count.toString().length; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 100000) {
		for (var temp = 1; temp <= digit - count.toString().length; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 1000000) {
		for (var temp = 1; temp <= digit - count.toString().length; temp++) {
			val += "0";
		}
		val += count;
	} else if (count < 10000000) {
		for (var temp = 1; temp <= digit - count.toString().length; temp++) {
			val += "0";
		}
		val += count;
	} else
		val += count;
	var retvar = countLabel + val;
	return retvar;
}

/**
 * Ϊɵļۼֵ,ʹ0
 * 
 * @param countLabel
 *            ַͲ
 */
function resetCounter(countLabel) {
	var process = new Packages.cn.myapps.core.counter.ejb.CounterProcessBean($WEB
			.getApplication());
	process.doRemoveByName(countLabel, $WEB.getApplication(), $WEB
					.getDomainid());
}

/**
 * Ŀid
 * 
 * @return Ŀid
 */
function getApplication() {
	return $WEB.getApplication();
}

/**
 * صǰ¼û
 * 
 * @return صǰ¼û
 */
function getWebUser() {
	return $WEB.getWebUser();
}

/**
 * жǷΪ
 * 
 * @return жǷΪ
 * 
 * @param num
 *            Ͳ
 */
function isPositive(num) {
	if (num > 0) {
		return true;
	} else {
		return false;
	}
}

/**
 * жǷΪ
 * 
 * @return жǷΪ
 * 
 * @param num
 *            Ͳ
 */
function isNegative(num) {
	if (num < 0) {
		return true;
	} else {
		return false;
	}
}

/**
 * ṩȷСλ봦
 * 
 * @return ṩȷСλ봦
 * 
 * @param num
 *            Ҫ
 * @param pos
 *            Сλ
 */
function round(num, pos) {
	var accurateCalculate = $BEANFACTORY
			.createObject("cn.myapps.util.Arith");
	return accurateCalculate.round(num, pos);
}

/**
 * طϲѯĵkeyFieldNameֶεֵϣΪؼѡ
 * 
 * @return طϲѯĵkeyFieldNameֶεֵϣΪؼѡ
 * 
 * @param dql
 *            ѯ
 * @param keyFieldName
 *            ĵֶ(Ϊʱ[0]Ϊʵֵ[1]Ϊʾֵ)
 * @param blankFirst
 *            ĬǷΪѡ
 */
function getOptionsByDQL(dql, keyFieldName, blankFirst) {
	var opts = $TOOLS.createOptions();
	if (blankFirst) {
		opts.add("", "");
	}
	var docs = queryByDQL(dql);
	for (var iter = docs.iterator(); iter.hasNext();) {
		var doc = iter.next();
		var value = "";
		var text = "";
		if (keyFieldName.constructor == Array) {
			value = doc.getItemValueAsString(keyFieldName[0]);
			text = doc.getItemValueAsString(keyFieldName[1]);
		} else {
			value = doc.getItemValueAsString(keyFieldName);
			text = doc.getItemValueAsString(keyFieldName);
		}

		opts.add(text, value);
	}
	return opts;
}

/**
 * شڵֲС
 * 
 * @return شڵֲС
 * 
 * @param num
 *            ֲ
 */
function toCeil(num) {
	return Math.ceil(num);
}

/**
 * Сڵֲ
 * 
 * @return Сڵֲ
 * 
 * @param num
 *            ֲ
 */
function toFloor(num) {
	return Math.floor(num);
}

/**
 * ǷΪַʽַǷtrue,򷵻false
 * 
 * @return ǷΪַʽַǷtrue,򷵻false
 * 
 * @param str
 *            ַͲ
 */
function isMailAddressText(str) {
	var t = /^\w+@\w+(\.\w+)+/;
	var g = /^\w+\.\w+@\w+(\.\w+)+/;
	if (t.test(str) == false && g.test(str) == false) {
		return false;
	}
	return true;
}

/**
 * ڲתָʽַ
 * 
 * @return ڲתָʽַ
 * @param date
 *            Ͳ
 * @param formatText
 *            ַָʽ
 */
function format(date, formatText) {
	return $TOOLS.DATE_UTIL.format(date, formatText);
}

/**
 * ָĸʽȡǰʱ䣬ַʽ
 * 
 * @return ָĸʽȡǰʱ䣬ַʽ
 * @param date
 *            Ͳ
 * @param formatText
 *            ַͲָҪʾĸʽ"yyyy-MM-dd HH:mm:ss"
 */
function getCurDate(formatText) {
	return $TOOLS.DATE_UTIL.format($TOOLS.DATE_UTIL.getToday(), formatText);
}

/**
 * ȡСʱ
 * 
 * @return ȡСʱ
 * 
 * @param startDate
 *            yyyy-MM-dd HH:mm:ssʽַ
 * @param endDate
 *            yyyy-MM-dd HH:mm:ssʽַ
 */
function diffHours(startDate, endDate) {
	var diff = $TOOLS.DATE_UTIL.getDistinceTime(startDate, endDate);
	return diff;
}

/**
 * ȡ
 * 
 * @return ȡ
 * 
 * @param startDate
 *            yyyy-MM-dd HH:mm:ssʽַ
 * @param endDate
 *            yyyy-MM-dd HH:mm:ssʽַ
 */
function getWorkingDayCount(startDate, endDate) {
	var user = $WEB.getWebUser();
	var count = $TOOLS.DATE_UTIL.getWorkingDayCount(startDate, endDate, user
					.getCalendarType());
	return count;
}

/**
 * ȡСʱ
 * (עstartDateendDateСڵǰǰ10ڵǰݺ10꣬0)
 * 
 * @return ȡСʱ
 * @param startDate
 *            yyyy-MM-dd HH:mm:ssʽַ
 * @param endDate
 *            yyyy-MM-dd HH:mm:ssʽַ
 */
function getWorkingTimesCount(startDate, endDate) {
	var user = $WEB.getWebUser();
	var count = $TOOLS.DATE_UTIL.getWorkingTimesCount(startDate, endDate, user
					.getCalendarType());
	return count;
}

/**
 * ϵͳ
 * 
 * @return ϵͳ
 * @param pathText
 *            ֿռ,"cn.myapps.util.DateUtil";
 * 
 */
function createObject(pathText) {
	var obj = $BEANFACTORY.createObject(pathText);
	return obj;
}

/**
 * ϵͳ
 * 
 * @return ϵͳ
 * @param pathText
 *            ֿռ,"cn.myapps.core.department.ejb.DepartmentProcess";
 * 
 */
function createProcess(pathText) {
	var process = $PROCESSFACTORY.createProcess(pathText);
	return process;
}

/**
 * ĵ
 * 
 * @param applicationid
 *            ʶID
 * @return ĵ
 */
function getDocProcess(applicationid) {
	return Packages.cn.myapps.core.dynaform.document.ejb.DocumentProcessBean
			.createMonitoProcess(applicationid);
}

/**
 * ļϴ
 * 
 * @param applicationid
 *            ʶID
 * @return ļϴ
 */
function getUploadProcess(applicationid) {
	return Packages.cn.myapps.core.upload.ejb.UploadProcessBean
			.createMonitoProcess(applicationid);
}

/**
 * ȡб󣬿ԶԲл,ɾ͸ʽ
 * 
 * @return б
 */
function getParamsTable() {
	return $WEB.getParamsTable();
}

/**
 * 
 * 
 * @return ParamsTableʵ
 */
function createParamsTable() {
	return new Packages.cn.myapps.base.action.ParamsTable();
}

/**
 * ȡֵ,ַʽ
 * 
 * @param paramName
 *            ;
 * @return زֵ
 * 
 */
function getParameter(paramName) {
	return $WEB.getParameterAsString(paramName);
}

/**
 * ȡֵ,";"иʽı,ַʽ
 * 
 * @param paramName
 *            ;
 * @return زֵ
 */
function getParameterAsText(paramName) {
	return $WEB.getParameterAsText(paramName);
}

/**
 * ȡֵ,Ը͵ʽ
 * 
 * @param paramName
 *            ;
 * @return زֵ
 * 
 */
function getParameterAsDouble(paramName) {
	return $WEB.getParameterAsDouble(paramName);
}

/**
 * ȡֵ,ַʽ
 * 
 * @param paramName
 *            ;
 * @return زֵַ󷵻
 */
function getParameterAsArray(paramName) {
	var params = $WEB.getParameterAsArray(paramName);
	if (params!=null && params.length==1 && params[0]!=null && params[0].indexOf(";")>0)
		params = splitText(params[0],";");
	return params;
}

/**
 * صĲURIָʾķΧڡ ·һURI ·һ/ַûн"/"ַ
 * ĬϣServlet£˷""ַ
 * 
 * @return һStringָURIָ֣ʾ
 */
function getContextPath() {
	return $WEB.getParamsTable().getContextPath();
}

/**
 * жֵǷΪ,Ϊַʱȴ0,ΪʱΪnull
 * 
 * @return жֵǷΪ,ΪʱΪ0,Ϊַʱȴ0,ΪʱΪnull
 * @param val
 *            Ҫжϵֵ;
 */
function isNotNull(val) {
	if (val != null && typeof(val) != "undefined") {
		if (typeof(val) == "number") {
			return true;
		}
		return (new java.lang.String(val).trim().length() > 0);
	}
	return false;
}
/**
 * sqlѯDocumentCollection
 * 
 * @param sql
 *            ѯ
 * @return sqlѯDocumentCollection
 */
function queryBySQL(sql) {
	var process = getDocProcess($WEB.getApplication());
	var dpg = process.queryBySQL(sql, $WEB.getDomainid());
	if (dpg != null) {
		return dpg.datas;
	} else {
		return null;
	}
}
 /**
  * sql(棩ѯDocumentCollection
  * 
  * @param sql
  *            ѯ
  * @return sqlѯDocumentCollection
  */
 function queryBySQLWithCache(sql) {
 	var process = getDocProcess($WEB.getApplication());
 	var dpg = process.queryBySQLWithCache(sql, $WEB.getDomainid());
 	if (dpg != null) {
 		return dpg.datas;
 	} else {
 		return null;
 	}
 }
/**
 * Ի
 * 
 * @param content
 *            Ϣ
 * @return Ի
 */
function createAlert(content) {
	return new JsMessage(JsMessage.TYPE_ALERT, content);
}
/**
 * ʾԻ
 * 
 * @param content
 *            ʾݲ
 * @return true|falsetrue: ʾȷϣfalse: ʾȡ
 */
function createConfirm(content) {
	return new JsMessage(JsMessage.TYPE_CONFIRM, content);
}

/**
 * ѡ
 * 
 * @return ѡ
 */
function createOptions() {
	return $TOOLS.createOptions();
}

/**
 * վڶ
 * 
 * @param senderid
 *            ID
 * @param receiverid
 *            ID
 * @param title
 *            
 * @param content
 *            
 * 
 */
function sendMessage(senderid, receiverid, title, content) {
	var process = createProcess("cn.myapps.core.personalmessage.ejb.PersonalMessageProcess");
	process.doCreate(senderid, receiverid, title, content);
}

/**
 * ݲŷվڶ
 * 
 * @param departmentid
 *            ID
 * @param title
 *            
 * @param content
 *            
 * 
 */
function sendMessageByDept(departmentid, title, content) {
	var userid = getWebUser().getId();
	var process = createProcess("cn.myapps.core.personalmessage.ejb.PersonalMessageProcess");
	process.doCreateByDepartment(departmentid, userid, title, content);
}

/**
 * ݽɫͶ
 * 
 * @param roleid
 *            ɫID
 * @param domainid
 *            ҵID
 * @param title
 *            
 * @param content
 *            
 * 
 */
function sendMessageByRole(roleid, domainid, title, content) {
	var userid = getWebUser().getId();
	var process = createProcess("cn.myapps.core.personalmessage.ejb.PersonalMessageProcess");
	process.doCreateByRole(roleid, domainid, userid, title, content);
}
/**
 * ֻ
 * 
 * @param docid
 *            ģ¼ID
 * @param title
 *            
 * @param content
 *            
 * @param receiver
 *            ߵ绰б,ж,ʹ","ָ
 * @param isReply
 *            true|false,ǷҪյظ
 * @param isMass
 *            true|false,ʶǷΪȺ,Ƿжλ
 */
function sendSMS(docid, title, content, receiver, isReply, isMass) {
	var sender = $MESSAGE.getSMSManager().getSender($WEB.getWebUser());
	return sender.send(docid, title, content, receiver, isReply, isMass);
}

/**
 * ֻ
 * 
 * @param title
 *            
 * @param content
 *            
 * @param receiver
 *            ߵ绰б,ж,ʹ","ָ
 * @param isReply
 *            true|false,ǷҪյظ
 * @param isMass
 *            true|false,ʶǷΪȺ,Ƿжλ
 * @param applicationId
 *            Ӧid
 * @param domainId
 *            ҵid          
 */
function sendSMS4Task(title, content, receiver, isReply, isMass,applicationId,domainId){
	var user = new Packages.cn.myapps.core.user.action.WebUser(null);
	user.setDomainid(domainId);
	user.setDefaultApplication(applicationId);
	var sender = $MESSAGE.getSMSManager().getSender(user);
	return sender.send("", title, content, receiver, isReply, isMass);
}

/**
 * ݷģ¼IDȡֻŻظ¼.Collection
 * 
 * @return ݷģ¼IDȡֻŻظ¼.Collection
 */
/* Bug #3506 úڻûЧʱε
function listReplyByDocid(docid) {
	var data = $MESSAGE.getSMSManager().queryReplyById(docid);
	if (data!=null)
		return data.datas;
	return null;
}
*/
/**
 * жΨһ
 * 
 * @param fieldName
 *            ֶ
 * @param fieldValue
 *            ֵֶ
 * @param msg
 *            ԤֵֶظʾϢ
 * @return ΨһʾϢ򷵻ؿַ
 */
function checkFieldUnique(fieldName, fieldValue, msg) {
	var doc = $CURRDOC.getCurrDoc();
	var dql = "$formname='" + doc.getFormShortName() + "' and " + fieldName + "='"
			+ fieldValue + "' and $id <> '" + doc.getId() + "'";
	var dpg = queryByDQL(dql);
	if (dpg.size() > 0) {
		if (msg) {
			return msg;
		}
		return fieldName + " ظ!";
	}
	return null;
}

/**
 * ȡǰsession
 * 
 * @param sessionName
 *            session
 * @return ȡǰsession
 */
function getSession(sessionName) {
	var request = $WEB.getParamsTable().getHttpRequest();
	if (request != null) {
		return request.getSession().getAttribute(sessionName);
	}
	return null;
}

/**
 * ݲŵȼֵȡӦȼв
 * 
 * @param level
 *            ŵȼֵ
 * @return ػȡĶӦȼвŵļ
 */
function getDepartmentByLevel(level) {
	var process = createProcess("cn.myapps.core.department.ejb.DepartmentProcess");
	return process.getDepartmentByLevel(level, getApplication(), getDomainid());
}

/**
 * ݲƺͲŵȼȡŶID
 * 
 * @param name
 *            
 * @param level
 *            ŵȼֵ
 * @return ضӦID
 */
function getDeptIdByNameAndLevel(name, level) {
	var deptlist = getDepartmentByLevel(level);
	if (deptlist != null && deptlist.size() > 0) {
		for (var iter = deptlist.iterator(); iter.hasNext();) {
			var dept = iter.next();
			if (name.equals(dept.getName())) {
				return dept.getId();
			}
		}
	}
	return null;
}
/**
 * ݽɫȡɫID
 * 
 * @param name
 *            ɫ
 * @return ضӦɫID
 */
function getRoleIdByName(name) {
	var role = getRoleByName(name);
	if (role != null) {
		return role.getId();
	}
	return null;
}

/**
 * û¼ȡûID
 * 
 * @param loginno
 *            û¼
 * @return ضӦûID
 */
function getUserIdByLoginno(loginno) {
	var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
	return userProcess.findUserIdByAccount(loginno, getDomainid());
}

/**
 * ȡָŵ¼
 * 
 * @param parent
 *            ID
 * @return ָŵ¼Ŷļ
 */
function getDepartmentsByParent(parent) { // parentID
	var process = createProcess("cn.myapps.core.department.ejb.DepartmentProcess");
	return process.getDatasByParent(parent);
}

/**
 * ȡָû
 * 
 * @param dptid
 *            ID
 * @return ָµûļ
 */
function getUsersByDptId(dptid) {
	var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
	return userProcess.queryByDepartment(dptid);
}

/**
 * ȡָɫµû
 * 
 * @param roleid
 *            ɫID
 * @return ָɫµûļ
 */
function getUsersByRoleId(roleid) {
	var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
	return userProcess.queryByRole(roleid);
}

/**
 * ȡָŲɫû
 * 
 * @param dptid
 *            ID
 * @param roleid
 *            ɫID
 * @return ָŲɫûļ
 */
function getUsersByDptIdAndRoleId(dptid, roleid) {
	var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
	return userProcess.queryByDptIdAndRoleId(dptid, roleid);
}

/**
 * ȡǰû
 * 
 * @return صǰûļ
 */
function getAllUsers() {
	var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
	return userProcess.queryByDomain(getDomainid());
}

/**
 * ʼ
 * 
 * @param from
 *            ˵ַ
 * @param to
 *            ˵ַ
 * @param subject
 *            
 * @param body
 *            
 * @param host
 *            ʼַ
 * @param user
 *            ʼû
 * @param password
 *            
 * @param bbc
 *            ܳ͵ַ
 * @param validate
 *            ǷУ
 */
function sendMail(from, to, subject, body, host, user, password, bbc, validate) {
	$EMAIL.setEmail(from, to, subject, body, host, user, password, bbc,
			validate);
	$EMAIL.send();
}

/**
 * ʼû
 * 
 * @param from
 *            ˵ַ
 * @param subject
 *            
 * @param content
 * 			  
 * @param host
 *            ʼַ
 * @param account
 *            ʼû
 * @param password
 *            
 * @param bbc
 *            ܳ͵ַ
 * @param validate
 *            ǷУ
 */
function sendMailtoAllUser(from, subject, content, host, account, password, bbc, validate) {
	$EMAIL.sendMailToAllUser(from, subject, content, host, account, password, bbc,
			validate);
}

/**
 * ϵͳõûʼ
 * 
 * @param to
 *            ˵ַ
 * @param subject
 *            
 * @param content
 *            
 * @return
 */
function sendEmailBySystemUser(to, subject, content) {
	$EMAIL.sendEmailBySystemUser(to, subject, content);
}

/**
 * ȡǰнɫ
 * 
 * @return ɫļ
 */
function getAllRoles() {
	var roleProcess = createProcess("cn.myapps.core.role.ejb.RoleProcess");
	return roleProcess.getRolesByApplication(getApplication());
}

/**
 * ȡǰĵ״̬ǩ
 * 
 * @return صǰĵ״̬ǩ
 */
function getStateLabel() {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		return doc.getStateLabel();
	}
	return null;
}

/**
 * ȡǰ¼Ƿ
 * 
 * @return true|false
 */
function isComplete() {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		if (doc.getStateInt() == 0x00100000) {
			return true;
		}
	}
	return false;
}

/**
 * ȡָĵǷ
 * 
 * @param docid
 *            ĵID
 * @return true|false
 */
function isCompleteByDocId(docid) {
	var doc = findDocument(docid);
	if (doc != null) {
		if (doc.getStateInt() == 0x00100000) {
			return true;
		}
	}
	return false;
}

/**
 * ȡǰ¼Ƿڵһڵ
 * 
 * @return true|false
 */
function isFirtNode() {
	var doc = $CURRDOC.getCurrDoc();
	if (doc != null) {
		return doc.isFirtNode();
	}
	return false;
}

/**
 * ȡָĵǷڵһڵ
 * 
 * @param docid
 *            ĵID
 * @return true|false
 */
function isFirtNodeByDocId(docid) {
	var doc = findDocument(docid);
	if (doc != null) {
		return doc.isFirtNode();
	}
	return false;
}

/**
 * ȡĵ
 * 
 * @return ȡĵ
 */
function getParentFlowDoc() {
	var currDoc = $CURRDOC.getCurrDoc();
	if (currDoc != null) {
		doc = currDoc.getParentFlowDocument();
	}

	return doc;
}

/**
 * ȡĵ
 * 
 * @return ȡĵ
 */
function getSubFlowDocList() {
	var currDoc = $CURRDOC.getCurrDoc();
	if (currDoc != null) {
		return currDoc.getSubFlowDocuments();
	}
}

/**
 * ԴƣִSQLѯ
 * 
 * @param dsName
 *            Դ
 * @param sql
 *            SQLѯ
 * @return SQLѯִеĽCollectionʽأ洢ݼ¼Map󣩡
 */
function queryByDSName(dsName,sql){
	var process = createProcess("cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcess");
	return process.queryDataSourceSQL(dsName,sql,getApplication());
}

/**
 * ԴƣִSQLSQLΪinsert table ......
 * 
 * @param dsName
 *            Դ
 * @param sql
 *            SQLѯ
 */
function insertByDSName(dsName,sql){
	var process = createProcess("cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcess");
	process.queryInsert(dsName,sql,getApplication());
}

/**
 * ԴƣִSQL²SQLΪupdate table set......
 * 
 * @param dsName
 *            Դ
 * @param sql
 *            SQLѯ
 */
function updateByDSName(dsName,sql){
	var process = createProcess("cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcess");
	process.createOrUpdate(dsName,sql,getApplication());
}

/**
 * ԴƣִSQLɾSQLΪdelete from table ......
 * 
 * @param dsName
 *            Դ
 * @param sql
 *            SQLѯ
 */
function deleteByDSName(dsName,sql){
	var process = createProcess("cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcess");
	process.remove(dsName,sql,getApplication());
}

/**
 * ûIDȡû
 * 
 * @param userid
 *            ûID
 * @return û
 */
function getUserById(userid) {
	var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
	return userProcess.doView(userid);
}

/**
 * û¼ȡû
 * 
 * @param loginno
 *            û¼
 * @return ضӦû
 */
function getUserByLoginno(loginno) {
	var userProcess = createProcess("cn.myapps.core.user.ejb.UserProcess");
	return userProcess.login(loginno, getDomainid());
}

/**
 * ݽɫȡɫID
 * 
 * @param name
 *            ɫ
 * @return ضӦɫ
 */
function getRoleByName(name) {
	var roleProcess = createProcess("cn.myapps.core.role.ejb.RoleProcess");
	return roleProcess.doViewByName(name, getApplication());
}

/**
 * ĵ
 * 
 * @return ĵ
 */
function getDocumentProcess() {
	return Packages.cn.myapps.core.dynaform.document.ejb.DocumentProcessBean
			.createMonitoProcess(getApplication());
}

/**
 * ȡԴҵ
 * 
 * @return ȡԴҵ
 */
function getDataSourceProcess() {
	return createProcess("cn.myapps.core.dynaform.dts.datasource.ejb.DataSourceProcess");
}

/**
 * û
 * 
 * @return û
 */
function getUserProcess() {
	return createProcess("cn.myapps.core.user.ejb.UserProcess");
}

/**
 * زŲ
 * 
 * @return Ų
 */
function getDepartmentProcess() {
	return createProcess("cn.myapps.core.department.ejb.DepartmentProcess");
}

/**
 * ؽɫ
 * 
 * @return ɫ
 */
function getRoleProcess() {
	return createProcess("cn.myapps.core.role.ejb.RoleProcess");
}
/**
 * رҵ
 * 
 * @return رҵ
 */
function getFormProcess() {
	return createProcess("cn.myapps.core.dynaform.form.ejb.FormProcess");
}
/**
 * ͼҵ
 * 
 * @return ͼҵ
 */
function getViewProcess() {
	return createProcess("cn.myapps.core.dynaform.view.ejb.ViewProcess");
}

/**
 * ȡҵҵ
 * 
 * @return ȡҵҵ
 */
function getDomainProcess() {
	return createProcess("cn.myapps.core.domain.ejb.DomainProcess");
}

/**
 * ı̨
 * 
 * @param text
 *            Ҫı
 */
function println(text){
	$PRINTER.println(text);
}

/**
 * ıתͲ
 * 
 * @param text
 *            ı
 * @return ֵ
 */
function parseInt(text){
	return $TOOLS.STRING_UTIL.parseInt(text);
}

/**
 * ıתɳͲ
 * 
 * @param text
 *            ı
 * @return سֵ
 */
function parseLong(text){
	return $TOOLS.STRING_UTIL.parseLong(text);
}

/**
 * ıתɸͲ
 * 
 * @param text
 *            ı
 * @return ظֵ
 */
function parseDouble(text){
	return $TOOLS.STRING_UTIL.parseDouble(text);
}

/**
 * ĵIDIDȡĵ¼
 * @param docid 
 * 			ĵID
 * @param flowid
 * 			ID
 * @return ¼
 */
function getLastRelationHis(docid, flowid){
	var process = new Packages.cn.myapps.core.workflow.storage.runtime.ejb.RelationHISProcessBean(getApplication());
	return process.doViewLast(docid, flowid);
}

/**
 * ȡǰĵ
 * @return ¼
 */
function getLastApprover(){
	var doc = getCurrentDocument();
	var rtn = null;
	var rhis = getLastRelationHis(doc.getId(),doc.getFlowid());
	if (rhis != null) {
		var actors = rhis.getActorhiss();
		if (actors!=null && actors.size()>0) {
			for (var it = actors.iterator(); it.hasNext();) {
				rtn = it.next();
			}
		}
	}
	return rtn;
}

/**
 * ȡǰĵID
 * @return ID
 */
function getLastApproverId(){
	return getLastApprover().getActorid();
}

/**
 * ȡǰĵ
 * @return 
 */
function getLastApproverName(){
	return getLastApprover().getName();
}

/**
 * ȡǰĵʱ
 * @return ʱ
 */
function getLastApprovedTime(){
	var doc = getCurrentDocument();
	var rtn = "";
	var rhis = getLastRelationHis(doc.getId(),doc.getFlowid());
	if (rhis != null) {
		var actors = rhis.getActorhiss();
		if (actors!=null && actors.size()>0) {
			for (var it = actors.iterator(); it.hasNext();) {
				actorHis = it.next();
				if (actorHis.getProcesstime() != null) {
					rtn = $TOOLS.DATE_UTIL.getDateTimeStr(actorHis
							.getProcesstime());
				} else {
					rtn = $TOOLS.DATE_UTIL.getDateTimeStr(relHis
							.getActiontime());
				}
			}
		}
	}
	return rtn;
}

/**
 * ݽɫźidȡɫ
 * 
 */

function getRoleByRoleNo(roleno, applicationid){
	var process = new Packages.cn.myapps.core.role.ejb.RoleProcessBean();
	var role = process.findByRoleNo(roleno, applicationid);
	if(role != null){
		return role.getName();
	}else{
		return null;
	}
	
}

/**
 * ĵ°汾
 * @param doc
 *  ĵ
 */
function doUpdateDocumentWithoutVersions(doc) {
	var process = getDocumentProcess();
	if(doc !=null){
		doc.setVersions( doc.setVersions()-1);
		process.doUpdate(doc);
	}
		
}

/**
 * رݿӡһԴռ
 * @return
 */
function closeSessionAndConnection(){
	$TOOLS.PERSISTENCE_UTIL.closeSessionAndConnection();
}

/**
 * ǰ̨û󶨵ĹжϵǰʱcurrentDateǷΪʱ
 * @param currentDate 
 * 		  Ͳ
 * @return
 * 		true or false
 */
function isWorkingTime(currentDate){
	var user = $WEB.getWebUser();
	return isWorkingTimeByCalendar(currentDate, user.getCalendarType());
}

/**
 * ݹжϵǰʱcurrentDateǷΪʱ
 * @param currentDate 
 * 		  Ͳ
 * @param calendar
 * 		  id
 * @return
 * 		true or false
 */
function isWorkingTimeByCalendar(currentDate, calendarId){
	var bool = $TOOLS.DATE_UTIL.isWorkingTimeByCalendar(currentDate, calendarId);
	return bool;
}

/**
 * ȡǰ̨û趨ָ̽ڵIdļ
 * @param subflowNodeId
 * 		̽ڵIdѡ̽ڵidֻȡָ̽ڵidȡ̽ڵid
 * @return
 * 		ûidļ
 */
function getSelectUsers4SubFlowNode(subflowNodeId) {
	var result = new Packages.java.util.ArrayList();
	var _subFlowApproverInfo=getParameter("_subFlowApproverInfo");
	if(_subFlowApproverInfo != null && _subFlowApproverInfo.trim().length()>0){
		var jsonUtil= new Packages.cn.myapps.util.json.JsonUtil();
		var subFlowApproverInfos=jsonUtil.toCollection(_subFlowApproverInfo.trim());
		for(var iter=subFlowApproverInfos.iterator();iter.hasNext();) {
			var subFlowApproverInfo=iter.next();
			var _nodeId=subFlowApproverInfo.get("nodeid");
			if(subflowNodeId !=null && subflowNodeId.length>0){
				if(_nodeId != subflowNodeId) continue;
			}
			var approvers=subFlowApproverInfo.get("approver");
			for(var i=0;i<approvers.length;i++){
				var approver=approvers[i];
				var userids= approver.get("userids");
				for (var j = 0; j <userids.length; j++) {
					result.add(userids[j]);
				}
			}
		}
	}
	
	return result;
}

/**
 * ȡǰ̨û趨ָֹڵIdļ
 * @param manualNodeId
 * 		̽ڵIdѡֹڵidֻȡָֹڵidȡֹڵid
 * @return
 * 	ûidļ
 */
function getSelectUsers4ManualNode(manualNodeId) {
	var result = new Packages.java.util.ArrayList();
	var submitTo=getParameter("submitTo");
	if(submitTo != null && submitTo.trim().length()>0){
		var jsonUtil= new Packages.cn.myapps.util.json.JsonUtil();
		var submitInfo = jsonUtil.toCollection(submitTo);
		for (var iterator = submitInfo.iterator(); iterator.hasNext();) {
			var tmpmap = iterator.next();
			var _nodeId = tmpmap.get("nodeid");
			if(manualNodeId !=null && manualNodeId.length>0){
				if(_nodeId != manualNodeId) continue;
			}
			var selectuserlist = jsonUtil.toCollection(tmpmap.get("userids"));
			result.addAll(selectuserlist);
		}
	}
	
	return result;
}

/**
 *ȡַ
 * @return
 * 	طַ
 */
function getServerHostAddr(){
	var request = $WEB.getParamsTable().getHttpRequest();
	if (request == null){
		return null;
	}
	var addr = request.getScheme()+"://"+request.getServerName();
	if(request.getServerPort()!=80){
		addr+=":"+request.getServerPort();
	}
	if(request.getContextPath().length()>0){
		addr+=request.getContextPath();
	}
	return addr;
		
}
/**
 * ΢ͼϢ
 * @param touser
 * 		û˺бϢߣá|ָָΪ@allעҵӦõȫԱ
 * @param title
 * 		Ϣ
 * @param description
 * 		Ϣ
 * @param url
 * 		Ϣurl
 * @param picUrl
 * 		ͼƬurl
 * @param domainId
 * 		ҵid
 * @param applicationid
 * 		Ŀidnull ʾ͵ҵС֣
 * @return
 * @throws Exception
 */
function sendWeixinRichTextMessage(touser,title,description,url,picUrl,domainId,applicationid){
	return Packages.cn.myapps.support.weixin.WeixinServiceProxy.sendRichTextMessage(touser,title,description,url,picUrl,domainId,applicationid);
}
/**
 * ΢ıϢ
 * @param touser
 * 		û˺бϢߣá|ָָΪ@allעҵӦõȫԱ
 * @param content
 * 		Ϣ
 * @param domainId
 * 		ҵid
 * @param applicationid
 * 		Ŀidnull ʾ͵ҵС֣
 * @return
 * @throws Exception
 */
function sendWeixinTextMessage(touser,content,domainId,applicationid){
	return Packages.cn.myapps.support.weixin.WeixinServiceProxy.sendTextMessage(touser,content,domainId,applicationid);
}
/**
* ΢Ϣ
* @param json
* 		΢Ϣ(JSONʽ ο΢ƽ̨APIĵ)
* @param domainId
* 		ҵid
* @return
* @throws Exception
*/
function sendWeixinMessage(touser,content,domainId,applicationid){
	return Packages.cn.myapps.support.weixin.WeixinServiceProxy.sendTextMessage(touser,content,domainId,applicationid);
}
/**
 * ½ʾ
 * @param id
 * 		idֵͣ
 * @param topic
 * 		
 * @returns {Packages.cn.myapps.core.dynaform.form.ejb.Question}
 */
function createQuestion(id,topic) {
	return new Packages.cn.myapps.core.dynaform.form.ejb.Question(id, topic);
}