// JavaScript Document


//*******************HERRAMIENTAS*********************
//    *******************************************


// 1- mouseDownRubberBand: Funcion que inicializa el cuadrado encima del objeto mapa, una vez que se pulsa el boton.
//(evento onmouseDown).
//	  Parametros:
   					// 1- div: El objeto a quien se le va a realizar encima el cuadrado. Por ejemplo al objeto mapa
					// 2- e: La palabra reservada event.
					// 3 - fName: La funcion que ejecutara conjunto con el rubberband, por ejemplo zoomrect u otro definido
									
function mouseDownRubberBand(div,e,fName){
	
	//Seeleccionamos el div dentro del iframe
	var MapObj = selectDivIframe(div);
	//Se asigna una posicion estatica al objeto que contiene la image del mapa para poder reaalizar el cuadrado encima de este
	MapObj.attr("style","position:static");
	
	// Asigno a la bandera 0 para que deje de dibujar la linea continuamente y pueda volver a realizar ruler
	//parent.document.op_map.OneLine.value = 0;
	
	var rubberBandDiv = selectDivIframe("rubberBand");//Seeleccionamos el div

	//Inicializamos el cuadrado con un ancho y alto de 0
	rubberBandDiv.css("width",0);
	rubberBandDiv.css("height",0);
	
	//OGuardamos el x y y del evento click 
	var x1 = e.clientX;
	var y1 = e.clientY;

	//Aignamos los valores del click, inicializando el cuadrado en esa posicion
	rubberBandDiv.css({'left' : ''+x1}) ;
	rubberBandDiv.css({'top' : ''+y1}) ;
	
	//Mostramos el cuadradado 
	rubberBandDiv.css("visibility","visible");
	
	//Le asignamos la posicion absoluta para que este se pueda ir modificando mientras se va arrastrando el mouse
	rubberBandDiv.css("position","absolute");
		
	//Obtenemos el body del iframe Map
	var objDiv = $("#Map").contents().find("body");
		
	//Asignamos el evento onmousemove para realizar el cuadrado
	objDiv.mousemove( function(e){
							  
			//Mientras se arrastre el mouse, se va mostrando el cuadrado
			mouseMoveRubberBand(e,x1,y1,rubberBandDiv);
	})	
	
			
		//Asigamos el evento onmouseup para parar el evento onmousemove una vez que se levanta el boton del mouse
	objDiv.mouseup(function(e){
				   
		//Eliminamos el evento onmousemove del objeto objDiv
		objDiv.unbind("mousemove");
			
		//Eliminamos el evento onmouseup del objeto objDiv	
		objDiv.unbind("mouseup");
		
		//Ocultamos la capa del cuadrado rubberBandDiv
		rubberBandDiv.css("visibility","hidden");				
		//Evaluamos si existe alguna funcion a ejecutar luego de realizar el rubberband
		if(fName != null){
					
			var x2 = e.clientX;
			var y2 = e.clientY;	
			
			//True: Si lo que se desea es realizar un zoomrect conjunto con el rubberband
			//OJO: Si se desea agregar otra funcionalidad a aparte del zoomrect, se le agrega al final del else
			if(fName == "ZoomRect"){
				
				//Evaluamos en el caso de que el buffer sea muy pequeño. Se realizara un zoomin en vez de un zoomrect para este caso
				//Si x1 es menor que x2, se le resta a x1 y se le suma a x2 para aumentar el buffer
				if(x1<x2){
	
					var x1Alpha = x1-2;
					var x2Alpha = x2+2;
				}else{//Lo contrario
	
					var x1Alpha = x1+2;
					var x2Alpha = x2-2;	
				}
							
				//Si y1 es menor que y2, se le resta a y1 y se le suma a y2 para aumentar el buffer
				if(x1<x2){

					var y1Alpha = y1-2;
					var y2Alpha = y2+2;
				}else{//Lo contrario

					var y1Alpha = y1+2;
					var y2Alpha = y2-2;	
				}
				
				//Calculamos la distancia entre los dos puntos
				var DistanceCoord = Math.sqrt(Math.abs(x1Alpha-x2Alpha) + Math.abs(y1Alpha-y2Alpha));
				if(DistanceCoord < 5){
						ZoomIn(e); //Se realiza zoomin
				}else{
						ZoomRect(x1,y1,x2,y2);//Se realiza el zoomRect
				}
				
			}
		}
	})
}



// 2- mouseMoveRubberBand: Funcion que mientras se va moviendo el mouse, se va mostrando el cuadrado
//(evento onmouseDown).
//	  Parametros:
   					//  1- e: La palabra reservada event.
					// 	2- x,y: Los valores iniciales al pulsar el mouse.
					//  3- obj: EL objeto que respresenta el cuadrado. Por ejemplo la capa rubberband definida en AjaxGeneral.php

