/* ------------------------------------------
		CyberSearch - Variables Globales
   ------------------------------------------
*/

//AQUI PONGO EL HTML CON LOS REEMPLAZOS QUE LUEGO PROGRAMARE
var cybsResultFormat		= "<img src='imagenes/vacio.gif' width='15' height='15'><a href='front_notas_list.php?id_autor={1}' class='tit_not_home_2'>{2}</a>";
//AQUI PONGO LOS REEMPLAZOS Y SEGUIDO EL VALOR QUE NECESITO QUE APAREZCA, EL MISMO DEBO HABERLO PEDIDO EN FRONT_CYBERSEARCH.PHP
var cybsFormatReplaces	  = new Array();
	cybsFormatReplaces[0] = new Array();
	cybsFormatReplaces[0][0]="{1}";
	cybsFormatReplaces[0][1]="id_autor";
	cybsFormatReplaces[1] = new Array();
	cybsFormatReplaces[1][0]="{2}";
	cybsFormatReplaces[1][1]="str_nomyape";
//DEBO ESPECIFICAR CUANTOS REEMPLAZOS HARE.
var	cantReplaces			= 2;

var cybsResult				= new Array();
var cybsPageNumber			= 0;
var cybsPageCount			= 1;
var cybsLastFilter			= "";
var cybsFIRSTREAD			= false;


//------------------------------------------------
// filterArray
//		filtra el array cybsData de acuerdo con el valor de filter y las opciones
//		mode e ignoreCase y copia el resultado en cybsResult.
//		Retorna el número de aciertos
function filterArray( filter, mode, ignoreCase )
{
	//inicializo variables
	var i=0, re, hit=false, hitCount=0, modif="";

	cybsResult = new Array();

	if (ignoreCase)
		modif = "i";

	// si el filtro actual es distinto al último utilizado, fuerzo el repaginado
	if (cybsLastFilter != filter) {
	    cybsLastFilter = filter;
	    cybsPageNumber = 0;
	}

	// hago la búsqueda sólo si el filtro tiene algún valor
	if (filter != "" ) {
		//determino la expresión de búsqueda
		switch(mode) {
			case CYBS_SEARCH_ANY:
				re = new RegExp(filter, modif);
				break;
			case CYBS_SEARCH_WORD:
				re = new RegExp("\\b" + filter, modif);
				break;
			case CYBS_SEARCH_FIRST:
			default:
				re = new RegExp("^" + filter, modif);
		}
		//hago la comparación y copio las coincidencias en cybsResult
		//para cada registro...
	    for(i in cybsData) {
	    	hit=false;
	    	//...busco en los campo especificados
	    	for(j in cybsSearchIn) {
	    		fieldValue = cybsData[i][cybsSearchIn[j]];
				if (fieldValue.match(re)!=null)
					hit=true;
			}
			if (hit)
				cybsResult[hitCount++] = cybsData[i];
	    }
	} else {
	    //cybsFIRSTREAD define si al inicio se ve todo o nada.
    	if (cybsFIRSTREAD)
    		cybsResult = cybsData;
	}
	// actualiza el contador de páginas
	cybsPageCount = getPageCount(hitCount);

	populateRecords();
	return hitCount;
}


//------------------------------------------------
// populateRecords
//		llena los elementos HTML con los datos filtrados
function populateRecords()
{
	var row=null, cell=null;
	var i=0, ind=0, rowBase=0, rowLimit=0, cybsRowCount=0, hasData=false;
	var fieldName="", fieldValue="";
	var reeemplazo="";
	var contenido="";
	var cell_Replaced="";

    //establezco los límites de filas a mostrar
    cybsRowCount = cybsData.length;
    rowLimit = (cybsRowsPerPage>0) ? cybsRowsPerPage : cybsRowCount;
    rowBase = cybsPageNumber * cybsRowsPerPage;

	for (i=0; i<cybsRowCount; i++) {
        ind = rowBase + i;
        row = getElem("cybS_Row" + i);
        if (i<rowLimit) {
            //establezco la visibilidad de la fila
            hasData = (ind < cybsResult.length);
            if (!hasData && cybsHideEmptyRows)
                setVisibility(row, false);
            else
                setVisibility(row, true);
            //lleno los contenidos de cada celda
            for(j in cybsFields) {
                fieldName = cybsFields[j];
                cell = getElem("cybS_Row" + i + "_" + fieldName);
                getStyle(cell).backgroundColor = cybsRowColor[i % cybsRowColor.length];
                if (hasData) {
                	cell_Replaced=cybsResultFormat;
                	for (p=0; p<cantReplaces; p++) {
						reemplazo=cybsFormatReplaces[p][0];
						contenido=cybsFormatReplaces[p][1];
                    	cell_Replaced=cell_Replaced.replace(reemplazo,cybsResult[ind][contenido]);
                    }
                    cell.innerHTML = cell_Replaced;
                }
                else
                    cell.innerHTML = (cybsHideEmptyRows) ? "" : "&nbsp;";
            }
        }
        else {
            cell = getElem("cybS_Row" + i + "_" + fieldName)
            cell.innerHTML = "";
            cell.style.backgroundColor = cybsRowColor[i % cybsRowColor.length];
            if (cybsHideEmptyRows)
	            setVisibility(row, false);
        }
	}
}


//------------------------------------------------
// getObjectID
//		retorna el atributo keyValue del elemento HTML que desencadenó el evento
//		si no hay un atributo keyValue definido para ese elemento, retorna false
function getObjectID()
{
	var id = event.srcElement.parentElement.keyValue;

	if (id!==undefined)
		return id;
	else
		return false;
}


//------------------------------------------------
// getPageCount
//		calcula el número de paginas en función de la cantidad de resultados
function getPageCount(rowCount) {
	return Math.ceil(rowCount / cybsRowsPerPage);
}


//------------------------------------------------
// goToPage
//		muestra la página page de resultados
function goToPage( page ) {
	if (!IsNumber(page))
		return false;
	if (page >= 0 && page < cybsPageCount) {
		cybsPageNumber = page;
		populateRecords();
	}
}


//------------------------------------------------
// goToFirstPage
//		muestra la primera página de resultados
function goToFirstPage() {
	if (cybsPageNumber > 0) {
		cybsPageNumber = 0;
		populateRecords();
	}
}


//------------------------------------------------
// goToPreviousPage
//		muestra la página anterior de resultados
function goToPreviousPage() {
   if (cybsPageNumber > 0) {
	   cybsPageNumber = cybsPageNumber - 1;
	   populateRecords();
   }
}


//------------------------------------------------
// goToNextPage
//		muestra la siguiente página de resultados
function goToNextPage() {
    if (cybsPageNumber < (cybsPageCount - 1)) {
       cybsPageNumber = cybsPageNumber + 1;
       populateRecords();
    }
}


//------------------------------------------------
// goToLastPage
//		muestra la última página de resultados
function goToLastPage() {
   if (cybsPageNumber < (cybsPageCount - 1)) {
	   cybsPageNumber = cybsPageCount - 1;
	   populateRecords();
   }
}


//------------------------------------------------
// setVisibility
//		establece la visibilidad o invisibilidad de un elemento HTML
function setVisibility( obj, visibility ) {
	if (document.all) {
	    obj.style.visibility = (visibility!=false) ? "visible" : "hidden";
	    obj.style.position = (visibility!=false) ? "relative" : "absolute";
	}
	else {
		var st = getStyle(obj);
	    if (st)
	        st.display = (visibility==true) ? '' : 'none';
	}
}
