//*********************inicializaciones****************************************++++++
var ie4 = (document.all) ? true : false;
var ns4 = (document.layers) ? true : false;
var ns6 = (document.getElementById && !document.all) ? true : false;
var ajaxControl,ajaxActu,data




function writetolayer(lay,txt) {
	if (ie4) {
		document.all[lay].innerHTML = txt;
	}
	if (ns4) {
		document[lay].document.write(txt);
		document[lay].document.close();
	}
	if (ns6) {
		over = document.getElementById([lay]);
		range = document.createRange();
		range.setStartBefore(over);
		domfrag = range.createContextualFragment(txt);
		while (over.hasChildNodes()) {
			over.removeChild(over.lastChild);
		}
		over.appendChild(domfrag);
   }
}
function AbrirVentana(nombre,url,top,left,ancho,alto)
{
	var dir
	dir=new objURL
	$("#"+nombre).remove()
	url=dir.normaliza(url)
//	alert(url)
	var presentacion= '<div style="position:absolute; width:'+ancho+'px; height:'+alto+'px; z-index:1; left: '+left+'px; top: '+top+'px" id='+nombre+"><table width="+ ancho+" heigth="+alto+" border=1><tr><td id='"+nombre+"_dato'></td></tr></table></div>"
	$("body").append(presentacion)
//	$("#loading").ajaxStart(function(){ $(this).show(); });
//	$("#"+nombre).ajaxError(function(request, settings){
//	   $(this).append("<li>Error requesting page " + settings.url + "</li>");
//	 });

//	$("#"+nombre+"_dato").load(url,function(){$("#"+nombre).show()})	
	var data = $.ajax({
      url: url,
      type: "GET",
      ifModified: 1,
	  async:false,
      error: function() { MessageBox(this.statusText+ "<br>" + this.responseText) },
      success: function(json, status) {},
      complete: function() {$("#"+nombre).show() }
  		});
	if (data.status == 200){ 
		$("#"+nombre+"_dato").append(data)
		$("#"+nombre).show()
	}
	else
		MessageBox(data.statusText+ "<br>" + data.responseText)

	dir=""
}
// combos -posicionar dato
var digitos=10 //cantidad de digitos buscados 
var puntero=0 
var buffer=new Array(digitos) //declaración del array Buffer 
var cadena="" 

function buscar_op(obj,objfoco){ 
	var key = window.event.keyCode
   var letra = String.fromCharCode(key) 
   if(puntero >= digitos){ 
       cadena=""; 
       puntero=0; 
    } 
   //si se presiona la tecla ENTER, borro el array de teclas presionadas y salto a otro objeto... 
   if (key == 13){ 
       borrar_buffer(); 
       if(objfoco!=0) objfoco.focus(); //evita foco a otro objeto si objfoco=0 
    } 
   //sino busco la cadena tipeada dentro del combo... 
   else{ 
       buffer[puntero]=letra; 
       //guardo en la posicion puntero la letra tipeada 
       cadena=cadena+buffer[puntero]; //armo una cadena con los datos que van ingresando al array 
       puntero++; 

       //barro todas las opciones que contiene el combo y las comparo la cadena... 
       for (var opcombo=0;opcombo < obj.length;opcombo++){ 
          if(obj[opcombo].text.substr(0,puntero).toLowerCase()==cadena.toLowerCase()){ 
          obj.selectedIndex=opcombo; 
          } 
       } 
    } 
   event.returnValue = false; //invalida la acción de pulsado de tecla para evitar busqueda del primer caracter 
} 

function borrar_buffer(){ 
   //inicializa la cadena buscada 
    cadena=""; 
    puntero=0; 
} 
function clearcombo(combo){
  for (var i=combo.options.length-1; i>=0; i--){
    combo.options[i] = null;
  }
  combo.selectedIndex = -1;
}

//------------------AJAX poblaciones
//function cambiaPro(ControlPobla,ControlProvin){
//	var selec=ControlProvin.selectedIndex
//	var PoblaAct = ControlPobla.options[ControlPobla.selectedIndex].value
//	cargarPoblaciones(ControlPobla,ControlProvin.options[selec].value,PoblaAct)
//}
function cambiaPro(ControlPobla,ControlProvin){
        var NombrePobla = ControlPobla.name
        var selec=ControlProvin.selectedIndex
        var PoblaAct = ControlPobla.options[ControlPobla.selectedIndex].value
        cargarPoblaciones(ControlPobla,ControlProvin.options[selec].value,PoblaAct)
}