function mouseMoveRubberBand(e,x,y,obj){
	
	if(x<0)
	{	
		obj.css("bottom",x);
		obj.css("right",y);

	}else
	{
		//Se hace el calculo del ancho del cuadrado en tiempo real.						
		var widthobj = e.clientX -  parseInt(obj.css("left")); //390
		
		//Se hace el calculo del alto del cuadrado en tiempo real.			
		var heightobj = e.clientY -  parseInt(obj.css("top"));

		//Se le asignan estos valores al ancho y largo de la capa del cuadrado
		obj.css({'width' : ''+widthobj}) ;
		obj.css({'height' : ''+heightobj}) ;
	}
}


//Funcion ZoomIn: Realiza el zoom por medio de un click.
//Parametros:   1- e: el evento o palabra reservada event
function ZoomIn(e){ 
	ajaxLoadImage('Load/AjaxZoomIn.php',"mapa_x=" + e.clientX + "&mapa_y=" + e.clientY + "&zsize=" + 2,'ImageDiv',true);		
}


//Funcion ZoomIn: Realiza el zoom out o alejar por medio de un click.
//Parametros:   1- e: el evento o palabra reservada event
function ZoomOut(e){
	ajaxLoadImage('Load/AjaxZoomOut.php',"mapa_x=" + e.clientX + "&mapa_y=" + e.clientY + "&zsize=" + 2,'ImageDiv',true);		
}


//Funcion ZoomRect: Realiza el zoom rectangulo.
//Parametros:   1- x1,y1,x2,y2: puntos del click inicial (x1,x2) y del click final (x2,y2).
function ZoomRect(x1,y1,x2,y2){
	ajaxLoadImage('Load/AjaxZoomRect.php',"value=" + 1 + "&FPixelX=" + x1 + "&FPixelY=" + y1 + "&SPixelX=" + x2 + "&SPixelY=" + y2,'ImageDiv',true);
}


//Funcion CENTER: Centra el mapa.
//Parametros:   1- x1,y1,x2,y2: puntos del click inicial (x1,x2) y del click final (x2,y2).
function Center(e){
	ajaxLoadImage('Load/AjaxCenter.php',"mapa_x=" + e.clientX + "&mapa_y=" + e.clientY,'ImageDiv',true);
}


//Funcion Ruler: Funcion que realiza el evento de la regla.
//Parametros:   1- e: palabra reservcada event.
//              2- divRulerInfo: div donde se muestra la informacion de la regla
function Ruler(e,divRulerInfo){
	
	//Al inicio se comienza con dibujar un punto.
	
	//Puntos que contiene el primer punto x1 y y1. Este valor se modifica luego de que pinte la primera linea y se va actualizando con el primer punto de la linea.
	var x1 = e.clientX;
	var y1 = e.clientY;
	
	//alert("x1: "+x1+", y1: "+y1);
	
	ajaxLoadImage("Load/AjaxPointLine.php","x1="+ x1 + "&y1=" + y1,'ImageDiv',true);
	
	//Mostramos la capa del resultado del ruler
	$("#"+divRulerInfo).css("visibility","visible");
	RelocateObject(divRulerInfo, RULER_LEFT, RULER_TOP);
	
	//Se muestra la informacion del resultado de la distancia, en este caso mostrara 0 porque esta iniciando el evento.
	ajaxLoadData("Load/AjaxDistance.php","x1=0&y1=0&x2=0&y2=0","#"+divRulerInfo);
	
	
	//Luego de mostrar el punto, se cambia el evento a dibujar solamente lineas 
	var objDivMap = selectDivIframe("ImageDiv");
	
	//Eliminamos el evento mousedown definido anteriormente, ya que si no se elimina, jquery asigna ambos eventos al mismo tiempo
	selectDivIframe("ImageDiv").unbind("mousedown");
	
	//Creamos denuevo el evento onmousedown
	objDivMap.mousedown( function(e){
							
		//Se comienza a dibujar la linea. Inicio 
		ajaxLoadImage("Load/AjaxDrawLine.php","x1=" + x1  + "&y1=" + y1  + "&x2=" + e.clientX + "&y2=" + e.clientY,'ImageDiv',true);
		
		//Mostramos la capa del resultado del ruler
		$("#"+divRulerInfo).css("visibility","visible");
	
		RelocateObject(divRulerInfo, RULER_LEFT, RULER_TOP);
		
		//Se muestra la informacion del resultado de la distancia, en este caso las sumas de los resultados.
		ajaxLoadData("Load/AjaxDistance.php","x1=" + x1  + "&y1=" + y1  + "&x2=" + e.clientX + "&y2=" + e.clientY,"#"+divRulerInfo);
		//Actualizamos los valores de x1 y y1 por los nuevos puntos iniciales.
		x1 = e.clientX;
		y1 = e.clientY;	
	})	
}


