// JavaScript Document
String.prototype.Capitalize = function(){
    var str_array = this.split(' ');
    for(var i=0,l=str_array.length;i<l;i++){
        str_array[i] = (((str_array[i].substring(0,1)) .toUpperCase()) + (str_array[i].substring(1,(str_array[i].length)).toLowerCase()));
    };
    return str_array.join(' ');
};

String.prototype.toBoolean = function(){
    var str = this;
    str=str.toLowerCase();
    switch(str){
        case "1":
        case "true":
        case "yes":
        case "y":
        case 1:
        case true:
            return true;
        break;
        default:
            return false;
    };
};

String.prototype.BigTrim = function(){
	return this.replace(/^[ \t]+|[ \t]+$/img, "");
};

String.prototype.Trim = function(chars) {
	var str = this;
	str = str.lTrim(chars);
	str = str.rTrim(chars);
	return str;
};
  
String.prototype.lTrim = function(chars) {
	var str = this;
    var chars = chars || "\\s";   
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");   
};
  
String.prototype.rTrim = function(chars) {   
    var str = this;
    var chars = chars || "\\s";   
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");   
};

String.prototype.numberToWords = function(){
  var th = ['','thousand','million','billion','trillion'];
  // uncomment this line for English Number System
  // var th = ['','thousand','million','milliard','billion'];

  var dg = ['zero','one','two','three','four','five','six','seven','eight','nine'];
  var tn = ['ten','eleven','twelve','thirteen','fourteen','fifteen','sixteen','seventeen','eighteen','nineteen'];
  var tw = ['twenty','thirty','forty','fifty','sixty','seventy','eighty','ninety'];
  
  s = this.toString();
  s = s.replace(/[\, ]/g,'');
  if (s != String(parseFloat(s))) return 'not a number';
  var x = s.indexOf('.');
  if (x == -1) x = s.length;
  if (x > 15) return 'too big';
  var n = s.split('');
  var str = '';
  var sk = 0;
  for (var i=0; i < x; i++) {
    if ((x-i)%3==2) {
      if (n[i] == '1') {
        str += tn[Number(n[i+1])] + ' ';
        i++;
        sk=1;
      }
      else if (n[i]!=0) {
        str += tw[n[i]-2] + ' ';
        sk=1;
      };
    }
    else if (n[i]!=0) {
      str += dg[n[i]] +' ';
      if ((x-i)%3==0) str += 'hundred ';
      sk=1;
    };
    if ((x-i)%3==1) {
      if (sk) str += th[(x-i-1)/3] + ' ';
      sk=0;
    };
  };
  if (x != s.length) {
    var y = s.length;
    str += 'point ';
    for (var i=x+1; i<y; i++) str += dg[n[i]] +' ';
  };
  return str.replace(/\s+/g,' ');
};

String.prototype.URLEncode = function(){
  var output = '';
  var x = 0;
	var regex = /(^[a-zA-Z0-9_.-]*)/;
	
  clearString = this.toString();
	clearString = clearString.replace(/'/g, "\"");
	clearString = clearString.replace(/\\/g, "");
	
  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;
};

String.prototype.URLDecode = function(){
  var output = this;
  var binVal, thisString;
  var myregexp = /(%[^%]{2})/;
  while ((match = myregexp.exec(output)) != null
             && match.length > 1
             && match[1] != '') {
    binVal = parseInt(match[1].substr(1),16);
    thisString = String.fromCharCode(binVal);
    output = output.replace(match[1], thisString);
  };
  return output;
};