function getNomMes(numMes){
  var arrMes= new Array();
  arrMes[1]="Enero";
  arrMes[2]="Febrero";
  arrMes[3]="Marzo";
  arrMes[4]="Abril";
  arrMes[5]="Mayo";
  arrMes[6]="Junio";
  arrMes[7]="Julio";
  arrMes[8]="Agosto";
  arrMes[9]="Septiembre";
  arrMes[10]="Octubre";
  arrMes[11]="Noviembre";
  arrMes[12]="Diciembre";
  return arrMes[parseInt(numMes,10)];
}

function getNomDia(fecha){
  //el formato de la fecha es yyyymmdd

  var anho = String(fecha).substring(0,4);
  var mes = String(fecha).substring(4,6);
  var dia =String(fecha).substring(6,8);

  var d = new Date(anho, parseInt(mes,10) - 1, dia); //los meses comienzan desde cero
  var weekday= new Array(7);
  weekday[0]="Dom";
  weekday[1]="Lun";
  weekday[2]="Mar";
  weekday[3]="Mie";
  weekday[4]="Jue";
  weekday[5]="Vie";
  weekday[6]="Sab";

  return weekday[d.getDay()];
}

function FixProblemEmbeddedObjects(){
/*Esta funcion permite desabilitar el menu contextual que aparece por defecto en flash*/
    var objs = document.getElementsByTagName('object');
    for (var i = 0; i < objs.length; i++){
        //alert(321);
        var objParent = objs[i].parentNode;
        var sp = document.createElement('span');
        objParent.insertBefore(sp, objs[i]);
        sp.appendChild(objs[i]);
        strHTML = sp.innerHTML;
        sp.removeChild(objs[i]);
        sp.innerHTML = strHTML;
    }

    objs = document.getElementsByTagName('embed');
    for (var i = 0; i < objs.length; i++){
        //alert(123);
        var objParent = objs[i].parentNode;
        var sp = document.createElement('span');
        objParent.insertBefore(sp, objs[i]);
        sp.appendChild(objs[i]);
        strHTML = sp.innerHTML;
        sp.removeChild(objs[i]);
        sp.innerHTML = strHTML;
    }
}

function mostrarDivCentrado(idDiv){
  var xPos;
  var yPos;
  var divEliminar = document.getElementById(idDiv);
  if(document.all){
    //xPos = event.clientX + document.body.scrollLeft;
    //yPos = event.clientY + document.body.scrollTop + 35;
    xPos = document.documentElement.clientWidth;
    yPos = document.documentElement.clientHeight;
  }else{
    //xPos = document.documentElement.clientWidth;
    //yPos = document.documentElement.clientHeight;
    xPos = window.innerWidth;
    yPos = window.innerHeight;
  }
  //var scrollV = document.body.scrollTop;
  scrollV = document.documentElement.scrollTop;

  divEliminar.style.display = 'block';

  xPos = (xPos-divEliminar.clientWidth)/2;
  yPos = (yPos-divEliminar.clientHeight)/2 + scrollV;

  divEliminar.style.left = xPos + 'px';
  divEliminar.style.top = yPos + 'px';
}

// ---------------------------------------
// INICIO Variables Globales
// ---------------------------------------

// Funciones de mensajes de Error
var arrMensajesError = new Array();
var arrMensajesSistema = new Array();

// ---------------------------------------
// FIN Variables Globales
// ---------------------------------------

// ---------------------------------------
// INICIO Funciones de Eventos del Teclado
// ---------------------------------------

function isCtrlPressed(e) {
  return(e? e.ctrlKey: window.event.ctrlKey);
}

function isShiftPressed(e) {
  return(e? e.shiftKey: window.event.shiftKey);
}

function isAltPressed(e) {
  return(e? e.altKey: window.event.altKey);
}

// ---------------------------------------
// FIN Funciones de Eventos del Teclado
// ---------------------------------------


// ---------------------------------------------------
// INICIO Funciones de Eventos y propiedades del Mouse
// ---------------------------------------------------

// nqfh: quÃ© hace esta funciÃ³n?
function getMouseObject(e) {
  var ev = (e? (e.target? e.target: window.event.srcElement) : (window.event ? window.event.srcElement : null));
  if (ev != null){
    return ev;
  }else{
    var ev;
    var arrIframes = document.getElementsByTagName('iframe');
    for(var i=0; i<arrIframes.length; i++){
      if (arrIframes[i].contentWindow){
        var evTemp = arrIframes[i].contentWindow.window.event;
        if (evTemp){
          ev = evTemp;
          break;
        }
      }
    }
    return(ev? ev.srcElement: null);
  }
}

function getMouseX(e) {
  if (e != null){
    return(e.clientX? e.clientX: window.event.clientX);
  }else{
    return(window.event? window.event.clientX: null);
  }

//    if (!e) e = window.event;
//    var theLeft;
//    if (document.documentElement && document.documentElement.scrollLeft){
//        theLeft = document.documentElement.scrollLeft;
//    }else if (document.body){
//        theLeft = document.body.scrollLeft;
//    }
//    return(e.clientX + theLeft);
}

function getMouseY(e) {
  if (e != null){
    return(e.clientY? e.clientY: window.event.clientY);
  }else{
    return(window.event? window.event.clientY: null);
  }

//    if (!e) e = window.event;
//    var theTop;
//    if (document.documentElement && document.documentElement.scrollTop){
//        theTop = document.documentElement.scrollTop;
//    }else if (document.body){
//        theTop = document.body.scrollTop
//    }
//    return(e.clientY + theTop);
}

function isMouseBelowObject (e,objTarget) {
  var iMouseTop = getMouseY(e) + getWindowScrollTop();
  var iObjTop = getAbsTop(objTarget);
  var iObjHeight = objTarget.clientHeight;
  var iObjBottom = iObjTop + iObjHeight;
  if (iMouseTop <= iObjBottom) {
    return false;
  } else {
    return true;
  }
}

