var ERRMSG_DATA_CANT_BE_EMPTY = "不可为空白";
var ERRMSG_EMAIL_FORMAT_ERROR = "格式错误";
var ERRMSG_DATE_FORMAT_ERROR = "格式错误";
var ERRMSG_DATE_FORMAT_ISNT_DIGIT_ERROR = "非数据格式错误";
var ERRMSG_YEAR_ERROR = "年资料错误";
var ERRMSG_MONTH_ERROR = "月资料错误";
var ERRMSG_DATE_ERROR = "日资料错误";
var ERRMSG_TIME_FORMAT_ERROR = "格式错误";
var ERRMSG_TIME_FORMAT_ISNT_DIGIT_ERROR = "格式非数据格式错误";
var ERRMSG_HOUR_ERROR = "时资料错误";
var ERRMSG_MINUTE_ERROR = "分资料错误";
var ERRMSG_SECOND_ERROR = "秒资料错误";
var ERRMSG_DATETIME_FORMAT_ERROR = "格式错误";
var ERRMSG_QUANTITY_FORMAT_ERROR = "格式错误";
var ERRMSG_AMOUNT_FORMAT_ISNT_DIGIT_ERROR = "非数据格式";
var ERRMSG_AMOUNT_CANT_BE_NEGATIVE_ERROR = "不可为负数格式";
var ERRMSG_QUANTITY_FORMAT_ISNT_DIGIT_ERROR = "非数据格式错误";
var ERRMSG_QUANTITY_CANT_BE_NEGATIVE_ERROR = "不可为负数格式";
var ERRMSG_QUANTITY_CANT_BE_FLOAT_ERROR = "不可为浮点数格式";


/**
 * Check Email Format
 * emailObj: email html Object
 * fieldName: email field name
 * return: true for email format is right 
 */   
function checkEmail(emailObj, fieldName) {
    var email = trim(emailObj.value);
    if (checkEmpty(email))
        return showError(emailObj, fieldName + ERRMSG_DATA_CANT_BE_EMPTY);
        
    reg = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
    if ('' == email || !email.match(reg))	{
        return showError(emailObj, fieldName + ERRMSG_EMAIL_FORMAT_ERROR);
    }
    return true;
}

/**
 * Check Date, Date Format is yyyy-mm-dd
 * dateObj: date html object
 * fieldName: date field name
 * return: ture for date format is rigth  
 */ 
function checkDate(dateObj, fieldName) {
    return chkDate(trim(dateObj.value), fieldName, dateObj);
}

/**
 * Check Time, time format is hh:mm:ss
 * timeObj: time html object
 * fieldName: time field name
 * return: true for time format is right 
 */
function checkTime(timeObj, fieldName) {
    return chkTime(trim(timeObj.value), fieldName, timeObj);
}

/**
 * Check DateTime, datetime format is yyyy-mm-dd hh:mm:dd
 * datetimeObj: datetime html object
 * fieldName: datetime field name
 * return: true for datetime format is right
 */
function checkDatetime(datetimeObj, fieldName) {
    var SPLIT = " ";
    var datetime = trim(datetimeObj.value);
    
    if (checkEmpty(datetime))
        return showError(datetimeObj, fieldName + ERRMSG_DATA_CANT_BE_EMPTY);
        
    if (datetime.length != 19 || datetime.charAt(10) != SPLIT)
        return showError(datetimeObj, fieldName + ERRMSG_DATETIME_FORMAT_ERROR);
    
    if (!chkDate(datetime.substr(0, 10), fieldName, datetimeObj))
        return false;
    if (!chkTime(datetime.substr(11, 8), fieldName, datetimeObj))
        return false;
    
    return true;
}

/**
 * Check Amount, check amount format
 * amountObj: amount html object
 * fieldName: amount field name
 * return: amount format is right  
 */ 
function checkAmount(amountObj, fieldName) {
    var num = trim(amountObj.value);

    if (checkEmpty(num))
        return showError(amountObj, fieldName + ERRMSG_DATA_CANT_BE_EMPTY);
    if (isNaN(num))
		return showError(amountObj, fieldName + ERRMSG_AMOUNT_FORMAT_ISNT_DIGIT_ERROR);
    if (parseInt(num) < 0)
        return showError(amountObj, fieldName + ERRMSG_AMOUNT_CANT_BE_NEGATIVE_ERROR);
        
    return true;
}

/**
 * Check quantity, check quantity format
 * quantityObj: quantity html object
 * fieldName: quantity field name
 * return: quantity format is right  
 */ 
function checkQuantity(quantityObj, fieldName) {
    var num = trim(quantityObj.value);
    
    if (checkEmpty(num))
        return showError(quantityObj, fieldName + ERRMSG_DATA_CANT_BE_EMPTY);
    if (isNaN(num))
		return showError(quantityObj, fieldName + ERRMSG_QUANTITY_FORMAT_ISNT_DIGIT_ERROR);
    if (parseInt(num) < 0)
        return showError(quantityObj, fieldName + ERRMSG_QUANTITY_CANT_BE_NEGATIVE_ERROR);
    if (isFloat(num))
        return showError(quantityObj, fieldName + ERRMSG_QUANTITY_CANT_BE_FLOAT_ERROR);
        
    return true;
}

function ReplaceAll(stringObj,strFind,strReplace){
	var index = 0;
	var strOrg = trim(stringObj.value);
	while(strOrg.indexOf(strFind,index) != -1){
		strOrg = strOrg.replace(strFind,strReplace);
		index = strOrg.indexOf(strFind,index);
	}
	//stringObj.focus();
	return strOrg;
}


