function StringChecker(str, arg, obj)
{
	if(arg == "") return str;
	var argvalue,nPosB,nPosC,i,j,strtemp,JobBoolens;
	var argname = "trim";
	var nPosA = arg.indexOf(argname);
	if(str.length > 0)
	{
		str = replaceString("<","&lt;",str);
		str = replaceString(">","&gt;",str);
		str = replaceString("\"","&quot;",str);
	}
	/* arg : trim */
	if(nPosA >= 0){
		nPosB = arg.indexOf("=", nPosA);
		nPosC = arg.indexOf(",", nPosB);
		if(nPosC >= nPosB) argvalue = arg.substring(nPosA + argname.length+1, nPosC);
		else argvalue = arg.substring(nPosA + argname.length+1);
		JobBoolen = false;
		var BoolTemp = false;
		switch(argvalue)
		{
			case "head":
				strtemp = "";
				for(i=0; i<str.length; i++)
				{
					if(str.substring(i,i+1) != " "){
						strtemp += str.substring(i,i+1);
						JobBoolen = true;
					}else{
						if(JobBoolen)	break;
						BoolTemp = true;
					}
				}
				if(i<str.length) strtemp += str.substring(i);
				str = strtemp;
				break;
			case "tail":
				strtemp = "";
				for(i=str.length; i>0; i--)
				{
					if(str.substring(i-1,i) != " "){
						strtemp = str.substring(i-1,i)+strtemp ;
						JobBoolen = true;
					}else{
						if(JobBoolen)	break;
						BoolTemp = true;
					}
				}
				if(i<str.length) strtemp = str.substring(0, i) + strtemp;
				str = strtemp;
				break;
			case "filter":
				strtemp = "";
				for(i=0; i<str.length; i++)
				{
					if(str.substring(i,i+1) != " "){
						strtemp += str.substring(i,i+1);
						JobBoolen = true;
					}else{
						if(JobBoolen)	break;
						BoolTemp = true;
					}
				}
				if(i<str.length) strtemp += str.substring(i);
				str = strtemp;
				strtemp = "";
				JobBoolen = false;
				for(i=str.length; i>0; i--)
				{
					if(str.substring(i-1,i) != " "){
						strtemp = str.substring(i-1,i)+strtemp ;
						JobBoolen = true;
					}else{
						if(JobBoolen)	break;
						BoolTemp = true;
					}
				}
				if(i<str.length) strtemp = str.substring(0, i) + strtemp;
				str = strtemp;
				break;
			case "all":
				strtemp = "";
				for(i=0; i<str.length; i++)
				{
					if(str.substring(i,i+1) != " "){
						strtemp += str.substring(i,i+1);
						BoolTemp = true;
					}
				}
				str = strtemp;
				break;
			case "no":
				break;
		}
		if(BoolTemp){
			if(obj){
				obj.value = str;
			}
		}
	}
	JobBoolen = true;
	argname = "strlvl";
	nPosA = arg.indexOf(argname);
	/* arg : strlvl */
	if(nPosA >= 0){
		nPosB = arg.indexOf("=", nPosA);
		nPosC = arg.indexOf(",", nPosB);
		if(nPosC >= nPosB) argvalue = arg.substring(nPosA + argname.length+1, nPosC);
		else argvalue = arg.substring(nPosA + argname.length+1);
		switch(argvalue)
		{
			case "0":   //don't worry, default setting
				break;
			case "1":		//argvalue=1: character range in ASCII(32)~ASCII(126)
				strtemp="";
				for(i=0; i<str.length; i++){
					if(toAscii(str.substring(i,i+1)) > 0){
						strtemp += str.substring(i,i+1);
					}else{
						error_code = 2;
						JobBoolen = false;
					}
				}
				str = strtemp;
				break;
			case "2":		//argvalue=2: character range is 0~9,A~Z,a~z and .
				strtemp="";
				var num;
				for(i=0; i<str.length; i++){
					num = toAscii(str.substring(i,i+1));
					if((num > 47 && num < 58) || (num > 64 && num < 91) || (num > 96 && num <123) || num == 46){
						strtemp += "" + str.substring(i,i+1);
					}else{
						error_code = 2;
						JobBoolen = false;
					}
				}
				str = strtemp;
				break;
			case "3":		//character range is 0~9 and .
				strtemp="";
				var num;
				for(i=0; i<str.length; i++){
					num = toAscii(str.substring(i,i+1));
					if((num > 47 && num < 58) || num == 46){
						strtemp += "" + str.substring(i,i+1);
					}else{
						error_code = 2;
						JobBoolen = false;
					}
				}
				str = strtemp;
				break;
			case "4":   //for name string (except: [*/\\?@#%^|!&<>,:;[]'\"])
				var exceptstr = "*/\\?@#%^|!&<>,:;[]'\"";
				strtemp="";
				if(str=="." || str=="..")
				{
					error_code = 2;
					JobBoolen = false;
				}
				if(JobBoolen)
				{
					for(i=0; i<str.length; i++){
						if(exceptstr.indexOf(str.substring(i,i+1)) < 0){
							strtemp += "" + str.substring(i,i+1);
						}else{
							error_code = 2;
							JobBoolen = false;
						}
					}
				}
				str = strtemp;
				break;
			case "5":   //check URL http://xxx string
				if(str != "" && str != "http://")
				{
					var goodURL = str.search(/http:\/\/./gi);
					if (goodURL == -1)
					{
							error_code = 2;
							JobBoolen = false;
		    	}
				}
				break;
			case "6":   //for name string (except: [*/\\?@#%^|!&<>,:;[]\"])
				var exceptstr = "*/\\?@#%^|!&<>,:;[]\"";
				strtemp="";
				for(i=0; i<str.length; i++){
					if(exceptstr.indexOf(str.substring(i,i+1)) < 0){
						strtemp += "" + str.substring(i,i+1);
					}else{
						error_code = 2;
						JobBoolen = false;
					}
				}
				str = strtemp;
				break;
			case "7":
				if(str != "")
				{
					var goodEmail = str.search(/^[^\.]*[A-Za-z0-9_\-\.]*[^\.]\@[^\.][A-Za-z0-9_\-\.]+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\.info)|(\.biz)|(\.us)|(\.bizz)|(\.coop)|(\..{2,2}))[ ]*$/gi);
					if (goodEmail == -1)
					{
							error_code = 2;
							JobBoolen = false;
		    	}
				}
				break;
			case "8":   //for name string (except: [<>"])
				var exceptstr = "<>\"";
				strtemp="";
				for(i=0; i<str.length; i++){
					if(exceptstr.indexOf(str.substring(i,i+1)) < 0){
						strtemp += "" + str.substring(i,i+1);
					}else{
						error_code = 2;
						JobBoolen = false;
					}
				}
				str = strtemp;
				break;
			case "9":   //character range is 0~9 and -
				strtemp="";
				var num;
				for(i=0; i<str.length; i++){
					num = toAscii(str.substring(i,i+1));
					if((num > 47 && num < 58) || num == 45){
						strtemp += "" + str.substring(i,i+1);
					}else{
						error_code = 2;
						JobBoolen = false;
					}
				}
				str = strtemp;
				break;
		}
	}else{
		JobBoolen = true;
	}
	if(JobBoolen){
		argname = "length";
		nPosA = arg.indexOf(argname);
		/* arg : length */
		if(nPosA >= 0){
			nPosB = arg.indexOf("=", nPosA);
			nPosC = arg.indexOf(",", nPosB);
			if(nPosC >= nPosB) argvalue = arg.substring(nPosA + argname.length+1, nPosC);
			else argvalue = arg.substring(nPosA + argname.length+1);
			var slen = 0;
			JobBoolen=true;
			for(var i=0; i<str.length; i++)
			{
				if(str.charCodeAt(i) > 256) slen += 2;
				else slen ++;
				if(parseInt(argvalue,10) < slen){
					str = str.substring(0,i);
					JobBoolen=false;
					error_code = 0;
					break;
				}
			}
		}
	}
	if(JobBoolen){
		argname = "empty";
		nPosA = arg.indexOf(argname);
		/* arg : empty */
		if(nPosA >= 0){
			nPosB = arg.indexOf("=", nPosA);
			nPosC = arg.indexOf(",", nPosB);
			if(nPosC >= nPosB) argvalue = arg.substring(nPosA + argname.length+1, nPosC);
			else argvalue = arg.substring(nPosA + argname.length+1);
			switch(argvalue)
			{
				case "yes":
					JobBoolen = true;
					break;
				case "no":
					if(str.length > 0)
						JobBoolen = true;
					else{
						error_code = 1;
						JobBoolen = false;
					}break;
			}
		}else{
			JobBoolen = true;
		}
	}
	argname = "return";
	nPosA = arg.indexOf(argname);
	/* arg : return */
	if(nPosA >= 0){
		nPosB = arg.indexOf("=", nPosA);
		nPosC = arg.indexOf(",", nPosB);
		if(nPosC >= nPosB) argvalue = arg.substring(nPosA + argname.length+1, nPosC);
		else argvalue = arg.substring(nPosA + argname.length+1);
		switch(argvalue)
		{
			case "string":
				return str;
				break;
			case "boolen":
				return JobBoolen;
				break;
		}
	}else{
		return str;
	}
}
/*
var error_msg = [
	"Error: String length over",
	"Error: String is empty",
	"Error: String Format"
];
*/
var error_code = -1;

