//---------------------------------------------------------
// CONSTANTES
//---------------------------------------------------------
var MAX_ITEMS = 10;

ns4 = (document.layers)? true: false;
ie4 = (document.all)? true: false;
std = (document.getElementById)? true: false;
//---------------------------------------------------------
//---------------------------------------------------------
// Clase Item que almacenará los datos de un elemento de la cesta
//---------------------------------------------------------
//---------------------------------------------------------
// Crea un nuevo objeto Item
//---------------------------------------------------------
/* 
	type indica el tipo de item:
		0 -> No válido
		1 -> Mayor que
		2 -> Menor que
		3 -> Igual a
		4 -> Entre
		5 -> Otro
		6 -> Entre fechas
		7 -> No válido
		8 -> No usado
		9 -> Suspension de pagos
		10 -> Quiebra
		11 -> Disolucion
		12 -> Extincion
		
	id identificador de clase del item (nombre del campo - txtDNI por ejemplo)
*/
//---------------------------------------------------------
function Item(typ, att1, att2, id)
{
	this.type = typ;
	this.attribute1 = att1;
	this.id = id;
	this.attribute2 = att2; // El attribute2 se utilizará para código cuando type no sea 4
	this.getString = getStringItem;
}
//---------------------------------------------------------
// Funcion que devuelve la cadena a imprimir en la cesta segun el tipo de item

function getStringItem()
{
	if (this.type == 1) return('&nbsp;&nbsp;&nbsp;- Mayor que <b>'+ this.attribute1+this.attribute2+'</b>');
	if (this.type == 2) return('&nbsp;&nbsp;&nbsp;- Menor que <b>'+ this.attribute1+this.attribute2+'</b>');
	if (this.type == 3) return('&nbsp;&nbsp;&nbsp;- Igual a <b>'+ this.attribute1+this.attribute2+'</b>');
	if (this.type == 4) return('&nbsp;&nbsp;&nbsp;- Entre <b>'+ this.attribute1+ '</b> : <b>'+this.attribute2+'</b>');
	if (this.type == 5) return('&nbsp;&nbsp;&nbsp;- <b>'+this.attribute1+'</b>');
	if (this.type == 6) return('&nbsp;&nbsp;&nbsp;- Entre <b>'+this.attribute1+'</b> y <b>'+this.attribute2+'</b>');
	if (this.type == 9) return('&nbsp;&nbsp;&nbsp;- Suspensión de pagos entre <b>'+this.attribute1+'</b> y <b>'+this.attribute2+'</b>');
	if (this.type == 10) return('&nbsp;&nbsp;&nbsp;- Quiebra entre <b>'+this.attribute1+'</b> y <b>'+this.attribute2+'</b>');
	if (this.type == 11) return('&nbsp;&nbsp;&nbsp;- Disolución entre <b>'+this.attribute1+'</b> y <b>'+this.attribute2+'</b>');
	if (this.type == 12) return('&nbsp;&nbsp;&nbsp;- Extinción entre <b>'+this.attribute1+'</b> y <b>'+this.attribute2+'</b>');
}
//---------------------------------------------------------
//---------------------------------------------------------
// Clase que agrupará todos los items en compartimentos de la cesta
//---------------------------------------------------------
//---------------------------------------------------------
function Lista()
{
	this.item = new Array(MAX_ITEMS);
	this.count = 0;
	this.add = addItem;
	this.del = delItem;
	this.title = '';       // Titulo de la seccion
	this.secondtitle = ''; // Titulo cambiante ej. [COMUNIDAD]
	this.is = isItem;
	this.isSimilar = isSimilarItem;
	this.drop = dropLista;
}
//---------------------------------------------------------
// Borra todo el contenido de una lista

function dropLista()
{
	this.count = 0;
	this.secondtitle = '';
}
//---------------------------------------------------------
// Añade un item a una lista

function addItem(typ, att1, att2, id)
{
	if (this.count < 0) return;
	if (this.is(typ, att1, att2, id)) return; // Comprueba que no exista
	if (this.count >= MAX_ITEMS) alert('No se pueden seleccionar mas de '+MAX_ITEMS+' items');
	
	this.item[this.count] = new Item(typ, att1, att2, id);
	this.count++;
}
//---------------------------------------------------------
// Elimina un item de una lista

function delItem(index)
{
	// Comprobamos rango
	
	if (index >= this.count) return;
	if (index < 0) return;
	
	for (var i=index; i<this.count-1; i++)
		this.item[i] = this.item[i+1];
		
	this.count--;

	if (this.count == 0) this.secondtitle = '';
}
//---------------------------------------------------------
// Devuelve si un item pertenece a una lista

