// formval.js
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz"
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var whitespace = " \t\n\r";
var decimalPointDelimiter = ".";

var daysInMonth = new Array(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;   // must programmatically check this
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

//warning hint
var sInvEmpty	="字段不能为空";
var sInvDate	="日期格式为:YYYY-MM-DD。比如: 2007-07-07";
var sInvTime	="时间格式为:HH:MMSS。比如: 12:20:21";
var sInvInt		="输入必须为整数。比如:1,5,100";
var sInvFloat	="输入为浮点数。比如:10, 20.1";
var sInvString	="输入长度必须为 ";
var sInvEmail	="非法的Email地址。比如:webmaster@routdata.com";
var sInvPostal	="非法的邮政编码，6位数字";
var sInvDigitLetter="必须为数字或字母,比如A111,abcd";
var sInvIP		="非法IP地址：合法，129.2.2.2";
var sInvPhone	="非法电话地址：合法，0755-83896064";
var sInvDigit	="输入的内容必须为数字!!!!";
var sInvSpecialChar="输入不允许有特殊字符，比如：'!','@','#'等";

var specialChars="!@#$%^&*()~`\|/?;:,<>.[]{}+=";

function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}

function charInString (c, s)
{   for (i = 0; i < s.length; i++)
    {   if (s.charAt(i) == c) return true;
    }
    return false
}


function isLetter (c)
{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}


function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}

function isLetterOrDigit (c)
{   return (isLetter(c) || isDigit(c))
}

function isSpecialChar(c)
{
	if(specialChars.indexOf(c)<0)
		return false;
	return true;
}

function isInteger (s)

{   var i;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (!isDigit(c)) return false;
    }
    return true;
}

function isIntegerInRange (s, a, b)
{    if (!isInteger(s, false)) return false;

    var num ; 
	if(s=="08" || s=="09") 
		num = parseInt(s.substring(1));	
	else 
		num = parseInt (s);
    return ((num >= a) && (num <= b));
}


function isFloat (s)

{   var i;
    var seenDecimalPoint = false;

    if (s == decimalPointDelimiter) return false;

    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if ((c == decimalPointDelimiter) && !seenDecimalPoint) seenDecimalPoint = true;
        else if (!isDigit(c)) return false;
    }
    return true;
}


function isDate(t)
{	var ts=t.split("-");
	if(ts.length<3)	return false;

    	if (! (isYear(ts[0]) && isMonth(ts[1]) && isDay(ts[2]))) return false;

	var intYear = parseInt(ts[0]);
    	var intMonth ;//= parseInt(ts[1]);
    	var intDay ;//= parseInt(ts[2]);

	if(ts[1]=="08" || ts[1]=="09") 
		intMonth = parseInt(ts[1].substring(1));
	else
		intMonth = parseInt(ts[1]);

	if(ts[2]=="08" || ts[2]=="09") 
		intDay = parseInt(ts[2].substring(1));
	else
		intDay = parseInt(ts[2]);



   	if (intDay > daysInMonth[intMonth]) return false; 
    	if ((intMonth == 2) && (intDay > daysInFebruary(intYear))) return false;	
	return true;
}

function isTime(t)
{	var ts=t.split(":");
	if(ts.length<3)	return false;
    	if (! (isHour(ts[0]) && isMinute(ts[1]) && isSecond(ts[2]))) return false;
	return true;
}


function daysInFebruary (year)
{    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function isHour (s)
{   if (!isInteger(s)) return false;
    return isIntegerInRange (s, 0, 23);
}

function isMinute (s)
{   if (!isInteger(s)) return false;
    return isIntegerInRange (s, 0, 60);
}

function isSecond (s)
{   if (!isInteger(s)) return false;
    return isIntegerInRange (s, 0, 60);
}


function isYear (s)
{   if (!isInteger(s)) return false;
    return (s.length==4);
}


function isMonth (s)
{    return isIntegerInRange (s, 1, 12);
}

function isDay (s)
{    return isIntegerInRange (s, 1, 31);
}

function isEmail (s)
{   var i = 1;
    var sLength = s.length;

    // look for @
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }

    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;

    // look for .
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }

    // there must be at least one character after the .
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}



function prompt (s)
{   window.status = s
}

function warnEmpty (theField, s)
{   	theField.focus()
    	alert(s)
    	return false
}

function warnInvalid (theField, s)
{   	theField.focus()
    	theField.select()
    	alert(s)
    	return false
}


//
function checkEmpty(theField)
{	var s=theField.value;
	if(isEmpty(s))
		return warnEmpty(theField,sInvEmpty);
	return true;
}

function checkDate(theField,enableEmpty)
{	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvEmpty);
	if(isDate(s))	return true;
	return warnInvalid(theField,sInvDate);
}

function checkTime(theField,enableEmpty)
{	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvEmpty);
	if(isTime(s))	return true;
	return warnInvalid(theField,sInvTime);
}


function checkInteger(theField,enableEmpty)
{	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvInt);
	if(isInteger(s))	return true;
	return warnInvalid(theField,sInvInt);
}

function checkFloat(theField,enableEmpty)
{	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvFloat);
	if(isFloat(s))	return true;
	return warnInvalid(theField,sInvFloat);
}