function replaceString(oldS,newS,fullS)
{
	// Replaces oldS with newS in the string fullS
  for(var i=0; i<fullS.length; i++){
	   if(fullS.substring(i,i+oldS.length) == oldS){
		    fullS = fullS.substring(0,i)+newS+fullS.substring(i+oldS.length,fullS.length);
  	 }
	}
  return fullS;
}

String.prototype.replaceAll = strReplace;
function strReplace(findText, replaceText)
{
   var str = new String(this);
   while (str.indexOf(findText)!=-1) {
      str = str.replace(findText, replaceText);
   }
   return str;
}

/*
檢查是否為空字串
return: true=空字串
        false=非空字串
*/
function checkEmpty(s)
{
	if(s=="")	return true;
	else return false;
}
/*
檢查是否含有中文字或是 2 byte 的字
return: true=含中文
        false=不含中文
*/
function have_2byte_code(s)
{
	for (var i=0; i<s.length; i++)
	{
		if (s.charCodeAt(i)>256)
			return true;
	}
	return false;
}
/*
檢查是否所有的字都是 2 byte
return: true=都是 2 byte
        false=含有不是 2 byte 的字
*/
function all_2byte_code(s)
{
	for (var i=0; i<s.length; i++)
	{
		if (s.charCodeAt(i)<256)
			return false;
	}
	return true;
}
/*
檢查字串是否超過長度
return: true=沒超過
        false=超過長度
*/
function checkLength(s, n)
{
	var jsLen, byteLen;
	jsLen = s.length;
	byteLen=0;
	for (var i=0; i<s.length; i++)
	{
		if (s.charCodeAt(i)>256) byteLen+=2;
		else byteLen++;
		if (byteLen>n)
		{
			return false;
		}
	}
	return true;
}
/*
檢查是否含有不合法字元
return: true=有不合法字元
        false=沒有不合法字元
*/
function have_illegal_char(s, illegalStr)
{
	for (var i=0; i<s.length; i++)
	{
		if (illegalStr.indexOf(s.charAt(i))>=0)
			return true;
	}
	return false;
}

