//variables
var tipos=new Array('vuelta_parada','ida_parada');

//Declaracionde funcions para trabllar coa class array
Array.prototype.isCoordenadaBaleira=function(){
for(var j in this){
	try{
		if(this[j][0]==""){
			return j;
		}
	}catch(e){
		return false;
	}
	}
	return false;    
}
	
	/*Seria mais ben un ten a...*/
	Array.prototype.in_array=function(){
			for(var j in this){
				try{
					if(this[j] == arguments[0]){
							return true;
					}
				}catch(e){}
			}
			return false;    
	}
	
function is_array(input){
	return typeof(input)=='object'&&(input instanceof Array);
}

/*
Array.prototype.puntoIn_array=function(){
			for(var j in this){
				try{
					if(this[j][0].x == arguments[0].x && this[j][0].y == arguments[0].y){
							return j;
					}
				}catch(e){}
			}
			return -1;    
	}
*/
/*Funcion que xenaera o codigo html emerxente*/
function addHtml(point,html,titulo,icon){
	try{
		if(icon!=""){
			var marker = new GMarker(point,icon);
		}else{
				var marker = new GMarker(point);
		}
		marker.value = titulo;
		GEvent.addListener(marker,"click", function() {
			try{
				map.openInfoWindowHtml(point, html);
			}catch(e){}
		});
/*
		GEvent.addListener(marker,"mouseout", function() {
			map.closeInfoWindow();
		});
*/
	}catch(e){alert(e.name + " - "+e.message);}
	return marker;
}


/*Engadir a linea ao mapa*/
function _engadeElemento(elem){
	if (is_array(elem)){		
		//alert("es Array, length=" + elem.length);
		for(var el in elem)
			map.addOverlay(elem[el]);
		return elem;		
	}
	else {
		//alert("No array:" + typeof(elem));
		map.addOverlay(elem);
		return elem;
	}
}
/*Engadir a linea ao mapa*/
function _retiraElemento(elem){
	map.removeOverlay(elem);
	return elem;
}

/*Mostra as lineas que existen no array*/
function _creaLineas(){
	try{
		for (i in arrayLineas) { 
			//var valor = i%3;
			if(typeof arrayLineas[i] == 'object'){
				arrayLineas[i]['lineas'] = new Array();
				for (var j=0;j< tipos.length;j++){					
					if(typeof arrayLineas[i][tipos[j]]['ptosLinea'] == 'object'){					
					 if(arrayLineas[i][tipos[j]]['ptosLinea']['trazo'])
					 	{
							var trazo=new Array();
							for(var x in arrayLineas[i][tipos[j]]['ptosLinea']['trazo'])
								trazo[x]=new GPolyline(arrayLineas[i][tipos[j]]['ptosLinea']['trazo'][x],arrayLineas[i]['color'], 3, 1)
							arrayLineas[i]['lineas'][tipos[j]]=_engadeElemento(trazo);
						}
					 else
					 	arrayLineas[i]['lineas'][tipos[j]] = _engadeElemento(new GPolyline(arrayLineas[i][tipos[j]]['ptosLinea'],arrayLineas[i]['color'], 3, 1));
						//LineaMapa[i]['ida_parada'] = _engadeElemento(new GPolyline(LineaFinal[i]['ida_parada']['linea'],arrayLineas[i]['color'], 3, 0.5));
					}
				}
			}
		}
	}catch(e){
			alert(i + 'erro na funcion _creaLineas \n'+e.name + " - "+e.message);
			//Temos que diferenciar as variables dos metodos en javascript
		}
	return false;
}

function _mostraParadas(lineas){
	try{
		var arrayCargados=new Array();
		for(var i=0;i<lineas.length;i++){
		/*Ainda hai que seleccionar os idiomas*/
			var icon = new GIcon();
			icon.image = '/mediateca/mapas/l_'+lineas[i]+'.png';
			//icon.image = 'http://tussa.acordando.com/imx/l_'+lineas[i]+'.png';
			icon.iconSize = new GSize(20, 16);
			icon.iconAnchor = new GPoint(0, 0);
	
			for (var j=0;j< tipos.length;j++){
				mostraPtosLinea(lineas[i],tipos[j],icon,arrayCargados);
			}
		}
	}catch(e){
		alert('erro na funcion _mostraParadas; \ni='+i+'\nj='+j+'\n'+e.name + " - "+e.message);
	}
}

