/**
 * <p>Title: Shanghai ShippingSoft Co., Ltd. </p>
 * <p>Description: public JavaScript </p>
 * <p>Copyright: Copyright (c) 2008 </p>
 * <p>Company: Shanghai ShippingSoft Co., Ltd. </p>
 * @author Dawn.Flower
 * @version 1.0
 */

/** 按钮常量，是否检查是否合法字符 */
var KEY_CHECK_CHAR = true;

/** 按钮常量，是否检查长度 */
var KEY_CHECK_LENGTH = true;

/** 按钮常量，是否弹出非法字符提示窗口 */
var KEY_ALERT_CHAR = true;

/** 按钮常量，是否弹出长度超出提示窗口 */
var KEY_ALERT_LENGTH = true;

/** 按钮常量，是否弹出非法字符提示窗口 */
var KEY_ALERT_ALL = true;

/** 按钮常量，是否将全角英数转换为半角英数 */
var KEY_CHANGE_DOUBLE_TO_SINGLE = true;

/** 按钮常量，是否清空控件中的值 */
var KEY_FIELDS_CLEAR = true;

/** 按钮常量，是否选择控件中的值 */
var KEY_FIELDS_SELECT = true;



/** 
 * 判断控件中的值是否整数 
 * @param obj 控件名称
 * @return 如果为整数，则返回 true；否则，返回 false
 */
function isInteger(obj) {
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}

	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableWord(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_ENGLISH_CHAR; 
			}
			result = false;
		}
		else {
			if(/^\d+$/.test(obj.value)) {
				/* 判断出来为有效整数 */
			}
			else {
				if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
					alert_words = alert_words + MSG_INTEGER; 
				}
				result = false;
			}
		}
	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;
}

/** 
 * 判断控件中的值是否浮点数 
 * @param obj 控件名称
 * @return 如果为浮点数，则返回 true；否则，返回 false
 */
function isDouble(obj) {
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}

	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableWord(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_ENGLISH_CHAR; 
			}
			result = false;
		}
		else {
			if(isNaN(obj.value)) {
				/* 判断出来不是有效的浮点数 */
				if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
					alert_words = alert_words + MSG_DOUBLE; 
				}
				result = false;
			}
		}
	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;

}

/** 
 * 判断控件中的值是否 email 地址 
 * @param obj 控件名称
 * @return 如果为 email 地址，则返回 true；否则，返回 false
 */
function isEmail(obj) {
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}

	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableWord(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_ENGLISH_CHAR; 
			}
			result = false;
		}
		else {
			str = obj.value;
			len = str.length;
	
			if((str.indexOf('@') == -1)||(str.indexOf('@') == 0)||(str.indexOf('@') == len-1)) {
				/* 有 @ 字符，并且不在第一位和最后一位 */
				result = false;
			}
			else if(str.indexOf('@') != str.lastIndexOf('@')) {
				/* 不能有两个或以上 @ 字符 */
				result = false;
			}
			else if(str.indexOf('.') == -1 || str.lastIndexOf('.') == (len-1)) {
				/* 有 . 字符，并且不在最后一位 */
				result = false;
			}
			else if(str.indexOf("..")!= -1 || str.indexOf("@.")!= -1) {
				/* 没有 .. 和 @. 出现 */
				result = false;
			}
			else if(!_isInChars(obj, "1234567890abcdefghijklmnopqrstuvwxyz_-.~@$#", true)) {
				result = false;
			}
			

			if(!result) {
				/* 判断出来不是有效的 email 地址 */
				if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
					alert_words = alert_words + MSG_EMAIL; 
				}
			}
		}
	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;

}


/** 
 * 判断控件中的值是否日期 
 * @param obj 控件名称
 * @return 如果为日期，则返回 true；否则，返回 false
 */
function isDate(obj) {
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}

	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableWord(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_ENGLISH_CHAR; 
			}
			result = false;
		}
		else if(!_isInChars(obj, "1234567890/", false)) {
			/* 判断出来不是有效的日期 */
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_DATE; 
			}
			result = false;
		}
		else {
			var s = obj.value.replace(/[\d]{ 4,4 }[\-/]{ 1 }[\d]{ 1,2 }[\-/]{ 1 }[\d]{ 1,2 }/g,'');
			/* s 到底干了什么看不懂 */
			if(s != '') {      
				var t = new Date(obj.value.replace(/\-/g,'/'));    
				var ar = obj.value.split(/[-/:]/);    
				if(ar[0] != t.getYear() || ar[1] != t.getMonth()+1 || ar[2] != t.getDate()) {    
					if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
						alert_words = alert_words + MSG_DATE; 
					}
					result = false;
				}    
			}    
			else {    
				if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
					alert_words = alert_words + MSG_DATE; 
				}
				result = false;
			}
		}

	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;

}

/** 
 * 判断控件中的值是否电话/传真号码 
 * @param obj 控件名称
 * @return 如果为电话/传真号码，则返回 true；否则，返回 false
 */
