function isArray(object)
{
    return object.constructor == Array;
}

/**
 * trim
 */
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g,"");
}

/**
 * Busca needle en haystack
 */
function in_array(needle, haystack)
{
    var haystack = haystack.toString();

    if (haystack == '') {
        return false;
    }

    var pattern = new RegExp(needle, 'g');
    var matched = pattern.test(haystack);

    return matched;
}

/**
 * Elimina todos los elementos excepto el primero del select cuyo
 * id se indica como parámetro.
 */
function removeSelectOptions(id)
{
	var select          = document.getElementById(id);
	var select_numelems = select.length;

	for (i = select_numelems; i > 0; i--) {
		select.remove(i);
	}
}

/**
 * Añade las opciones en el select id.
 *
 * El array de opciones de ser de la forma:
 *
 *	options[0]['text']
 *	options[0]['value']
 */
function addSelectOptions(options, id)
{
	var select     = document.getElementById(id);
	var numoptions = options.length;

	for (i = 0; i < numoptions; i++) {
		option = document.createElement('option');
		option.text  = options[i]['text'];
		option.value = options[i]['value'];

		select.options.add(option);
	}
}

/**
 * Selecciona todos los options del select con nombre name
 */
function selectAllOptions(name) {
    var input;

    input = document.getElementById(name);

    for (i = 0; i < input.length; i++) {
        input.options[i].selected = true;
    }
}

/**
 * Selecciona todos los checkboxes con nombre name
 */
function selectAllCheckboxes(name) {
    var inputs;

    inputs = document.getElementsByTagName('input');

    for (i = 0; i < inputs.length; i++) {
        if (inputs[i].name == name && inputs[i].type == 'checkbox') {
            inputs[i].checked = true;
        }
    }
}

/**
 * Selecciona checkbox anidados.
 *
 * Los ids se deben corresponder con la expresión regular (texto_)+,
 * donde 'texto' es cualquier texto y '_' es cualquier separador que
 * no debe aparecer entre el texto.
 *
 * Obviamente, para anidar los checkboxes hay que anidar los ids.
 *
 * La llamada a la función se debe hacer con la parte significativa del
 * identificador, terminándola con el separador.
 */
function checkNestedIds(idname, checked)
{
    len_idname = idname.length;

    for (var i=0; i < document.formulario.length; i++) {
        elem = document.formulario[i];
        if (elem.type == 'checkbox' && elem.id.substr(0, len_idname) == idname) {
            elem.checked = checked;
        }
    }
}

/**
 * Hace el preload de las imágenenes que se pasan como argumentos
 * (MacroMedia)
 */
function preloadImages()
{
	var d = document;

	if (d.images) {
		if (!d.p) {
			d.p = new Array();
		}

		var i, j = d.p.length, a = preloadImages.arguments;

		for (i = 0; i < a.length; i++) {
			if (a[i].indexOf("#") != 0) {
				d.p[j]       = new Image;
				d.p[j++].src = a[i];
			}
		}
	}
}

/**
 * Activa los flash que haya en la página
 */
function activateFlash()
{
	objects = document.getElementsByTagName('object');

	for (var i = 0; i < objects.length; i++) {
		objects[i].outerHTML = objects[i].outerHTML;
	}
}

/**
 * Devuelve el valor del input radio de nombre name
 */
function getRadioValue(name)
{
	var inputs  = document.getElementsByTagName('input');

	for (i = 0; i < inputs.length; i++) {
		if (inputs[i].type == 'radio' && inputs[i].name == name && inputs[i].checked) {
			var value = inputs[i].value;
			break;
		}
	}

	return value;
}

/**
 * Escribe el mensaje msg en la zona cuyo id se pasa como argumento
 */
function writeInnerMsg(id, msg)
{
	var element = document.getElementById(id);

	element.innerHTML = msg;
}

/**
 * Valida el formato de una dirección de correo
 */
function isValidMailFormat(email)
{
	re = /^[-_.a-zA-Z0-9]+@[-_.a-zA-Z0-9]+\.[a-zA-Z]+(\.[a-zA-Z]+)*$/;

	return re.test(email);
}

/**
 * Determina si un texto contiene espacios en blanco
 */
function hasBlankSpaces(text)
{
	re = /( )+/;

	return re.test(text);
}

/**
 * Comprueba si el navegador tiene habilitadas las cookies y si no, redirige
 * a url
 */
function testCookieSupport(url)
{
    document.cookie = "cookieSupport=true;expires=Thu, 31 Dec 2999 23:59:59 GMT";

    if (document.cookie.indexOf('cookieSupport') == -1) {
        window.location = url;
    }
}

/**
 * Alterna la el display del elemento cuyo id se pasa como parámetro
 */
function toggleDisplay(id)
{
    var elem = document.getElementById(id);

    if (elem.style.display == 'none') {
        elem.style.display = '';
    } else {
        elem.style.display = 'none';
    }
}