/*
檢查是否為 E-mail 格式
return: true=E-mail 格式
        false=不是 E-mail 格式
*/
function is_email_format(s)
{
	var lmn=0;
	var dotn=0;
	if(s.indexOf(" ") >= 0) return false;
	for (var i=0; i<s.length; i++)
	{
		if (s.charAt(i) == "@")	lmn++;
		if ((s.charAt(i) == ".") && (lmn > 0))	dotn++;
	}
	if((lmn == 1) && (dotn>0))
		return true;
	else
		return false;
}

/*
檢查是否為合法的數字字串
return: true=合法
        false=不合法
*/
function is_numberic_str(s)
{
	var dot_N=0;
	if(s.charAt(0)=="0") return true;
	if((s.charAt(0)=="0") && (s.charAt(1)!=".")) return false;
	for(var i=0; i<s.length; i++)
	{
		if(i==0)
		{
			if(!(((s.charAt(i)>="0") && (s.charAt(i)<="9")) || (s.charAt(i)=="-")))
				return false;
		}
		else
		{
			if((s.charAt(i)<"0") || (s.charAt(i)>"9"))
			{
				if(s.charAt(i)=="." && dot_N<1)
				{
					dot_N++;
					continue;
				}
				return false;
			}
		}
	}
	return true;
}