function isMouseAboveObject (e,objTarget) {
  var iMouseTop = getMouseY(e) + getWindowScrollTop();
  var iObjTop = getAbsTop(objTarget);
  if (iMouseTop >= iObjTop) {
    return false;
  } else {
    return true;
  }
}

function isMouseRightOffObject (e,objTarget) {
  var iMouseLeft = getMouseX(e) + getWindowScrollLeft();
  var iObjLeft = getAbsLeft(objTarget);
  var iObjWidth = objTarget.clientWidth;
  var iObjRight = iObjLeft + iObjWidth;
  if (iMouseLeft <= iObjRight) {
    return false;
  } else {
    return true;
  }
}

function isMouseLeftOffObject (e,objTarget) {
  var iMouseLeft = getMouseX(e) + getWindowScrollLeft();
  var iObjLeft = getAbsLeft(objTarget);
  if (iMouseLeft >= iObjLeft) {
    return false;
  } else {
    return true;
  }
}

function isMouseAfterObject (e,objTarget) {
  return isMouseBelowObject(e,objTarget) || isMouseRightOffObject(e,objTarget);
}

function isMouseBeforeObject (e,objTarget) {
  return (isMouseLeftOffObject(e,objTarget) && !isMouseBelowObject(e,objTarget)) || isMouseAboveObject(e,objTarget);
}

// ---------------------------------------------------
// FIN Funciones de Eventos y propiedades del Mouse
// ---------------------------------------------------

// --------------------------------------------------------------
// INICIO Funciones de Posicion o VisualizaciÃ³n de elementos HTML
// --------------------------------------------------------------

function mostrarObjeto(varObjeto, idObjeto, blnMostrar){
  if(varObjeto == null){
    if(idObjeto == null){
      //nqfh: decidir si existirÃ¡ esta variable
//      if(DEBUG){
        alert('No se mandaron los parÃ¡metros de la funciÃ³n mostrarObjeto');
//      }
      return false;
    }
    varObjeto = document.getElementById(idObjeto);
    if (varObjeto == null){
      alert('No existe el objeto ' + idObjeto);
      return false;
    }
  }
  if (blnMostrar == true){
    varObjeto.style.display = '';
  } else {
    varObjeto.style.display = 'none';
  }
  return true;
}

// <Posicion Absoluta de un elemento>
function getAbsLeft(el){
  var l = el.offsetLeft;
  while(el = el.offsetParent)
    l+=el.offsetLeft;
  return l;
}

function getAbsTop(el){
  var t = el.offsetTop;
  while(el = el.offsetParent)
  //while((el=el.parentNode) && el!=document)
  t+=el.offsetTop;
  return t;
}
// </Posicion Absoluta de un elemento>

// <Posicion Relativa de un elemento>
function getOffLeft(el){
  return el.offsetLeft;
}

function getOffTop(el){
  return el.offsetTop;
}
// </Posicion Relativa de un elemento>


// <Posicion de las Barras de Desplazamiento (ScrollBars)>
function getWindowScrollLeft() {
  return window.pageXOffset ? window.pageXOffset : (document.body.scrollLeft ? document.body.scrollLeft : document.documentElement.scrollLeft);
}

function getWindowScrollTop() {
  return window.pageYOffset ? window.pageYOffset : (document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop);
}
// </Posicion de las Barras de Desplazamiento (ScrollBars)>

function getWindowWidth(){
	return window.innerWidth ? window.innerWidth : document.body.clientWidth;
}

function getWindowHeight(){
	return window.innerHeight ? window.innerHeight : document.body.clientHeight;
}


// ---------------------------------------------------
// FIN Funciones de Posicion de elementos HTML
// ---------------------------------------------------


// ---------------------------------------------------------
// INICIO Funciones de que trabajan sobre las clases CSS
// ---------------------------------------------------------

function agregarClase(objTarget,nomClase,idTarget,blnEliminaClases) {
  var claseSpecial = new String;
  if (objTarget == null){
   var objTarget = document.getElementById(idTarget);
  }
  if (objTarget != null){
      if (blnEliminaClases == true){
        eliminarClases(objTarget, idTarget);
      }
      if (String(objTarget.className).indexOf(nomClase) < 0) {
          objTarget.className = objTarget.className + ' ' + nomClase;
      }
  }
}

function removerClaseById(idObjTarget,nomClase) {
  var objTarget = document.getElementById(idObjTarget);
  removerClase(objTarget, nomClase);
}

function agregarClaseById(idObjTarget,nomClase) {
  var objTarget = document.getElementById(idObjTarget);
  agregarClase(objTarget, nomClase);
}

function removerClase(objTarget,nomClase,idTarget) {
  if (objTarget == null){
   var objTarget = document.getElementById(idTarget);
  }
  if (objTarget != null){
      objTarget.className = String(objTarget.className).replace(nomClase,'');
  }
}

function eliminarClases(objTarget,idTarget) {
  if (objTarget == null){
   var objTarget = document.getElementById(idTarget);
  }
  if (objTarget != null){
      objTarget.className = '';
  }
}

// ---------------------------------------------------------
// FIN Funciones de que trabajan sobre las clases CSS
// ---------------------------------------------------------

// ---------------------------------------------------------
// INICIO Funciones de que leen QueryString o cambian la URL
// ---------------------------------------------------------

function goBack(){
	//window.history.back()
	history.go(-1)
}

