// constants
var noValue = "" ;

// default values
var IDPais			= noValue ;
var IDcomunidad 	= noValue ;
var IDProvincia 	= noValue ;
var IDPoblacion 	= noValue ;
var IDNumPersonas 	= noValue ;
var baseCP 			= noValue ;
var tipo_zona       = noValue ;
var idCategorias    = new Array() ;
                  
//selects disabled true/false
var boolEnabled 	= true ;

// globals
var curOption 		= new Array() ;
var isLoaded 		= new Array() ;

//formulario...
var frm = "" ;

//funcion para el onLoad
function initLinkedSelect(frm , tipo_zona_) {
    tipo_zona = tipo_zona_ ;
    frm.elements["pais"].onchange = pais_onChange ;
    if (hasComunidades ()) {
    	frm.elements["comunidad"].onchange = comunidad_onChange ;
    }
    frm.elements["zona_o_prov"].onchange = zona_o_prov_onChange ;
	frm.elements["pid"].onchange = pid_onChange ;
   
}

function con_foto_onClick() {
    preselect(this.form.elements['id_pais_busqueda'].value,this.form.elements['zona_o_prov'].value, this.form.elements['pid'].value, this.form.elements['num_personas'].value, 1) ;
}

function check_onClick() {
    preselect(this.form.elements['id_pais_busqueda'].value,this.form.elements['zona_o_prov'].value, this.form.elements['pid'].value, this.form.elements['num_personas'].value, 1) ;
}

//preseleccion de lo seleccionado en el onLoad
function preselect(idPais,idComunidad, idProvincia, idPoblacion, idNumPersonas, selectable)
{
	frm = "document.forms['frm_search']" ;

    boolEnabled 	= selectable ;
    IDPais		 	= idPais ;
    IDComunidad 	= idComunidad ;
	IDProvincia 	= idProvincia ;
	IDPoblacion 	= idPoblacion ;
	IDNumPersonas 	= idNumPersonas ;
	// Inicializar los select
	initLists() ;
}

function initLists()
{

	// Vaciado de las listas
	emptyList('comunidad') ;
	emptyList('zona_o_prov') ;
	emptyList('pid') ;
	emptyList('num_personas') ;

	//if (eval(frm+'.elements["con_foto"].checked') == true) con_foto = "1" ;
	//else
		con_foto = "0" ;
	
	getCatsSelected();

	ls.getProvPobNumPersonas(IDPais, IDProvincia, IDPoblacion, con_foto, texto_todas_provincias, texto_zonas, texto_provincias, texto_todas_poblaciones, texto_personas, texto_persona, tipo_zona, idCategorias, cbFillProvPobNumPersonas) ;
}

function getCatsSelected()
{
	idCategorias = new Array();
	idCategoriasHTML = $('#categorias input:checked');
	for (var i=0; i<idCategoriasHTML.length; i++)
	{
		idCategorias[i] =  idCategoriasHTML[i].value;
	}
}

function cbFillProvPobNumPersonas (result)
{
		window.status = '' ;
		fillList('zona_o_prov',  result['zonas']) ;
		fillList('pid',  result['pid']) ;
		fillList('num_personas', result['numpersonas']) ;
}


function cbFillPobNumPersonas (result)
{
	window.status = '' ;
	fillList('pid',  result['pid']) ;
	fillList('num_personas', result['numpersonas']) ;
}


function cbFillNumPersonas (result)
{
	// callback for dependent listbox
	window.status = '' ;
	fillList('num_personas',result) ;
}

function cbAfterChangePid (result)
{
	
	if (result.kms) {
		$('#bloque_kms').show();
	} else {
		hideKms ();
	}
	delete result.kms ;
	cbFill (result);
}
function cbAfterChangePais (result)
{
	
	if (result.comunidad) {
		$('#bloque_comunidad').show();
	} else {
		hideComunidad ();
	}
	cbFill (result);
}


/**
 * Rellena cualquier grupo de listas que venga en los resultados del ajax
 * @param mixed result Array de resultados para los combos
 */
