// **************************************************
// *
// * STRING FUNCTIONS
// *
// **************************************************

function replace(strVal, fromVal, toVal) {
  return strVal.replace(fromVal, toVal);
}

function rtrim(strVal) {
  var objRegExp = /^([\w\W]*)(\b\s*)$/;
  if ( objRegExp.test(strVal) )
    strVal = strVal.replace(objRegExp, '$1');
  return strVal;
}

function ltrim(strVal) {
  var objRegExp = /^(\s*)(\b[\w\W]*)$/;
  if ( objRegExp.test(strVal) )
    strVal = strVal.replace(objRegExp, '$2');
  return strVal;
}

function trim(strVal) {
  return ltrim(rtrim(strVal));
}

// **************************************************
// *
// * CURRENCY FUNCTIONS
// *
// **************************************************

function str2cur(obj) {
  obj.value = str2cur_v(obj.value);
}

function str2cur_v(strVal) {
  if ( isBlank(strVal) ) return "";

  strVal = strVal.toString().replace(/\$|\,/g,'');
  if ( isNaN(strVal) )
    strVal = "0.00";
  return strVal;
}

function cur2str(obj) {
  obj.value = cur2str_v(obj.value);
}

function cur2str_v(curVal) {
  if ( isBlank(curVal) ) return "";

  var sign, cents;

  curVal = curVal.toString().replace(/\$|\,/g,'');
  if ( isNaN(curVal) )
    curVal = "0";

  sign = ( curVal == Math.abs(curVal) );

  curVal = Math.abs(curVal);  
  curVal = Math.floor(curVal * 100 + 0.50000000001);	// 100 - 2 decimal, +0.5 rounding off

  cents = curVal % 100;
  if ( cents < 10 )
    cents = "0" + cents;
    
  curVal = Math.floor(curVal/100).toString();
  for (var i=0; i<Math.floor((curVal.length-(i+1))/3); i++)
    curVal = curVal.substring(0,curVal.length-(i*4+3))+','+
			curVal.substring(curVal.length-(i*4+3));

  // return (( sign ) ? '' : '-' ) + '$' + curVal + '.' + cents;
  return (( sign ) ? '' : '-' ) + curVal + '.' + cents;
}

// **************************************************
// *
// * DATETIME FUNCTIONS
// *
// **************************************************

function isDatePeriod(dtmFrom, dtmUntil) {
  return ( Date.parse(dtmFrom) <= Date.parse(dtmUntil) );
}

function isLeapYear(iYear) {
  if ( iYear % 400 == 0 ) return true;
  if ( iYear % 100 == 0 ) return "";
  if ( iYear % 4 == 0 ) return true;
  return "";
}

function dtm2str(obj) {
  obj.value = dtm2str_v(obj.value);
}

function dtm2str_v(dateString) {
  if ( isBlank(dateString) ) {
    errCode = 0;
    return "";
  }
  
  var errCode = 0;
  var bFound = false;

  var dateArray;
  var iDay, iMonth, iYear;
  var sDay, sMonth, sYear;
  var arrayOfDelimiter = new Array("-", " ", "/", ".");
  var arrayOfMonth = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun",
				"Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
  
  // dd-mm-yyyy, dd-mmm-yyyy, mm-dd-yyyy, mmm-dd-yyyy
  for (var i=0; i<arrayOfDelimiter.length; i++)
    if (dateString.indexOf(arrayOfDelimiter[i]) != -1) {
      dateArray = dateString.split(arrayOfDelimiter[i]);
      if ( dateArray.length != 3 ) {
        errCode = 1
        return "";
      }
    
      sDay = dateArray[0];
      sMonth = dateArray[1];
      sYear = dateArray[2];
      bFound = true;
      break;
    }

  // ddmmyyyy, mmddyyyy
  if (( !bFound ) && ( dateString.length > 5 )) {
    sDay = dateString.substr(0, 2);
    sMonth = dateString.substr(2, 2);
    sYear = dateString.substr(4);
  }
   
  if ( sYear.length == 2 )
    sYear = "20" + sYear;

  iDay = parseInt(sDay, 10);
  if ( isNaN(iDay) ) {
    errCode = 2;
    return "";
  }
   
  iMonth = parseInt(sMonth, 10);
  if ( isNaN(iMonth) ) {
    for (i=0;i<12;i++)
      if ( sMonth.toUpperCase() == arrayOfMonth[i].toUpperCase() ) {
	iMonth = i+1;
        sMonth = arrayOfMonth[i];
      }
  }
   
  if (isNaN(iMonth)) {
    errCode = 3;
    return "";
  }

  iYear = parseInt(sYear, 10);
  if (isNaN(iYear)) {
    errCode = 4;
    return "";
  }
  
  // Try to sway
  if (( iMonth > 12 ) && ( iDay <= 12 )) {
    var iTemp = iMonth;
    iMonth = iDay;
    iDay = iTemp;
  }
  
  if (( iMonth < 1 ) || ( iMonth > 12 )) {
    errCode = 5;
    return "";
  }
    
  switch (iMonth) {
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:

      if (( iDay < 1 ) || ( iDay > 31 )) {
        errCode = 6;
        return "";
      }
      
      break;
      
    case 4:
    case 6:
    case 9:
    case 11:

      if (( iDay < 1 ) || ( iDay > 30 )) {
        errCode = 6;
        return "";
      }
      
      break;
      
    case 2:
      if ( iDay < 1 ) {
        errCode = 6;
        return "";
      }
      
      if ( isLeapYear(iYear) ) {
	if ( iDay > 29 ) {
	  errCode = 6;
	  return "";
	}
      } else {
	if ( iDay > 28 ) {
	  errCode = 6;
	  return "";
	}
      }
      
      break;
  }
  
  var dateStringOutput = iDay + " " + arrayOfMonth[iMonth-1] + " " + sYear;
  // var dateStringOutput = iYear * 10000 + iMonth * 100 + iDay;
  return dateStringOutput;  
}