function redirectToURL(strURL, blnNewWindow) {
	if (blnNewWindow){
		window.open(strURL, "WinE", "resizable=yes,scrollbars=yes");
//width=300
//Use this to define the width of the new window.
//
//height=200
//Use this to define the height of the new window.
//
//toolbar=yes or no
//Whether or not the new window should have the browser navigation bar at the top (The back, foward, stop buttons..etc.).
//
//location=yes or no
//Whether or not you wish to show the location box with the current url (The place to type http://address).
//
//directories=yes or no
//Whether or not the window should show the extra buttons. (what's cool, personal buttons, etc...).
//
//status=yes or no
//Whether or not to show the window status bar at the bottom of the window.
//
//menubar=yes or no
//Whether or not to show the menus at the top of the window (File, Edit, etc...).
//
//copyhistory=yes or no
//Whether or not to copy the old browser window's history list to the new window.
	}else{
		window.location = strURL;
	}
}

function getQueryStringArgs() {
	var args = new Object();
	var query = location.search.substring(1);
	var pairs = query.split('&');
	for(var i = 0; i < pairs.length; i++) {
	var pos = pairs[i].indexOf('=');
	if (pos == -1) {
	continue;
	}
	var argname = pairs[i].substring(0,pos);
	var value = pairs[i].substring(pos+1);
	args[argname] = unescape(value);
	}
	return args;
}

// ---------------------------------------------------
// FIN Funciones de que leen o cambian la URL
// ---------------------------------------------------

// ---------------------------------------------------
// INICIO Funciones de Pantalla (que trabajan sobre el Screen)
// ---------------------------------------------------

function clearSelection () {
	if (document.selection){
	  document.selection.empty();
  }else{
    if (window.getSelection){
	    window.getSelection().removeAllRanges();
	  }
	}
}

// ---------------------------------------------------
// FIN Funciones de Pantalla (que trabajan sobre el Screen)
// ---------------------------------------------------

// -------------------------------------------------------
// INICIO Funciones de lectura/escritura en elementos HTML
// -------------------------------------------------------

// Funciones de Lectura

// -------------------------------------------------------
// INICIO Funciones de lectura/escritura en elementos HTML
// -------------------------------------------------------

// Funciones de Lectura

function getObjectValue(idObjeto){
	var varObjeto = document.getElementById(idObjeto);
	return getObjectValueByObject(varObjeto);
/*
  var strTypeOrTagName = getObjectTypeOrTagName(varObjeto);
	switch (strTypeOrTagName){
	  case 'DIV':
	  case 'SPAN':
	    return getDivValue(idObjeto);
		  break;
	  case 'RADIO':
      var varNameRbl = varObjeto.name;
      return getRblSelectedItem(varNameRbl);
		  break;
	  case 'CHECKBOX':
      var varPrefijoCbl = String(idObjeto).split('_')[0]
		  return getItemsObjectCbl(varPrefijoCbl);
		  break;
//	  case 'SELECT-ONE':
//		  break;
	  default: // nqfh: HIDDEN ,  text | textarea -> deberÃ­an estar en los case; si no, los tags no contemplados van a tratarse como textboxes
		  return varObjeto.value;
		  break;
	}
*/
}

function getObjectValueById(idObjeto){
	var varObjeto = document.getElementById(idObjeto);
	return getObjectValueByObject(varObjeto);
}

function getObjectValueByObject(varObjeto){
  var strTypeOrTagName = getObjectTypeOrTagName(varObjeto);
	switch (strTypeOrTagName){
	  case 'DIV':
	  case 'SPAN':
	    return getDivValue(varObjeto.id);
		  break;
	  case 'RADIO':
      var varNameRbl = varObjeto.name;
      return getRblSelectedItem(varNameRbl);
		  break;
	  case 'CHECKBOX':
      var varPrefijoCbl = String(idObjeto).split('_')[0]
		  return getItemsObjectCbl(varPrefijoCbl);
		  break;
//	  case 'SELECT-ONE':
//		  break;
	  case 'SELECT-ONE':
      return varObjeto.options[varObjeto.selectedIndex].value;
		  break;
	  default: // nqfh: HIDDEN , text | textarea -> deberÃ­an estar en los case; si no, los tags no contemplados van a tratarse como textboxes
		  return varObjeto.value;
		  break;
	}
}

function getDivValue(idDiv){
  var objDiv = document.getElementById(idDiv);
  if(objDiv != null){
    return getInnerText(objDiv);
  }
}

function getRblSelectedItem(rblName){
  // Devuelve el Ã­tem seleccionado del Rbl con nombre rblName
  // Si no existe o no estÃ¡ seleccionado ninguno, devuelve -1
	var arrObjRbl = document.getElementsByName(rblName);
	for (i=0 ; i<arrObjRbl.length ; i++){
		var objRbl = arrObjRbl[i];
		if (objRbl.checked == true){
			return i; //objRbl.id;
	  }
	}
	return -1;
}

// nqfh: que devuelve esta funcion? adecuar el nombre; poner ejemplo
function getItemsObjectCbl(prefCblId, idContenedor){
  //Recibe: prefCblId: prefijo de los cbl buscados; Ej: id='cblNombres_1' -> prefCblId='cblNombres'
  //Devuelve concatenaciÃ³n de parejas de chk (el postfijo) y valor (0 Ã³ 1), separadas por '_'
  // Ej: si hay 3 chk: cblNombres_1, cblNombres_2 y cblNombres_3, con el segundo chequeado, devuelve: 1;0_2;1_3;0
	var objContenedor = document.getElementById(idContenedor);
	if (objContenedor == null){
		objContenedor = document.getElementsByTagName('body')[0];
	}
	var strCblItemsValues = '';
	var arrObjCbl = objContenedor.getElementsByTagName('input');
	for (i=0 ; i<arrObjCbl.length ; i++){
		var objCblItem = arrObjCbl[i];
		if (String(objCblItem.id).split('_')[0] == prefCblId){
			if (objCblItem.checked == true){
				strCblItemsValues += String(objCblItem.id).split('_')[1] + ';1_'
			} else {
				strCblItemsValues += String(objCblItem.id).split('_')[1] + ';0_'
			}
		}
	}
	strCblItemsValues += 'dummy';
	strCblItemsValues = strCblItemsValues.replace('_dummy',''); // se quita el _dummy agregado al filal del loop
	return strCblItemsValues;
}

