
function isObject(a)
{
    return (a && typeof a == 'object');
}

function isArray(a)
{
    return isObject(a) && a.constructor == Array;
}

function isString(a)
{
    return typeof a == 'string';
}

function isNull(a)
{
    return typeof a == 'object' && !a;
}

function isNumber(a)
{
    return typeof a == 'number' && isFinite(a);
}

function isNumeric(a)
{
	var validChars = "0123456789";
	var i;
	
	if ((!isString(a) && !isNumber(a)) || a.length == 0) {
		return false;
	}
	
	for (i = 0; i < a.length; i++)
	{ 
		if (validChars.indexOf(a.charAt(i)) == -1)  {
			return false;
		}
	}
	return true;
}

function isBoolean(a)
{
    return typeof a == 'boolean';
}

function isEmpty(o)
{
    var i, v;
    if (isObject(o))
    {
        for (i in o)
        {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    else if (isString(o))
    {
    	if (o.length > 0) {
    		return false;
    	}
    }
    return true;
}

function isFunction(a)
{
    return typeof a == 'function';
}

function isUndefined(a)
{
    return typeof a == 'undefined';
} 

function	explode(separator, string, limit)
{
	if (separator == '') {
		return false;
	}
	var pieces = new Array();
	var	elm = 0;
	var	startPos = 0;
	var	endPos = 0;
	while (1)
	{
		endPos = string.indexOf(separator, startPos);
		if (endPos == -1) {
			endPos = string.length;
		}
		// recopie du texte dans le tableau
		pieces[elm++] = string.substring(startPos, endPos);
		startPos = endPos = endPos + separator.length;
		
		// on s'arrête là si nécessaire
		if (startPos >= string.length) {
			break;
		}
	}
	return pieces;
}

function	is_array(variable)
{
   var source = variable.toSource();
   
   return (source.search(/^\[([^,]*,)+[^,]*\]/) != -1);
}

function	serialize(val, key)
{
	var str = '';
	var tmp = '';
	var	len;
	var i;
	
	if (isNull(val)) {
		return 'N;';
	}
	else if (isBoolean(val)) {
		return val ? 'b:1;' : 'b:0;';
	}
	else if (isArray(val))
	{
		str+= 'a:';
		len = 0;
		var tmp = '';
		for (i in val)
		{
			tmp+= serialize(i, true);
			tmp+= serialize(val[i]);
			len++;
		}
		str+= len + ':{' + tmp;
		str+= '}';
		return str;
	}
	else if (isNumber(val)) {
		return 'i:' + val + ';';
	}
	else if (isBoolean(key) && key && isNumeric(val)) {
		return 'i:' + parseInt(val) + ';';
	}
	else if (isString(val)) {
		return 's:' + val.length + ':"' + val + '";';
	}
	else {
		return 's:0:"";';
	}
}

function	disableForm(form)
{
	if (!form) {
		return ;
	}
	var size = form.elements.length;

	for (var i = 0; i < size; i++)
	{
		if (form.elements[i].disabled === true) {
			form.elements[i].rdisabled = true;
		}
		form.elements[i].disabled = true;
	}
}

function	enableForm(form)
{
	if (!form) {
		return ;
	}
	var size = form.elements.length;
	
	for (var i = 0; i < size; i++)
	{
		if (!form.elements[i].rdisabled === true) {
			form.elements[i].disabled = false;
		}
	}
	/*for (var i in form.elements)
	{
		if (isObject(form.elements[i].type) && form.elements[i].type.match('^input|textarea|select$')) {
			//form.elements[i].disabled = false;
		}
	}*/
}

function	addslashes(str)
{
	str = str.replace(/"/g, '\"');
	str = str.replace(/'/g, '\\\'');
	return str;
}

function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft+= obj.offsetLeft;
			obj = obj.offsetParent;
		}
	}
	else if (obj.x) {
		curleft += obj.x;
	}
	return curleft;
}

function findPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop;
			obj = obj.offsetParent;
		}
	}
	else if (obj.y) {
		curtop += obj.y;
	}
	return curtop;
}

function sprintf(s) {
	var bits = s.split('%');
	var out = bits[0];
	var re = /^([ds])(.*)$/;

	for (var i = 1; i < bits.length; i++) {
		p = re.exec(bits[i]);

		if (!p || arguments[i]==null) 
			continue;
		
		if (p[1] == 'd') {
			out += parseInt(arguments[i], 10);
		} 
		else if (p[1] == 's') {
			out += arguments[i];
		}
		out += p[2];
	}	
	return out;
}