function cargarPoblaciones(seleccion,provin,actual){
	ajaxControl=seleccion
	ajaxActu=actual	//valor actual del combo
	clearcombo(ajaxControl)
	ajaxControl.options[0]= new Option(".......leyendo.......");
//	var data = $.get("../Rutinas/AJAXrespuesta.asp?CPRO="+provin,cargaValores())
	var data = $.ajax({
	  type: "GET",
	  url: "../Rutinas/AJAXrespuesta.asp?CPRO="+provin,
	  async: false
	});
	if (data.status == 200) 
		cargaValores(data.responseText,ajaxControl,ajaxActu)
	else
		MessageBox(data.statusText+ "<br>" + data.responseText)
}
/*function cargaValores(data,ajaxControl,ajaxActu){
	try
	{
		data = normaliza(data)
		eval(data)
		clearcombo(ajaxControl)
		
		i=0
		for(j in pobla)
		{
			ajaxControl.options[i]= new Option();
			ajaxControl.options[i].text=j.split(":")[0]
			ajaxControl.options[i].value=j.split(":")[1]
			if (ajaxActu!="") {
				if (ajaxActu==ajaxControl.options[i].value) 
					ajaxControl.options[i].selected = true
			}
			i++;
		}
	}
	catch(e)
	{
		alert(data)
			MessageBox("Error:"+ e.message +"<br>"+data)
	}
}*/
function MessageBox(mensaje)
{
	var nombre="Mensaje"
	var ancho=300
	var alto=200
	var left=300
	var top = 300
	var messageBox= '<div style="position:absolute; width:'+ancho+'px; height:'+alto+'px; z-index:1; left: '+left+'px; top: '+top+'px" id='+nombre+"><table bgcolor=\"#CCFFCC\" width="+ ancho+" heigth="+alto+" border=1><tr><td id='"+nombre+"_dato'>"+mensaje+"</td></tr></table></div>"
	$("#"+nombre).remove()
	$("body").append(messageBox)
	$("#"+nombre).show()	
}

//cargar combo JSON
function cargaValores(data,ajaxControl,ajaxActu){
	var temp
	var tempa
	var cancom
	var a
	tempa=data.split("=")
	temp=tempa[tempa.length-1]
	temp=temp.substring(1,temp.length -2)
//											alert("temp="+temp)
	temp=temp.split("|")
	cancom=temp.length
//											alert("cancom="+cancom)
	try{
		for (a=0;a<cancom;a++){
			tempa=temp[a].split(':')[0]
			tempa=tempa.substring(1,tempa.length-1)
			tempa=xreplace(tempa,"\"","'")
			tempa=xreplace(tempa,"''","'")
			ajaxControl.options[a]= new Option();
			ajaxControl.options[a].text=tempa
			ajaxControl.options[a].value=temp[a].split(':')[1]
			if (ajaxActu!="") {
				if (ajaxActu==ajaxControl.options[a].value) 
					ajaxControl.options[a].selected = true
			}
		}
//											alert("FIN-salida="+salida)
		return 
	}
	catch(e){
		MessageBox("Error " + e.message +"<br>a="+ a + " valor " + temp[a])
	}
}
//formatear campo numerico
//Mas en: http://javascript.espaciolatino.com/
function iniTodo(idForm, idCampo, dec, mil)
{
var obj = document.getElementsByName(idForm);
obj[0].minumero = new oNumero()
obj[0].idCampo = idCampo;
obj[0].posDec = dec;
obj[0].miles = mil;
obj[0].onkeyup = procTecla;
} 
function procTecla(ev)
{
var cadena='';
var pd , minum;
var campo = this.idCampo
if (!document.all) event=ev
if (event.keyCode >36 && event.keyCode <41) 
    return
if ((event.keyCode != 110) && (event.keyCode < 96 || event.keyCode > 105)) 
    return
if (event.keyCode < 96 || event.keyCode > 106) 
    return
if (this[campo].value=='0') 
     this[campo].value = '';
cadena = this[campo].value;
if ((event.keyCode == 109 || event.keyCode == 107) &&    cadena.length >0) 
         return
if (event.keyCode == 110)
    if (pd < cadena.length-1 || pd==0)
        { 
        cadena = cadena.substr(0, cadena.length-1)
        if (cadena.length==0) cadena ='0.'
            return
        }
pd = cadena.indexOf('.') 
if (pd >= 0)
    pd = cadena.length - pd -1;
else 
    pd = -1
if (pd > this.posDec )
    {
    cadena = cadena.substr(0, cadena.length-1) 
    pd=this.posDec;
    }
this.minumero.ponValor(cadena.replace(/\,/g,''))
cadena = this.minumero.formato(pd, this.miles)
if (cadena=='0')     
     cadena =""
this[campo].value = cadena
}
// Reemplazar todas la apariciones
function xreplace(dato,busca,remp){
	var temp = dato;
	var i = temp.indexOf(busca);
	while(i > -1)
	{
		temp = temp.replace(busca, remp);
		i = temp.indexOf(busca, i + remp.length + 1);
	}
	return temp;
}