// nqfh: esta con mayusculas solo por compatibilidad con versiones anteriores
function GetInnerText (node){
	return (node.textContent || node.innerText || node.text);
}

function getInnerText (node){
	return (node.textContent || node.innerText || node.text);
}

// Funciones de Escritura

function setObjectValue(idObjeto, varValue, blnSetFocus,blnSelect,blnOmitirValue){
	var varObjeto = document.getElementById(idObjeto);
	var strTypeOrTagName = getObjectTypeOrTagName(varObjeto);
	switch (strTypeOrTagName){
	  case 'DIV':
	  case 'SPAN':
	  case 'LABEL':
	    setDivValue(idObjeto, varValue);
		  //escribirMensajeInDiv(Valor,varObjeto);
		  break;
	  case 'RADIO':
  	  //setRblValue(idObjeto, varValue);
      var varNameRbl = varObjeto.name;
	    setRblItem(varNameRbl, varValue);
		  break;
	  case 'CHECKBOX':
		  setChkValue(idObjeto, varValue, null);
		  break;
//	  case 'SELECT-ONE':
//		  break;
	  default: // nqfh: text y textarea -> deberÃ­an estar en los case; si no, los tags no contemplados van a tratarse como textboxes
	  	if (blnOmitirValue != true){
	  		varObjeto.value = varValue;
	  	}
		  if (blnSelect == true){
		  	varObjeto.select();
		  }
		  break;
	}
	if (blnSetFocus == true){
		varObjeto.focus();
	}
	return true;
}

function setDivValue(idDiv, varValue){
  var objDiv = document.getElementById(idDiv);
  if(objDiv != null){
    setObjectInnerText(objDiv, varValue);
  }
}

function setChkValue(idCbl, varValue, idContenedor){
	var objContenedor = document.getElementById(idContenedor);
	if (objContenedor == null){
		objContenedor = document.getElementsByTagName('body')[0];
	}
	var arrObjCbl = objContenedor.getElementsByTagName('input');
	for (i=0; i<arrObjCbl.length; i++){
		var objCbl = arrObjCbl[i];
		if (objCbl.id == idCbl){
		  if (varValue == '0' || varValue == false || varValue == null){
		    varValue = false;
		  } else {
		    varValue = true;
		  }
			objCbl.checked = varValue;
			break;
		}
	}
	return true;
}

function setRblItem(rblName, iItem){
  // Setea el iItem del Rbl con el nombre rblName
	var arrObjRbl = document.getElementsByName(rblName);
	if (arrObjRbl.length > 0){
	  if (iItem >=0 && iItem < arrObjRbl.length){
	    arrObjRbl[iItem].checked = true;
	  }
	}
//	var objRbl = document.getElementById(idRbl);
//  if(objRbl != null){
//	  objRbl.checked = varValue;
//  }
}

function setObjectInnerText(varObject, varValue){
	if (document.all){
		varObject.innerText = varValue;
	}else{
		varObject.textContent = varValue;
	}
}

// Funciones de Lectura de Propiedades de Elementos HTML

function getObjectTypeOrTagName(varObjeto){
	// Devuelve en MAYÚSCULAS el Tipo de objeto y, en caso de no tener tipo, devuelve el nombre del Tag
	// Ejemplos: DIV, SPAN, RADIO, CHECKBOX, SELECT-ONE (ddl)
	var strTypeOrTagName = varObjeto.type;
	if (varObjeto.type == null){
		strTypeOrTagName = varObjeto.tagName;
	}
	return strTypeOrTagName.toUpperCase();
}


// Funciones de DDL (dropDownList) ---------------------------

function vaciarDdl(objDdl, idDdl){
  if(objDdl == null){
    if(idDdl == null){
      //nqfh: decidir si existirÃ¡ esta variable
//      if(DEBUG){
//        alert('No existe el Ddl ' + idDdl);
//      }
      return false;
    }
    objDdl = document.getElementById(idDdl);
  }
	if (objDdl.length > 0){
		var i;
		for(i=objDdl.length-1; i>=0; i--){
			objDdl.remove(i);
		}
	}
}

function llenarDdlFromXML(objDdl, itemsArray, textoDefecto, valorDefecto){
	//Es mejor dejar fuera del ciclo, pues si no existen registros igual mostrarÃ¡ el texto
	var newOption = document.createElement('option');
	newOption.value = valorDefecto;
	newOption.text = textoDefecto;
  try{
    objDdl.add(newOption, null); // Standard
  }catch(err){
    objDdl.add(newOption); // IE
  }
	var i;
	for (i=0; i<itemsArray.length; i++){
    var newOption = document.createElement('option');
    newOption.value = getInnerText(itemsArray[i].getElementsByTagName('value')[0]);
    newOption.text = getInnerText(itemsArray[i].getElementsByTagName('text')[0]);
    try{
      objDdl.add(newOption, null); // Standard
    }catch(err){
      objDdl.add(newOption); // IE
    }
	}
	objDdl.cargaCompleta = true;
}

function llenarDdlFromArray(objDdl, arrDdl, textoDefecto, valorDefecto){
	//Es mejor dejar fuera del ciclo, pues si no existen registros igual mostrarÃ¡ el texto
	if (textoDefecto != null && valorDefecto != null){
	  var newOption = document.createElement('option');
	  newOption.value = valorDefecto;
	  newOption.text = textoDefecto;
    try{
      objDdl.add(newOption, null); // Standard
    }catch(err){
      objDdl.add(newOption); // IE
    }
	}
	var i;
	for (i=0; i<arrDdl.length; i++){
    var newOption = document.createElement('option');
    newOption.value = String(arrDdl[i]).split('|')[0];
    newOption.text = String(arrDdl[i]).split('|')[1];
    try{
      objDdl.add(newOption, null); // Standard
    }catch(err){
      objDdl.add(newOption); // IE
    }
	}
	objDdl.cargaCompleta = true;
}