/*Recibe o id de */
function mostraPtosLinea(idLinea,tipo,icono,arrayCargados){
	
	for (k in arrayLineas[idLinea][tipo]['paradas']){
		if(typeof arrayLineas[idLinea][tipo]['paradas'][k] == 'string'){
			var idParada = arrayLineas[idLinea][tipo]['paradas'][k];
			if(!arrayCargados.in_array(idParada)){
				var html="<div class=\"gmap_tussa\"><h4>"+arrayPuntos[idParada]['titulo']+"</h4><ul>";
				for(l in arrayPuntos[idParada]['html']){
					if(typeof arrayPuntos[idParada]['html'][l]['idLinea'] == 'number'){
						//alert(l+'-'+arrayPuntos[idParada]['html'][l]['nomeLinea']);
						var url = '';
						html += '<li><a href=\'http://tussa.acordando.com/web/linas.php?id='+arrayPuntos[idParada]['html'][l]['idLinea']+'&lg='+idioma+'\'>'+arrayPuntos[idParada]['html'][l]['nomeLinea']+'</a></li>'
					}
				}
				html+="</ul></div>";
				arrayPuntos[idParada]['marker'] = _engadeElemento(addHtml(arrayPuntos[idParada]['punto'],html,arrayPuntos[idParada]['titulo'],icono));
				arrayCargados.push(idParada);
			}
		}
	}
}

/*fai unha serie de chamadas para mostrar/ocultar a linea e as suas paradas*/
function activaLinea(linea,mostraCentro,mensaje){
	try{
		if(mensaje){
			cargaActivos();
			mostraTodasParadas(mostraCentro);
			visibleLinea(linea);
		}else{
			linea.checked=false;
			alert("non se pode mostrar a linea, posto que non debuxamos o mapa");
		}
	}catch(e){
		alert(e.name + " - "+e.message);
	}
		return false;
	}
	
/* Xenera o array lineasMostrar que conten as lineas activas para mostrar */
	function cargaActivos(){
		lineasMostrar = new Array();
		try{
			if(typeof document.getElementById('LineasActivas').lineas == 'object'){
				var lina = document.getElementById('LineasActivas').lineas;
				if(lina.length > 0){
					for (var i=0;i<lina.length;i++){
						if(lina[i].checked){
							lineasMostrar.push(lina[i].value);
						}
					}
				}else{
					if(lina.checked){
						lineasMostrar.push(lina.value);
					}
				}
			}
		}catch(e){
			alert(e.name + " - "+e.message);
		}
	}

/*Oculta ou mostra as paradas da lineas seleccionadas*/
function mostraTodasParadas(marcaCentro){
	try{	
		if(document.getElementById('mostraParadas').checked){
			lineasMostrarAux = lineasMostrar;
		}else{
			lineasMostrarAux = new Array();
		}
		_borraPuntos();
		_mostraParadas(lineasMostrarAux);
		if(marcaCentro){
			map.addOverlay(addHtml(centro,"","",""));
		}
	}catch(e){
		alert('Funcion mostraTodasParadas\n'+e.name + " - "+e.message);
	}
}

function mostraLinea(metodo,idLinea){
	_borraPuntos();
	var arrayCargados = new Array();
	var icon = new GIcon();
	icon.image = '/mediateca/mapas/l_'+idLinea+'.png';
	icon.iconSize = new GSize(20, 16);
	icon.iconAnchor = new GPoint(0, 0);
	if(metodo.value == 'ida_parada'){	
		if(is_array(arrayLineas[idLinea]['lineas']['ida_parada']))
			for(var x in arrayLineas[idLinea]['lineas']['ida_parada'])
				arrayLineas[idLinea]['lineas']['ida_parada'][x].show();
		else arrayLineas[idLinea]['lineas']['ida_parada'].show();				
		if(is_array(arrayLineas[idLinea]['lineas']['vuelta_parada']))						
			for(var x in arrayLineas[idLinea]['lineas']['vuelta_parada'])
				arrayLineas[idLinea]['lineas']['vuelta_parada'][x].hide();
		else arrayLineas[idLinea]['lineas']['vuelta_parada'].hide();
		
		if(document.getElementById('mostraParadas').checked){
			mostraPtosLinea(idLinea,'ida_parada',icon,arrayCargados);
		}
	}else if(metodo.value == 'vuelta_parada'){	
		
		if(is_array(arrayLineas[idLinea]['lineas']['ida_parada']))
			for(var x in arrayLineas[idLinea]['lineas']['ida_parada'])
				arrayLineas[idLinea]['lineas']['ida_parada'][x].hide();
		else arrayLineas[idLinea]['lineas']['ida_parada'].hide();				
		if(is_array(arrayLineas[idLinea]['lineas']['vuelta_parada']))						
			for(var x in arrayLineas[idLinea]['lineas']['vuelta_parada'])
				arrayLineas[idLinea]['lineas']['vuelta_parada'][x].show();
		else arrayLineas[idLinea]['lineas']['vuelta_parada'].show();
		
		if(document.getElementById('mostraParadas').checked){
			mostraPtosLinea(idLinea,'vuelta_parada',icon,arrayCargados);
		}
	}else{
		if(is_array(arrayLineas[idLinea]['lineas']['ida_parada']))
			for(var x in arrayLineas[idLinea]['lineas']['ida_parada'])
				arrayLineas[idLinea]['lineas']['ida_parada'][x].show();
		else arrayLineas[idLinea]['lineas']['ida_parada'].show();				
		if(is_array(arrayLineas[idLinea]['lineas']['vuelta_parada']))						
			for(var x in arrayLineas[idLinea]['lineas']['vuelta_parada'])
				arrayLineas[idLinea]['lineas']['vuelta_parada'][x].show();
		else arrayLineas[idLinea]['lineas']['vuelta_parada'].show();
				
		if(document.getElementById('mostraParadas').checked){
			mostraPtosLinea(idLinea,'ida_parada',icon,arrayCargados);		
			mostraPtosLinea(idLinea,'vuelta_parada',icon,arrayCargados);
		}
	}
}

