/* ------------------------------------------------- */
/* ----->> AVL 3 - Modulo Funciones Globales <<----- */
/*
Fecha Inicio	: 15/10/2008
@author Carolina Casanova Garcia
@update		22/08/2011 quinqui: Agregadas funciones hasta ------FIN 22/08/2011-------
*/
/* ------------------------------------------------- */

var i;

//-------------------------------------INI 22/08/2011---------------------------------

/**
---------------------------------------
@author	Carolina Casanova G.
@date		16/04/2010
@update	18/05/2010 ccasanova: Adaptada desde SICAP.
@param	objChk			object	"input.checkbox"
@param	nomChkList	string	Nombre array de checkboxes a cambiar estado checked
@return	void
*/
function marcarTodosCheck(objChk, nomChkList)
{
	// Recorre Lista de Alumnos
	if (typeof document.getElementsByName(nomChkList) != "undefined")
	{
		var f = 0;
		var boo = objChk.checked;
		var objDest = document.getElementsByName(nomChkList);
		
		if (objDest.length > 0)
		{
			for (f = 0; f < objDest.length; f++)
			{
				objDest[f].checked = boo;
			}
		}
	}
	else
	{
		alert("No hay Datos.");
	}
}

/**
-------------------------------------------------------------------------------
@about	Retorna valor de parametro requerido de ancestro de objeto
@author	Carolina Casanova G.
@date		17/06/2011
@param	obj			object		Objeto "hijo"
@param	niveles	integer		Cantidad de niveles hacia atras del ancestro a buscar.
@param	param		string		Opcional. Parametro del ancestro a devolver. Por defecto retorna object.
@return	mixed
*/
function ancestro(obj, niveles, param)
{
	var i, ult;
	var anc = new Array();
	anc[0] = obj;
	for (i = 1; i < niveles + 1; i++)
	{
		anc[i] = anc[i-1].parentNode;
		ult = i;
	}
//	alert(param + " " + anc[ult].id);
	if (param == "id")
	{
		return anc[ult].id;
	}
	if (param == "name")
	{
		return anc[ult].name;
	}
	else
	{
		return anc[ult];
	}
}

/**
-------------------------------------------------------------------------------
@about	Lee elementos de objeto y almacena sus valores en un array.
@author	Carolina Casanova G.
@date		17/06/2011
@param	obj		object		Objeto ha ser leido para obtener sus valores y almacenarlos en array.
@return	void
*/
function almacenarArray(obj)
{
	var arr = new Array();
	
	if (typeof obj != "undefined")
	{
		var f = 0;
		var g = 0;
		
		if (obj.type == "select-multiple")
		{
			for (f = 0; f < obj.options.length; f++)
			{
				if (obj.options[f].selected)
				{
					arr[g] = obj.options[f].value;
					g++;
				}
			}
		}
		else 
		{
			if (obj.type == "checkbox")
			{
				var objNom = document.getElementsByName(obj.name);
				for (f = 0; f < objNom.length; f++)
				{
					if (objNom[f].checked)
					{
						arr[g] = objNom[f].value;
						g++;
					}
				}
			}
			else
			{
				if ((obj.type == "checkbox" && objNom[f].checked) || 
						(obj.type == "select-multiple" && obj.options[0].selected) || 
						(obj.type != "checkbox" && obj.value != ""))
				{
					arr[0] = obj.value;
				}
			}
		}
	}
	return arr;
}

/**
---------------------------------------
@about	Averigua si objeto es tipo Array
@author	Alfredo Artiles <http://twitter.com/aartiles24>
@date		12/01/2009
@update	22/02/2010 ccasanova: Agregada comparacion NodeList.
@param	obj	object	El objeto a evaluar
@return	boolean
*/
function isArray(obj)
{
	if (Object.prototype.toString.call(obj) === '[object Array]' || 
		 Object.prototype.toString.call(obj) === '[object NodeList]' || 
		 Object.prototype.toString.call(obj) === '[object HTMLCollection]')
	{
		return true;
	}
	else
	{
		return false;
	} 
}

