
var ZONAS={}, ACTIVS={}, SERVS={}, CPERSONS={}, CCENTRES={},PERSONS={}, CENTRES={}, CITIES={};

function getCatDepth(obj) {
 if (obj.depth) return obj.depth;
 if (obj.cat==obj.id) obj.depth=1;
 else {
	var parent=Categs[obj.cat];
	obj.depth=getCatDepth(parent) + 1;

 }
 return obj.depth;
}

function getCatPath(n) {
 var obj=Categs[n];
 if (obj.cat==n) return obj.n;
 return getCatPath(obj.cat) + '/' + obj.n;
}

function propagateMarkChilds(n) {
 var obj=Categs[n];
 if (obj.hasChilds) return;
 obj.hasChilds=1;
 if (obj.cat==obj.id) return;
 propagateMarkChilds(obj.cat);
}

function normalizeKey(xcity) {
 var trans='áaéeíióoúu';
 alert(trans + '\n' + xcity);
 xcity=xcity.replace(/[áéíóú]/g,function(cero) {
		alert(cero);
		var p=trans.indexOf(cero)+1;
		alert(p+' - '+trans.substr(p,1));
		return trans.substr(p,1);
 });
 return xcity;
}

function preInitialize() {
 var cat, parent, row;
 for (var i in Categs) {
	cat=Categs[i];
	if (parent=Categs[cat.cat]) {
		if (!parent.childs) parent.childs={ };
		parent.childs[i]=cat;
	} // else alert('Error: categ '+cat.cat+'not found');
	switch(cat.rc) {
		case '1': // Zonas
//			cat.xn='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.substr(0,6*getCatDepth(cat)) + cat.n;
			cat.xn='          '.substr(0,getCatDepth(cat)*2) + cat.n;
//			cat.xn=getCatDepth(cat) + ' ' + cat.n;
			ZONAS[i]=cat;
			break;
		case '17': // Actividades
			if (cat.id!=17) ACTIVS[i]=cat.n;
			break;
		case '38': // Servicios
			if (cat.id!=38) SERVS[i]=cat.n;
			break;
		case '52': // Personas
			cat.xn='          '.substr(0,getCatDepth(cat)*2) + cat.n;
			CPERSONS[i]=cat;
			break;
		case '65': // Centros
			if (cat.id!=65) {
				cat.xn='          '.substr(0,getCatDepth(cat)*2) + cat.n;
				CCENTRES[i]=cat;
			}
			break;

	}
 }

 var city;
 for (var i in Rows) {
	row=Rows[i];
	row.showUrl=row.web.replace(/^https?:\/\//,'');
	if ((row.web) && (row.web.search(/^https?:/)!=0)) row.web='http://' + row.web;
	row.showEmail=row.email;
	if (row.showUrl.length>30) row.showUrl=row.showUrl.replace(/^(.{22}).+(.{4}$)/,'$1..$2');
	if (row.showEmail.length>30) row.showEmail=row.showEmail.replace(/^(.{22}).+(.{4}$)/,'$1...$2');

	if (parent=Categs[row.cat]) {
		if (!parent.rows) parent.rows={ };
		parent.rows[i]=row;
		row.Categ=parent;
	}
	switch(row.rc) {
		case '52': // Personas
			PERSONS[i]=row;
			propagateMarkChilds(row.cat);
			break;
		case '65': // Centros
			CENTRES[i]=row;
			propagateMarkChilds(row.cat);
			break;
	}
	var city=row.city, xcity=city.toLowerCase(), zone=row.z;
	var trans='áaéeíióoúu';
	xcity=xcity.replace(/[áéíóú]/g,function(cero) {
		var p=trans.indexOf(cero)+1;
		return trans.substr(p,1);
	});
//	if ((row.city=='Málaga') && (!CITIES[xcity])) { alert(xcity); }
	row.xcity=xcity;
	if (parent=Categs[row.z]) {
		if (!parent.cities) parent.cities={};
		if (!parent.cities[xcity]) parent.cities[xcity]=city;
	}
	if ((city) && (!CITIES[xcity])) CITIES[xcity]={ id: xcity, cat: row.z, n: city }
 }

 for (var i in CPERSONS) {
	if (!CPERSONS[i].hasChilds) delete(CPERSONS[i]);
 }

 for (var i in CCENTRES) {
	if (!CCENTRES[i].hasChilds) delete(CCENTRES[i]);
 }

 CITIES=objSort(CITIES,'id')
}

var FLAG=false;
function descends(p,c) {
 if (p==c) return true;
 var cat=Categs[c];
 if (!cat) { if (!FLAG) FLAG=!confirm('Bad cat '+c+' in descends()'); return false; }
 if (cat.cat==p) return true;
 if (cat.cat==cat.id) return false;
 return descends(p,cat.cat);
}

function RowMatch(row,crit) {
// return true;
 var res=
/*	(crit.S_PERS!=-1) (!crit.S_PERS || row.rc==52) && */
/*	(!crit.S_CENT || row.rc==65) && */

	( (!crit.s_pers && row.rc!=52) || ((crit.s_pers) && ((crit.s_pers==52) || descends(crit.s_pers,row.cat))) ) &&
	( (!crit.s_cent && row.rc!=65) || ((crit.s_cent) && ((crit.s_cent==65) || descends(crit.s_cent,row.cat))) ) &&

/*	crit.S_PERS && descends(crit.S_PERS,row.cat)) && */
/*	crit.S_CENT && descends(crit.S_CENT,row.cat)) && */

	(!crit.location || descends(crit.location,row.z)) &&
	(!crit.city || (crit.city==row.xcity)) &&
	(!crit.actv || containsAny(crit.actv,row.actv)) &&
	(!crit.serv || containsAny(crit.serv,row.serv));

 return res;
}

function getSearchResults(crit) {
 var row, res=[], cats=[], ixCats={ };
 if (!crit.any) return res;
 for (var i in Rows) if ((row=Rows[i]) && RowMatch(row,crit)) {
	res.push(row);
	if (!ixCats[row.cat]) { cats.push(row.cat); ixCats[row.cat]=1 }
 }
 obj={ rows:res, catlist:cats }
 return obj;
 return res;
}

function getSearchResultsHTML(results) {
 var rows=results.rows, row, nResults=rows.length, nCats=results.catlist.length;
 var tmpl;

 if (!nResults) {
	tmpl=document.getElementById('noResultsTmpl').innerHTML;
	res=tmpl;
	return res;
 }

 var MODE;
 var MODE=nResults > 50 ? 0: nResults > 25 ? 1 : 2;
 if ((MODE==0) && (nCats<4)) MODE++;
 var 	chCatTmpl=document.getElementById('chCatTmpl').innerHTML,
	xtdCatTmpl=document.getElementById('briefTmpl_0_xtd').innerHTML;

 tmpl=document.getElementById('briefTmpl_'+MODE).innerHTML;

// alert(tmpl);
 var res='', s, lastCat=null, pResults=0;
 for (var i in rows) if (row=rows[i]) {
	if (lastCat!=row.cat) {
		if (lastCat) { 
			row.lastCat=lastCat;
			res+=xParse(xtdCatTmpl,row);
		}
		lastCat=row.cat;
		res+=xParse(chCatTmpl,row);
		pResults=0; SKIP=true;
	}
	pResults++;
	if ((MODE>0) || (pResults<4)) {
		s=xParse(tmpl,row);
		res+=s;
	}
 }
 if (MODE==0) {
	row.lastCat=row.cat;
	res+=xParse(xtdCatTmpl,row);
 }
 res+='<br><br>';
 return res;
}

function swCat(n) {
 var categ=Categs[n];
 var F=document.form1; 
 switch(categ.rc) {
	case '52': // Personas
		F.s_pers.value=n; break;
	case '65': // Centros
		F.s_cent.value=n; break;
	default: 
		alert('swCat('+n+')'); return false;
 }
 doSearch();
 return false;
}

function back2list() {
 resultsDiv.innerHTML=resultsDiv.prevHTML;
 return false;
}

function swDet(n) {
 resultsDiv.prevHTML=resultsDiv.innerHTML;
 var row=Rows[n];
 if (row.foto) {
	if (!row.img) {
		if (row.foto.search(/^[0-9]\.(gif|jpg|png)/i)==0) row.foto='file_'+row.id+'_'+row.foto;
		row.img='<img border=0 src="download/info/'+row.foto+'" width=128>';
 	}
 } else
	row.img='';
 if (!row.actlist) {
	row.actlist=row.actv.replace(/([0-9]+),?/g,function(cero,uno) { return ACTIVS[uno] + '<br>'} );
 }
 if (!row.servlist) {
	row.servlist=row.serv.replace(/([0-9]+),?/g,function(cero,uno) { return SERVS[uno] + '<br>'} );
 }
 var tmpl=document.getElementById('detTmpl').innerHTML;
 var s=xParse(tmpl,row);
 resultsDiv.innerHTML=s;
 return false;
}



var resultsDiv;

function setArea(n) {
 var ctl=document.form1.city;
 ctl.length=1;
 for (var i in CITIES) if ( (city=CITIES[i]) && ((!n) || descends(n,city.cat)) ) {
		var opt=new Option();
		opt.value=i;
		opt.text=CITIES[i].n;
		ctl.options.add(opt);
	}
}

function doSearch() {
 if (!resultsDiv) {
	resultsDiv=document.getElementById('resultsDiv');
 }
 var F=document.form1;
 var CRITERIA={
	s_pers: F.s_pers.value,
	s_cent: F.s_cent.value,
	location: F.location.value,
	city: F.city.value,
	actv: F.actv.value,
	serv: F.serv.value
 }

 var any=(CRITERIA.s_pers) || (CRITERIA.s_cent);
 if (any) 
	 for (var i in CRITERIA) 
		if ((i!='s_pers') && (i!='s_cent') &&  (CRITERIA[i])) { CRITERIA.any=1; break; }
 var res, s;
 if (CRITERIA.any) {
	 res=getSearchResults(CRITERIA);
	 s=getSearchResultsHTML(res);
 } else {
	s=document.getElementById('noCriteriaTmpl').innerHTML;
 }
 resultsDiv.innerHTML=s;
}



var showListObj={ refObj: null, resultsObj: null, showResults: null, win: null }
var SHOWLIST;

function show_list(rows,obj,showAt,title,cols) {
 if (!cols) cols=3;
// alert(rows);
 showListObj.refObj=rows;
 obj.showResultsObj=showAt;
 obj.refObj=rows;
 showListObj.resultsObj=obj;
 showListObj.showResults=showAt;
// alert(showListObj.showResults);
 showListCallBackObj=obj;
 var width=640;
 if (cols>3) width+=128*(cols-3);
 var w=window.open('','','width='+width+',height=360');
 SHOWLIST=w;
 w.document.write('<html><head><link rel="stylesheet" href="/SALUSLINE/style.css"></head><body>'+
	'<form name=form1 onsubmit="return false">' +
	MkCheckList('keys',rows,cols) +
	'<div align=center style="padding-top: 8px">' +
	'<input id=okBtn name=okBtn type=button onclick="return opener.showListCallBackFunc(this.form[\'keys[]\'])" value="OK">' +
	'<input type=button onclick="window.close()" value="Cancelar">' +
	'</div>' +
	'</form></body></html>');
 w.document.close();
 showListObj.win=w;
 setTimeout(function() {
	var w=showListObj.win;
	if (PLATFORM.MSIE)
		w.resizeTo(width,w.document.body.scrollHeight+64)
	else
		w.innerHeight=w.document.body.scrollHeight+10;
	}, 150);
}

function getItemListHTML(rows,refObj) {
 var list=refObj.value;
 if (list=='') return '';
 var s='', items=list.split(',');
 for (var i=0; i<items.length; i++) {
	var row=rows[items[i]];
	s+=row+'<br>';
 }
 return s;
}

function removeItemList(me) {
 var refObjId=me.getAttribute('refObjId');
 var itemId=me.getAttribute('itemId');
 var refObj=document.getElementById(refObjId);
 alert(refObj + ' ' + refObjId + ' ' + itemId);
}

function showListCallBackFunc(obj) {
 var rows=showListObj.refObj;
 var res=getCheckValues(obj);
 showListObj.resultsObj.value=res;
 updateListCtl(showListObj.resultsObj);
 showListObj.win.close();
 doSearch();
}

function updateListCtl(me) {
 var resObj=me.showResultsObj;
 var rows=me.refObj;
 var s=getItemListHTML(rows,me);
// alert('--\n'+s);
 resObj.innerHTML=s;
 return false;
}

function clean_list(ctl) {
 ctl.value='';
 if (!ctl.showResultsObj) return false;
 ctl.showResultsObj.innerHTML='Todo';
 doSearch();
 return false;
}


function initialize() {
 var F=document.form1;
 preInitialize();
// addGroupOptsToCombo(F.city,Categs,'n','cat');
 addOptsToCombo(F.location,ZONAS,'xn');
// addOptsToCombo(F.city,CITIES);
 addOptsToCombo(F.s_pers,CPERSONS,'xn');
 addOptsToCombo(F.s_cent,CCENTRES,'xn');
 var aid,area,cat;
 if (location.search.indexOf('test')>=0) { QueryString.area=13; QueryString.cat=67; }
 if (aid=QueryString.aid)
	swDet(aid);
 else {
	if (area=QueryString.area) F.location.value=area;
	if (cat=QueryString.cat) swCat(cat);
 }
	
 setArea(F.location.value);
 doSearch();
}

window.onload=initialize;