function isItem(typ, att1, att2, id)
{
	for (var i=0; i<this.count; i++)
		if ((this.item[i].type==typ)&&(this.item[i].attribute1==att1)&&(this.item[i].attribute2==att2)&&(this.item[i].id==id))
			return true;
			
	return false;
}
//---------------------------------------------------------
// Devuelve si existe algun item del tipo especificado

function isSimilarItem(id)
{
	for (var i=0; i<this.count; i++)
		if (this.item[i].id==id)
			return(i);
			
	return(MAX_ITEMS);
}
//---------------------------------------------------------
//---------------------------------------------------------
// Clase que representará la cesta con n secciones
//---------------------------------------------------------
//---------------------------------------------------------
// sect es el número de secciones que tendrá la cesta
function Cesta(sect)
{
	this.section = new Array(sect);
	this.count = sect;
	
	for (var i=0; i<sect; i++)
		this.section[i] = new Lista();
		
	this.add = addItemCesta;
	this.del = delItemCesta;
	this.print = printCesta;
	this.drop = dropCesta;
}
//---------------------------------------------------------
// Hace un vaciado de la cesta

function dropCesta(iddiv, objnam)
{
	for (var i=0; i<this.count; i++)
		this.section[i].drop();
	
	this.print(iddiv, objnam);
}
//---------------------------------------------------------
// Añade un item a una seccion de la cesta

function addItemCesta(sect, typ, att1, att2, id)
{
	this.section[sect].add(typ, att1, att2, id);
}
//---------------------------------------------------------
// Elimina un item de una seccion de la cesta
// iddiv debe ser el nombre de la capa donde se encuentra la cesta y objnam el nombre del 
// objeto cesta

function delItemCesta(sect, ind, iddiv, objnam)
{
	this.section[sect].del(ind);
	this.print(iddiv, objnam);
}
//---------------------------------------------------------
// Escribe un texto HTML en una capa

function layerWrite(iddiv, text)
{
	if (ns4){
		var lyr = document.layers[iddiv].document;
		lyr.open();
		lyr.write(text);
		lyr.close();
	}
	else if (ie4) {
		document.all[iddiv].innerHTML = text;
	}
	else if (std) {
		document.getElementById(iddiv).innerHTML = text;
	}
}
//---------------------------------------------------------
// Repinta el contenido de la cesta
// iddiv será el nombre de la capa donde se encuentra la cesta y objnam el nombre del objeto
// cesta

function printCesta(iddiv, objnam)
{

	// Nota la tabla debe estar entre <p></p> para que funcione con netscape
	
	// Cabecera de la cesta

	var sHtml = '<P><TABLE cellSpacing=0 cellPadding=0  width=180  bgColor=#ffffff border=0>' +
					'<TR>' +
					'<TD width="154" class="ladoarriba" align="center"><font class="TextoTituloCestaRanking">CESTA CRITERIOS SELECCIONADOS</font></TD>' +
					'<TD width="26" class=ladoizq >&nbsp;</TD>' +
					'</TR>';
	
	// Secciones
		
	for (var i=0; i<this.count; i++){
		sHtml = sHtml + 
			'<TR class="FondoSubTituloRanking">' +
			'<TD colspan="2" align="center" class="lados" ><font class="TextoCriterioCestaRanking">' +
			this.section[i].title+this.section[i].secondtitle +
			'</font></TD>' +
			'</TR>';

		if (this.section[i].count==0)
			sHtml = sHtml +
				'<TR><TD colspan="2" class="lados">No hay criterios seleccionados</TD></TR>';
		
		else
			for (var j=0; j<this.section[i].count; j++)	
				sHtml = sHtml +
					'<TR><TD colspan=2 class="lados"><img src='+dir_img+'sp.gif></TD></TR>' +
					'<TR>' +
					'<TD class="lados_izq">' + this.section[i].item[j].getString() + '</TD>' +
					'<td class="lados_der"><a href=\"javascript:'+objnam+'.del('+i+','+j+',\''+iddiv+
					'\',\''+objnam+'\')\"><img src='+dir_img+'otra.gif width=19 height=18 border=0 alt=\"eliminar de la cesta de criterios\">'+
					'</a></td>' +
					'</TR>' +
					'<TR><TD colspan=2 class="lados"><img src='+dir_img+'sp.gif></TD></TR>';
	}

	// Pie de cesta

	sHtml = sHtml +
		'<TR>' +
		'<TD colspan="2"><a href=\"javascript:'+objnam+'.drop(\''+iddiv+'\',\''+objnam+'\')\">' + 
		'<img src="'+dir_img+'cesta2ranking.gif" width="180" height="19" border="0" alt="vaciar la cesta de criterios"></a></TD>' +
		'</TR>' +
		'</TBODY></TABLE></P>'


		
	layerWrite(iddiv, sHtml); // Escribimos en la capa
}
//---------------------------------------------------------