//Function dragMap: Esta funcion realiza el drag sobre el mapa. Esta funcion debe estar incluida dentro del iframe y se puede llamar desde afuera o dentro.
//Parametros:  objDiv para relizar el drag
function dragMap(objDiv){

	//Variables globales para poderlas utilizar dentro de las funciones
	var objDivMap =objDiv;
	var x = 0 ;var y = 0 ;

	$(document).ready(function(){
		$("#map").draggable({
			start: function(event,ui){
				
				//Limpiamos el resultado si el usuario realizo el evento de la regla
					
				if(parent.$("#RulerInfo").css("visibility")=="visible"){
				   parent.CleanDiv("#RulerInfo");
				   parent.ExecuteFile("AjaxCleanDistanceValue.php","");
				}
														
				//Limpiamos el resultado del info si el usuario realizo el evento info
				if(parent.$("#divInfo").css("visibility")=="visible"){
					parent.CleanDiv("#divInfo");
					//Para el caso del div de Info, hay que asignar al display none
					parent.$("#divInfo").css("display",'none');	
				}
				
				 x = event.clientX;
				 y = event.clientY;
				
			},
			cancel: null, 			
			stop: function(event, ui) {
			
			ajaxLoadImageDrag("AjaxPan.php", "x1=" + x  + "&y1=" + y  + "&x2=" + event.clientX + "&y2=" + event.clientY,"#ImageDiv");	
			
			dragMap(objDivMap);
			
			}
		});
   })
}


//Function infoMap: Esta funcion realiza el Info sobre el mapa. 
//Parametros:  1- objDiv: el div donde se mostrara el info.
//			   2- DivInfo: El div que contiene el codigo que le da la forma al info.

function infoMap(urlajax,dataajax,divInfo,formInfo,idtxtInfo,x,y){

	$(divInfo).css("visibility","visible");
	$(divInfo).css("display","block");

	RelocateObject("divInfo", x+INFO_LEFT, y+INFO_TOP);

	ajaxLoadInfo(urlajax,dataajax,divInfo,formInfo,idtxtInfo);
	
}

//Esta funcion cierra la ventana de Info. Se define en General debido a que el div de Info se encuentra en General.
function closeInfo()
{
	$("#divInfo").css("visibility",'hidden');		
	$("#divInfo").css("display",'none');	
}


//Function allMap: Esta funcion muestra todo el mapa. Toma el ancho y el alto mediante una variablñe global definida en Map.js 
	
function allMap(){
		
		$("#ZoomIn").attr("src", "../Images/Map/Tools/GIF/UBICATE_+.gif");
		$("#ZoomOut").attr("src", "../Images/Map/Tools/GIF/UBICATE_-.gif");
		$("#center").attr("src", "../Images/Map/Tools/GIF/UBICATE_CENTRAR.gif");
		$("#info").attr("src", "../Images/Map/Tools/GIF/UBICATE_INFORMACION.gif");
		$("#ruler").attr("src", "../Images/Map/Tools/GIF/UBICATE_DISTANCIA.gif");
		$("#pan").attr("src", "../Images/Map/Tools/GIF/UBICATE_MOVER.gif");
		
	//Limpiamos el resultado si el usuario realizo el evento de la regla
	if($("#RulerInfo").css("visibility")=="visible"){
		CleanDiv("#RulerInfo");
		ExecuteFile("AjaxCleanDistanceValue.php","");
	}
	//Limpiamos el resultado del info si el usuario realizo el evento info
	if($("#InfoDiv").css("visibility")=="visible"){
		CleanDiv("#InfoDiv");
	}
	
	ajaxLoadImage('Load/AjaxAllCountry.php',"width=" + width + "&height=" + height,'ImageDiv',true);
}


//Functin DeleteSearchFileTemp: Elimina los archivos temporales relacionados a las busqueda. Cuando un usuario realiza una busqueda, este crea unos archivos con el contenido de la busuqeda. Lo que se elimina es el contenido.
function DeleteSearchFileTemp(){

ajaxLoadImage("Load/AjaxDeleteSearch.php","",'ImageDiv',true);	

		$("#ZoomIn").attr("src", "../Images/Map/Tools/GIF/UBICATE_+.gif");
		$("#ZoomOut").attr("src", "../Images/Map/Tools/GIF/UBICATE_-.gif");
		$("#center").attr("src", "../Images/Map/Tools/GIF/UBICATE_CENTRAR.gif");
		$("#info").attr("src", "../Images/Map/Tools/GIF/UBICATE_INFORMACION.gif");
		$("#ruler").attr("src", "../Images/Map/Tools/GIF/UBICATE_DISTANCIA.gif");
		$("#pan").attr("src", "../Images/Map/Tools/GIF/UBICATE_MOVER.gif");

}


//Funciones que tienen que ver con ruteo:
//function windowRTO(): Muestra una ventana con la interfaz para realizar el ruteo:
function windowRto(){
	
	window.open('../Rto/ResultadosRTO.php','windowRto','width=900,height=700,resizable=yes,scrollbars=yes','_blanck');

}

//function DeleteRTOFileTemp(): elimina del mapa la ruta:
//Nota: La ruta del archivo tiene que ser a la carpeta Rto.
function DeleteRTOFileTemp(){
	ajaxLoadImage("../Rto/Load/AjaxDeleteRTO.php","",'ImageDiv',true);	
}


