function validaPwd(str){
  var ma = false;
  var mi = false;
  var num = false;
  var caracter = "";
  for (i=0;i<str.length;i++) {
    caracter = str.charAt(i);
    if(!isNaN(caracter))num=true;
    //alert(num);
  }
  if(str != str.toLowerCase()){
    mi = true;
  }
  if(str != str.toUpperCase()){
    ma = true;
  }
  if(num && mi && ma){
    return false;
  }else{
    return true;
  }
}

//en el input del dv debe ir onblur='verificarRut(rut,dv)'
// esto debe ser colocado enh cada jsp o pagina html
/*function verificarRut(){
  if (valida_rut(document.forms[0].rut.value,document.forms[0].dv.value)==1){
    alert("El Rut no es Válido. Intente de nuevo");
    document.forms[0].rut.focus();
    return;
  }else{
   document.forms[0].nombres.focus();
   return;
  }
}*/



function valida_rut(rut,dv){
	var count=0;
	var count2=0;
	var factor=2;
	var suma=0;
	var sum=0;
	var digito=0;
	count2=rut.length - 1;
	while(count < rut.length){
		sum = factor * (parseInt(rut.substr(count2,1))); 
		suma = suma + sum;
		sum=0;
		count = count + 1;
		count2 = count2 - 1;
		factor = factor + 1;
		if(factor > 7){
			factor=2; 
		} 
	}
	digito= 11 - (suma % 11)
	if(digito==11){
		digito=0;
	}
	if(digito==10){
		digito="K";
	}
  
	if (digito != dv.toUpperCase()){
		return (1);
	}else{
		return (0);
	}
	
} 

//Esta función es para no dejar escribir letras en un input solo enteros.
//en el input debe ir onKeyPress="return acceptNum(event)"
var nav4 = window.Event ? true : false;
function acceptNum(evt){
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var key = nav4 ? evt.which : evt.keyCode;
  return (key <= 13 || (key >= 48 && key <= 57));
}
    
function acceptNumComa(evt){
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var escape = 44;
  var key = nav4 ? evt.which : evt.keyCode;
  return (key <= 13 || (key >= 48 && key <= 57) || key == escape);
}

function acceptNumPunto(evt){
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var escape = 46;
  var key = nav4 ? evt.which : evt.keyCode;
  return (key <= 13 || (key >= 48 && key <= 57) || key == escape);
}

function acceptNumBackSlash(evt){
  //alert(evt.keyCode);
  // NOTE: Backspace = 8, Enter = 13, '0' = 48, '9' = 57
  var escape = 220;
  var escape2 = 47;
  var key = nav4 ? evt.which : evt.keyCode;
  return (key <= 13 || (key >= 48 && key <= 57) || key == escape || key == escape2);
}
    
    
//valida si el formato corresponde a un e-mail
function isEmail(str) {
	var supported = 0;
	  if (window.RegExp) { var tempStr = "a"; var tempReg = new RegExp(tempStr); if (tempReg.test(tempStr)) supported = 1; }
	  if (!supported) return (str.indexOf(".") > 2) && (str.indexOf("@") > 0); var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	  var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$"); return (!r1.test(str) && r2.test(str));
}    

// Devuelve una cadena sin los espacios del principio
function LTrim(s){
  while (s.charAt(0) == " ")
    s = s.substr(1, s.length - 1);
   return s;
} 

// Quita los espacios en blanco del final de la cadena
function RTrim(s){
  while (s.charAt(s.length - 1) == " ")
    s = s.substr(0, s.length - 1);
  return s;   
}

// Quita los espacios del principio y del final
function Trim(s){
  var resultStr = "";
  resultStr = LTrim(s);
  resultStr = RTrim(resultStr);
  return resultStr;
}


