/**
* Test if it is an object and has no constructors.
*/
function isAlien(a) { return isObject(a) && typeof a.constructor != 'function' }
/**
* isArray?
*/
function isArray(a) { return isObject(a) && a.constructor == Array }
/**
* isBoolean?
*/
function isBoolean(a) { return typeof a == 'boolean' }
/**
* isFunction?
*/
function isFunction(a) { return typeof a == 'function' }
/**
* isNull?
*/
function isNull(a) { return typeof a == 'object' && !a }
/**
* isNumber?
*/
function isNumber(a) { return typeof a == 'number' && isFinite(a) }
/**
* isObject?
*/
function isObject(a) { return (a && typeof a == 'object') || isFunction(a) }
/**
* isRegexp?
* we would prefer to use instanceof, but IE/mac is crippled and will choke at it
*/
function isRegexp(a) { return a && a.constructor == RegExp }
/**
* isString?
*/
function isString(a) { return typeof a == 'string' }
/**
* isUndefined?
*/
function isUndefined(a) { return typeof a == 'undefined' }
/**
* isEmpty?
*/
function isEmpty(o) {
var i, v;
if (isObject(o)) {
for (i in o) {
v = o[i];
if (isUndefined(v) && isFunction(v)) {
return false;
}
}
}
return true;
}
/**
* alias for isUndefined
*/
function undef(v) { return isUndefined(v) }
/**
* alias for !isUndefined
*/
function isdef(v) { return !isUndefined(v) }
/**
* true if o is an Element Node or document or window. The last two because it's used for onload events
if you specify strict as true, return false for document or window
*/
function isElement(o, strict) {
return o && isObject(o) && ((!strict && (o==window || o==document)) || o.nodeType == 1)
}
/**
* true if o is an Array or a NodeList, (NodeList in Opera returns a type of function)
*/
function isList(o) { return o && isObject(o) && (isArray(o) || o.item) }
if(!Prado) var Prado = {};
Prado.Util = {}
/**
* Pad a number with zeros from the left.
* @param integer number
* @param integer total string length
* @return string zero padded number
*/
Prado.Util.pad = function(number, X)
{
X = (!X ? 2 : X);
number = ""+number;
while (number.length < X)
number = "0" + number;
return number;
}
/**
* Convert a string into integer, returns null if not integer.
* @param {string} the string to convert to integer
* @type {integer|null} null if string does not represent an integer.
*/
Prado.Util.toInteger = function(value)
{
var exp = /^\s*[-\+]?\d+\s*$/;
if (value.match(exp) == null)
return null;
var num = parseInt(value, 10);
return (isNaN(num) ? null : num);
}
/**
* Convert a string into a double/float value. Internationalization
* is not supported
* @param {string} the string to convert to double/float
* @param {string} the decimal character
* @return {float|null} null if string does not represent a float value
*/
Prado.Util.toDouble = function(value, decimalchar)
{
decimalchar = undef(decimalchar) ? "." : decimalchar;
var exp = new RegExp("^\\s*([-\\+])?(\\d+)?(\\" + decimalchar + "(\\d+))?\\s*$");
var m = value.match(exp);
if (m == null)
return null;
var cleanInput = m[1] + (m[2].length>0 ? m[2] : "0") + "." + m[4];
var num = parseFloat(cleanInput);
return (isNaN(num) ? null : num);
}
/**
* Convert strings that represent a currency value (e.g. a float with grouping
* characters) to float. E.g. "10,000.50" will become "10000.50". The number
* of dicimal digits, grouping and decimal characters can be specified.
* The currency input format is very strict, null will be returned if
* the pattern does not match.
* @param {string} the currency value
* @param {string} the grouping character, default is ","
* @param {int} number of decimal digits
* @param {string} the decimal character, default is "."
* @type {float|null} the currency value as float.
*/
Prado.Util.toCurrency = function(value, groupchar, digits, decimalchar)
{
groupchar = undef(groupchar) ? "," : groupchar;
decimalchar = undef(decimalchar) ? "." : decimalchar;
digits = undef(digits) ? 2 : digits;
var exp = new RegExp("^\\s*([-\\+])?(((\\d+)\\" + groupchar + ")*)(\\d+)"
+ ((digits > 0) ? "(\\" + decimalchar + "(\\d{1," + digits + "}))?" : "")
+ "\\s*$");
var m = value.match(exp);
if (m == null)
return null;
var intermed = m[2] + m[5] ;
var cleanInput = m[1] + intermed.replace(
new RegExp("(\\" + groupchar + ")", "g"), "")
+ ((digits > 0) ? "." + m[7] : "");
var num = parseFloat(cleanInput);
return (isNaN(num) ? null : num);
}
/**
* Trim the value, if the value is undefined, empty string is return.
* @param {string} string to be trimmed.
* @type {string} trimmed string.
*/
Prado.Util.trim = function(value)
{
if(!isString(value)) return "";
return value.replace(/^\s+|\s+$/g, "");
}