
	// 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 valida.";

		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 < 38 ) {

			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 numberFormat( sNumber, nDecs )
	{

		var sInt = '';
		var sDec = '';
		var sNum = '';
		var nNum = 0.0;

		if( nDecs ) {

			nNum = Math.round( sNumber * Math.pow( 10, nDecs ) ) / Math.pow( 10, nDecs ) + 1.0 / Math.pow( 10, nDecs + 1 );

			sNum = nNum.toString();

			sInt = sNum.substr( 0,	sNum.indexOf( '.' ) );

			sDec = sNum.substr( sNum.indexOf( '.' ) + 1, nDecs );

			}
		else {

			nNum = Math.round( sNumber );

			sInt = nNum.toString();

			}

		nFmt = 0;

		sFmt = '';

		nDot = Math.floor( ( sInt.length / 3 ) + ( ( sInt.length % 3 ) > 0 ) - 1 );

		nOff = ( sInt.length % 3 );

		if( ! nOff ) {

			nOff += 3;

			}

		for( nFmt = 0; nFmt < sInt.length; nFmt++ ) {

			sFmt += sInt.charAt( nFmt );

			if( nFmt + 1 == nOff && nDot > 0 )  {

				sFmt += '.';

				nOff += 3;

				nDot--;

				}

			}

		if( nDecs ) {

			sFmt += ',' + sDec;

			}

		return sFmt;

	}

	function numberValue( sNumber, nDecs )
	{

		var sNum = '';

		for( count = 0; count < sNumber.length; count++ ) {

			if( isNaN( sNumber.substr( count, 1 ) ) ) {

				if( sNumber.substr( count, 1 ) == ',' ) {

					if( sNum.indexOf( '.' ) < 0 ) {

						sNum += '.';

						}

					}

				}
			else {

				sNum += sNumber.substr( count, 1 );

				}

			} 

		if( sNum.indexOf( '.' ) < 0 ) {

			sNum += '.0';

			}

		return parseFloat( sNum );

	}

	// 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 );

	}

	// 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 "";

	}

	function checkStrEmail( email )
	{

// (!ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$'))

	}


	// 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

		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 )
	{

		var msg     = "El campo debe tener valor.";

		var field   = formLocateField( form, fieldName );

		if( field.value.length ) {

			return true;

			}

		alert( msg );

		field.select();

		field.focus();

		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	= "";

			}

	}
