// Función para formatear números:
// Recibe: el número, la cantidad de cifras decimales, separador decimal, separador de miles
function number_format(a, b, c, d) {
	// number_format(number, decimals, comma, formatSeparator)
	a = Math.round(a * Math.pow(10, b)) / Math.pow(10, b);
	e = a + '';
	f = e.split('.');
	if(!f[0]) f[0] = '0';
	if(!f[1]) f[1] = '';
	if(f[1].length < b){
		g = f[1];
		for(i = f[1].length + 1; i <= b; i++) {
			g += '0';
		}
		f[1] = g;
	}
	if(d != '' && f[0].length > 3) {
		h = f[0];
		f[0] = '';
		for(j = 3; j < h.length; j += 3) {
			i = h.slice(h.length - j, h.length - j + 3);
			f[0] = d + i +  f[0] + '';
		}
		j = h.substr(0, (h.length % 3 == 0) ? 3 : (h.length % 3));
		f[0] = j + f[0];
	}
	c = (b <= 0) ? '': c;
	return f[0] + c + f[1];
}

//Número con el número de decimales que quieras
function fix(fixNumber, decimalPlaces)
{
var div = Math.pow(10,decimalPlaces);
fixNumber = Math.round(fixNumber * div) / div;
return fixNumber;
}

// Devuelve la primera posición de un caracter en una cadena
// Devuelve -1 si no lo encuentra
function InStr(strSearch, charSearchFor)
{
	for (i=0; i < String(strSearch).length; i++)
	{
	    if (charSearchFor == strSearch.substr(i, 1))
	    {
				return i;
	    }
	}
	return -1;
}

// Controla que el valor introducido en un campo float sea válido.
// También controla la longitud de la parte entera y de la parte decimal.
// Recibe el nombre del formulario, el nombre del campo y el código de la tecla presionada.
// Devuelve true si deja escribir la tecla pulsada y false en caso contrario.
//
// A esta función se la llama en el:
//	 onKeyPress="return ControlFloat('form1', 'nombrecampo', event.keyCode, enteros, decimales);"
function ControlFloat(form, fieldName, code, enteros, decimales)
{
	var field	= formLocateField( form, fieldName );
	var coma = ",";
	var punto = ".";
	var pos_punto=InStr(field.value, punto);
	var pos_coma=InStr(field.value, coma);
	var pos_decimal = -1;
	var parte_entera = '';
	var parte_decimal = '';
	if (pos_punto>pos_coma) {
		pos_decimal = pos_punto;
	} else {
		pos_decimal = pos_coma;
	}
	if (pos_decimal>0) {
		parte_entera = field.value.substr(0,pos_decimal);
		parte_decimal = field.value.substr(pos_decimal+1,field.value.length);
	} else {
		parte_entera = field.value;
		parte_decimal = '';
	}
	
//	if ((code==44) || (code==46)) {
	if (code==46) {
		if (field.value.length==0) {
			return false;
		} 
		if (pos_decimal>0) {
			return false;
		}
	} else {
		if ((code<48) || (code>57)) {
			return false;
		} else {
			if (pos_decimal>0) {
				if (parte_decimal.length>=decimales) {
					return false;
				}
			} else {
				if (parte_entera.length>=enteros) {
					return false;
				}
			}
		}
	}
	
	return true;

}

// Función que recibe una fecha 'dd/mm/yyyy' y devuelve una fecha 'yyyymmdd'
function pasafecha(fori){
  var dia = fori.substr(0,2);
  var mes = fori.substr(3,2);
  var ano = fori.substr(6,4);
  var fechacon = ano + mes + dia;
	return fechacon;
}