// -------------------------------------------------------
// FIN Funciones de lectura/escritura en elementos HTML
// -------------------------------------------------------


// -------------------------------------------------------
// INICIO Funciones AJAX
// -------------------------------------------------------

function CreateXmlHttp(){
	//Creando objeto XMLHTTP en IE
	try{
		XmlHttp = new ActiveXObject('Msxml2.XMLHTTP');
	}catch(e){
		try{
			XmlHttp = new ActiveXObject('Microsoft.XMLHTTP');
		}catch(oc){
			XmlHttp = null;
		}
	}
	//Creando objeto XMLHTTP en Mozilla o Safari
	if(!XmlHttp && typeof XMLHttpRequest != 'undefined'){
		XmlHttp = new XMLHttpRequest();
	}
	return XmlHttp;
}

// -------------------------------------------------------
// FIN Funciones AJAX
// -------------------------------------------------------






// ----------------------
// Funciones Controles NQ
// ----------------------

// Control NqDdlFecha
function llenarDdlAno(objDdl,idDdl,textoDefecto,valorDefecto,anoDesde,anoHasta){
	llenarDdlNumeros(objDdl,idDdl,textoDefecto,valorDefecto,anoDesde,anoHasta)
}
function llenarDdlDia(objDdl,idDdl,textoDefecto,valorDefecto){
	llenarDdlNumeros(objDdl,idDdl,textoDefecto,valorDefecto,1,31)
}
function llenarDdlMes(objDdl,idDdl,textoDefecto,valorDefecto){
	llenarDdlNumeros(objDdl,idDdl,textoDefecto,valorDefecto,1,12)
}

function llenarDdlNumeros(objDdl,idDdl,textoDefecto,valorDefecto,valorDesde,valorHasta){
	var ddl;
  if (objDdl == null){
    if (idDdl == null){
      alert('Debe enviar el objDdl o el idDdl');
    }
	  objDdl = document.getElementById(idDdl);
  }
	objDdl.cargaCompleta = false;
	objDdl.validarCarga = true;
	if (objDdl.length > 0){
	  vaciarDdl(ddl);
	}
	var newOption = document.createElement('option');
	newOption.value = valorDefecto;
	newOption.text = textoDefecto;
  try{
    objDdl.add(newOption, null); // Standard
  }catch(err){
    objDdl.add(newOption); // IE
  }
	var i;
	for (i=valorDesde; i<=valorHasta ; i++){
    var newOption = document.createElement('option');
    newOption.value = i;
    newOption.text = i;
    try{
      objDdl.add(newOption, null); // Standard
    }catch(err){
      objDdl.add(newOption); // IE
    }
	}
	objDdl.cargaCompleta = true;
}

function limpiarPantalla(strNomObjetos){
	//Recibe una lista de Id de elementos HTML y limpia(txtbox: borra textos; ddl: posiciona en index 0)
	//Soporta: textboxes, textareas y dropdownlists;
	//No soporta: rbl, chk, etc.
	//Ej: strNomObjetos = 'txtRut|ddlUsuarios|txtDescripcion'
	var arrNomObjetos = new Array();
	arrNomObjetos = String(strNomObjetos).split('|');

	var i;
	for (i=0; i<arrNomObjetos.length; i++){
		var idObjetoHtml = arrNomObjetos[i];
		var varObjeto = document.getElementById(idObjetoHtml);
		if (varObjeto != null){
		  var valor = '';
      var tipoObjeto = getObjectTypeOrTagName(varObjeto);
		  if (varObjeto == 'SELECT-ONE'){
			  valor = 0;
		  }
		  setObjectValue(idObjetoHtml,valor,false);
		} else {
		  alert('El objeto ' + idObjetoHtml + ' no existe en la pÃ¡gina');
		}
	}
}

// ---------------------------------------
// INICIO Funciones Generales de Objetos
// ---------------------------------------

//<DESHABILITAR CONTROLES>
function disableChilds(idContenedor, blnDisable){
	var objCont = document.getElementById(idContenedor);
	var arrChildren = objCont.childNodes;
	for (var i = 0; i < arrChildren.length; i++){
		arrChildren[i].disabled = blnDisable;
	}
}

function disableCblItem(itemCblId, blnDisable){
	var objItemCbl = document.getElementById(itemCblId);
	if(objItemCbl != null){
  	objItemCbl.disabled = blnDisable;
  	return true;
	}
	return false;
//	var arrObjItemCbl = document.getElementsByTagName('input');
//	for (i=0 ; i<arrObjItemCbl.length ; i++){
//		var objItemCbl = arrObjItemCbl[i];
//		if (objItemCbl.id == itemCblId){
//			objItemCbl.disabled = blnDisable;
//		}
//	}
}

function disableCbl(prefCblId, blnDisable, idContenedor){
	var objContenedor = document.getElementById(idContenedor);
	if (objContenedor == null){
		objContenedor = document.getElementsByTagName('body')[0];
	}
	var arrObjItemCbl = objContenedor.getElementsByTagName('input');
	for (i=0 ; i<arrObjItemCbl.length ; i++){
		var objItemCbl = arrObjItemCbl[i];
		if (String(objItemCbl.id).split('_')[0] == prefCblId){
			objItemCbl.disabled = blnDisable;
		}
	}
	return true;
}

function disableRbl(rblName, blnDisable){
	var arrObjRbl = document.getElementsByName(rblName);
	for (i=0 ; i<arrObjRbl.length ; i++){
		arrObjRbl[i].disabled = blnDisable;
	}
	return true;
}
//</DESHABILITAR CONTROLES>


// ---------------------------------------
// FIN Funciones Generales de Objetos
// ---------------------------------------