// devuelve un error blanco si no existe error
function val_numero(num){
  var error = "";
	var exit = 0;
	
	if(isNaN(num)){
		error+="- No es un Numero";
		exit = 1;
	}			
	if(exit == 0){
		if(num<0){
			error+="- Debe ser mayor que o igual a cero";
			exit = 1;
		}
	}	
	if(exit == 0){
		if(num.indexOf(".")>-1){
			error+="- Solo se Permiten Enteros";
			exit = 1;
		}
	}
  if(error){
    alert(error);
    return 0;
  }else{
    return num;
  }
}

function despliegaError(error){
  alert("Han ocurrido el(los) siguiente(s) error(es):\n"+error);
}

//compra 2 string formato yyyy-mm-dd
function Comparar_Data(String1,String2) {
// String1 fecha mayor
// String2 fecha menor
  Data1_arr = String1.split('-')
  Data2_arr = String2.split('-')

  String1 = Data1_arr[2] + Data1_arr[1] + Data1_arr[0]
  String2 = Data2_arr[2] + Data2_arr[1] + Data2_arr[0]
  String1 = parseInt(String1);
  String2 = parseInt(String2);

  if (String1 >= String2) {
    return true;
  }
  return false;

}

//valida si el explorador es IE u Otros 
//retorna true si es IE de lo contrario flase
var browser=navigator.appName + " " + navigator.appVersion;

var getkey=browser.substring(0, 12);
function validateIE(){
  if (browser.substring(0, 9)=="Microsoft"){
    return true;
  }else{
    return true;
  }
}

function tablaTieneAgrupacion(table, iTotalCols) {
  var tabla  = document.getElementById(table);
  var iCols = tabla.rows[0].cells.length;

  if(iCols==iTotalCols)
    return false;
  else
    return true;
}

// 
// Retorna el n° de la celda correspondiente a numCol:
//
function getNumHeadCell(table, aSpanOriginal, iTotalCols, numCol) {
  var tbl  = document.getElementById(table);
  var iCol = 0;

  for(var i=0; i<iTotalCols; i++) {
    var iIdGroupCell = getGroupIdCell(aSpanOriginal, iTotalCols, i);
    var iColSpan = aSpanOriginal[iIdGroupCell];
    //alert('numCol=' + numCol + ', i=' + i + ', iCol=' + iCol + ', iColSpan=' + iColSpan );

    if( (i + iColSpan - 1) >= numCol) {
      //alert('return=' + iCol);
      return iCol;
    }

    if(iColSpan>1) {
      i += iColSpan - 1;
    }
    iCol ++;
  }
  //alert('num no econtrado');
  return 0;
}


// 
// Retorna el n° de la celda que agrupa a numCol:
//
function getGroupIdCell(aSpanOriginal, iTotalCols, numCol) {

  for(var i=0; i<iTotalCols; i++) {
    var iColSpan = aSpanOriginal[i];
    //alert('numCol=' + numCol + ', i=' + i + ', iColSpan=' + iColSpan );

    if( (i + iColSpan - 1) >= numCol) {
      //alert('return=' + i);
      return i;
    }

    if(iColSpan>1) {
      i += iColSpan - 1;
    }
  }
  //alert('num no econtrado');
  return 0;
}