function esNumero(val)
{
	val = val.trim() + "";
	
	if (val.length > 0)
	{
		var ok		= true;
		var char	= "0123456789.";
		var i			= 0;
		
		for (i = 0; i < val.length; i++)
		{
			if (char.indexOf(val.substr(i, 1)) === -1)
			{
				ok = false;
				break;
			}
		}
		
		return ok;
	}
	return false;
}

/**
---------------------------------------
@about	Alterna la clase (CSS) del objeto de destino
@author	Carolina Casanova Garcia
@date		28/09/2010
@return	void
*/
function alternarClase(idDest, claseAnt, claseNue)
{
	if (typeof document.getElementById(idDest) != "undefined")
	{
		var objDest = document.getElementById(idDest);
		
		if (objDest.className == claseNue)
		{
			objDest.className = claseAnt;
		}
		else
		{
			objDest.className = claseNue;
		}
	}
}

/**
---------------------------------------
@about	Cambia la visibilidad de un objeto
@author	Carolina Casanova Garcia
@date		15/04/2011
@param	boo		boolean
@param	objId	string		ID Objeto HTML
@return	void
*/
function mostrar(boo, objId)
{
	if (typeof document.getElementById(objId) != "undefined")
	{
		var obj = document.getElementById(objId);
		
		if (boo)
		{
			obj.style.display			= "";
			obj.style.visibility	= "visible";
		}
		else
		{
			obj.style.display			= "none";
			obj.style.visibility	= "hidden";
		}
	}
}

/**
---------------------------------------
@author	Carolina Casanova Garcia
@date		21/12/2010
@param	barraId		string	ID barra que contiene solapas
@param	solapaId	string	ID solapa a seleccionar
@param	areaId		string	ID area que contiene capas
@param	capaId		string	ID capa a mostrar
@return	void
*/
function seleccionarPestanya(barraId, solapaId, areaId, capaId)
{
	if (document.getElementById(barraId) != "undefined")
	{
		if (document.getElementById(areaId) != "undefined")
		{
			var barra = document.getElementById(barraId);
			var area	= document.getElementById(areaId);
			
			// recorre solapas
			var b = 0;
			for (b = 0; b < barra.childNodes.length; b++)
			{
				if (barra.childNodes[b].id != "undefined" && barra.childNodes[b].id != "")
				{
					if (barra.childNodes[b].id == solapaId)
					{
						barra.childNodes[b].className = "seleccionada";
					}
					else
					{
						barra.childNodes[b].className = "";
					}
				}
			}
			
			// recorre capas
			var b = 0;
			for (b = 0; b < area.childNodes.length; b++)
			{
				if (area.childNodes[b].id != "undefined" && area.childNodes[b].id != "")
				{
					if (area.childNodes[b].id == capaId)
					{
						area.childNodes[b].className = "visible";
					}
					else
					{
						area.childNodes[b].className = "oculta";
					}
				}
			}
		}
	}
}

//-------------------------------------FIN 22/08/2011---------------------------------

//--------------------------------------------------------------------
// Función retorna cadena numérica rellena con Ceros a la izquierda 
// (copiada de misma función hecha por mí en PHP)
function Zeros(numero, largo)
{
	var lrg = largo - numero.length;
	var val = numero;
	for (var z = 0; z < lrg; z++)
	{  val = "0" + val;  }
	return val;
	
}

