function isEmptyStr(str) {
	str=lrTrim(str);
	if (str.length!=0)
		return false;
	else
		return true;
}

function lTrim(str) {
	var tempRegExp=/^ {1,}/;
	str=str.replace(tempRegExp,"");
	return str;
}

function rTrim(str) {
	var tempRegExp=/ {1,}$/;
	str=str.replace(tempRegExp,"");
	return str;
}

function lrTrim(str) {
	str=lTrim(str);
	str=rTrim(str);
	return str;
}

function isEmailValid(emailStr) {
  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) return false

  var user=matchArray[1]
  var domain=matchArray[2]
  if (user.match(userPat)==null) return false

  var IPArray=domain.match(ipDomainPat)
  if (IPArray!=null) {
    for (var i=1;i<=4;i++) {
      if (IPArray[i]>255) return false
    }
    return true
  }

  var domainArray=domain.match(domainPat)
  if (domainArray==null) 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>4) return false

  if (len<2) return false

  return true;
}

function formatCurrency(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	var sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	var cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function URLEncode(clearString) {
    var output = '';
    var x = 0;
    clearString = clearString.toString();
    var regex = /(^[a-zA-Z0-9_.]*)/;
    while (x < clearString.length) {
        var match = regex.exec(clearString.substr(x));
        if (match != null && match.length > 1 && match[1] != '') {
            output += match[1];
            x += match[1].length;
        } else {
            if (clearString[x] == ' ')
                output += '+';
            else {
                var charCode = clearString.charCodeAt(x);
                var hexVal = charCode.toString(16);
                output += '%' + (hexVal.length < 2 ? '0' : '') + hexVal.toUpperCase();
            }
            x++;
        }
    }
    return output;
}

function isValidNumber(numberStr) {
    if (isEmptyStr(numberStr))
        return true;
        
    if (!isNaN(numberStr))
        return true;
    
    //check if it is a fraction or a percentage    
    if (numberStr.indexOf('/') == -1 && numberStr.indexOf('%') == -1)
        return false;

    if (numberStr.indexOf('/') > -1 && numberStr.indexOf('%') > -1)
        return false;

    if (numberStr.indexOf('/') > -1) {
        var slash = numberStr.indexOf('/');
        var slashLeft = numberStr.substring(0, slash)
        var slashRight = numberStr.substring(slash + 1, numberStr.length);

        //check if it has more than '/'
        if (slashLeft.indexOf('/') > -1 || slashRight.indexOf('/') > -1)
            return false;

        if (isNaN(slashLeft) || isNaN(slashRight))
            return false;
    }

    if (numberStr.indexOf('%') > -1) {
        var numTemp = lrTrim(numberStr);
        var percent = numTemp.indexOf('%');

        if (percent < numTemp.length - 1)
            return false;

        var percentLeft = numTemp.substring(0, percent)

        //check if it has more than '/'
        if (percentLeft.indexOf('%') > -1)
            return false;

        if (isNaN(percentLeft))
            return false;
    }
    
    return true;
}
