function Enclose(value, c) {
return c + String(value) + c;
}
function Quoted(value) {
return Enclose(value, "'");
}
function DoubleQuoted(value) {
return Enclose(value, "\"");
}
function isNumber(value) {
return ! String(value).match(/\D/);
}
function strLeft(value, cnt) {
return String(value).substr(0, cnt);
}
function strMid(value, start, cnt) {
value = String(value);
return value.substr(start, (cnt)? cnt : value.length);
}
function strRighta(value, cnt) {
value = String(value);
return value.substr(value.length - cnt);
}
function trim(value) {
return String(value).replace(/^\s*/, "").replace(/\s*$/, "");
}
function trimLeft(value) {
return String(value).replace(/^\s*/, "");
}
function trimRight(value) {
return String(value).replace(/\s*$/, "");
}
function nullDef(value, def) {
return (null == value || 'undefined' == typeof(value))? def : String(value);
}
function strDef(value, def) {
if (null == value || 'undefined' == typeof(value) || String(value).match(/^\s*$/))
return def;
return value;
}
function T(value) {
return strDef(value, "&nbsp;");
}
function byteStr(value, max) {
if (null == value && 0 == value.length)
return value;
value = String(value);
if (null != max && max >= 0) {
var bytes = 0;
var i = 0;
for (; i < value.length && bytes < max; i++) {
var b = (value.charCodeAt(i) > 0xff)? 2 : 1;
if ((bytes + b) > max)
return value.substr(0, i - 1);
bytes += b;
}
return value.substr(0, i);
}
return value;
}
function byteSize(value) {
value = String(value);
var bytes = 0;
for (var i = 0; i < value.length; i++) {
++bytes;
if (value.charCodeAt(i) > 0xff)
++bytes;
}
return bytes;
}
function format(fmt) {
if (null == fmt)
return "";
if (arguments.length < 2 || null == arguments[1])
return fmt;
if ((2 == arguments.length && 'object' == typeof(arguments[1]))) {	// [ ] pattern
var args = arguments[1];
for (var __i = args.length - 1; __i >= 0; --__i) {
var pattern = "%" + (__i + 1);
var re = new RegExp(pattern, "g");
fmt = fmt.replace(re, args[__i]);
}
}
else {
for (var __i = arguments.length - 1; __i > 0; --__i) {
var pattern = "%" + __i;
var re = new RegExp(pattern, "g");
fmt = fmt.replace(re, arguments[__i]);
}
}
return fmt;
}
function zeroInt(value, digit) {
value = String(parseInt(value, 10));
var N = digit - value.length;
if (N <= 0)
return value;
return stringOfChar("0", N) + String(value);
}
function commaFormat(value, _sign) {
if (String(value).match(/[^\d\.\,\+\-]+/))
return value;
var result = "";
var dec    = "";
var sign   = "";
value = String(value).replace(/,/g, "");
if (value.match(/^([^1-9]+)(\d*)/)) {
value = RegExp.$2;
sign  = String(RegExp.$1).replace(/0/g, "");
}
if (value.match(/(\d*)(\.\d+)/)) {
value = RegExp.$1;
dec   = RegExp.$2;
}
while (value.length > 0 && value.match(/^(\d+)(\d{3})$/)) {
if (result.length > 0)
result = "," + result;
result = String(RegExp.$2) + result;
value = String(RegExp.$1);
}
if (value.length > 0) {
if (result.length > 0)
result = "," + result;
result = value + result;
}
if (0 == result.length)
result = "0";
if (_sign)
return SignEdit(format("%1%2%3", [sign, result, dec]), _sign);
return format("%1%2%3", [sign, result, dec]);
}
function SignEdit(value, sign) {
var N = String(value).replace(/\,/, "");
if (isNaN(Number(N)))
return value;
var tmp = sign.split(';');
if (N > 0 && typeof(tmp[0]) != 'undefined')
return tmp[0] + value;
else if (N < 0 && typeof(tmp[1]) != 'undefined')
return tmp[1] + value;
else if (N == 0 && typeof(tmp[2]) != 'undefined')
return tmp[2] + value;
return value;
}
function stringOfChar(ch, count) {
var c = "";
while (count--)
c += ch;
return c;
}
function toDateStr(val) {
var value = val;
if (null == value)
value = new Date();
else {
value = new Date(value);
if (isNaN(value.getFullYear()))
return val;
}
return value.getFullYear() + "/" + zeroInt(value.getMonth() + 1, 2) + "/" + zeroInt(value.getDate(), 2);
}
function toTimeStr(val) {
var value = val;
if (null == value)
value = new Date();
else {
value = new Date(value);
if (isNaN(value.getFullYear()))
return val;
}
return zeroInt(value.getHours(), 2) + ":" + zeroInt(value.getMinutes(), 2) + ":" + zeroInt(value.getSeconds(), 2);
}
function toDateTimeStr(value) {
if (null == value)
value = new Date();
return toDateStr(value) + " " + toTimeStr(value);
}
function toDate(val) {
var value = val;
if (null == value)
value = new Date();
else {
value = new Date(value);
if (isNaN(value.getFullYear()))
return val;
}
return new Date(value.getFullYear(), value.getMonth(), value.getDate());
}
function TodayStr() {
return toDateStr(new Date());
}
function Today() {
return toDate(new Date());
}
function incMinutes(value, num) {
value = new Date(value);
return new Date(value.getFullYear(), value.getMonth(), value.getDate(),
value.getHours(), value.getMinutes() + num, value.getSeconds());
}
function incHours(value, num) {
value = new Date(value);
return new Date(value.getFullYear(), value.getMonth(), value.getDate(),
value.getHours() + num, value.getMinutes(), value.getSeconds());
}
function incDates(value, num) {
value = new Date(value);
return new Date(value.getFullYear(), value.getMonth(), value.getDate() + num,
value.getHours(), value.getMinutes(), value.getSeconds());
}
function incMonth(value, num) {
value = new Date(value);
var day = value.getDate();
value = new Date(value.getFullYear(), value.getMonth() + num, value.getDate(),
value.getHours(), value.getMinutes(), value.getSeconds());
if (day != value.getDate())
value = incDates(value, -value.getDate());
return value;
}
function incYears(value, num) {
value = new Date(value);
return new Date(value.getFullYear() + num, value.getMonth(), value.getDate(),
value.getHours(), value.getMinutes(), value.getSeconds());
}
function NextMonth(value) {
value = new Date(value);
return new Date(value.getFullYear(), value.getMonth() + 1, 1,
value.getHours(), value.getMinutes(), value.getSeconds());
}
function MonthEnd(value) {
return incDates(NextMonth(value), -1);
}
function hashLength(ar) {
var result = 0;
for (var e in ar)
++result;
return result;
}
function In(a, b) {
	if (null == b)
		return false;
	
	/*	if (value instanceof Array)	instanceof is Mac IE NG	*/
	if ("undefined" != typeof(b.length)) {
		for (var x in b) {
			if (a == b[x])
				return true;
		}
	}
	else {
		for (var x in b) {
			if (a == x)
				return true;
		}
	}
	return false;
}

function is_empty(value) {
	return ((null == value) || (0 ==trim(value).length));
}

function not_empty(value) {
	return ! is_empty(value);
}
function unTag(value) {
	return String(value).replace(/</g, "&lt;").replace(/>/g, "&gt;");
}