// -----------------------------------------------------------------------------
// INICIO Funciones para codificaciÃ³n/decodificaciÃ³n de caracteres (acentos, etc)
// -----------------------------------------------------------------------------

var Utf8 = {
	// public method for url encoding
	encode : function (string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";

		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
		}
		return utftext;
	},

	// public method for url decoding
	decode : function (utftext) {
		var string = "";
		var i = 0;
		var c = c1 = c2 = 0;

		while ( i < utftext.length ) {
			c = utftext.charCodeAt(i);
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		}
		return string;
	}
}

// -----------------------------------------------------------------------------
// FIN Funciones para codificaciÃ³n/decodificaciÃ³n de caracteres (acentos, etc)
// -----------------------------------------------------------------------------


// -----------------------------------------
// INICIO Funciones de mensajes de Error
// -----------------------------------------

function agregarMensajeError(strMensaje){
  arrMensajesError[arrMensajesError.length] = strMensaje;
}

function resetearMensajesError(){
  arrMensajesError = new Array();
}

function mostrarMensajesError(idContenedor, strCssClass){
  mostrarMensajesEnContenedor(arrMensajesError, idContenedor, strCssClass)
}

function mostrarMensajesEnContenedor(arrMensajes, idContenedor, strCssClass){
  if(idContenedor == null){
    idContenedor='divError';
  }
  var objContenedor = document.getElementById(idContenedor);
  if(strCssClass != null){
    agregarClase(objContenedor,strCssClass);
  }
  setObjectValue(idContenedor,'');  // Limpia el contenedor
	var objUl = document.createElement("ul");
	for (var i=0; i<arrMensajes.length; i++){
    var objAnchor = document.createElement("a");
    agregarClase(objAnchor,"anchor_mensajes_error");
    var arrMenObjeto = String(arrMensajes[i]).split('$|$');
    var strMensaje = arrMenObjeto[0];
    if (arrMenObjeto[1] != null){
      if (arrMenObjeto[1] != ""){
				var arrUrl = String(location.href).split('#');
        objAnchor.setAttribute('href', arrUrl[0] + '#' + arrMenObjeto[1]);
      }
    }
    //objAnchor.setAttribute('target', '_blank');
	  var objLi = document.createElement("li");
	  setObjectInnerText(objLi, strMensaje);
    objAnchor.appendChild(objLi);
    objUl.appendChild(objAnchor);
	}
  objContenedor.appendChild(objUl);
}

// -----------------------------------------
// FIN Funciones de mensajes de Error
// -----------------------------------------

// -----------------------------------------
// INICIO Funciones no genÃ©ricas
// -----------------------------------------

function getValorParametro(NomParametro,Parametros){
	//NomParametro*?*valor|NomParametro*?*valor
	var resto = String(Parametros).split(NomParametro + '*?*')[1];
	return String(resto).split('|')[0];
}

//function CambiarControlPorDato(objContenedor, idContenedor, TagHTMLDato, css){
function cambiarDatoPorControl(objContenedor, tipoCtrl, idContenedor, cssControl){
  // tipoCtrl: indica el tipo de control para editar/ingresar datos
  if(objContenedor == null){
    if(idContenedor == null){
      return;
    }
    objContenedor = document.getElementById(idContenedor);
  }
  // el objeto contenedor debe debe ser el que tendra directamente el texto
  // y contenedor del nuevo objeto a insertar dentro de Ã©l

  // cÃ³mo capturo el contenido del objeto (el valor o el texto que tiene si no sÃ© de que tipo es el contenedor)
  // no recuerdo por quÃ© el tipo de control es un parametro... no deberÃ­a ser una propiedad del contenedor????? no sÃ©
  //lo siguiente se hizo pensando en que fuera el span

  switch (tipoCtrl){
  case 'nqDdlFecha':
    r.appendChild(crearDdlFecha('ddlFecha',2000,curyear,""));
    break;
  case 'ddl':
    // falta definir el partametro tipo arreglo que necesita este
    r.appendChild(crearNqDdl('ddlCuetaCorriente','celda_datos',arrDatos,"Selec. una cta. cte.","0"));
    break;
  case 'txt':
    objContenedor.appendChild(crearNqTextBox("txtCaja",cssControl,"nnn"));
    setObjectValue("txtCaja","nn",true);
    break;
  }
}
// no seguÃ­ avanzado porque no se cual objeto debe tener el evento click...
// cuando hago click, suponiendo si el click se hace un click sobre un span
// IE ejecuta el evento

// -----------------------------------------
// INICIO Funciones no genÃ©ricas
// -----------------------------------------


// FUNCIONES QUE HAY QUE REEMPLAZAR:
// cambiar llamado por setDivValue(idDiv, varValue); // Nota: se entrega el id y no el objeto, como en escribirMensajeInDiv
// function escribirMensajeInDiv(strError, div){
//    if (document.all){
//      div.innerText = strError;
//    }else{
//      div.textContent = strError;
//    }
//    div.parentNode.style.display = '';
//  }


// FUNCIONES CANDIDATAS A DESAPARECER:
function existeObjeto(idObjeto){
	var varObjeto = document.getElementById(idObjeto);
	if (varObjeto == null){
		return false;
	}
	return true;
}

function setFocus(idObjeto){
	var varObjeto = document.getElementById(idObjeto);
	varObjeto.focus();
}






//nqfh: no sÃ© en quÃ© lugar o seccion de este doc puede ir esta funcion
function Trim(str,blnOnlyTrailingSpaces){
    if (blnOnlyTrailingSpaces){
        return String(str).replace(/^\s*|\s*$/g,'');
    }else{
        if (String(str).indexOf('  ') >= 0){
            str = String(str).replace('  ',' ');
            return Trim(str,false);
        }else{
            return String(str).replace(/^\s*|\s*$/g,'');
        }
    }
}