//--------------------------------------------------------------------
function Ahora(tipo, sep, leng, hora)
{
	// Valores recibidos :
	//  tipo	:	Formato de Fecha
	//				0 => Martes 25 de Octubre de 1998 [, 15:25:02 ]
	//				1 => 25-10-1998 [, 15:25:02 ]
	//				2 => 1998-10-25 [ 15:25:02 ]
	//	sep		:	Tipo de Separador de Fecha (tipos 1 y 2). Ejs:
	//				"-" => 25-10-1998
	//				"/" => 25/10/1998
	//	leng	:	Idioma de la Fecha (tipo 0)
	//				"es" => español
	//				"en" => inglés
	//	hora	:	Boolean determina si se incluye Hora a continuación de la Fecha
	
	var fres;
	var fch = new Date();
	
	var fYY = fch.getYear();
	var fDD = fch.getDate();
	var fDs = fch.getDay();	
	var fMM = fch.getMonth();
	
	var mes = fMM + 1;
	
	if (mes.toString.length == 1) {  mes = "0" + mes;  }
	if (tipo > 0) {  if (fDD.toString.length == 1) {  fDD = "0" + fDD;  } }
	
	if (sep == "")
	{  sep = "-";  }
	
	// Reformateo de Año :
	if (fYY < 1000)
	{  fYY += 1900;  }
	
	switch (tipo)
	{
		//--------------------
		// DD-MM-YYYY 
		case 1:
			fres = fDD + sep + mes + sep + fYY;
			break;
			
		//--------------------
		// YYYY-MM-DD
		case 2:
			fres = fYY + sep + mes + sep + fDD;
			break;
		
		//--------------------
		// Fecha Larga
		default:
		
			if (leng == "es")
			{
				var sMM = new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"); 
				var sDD = new Array("Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado");
				fres = sDD[fDs] + " " + fDD + " de " + sMM[fMM] + " de " + fYY;
			}
			else
			{
				var sMM = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
				var sDD = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
				fres = sDD[fDs] + ", " + fDD + " " + sMM[fMM] + " " + fYY;
			}
	}
	
	// Muestra Hora
	if (hora)
	{
		fres = fres + " " + fch.getHours() + ":" + fch.getMinutes() + ":" + fch.getSeconds();
	}
	
	return fres;
}

//--------------------------------------------------------------------
// Avanza 1 página hacia atrás en el Historial, de haberlo
function Atras()
{
  if (history.length > 0)
  {  history.back()  }
}

//--------------------------------------------------------------------
// Abre ventana Popup
function AbrirPop(ruta, destino, parametros)
{
  window.open(ruta, destino, parametros);
}

//--------------------------------------------------------------------
// Copia el Texto seleccionado en el Portapapeles
// Basado en Código © Joe Burns en http://www.htmlgoodies.com/beyond/javascript/article.php/3458851
function CopiarPP(id, sinformato)
{
  Copied = id.createTextRange();
  if (sinformato)
  {  Copied.execCommand("RemoveFormat")  }
  Copied.execCommand("Copy");
}


//--------------------------------------------------------------------
// Muestra / Oculta 1 Elemento del Documento HTML
function Mostrar(boo, id)
{
	mostrar(boo, id);
}


//--------------------------------------------------------------------
// Crea nuevo elemento dentro de un combo Select
function NuevoItem(ctl, val, txt, ind)
{
 ctl.options[ind] = new Option(txt, val);
}

function LimpiarCbo(ctl)
{
  var i;
  for (i = ctl.length - 1; i > -1; i--)
  { ctl.remove(i) }
}

//--------------------------------------------------------------------
// Comprueba que la cadena sea sólo numérica :
function isNumeric(cad)
{
 var i, j;
 var ch = "";
 var ok = false;

 for (i = 0; i < cad.length; i++)
 {
  ok = false;
  for (j = 48; j < 58; j++)
  { if (cad.substr(i, 1) == String.fromCharCode(j)) { ok = TRUE; break } } 
  if (!ok) { break }
 }
 
 if (!ok) 
 { return false }
 else
 { return true }
}

//------------------------------------------------------------------------
// Obtiene Dígito Verificador de un RUT en base módulo 11
function DV(rut)
{
 var dv;
 var multiplo = 2;
 var suma     = 0;
 var resto    = 0;
 var modulo;
 
 for (i = rut.length - 1; i > -1; i--)
 {
  if (multiplo == 8)
  { multiplo = 2 }
  modulo = rut.substr(i, 1);
  modulo *= multiplo;
  suma     += modulo;
  multiplo++;
 }
 
 resto = suma % 11;

 if (resto > 1)
 { dv = 11 - resto }
 else
 { 
  if (resto == 1) { dv = 'K' }
  if (resto == 0) { dv = 0 }
 }

 return dv;
}