function cbFill (result)
{
	$('#zoom').val(result.zoom);
	$('#lat').val(result.lat);
	$('#long').val(result.long);
	delete result.zoom;
	delete result.lat;
	delete result.long;
	
	window.status = '' ;
	$.each(result, function(index){
		fillList(index,  this) ;
	});	
}
/**
 * 
 * Oculta el select de comunidades y lo pone a '' para cuando se selecciona paises que no tienen comunidades
 */
function hideComunidad () 
{
	$('select[name=comunidad]').val('');
	$('#bloque_comunidad').hide();
}
/**
 * 
 * Oculta el select de kms y lo pone a '' para cuando se selecciona poblaciones que no tienen kms
 */
function hideKms () 
{
	$('select[name=kms]').val('');
	$('#bloque_kms').hide();
}
/**
 * Comprueba si hay combo de comunidades en el formulario
 * @return
 */
function hasComunidades ()
{
	if($('select[name=comunidad] > option').length > 1) {
		return 1;
	} else {
		return 0;
	}
}

/**
 * Parte de manejo para los BO
 **/

function preselectCP(idProvincia, idPoblacion, selectable, mycp, idCalle)
{
	boolEnabled 	= selectable ;
	IDProvincia 	= idProvincia ;
	IDPoblacion 	= idPoblacion ;
    IDCalle 		= idCalle ;
    baseCP 			= mycp ;
    // Verificamos si existe el campo CP (codigo postal) necesario en los forms BO/PrBO
    var cpelem 		= eval(frm+'.elements["cp"]') ;
    if (cpelem)
    	cpelem.onkeyup 	= cp_onChange ;
	// Inicializar los selects con su contenido de base
	initListsCP() ;
}

/**
 *	Inicialización de los selects
 **/
function initListsCP()
{
	// Vaciado de elementos de provincia y población
    emptyList('selProvincia') ;
	emptyList('selPoblacion') ;
	// Recuperamos las listas de provincias, poblaciones
	linked_select(baseCP,texto_selecciona,cbFillProvPobCP) ;
}


function emptyList(listName)
{


	myfrm = eval(frm) ;
	var lst = myfrm.elements[listName] ;

	lst.options.length 	= 0 ;
	lst.onchange 		= null ;
	lst.disabled 		= !boolEnabled ;
	isLoaded[listName] 	= false ;
	curOption[listName] = noValue ;

	//dejamos el leyendo...
	lst.options[0] = new Option(texto_loading, "") ;
}



function fillList(listName,contenido)
{
	
	emptyList( listName ) ;
	myfrm = eval(frm) ;
	var lst = myfrm.elements[listName] ;
	
	// Actualizamos la longitud de la lista
	lst.options.length = contenido.length ;

	// options in form "value~displaytext|value~displaytext|..."
	for (var i=0;i<contenido.length;i++) {
		if (contenido[i].indexOf('~') != -1) {
			var aOptions = contenido[i].split('~') ;
			opt = new Option(aOptions[1], aOptions[0]) ;

			lst.options[i] = opt ;
			if (parseInt(aOptions[0]) == -1) {
				lst.options[i].className = "seltit" ;
			} else {
				lst.options[i].className = "normal" ;
			}
    	}
	}
	

	switch(listName)
	{
		case 'comunidad': 	    	ID = IDComunidad;
		break;
		case 'zona_o_prov': 	    ID = IDProvincia ;
		break;
  		case 'pid':				    ID = IDPoblacion ;
		break;
		case 'num_personas':		ID = IDNumPersonas ;
		break;
	}
	
	// init to no value
	if (ID) {
	selectOption(listName, ID) ;
	}
	isLoaded[listName] = true ;
	lst.disabled = !boolEnabled ;
	if (eval(listName + "_onChange"))
		lst.onchange = eval(listName + "_onChange") ;

}