//
// Oculta o muestra una columna particular numCol dentro de la tabla.
// En caso de existir agrupación:
//  si se oculta la cabecera de grupo, se oculta el grupo completo
//  si se oculta otro miembro del grupo, se oculta la columna simple y se reduce el colSpan del grupo en 1
//
function showColumn2(table, aSpanOriginal, iTotalCols, numCol, show) {
  var stl;
  if (show) stl = ''
  else stl = 'none';

  //alert('iTotalCols=' + iTotalCols + ', numCol=' + numCol + ', show=' + show);

  var tbl  = document.getElementById(table);
  var rows = tbl.rows;

  // si la tabla no tiene filas retornamos.
  if(rows.length==0)
    return;

  var clspn = 0;
  var realCol = 0;
  
  if(tablaTieneAgrupacion(table, iTotalCols)) {
    var iNumHead = getNumHeadCell(table, aSpanOriginal, iTotalCols, numCol);
    var headCel = rows[0].cells[iNumHead];
    var iIdGroupCell = getGroupIdCell(aSpanOriginal, iTotalCols, numCol);
    var iOriginalColSpan = aSpanOriginal[iIdGroupCell];

    if ((iOriginalColSpan == 1)||(iIdGroupCell == numCol) ) {
      //se está ocultando la cabecera del grupo o una columna simple (sin agrupación)
      headCel.style.display=stl;
      clspn = headCel.colSpan;
    } else {
      //alert('se reduce el colspan en 1 o se restaura el valor original (' + iOriginalColSpan + ')' );
      if(stl != '') {
        headCel.colSpan = headCel.colSpan-1;
        //clspn = headCel.colSpan - (numCol-iIdGroupCell) + 1;
      } else {
        headCel.colSpan = iOriginalColSpan;
        //clspn = headCel.colSpan - (numCol-iIdGroupCell);
      }  
      clspn = 1;
    }

    //alert('-- numCol=' + numCol + ', iIdGroupCell=' + iIdGroupCell + ', iNumHead=' + iNumHead + ', iOriginalColSpan=' + iOriginalColSpan + ', clspn=' + clspn);

    realCol = numCol;

  } else {
    // obtenemos el cell que vamos a ocultar y su colspan
    var headCel = rows[0].cells[numCol];
    clspn = headCel.colSpan;
    headCel.style.display=stl;

    // Obtenemos el indice real de la columa a ocultar. lo que llega en numCol es el indice de la columna con los colSpan incluidos
    for(var i=0; i<=numCol; i++) {
      if(i>0) 
        realCol += rows[0].cells[i-1].colSpan;
    }
  }

  //alert('realCol=' + realCol + ", clspn= " + clspn);

  //ocultamiento a partir de la fila 1
  for(var i=1; i<rows.length; i++) { 
    if(rows[i].cells[0].colSpan==1) {
      for(j=0; j<clspn; j++)
        rows[i].cells[realCol+j].style.display=stl;
    } 
  }  

}


// Controla la visibilidad de una columna de una tabla.
//numCol corresponde al N° de columna SIN considerar agrupaciones
function showColumn(table, numCol, show) {
  var stl;
  var clspn = 0;
  if (show) stl = ''
  else stl = 'none';

  var tbl  = document.getElementById(table);
  var rows = tbl.rows;

  // si la tabla no tiene filas retornamos.
  if(rows.length==0)
    return;

  // obtenemos el cell que vamos a ocultar y 
  // su colspan
  var headCel = rows[0].cells[numCol];
  clspn = headCel.colSpan;

  var realCol = 0;

  // Obtenemos el indice real de la columa a ocultar.
  // lo que llega en numCol es el indice de la columna con los colSpan
  // incluidos
  for(var i=0; i<=numCol; i++) {
    if(i>0) 
      realCol+=rows[0].cells[i-1].colSpan;
    
  }

  headCel.style.display=stl;

  for(var i=1; i<rows.length; i++) { 
    if(rows[i].cells[0].colSpan==1) {
      for(j=0; j<clspn; j++)
        rows[i].cells[realCol+j].style.display=stl;
    } 
  }  

}



/*
recibe un arreglo del tipo
extArray = new Array(".gif",".jpg");
*/
function fileExtension(file, extArray){
  allowSubmit = false;
  if (!file) return("- Imagen no Existe.\n");
  while (file.indexOf("\\") != -1)
    file = file.slice(file.indexOf("\\") + 1);
  
  ext = file.slice(file.lastIndexOf(".")).toLowerCase();
  for (var i = 0; i < extArray.length; i++) {
    if (extArray[i] == ext) {
      allowSubmit = true; break; 
    }
  }
  if (allowSubmit) 
    return "";
  else
    return("Solo puede subir archivos del tipo:  " 
    + (extArray.join("  ")) + ". Por favor, seleccione un nuevo archivo "
    + "para subir y mandelo después.\n");

}