//nqfh: no sÃ© en quÃ© lugar o seccion de este doc puede ir esta funcion
//esta se encarga de detectar tecla que presionÃ³
function getkey(e){
	if (window.event){
		return window.event.keyCode;
	}	else if (e){
		return e.which;
 	}else {
 	return null;
 	}
}

//FUNCIONES QUE TIENEN QUE VER CON EL FCK_EDITOR
function getFckEditorEditionArea(idFck){
  var fckTextoIframe = document.getElementById(idFck + '___Frame');
  if (fckTextoIframe){
    var srcDoc = fckTextoIframe.contentWindow.document;
    var fckAreaEdicion = srcDoc.getElementById("xEditingArea").getElementsByTagName('IFRAME')[0];
    var docAreaEdicion = fckAreaEdicion.contentWindow.document;
    var bodyAreaEdicion = docAreaEdicion.getElementsByTagName('BODY')[0];
    return bodyAreaEdicion;
  }else{
    return null;
  }
}

function getFckText(idFck){
  var oEditor = FCKeditorAPI.GetInstance(idFck);
  return oEditor.GetHTML();
//  var bodyAreaEdicion = getFckEditorEditionArea(idFck);
//  if (bodyAreaEdicion != null){
//    return bodyAreaEdicion.innerHTML;
//  }else{
//    return '';
//  }
}

function deleteFckText(idFck){
  var oEditor = FCKeditorAPI.GetInstance(idFck);
  return oEditor.SetHTML('');
//  var bodyAreaEdicion = getFckEditorEditionArea(idFck);
//  if (bodyAreaEdicion != null){
//    bodyAreaEdicion.innerHTML = '';
//  }else{
//    return null;
//  }
}


// -----------------------------------------
// INICIO Funciones verificacion de tipos de datos o variables
// -----------------------------------------

function varExists(vr){
  return Boolean(window.vr != 'undefined' && vr);
}

function isInteger(strDato){
  var i;

  var patron = new RegExp("[^0-9]", "i");
  if (strDato.search(patron) != -1){//encuentra caracteres inv?lidos de acuerdo a la E.R.
    return false;
  }
	return true;
}


function esEmailValido(strEmail) {
	var RegExPattern = new RegExp("^([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}$", "i"); // "i" -> case insensitive
	if (strEmail.search(RegExPattern) == 0) {
		return true;
	}
	return false;
}

function esFechaValida(strFecha) {

	var RegExPattern = new RegExp("^[0-3]?[0-9]/[0-1]?[0-9]/[0-9]{4}$", "i"); // Fecha con formato dd/mm/yyyy
	if (strFecha.search(RegExPattern) == 0) {
			return true;
		arrFecha = strFecha.split('/');
		if(parseInt(arrFecha[0]) <= 31 && parseInt(arrFecha[1]) <= 12){
			return true;
		}
	}
	return false;
}
/*
function esSoloTexto(strTexto) {
	var RegExPattern = new RegExp("[a-z??????? ]+[a-z??????? ]$", "i"); // "i" -> case insensitive
	if (strTexto.search(RegExPattern) != 0) {
		return false;
	}
	return true;
}
*/
// -----------------------------------------
// FIN Funciones verificacion de tipos de datos o variables
// -----------------------------------------


function getNaturalHeight(img) {
    if( img.naturalHeight ) {
      return img.naturalHeight;
    } else {
      var lgi = new Image();
      lgi.src = img.src;
      return lgi.height;
    }
  }

  function getNaturalWidth(img) {
    if( img.naturalWidth ) {
      return img.naturalWidth;
    } else {
      var lgi = new Image();
      lgi.src = img.src;
      return lgi.width;
    }
  }

function Int2Dig(valor){
  if (valor < 10){
    return "0" + valor;
  }
  return valor;
}


function getDdlIndexByValue(varObjeto, idObjeto, valor){
  if (varObjeto == null){
    varObjeto = document.getElementById(idObjeto);
  }
  var arrOptsSelect = varObjeto.getElementsByTagName("option");
  for (var i=0; i<arrOptsSelect.length; i++){
    if (arrOptsSelect[i].value == valor){
      return i;
    }
  }
  return -1;
}

function getDdlValueByIndex(varObjeto, idObjeto, index){
  if (varObjeto == null){
    varObjeto = document.getElementById(idObjeto);
  }
  var arrOptsSelect = varObjeto.getElementsByTagName("option");
  for (var i=0; i<arrOptsSelect.length; i++){
    if (index == i){
      return arrOptsSelect[i].value;
    }
  }
  return -1;
}

function getDdlIndexByText(varObjeto, idObjeto, texto){
  if (varObjeto == null){
    varObjeto = document.getElementById(idObjeto);
  }
  var arrOptsSelect = varObjeto.getElementsByTagName("option");
  for (var i=0; i<arrOptsSelect.length; i++){
    if (arrOptsSelect[i].text == texto){
      return i;
    }
  }
  return -1;
}

function getDdlTextByIndex(varObjeto, idObjeto, index){
  if (varObjeto == null){
    varObjeto = document.getElementById(idObjeto);
  }
  var arrOptsSelect = varObjeto.getElementsByTagName("option");
  for (var i=0; i<arrOptsSelect.length; i++){
    if (index == i){
      return arrOptsSelect[i].text;
    }
  }
  return -1;
}

function getDdlElemetsCount(varObjeto, idObjeto){
  if (varObjeto == null){
    varObjeto = document.getElementById(idObjeto);
  }
  var arrOptsSelect = varObjeto.getElementsByTagName("option");
  return arrOptsSelect.length -1;
}

function esNumeroEnteroOrDecimal(numero){
  numero = String(numero);
  if (isInteger(numero) == false){
    numero = numero.replace(',','.');
    var arrNumero = numero.split('.');
    if (arrNumero.length == 2){
      if (isInteger(arrNumero[0])==false || isInteger(arrNumero[1])==false){
        return false;
      }
    }else{
      return false;
    }
  }
  return true;
}

