/* Funciones comunes habitualmente utilizadas 
   Empresa:		Visual NT
   Programador: Fernando Pascua García
   Fecha : 		31-Octubre-2008
*/

function elimin_hijos(obj){
   for (var i=obj.childNodes.length-1; i>=0; i--)
      obj.removeChild(obj.childNodes.item(i));
};

function elimin_nodo(id_nodo){
	var ancla = b_obj(id_nodo);
	var padre = ancla.parentNode;
	var eliminado = padre.removeChild(ancla);
};

function xmlNodo(obj,nombre,ind){
   if (obj.getElementsByTagName(nombre)[ind])
      return obj.getElementsByTagName(nombre)[ind];
   else return false;
};

function xmlNodoValue(obj,nombre,ind){
	if (obj.getElementsByTagName(nombre)[ind]){
		if (obj.getElementsByTagName(nombre)[ind].firstChild)
			return trim(obj.getElementsByTagName(nombre)[ind].firstChild.nodeValue, true);
		else return ""; 
	}
};
      
function xmlLength(obj,nombre){
   return obj.getElementsByTagName(nombre).length;
};

function addObjObj(obj1,obj2){
	if (obj1.appendChild(obj2))
		return obj1;
	else return false;
};

function addTextObj(obj,texto){
	if (obj.appendChild(document.createTextNode(texto)))
		return obj;
	else return false;
};

function cCeldaConText(objFila, numCelda, texto){
	return addTextObj(objFila.insertCell(numCelda),texto);
};

function cCeldaConObj(objFila, numCelda, obj){
	return addObjObj(objFila.insertCell(numCelda),obj);
};

function show_div(nombre_div){
   document.getElementById(nombre_div).style.display="inline";
};

function hide_div(nombre_div){
   document.getElementById(nombre_div).style.display="none";
};

function c_obj(tag){
	var atributos = arguments[1] || {};  //lista de atributos ej: src:'imagenes/imagen.jpg'
	var eventos = arguments[2] || {};  //lista de eventos ej: onClick:'hacer();'
	var obj = document.createElement(tag);  
	atributosEventos(obj, atributos, eventos);
	return obj;
};

function c_objTexto(tag,texto){
	var atributos = arguments[2] || {};  //lista de atributos ej: src:'imagenes/imagen.jpg'
	var eventos = arguments[3] || {};  //lista de eventos ej: onClick:'hacer();'
	var obj = document.createElement(tag);  
	atributosEventos(obj, atributos, eventos);
	addTextObj(obj,texto);
	return obj;
};

function b_obj(id){
   var obj;
   if (obj = document.getElementById(id))
      return obj;
   else return false;
};

function atributosEventos(obj, atributos, eventos){
	for(var atributo in atributos){
		ponerAtributo(obj, atributo, atributos[atributo]);
	}
	for(var evento in eventos){
		ponerEvento(obj, evento, eventos[evento]);
	}
}

function ponerAtributo(obj, atributo, valor) {
	if (validaGecko())
		obj.setAttribute(atributo, valor);
	else {
		if (atributo== 'class')
			atributo= 'className';
		eval('obj.'+ atributo +'= \'' +valor+ '\';');	
	}	
};

function ponerEvento(obj, atributo, valor){
	if (validaGecko())
		obj.setAttribute(atributo, valor);
	else obj[atributo]= new Function(valor);
};

function validaGecko() {
	var gko = navigator.userAgent.toLowerCase();
	if (gko.indexOf('gecko')!=-1) //soporta gecko (Mozilla, Netscape, Safari ...)
		return true;
	else return false; //es IE
};

