function strtoupper(str) {
 return str.toUpperCase();
}
function str_replace(search,replace,subject) {
 var f = search, r = replace, s = subject;
 var ra = is_array(r), sa = is_array(s), f = [].concat(f), r = [].concat(r), i = (s = [].concat(s)).length;
 while (j = 0, i--) {
  while (s[i] = s[i].split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
 };
 return sa ? s : s[0];
}
function round(val,precision) {
 var precision = (round.arguments.length > 1) ? round.arguments[1] : 0;
 return Math.round(val * Math.pow(10, precision))/Math.pow(10, precision);
}
function number_format(number,decimals,dec_point,thousands_sep) {
 var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
 var d = dec_point == undefined ? "." : dec_point;
 var t = thousands_sep == undefined ? "," : thousands_sep, s = n < 0 ? "-" : "";
 var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
 return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}
function is_numeric(mixed_var) {
 return !isNaN(mixed_var);
}
function is_array(mixed_var) {
 return ( mixed_var instanceof Array );
}
function substr( f_string, f_start, f_length ) {
 if(f_start < 0) {
  f_start += f_string.length;
 }
 if(f_length == undefined) {
  f_length = f_string.length;
 }
 else if(f_length < 0){
  f_length += f_string.length;
 }
 else {
  f_length += f_start;
 }
 if(f_length < f_start) {
  f_length = f_start;
 }
 return f_string.substring(f_start, f_length);
}
function array() {
 return Array.prototype.slice.call(arguments);
}
function array_push (array) {
 var i, argv = arguments, argc = argv.length;
 for (i=1; i < argc; i++){
  array[array.length++] = argv[i];
 }
 return array.length;
}
function strtolower(str) {
 return str.toLowerCase();
}
function ucwords(str) {
 return str.replace(/^(.)|\s(.)/g, function ( $1 ) { return $1.toUpperCase ( ); } );
}
function strlen(string){
 return ("" + string).length;                                                                                                                                                                                                            
}
function floor(string) {
 string = str_replace('e','',string);
 if(is_numeric(string)) {
  return Math.floor(string);
 }
 else {
  return '0';
 }
}

function trim(str,charlist) {
 var whitespace;
 if(!charlist){
  whitespace = ' \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000';
 } else{
  whitespace = charlist.replace(/([\[\]\(\)\.\?\/\*\{\}\+\$\^\:])/g, '\$1');
 }
 for (var i = 0; i < str.length; i++) {
  if (whitespace.indexOf(str.charAt(i)) === -1) {
   str = str.substring(i);
   break;
  }
 }
 for (i = str.length - 1; i >= 0; i--) {
  if (whitespace.indexOf(str.charAt(i)) === -1) {
   str = str.substring(0, i + 1);
   break;
  }
 }
 return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
}

function str_pad( input, pad_length, pad_string, pad_type ) {
 var half = '', pad_to_go;
 var str_pad_repeater = function(s, len){
 var collect = '', i;
 while(collect.length < len) collect += s;
  collect = collect.substr(0,len);
  return collect;
 };
 if (pad_type != 'STR_PAD_LEFT' && pad_type != 'STR_PAD_RIGHT' && pad_type != 'STR_PAD_BOTH') {
  pad_type = 'STR_PAD_RIGHT';
 }
 if ((pad_to_go = pad_length - input.length) > 0) {
  if (pad_type == 'STR_PAD_LEFT') {
   input = str_pad_repeater(pad_string, pad_to_go) + input;
  }
  else if (pad_type == 'STR_PAD_RIGHT') {
   input = input + str_pad_repeater(pad_string, pad_to_go);
  }
  else if (pad_type == 'STR_PAD_BOTH') {
   half = str_pad_repeater(pad_string, Math.ceil(pad_to_go/2));
   input = half + input + half;
   input = input.substr(0, pad_length);
  }
 }
 return input;
}
function rand(min, max) {
 if(max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
 }
 else {
  return Math.floor(Math.random() * (min + 1));
 }
}