function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isBoolean(a) {
    return typeof a == 'boolean';
}

function isEmpty(o) {
    var i, v;
    if (isObject(o)) {
        for (i in o) {
            v = o[i];
            if (isUndefined(v) && isFunction(v)) {
                return false;
            }
        }
    }
    return true;
}

function isFunction(a) {
    return typeof a == 'function';
}

function isNull(a) {
    return a === null;
}

function isNumber(a) {
    return typeof a == 'number' && isFinite(a);
}

function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}

function isString(a) {
    return typeof a == 'string';
}

function isUndefined(a) {
    return typeof a == 'undefined';
} 

/**
 cuenta palabras y caracteres 
*/
function contarPalabras (this_field, show_word_count, show_char_count) {
if (show_word_count == null) {
show_word_count = true;
}
if (show_char_count == null) {
show_char_count = false;
}
var char_count = this_field.value.length;
var fullStr = this_field.value + " ";
var initial_whitespace_rExp = /^[^A-ZÁÉÍÓÚÑa-záéíóúñ0-9]+/gi;
var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
var non_alphanumerics_rExp = rExp = /[^A-ZÁÉÍÓÚÑa-záéíóúñ0-9]+/gi;
var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
var splitString = cleanedStr.split(" ");
var word_count = splitString.length -1;
if (fullStr.length <2) {
word_count = 0;
}
/*if (word_count == 1) {
wordOrWords = " word";
}
else {
wordOrWords = " words";
}
if (char_count == 1) {
charOrChars = " character";
} else {
charOrChars = " characters";
}
if (show_word_count & show_char_count) {
alert ("Word Count:\n" + "    " + word_count + wordOrWords + "\n" + "    " + char_count + charOrChars);
}
else {
if (show_word_count) {
alert ("Word Count:  " + word_count + wordOrWords);
}
else {
if (show_char_count) {
alert ("Character Count:  " + char_count + charOrChars);
      }
   }
}*/
return word_count;
}

function getTextSelect(obj){
  var indice = obj.selectedIndex;
  var texto  = obj.options[indice].text;
  return texto;
}

// Detectamos como se muestra la celda, para Mozilla primero y despues IE5
var showMode = 'table-cell';
if(document.all) showMode = 'block';

function toggleVisibility(colId, visible) {
    mode = visible ? showMode:'none';
    cells = document.getElementsByName(colId);
    for(j = 0; j < cells.lenght; j++) {
        cells[j].style.display = mode;
    }
}

//FUNCION LISTA CHECKBOX
//Checkea un checkbox de TODOS en una lista cuando estan todos checkeados y viceversa. Ej.
//TODOS=<input type="checkbox" id="todos" onclick="selAllChecks(this,'todos','mes', 12)">
//FILA LISTA=<input type="checkbox" id="x1" value="1" onclick="selFirstCheck('todos','mes', 12)">
function selAllChecks(obj, campo, lista, largo){
    if(document.getElementById(campo).checked){
        for(i=0;i<largo;i++) document.getElementById(lista+i).checked=true;
    }else{
        for(i=0;i<largo;i++) document.getElementById(lista+i).checked=false;
    }
}
function selFirstCheck(campo, lista, largo){
    todos=1;
    for(i=0;i<largo;i++){
        if(document.getElementById(lista+i).checked==false) todos=0;        
    }
    if(todos==1) document.getElementById(campo).checked=true;
    else document.getElementById(campo).checked=false;
}
//FUNCION LISTA CHECKBOX END


function fechaIniMenorFechaFin(fechaIniStr, fechaFinStr){
    var aux1 = fechaFinStr.split("-");
    aux2 = fechaIniStr.split("-");

    fechalimite = aux1[2] + aux1[1] + aux1[0]
    fecha = aux2[2] + aux2[1] + aux2[0]
    if(fechalimite < fecha) return true;
    else return false;
}
