  function NewWindow(mypage,myname,w,h,scroll)
  {
    var win = null;
    LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
    TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
    settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+''
    win = window.open(mypage,myname,settings)
    if(win.window.focus){win.window.focus();}
  }

// Crea efecto en las imagenes con los eventos del mouse
	function MM_preloadImages() { //v3.0
		var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
			var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
			if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
	}

	function MM_swapImgRestore() { //v3.0
		var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
	}

	function MM_findObj(n, d) { //v4.01
		var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
			d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
		if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
		for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
		if(!x && d.getElementById) x=d.getElementById(n); return x;
	}

	function MM_swapImage() { //v3.0
		var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
		 if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
	}
// ********************************************************

// Obliga a colocar solo numeros en un campo.
	function maskKeyPress(objEvent) 
	{
		var iKeyCode;  	
		iKeyCode = objEvent.keyCode;			
		if(iKeyCode>=48 && iKeyCode<=57) return true;
		return false;
	}
// Como usar:
// <input type="text" name="txtCedula" size="20" maxlength="20" onKeyPress="return maskKeyPress(event)">

// ********************************************************

// Produce un efecto visual
	function mOvr(src,color_entrada) {src.bgColor=color_entrada; src.style.cursor="default"; }
	function mOut(src,color_default) {src.bgColor=color_default; src.style.cursor="default"; }
// ********************************************************

// Valida los campos vacios
	function fm_campoVacio (campo, nombre){
		if (campo.value==""){
			alert ("Ingrese un valor en el campo " + nombre + ".");
			campo.focus();
			return false;
		}
		return true;
	}
// ********************************************************

// ini --  Esta funcion valida la cantidad de caracteres por textarea, 11-Jun-04
// aplicar esta funcion en el evento OnKeyPress y OnBlur
	function maxLenText(campo, maxChar)
	{
		if ( campo.value.length >= maxChar ) 
		{
			alert("Este campo sólo permite un máximo de " + maxChar + " caracteres ");
			campo.value=campo.value.substring(0,maxChar);
			campo.focus();
			return false;
		}
	}
// fin --  Esta funcion valida la cantidad de caracteres por textarea, 11-Jun-04

	// ******************************************************************************

  // Esta función se encarga de ir contando los caracteres ingresados en un textarea y va disminuyendo del textbox que indica la cantidad de caracteres permitidos,
  // y la dejo abierta al público que NO puede pensar y solo sabe copiar las cosas buenas.
  function textCounter(field, countfield, maxlimit) 
  {
    if (field.value.length > maxlimit)
      field.value = field.value.substring(0, maxlimit);
    else
      countfield.value = maxlimit - field.value.length;
  }
	// Como usar:
	// <textarea name="TxtResumen" rows="3" cols="80" wrap="physical" onKeyDown="textCounter(this.form.TxtResumen,this.form.remLen1,500);" onKeyUp="textCounter(this.form.TxtResumen,this.form.remLen1,500);"></textarea>
	// <input readonly type="text" name="remLen1" size="3" maxlength="3" value="500">

  // ******************************************************************************

	// Esta funcion cuenta los caracteres ingresados en un textarea
	function TextKeyDown(campo, countfield, vlMax)
	{
		if (campo.value.length > vlMax)
			campo.value = campo.value.substring(0, vlMax);
			countfield.innerText = vlMax -  campo.value.length;	
	}
	// Como usar:
	// <textarea name="txtDir_Emp" id="txtDir_Emp" accesskey="d" rows="4" cols="80" wrap="physical" onKeyDown="TextKeyDown(this.form.txtDir_Emp, txtCounter, 250);" onKeyUp="TextKeyDown(this.form.txtDir_Emp, txtCounter, 250);"></textarea>
	// <div style="margin-left: 5px"><span id="txtCounter" title="Cantidad máxima de caracteres permitidos">250</span></div>

  // ******************************************************************************

  /**************************************************************************************************************
 DESCRIPCION:  JS que automaticamente le da formato numerico a un campo, en el mimso momento en que se escribe.
***************************************************************************************************************/
function fm_formato_moneda(fld, milSep, decSep, e, vt_long) 
{
	var sep = 0;
	var key = '';
	var i = j = 0;
	var len = len2 = 0;
	var strCheck = '0123456789';
	var aux = aux2 = '';
	var whichCode = (window.Event) ? e.which : e.keyCode;
	if (whichCode == 13) return true;				// Enter
	key = String.fromCharCode(whichCode);			// Get key value from key code
	if (strCheck.indexOf(key) == -1) return false;  // Not a valid key
	len = fld.value.length;
	for(i = 0; i < len; i++)
	if ((fld.value.charAt(i) != '0') && (fld.value.charAt(i) != decSep)) break;
	aux = '';
	for(; i < len; i++)
	if (strCheck.indexOf(fld.value.charAt(i))!=-1) aux += fld.value.charAt(i);
	aux += key;
	len = aux.length;
	if (len == 0) fld.value = '';
	if (len == 1) fld.value = '0'+ decSep + '0' + aux;
	if (len == 2) fld.value = '0'+ decSep + aux;
	if (len > 2) {
	aux2 = '';
	for (j = 0, i = len - 3; i >= 0; i--) {
	if (j == 3) {
	aux2 += milSep;
	j = 0;
	}
	aux2 += aux.charAt(i);
	j++;
	}
	fld.value = '';
	len2 = vt_long		// cometado por Carlos Muñoz ->  aux2.length;
	for (i = len2 - 1; i >= 0; i--)
	fld.value += aux2.charAt(i);
	fld.value += decSep + aux.substr(len - 2, len);
	}
	return false;
}

  // ******************************************************************************

  function formatCurrency(num)
  {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
    cents = "0" + cents;
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
    num = num.substring(0,num.length-(4*i+3))+','+
    num.substring(num.length-(4*i+3));
    return (((sign)?'':'-') + num + '.' + cents);
  }

  // ******************************************************************************

  function getHTTPObject() {
    var xmlhttp;
    /*@cc_on
    @if (@_jscript_version >= 5)
       try {
          xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (e) {
          try {
             xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (E) { xmlhttp = false; }
       }
    @else
    xmlhttp = false;
    @end @*/
    if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
      try {
        xmlhttp = new XMLHttpRequest();
      } catch (e) { xmlhttp = false; }
    }
    return xmlhttp;
  }

  // ******************************************************************************