function checkString(theField, length,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvString+length);
	if(length<=0)
		return true;
	if(s.length==length)
		return true;
	return warnInvalid(theField,sInvString+length);
}

function checkEmail(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvEmail);
	if(isEmail(s)) 
		return true;
	return warnInvalid(theField,sInvEmail);
}


function checkPostal(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvPostal);
	if(isInteger(s)==false) 
		return warnInvalid(theField,sInvPostal);
	if(s.length==6)
		return true;
	return warnInvalid(theField,sInvPostal);
}


function checkDigitLetter(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvDigitLetter);
   	var i = 0;
    var sLength = s.length;

    	while (i < sLength)
    	{ 
			if(isLetterOrDigit(s.charAt(i))==false)
				return warnInvalid(theField,sInvDigitLetter);
			i++
    	}
	return true;
}


function checkDigit(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvDigitLetter);
   	var i = 0;
    	var sLength = s.length;

    	while (i < sLength)
    	{ 
		if(isDigit(s.charAt(i))==false)
			return warnInvalid(theField,sInvDigit);
		i++
    	}
	return true;
}


function checkMobile(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
    	var sLength = s.length;
    invalidChars = "0123456789";
	for(i=0;i<s.length;i++){
		badChar = s.charAt(i);
		if(invalidChars.indexOf(badChar, 0)<0){
			alert("请输入11位的数字手机号码")
			return false;
		}
	}

	return true;
}



function checkSpecialChar(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvDigitLetter);
   	var i = 0;
    	var sLength = s.length;

    	while (i < sLength)
    	{ 
		if(isSpecialChar(s.charAt(i)))
			return warnInvalid(theField,sInvSpecialChar);
		i++
    	}
	return true;
}


function checkPhone(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvDigitLetter);
	if(s.charAt(0)=='-')
		return warnInvalid(theField,sInvPhone);		

	var ss=s.split("-");
	//if(ss.length>2)
	//		return warnInvalid(theField,sInvPhone);		
		
	for(var i=0;i<ss.length;i++)
	{
		if(isInteger(ss[i])==false)
			return warnInvalid(theField,sInvPhone);		
	}
	return true;
}

function checkIP(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvDigitLetter);
	var ss=s.split(".");
	if(ss.length<4)
		return warnInvalid(theField,sInvIP);
	for(var i=0;i<4;i++)
	{
		if(isInteger(ss[i])==false)
			return warnInvalid(theField,sInvIP);
		var n=parseInt(ss[i]);
		if(n<0||n>255)
			return warnInvalid(theField,sInvIP);
	}
	return true;
}

function f_check_mobile(obj){      
    var regu =/(^[1][3][0-9]{9}$)|(^0[1][3][0-9]{9}$)|(^[1][5][9][0-9]{8}$)/;   
    var re = new RegExp(regu);   
    if (re.test( obj.value )) {   
      return true;   
    }   
    alert(obj,"请输入正确的手机号码");   
    return false;      
}

function compareDate(d1,d2)
{
	var ds1=d1.split("-");
	var ds2=d2.split("-");
	var i;
	for(i=0;i<3;i++)
	{
		var n1;

		if(ds1[i]=="08" || ds1[i]=="09") 
			n1 = parseInt(ds1[i].substring(1));
		else
			n1 = parseInt(ds1[i]);
		var n2;

		if(ds2[i]=="08" || ds2[i]=="09") 
			n2 = parseInt(ds2[i].substring(1));
		else
			n2 = parseInt(ds2[i]);
		//alert(n1+":"+n2);

		if(n1!=n2)
		{
			if(n1>n2)
				return 1;
			else
				return -1;
		}	
	}
	return 0;
}


function setNextFocus(obj){
	if(event.keyCode==13){
		event.keyCode="";
		obj.focus();
	}
}

gth;i++)
	{
		if(isInteger(ss[i])==false)
			return warnInvalid(theField,sInvPhone);		
	}
	return true;
}

function checkIP(theField,enableEmpty)
{
	var s=theField.value;
	if(isEmpty(s))
		if(enableEmpty) return true;
		else return warnInvalid(theField,sInvDigitLetter);
	var ss=s.split(".");
	if(ss.length<4)
		return warnInvalid(theField,sInvIP);
	for(var i=0;i<4;i++)
	{
		if(isInteger(ss[i])==false)
			return warnInvalid(theField,sInvIP);
		var n=parseInt(ss[i]);
		if(n<0||n>255)
			return warnInvalid(theField,sInvIP);
	}
	return true;
}

function f_check_mobile(obj){      
    var regu =/(^[1][3][0-9]{9}$)|(^0[1][3][0-9]{9}$)|(^[1][5][9][0-9]{8}$)/;   
    var re = new RegExp(regu);   
    if (re.test( obj.value )) {   
      return true;   
    }   
    alert(obj,"请输入正确的手机号码");   
    return false;      
}

function compareDate(d1,d2)
{
	var ds1=d1.split("-");
	var ds2=d2.split("-");
	var i;
	for(i=0;i<3;i++)
	{
		var n1;

		if(ds1[i]=="08" || ds1[i]=="09") 
			n1 = parseInt(ds1[i].substring(1));
		else
			n1 = parseInt(ds1[i]);
		var n2;

		if(ds2[i]=="08" || ds2[