/* 
 Estas dos funciones se usan para controlar el valor numérico que un usuario teclea en un campo input de un formulario, colocando los decimales y la coma de miles en su lugar. Para poder usarlo necesitas el objeto oNumero descrito en el script formateando numeros. 

La base de este código está en la vinculación del evento onKeyup del campo input, que se dispara cuando se suelta una tecla. La función vinculada, procTecla(), se encarga de filtrar las teclas válidas (sólo números, signos, coma y punto) y de formatear el valor que en cada momento se encuentra en el campo input. 

Observa el uso de this para referirse al formulario que dispara el evento. La función iniTodo() se encarga de vincular el evento y añadir al formulario varias propiedades nuevas: una variable tipo oNumero, el identificador del campo donde se debe actuar, el número de decimales deseados y si se desea separador de miles. La primera de estas propiedades guarda el valor numérico introducido y lo escribe en el campo input ya formateado. Recuerda que el valor numérico puro (sin formatear) está en la propiedad numero.valor del objeto formulario que hayas utilizado. 



La página Como se usa 
 <body onload="iniTodo('form1', 'campo', 2, true)">
< form name="form1" method="post" action="">
Teclea un número 
< input name="campo" type="text" id="numero" size="20">
< /form>
< /body>
 */
function input_filterAmt (str, dec, bNeg) 
{ // auto-correct input - force numeric data based on params. 
 var cDec = ','; // decimal point symbol 
 var bDec = 0; var val = ""; 
 var strf = ""; var neg = ""; var i = 0; 

 if (str == "") return round_number (parseFloat ("0"), dec); 
 if (bNeg && str.charAt (i) == '-') { neg = '-'; i++; } 

 for (i; i < str.length; i++) 
	 { 
	  val = str.charAt (i); 
	  if (val == cDec) 
		  { 
		   if (!bDec) { strf += val; bDec = 1; } 
		  } 
	  else if (val >= '0' && val <= '9') 
	  strf += val; 
	 } 
 strf = (strf == "" ? 0 : neg + strf); 
 return round_number (parseFloat (strf), dec); 
} 
function round_number (num, dec) 
{ // low-level numeric format with upward rounding at 5+ 
 var cDec = ','; // decimal point symbol 
 if (!(dec >= 0 && dec <= 9)) 
  dec = 2; 
 if (isNaN (num) || num == '') 
 { // zero values are returned in proper decimal format 
  var sdec = ""; 
  for (var i = 0; i < dec; i++) 
   sdec += '0'; 
  return "0" + (sdec != "" ? cDec + sdec : ""); 
 } 
 var snum = new String (num); 
 var arr_num = snum.split (cDec); 
 var neg = ''; 
 var nullify = 0; 
 dec_a = arr_num.length > 1 ? arr_num[1].length : 0; 
 if (dec_a <= dec) 
 { // fill decimal places with trailing zeros if necessary 
  if (!dec_a) 
   arr_num[1] = ""; 
  for (var i = 0; i < dec - dec_a; i++) 
   arr_num[1] += '0'; 
  dec_a = dec; 
 } 
 // total decimal places in value before rounding and formatting 
 dec_i = dec_a; 
 dec_a -= dec; 
 if (arr_num[0].charAt(0) == '-') 
 { // preserve negative symbol, remove from value (calculations) 
  neg = '-'; 
  arr_num[0] = arr_num[0].substring (1, arr_num[0].length); 
 } 
 if (!parseInt (arr_num[0])) // case when whole value is 0 
 { // nullify a zero whole value for correct decimal point placement 
  arr_num[0] = "1"; // 0 whole # would not preserve amount in calc. 
  nullify = 1; // flag to remove greatest 1 portion from whole # 
 } 
 var whole = parseInt (arr_num[0] * Math.pow (10, arr_num[1].length)); 
 // remove leading zeros 
 for (i = 0; i < arr_num[1].length; i++) 
  if (arr_num[1].charAt (i) != '0') 
   break; 
 if (arr_num[1].length == i) // decimal portion blank or all zeros 
  return (neg + arr_num[0] + (arr_num[1] != "" ? (cDec + arr_num[1]) : "")); 
 whole += parseInt (arr_num[1].substring (i, arr_num[1].length)); 
 if (arr_num[1].length != dec) 
 { // round number affecting appropriate cluster of decimal places 
  var diff = ""; 
  var str = new String (whole); 
  for (i = dec_a; i > 0; i--) 
   diff += str.charAt (str.length - i); 
  diff = Math.pow (10, dec_a) - parseInt (diff); 
  whole += ((diff <= 5 * Math.pow (10, dec_a - 1)) ? diff : 0); 
 } 
 str = new String (whole); 
 var str_f = ""; 
 var j = 0; 
 var k = 0; 
 if (nullify) 
 { 
  arr_num[0] = "0"; // remove 1 from greatest decimal place (restoration) 
  str = (parseInt (str.charAt(0)) - 1) + str.substring (1, str.length); 
 } 
 else // re-assign whole numeric portion from entire numeric string value 
  arr_num[0] = str.substring (0, str.length - dec_i); 
 for (i = 0; i < str.length; i++) 
 { // combine portions of decimal number (whole, fraction, sign) 
  if (k - 1 > dec) 
   break; // fraction termination case 
  if (j == arr_num[0].length) 
  { 
   if (!j) 
    str_f += 0; 
   str_f += (dec != 0 ? cDec : ''); // insert decimal point 
   --i; // backtrack one character 
   k++; // signal fraction count 
  } 
  else // assign character by character 
   str_f += str.charAt (i); 
  j++; 
  if (k) // fractional counter increment 
   k++; 
 } 
 return neg + str_f; 
} 