// Función que recibe un tipo fecha y un formato y devuelve la fecha formateada
// vDate es una variable Date creada con "new Date()"
// vFormat es un String con el formato a aplicar a la fecha
// Formato: dd son los dias, MM son los meses, yy o yyyy son los años
//					hh son las horas, mm son los minutos, ss son los segundos
// NOTA: Ojo con el mes de la fecha vDate, el método getMonth devuelve los meses
//			 del 0 al 11, por eso se le suma 1
function formatDate(vDate, vFormat){ 
	var vDay              = addZero(vDate.getDate()); 
	var vMonth            = addZero(vDate.getMonth()+1); 
	var vYearLong         = addZero(vDate.getFullYear()); 
	var vYearShort        = addZero(vDate.getFullYear().toString().substring(3,4)); 
	var vYear             = (vFormat.indexOf("yyyy")>-1?vYearLong:vYearShort) 
	var vHour             = addZero(vDate.getHours()); 
	var vMinute           = addZero(vDate.getMinutes()); 
	var vSecond           = addZero(vDate.getSeconds()); 
	var vDateString       = vFormat.replace(/dd/g, vDay).replace(/MM/g, vMonth).replace(/y{1,4}/g, vYear) 
	vDateString           = vDateString.replace(/hh/g, vHour).replace(/mm/g, vMinute).replace(/ss/g, vSecond) 
	return vDateString 
} 
function addZero(vNumber){ 
	return ((vNumber < 10) ? "0" : "") + vNumber 
} 


	// Rellena de ceros a la izquierda
	function padZeros( num, totalLen )
	{

		var count;
		var numStr		= num.toString();
		var numZeros	= totalLen - numStr.length;

		if( numZeros > 0 ) {

			for( count = 0; count < numZeros; count++ ) {

				numStr = "0" + numStr;

				}

			}

		return numStr;

	}

	// Rellena de ceros a la derecha

	function leadZeros( num, totalLen )
	{

		var count;
		var numStr		= num.toString();
		var numZeros	= totalLen - numStr.length;

		if( numZeros > 0 ) {

			for( count = 0; count < numZeros; count++ ) {

				numStr = numStr + "0";

				}

			}

		return numStr;

	}

	// Chequea la hora

	function checkTime( form, fieldName )
	{

		var msg		= "La hora especificada no es válida.";

		var field	= formLocateField( form, fieldName );

		if( field.value.length == 0 ) {

			return true;

			}

		if( field.value.length < 3 ) {

			alert( msg );

			field.select();

			field.focus();

			return false;

			}

		re = /(\d+):(\d+)/;

		if( field.value.match( re ) ) {

			aField	= re.exec( field.value );

			hora		= parseInt( aField[ 1 ], 10 );
			minuto	= parseInt( aField[ 2 ], 10 );

			}
		else {

			hora		= parseInt( field.value.substr( 0, 2 ), 10 );
			minuto	= parseInt( field.value.substr( 2, 2 ), 10 );

			}

		if( isNaN( hora ) || isNaN( minuto ) ) {

			alert( msg );

			field.select();

			field.focus();

			return false;

			}

		hora		= Math.abs( hora );
		minuto	= Math.abs( minuto );

		if( hora > 23 || minuto > 59 ) {

			alert( msg );

			field.select();

			field.focus();

			return false;
	
			}

		field.value = padZeros( hora, 2 ) + ":" + padZeros( minuto, 2 );

		return true;

	}

	// checkDate

	function checkDate( form, fieldName )
	{

		var msg		= "¡¡¡ La fecha especificada no es valida !!!";

		var field	= formLocateField( form, fieldName );

		if( field.value.length == 0 ) {

			return true;

			}

		if( field.value.length < 6 ) {

			alert( msg );

			field.select();

			field.focus();

			return false;

			}

		re = /(\w+)\/(\w+)\/(\w+)/;

		if( field.value.match( re ) ) {

			aField = re.exec( field.value );

			}

		if( ! field.value.match( re ) ) {

			re = /(\w+)\-(\w+)\-(\w+)/;

			if( field.value.match( re ) ) {

				aField = re.exec( field.value );

				}

			}

		if( ! field.value.match( re ) ) {

			aField		= new Array( 4 );

			aField[ 0 ]	= field.value;
			aField[ 1 ] = field.value.substr( 0, 2 );
			aField[ 2 ] = field.value.substr( 2, 2 );
			aField[ 3 ] = field.value.substr( 4, 4 );

			}

		dia	= parseInt( aField[ 1 ], 10 );
		mes	= parseInt( aField[ 2 ], 10 );
		ano	= parseInt( aField[ 3 ], 10 );

		if( isNaN( dia ) || isNaN( mes ) || isNaN( ano ) ) {

			alert( msg );

			field.select();

			field.focus();

			return false;

			}

		dia	= Math.abs( dia );
		mes	= Math.abs( mes );
		ano	= Math.abs( ano );

		if( ano < 25) {

			ano += 2000;

			}

		fecha = new Date( ano, mes - 1, dia );

		dia	= fecha.getDate();
		mes	= fecha.getMonth() + 1;
		ano	= fecha.getFullYear();

		field.value = padZeros( dia, 2 ) + "/" + padZeros( mes, 2 ) + "/" + padZeros( ano, 4 );

		return true;

	}
	
	function checkDate2( form, fieldName )
	{

		var msg		= "¡¡¡ La fecha introducida no es valida, \n utilice formato de fecha dd/mm/aaaa !!!";
			
		var field	= formLocateField( form, fieldName );

		//if( field.value.length == 0 ) {

			//return true;

			//}

		if( field.value.length < 6 ) {

			alert( msg );

			field.select();

			field.focus();

			return false;

			}

		re = /(\w+)\/(\w+)\/(\w+)/;

		if( field.value.match( re ) ) {

			aField = re.exec( field.value );

			}

		if( ! field.value.match( re ) ) {

			re = /(\w+)\-(\w+)\-(\w+)/;

			if( field.value.match( re ) ) {

				aField = re.exec( field.value );

				}

			}

		if( ! field.value.match( re ) ) {

			aField		= new Array( 4 );

			aField[ 0 ]	= field.value;
			aField[ 1 ] = field.value.substr( 0, 2 );
			aField[ 2 ] = field.value.substr( 2, 2 );
			aField[ 3 ] = field.value.substr( 4, 4 );

			}

		dia	= parseInt( aField[ 1 ], 10 );
		mes	= parseInt( aField[ 2 ], 10 );
		ano	= parseInt( aField[ 3 ], 10 );

		if( isNaN( dia ) || isNaN( mes ) || isNaN( ano ) ) {

			alert( msg );

			field.select();

			field.focus();

			return false;

			}

		dia	= Math.abs( dia );
		mes	= Math.abs( mes );
		ano	= Math.abs( ano );

		if( ano < 25 ) {

			ano += 2000;

			}

		fecha = new Date( ano, mes - 1, dia );

		dia	= fecha.getDate();
		mes	= fecha.getMonth() + 1;
		ano	= fecha.getFullYear();

		field.value = padZeros( dia, 2 ) + "/" + padZeros( mes, 2 ) + "/" + padZeros( ano, 4 );

		return field.value;

	}


	// strDigits

	function strDigits( str )
	{

		var texto = "";

		for( count = 0; count < str.length; count++ ) {

			if( isNaN( str.substr( count, 1 ) ) ) {

				continue;

				}

			texto += str.substr( count, 1 );

			} 

		return texto;

	}

	// strAlpha

	function strAlpha( str )
	{

		var s_alpha = "";

		for( count = 0; count < str.length; count++ ) {

			c_str = str.charAt( count );

			if(	( c_str >= "A" && c_str <= "Z" ) ||
					( c_str >= "a" && c_str <= "z" ) ||
					( c_str == "ñ" && c_str == "Ñ" ) ) {

				s_alpha += c_str;

				}

			} 

		return s_alpha;

	}

	// fieldDigits

	function fieldDigits( form, fieldName )
	{

		var field = formLocateField( form, fieldName );

		field.value = strDigits( field.value );

		return field;

	}

	// checkNIF

	function checkNIF( form, fieldName )
	{

		var field = formLocateField( form, fieldName );

		var dni = strDigits( field.value );

		return field.value = dni + checkStrNIF( dni );

	}

	// checkNIF2
	function checkNIF2( form, fieldName )
	{
	
		var field = formLocateField( form, fieldName );

		var dni = strDigits( field.value );

		if (field.value == dni + checkStrNIF( dni ) ) {
			return true;
		} else {
			return false;
		}

	}
	
	// checkStrNIF

	function checkStrNIF( dni )
	{

		var cv = [ "T","R","W","A","G","M","Y","F","P","D","X","B","N","J","Z","S","Q","V","H","L","C","K","E","T" ];

		dni = strDigits( dni );

		if( ! isNaN( parseInt( dni ) ) ) {

			var nif = Math.abs( dni ) - ( Math.abs( Math.floor( dni / 23 ) ) * 23 );

			return cv[nif];

			}

		return "";

	}

	
	// formOnFocus

	function formOnFocus( form, fieldType, fieldName, statusMsg )
	{

		// NUMERICO

		if( fieldType == 0 || fieldType == 1 || fieldType == 2 ) {

			field = fieldDigits( form, fieldName );

			field.select();

			window.status = statusMsg;

			return true;

			}

		return false;

	}

	// formOnBlur

	function formOnBlur( form, fieldType, fieldName )
	{

		// NUMERICO

		if( fieldType == 0 ) {

			field = fieldDigits( form, fieldName );

			window.status = '';

			return true;

			}

		// FECHA

		if( fieldType == 1 ) {

			window.status = '';

			return checkDate( form, fieldName );

			}

		// HORA

		if( fieldType == 2 ) {

			window.status = '';

			return checkTime( form, fieldName );

			}

		return false;

	}

	// form_focus

	function form_focus( form_name, field_name )
	{

		field =	document.forms[form_name].elements[field_name];

		if( field.type == "text" ) {

			field.select();

			}

		field.focus();

		return true;

	}

	// form_on_focus

	function form_on_focus( form_name, field_name )
	{

		field =	document.forms[form_name].elements[field_name];

		// MENSAJE

		//alert(field.comentario);
		if( field.comentario != "" ) {

			window.status = field.comentario;

			}

		// FECHA Y HORA

		if( field.tipo == "F" || field.tipo == "H" ) {

			field.value = strDigits( field.value );

			field.select();

			return true;

			}

		// NUMERICO

		return true;

	}

	// form_on_change

	function form_on_change( form_name, field_name )
	{

		return true;

	}

	// form_on_blur

	function form_on_blur( form_name, field_name )
	{

		field =	document.forms[form_name].elements[field_name];

		// MENSAJE

		if( field.comentario != "" ) {

			window.status = '';

			}

		// TIPO NUMERICO

		if( field.tipo == "N" ) {

			if( field.nulo && field.value.length == 0 ) {

				return true;

				}

			signo = "";

			if( field.signo == "-" ) {

				signo = "-";

				}

			field.value = field.value.replace( /[+-]/gi, "" );

			// DECIMALES

			n_start = field.value.lastIndexOf( "." );

			if( n_start < 0 ) {

				n_decimals	= 0;

				n_integer	= parseInt( strToNumber( field.value ) );

				}
			else {

				n_decimals	= parseInt( strToNumber( field.value.substr( n_start + 1 ) ) );

				n_integer	= parseInt( strToNumber( field.value.substr( 0, n_start ) ) );

				}

			if( field.decimales ) {

				s_decimals	= n_decimals.toString();

				s_decimals	= s_decimals.substr( 0, field.decimales ) + "." + s_decimals.substr( field.decimales ) + "0";

				n_decimals	= Math.round( s_decimals );

				s_decimals	= leadZeros( n_decimals, field.decimales );

				n_value		= parseFloat( n_integer + "." + s_decimals );

				}
			else {

				n_value		= parseFloat( n_integer + ".0" );

				}

			// MAXIMO Y MINIMO

			if( field.maximo != "" && n_value > field.maximo ) {

				alert( "El valor especificado es mayor que el maximo admitido de " + field.maximo );

				field.select();

				field.focus();

				return false;
	
				}

			if( field.minimo != "" && n_value < field.minimo ) {

				alert( "El valor especificado es menor que el minimo admitido de " + field.minimo );

				field.select();

				field.focus();

				return false;
	
				}

			if( field.decimales ) {

				field.value = n_integer + "." + s_decimals;

				}
			else {

				if( n_integer ) {

					field.value = n_integer;

					}
				else {
 
					// Para que no borre el 0 de los campos de texto

 					if( n_integer == "0" ) {

						field.value = n_integer;

						}

					else {

						field.value = "";

						}

					}

				}

			if( field.value.length ) {

				field.value = signo + field.value;

				}

			}

		if( field.tipo == "A" ) {

			field.value = field.value.substr( 0, field.mantisa );

			if( field.formato == "M" ) {

				field.value = field.value.toUpperCase();

				}

			if( field.formato == "m" ) {

				field.value = field.value.toLowerCase();

				}

			field.value = strAlpha( field.value );

			if( field.nulo && field.value.length == 0 ) {

				return true;

				}

			if( field.value.length == 0 ||
				( field.enumerar != "" && field.enumerar.indexOf( "," + field.value + "," ) == -1 ) ) {

				alert( "El valor especificado no esta dentro del siguiente rango de valores " + field.enumerar );

				field.select();

				field.focus();

				return false;
	
				}

			}

		// TIPO FECHA

		if( field.tipo == "F" ) {

			if( field.value.length == 0 ) {

				return true;

				}

			return checkDate( form_name, field_name );

			}

		return true;

	}

	function localeDateToArray( localeDate )
	{

		var fecha = [ "", "", "" ];

		seccion = 0;

		for( count = 0; count < localeDate.length; count++ ) {

			if( localeDate.charAt( count ) == "/" ) {

				seccion++;

				}
			else {
	
				fecha[seccion] = fecha[seccion] + localeDate.charAt( count );

				} 

			}

		return fecha;

	}

	function localeDateToIsoDate( localeDate )
	{

		var fecha = localeDateToArray( localeDate );

		return fecha[2] + "-" + fecha[1] + "-" + fecha[0];

	}

	function localeDateToNumber( localeDate )
	{

		if( localeDate.length ) {

			var fecha = localeDateToArray( localeDate );

			}
		else {

			var hoy = new Date();

			fecha = Array( hoy.getDate(), hoy.getMonth() + 1, hoy.getFullYear() );

			}

		fecha[0] = parseInt( fecha[0], 10 );
		fecha[1] = parseInt( fecha[1], 10 );
		fecha[2] = parseInt( fecha[2], 10 );

		return ( fecha[2] * 10000 ) + ( fecha[1] * 100 ) + fecha[0];

	}

	function timeToArray( localeTime )
	{

		var hora = [ "", "", "" ];

		seccion = 0;

		for( count = 0; count < localeTime.length; count++ ) {

			if( localeTime.charAt( count ) == ":" ) {

				seccion++;

				}
			else {
	
				hora[seccion] = hora[seccion] + localeTime.charAt( count );

				}

			}

		return hora;

	}

	function timeToNumber( localeTime )
	{

		return parseInt( strDigits( localeTime ), 10 );

	}

	function checkEmptyField( form, fieldName, descripcion )
	{
		if (isFormField( form , fieldName )) {
			
			var msg     = "¡¡¡ El campo " + descripcion + " es obligatorio !!! ";
	
			var field   = formLocateField( form, fieldName );
		
			trim(field);
			
			if( field.value.length ) {
	
				return true;
	
				}
	
			alert( msg );
	
			if (field.type != "select-one") field.select();
	
			field.focus();
	
			return false;
		
		} else {
		
			return false;
		
		}

	}

	function	strToNumber( str )
	{

		str = strDigits( str )

		if( str.length == 0 ) {

			str = "0";

			}

		return str;

	}

	function fieldToNumber( field )
	{

		field.value	= strToNumber( field.value );

	}

	function fieldToString( field )
	{

		if( field.value == "0" ) {

			field.value	= "";

			}

	}
	
	function trim(campo) {
		while(''+campo.value.charAt(0)==' ')campo.value=campo.value.substring(1,campo.value.length);
		while(''+campo.value.charAt(campo.value.length-1)==' ')campo.value=campo.value.substring(0,campo.value.length-1);
	}
	
	function ltrim(campo) {
		while(''+campo.value.charAt(0)==' ')campo.value=campo.value.substring(1,campo.value.length);
	}
	
	function rtrim(campo) {
		while(''+campo.value.charAt(campo.value.length-1)==' ')campo.value=campo.value.substring(0,campo.value.length-1);
	}
	
	function dm( msgStr )
	{

		window.status = msgStr;

	}

	function formSubmit( form, vaccion )
	{

		document.forms[form].accion.value = vaccion;

		document.forms[form].submit();

	}

	function formLocateField( form, fieldName )
	{

		return document.forms[form].elements[fieldName];

	}

