function $_(elem,tipo) {
	var elements = new Array();
	var els = document.getElementsByTagName(elem);
	for(var i=0;i<els.length;i++){
		if(els[i].type==tipo){
			elements.push(els[i]);
		}
	}
	return elements;
}

function $(elem){
	return document.getElementById(elem);
}

function $$(elem){
	return opener.window.document.getElementById(elem);
}

/* Tratamiento de errores */
function setError(errorMessage){
    $('errMessagesContent').innerHTML = errorMessage;
    if(getError() != "")
        swapClass($('secMessage'),'errmessagezone');
}

function setWarning(errorMessage){
    $('warnMessagesContent').innerHTML = errorMessage;
    if(getWarning() != "")
        swapClass($('wrnMessage'),'wrnmessagezone');
}

function getError(){
    return $('errMessagesContent').innerHTML;
}

function getWarning(){
    return $('warnMessagesContent').innerHTML;
}

function clearError(){
    swapClass($('secMessage'),'noDisplay');
    return false;
}

function clearWarning(){
    swapClass($('wrnMessage'),'noDisplay');
    return false;
}

function info(obj){
	var str='';	
	for(p in obj){
		str=p+':'+obj[p];
	}
	alert(str);
}
	
/**
* Canvia el styleClass de un objecte
*/
function swapClass(obj,newclass){
	obj.className = newclass;
}

/**
* Quita espacios delante y detrás de un string
*/
function leftTrim(sString)
{
    while (sString.substring(0,1) == ' ') {
        sString = sString.substring(1, sString.length);
    }
    return sString;
}

function rightTrim(sString)
{
    while (sString.substring(sString.length-1, sString.length) == ' ') {
        sString = sString.substring(0,sString.length-1);
    }
    return sString;
}

function trim(str) {
	return rightTrim(leftTrim(str));
}

/**
* Funcio que torna el valor de la propietat CSS 
* d'un element.
*
* @param el element.
* @param la nom de la propietat CSS de l'element.
*/
function css(element,property){
	if (element.style[property]) {
		return element.style[property];
	} else if (element.currentStyle && element.currentStyle[property]!=null) {
		return element.currentStyle[property];
	} else if (document.defaultView && document.defaultView.getComputedStyle) {
		var style = document.defaultView.getComputedStyle(element, null);
		return style.getPropertyValue(property);
	} else{
		return element[property];
	}
}//End function css(element,property)

function linkTo(urlToLink) {
	window.location = urlToLink;
}

/**
* Imprimim
*/
function imprimir(){
	window.print();
}