/**
 * Check isPosInteger, check isPosInteger format
 * quantityObj: quantity html object
 * fieldName: quantity field name
 * return: quantity format is right  
 */ 
function isPosInteger(inputObj,quantityObj) {
var inputVal = trim(inputObj.value);
var oneChar
	inputStr=inputVal.toString()
	for (var i=0;i<inputStr.length;i++) {
		oneChar=inputStr.charAt(i)
		if (oneChar<"0" || oneChar>"9") {
			quantityObj.focus();
			return false
		}		
	}
	return true
}

/**
 * Check CheckBox is checked 
 * form: form html object
 * value: checkbox value
 * return: true for checkbox is checked  
 */ 
function checkChecked(form, value) {
    for (var i=0; i< form.length; i++)
      if (form.elements[i].type == 'checkbox' && form.elements[i].value == value)
         return form.elements[i].checked;
}

/**
 * Check CheckBox is checked 
 * form: form html object
 * name: name value 
 * value: checkbox value
 * return: true for checkbox is checked  
 */ 
function checkChecked(form, name, value) {
    for (var i=0; i< form.length; i++)
      if (form.elements[i].type == 'checkbox' && form.elements[i].name == name && form.elements[i].value == value)
         return form.elements[i].checked;
}

/**
 * Check Specify CheckBox is checked 
 * form: form html object
 * name: name value
 * return: true for any checkbox is checked  
 */ 
function checkAnyChecked(form, name) {
    var flag = false;
    for (var i=0; i< form.length; i++)
      if (form.elements[i].type == 'checkbox' && form.elements[i].name == name)
         flag = flag || form.elements[i].checked;
    
    return flag;
}

/**
 * Check data after trimed is empty
 * value: data
 * return: true for data is empty
 */   
function checkEmpty(value) {
    return trim(value).length == 0;
}

/**
 * trim space, tab, carrage return in data
 * str: data
 * return data without space, tab, carrage return in left and right or data
 */   
function trim(data) {
    return rTrim(lTrim(data));
}





/**************************** private function ********************************/
function showError(obj, msg) {
    alert(msg);
    obj.focus();
    return false;
}

function subStr(str, pos) {
    if ('0'==str.substr(pos, 1)) {
		return str.substr(pos + 1, 1);
	} else {
		return str.substr(pos, 2);
	}
}

function chkDate(date, fieldName, obj) {
    var SPLIT = '-';
    
    if (checkEmpty(date))
        return showError(obj, fieldName + ERRMSG_DATA_CANT_BE_EMPTY);
        
    if (date.length != 10 || SPLIT != date.substr(4, 1) || SPLIT != date.substr(7, 1))
        return showError(obj, fieldName + ERRMSG_DATE_FORMAT_ERROR);  
	      
    var tmpDate = date.substr(0, 4) + date.substr(5, 2) + date.substr(8, 2);

    if (isNaN(tmpDate))
    	return showError(obj, fieldName + ERRMSG_DATE_FORMAT_ISNT_DIGIT_ERROR);  	

    var monthday = new Array(29,31,28,31,30,31,30,31,31,30,31,30,31);
	var cy = parseInt(tmpDate.substr(0, 4));
    var cm = parseInt(subStr(tmpDate, 4));
    var cd = parseInt(subStr(tmpDate, 6));
	
    if (12 < cm || 1 > cm) {
    	return showError(obj, fieldName + ERRMSG_MONTH_ERROR);
    } else {
        if (2==cm && ((0==cy%4 && 0!=cy%100) || 0==cy%400))	{
			if (cd > monthday[0]) {
                return showError(obj, fieldName + ERRMSG_DATE_ERROR);
            }
        } else {
			if (cd > monthday[cm] || cd < 0) {
                return showError(obj, fieldName + ERRMSG_DATE_ERROR);
            }
        }
    }

	if (cy == '0000')  {
	    return showError(obj, fieldName + ERRMSG_YEAR_ERROR);
	}
	
	return true;
}

function chkTime(time, fieldName, obj) {
    var SPLIT = ":";
    
    if (checkEmpty(time))
        return showError(obj, fieldName + ERRMSG_DATA_CANT_BE_EMPTY);
        
    if (8 != time.length || SPLIT != time.substr(2,1) || SPLIT != time.substr(5,1))
	   return showError(obj, fieldName + ERRMSG_TIME_FORMAT_ERROR);
		
    var tmpTime = time.substr(0,2) + time.substr(3,2) + time.substr(6,2);

	if (isNaN(tmpTime))
    	return showError(obj, fieldName + ERRMSG_TIME_FORMAT_ISNT_DIGIT_ERROR); 

	var	ch = parseInt(subStr(time, 0));
	var	cm = parseInt(subStr(time, 3));
	var	cs = parseInt(subStr(time, 6));
    if (23 < ch || 0 > ch) 
        return showError(obj, fieldName + ERRMSG_HOUR_ERROR);

	if (59 < cm || 0 > cm)
        return showError(obj, fieldName + ERRMSG_MINUTE_ERROR);

	if (59 < cs || 0 > cs)
	   return showError(obj, fieldName + ERRMSG_SECOND_ERROR);

	return true;
}

function isFloat(num) {
    return num.indexOf(".") > 0;
}

function lTrim(str) {
   var whitespace = new String(" \t\n\r");
   var s = new String(str);

   if (whitespace.indexOf(s.charAt(0)) != -1) {
      var j=0, i = s.length;
      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;
      s = s.substring(j, i);
   }
   return s;
}

function rTrim(str) {
   var whitespace = new String(" \t\n\r");
   var s = new String(str);

   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      var i = s.length - 1;
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;
         
      s = s.substring(0, i+1);
   }

   return s;
}