function existeObjetoById(idObjeto){
  var varObjeto = document.getElementById(idObjeto);
  if (varObjeto == null){
    return false;
  }
  return true;
}

function habilitarAllChildNodes(idParent, blnHabilita){
  if ( !document.getElementById
  || !document.getElementsByTagName) return;

  var nodesToDisable = {button :'', input :'', td :'', tr :'', div :'', img :'', table :'' , a :'', optgroup :'',
  option :'', select :'', textarea :''};

  var node, nodes;
  var objParent = document.getElementById(idParent);
  if (!objParent) return;

  nodes = objParent.getElementsByTagName('*');
  if (!nodes) return;

  var i = nodes.length;
  while (i--){
    node = nodes[i];
    if ( node.nodeName
      && node.nodeName.toLowerCase() in nodesToDisable ){
      if (blnHabilita ==true){
         node.disabled = false;
      } else {
         node.disabled = true;
      }
      if (node.nodeName =="A"){
        habilitarAnchor(node, blnHabilita);
      }
    }
  }
}

function habilitarAnchor(obj, blnHabilita){
  if(blnHabilita){
    if (obj.attributes['href_bak'] !=null){
      obj.setAttribute('href', obj.attributes['href_bak'].nodeValue);
    }
  }
  else{
    var href = obj.getAttribute("href");
    if(href && href != "" && href != null){
       obj.setAttribute('href_bak', href);
    }
    obj.removeAttribute('href');
  }
}

function esVisibleObjetoById(idObjeto){
  var Objeto = document.getElementById(idObjeto);
  return esVisibleObjeto(Objeto);
}

function esVisibleObjeto(Objeto){
  if (Objeto.style.display =="none"){
    return false;
  } else {
    return true;
  }
}

function getymdFechayyyymmdd(fecha, ymd){
  switch(ymd){
    case "y":
      return String(fecha).substring(0,4);
     break;
    case "m":
      return String(fecha).substring(6,4);
     break;
    case "d":
      return String(fecha).substring(8,6);
     break;
  }
}

function setFocusById(idObjeto){
  var varObjeto = document.getElementById(idObjeto);
  return setFocusByObject(varObjeto);
}

function setFocusByObject(varObjeto){
  if (varObjeto.disabled ==false){
    varObjeto.focus();
  }
}

function agregarCeros(numero, cantCeros){
  strCero = "";
  for (i=1; i<= (cantCeros - String(numero).length); i++){
    strCero = '0' + strCero;
  }
  return strCero + String(numero);
}

function getObjectName(varObjeto){
  return varObjeto.name;
}

function getObjectNameById(idObjeto){
  var varObjeto = document.getElementById(idObjeto);
  return getObjectName(varObjeto);
}

function agregarDivMensajeTxtInput(idDiv, nomTitulo, nomMensaje, strFnBtnOkOnclick, strFnBtnCancelarOnclick, strFnBtnXOnclick){
  var divEliminar = document.getElementById(idDiv);
  if (divEliminar != null){
    divEliminar.parentNode.removeChild(divEliminar);
  }
  var strDblComillas = "'";
  var strHtml ="";

  strHtml += '<div class="div_mensaje_txt_input_titulo">' + nomTitulo + '<div class="div_mensaje_txt_input_cerrar" onclick="' + strFnBtnXOnclick + '">(X)</div></div>';
  strHtml += '<br />';
  strHtml += '<div>' + nomMensaje + '</div>';
  strHtml += '<br />';
  strHtml += '<input id="txtInputMensaje" type="text" class="campo_fecha" />';
  strHtml += '<br />';
  strHtml += '<br />';
  strHtml += '<input id="btnOk" class="botones" id="btnOk" value="Aceptar" onclick="' + strFnBtnOkOnclick + '" type="submit" />';
  strHtml += '&nbsp;';
  strHtml += '<input id="btnOk" class="botones" id="btnCancelar" value="Cancelar" onclick="' + strFnBtnCancelarOnclick + '" type="submit" />';

  var divEliminar = document.createElement('div');
  divEliminar.id= idDiv;
  divEliminar.className = "div_mensaje_txt_input";//div_mensaje_confirmacion
  divEliminar.innerHTML = strHtml;
  document.body.appendChild(divEliminar);
  //setFocusById("txtInputMensaje");
  return true;
}

function cambiarClase(idDelObjeto, nombreClase){
  var obj = document.getElementById(idDelObjeto);
  obj.className = nombreClase;
}

// FUNCIONES DE MANEJO DE IMÁGENES DE DREAMWEAVER

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_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_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];}
}


//**********************************************************

function setButtonOnEnter(idElemento,idBoton){
  var elem = document.getElementById(idElemento);
  elem.idBtnDefault = idBoton;
  elem.onkeypress = keyhandler;
  //alert(elem);
}

function keyhandler(e) {
  e = e? e: window.event;
  var elem = (e.target? e.target: window.event.srcElement);
  var unicode = e.charCode? e.charCode : e.keyCode;
  if (elem.idBtnDefault && unicode == 13){
    var btn = document.getElementById(elem.idBtnDefault);
    var h = btn.onclick;
    if (h && h.apply) {
      btn.focus();
      h.apply(this);
    }
  }
}

//**********************************************************

// --------------------------------------
// INICIO FUNCIONES DE MANEJO DE STRINGS
// --------------------------------------

String.prototype.left = function(iLength){
	if (iLength <= 0)
    return "";
	else if (iLength > String(this).length)
    return this;
	else
		return String(this).substring(0, iLength);
}

String.prototype.right = function(iLength){
	if (iLength <= 0)
    return "";
	else if (iLength > String(this).length)
    return this;
	else
   var thisLength = String(this).length;
   return String(this).substring(thisLength, thisLength - iLength);
}