function visibleLinea(Linea){
	for (var j=0;j< tipos.length;j++){
		if(Linea.checked){
			if(is_array(arrayLineas[Linea.value]['lineas'][tipos[j]]))
				for(var x in arrayLineas[Linea.value]['lineas'][tipos[j]])
					arrayLineas[Linea.value]['lineas'][tipos[j]][x].show();
			else arrayLineas[Linea.value]['lineas'][tipos[j]].show();
		}else{
			if(is_array(arrayLineas[Linea.value]['lineas'][tipos[j]]))
				for(var x in arrayLineas[Linea.value]['lineas'][tipos[j]])
					arrayLineas[Linea.value]['lineas'][tipos[j]][x].hide();
			else arrayLineas[Linea.value]['lineas'][tipos[j]].hide();
						
		}
	}
}

function _borraPuntos(){
	try{
		for(i in arrayPuntos){
			if(typeof arrayPuntos[i]['marker'] == 'object'){
				arrayPuntos[i]['marker'] = _retiraElemento(arrayPuntos[i]['marker']);
			}
		}
	}catch(e){
		alert('erro en iteracion '+i+'\n'+e.name + " - "+e.message);
	}
}

function calculaCentroLinea2(idLinea){
try{
	var rectangulo = new GLatLngBounds(arrayLineas[idLinea]['lineas']['ida_parada'].getBounds().getCenter(),arrayLineas[idLinea]['lineas']['vuelta_parada'].getBounds().getCenter());

	if(rectangulo.isEmpty()){
		rectangulo = new GLatLngBounds(arrayLineas[idLinea]['lineas']['vuelta_parada'].getBounds().getCenter(),arrayLineas[idLinea]['lineas']['ida_parada'].getBounds().getCenter());
	}
}catch(e){
	alert('Funcion calculaCentro Linea'+idLinea+'\n'+e.name + " - "+e.message);
}
return rectangulo.getCenter();
}

function calculaCentroLinea(idLinea){
try{
	var auxiliar = false;
	var recLinea1;
	var recLinea2;
	var linea1=arrayLineas[idLinea]['lineas']['ida_parada'];
	var linea2=arrayLineas[idLinea]['lineas']['vuelta_parada'];
	if(is_array(linea1)) recLinea1=arrayLineas[idLinea]['lineas']['ida_parada'][0].getBounds();
		else recLinea1 = arrayLineas[idLinea]['lineas']['ida_parada'].getBounds();
	if(is_array(linea2)) recLinea2=arrayLineas[idLinea]['lineas']['vuelta_parada'][0].getBounds();
		else recLinea2 = arrayLineas[idLinea]['lineas']['vuelta_parada'].getBounds();

	return recLinea1.getCenter();

/*Traballar a funcion que calcula o rectangulo que conten as duas lineas*/
	var rectangulo = new GLatLngBounds(recLinea1.getCenter(),recLinea2.getCenter());
	if(rectangulo.isEmpty()){
		var rectangulo = new GLatLngBounds(recLinea2.getCenter(),recLinea1.getCenter());
		auxiliar = true;
	}
	
	if(auxiliar){ 
		if(!rectangulo.containsLatLng(recLinea2.getCenter())){
			rectangulo.extend(recLinea2.getCenter());
		}
		if(!rectangulo.containsLatLng(recLinea1.getCenter())){
			rectangulo.extend(recLinea1.getCenter());
		}
		//alert(auxiliar);
	} else{
		if(!rectangulo.containsLatLng(recLinea1.getCenter())){
			rectangulo.extend(recLinea1.getCenter());
		}
		if(!rectangulo.containsLatLng(recLinea2.getCenter())){
			rectangulo.extend(recLinea2.getCenter());
		}
	}
}catch(e){
	alert('Funcion calculaCentro Linea'+idLinea+'\n'+e.name + " - "+e.message);
}
	return rectangulo.getCenter();//hai lineas nas que non se calcula ben
}

