/* 
	Name   : Javascript Lib Used by WebWork2 Validators.
	Author : scud
	Email  : scud@21cn.com
	Date   : 2004.11.29
*/

//trim string
function _trim(s)
{    
    return s.replace( /^\s*/, "" ).replace( /\s*$/, "" );
}


//is legal number:not support -0x
function _isAllDigits(argvalue)
{
    argvalue = argvalue.toString();
    var validChars = "0123456789";
    var startFrom = 0;
    if (argvalue.substring(0, 2) == "0x")
    {
        validChars = "0123456789abcdefABCDEF";
        startFrom = 2;
    }
    else if (argvalue.charAt(0) == "0")
    {
        validChars = "01234567";
        startFrom = 1;
    }
    else if (argvalue.charAt(0) == "-")
    {
        startFrom = 1;
    }

    for (var n = startFrom; n < argvalue.length; n++)
    {
        if (validChars.indexOf(argvalue.substring(n, n + 1)) ==  - 1)
            return false;
    }
    return true;
}


//is legal float number,not support -0x
function _isAllFloatDigits(argvalue)
{
    argvalue = argvalue.toString();
    var validChars = "0123456789";
    var startFrom = 0;
    
    if (argvalue.charAt(0) == "-")
    {
        startFrom = 1;
    }

    for (var n = startFrom; n < argvalue.length; n++)
    {
        if (validChars.indexOf(argvalue.substring(n, n + 1)) ==  - 1)
            return false;
    }
    return true;
}


//check integer,plusint,byte,short
function invalidInteger(aInt)
{
	//validator output this 
	//if(aInt.length==0) { return false; }

    if (!_isAllDigits(aInt))
    {
        return true;
    }
    else
    {
        var iValue = parseInt(aInt);
        if (isNaN(iValue) )
        { return true; }
    }
    return false;
}

//check one integer not bigger than maxValue or not
function invalidIntMax(aInt,aMax)
{
    var fValue = parseInt(aInt);
    return (fValue > aMax);
}

//check one number is not smaller than min
function invalidIntMin(aInt,aMin)
{	
    var fValue = parseInt(aInt);
    return (fValue < aMin );
}

//check one string length is not longer than maxlen
function invalidStringMaxLen(aValue,aMaxLen,willTrim)
{
  if(willTrim) { aValue = _trim(aValue); }	
  return (aValue.length>aMaxLen);
}

//check one string length is not shorter than minLen
function invalidStringMinLen(aValue,aMinLen,willTrim)
{
  if(willTrim) { aValue = _trim(aValue); }	
  return (aValue.length<aMinLen);
}

//is Unicode char
function _isUnicode(aLetter)
{
	var cLetter = escape(aLetter);	
    return ( (cLetter.charAt(0) == '%') && ( cLetter.charAt(1) == 'u' ) );
}


//get length of one string,one unicode char length deal by lengthbyOneMultiByteChar
function _getStringSaveLen(aStr,lengthByOneMultiByteChar,willTrim)
{
  var count ;
  var aLetter ;
  
  var allLength = 0;
  if(willTrim)  {  	aStr = _trim(aStr);  }
  
  for( count=0; count < aStr.length; count++ )
  {
     	aLetter = aStr.charAt( count ) ;
        if( aLetter.length==1 && _isUnicode(aLetter)==true )
        {
	  		allLength= allLength + lengthByOneMultiByteChar ;
	  	}
		else
		{
	  		allLength++;
	  	}
  }
  
  return allLength;
}

//check one string length is not longer than MaxLen:for multibyte language
function invalidMByteStrMaxLen(aStr,aMaxLen,lengthByOneMultiByteChar,willTrim)
{
  var allLength = _getStringSaveLen(aStr,lengthByOneMultiByteChar,willTrim);
  return (allLength > aMaxLen);
}

//check one string length is not shorter than MinLen:for multibyte language
function invalidMByteStrMinLen(aStr,aMinLen,lengthByOneMultiByteChar,willTrim)
{
  var allLength = _getStringSaveLen(aStr,lengthByOneMultiByteChar,willTrim);
  return (allLength < aMinLen);
}

//check float
function invalidFloat(aValue)
{  	
	//validator output this ?
	//if(aValue.length==0){ return false; }
	
	var tempArray = aValue.split('.');
	var joinedString = tempArray.join('');
	
	if (!_isAllFloatDigits(joinedString))
	{
		return true;
	}
	else
	{
	    var iValue = parseFloat(aValue);
	    if(isNaN(iValue) ) { return true; }
	}	
  	return false;
}

//check float max range
function invalidFloatMax(aFloat,aMax)
{
    var fValue = parseFloat(aFloat);
    return (fValue > aMax);
}

//check float min range
function invalidFloatMin(aFloat,aMin)
{
    var fValue = parseFloat(aFloat);
    return (fValue < aMin );
}

//check url,for convience,user can change script,if writen in code,can't change. 
function invalidURL(aUrl)
{
	//if(aUrl.length==0){ return false; }
	
	var aRE = /^http:\/\/.*\..*/i;
	return !aRE.test(aUrl);
}
//check email
function invalidEmail(aEmail)
{
	if(aEmail.length==0) return false;
	
	return !( /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w+)+$/.test(aEmail) );
}

//
function invalidDataMask(aValue,adatamask)
{
	//if(aValue.length==0) return false;
	
    return (!_matchPattern(aValue,adatamask))
    {
      return true;
    }
}

//one string is fine for maks rule
function _matchPattern(value, mask) 
{   return mask.exec(value);}