/**
* Cookies
*/
function createCookie(name,value,hours) {
	if (hours) {
		var date = new Date();
		date.setTime(date.getTime()+(hours*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}


/**
* @desc Devuelve segundos a HH24:MM:SS
*/
function parseSecsToHMS(segundos){
	var resultado = "";
	var minutos= segundos/60;
	var horas=Math.floor(minutos/60);
	var horasD=horas%24;
	var minutos2=Math.floor(minutos%60);
	var segundos_2=segundos%60%60%60;
	var dias = Math.floor(horas/24);

	//configura la salida
	if(segundos >= 86400) {
		resultado += ""+dias+"d&nbsp;";
		resultado += (horasD < 10)? "0" + horasD : horasD;
	} else {
		resultado += (horas < 10)? "0" + horas : horas;
	}
	resultado += (minutos2 < 10) ? ":0" + minutos2 : ":" + minutos2;
	if(segundos < 86400)
		resultado += (segundos_2 < 10) ? ":0" + segundos_2 : ":" + segundos_2;
	
	return resultado;
}

/**
* @desc Devuelve segundos a DD/MM/YYYY HH24:MM:SS
*/
function parseUnixtime2Date(segundos) {
	var fecha = new Date(segundos * 1000);
	fechaString = fecha.toLocaleDateString()+" "+fecha.toLocaleTimeString();
	return fechaString;
}

/**
* @desc Devuelve DD/MM/YYYY HH24:MM:SS a MM/DD/YYYY HH:MM:SS am
*/
function parseDateToLocalDate(fecha) {
	switch('%locale%') {
		case 'es': return fecha;
		case 'en': 
					var hora = fecha.substring(11,13);
					var ampm = 'am';
					if(fecha.substring(11,13) >= 12) {
						ampm = 'pm';
					}
					if(fecha.substring(11,13) > 12) {
						hora = fecha.substring(11,13) - 12;
						if(hora < 10)
							hora = '0'+hora;
					}
					var hora = hora+fecha.substring(13,19)+' '+ampm;
					return fecha.substring(3,5)+"/"+fecha.substring(0,2)+fecha.substring(5,11)+hora;
	}
}

/**
* @desc Devuelve un precio XXX.YY en format local del pais
*/
function parseNumberLocal(number) {
	switch('%locale%') {
		case 'es': return (number.toFixed(2)).replace(/\./, ",");
		case 'en': return number.toFixed(2);
		default: return number.toFixed(2);
	}
}

/**
* @desc Devuelve DD/MM/YYYY HH24:MM:SS a segundos
*/
function parseDate2Unixtime() {
	var fecha = new Date(Date.UTC(year, month-1, day, hour, min, sec));
	return (fecha.getTime()/1000.0);
}

/**
* @desc Devuelve current UNIX TIMESTAMP
*/
function fetchUnixTimestamp() {
	return parseInt(new Date().getTime().toString().substring(0, 10))
}

/**
* @desc Verifica que el campo de entrada es un numérico no decimal
*/
function isNumericNoDecimal(valor) {
	var patron = /^[0-9]+$/;
	return (valor.search(patron) != -1); 
}

/**
* @desc Verifica que el campo de entrada es un numérico
*/
function isNumeric(value) {
  if (value != null && !value.toString().match(/^[-]?\d*\.?\d*$/)) return false;
  return true;
}

/**
* Submit de formularios con la tecla ENTER
*/
function enterSubmit(myfield,e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	
	if(keycode == undefined)
		keycode = e.which;
		
	if (keycode == 13) {
		myfield.form.submit();
		return false;
	} else
		return true;
}
	
function validarDNI(dni) {
	if(dni == "") return false;
	dni = dni.toUpperCase();
	var expReg = /^[0-9]{8}[A-Z]{1}$/;
	if (dni.match(expReg)){
	
		numero = dni.substr(0,dni.length-1);
		let = dni.substr(dni.length-1,1);
		numero = numero % 23;
		letra='TRWAGMYFPDXBNJZSQVHLCKET';
		letra=letra.substring(numero,numero+1);
		if (letra!=let)
			return false;
		return true;
	}
	//VALIDAR UN NIE

   //XYZ
   expReg = /^[XYZ]{1}/;
   if (dni.match(expReg)){
   	  letra = dni.substr(0,1);
   	  dni = dni.substr(1,9);
      
      switch(letra){
      	
      	case 'X': return validarDNI('0'+dni);
      			  break;
      	
      	case 'Y': return validarDNI('1'+dni);
      			  break;
      			  
      	case 'Z': return validarDNI('2'+dni);
      			  break;
      	
      	default: return false;
      }
    }
    return false;
}

function validarMovil(movil) {
	if(movil == "") return true;
	var expRegES= /^6(\d{8})$/;
	var expRegUK= /^0(\d{10})$/;
	if(movil.match(expRegES) || movil.match(expRegUK))
		return true;
	else
		return false;
}

function validarEmail(email) {
	if(email == "") return true;
	var expReg= /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,4})+$/;
	if(email.match(expReg))
		return true;
	else
		return false;
}

function validarFecNacim(dia,mes,ano) {
	iDia = parseInt(dia);
	iMes = parseInt(mes);
	iAno = parseInt(ano);
	
	hoy = new Date();
	anoHoy = hoy.getFullYear();
	mesHoy = hoy.getMonth()+1;
	diaHoy = hoy.getDate();
	
	if((anoHoy-iAno) <= 17)
		return false;
	else if ((anoHoy-iAno) == 18)
	{
		if(mesHoy < iMes)
			return false;
		else if (mesHoy == iMes)
		{
			if (diaHoy < iDia){
				return false;
			}
		}
	}
	return true;
}

/**
*	Limitar text value de limitField a limitNum
*/
function limitText(limitField, limitNum) {
    if (limitField.value.length > limitNum) {
        limitField.value = limitField.value.substring(0, limitNum);
    } 
}