/*Función que recoge todos los valores de un formulario y lo convierte en una cadena de parámetros GET
  Parámetros: 'idFormulario'
  Devuelve: 'param1=valor1&param2=valor2&param3=...'
*/
function paramForm(Nform) {
	var form = b_obj(Nform);
	var input = '';
	var check = '';
	// Necesito un array asociativo para los checkbox
	var array_check = new Object();
	var param = 'nocache=' + Math.random();

	for (var i=0; i<form.getElementsByTagName('input').length; i++){
		input = form.getElementsByTagName('input')[i];
		if (input.getAttribute('type') == 'radio'){
			if (input["checked"]){
				var nombre = input.getAttribute('name');
				var valor = input.value;
				param += '&'+nombre+'='+valor;
			}
		} else if (input.getAttribute('type') == 'checkbox'){
			if (input["checked"]){
				var nombre = input.getAttribute('name');
				var valor = input.value;
				if (array_check[nombre])
					array_check[nombre] += '|'+valor;
				else 
					array_check[nombre] = '&'+nombre+'='+valor;
			}				
		} else if (input.getAttribute('type') != 'button' && input.getAttribute('type') != 'submit'){
			var nombre = input.getAttribute('name');
			var valor = input.value;
			param += '&'+nombre+'='+valor;
		}
	}
	for (var i=0; i<form.getElementsByTagName('select').length; i++){
		input = form.getElementsByTagName('select')[i];
		var nombre = input.getAttribute('name');
		param += '&'+nombre+'=';
		//Para selecc multiple  tipoAnimal=perro|gato|...
		if (input.getAttribute('multiple') == 'multiple'){
        	for (var j=0; j<input.options.length; j++)
	    		if (input.options[j].selected){
					var valor = input.options[j].value;
					param += valor + '|';
				}
			param = param.substring(0,param.length-1);
		}else{
			var valor = input.options[input.selectedIndex].value;
			param += valor;
		}
	}
	for (var i=0; i<form.getElementsByTagName('textarea').length; i++){
		input = form.getElementsByTagName('textarea')[i];
		var nombre = input.getAttribute('name');
		var valor = input.value;
		param += '&'+nombre+'='+valor;
	}
	for(var indice in array_check){
		param += array_check[indice];
	}
	return param;
};

var xmlDoc;

function crearObjetoXML(archivoXML){
   //--- Compruebo si se trata de IE o no.
   //--- Si es IE el objeto ActiveXObject existirá.
   if(window.ActiveXObject){
      //--- Creo un nuevo objeto de la librería Microsoft.XMLDOM que es la que se encarga
      //--- en Internet Explorer de 'parsear' un archivo XML.
      xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
      //--- Defino la asincronización a false
      xmlDoc.async = false;
      xmlDoc.load(archivoXML);
      parsearXML();
   }else if(document.implementation && document.implementation.createDocument){
      xmlDoc = document.implementation.createDocument("","",null);
      xmlDoc.load(archivoXML);
      //--- Le decimos que cuando haya terminado de cargar el XML
      //--- ejecute la función de parsear el mismo.
      //--- NOTA: Se le llama a la función sin los paréntesis. Si se le colocan no funciona
      xmlDoc.onload = parsearXML;
   }
};

/* Función que lee un XML con un formato definido y sus datos los va colocando automáticamente en los campos del formulario correspondientes.
	El XML debe tener el formato:	<XML>
									<registro idForm="nameInput">valor</registro>
										...
									</XML>
	nameInput = name del input donde se desea colocar el valor
	valor = valor que se desea incluir
  	Parámetros: 'idFormulario','idXML'
*/

function parsearXML(){
	var XML = xmlDoc.getElementsByTagName('XML')[0];
	var longitudXML = XML.getElementsByTagName('registro').length;
	var id;
	var value;
	for(var i=0;i<longitudXML; i++){
		id    = XML.getElementsByTagName('registro')[i].getAttribute('idInput');
		value = XML.getElementsByTagName('registro')[i].firstChild.nodeValue;
		setValueInput('valida',id,value);
	}
};