function pais_onChange()
{
	var val = this.options[this.selectedIndex].value ;
	myform = eval(frm) ;
	if (!val == "")	{		
		activaBandera(val) ;
		IDPais= val;		
		IDComunidad = noValue ;
	    IDProvincia = noValue ;
	    IDPoblacion = noValue ;
	    IDNumPersonas = noValue ;
		curOption[this.name] = val ;
		// init dependent lists
		emptyList('comunidad') ;
		emptyList('zona_o_prov') ;
		emptyList('pid') ;
		emptyList('num_personas') ;
		hideKms ();
		window.status = texto_loading ;
		getCatsSelected();
		ls.getChangePais( IDPais,{	todasComunidades :  texto_todas_comunidades,
									todasProvincias :  texto_todas_provincias,
								  	todasPoblaciones: texto_todas_poblaciones, 
									zonas : texto_zonas,
									provincias: texto_provincias, 
									personas: texto_personas, 
									persona: texto_persona
								}
								, cbAfterChangePais) ;
	}
}

function comunidad_onChange()
{
	var val = this.options[this.selectedIndex].value ;
	myform = eval(frm);
	if (!val == "")	{		
		activaBandera(val);
		IDComunidad= val;		
	    IDProvincia = noValue ;
	    IDPoblacion = noValue ;
	    IDNumPersonas = noValue ;
		curOption[this.name] = val ;
		// init dependent lists
		emptyList('zona_o_prov') ;
		emptyList('pid') ;
		emptyList('num_personas') ;
		hideKms ();
		window.status = texto_loading ;
		con_foto = "0" ;
		getCatsSelected();
		ls.getChangeComunidad( IDComunidad, { todasProvincias : texto_todas_provincias,
											  todasPoblaciones: texto_todas_poblaciones,
											  zonas : texto_zonas,
											  provincias: texto_provincias,
											  personas: texto_personas,
											  persona: texto_persona
											}
		, cbAfterChangeComunidad) ;
	} else {
		$('select[name=pais]').change();
	}
}

function zona_o_prov_onChange()
{

	var val = this.options[this.selectedIndex].value ;

	myform = eval(frm) ;
	

	if (!val == "")
	{
		//console.debug($('select[name=pais]').val());
		activaBandera(val) ;
		IDPais=$('select[name=pais]').val();
	    IDProvincia = val ;
	    IDPoblacion = noValue ;
	    IDNumPersonas = noValue ;
		curOption[this.name] = val ;
		// init dependent lists

		emptyList('pid') ;
		emptyList('num_personas') ;
		hideKms ();
		window.status = texto_loading ;

		
		con_foto = "0" ;
		
		getCatsSelected();
		
		ls.getPobNumPersonas(IDPais,val,con_foto,texto_todas_poblaciones,texto_personas,texto_persona, tipo_zona, idCategorias, cbFillPobNumPersonas) ;
	} else {
		$('select[name=comunidad]').change();
	}
}


function pid_onChange()
{
	var val = this.options[this.selectedIndex].value ;
	if(val){
	curOption[this.name] = val ;
	emptyList('num_personas') ;
	window.status = texto_loading ;
	myfrm = eval(frm) ;
	IDPoblacion= val;		
	//ls.getNumPersonas(IDPais,val,IDProvincia,con_foto,texto_personas,texto_persona,tipo_zona, idCategorias, cbFillNumPersonas) ;ç
	ls.getChangePid( IDPoblacion, { 
		  todasPoblaciones: texto_todas_poblaciones,
		  personas: texto_personas,
		  persona: texto_persona
		}
		, cbAfterChangePid) ;
	} else {
		//todos
		$('select[name=zona_o_prov]').change();
	}		
}


function num_personas_onChange()
{
	var val = this.options[this.selectedIndex].value ;
	IDOptions = val ;
}

function selectOption( listName, optionVal ){

	myfrm = eval(frm) ;
	var lst = myfrm.elements[listName] ;
	for( var i = 0; i< lst.options.length; i++ )
	{
		if(lst.options[i].value == optionVal)
		{
			lst.selectedIndex = i ;
			curOption[listName] = optionVal ;
			return ;
		}
	}
}

function activaBandera(val) {}