function isEnableTel(obj) {
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}

	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableWord(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_ENGLISH_CHAR; 
			}
			result = false;
		}
		else if(!_isInChars(obj, "1234567890", false)) {
			/* 判断出来不是有效的电话/传真号码 */
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_TEL; 
			}
			result = false;
		}
	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;
}



/**
 * 判断是否有效的数字和英文(半角)字符
 * @param obj 控件名称
 * @return 如果为有效的数字和英文(半角)字符，则返回 true；否则，返回 false
 */
function isEnableChar(obj) {
	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableChar(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_ENGLISH_CHAR; 
			}
			result = false;
		}
	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;
}

/**
 * 判断是否有效字符
 * [理论上除了半角片假名外，都是有效字符]
 * @param obj 控件名称
 * @return 如果为有效字符，则返回 true；否则，返回 false
 */
function isEnableWord(obj) {
	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableWord(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_WORDS; // Please don't use HANKAKU-KATAKANA(is 1 bite Japanese)
			}
			result = false;
		}
	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;
	
}

/**
 * 判断是否全角片假名 カタカナ
 * 效果和 checkKatakana 方法一样
 * @param obj 控件名称
 * @return 如果为全角片假名，则返回 true；否则，返回 false
 */
function isKatakana(obj) {
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}

	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableWord(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_NOT_KATAKANA; 
			}
			result = false;
		}
		else {
			if(obj.value.match(/^[傾-儞]+$/)) {
//	        if(obj.value.match(/^[ァ-ン]+$/) {
			}
			else  {
				/* 判断出来不是有效的全角片假名 */
				if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
					alert_words = alert_words + MSG_NOT_KATAKANA; 
				}
				result = false;
			}
		}
	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;

}

/**
 * 判断是否全角片假名 カタカナ
 * 效果和 isKatakana 方法一样
 * @param obj 控件名称
 * @return 如果为全角片假名，则返回 true；否则，返回 false
 */
function checkKatakana(obj) {
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}

	var result = true;
	var alert_words = "";
	if(KEY_CHECK_CHAR) {
		/* 检查字符是否合法 */
		if(!_isEnableWord(obj)) {
			if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
				alert_words = alert_words + MSG_NOT_KATAKANA; 
			}
			result = false;
		}
		else {
			if(obj.value.charAt(i) < '傾' || obj.value.charAt(i) > '儞') {
//		    if(obj.value.charAt(i) < 'ァ' || obj.value.charAt(i) > 'ン') {
				/* 判断出来不是有效的全角片假名 */
				if(KEY_ALERT_CHAR || KEY_ALERT_ALL) {
					alert_words = alert_words + MSG_NOT_KATAKANA; 
				}
				result = false;
			}
		}
	}
	if(KEY_CHECK_LENGTH) {
		/* 检查字符长度是否合法 */
		if(getLength(obj) > obj.maxLength) {
			if(KEY_ALERT_LENGTH || KEY_ALERT_ALL) {
				if(alert_words.length > 1) {
					alert_words = alert_words + "\n";
				}
				alert_words = alert_words + MSG_LENGTH_FRONT + obj.maxLength + MSG_LENGTH_AFTER;
			}
			result = false;
		}
	}
	if(!result) {
		if(alert_words.length > 1) {
			alert(alert_words);
		}
		if(KEY_FIELDS_CLEAR) {
			obj.value = "";
			obj.focus();
		}
		else if(KEY_FIELDS_SELECT) {
			obj.select();
		}
	}
	
	return result;

}

/**
 * 将控件中的值 全角数字和英文字符 自动转化为 半角数字和英文字符
 * @param obj 控件名称
 */
function changeDoubleToSingle(obj) {
	obj.value = getSingle(obj);
}

/**
 * 取得控件中值的半角数字和英文字符
 * @param obj 控件名称
 * @return 控件中值对应的所有半角数字和英文字符
 */
function getSingle(obj) {
	var v1 = obj.value;
	var v2 = "";
	var str1 = "俙俛俠俢俤俥俧俫俬俰俲俴俵俶俷俹俻俼俽俿倀倁倂倃倄倅倎倐們倓倕倖倗倛倝倞倠倢倣値倧倫倯倰倱倲倳倴倵倶倷倸侾俀俁係俆俇俈俉俋侽丵丂亙亜丆丏丠乛丟丗乵乶乷乸亅乥亄乮乯仏亾丱亹仈仐両乫乣";
	var str2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890_ <>,.?/;:[]{}\-|+()*%^$#@!`~";
	var len = v1.length;

	for(i = 0; i < len; i++) {
		var index = str1.indexOf(v1.charAt(i));
		if(index != -1) {
			v2 = v2 + str2.charAt(index);
		}
		else {
			v2 = v2 + v1.charAt(i);
		}
	}
	return v2;
}

/**
 * 检查两个文本框中的密码值是否一致
 * @param obj1 密码框控件1名称
 * @param obj2 密码框控件2名称
 * @return 如果密码值一致，则返回 true；否则，返回 false
 */