/*
	{

		for( count = 0; count < document.forms[form].elements.length; count++ ) {

			if( document.forms[form].elements[count].name == fieldName ) {

				field = document.forms[form].elements[count];

				return field;
	
				}

			}

		alert( "No existe el campo: " + fieldName );

		return null;

	}
*/
	function isFormField( form, fieldName )
	{

		for( count = 0; count < document.forms[form].elements.length; count++ ) {

			if( document.forms[form].elements[count].name == fieldName ) {

				return true;

				}

			}

		return false;

	}

	function formUpperFields( form )
	{

		for( count = 0; count < document.forms[form].elements.length; count++ ) {

			if( document.forms[form].elements[count].type == "text" ) {

				document.forms[form].elements[count].value = document.forms[form].elements[count].value.toUpperCase();

				}

			}

		return true;

	}

	function formSelectOption( form, fieldName, value )
	{

		field = formLocateField( form, fieldName );

		if( field.type == "select-one" ) {

			for( count = 0; count < field.length; count++ ) {

				if( field.options[count].value == value ) {

					field.selectedIndex = count;

					break;

					}

				}

			}

		return true;

	}

	function formFocusField( form, fieldName )
	{

		field = formLocateField( form, fieldName );

		field.focus();

		return true;

	}

	function formSetFieldValue( form, fieldName, fieldValue )
	{

		field = formLocateField( form, fieldName );

		field.value = fieldValue;

		return true;

	}
	
	function comprobar_correo(e) {
		
		ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.@-_QWERTYUIOPASDFGHJKLZXCVBNM";
		
		for(i=0; i < e.length ;i++){
			
			if(ok.indexOf(e.charAt(i))<0) return (false);	
		
		} 
			
		if (document.images) {
			
			re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
			re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
			
			if (!e.match(re) && e.match(re_two)) return (-1);		 
	
		}
	
	}

	function CerosCodigo(v) {
		trim(v);
//		if (v.value==parseInt(v.value)) {
			valor = "0000000000" + v.value;
			valor = valor.substr(v.value.length,10);
			return valor;
//		} else {
//			return v.value;
//		}
	}
