﻿/*
 * $Header$
 * $Author$
 * $Revision$
 * $Date$
 */

/**
 * 判断传入参数是否为空
 * @para userNameStr 传入的字符串
 * @para errorMsg 错误信息。可以传入国际化后的字符串
 * @return 如果传入的字符串为空则返回真，否则返回假
 */
function isBlank(str, errorMsg) {   
    strTrimmed = trim(str);
    if (strTrimmed.length > 0) return false;
    alert(errorMsg);
    return true;
}

/**
 * 判断传入参数是否为合法的用户名
 * @para userNameStr 用户名字符串
 * @para errorMsg 错误信息。可以传入国际化后的字符串
 * @return 如果传入的字符串为合法的用户名则返回真，否则返回假
 */
function isValidUserName(userNameStr, errorMsg) {
    s = trim(userNameStr);
    len = s.length; 
    for (i = 0; i < len; i++) {
        b = s.charCodeAt(i);
        if ((b >= toInt('a')) && (b <= toInt('z'))) { // not a cast, it's a function.
            // low chars
        } else if ((b >= toInt('A')) && (b <= toInt('Z'))) {
            // up chars
        } else if ((b >= toInt('0')) && (b <= toInt('9'))) {
            // numbers 
        } else if (( (b==toInt('_')) || (b==toInt('.')) || (b==toInt('@')) ) && (i != 0)) {
            // very litte special chars
        } else {
            alert("\"" + s + "\" " + errorMsg + " \"" + s.charAt(i) + "\""); 
            return false;
            // not good name error
        }
    }
    return true;
}

/**
 * 返回该字符串位于第1位的单个字符的 ASCII 码
 * @para c 某个字符
 * @return 返回ASCII码
 */
function toInt(c) {
  return c.charCodeAt(0);
}

/**
 * 校验输入字符串是否为合法的正整数
 * @para numberStr 输入数字字符串
 * @para errorMsg 错误信息。可以传入国际化后的字符串
 * @return 如果为合法的email地址则返回真，否则返回假
 */
function isNumber(numberStr, errorMsg) { 
  var l = numberStr.length; 
  var count = 0; 
  for(var i = 0; i<l; i++) { 
    var digit = numberStr.charAt(i); 
    if(digit == "." ) { 
      ++count; 
      if(count > 1) {
	    alert (errorMsg); 
        return false; 
      } 
    } else if(digit < "0" || digit > "9") {
	    alert (errorMsg); 
        return false; 
    } 
  } 
  return true;
}

/**
 * 校验输入字符串是否为合法的电子邮件地址
 * @para emailStr 输入电子邮件地址
 * @para errorMsg 错误信息。可以传入国际化后的字符串
 * @return 如果为合法的email地址则返回真，否则返回假
 */
function isValidEmail(emailStr, errorMsg) {
   if (emailStr.length == 0) {
	   return true;
   }
   var emailPat=/^(.+)@(.+)$/;
   var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]";
   var validChars="\[^\\s" + specialChars + "\]";
   var quotedUser="(\"[^\"]*\")";
   var ipDomainPat=/^(\d{1,3})[.](\d{1,3})[.](\d{1,3})[.](\d{1,3})$/;
   var atom=validChars + '+';
   var word="(" + atom + "|" + quotedUser + ")";
   var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
   var domainPat=new RegExp("^" + atom + "(\\." + atom + ")*$");
   var matchArray=emailStr.match(emailPat);
   if (matchArray == null) {
	   alert(errorMsg);
	   return false;
   }
   var user=matchArray[1];
   var domain=matchArray[2];
   if (user.match(userPat) == null) {
	   alert(errorMsg);
	   return false;
   }
   var IPArray = domain.match(ipDomainPat);
   if (IPArray != null) {
	   for (var i = 1; i <= 4; i++) {
		  if (IPArray[i] > 255) {
			 alert(errorMsg);
			 return false;
		  }
	   }
	   return true;
   }
   var domainArray=domain.match(domainPat);
   if (domainArray == null) {
	   alert(errorMsg);
	   return false;
   }
   var atomPat=new RegExp(atom,"g");
   var domArr=domain.match(atomPat);
   var len=domArr.length;
   if ((domArr[domArr.length-1].length < 2) ||
	   (domArr[domArr.length-1].length > 3)) {
	   alert(errorMsg);
	   return false;
   }
   if (len < 2) {
	   alert(errorMsg);
	   return false;
   }
   return true;
}

/**
 * 判断单选按钮是否选中
 * @para radioName 要处理的单选按钮的名字
 * @para errorMsg 错误信息。可以传入国际化后的字符串
 * @return 如果有选择则返回真，否则返回假
 */
function hasRadioChecked(radioName, errorMsg)
{
	var rdo = document.getElementsByName(radioName);
	for (var i = 0;i < rdo.length ;i++ )
	{
		if (rdo[i].checked)
		{
			return true;
		}
		
	}
	alert(errorMsg);
	return false;
}

/**
 * 判断复选按钮是否选中
 * @para radioName 要处理的单选按钮的名字
 * @para errorMsg 错误信息。可以传入国际化后的字符串
 * @return 如果有选择则返回真，否则返回假
 */
function hasCheckBoxChecked(checkBoxName, errorMsg)
{
	var chkbox = document.getElementsByName(checkBoxName);
	for (var i = 0;i < chkbox.length ;i++ )
	{
		if (chkbox[i].checked)
		{
			return true;
		}
	}
	alert(errorMsg);
	return false;
}

/**
 * 判断下拉列表是否选中
 * @para radioName 要处理的下拉列表的名字
 * @para errorMsg 错误信息。可以传入国际化后的字符串
 * @return 如果有选择则返回真，否则返回假
 */
function hasOptionSelected(selectName, errorMsg)
{
	var select = document.getElementsByName(selectName);
	for (var i = 0;i < select.length ;i++ )
	{
		if (select[i].selected && (trim(select[i].value).length > 0))
		{
			return true;
		}
	}
	alert(errorMsg);
	return false;
}

/**
 * 删除字符串左侧的空格
 * @para 要处理的字符串
 * @return 处理后的字符串
 */
function trimLeft(s) {
    var whitespaces = " \t\n\r";
    for(n = 0; n < s.length; n++) { if (whitespaces.indexOf(s.charAt(n)) == -1) return (n > 0) ? s.substring(n, s.length) : s; }
    return("");
}

/**
 * 删除字符串右侧的空格
 * @para 要处理的字符串
 * @return 处理后的字符串
 */
function trimRight(s){
    var whitespaces = " \t\n\r";
    for(n = s.length - 1; n  > -1; n--) { if (whitespaces.indexOf(s.charAt(n)) == -1) return (n < (s.length - 1)) ? s.substring(0, n+1) : s; }
    return("");
}

/**
 * 删除字符串两侧的空格
 * @para 要处理的字符串
 * @return 处理后的字符串
 */
function trim(s) {return ((s == null) ? "" : trimRight(trimLeft(s))); }