/* Función que coloca en cada elemento del formulario los valores que le pasas
		Nform --> nombre del formulario
		id    --> name del input 
		value --> valor del input
NOTA: Habría que contemplar que si solo hay un check no se accede como array sino como elemento único form.check[i].value no funciona sería form.check.value
*/

function setValueInput(Nform,id,value){
	var input;
	var form = b_obj(Nform);
	eval('var input = form.'+id+';');
	eval('var numInput = form.'+id+'.length;');
	var ETIQUETA;
	if (numInput > 1) 
		ETIQUETA = 'input[0]';
	else ETIQUETA = 'input';
	if (eval(ETIQUETA +'.tagName == \'OPTION\''))
		ETIQUETA = 'input';
	switch (eval(ETIQUETA+'.tagName.toUpperCase()')){
		case 'INPUT':
			if (eval(ETIQUETA +'.getAttribute(\'type\') == \'radio\'')){
				for (var i=0; i<numInput; i++){
					if (input[i].value == value){
						input[i].checked = true;
						break;
					}
				}
			} else if (eval(ETIQUETA +'.getAttribute(\'type\') == \'checkbox\'')){
				if (numInput){
					value = value.split('|');
					for (var j=0; j<value.length; j++){
						for (var i=0; i<numInput; i++){
							if (input[i].value == value[j]){
								input[i].checked = true;
								break;
							}
						}
					}
				} else {   // Si solo hay un check no se puede acceder a el como array sino como elemento input.value, no input[i].value 
					if (input.value == value){
						input.checked = true;
					}
				}
			} else if (eval(ETIQUETA+'.getAttribute(\'type\') != \'button\' && '+ETIQUETA+'.getAttribute(\'type\') != \'submit\'')){				
				input.value = value;
			}			
		break;
		case 'SELECT':
			if (eval(ETIQUETA+'.getAttribute(\'multiple\') == \'multiple\'')){
				value = value.split('|');
				for (var j=0; j<value.length; j++){
					for (var i=0; i<input.options.length; i++){
						if (input.options[i].value == value[j])
							input.options[i].selected = true;
					}
				}
			} else {
				for (var i=0; i<input.options.length; i++){
					if (input.options[i].value == value)
						input.selectedIndex = i;
				}
			}
		break;
		case 'TEXTAREA':
			input.value = value;
		break;
	}
};

/* Función para redondear.
   Ejemplo:      redondear('345.678',',','9999.99')   Salida: 0345,67 
   Otro Ejemplo: redondear('1.078','.','99.9999')     Salida: 01.0780 */
function redondear(cantidad,delim,mascara) {
	var cant = parseFloat(cantidad);
	var ent = (!mascara ? 0 : mascara.split('.')[0].length);
	var dec = (!mascara ? 2 : mascara.split('.')[1].length);
	var cadena = '';
	//numero = Math.round(cantidad * Math.pow(10, deci))/ Math.pow(10, deci);
	if (cant == 0){
		cadena = String(cant); 
		for (var i=0; i<ent-1; i++)
			cadena += '0'
		cadena += delim;
		for (var i=0; i<dec; i++)
			cadena += '0';
	} else {		
		numero = Math.round(cantidad * Math.pow(10, dec));
		cadena = String(numero);
		var longitud = cadena.length;
		var entNum = cadena.substr(0,longitud-dec).length;
		if (entNum < ent)
			for (i=0; i<ent-entNum; i++)
				cadena = '0' + cadena;
		longitud = cadena.length; 
		cadena = cadena.substring(0, longitud-dec)+delim+cadena.substring(longitud-dec);
	}
	return cadena;
};

// Funciones para eliminar espacios en blanco
function ltrim(s) { 
    return s.replace(/^\s+/gi, ''); 
} 
 
function rtrim(s) { 
    return s.replace(/\s+$/gi, ''); 
} 
 
function trim(s, dupl) { 
	if (dupl) s = s.replace(/\s+/gi,' '); //eliminar espacios duplicados
    return rtrim(ltrim(s)); 
}