// **************************************************
// *
// * VERIFY FUNCTIONS
// *
// **************************************************

function isBlank(strVal) {
  return ( strVal == "" );
}

function isNotEmpty(strVal) {
  return ( isBlank(strVal) ) ? false : true;
}

function isAlphabet(strVal) {
  if ( isBlank(strVal) )
    return false;
  var objRegExp = /(^-?[a-z]*$)/i;
  return objRegExp.test(strVal);
}

function isNumeric(strVal) {
  if ( isBlank(strVal) )
    return false;
  var objRegExp  = /(^-?\d\d*$)/;
  return objRegExp.test(strVal);
}

function isEnglishName(strVal) {
  if ( isBlank(strVal) )
    return false;
  var objRegExp = /(^-?[a-z\-\s,._']*$)/i;
  return objRegExp.test(strVal);
}

function isChinese(strVal) {
  if ( isBlank( trim(strVal) ) )
    return false;
  var re1 = new RegExp("^[\u4E00-\u9FFF]*$");	//Chinese character range 
  var re2 = new RegExp("^[\u3400-\u4DFF]*$");	//Chinese character range
  var re3 = new RegExp("^[\u20000-\u2A6DF]*$");	//Chinese character range
  var re4 = new RegExp("^[\uF900-\uFAFF]*$");	//Chinese character range
  var re5 = new RegExp("^[\u2F800-\u2FA1F]*$");	//Chinese character range

  return ( re1.test(strVal) || 
  	re2.test(strVal) ||
  	re3.test(strVal) ||
  	re4.test(strVal) ||
  	re5.test(strVal) );
}

function isAlphaNumeric(strVal) {
  var bAlphabet = isAlphabet(strVal);
  var bNumeric = isNumeric(strVal);
  return (( bAlphabet ) || ( bNumeric ));
}

function isDecimal(strVal) {
  var objRegExp = /(^-?\d*\.\d*$)/i;
  return objRegExp.test(strVal);
}

function isLogonName(strVal) {
  if ( isBlank(strVal) )
    return false;

  if ( strVal.length < 4 )
    return false;
	
  var objRegExp = /(^[a-z][a-z_\d]*$)/i;
  return objRegExp.test(strVal);
}

function isMobileNum(strVal) {
  if ( isBlank(strVal) )
    return false;

  if ( strVal.length != 8 )
    return false;
	
  if ( !isNumeric(strVal) )
    return false;
	
  return true;
}

function isPhoneNum(strVal) {
  return isMobileNum(strVal);
}

function isEmailAddr(strVal) {
  if ( isBlank(strVal) )
    return false;

  if ( strVal.length < 4 )
    return false;
	
  var aChar = strVal.charAt(0);
  var zChar = strVal.charAt(strVal.length - 1);
  if (( aChar == '@' ) || ( aChar == '.' ))	return false;
  if (( zChar == '@' ) || ( zChar == '.' ))	return false;
    
  var aIndex = strVal.indexOf('@');
  var zIndex = strVal.lastIndexOf('.');
  if (( aIndex < 0 ) || ( zIndex < 0 )) 		return false;
  if ( aIndex > zIndex )				return false;
    
  return true;
}