function checkPassword (obj1,obj2) { 
	if(obj1.value != obj2.value) {
		/* 判断出来密码值不一致，则弹出提述信息，并清空当前控件中的值，当前控件获得焦点，返回 false */
		alert(MSG_PASSWORD_NOT_SAME);
		obj2.select ();
		return true;
	}

	return false;
}

/**
 * 检查控件中的值是否满足长度的要求
 * @param obj 控件名称
 * @param length1 控件要求的最小长度
 * @param length2 控件要求的最大长度
 * @param range 提示语
 * @return 如果符合长度规定，则返回 true；否则，返回 false
 */
function checkElement_1 (obj, length1,length2,range) {
	if (getLength (obj) > length2 || getLength(obj) < length1) {
		alert (range);
		obj.select();
		return false;
	}

	return true;
}

/**
 * 取得控件中的值的长度
 * @param obj 控件名称
 * @return 控件中的值的长度
 */
function getLength (obj) { // check component input (text) and textarea
	var bytes = 0;
	var value = obj.value;

	for (var i = 0; i < value.length; i++) {
	    var c = value.charCodeAt (i);
		if(c < 256) { 
			bytes++;
		}
		else {
			bytes += 2;
		}
	}

	return bytes;
}




// 去空
function trim(obj) {
	var value = obj.value;
	while(value != "" && value.charAt(0) == ' ') 
		value = value.substring (1);
	while(value != "" && value.charAt(value.length - 1) == ' ') 
		value = value.substring (0, value.length - 1);
	return value;
}

// 是否为空
function isBlank(obj) {
	var value = obj.value;
	while(value != "" && value.charAt(0) == ' ') 
		value = value.substring (1);
	while(value != "" && value.charAt(value.length - 1) == ' ') 
		value = value.substring (0, value.length - 1);
	return value == "";
}


function change_out(obj) {
	obj.style.color = "black";
	obj.style.fontWeight ="normal";
	obj.style.fontSize ="12px";
}

function change_in(obj) {
	obj.style.color = "blue";
	obj.style.fontWeight ="bold";
	obj.style.fontSize ="16px";
}


// 为下拉框设置指定 id
function setSelectId(obj, _id) {
	for(var i = 0; i < obj.options.length; i++) {
		if(obj.options[i].value == _id) {
			obj.options[i].selected = true;
			i = obj.options.length + 1;
		}
	}
}



/**
 * 判断是否有效字符
 * [理论上除了半角片假名外，都是有效字符]
 * @param obj 控件名称
 * @return 如果为有效字符，则返回 true；否则，返回 false
 */
function _isEnableWord(obj) {
	// 中文：\u4E00-\u9FA5
    // 日文的平假名/片假名：\u3041-\u30FE
    // 全角符号：\uFF00-\uFFFF (半角片假名也包含在其中，半角片假名容易出现乱码)
	// 数字和字母：\w(匹配包括下划线的任何单词字符。等价于[A-Za-z0-9_])
	// 空格：\s
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}
	if(_isEnableChar(obj)) {
		return true;
	}
	
	else if(obj.value.match(/[^\u4E00-\u9FA5\|^\u3041-\u30FE\|^\u3002\|^\uFF0C\|^\u3001\|^\uFF1B\|^\u2018\|^\u2019\|^\u201C\|^\u201D\|^\uFF08\|^\uFF09\|^\uFFE5\|^\w\\,\.\?\/\;\'\:\[\]\{\}\\\=\-\|\+\(\)\&\*\%\^\$\#\@\!\`\~|^\s]/g) != null){
		/* 判断出来不是有效的字符，则弹出提述信息，并清空当前控件中的值，当前控件获得焦点，返回 false */
		return false;
    }
	return true;
}

function _isInChars(obj, _str, _ignore_case) {
	if(obj.value == "") {
		return true;
	}
	if(_str == null || _str == "") {
		return false;
	}
	if(_ignore_case == null) {
		_ignore_case = false;
	}
	var validstr = "";
	var string = "";
	if(_ignore_case) {
		string = obj.value.toLowerCase();
		validstr = _str.toLowerCase();
	}
	else {
		string = obj.value;
		validstr = _str;
	}
	for(i = 0; i < string.length; i++){
		if(validstr.indexOf(string.charAt(i)) == -1) {
             return false;
		}
	}
	return true;
}

/**
 * 判断是否有效的数字和英文(半角)字符
 * @param obj 控件名称
 * @return 如果为有效的数字和英文(半角)字符，则返回 true；否则，返回 false
 */
function _isEnableChar(obj) {
	if(obj.value == "") {
		/* 判断是否为空 */
		return true;
	}

	changeDoubleToSingle(obj);  // 将 全角数字和英文字符 自动转化为 半角数字和英文字符
	validstr = "1234567890abcdefghijklmnopqrstuvwxyz_ <>,.?/;':[]{}\=-|+()&*%^$#@!`~";

	return _isInChars(obj, validstr, true);
}