/*
檢查是否為合法的手機號碼
return: true=合法
        false=不合法
*/
function is_mobile_str(s)
{
	if(s.length != 10)
		return false;
	if(s.substring(0, 2) != "09")
		return false;
	return true;
}

/*
檢查字串最小與最大的長度
return: true=通過
        false=不通過
*/
function str_len_check(s, min_len, max_len)
{
	var jsLen, byteLen, pass1, pass2;
	jsLen = s.length;
	byteLen=0;
	pass1 = pass2 = false;
	for (var i=0; i<s.length; i++)
	{
		if (s.charCodeAt(i)>256) byteLen+=2;
		else byteLen++;
		if (byteLen<min_len)
			pass1 = false;
		else
			pass1 = true;
		
		if (byteLen>max_len)
			pass2 = false;
		else
			pass2 = true;
	}
	if(pass1 && pass2)
		return true;
	else
		return false;
}

function toAscii(ch)
{
	var symbols = " !\"#$%&'()*+'-./0123456789:;<=>?@";
	var loAZ = "abcdefghijklmnopqrstuvwxyz";
	symbols+= loAZ.toUpperCase();
	symbols+= "[\\]^_`";
	symbols+= loAZ;
	symbols+= "{|}~";
	var loc;
	loc = symbols.indexOf(ch);
	if (loc > -1) { 
		Ascii_Decimal = 32 + loc;
		return (32 + loc);
  }
	return(0);  // If not in range 32-126 return ZERO
}

function checkUploadImg(obj)
{
	var s = "", s1 = "", ss = "";
	if(obj.value == "")
	{
		return -1;
	}
	s = obj.value;
	s = s.substring(s.lastIndexOf("."));
	s = s.toUpperCase();
	if((s != ".GIF") && (s != ".JPG") && (s != ".PNG"))
	{
		return -2;
	}
	ss = navigator.userAgent;
	if(ss.indexOf("Windows") > 0)
		s1 = obj.value.split('\\');
	else
		s1 = obj.value.split('/');
	if(s1.length > 0)
	{
		s1 = s1[s1.length-1];
		for (var i=0; i<s1.length; i++)
		{
			//Edit by luke
			//if (s1.charCodeAt(i)>256)
			//	return -3;
		}
	}
	return 0;
}

function word_encode(str)
{
	var rsStr = "";
	for(var i=0; i<str.length; i++)
	{
		if(str.charCodeAt(i) < 128)
		{
			rsStr += str.substring(i, i+1);
		}
		else
		{
			rsStr += "---" + str.charCodeAt(i) + ";";
		}
	}
	rsStr = rsStr.replaceAll("\n", "(xNL)");
	return rsStr;
}

function string_shorten(s, n)
{
	var s1="", j=0, k=0, rc=true;
	var inTag = false, isBreak = false;
	for(var i=0; i<s.length; i++){
		if((j > n) && !isBreak){
			rc=false;
//			s1 += "...";
			isBreak = true;
		}
		if(s.charAt(i) == "<")
			inTag = true;
		if(rc){
			s1 += s.charAt(i);
			if(!inTag)
			{
				if(s.charCodeAt(i) > 256) j+=2;
				else j++;
			}
		}
		else if(inTag)
			s1 += s.charAt(i);
		if(s.charCodeAt(i) > 256) k+=2;
		else k++;
		if(s.charAt(i) == ">")
			inTag = false;
	}
	return s1;
}
